You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过TCP Socket连接MariaDB为S7-1200 PLC实现INSERT操作?

S7-1200通过TCP Socket连接MariaDB执行INSERT的可行性与实现要点

完全可以通过TCP Socket实现S7-1200与MariaDB的INSERT操作,核心原因是MariaDB兼容MySQL的TCP通信协议,只要在PLC端实现该协议的握手、认证、SQL执行流程即可。以下是具体实现的关键要点:

1. 必须掌握MariaDB/MySQL的TCP协议核心流程

MariaDB的TCP通信遵循MySQL协议,核心步骤如下:

  • 连接建立:通过TCON功能块建立与MariaDB服务器(默认端口3306)的TCP连接
  • 握手阶段:服务器会主动发送握手包,包含版本号、随机认证字符串、服务器能力标识等信息,PLC需要解析这些参数
  • 认证阶段:PLC构造认证响应包,其中密码需要按照mysql_native_password算法加密(SHA1(SHA1(明文密码)) XOR SHA1(随机数+SHA1(SHA1(明文密码)))),并携带用户名、目标数据库名等信息发送给服务器
  • SQL执行:认证通过后,发送COM_QUERY命令包,携带INSERT语句的明文(注意编码匹配),服务器执行后返回结果包

2. S7-1200端的具体实现步骤

  • TCP连接维护:使用西门子标准的TCON、TSEND_C、TRCV_C功能块管理Socket连接,处理连接断开后的重连逻辑
  • 协议解析与构造:
    • 用TRCV接收服务器的握手包,提取16字节随机数等关键字段
    • 实现SHA1哈希算法(可通过第三方ST代码或功能块),按照MySQL认证规则计算密码密文
    • 按照MySQL数据包格式(3字节长度+1字节序列号+ payload)构造认证包和SQL命令包,通过TSEND发送
  • 结果校验:接收服务器返回的执行结果包,解析是否存在错误码,确认INSERT操作成功

3. 常见问题与避坑指南

  • 密码加密错误:这是登录失败的最常见原因,必须严格按照mysql_native_password的逻辑实现哈希计算,不能直接发送明文密码
  • 数据包格式错误:每个MySQL数据包的头部必须是3字节的小端序长度+1字节的序列号,payload长度必须与头部声明一致
  • 字符编码不匹配:确保PLC发送的INSERT语句编码与MariaDB数据库的编码(如UTF-8)一致,避免乱码导致SQL执行失败
  • 超时处理:设置合理的TRCV超时时间,避免因服务器响应慢导致PLC报错

4. 简化实现的替代方案

如果手动实现MySQL协议成本过高,可以考虑:

  • 中间件中转:在局域网内部署一台PC或嵌入式设备,运行自定义服务(如Python/Java编写),S7-1200通过简单TCP协议发送待插入的数据,中间件负责与MariaDB交互并返回结果
  • 第三方功能块:部分工业自动化厂商提供兼容MariaDB/MySQL的通信FB,可直接集成到S7-1200项目中,省去协议开发的工作量

内容的提问来源于stack exchange,提问作者AlexMacabu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:52:37