一、 测试环境
硬件:CPU1214C DC/DC/DC 6ES7 214-1AG40-0XB0 S V-K4A12823 2018
编程软件:Portal V15
其他测试软件:modscan32(modbus测试软件客户端,发送数据测试用),modsim32(modbus测试软件服务端,提供数据测试用)
其他说明:电脑连接PLC通讯口的IP地址为:192.168.0.241;PLC设置IP地址为192.168.0.1;
二、 测试过程
1. PLC程序编程
1.1. 程序画面:

1.2. 主程序OB1
程序段1:PLC1200作为客户端,与测试软件通讯


1.3. 1200PLC客户端数据块rcv(存放数据)和网络连接数据块tcp(存放网络连接参数)
1.3.1. rcv数据块配置

定义aa数组变量(20个数据),数据类型为Array[0..20] of Word
1.3.2. tcp数据块配置

1.4. 1200PLC服务端数据块ser和(存放数据)和网络连接数据块tcp_ser(存放网络连接参数)
1.4.1. ser数据块配置

定义bb数组变量(20个数据),数据类型为Array[0..20] of Word
1.4.2. tcp_ser数据块配置

2. 使用Modbus通讯测试软件分别作为服务端和客户端,同1200编辑的客户端和服务端程序进行测试;
2.1. 为确认测试软件功能正常,首先进行modbus通讯测试软件进行收发测试
2.1.1. Modsim作为服务端,同modscan客户端通讯
2.1.2. 设置通讯模式为modbus/tcp svr,在弹出对话框中设置端口为502


2.1.3. 设置设备ID为1,通讯开始地址为1,数据数量为20,通讯模式为03

2.1.4. 在connect中设置客户端连接参数,


2.1.5. 设置设备ID为1,通讯开始地址为1,数据数量为20,通讯模式为03

2.1.6. 然后就会发现服务端和客户端的数据已经连接并且为一致的

2.2. Modbus通讯测试软件作为服务端,1200PLC作为客户端进行通讯测试

改变服务端或客户端40001-40010任意数值(PLC程序中读取数据为10个),两边的数值均会同步改变;
2.3. Modbus通讯测试软件作为客户端,1200PLC作为服务端进行通讯测试
设置modscan地址为1,数据个数为20,通讯模式为03

然后选择Connection-Connect,设置服务端参数如下:

点击OK后,即可取得两端通讯数据;

3. 使用modbus tcp通用协议,使MCGS上位机软件和modbus测试工具进行通讯测试;测试成功后,再进行MCGS上位机软件与1200通讯测试;
3.1. MCGS上位机软件和modbus测试工具(服务器端)进行通讯测试
组态硬件,设置TCP/IP父设备-标准TCP子设备

通用TCP/IP父设备参数设置


标准Modbus TCP子设备参数设置


设置设备内部属性



在设备调试中已可读取

新建变量,建立内部参数与变量的连接,建立画面,如下图,测试成功

3.2. MCGS上位机软件和1200PLC进行通讯测试
修改父设备IP地址为192.168.0.1(PLC地址),其他参数及配置保持不变

运行MCGS工程,可发现组态画面中数据与PLC中数据一致,任意修改一端数据,另一端数据均会同步发生变化。

至此,全部测试均已通过,测试成功!
4. 注意事项
1. 数据块属性中块优化勾选项去除,便于进行直接寻址

2. PLC作为客户端需要注意通讯系统背景数据块中参数MB_Unit_ID(默认为255),使用ModSim通讯测试软件时,需注意将ModSim中ID设置与PLC中MB_Unit_ID参数一致;

参考资料:
http://www.ad.siemens.com.cn/productportal/Prods/S7-1200_PLC_EASY_PLUS/PROFINETnew/Modbus%20TCP%20V4/Modbus%20TCP(V4.0)%20Client.html
3. 当排查参数及测试服务器都正常,但是仍有status报错80C8,ERROR一直触发;可尝试停止CPU运行,再次开启即可恢复。
例程如下
1 1200程序(归档项目博图V15).zip
3 MCGS测试程序(通用版).zip