首页 理论教育 Modbus RTU通信指令详解

Modbus RTU通信指令详解

时间:2023-07-01 理论教育 版权反馈
【摘要】:表9-18 Modbus_Comm_Load指令背景数据块静态变量(续)2.主站指令“Modbus_Master”Modbus_Master通信规则S7-1200PLC串口通信模块作为ModbusRTU主站与一个或多个ModbusRTU从站设备进行通信,需要调用“Modbus_Master”指令。图9-46 “Modbus_Master”指令同一个时刻只能有一个“Modbus_Master”指令执行。②模式104只适用于CM 1241V2.1或CB 1241且S7-1200 CPU V4.1以上使用Modbus指令的模块。对于给定端口,只能使用一个Modbus_Slave指令。建议在主程序循环OB中调用“Modbus_Slave”指令。表9-23 Modbus保持寄存器地址偏移

Modbus RTU通信指令详解

在指令选项卡通信>通信处理器”下,调用“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执行一次)。

978-7-111-58391-2-Chapter09-60.jpg

图9-44 “Modbus(RTU)”指令

978-7-111-58391-2-Chapter09-61.jpg

图9-45 “Modbus_Comm_Load”指令

(2)“Modbus_Comm_Load”指令各引脚说明

Modbus_Comm_Load指令各引脚说明见表9-17。

9-17 “Modbus_Comm_Load”指令各引脚说明

978-7-111-58391-2-Chapter09-62.jpg

(续)

978-7-111-58391-2-Chapter09-63.jpg

(3)“Modbus_Comm_Load”指令背景数据块静态变量

“Modbus_Comm_Load”指令背景数据块静态变量见表9-18。

9-18 Modbus_Comm_Load指令背景数据块静态变量

978-7-111-58391-2-Chapter09-64.jpg

(续)

978-7-111-58391-2-Chapter09-65.jpg

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”指令都必须使用同一个背景数据块。

978-7-111-58391-2-Chapter09-66.jpg

图9-46 “Modbus_Master”指令

•同一个时刻只能有一个“Modbus_Master”指令执行。当有多个读写请求时,用户需要编写Modbus_Master轮询程序。

(2)“Modbus_Master”指令各引脚说明

“Modbus_Master”指令各引脚说明见表9-19。(www.xing528.com)

9-19 “Modbus_Master”指令各引脚说明

978-7-111-58391-2-Chapter09-67.jpg

(续)

978-7-111-58391-2-Chapter09-68.jpg

“Modbus_Master”指令MODE和Modbus地址一起确定Modbus消息中使用的功能码。MODE参数、Modbus功能码和Modbus地址范围之间的对应关系见表9-20。

9-20 Modbus功能代码和Modbus地址范围之间的对应关系

978-7-111-58391-2-Chapter09-69.jpg

①对“扩展寻址”模式,根据功能所使用的数据类型,数据的最大长度减小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所示。

978-7-111-58391-2-Chapter09-70.jpg

图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”指令各引脚说明

978-7-111-58391-2-Chapter09-71.jpg

Modbus通信功能码1、2、4、5和15可以直接读写CPU的输入/输出过程映像区。Modbus地址与S7-1200CPU过程映像区的映射关系见表9-22。

9-22 Modbus地址与S7-1200 CPU过程映像区的映射关系

978-7-111-58391-2-Chapter09-72.jpg

(续)

978-7-111-58391-2-Chapter09-73.jpg

(3)“Modbus_Slave”的背景数据块静态变量“HR_Start_Offset”

“HR_Start_Offset”变量用于修改ModbusRTU通信保持寄存器的地址偏移。例如,保持寄存器被组态为起始于DB1.DBW0开始的100个字长度的地址区;偏移量HR_Start_Offset=100指定了保持寄存器的起始地址为40101。Modbus保持寄存器寻址示例见表9-23。

9-23 Modbus保持寄存器地址偏移设置

978-7-111-58391-2-Chapter09-74.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈