MODBUS RTU是基于串口(RS-232C、RS-422/485)的一种通信协议,协议开放,多用于连接现场仪表设备,通信距离与串行通信定义相同。由于报文简单、开发成本比较低,许多现场仪表仍然使用MODBUS RTU协议通信。MODBUS RTU格式通信协议以主从的方式进行数据传输,主站发送数据请求报文到从站,从站返回响应报文。不同数据区的交换是通过功能码(Function Code)来控制的,有些功能码是对位操作的,通信的用户数据是以位(bit)为单位的,例如:
FC01读输出位的状态;
FC02读输入位的状态;
FC05强制单一输出位;
FC15强制多个输出位。
有些功能码是对16位寄存器操作的,通信的用户数据是以字(word)为单位的,例如:
FC03读输出寄存器;
FC04读输入寄存器;
FC06写单一输出寄存器;
FC16写多个输出寄存器。
这些功能码是对位输入(0XXXX数据区)、位输出(1XXXX数据区)、寄存器输入(4XXXX数据区)、寄存器输出(3XXXX数据区)进行访问的,功能码与数据区的对应关系如表10-9所示。
表10-9 功能码访问的数据区
用户也可以使用西门子公司的串行通信处理器,根据MODBUS RTU报文格式编写通信程序,但是程序比较繁琐,这里不作介绍。西门子公司提供的MODBUS RTU协议转换卡,可以插入CP341和CP441-2通信处理器中作为MODBUS RTU主站或从站,MODBUS RTU协议转换卡将报文进行校验(符合MODBUS RTU CRC校验),并将用户数据传送到CPU中。同样,发送的用户数据经过协议转换卡封装(带有校验码)后符合协议规定的报文格式,使用MODBUS RTU协议转换卡可以使通信更为容易。下面分别以CP341为例,介绍MODBUS RTU主站和从站的使用方法。
1.MODBUS RTU主站
主站发送请求报文,从站响应报文,报文格式如表10-10所示。
表10-10 MODBUS RTU报文格式
报文格式解释如下,
ADDRESS:从站地址,占用一个字节。
FUNCTION:功能码,占用一个字节。
DATA:信息数据,N个字节,格式根据功能码来定义。
CRC CHECK:CRC校验,两个字节,被协议转换卡过滤,不需要考虑。
主站支持的功能码有:FC01、FC02、FC03、FC04、FC05、FC06、FC07、FC08、FC11、FC12、FC15、FC16,先前介绍的功能码处理数据的通信,FC07、FC08、FC11、FC12是对通信状态的处理。例如主站利用功能码FC04读出5号从站寄存器30016~30018存储的数据,需要发送的报文为(十六进制):
05H:从站地址;
04H:功能码为04;
00H:寄存器开始高字节;
10H:寄存器开始低字节;
00H:读寄存器的个数高字节;
03H:读寄存器的个数低字节;
XXH:CRC校验高字节;
XXH:CRC校验低字节。
用户编写程序时,从通信处理器CP发送的数据为05 04 00 10 00 03,CRC校验通过协议转换卡自动加载到报文中。(www.xing528.com)
从站响应的报文为:
05H:从站地址;
04H:功能码为04;
04H:计数字节;
31H:寄存器30016高字节;
32H:寄存器30016低字节;
33H:寄存器30017高字节;
34H:寄存器30017低字节;
35H:寄存器30018高字节;
36H:寄存器30018低字节;
XXH:CRC校验高字节;
XXH:CRC校验低字节。
用户编写接收程序时,从通信处理器CP只能读回用户请求的数据31 32 33 34 35 36,其他数据被协议转换卡过滤掉。
按上面的例子配置CP341 MODBUS RTU主站的过程如下:
1)插入一个“SIMATIC 300 Station”,配置硬件,按安装次序依次插入机架、电源、CPU和CP341模块。
2)双击CP341模块,在弹出对话框中点击“Parameter”按钮进入协议选择界面,选择“MODBUS Master”驱动,在联机状态,双击“Load Drives”图标,加载MODBUS RTU协议到协议转换卡(Dongle)中。
3)双击“Protocol”图标,弹出协议配置对话框,在“MODBUS Master”标签页中设置通信速率、数据格式(数据位、奇偶校验位、停止位)等参数,设置的参数必须与从站相匹配,其他参数保持默认值。
4)编写程序发送数据请求。在OB1中调用FB8P_SND_RK(“Libraries”→“CP PtP”→“CP341”)的示例程序如下:
程序调用后,M1.1产生一次上升沿,数据请求报文发送一次。
5)编写程序接收从站数据。在OB1中调用FB7P_RCV_RK(“Libraries”→“CP PtP”→“CP341”)的示例程序如下:
接收的从站数据05 04 00 10 00 03存储于DB2.DBB0~DB2.DBB5中。由于主站数据请求和从站的响应是同步操作,如果访问多个从站数据,需要在主站中编写轮询程序。
2.MODBUS RTU从站
S7PLC作为MODBUS RTU从站,只需要将S7 CPU的数据区地址与MODBUS数据区地址相对应,即可建立通信,例如主站需要读出5号从站(S7 PLC)寄存器30016~30018存储的数据,在从站S7 PLC中的配置过程如下:
1)插入一个“SIMATIC 300 Station”,配置硬件,按安装次序依次插入机架、电源、CPU和CP341模块。
2)双击CP341模块,在弹出对话框中点击“Parameter”按钮,进入协议选择界面,选择“MODBUS Slave”驱动,在联机状态时,双击“Load Drives”图标,加载MODBUS RTU协议到协议转换卡(Dongle)中。
3)双击“Protocol”图标,弹出协议配置对话框,在“MODBUS Slave”标签页中设置通信速率、数据格式(数据位、奇偶校验位、停止位)及从站站号(站号为5)等参数,设置的参数必须与主站相匹配。
4)查询表10-9,从站数据区3XXXX对应功能码为FC04,点击“FC04”标签,设置通信接口区为DB10,如图10-91所示,这样从站数据区3XXXX对应S7的数据区为DB10,主站需要读的寄存器30016~30018对应S7CPU的数据区为DB10.DBW30、DB10.DBW32、DB10.DBW34。
5)调用从站初始化程序。使用菜单命令“File”→“Open”→“Sample projects”,打开MODBUS从站配置软件提供的示例程序“MODSL”,在示例程序中将S7-300系列PLC从站的程序块(不包括“System Data”)复制到应用项目中,打开OB1,将参数“LADDR”修改为CP341实际配置的逻辑地址,如果复制的示例程序与项目中使用的数据区、程序块号冲突,应作相应修改。程序下载后通信建立。
图10-91 设置MODBUS从站通信数据区
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。