西门子S7-1200做Modbus TCP从站,参数设置和程序实例

一个做水处理项目的朋友问我:厂里有一台西门子S7-1200,上位机要用Modbus TCP读取数据,S7-1200能不能做从站?当然能。S7-1200从固件V4.0开始就原生支持Modbus TCP通信,不用额外买通讯模块。

这篇文章把从站配置的步骤拆细了写,照着做就能搞定。

S7-1200 Modbus TCP

一、硬件要求和软件准备

  • PLC:西门子S7-1200(任何CPU型号都行,固件版本≥V4.0)
  • 软件:TIA Portal V16及以上版本
  • 库文件:Modbus TCP库指令(TIA Portal自带,不需要额外下载)

二、组态步骤

第1步:在TIA Portal中新建项目,添加S7-1200 CPU。双击设备组态,设置PLC的IP地址(比如192.168.1.10)。

第2步:在程序块中调用Modbus TCP库指令。S7-1200做从站,只需要一条指令:

"MB_SERVER"  
DB: "MB_SERVER_DB"  
CONNECT: "Connection_Data"  
IP_PORT: 502  
MB_HOLD_REG: "Modbus_Data"  
NDR: "NDR"  
DR: "DR"  
ERROR: "Error"  
STATUS: "Status"

第3步:创建连接数据块”Connection_Data”,配置如下:

// 连接数据块参数
Connection_Data.InterfaceId: 64    (PLC的PROFINET接口)  
Connection_Data.ID: 1              (连接ID,随便设)  
Connection_Data.ConnectionType: 16 (TCP连接)

第4步:创建保持寄存器数据块”Modbus_Data”,数据类型为Array[0..99] of Word,共100个字,对应Modbus地址40001-40100。

三、上位机测试

PLC程序下载好之后,用Modbus调试工具测试:

  1. 打开ModScan或类似的Modbus调试软件
  2. 填写PLC的IP地址(192.168.1.10),端口502
  3. 从站ID填255(S7-1200默认)
  4. 功能码03(读取保持寄存器),起始地址0,读取10个寄存器

如果一切正常,应该能读到寄存器里预先写入的数据。

四、常见问题

Q:连接不上,Ping不通PLC?
A:检查网线、IP地址、子网掩码。PLC和上位机必须在同一网段。

Q:MB_SERVER报错,STATUS=16#8080?
A:连接数据块参数不对。检查InterfaceId是否为64,ConnectionType是否为16。

Q:能连接但读不到数据?
A:检查Modbus地址映射。S7-1200的保持寄存器从40001开始,对应DB块的索引0。

Q:多个上位机同时读,会不会冲突?
A:S7-1200的MB_SERVER同时支持多个客户端连接(最多8个),不会冲突。

五、实际项目心得

这套方案我用在过好几个项目里——水处理、空压机监控、光伏逆变器数据采集。S7-1200做从站,上位机用组态王或者Python都能轻松对接。

需要注意一点:Modbus TCP是开放性协议,如果PLC暴露在公网上,要注意网络安全。我一般会加一个工业防火墙,或者通过VPN隔离。遇到过的情况是,上位机直接连PLC没问题,但中间隔了好几层交换机,就要注意通讯超时时间的设置。

S7-1200走Modbus TCP做从站,你配过吗?遇到过什么坑?

上一篇 PLC控制压电阀实现多段点胶参数切换,配方功能实战
下一篇 威纶通触摸屏与三菱FX5U/FX3U PLC通讯设置,新手也能一次搞定