本示例中使用了两个S7-1200CPU,CPU之间采用ModbusTCP通信。CPU1为Modbus TCP客户端,其IP地址为192.168.0.215;CPU2为ModbusTCP服务器,其IP地址为192.168.0.217。通信任务是ModbusTCP客户端读取ModbusTCP服务器Modbus地址10001~10008(I0.0~I0.7)数据,并将读取到8位数据取反后写入到ModbusTCP服务器Modbus地址00001~00008(Q0.0~Q0.7)。
1.CPU1编程组态
(1)设备组态
使用TIA博途软件创建新项目,并将CPU1215C作为新设备添加到项目中。在设备视图的巡视窗口中,将CPU属性作如下修改:
•在“PROFINET接口”属性中,为CPU“添加新子网”,并设置IP地址(192.168.0.215)和子网掩码(255.255.255.0)。
•在“系统和时钟存储器”属性中,激活“启用时钟存储器字节”,并设置“时钟存储器字节的地址(MBx)”。
(2)程序编程
步骤一:在程序块添加一个数据块“MyModbusTcp”,并在数据块中定义一个数据类型为TCON_IP_v4变量“Connect”,该变量将用于定义通信连接,S7-1200CPU作为ModbusTCP客户端时,需要指定ModbusTCP服务器侧的IP地址和通信端口,变量的定义请参考图7-43。
图7-46 MB_CLIENT指令的第一次调用
步骤二:在主程序OB1中,需要调用两次“MB_CLIENT”指令,“MB_CLIENT”指令的第一次调用用于读取ModbusTCP服务器Modbus地址10001~10008数据。该“MB_CLI-ENT”指令参数REQ的触发可使用“MB_CLIENT”背景数据块中静态变量Connected的上升沿信号,如图7-46所示。
步骤三:第一次调用“MB_CLIENT”指令的DONE或ERROR状态位,复位,该“MB_CLIENT”指令的REQ触发位,并置位第二次调用“MB_CLIENT”指令的参数REQ;当第一次调用“MB_CLIENT”指令的执行无错误时,将接收到的Modbus TCP数据取反。程序如图7-47所示。
图7-47 复位第一个MB_CLIENT指令的REQ
步骤四:在主程序OB1中,第二次调用“MB_CLIENT”指令,本次调用用于写入数据到ModbusTCP服务器Modbus地址00001~00008。本条“MB_CLIENT”指令的DONE或ERROR状态位复位该“MB_CLIENT”指令的REQ触发位,并置位第一次调用“MB_CLIENT”指令的参数REQ,程序如图7-48所示。
图7-48 MB_CLIENT指令的第二次调用
(3)下载组态和程序(www.xing528.com)
CPU1的组态配置与编程已经完成,只需将其下载到CPU即可。
2.CPU2编程组态
(1)设备组态
使用TIA博途软件创建新项目,并将CPU1217C作为新设备添加到项目中。在设备视图的巡视窗口中,将CPU属性作如下修改:
•在“PROFINET接口”属性中,为CPU“添加新子网”,并设置IP地址(192.168.0.217)和子网掩码(255.255.255.0)。
(2)程序编程
步骤一:在程序块添加一个数据块“MyModbusTcp”,并在数据块中定义一个数据类型为TCON_IP_v4变量“Connect”,该变量将用于定义通信连接,S7-1200 CPU作为ModbusTCP服务器时,需要指定本地的通信端口,变量的定义请参考图7-45。
步骤二:在主程序OB1中,需要调用“MB_SERVER”指令,用于处理Modbus TCP客户端的连接请求、接收和处理Modbus请求,并发送Modbus应答报文,如图7-49所示。
(3)下载组态和程序
CPU2的组态配置与编程已经完成,只需将其下载到CPU即可。
3.通信状态测试
将两个CPU站点组态配置和程序分别下载到CPU1和CPU2后,即可开始对通信状态进行测试。本例中可以通过监控CPU2的I0.0~I0.7与Q0.0~Q0.7状态是否相反来判断ModbusTCP通信状态。
在网络视图中,选择相应的CPU,并“转至在线”模式,在“连接”选项卡中可以对ModbusTCP连接进行诊断,相关操作步骤参考图7-15。
示例程序请参见随书光盘中的例程目录《Modbus TCP》。
图7-49 调用MB_SERVER指令
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。