在指令选项卡“通信>通信处理器”下,调用“Modbus(RTU)”指令用于ModbusRTU通信编程,如图9-44所示。该指令除了适用于S7-1200PLC中央机架,还可用于分布式I/O PROFINET或PROFIBUS的ET200SP/ET200MP串口通信模块。
1.初始化指令“Modbus_Comm_Load”
(1)“Modbus_Comm_Load”指令使用规则
“Modbus_Comm_Load”指令用于配置ModbusRTU协议通信参数,如图9-45所示。对Modbus通信的每个通信端口,都必须执行一次“Modbus_Comm_Load”来组态。每个“Modbus_Comm_Load”需要分配一个唯一的背景数据块。
•如果“Modbus(RTU)”指令用于中央机架中的模块,建议在Main[OB1]使用系统存储器的首次循环位调用执行一次。只有在必须更改波特率或奇偶校验等通信参数时,才再次执行“Modbus_Comm_Load”指令。
•如果“Modbus(RTU)”指令用于分布式机架中的模块,则从站分布式机架的通信中断或者插拔模块,需要再次触发“Modbus_Comm_Load”指令恢复Modbus RTU通信,可以考虑在循环中断中执行该指令(例如,每秒或每隔10s执行一次)。
图9-44 “Modbus(RTU)”指令
图9-45 “Modbus_Comm_Load”指令
(2)“Modbus_Comm_Load”指令各引脚说明
Modbus_Comm_Load指令各引脚说明见表9-17。
表9-17 “Modbus_Comm_Load”指令各引脚说明
(续)
(3)“Modbus_Comm_Load”指令背景数据块静态变量
“Modbus_Comm_Load”指令背景数据块静态变量见表9-18。
表9-18 Modbus_Comm_Load指令背景数据块静态变量
(续)
2.主站指令“Modbus_Master”
(1)Modbus_Master通信规则
S7-1200PLC串口通信模块作为ModbusRTU主站与一个或多个ModbusRTU从站设备进行通信,需要调用“Modbus_Master”指令。将“Modbus_Master”指令拖入到程序时,系统为其自动分配背景数据块,该背景数据块指向“Modbus_Comm_Load”指令的输入参数“MB_DB”,如图9-46所示。
•必须先执行“Modbus_Comm_Load”指令组态端口,然后“Modbus_Master”指令才能通过该端口通信。
•如果将某个端口用于Modbus RTU主站,则该端口不能再用于ModbusRTU从站。
•对于同一个端口,所有“Modbus_Master”指令都必须使用同一个背景数据块。
图9-46 “Modbus_Master”指令
•同一个时刻只能有一个“Modbus_Master”指令执行。当有多个读写请求时,用户需要编写Modbus_Master轮询程序。
(2)“Modbus_Master”指令各引脚说明
“Modbus_Master”指令各引脚说明见表9-19。(www.xing528.com)
表9-19 “Modbus_Master”指令各引脚说明
(续)
“Modbus_Master”指令MODE和Modbus地址一起确定Modbus消息中使用的功能码。MODE参数、Modbus功能码和Modbus地址范围之间的对应关系见表9-20。
表9-20 Modbus功能代码和Modbus地址范围之间的对应关系
①对“扩展寻址”模式,根据功能所使用的数据类型,数据的最大长度减小1个字节或1个字。
②模式104只适用于CM 1241V2.1或CB 1241且S7-1200 CPU V4.1以上使用Modbus(RTU)指令的模块。
3.从站指令“Modbus_Slave”
(1)Modbus_Slave通信规则
S7-1200 PLC串口通信模块作为Modbus RTU从站用于响应Modbus主站的请求,需要调用“Modbus_Slave”指令。将“Modbus_Slave”指令拖入到程序时,系统为其自动分配背景数据块,该背景数据块指向“Modbus_Comm_Load”指令的输入参数“MB_DB”,如图9-47所示。
图9-47 “Modbus_Slave”指令
•必须先执行“Modbus_Comm_Load”指令组态端口,然后“Modbus_Slave”指令才能通过该端口通信。
•如果将某个端口用于ModbusRTU从站,则该端口不能再用于ModbusRTU主站。
•对于给定端口,只能使用一个Modbus_Slave指令。
•“Modbus_Slave”指令必须以一定的速率定期执行,以便能够及时响应来自Modbus_Master的请求。建议在主程序循环OB中调用“Modbus_Slave”指令。
•“Modbus_Slave”指令支持来自Modbus主站的广播写请求,只要该请求是用于访问有效地址的请求即可。对于广播不支持的功能代码,“Modbus_Slave”指令的STATUS将输出错误代码16#8188。
(2)“Modbus_Slave”指令各引脚说明
“Modbus_Slave”指令各引脚说明见表9-21。
表9-21 “Modbus_Slave”指令各引脚说明
Modbus通信功能码1、2、4、5和15可以直接读写CPU的输入/输出过程映像区。Modbus地址与S7-1200CPU过程映像区的映射关系见表9-22。
表9-22 Modbus地址与S7-1200 CPU过程映像区的映射关系
(续)
(3)“Modbus_Slave”的背景数据块静态变量“HR_Start_Offset”
“HR_Start_Offset”变量用于修改ModbusRTU通信保持寄存器的地址偏移。例如,保持寄存器被组态为起始于DB1.DBW0开始的100个字长度的地址区;偏移量HR_Start_Offset=100指定了保持寄存器的起始地址为40101。Modbus保持寄存器寻址示例见表9-23。
表9-23 Modbus保持寄存器地址偏移设置
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。