理论教育 Modbus协议已经广泛应用于工业领域

Modbus协议已经广泛应用于工业领域

时间:2023-06-17 理论教育 版权反馈
【摘要】:Modbus协议已经广泛应用于工业领域。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。因此,Modbus协议的可靠性较好。表10.2地址表示方法串口通信模块CM1241 RS232和CM1241 RS485均支持Modbus RTU协议,可作为Modbus主站或从站与支持Modbus RTU的第三方设备通信。S7-1200PLC的串口通信模块的Modbus RTU协议通信的注意事项如下。

Modbus协议已经广泛应用于工业领域

Modbus协议已经广泛应用于工业领域。此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC、DCS、智能仪表等都在使用Modbus协议作为他们之间的通信标准。通过它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

当在网络上通信时,Modbus协议决定了每个控制器必须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。

Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modbus控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通信采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

Modbus协议需要对数据进行校验,串行协议中除了奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。Modbus系统间的数据交换是通过功能码来控制的。有些功能码是对位操作的,通信的用户数据是以位为单位的,例如:

(1)FCO1读输出位的状态;

(2)FCO2读输入位的状态;

(3)FC05强制单一输出位;

(4)FC15强制多个输出位。

有些功能码是对16位寄存器操作的,通信的用户数据是以字为单位的,例如:

(1)FC03读输出寄存器;

(2)FCO4读输入寄存器;

(3)FCO6写单一输出寄存器位;

(4)FC16写多个输出寄存器。

这些功能代码是对4个数据区(位输入、位输出、输入/输出寄存器)进行访问,具体如表10.1所示。

表10.1 访问的数据区

对于输出的位或寄存器是可以进行读写访问的,对于输入的数据则只能进行读操作,这个数据区在用户级的地址表示方法如表10.2所示。

表10.2 地址表示方法

串口通信模块CM1241 RS232和CM1241 RS485均支持Modbus RTU协议,可作为Modbus主站或从站与支持Modbus RTU的第三方设备通信。使用S7-1200串口通信模块进行Modbus RTU协议通常是非常简单的,先调用MB_COMM_LOAD指令来设置通信端口参数,然后调用MB_MASTER或MB_SLAVE指令作为主站和从站与支持MODBUS RTU的第三方设备通信。

S7-1200PLC的串口通信模块的Modbus RTU协议通信的注意事项如下。

(1)在调用MB_MASTER或MB_SLAVE之前,必须调用MB_COM_LOAD来设置通信端口的参数。

(2)如果一个通信端口作为从站与另一主站通信,则其不能调用MB_MASTER作为主站,同时MB_SLAVE只能调用一次。

(3)如果一个通信端口作为主站与另一从站通信,则其不能调用MB_SLAVE作为从站。同时MB_MASTER可调用多次,并要使用相同背景数据块。

(4)Modbus指令不使用通信中断时间来控制通信过程。所以必须在程序中循环调用MB_MASTER或MB_SLAVE指令来检査通信状态。

(5)如果一个通信端口作为从站,则调用MB_SLAVE指令的循环时间必须短到足以及时响应来自主站的请求。

(6)如果一个通信接口作为主站,则必须循环调用MB_MASTER指令直到收到从站的响应。

(7)要在一个OB中执行多个MB_MASTER指令。

1.Modbus通信指令

Modbus指令可从项目视图全局库的Modbus选项下找到。

(1)MB_COMM_LOAD。

MB_COM_LOAD指令块用来配置串口以进行Modbus RTU通信,其参数含义如表10.3所示。

表10.3 MB_COMM_LOAD参数含义

(2)MB_MASTER。(www.daowen.com)

MB_MASTER指令块使串口作为Modbus主站来访问一个或多个Modbus从站的数据,其参数含义如表10.4所示。

表10.4 MB_MASTER参数含义

(3)MB_SLAVE。

MB_SLAVE指令块使串口作为Modbus从站响应MODBUSRTU主站的数据请求,其参数含义如表10.5所示。

表10.5 MB_SLAVE参数含义

2.编程实例

本例通过实现两台安装CM1241 RS485通信模块的S7-1200 PLC之间的MPDBUSRTU协议通信演示MODBUS通信的组态。通过标准的RS485电缆连接两台CM1241 RS485通信模块。

组态步骤如下。

(1)创建新项目,然后组态设备,选择S7-1200的CPU 1214C,打开项目后,选中PLC_1设备视图,选择下面的“属性”选项,再选择“系统和时钟存储器”,勾选右边的“启用时钟存储器字节”复选框,再选中PLC_1设备中以太网口,设置PLC_1的IP地址为:192.168.0.1,如图10.9所示。

图10.9 以太网地址设定

(2)添加通信模块CM1241(RS485),然后到属性设置,选择波特率为9.6k,硬件标识符为269。

(3)复制PLC1,生成PLC2,并将其IP地址设为192.168.0.2,两者的连接拓扑图如图10.10所示。

图10.10 通信连接拓扑图

(4)在PLC2中添加全局数据块,命名为slave_HR,并在里面建立数组,名称为HRAYYAY,建立1到20的Word类型的数据。在PLC2变量表中添加变量表1,变量如图10.11所示。

图10.11 变量表1

(5)同样方法在PLC1中添加全局数据块名称为mb-master,并建立两个数组分别为read-array和write-array,数据类型分别为Bool和Word,在PLC1变量表中添加变量表2,回到PLC2中,在主程序Main中添加指令Modbus_Comm_Load,生成背景数据块,并给各形参赋值,如图10.12所示。

图10.12 MB_COMM_LOAD程序

需注意:MB-DB的实参是选择下面的背景数据块DB3的。在程序段2中添加指令Modbus-Slave,并生成背景数据块,各个形参的实参如图10.13所示。

图10.13 MB_SLAVE程序

(6)回到PLC1中的主程序Main,同样在程序段1中添加指令MODBUS_COMM_LOAD生成背景数据块,同样对各形参赋值,如图10.14所示。

图10.14 MODBUS_COMM_LOAD程序

同样需注意:MB-DB的实参是选择下面的背景数据块DB3的。在程序段2中添加指令Modbus_Master,并生成背景数据块,各个形参的实参如图10.15所示。

图10.15 Modbus_M aster程序

复制程序段2到程序3中,修改各个形参的实参,如图10.16所示,将PLC_1和PLC_2下载到相应的PLC中,运行PLC即可实现通信。

图10.16 M odbus_M aster程序2

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

我要反馈