1. 硬件准备与网络配置
在实际动手之前,得先确认手头的家伙事儿是否齐全。两台西门子S7-1200 PLC是必须的,我这里用的是1215C做客户端,1217C做服务器。如果你用的是其他型号,只要固件版本支持Modbus TCP指令,操作基本一样。网线直接怼上或者通过交换机连接都行,关键是IP地址要在同一网段,比如客户端192.168.0.15,服务器192.168.0.17,子网掩码255.255.255.0。
记得检查PLC的固件版本,V4.1以上才支持Modbus TCP V4.0指令库。打开TIA Portal(建议V16或更高版本),先给两台PLC配好IP。在设备视图里双击PLC的PROFINET接口,属性里找到以太网地址,手动设置就行。硬件标识符一般默认为64,这个后面配置连接时会用到。
我第一次搞的时候没注意防火墙,结果ping都ping不通。后来发现Windows防火墙会把ICMP包拦掉,直接在防火墙高级设置里开个放行规则就解决了。如果网络里有路由器或三层交换机,记得检查VLAN配置,避免数据包被隔离。
2. 服务器端数据块配置与地址映射
服务器端配置的核心是把数据映射到Modbus地址上。这里有个容易踩坑的点:Modbus地址和PLC数据地址的换算关系。Modbus的40001对应的是保持寄存器的起始地址,但在PLC里需要映射到具体的数据块。
我在TIA Portal里给1217C新建了个DB块,命名为MBSERVERDATA,取消“优化的块访问”选项(这点很重要,否则指针寻址会出错)。然后建了16个Int类型的变量,前8个对应40001-40008,后8个对应40009-40016。实际使用时,40001对应DB1.DBW0,40002对应DB1.DBW2,以此类推。每个Word占2个字节,所以地址偏移量是2的倍数。
MB_SERVER指令的MB_HOLD_REG参数要用指针指向这个数据区。我习惯用P#DB1.DBX0.0 WORD 16这样的格式,这样16个Word刚好覆盖40001到40016。如果数据块是优化访问的,只能使用基本数据类型的数组,比如Array[0..15] of Int。


1万+

被折叠的 条评论
为什么被折叠?



