Codesys—标准库ModbusTCP Slave(服务器)的通讯示例
简述:此文中,PLC/控制器作为Modbus TCP从站(服务器),PC端通过Modbus Poll软件创建Modbus TCP主站(客户端)连接到PLC/控制器,双方可互相读写定义好的保持寄存区和离散点位区;
主要描述了以下几个要点:
1.设备的添加。
2.通讯参数的设置。
3.IO映射。
4.Modbus Poll 建立客户端。
5.简单通讯测试。
1.设备的添加。
ModbusTCP从站设备的添加如下图所示,首先添加【Ethernet】,然后添加设备【ModbusTCP_Slave_Device】。
2. 通讯参数的设置
在已经搜索到设备的状态下,点击【Ethernet】设备->【通用】->【Browse...】,此时将自动在网络上搜索可用的网络设备,选择想要连接的PLC/控制器的【IP地址】(本例子为192.168.1.101)所在行,点击确认。
选择【ModbusTCP_Slave_Device】设备->【通用】,如下图所示,保持寄存器后侧勾选【可写入】,此时允许客户端对保持寄存器进行写入,若不勾选则客户端仅能进行只读访问。
保持寄存器区的数量允许自定义,按需定义;
需要勾选离散位区域后,才能进行线圈读写的通讯;线圈的个数也是自定义,注意1表示1个bit,此处设置64bit,共8个字节。
数据模型,起始地址为Modbus地址,默认为0,可按需设置;
3.IO映射
在程序的全局变量表中,定义了两个数组分别用来存储通讯变量;
第1个是数组大小为20,数据类型为16位的数组,前10个数据为控制器写PC端读,后10个数据为PC端写控制器读。
第2个是数组大小为8,数据类型为8位的数组,前4个字节为控制器写PC端读,后4个字节为PC端写控制器读。
然后在【Modbus TCP Slave Device IO映射】选择全局变量表中定义好的变量,如下图所示
4.Modbus Poll建立客户端
打开PC端的Modbus Poll软件,创建客户端连接到控制器的服务器。
菜单栏选择【Connection】,点击【Connnect】
弹出窗口【Connection Setup】中选择【TCP/IP】,在【Remote Server】中填入控制器端服务器配置的IP地址和端口号,如下图所示,
5.简单通讯测试
首先测试16位数据的读写通讯,在Modbus Poll软件中设置,使用03功能码,地址为0,数据长度为20,如下图设置。
控制器程序中,给【TCP_通讯字】的前10个分别赋值1~10,此时观察右侧Modbus Poll软件中的显示,ALias表示地址偏移,在地址0~9对应显示1~10,则控制器写,Modbus Poll读的16位数据测试通过,参考下图。
首先在Modbus Poll中通过双击数据,直接修改数据,此处在地址为10处开始,依次赋值111、222、333到1010,共10个数据;此时观察左侧,在全局变量表中监控控制器读取到相应的数据,至此,则Modbus Poll写,控制器读的16位数据测试通过,参考下图。
在Modbus Poll软件中设置,使用01功能码,地址为0,数据长度为64,如下图设置。
控制器程序中,给【TCP_通讯字节0】的前8个位分别按如下图赋值,此时观察左侧Modbus Poll界面中,其中1为TRUE,0为FALSE;至此,控制器写,Modbus Poll读的1位数据测试通过.
在左侧Modbus Poll软件上,向地址32开始,依次写入不同顺序的ON,OFF,如下图左侧所示,此时在右侧Modbus TCP Slave IO映射画面中,找到第5个字节(线圈[4]) ,可看到一一对应,此时Modbus Poll写,控制器读的1位数据测试通过。