1.MODBUS概述
MODBUS是Modicon公司提出的一种通信协议,经过各大公司的实际应用,逐渐被认可,成为一种标准的通信协议。该协议支持RS-232C、RS-422、RS-485、20mA TTY及以太网等接口。MODBUS是以主从方式进行数据传输,在传输过程中主站发送数据请求报文到从站,从站返回响应报文,该协议只允许在主站和从站之间通信,从站与从站之间不能直接通信。主站还能以广播的方式和所有从设备通信,但从站不返回响应报文。
常用的MODBUS协议有MODBUS ASCII和MODBUS RTU两种,MODBUS ASCII协议以ASCII形式传输数据,每8位作为两个ASCII码传输,且有开始和结束标记,适用于通信数据较少的场合;而MODBUS RTU传输时每8位包含两个4位的十六进制数据,没有开始和结束标记,适用于通信数据较多的场合。
在本节主要介绍MODBUS RTU协议,其可与DCS系统中的一些过程仪表通信,应用比较广泛。在MODBUS RTU格式的通信协议中,通信双方是通过报文以主从方式进行数据传输的,报文格式见表10-6。
表10-6 MODBUSRTU报文格式

其中,ADDRESS表示MODBUS从站的地址,一个字节;FUNCTION表示MODBUS的功能码,一个字节;DATA表示传输的数据,N个字节,格式由功能码决定;CRC CHECK表示CRC,两个字节。
MODBUS设备间的数据交换是通过功能码实现的,有些功能码是对位操作的,有些是对16位寄存器操作的,见表10-7。功能代码定义了消息帧的含义和消息帧的结构。
表10-7 MODBUS部分功能码说明

主站通信协议支持的功能码有FC01、FC02、FC03、FC04、FC05、FC06、FC07、FC08、FC11、FC12、FC15和FC16。从站通信协议支持的功能码有FC01、FC02、FC03、FC04、FC05、FC06、FC08、FC15和FC16。例如主站发送数据请求报文及各字节的含义见表10-8。
表10-8 主站发送数据请求报文及各字节的含义

从站回复的响应报文见表10-9。
表10-9 从站回复的响应报文

在西门子PLC通信中,表10-7功能码访问的数据类型相对于不同的数据区,如I区、Q区及输入/出寄存器,对I区只读,对Q区可读写,对输入寄存器只读,对输出寄存器可读写,见表10-10。用户层级的地址表示是按十进制排列的,以1为起始地址,如第22个输入位表示为10022,在MODBUS通信中通过功能码02读取。对于每一个数据区的传送信息是以0为起始地址的,如第22个输出位的传送信息表示为21,在MODBUS通信中通过功能码01、05、15传送,传送信息在组态MODBUS从站时会使用。
表10-10 不同数据区的用户层级表示

2.MODBUS主站协议应用实例
(1)项目说明
本项目以CP341读取仪表设备数据为例介绍MODBUS RTU主站通信的过程。要求S7-300 PLC可以读取仪表的数据,并且仪表每次只返回一个数据。
(2)系统组成
CP341与仪表通过RS-232C线缆连接如图10-8所示,所需硬件和软件见表10-11。

图10-8 MODBUS主站读取仪表数据硬件连接
表10-11 所需硬件和软件

(3)组态和配置
首先查看仪表提供的接口信息:RS-232C或RS-485可选;通信速率19.2Kbit/s;数据格式为8-N-1(即8个数据位、无奇偶校验,1个停止位)。仪表提供的数据查询报文和响应报文格式分别见表10-12和表10-13。根据仪表的报文可知:利用FC03可以读取仪表的数据,并且仪表只返回一个数据。
表10-12 数据查询报文格式

表10-13 数据响应报文格式

然后在计算机上安装STEP7软件和CP340/CP341模块的软件驱动程序(SIMATIC S7-CP PtP Param V5.1)。接着进行硬件组态,在硬件组态窗口中双击CP模块,打开CP模块的属性窗口,如图10-9所示,单击Addresses选项卡即可看到该CP模块的硬件地址(在编写通信程序时,需要使用该地址参数)。
单击属性窗口底部的“Parameter…”按钮,选择通信协议Protocol为MODBUS Mas-ter,如图10-10所示,连接PLC MPI接口使之成为联机状态,双击“Load Drivers”图标,加载MODBUS RTU协议到通信处理器中,CPU必须处于“STOP”模式,单击“Load Drives”栏,加载过程起动,完成后离线与在线的版本将匹配。然后双击Protocol图标
,弹出MODBUS Master协议的通信参数设置窗口,如图10-11所示。在该窗口中设置通信参数,如通信速率设置为19.2 Kbit/s、数据位数为8位、停止位数为1位,无奇偶校验等。

图10-9 CP341属性窗口

图10-10 MODBUS Master协议选择

图10-11 MODBUS Master协议通信参数设置窗口
设置完成后对硬件组态进行保存并编译,将硬件组态下载到PLC,如果此时SF灯亮,则将通信电缆与其通信伙伴连接,SF灯熄灭说明硬件组态正确。
(4)程序设计
主站发送数据请求报文时,在程序中插入DB1(作为数据发送区),如图10-12所示。根据仪表提供的信息发送数据请求报文,报文存放在DB1中前6个字节,M1.1产生一次上升沿,数据请求报文发送一次。在OB1中调用CP341的发送功能块FB8,与ASIIC驱动协议通信调用相同。将参数LADDR设为硬件组态中CP341的起始逻辑地址256,LADDR的值应与图10-9的地址相同。发送数据功能块参数设置见表10-14。

图10-12 发送数据块
表10-14 发送功能块参数

主站接收从站响应报文时,在程序中插入DB2(作为数据接收区),如图10-13所示。在OB1中调用CP341的接收功能块FB7,“EN_R”始终置为1,这样返回的用户数据存放到DB2.DB0中,报文中其他信息被自动过滤。主站接收的数据可能需要处理,如浮点值高低字的颠倒、过程值转换等根据具体情况做出相应调整。接收数据功能块参数设置见表10-15。

图10-13 接收数据块
表10-15 接收功能块参数(https://www.xing528.com)

最后,OB1中的程序如图10-14所示。

图10-14 OB1程序
(5)通信调试
将所有组态配置和程序下载到PLC然后运行。主站与过程仪表通信,主站先向从站发送数据请求报文,得到仪表响应报文,然后再发送下一帧数据请求报文,再得到响应报文,依次循环,请求报文不能同时发送。
3.MODBUS从站协议应用实例
(1)项目说明
本项目以CP341采用MODBUS从站通信协议接收和发送数据为例介绍MODBUS从站与MODBUS主站仿真软件Modscan32的通信过程。
(2)系统组成
CP341与带有MODBUS主站仿真软件Modscan32的计算机通过RS-232C线缆连接,如图10-15所示,所需硬件和软件见表10-16。

图10-15 MODBUS从站硬件连接
表10-16 所需硬件和软件

(3)组态和配置
首先新建一个项目,并重新命名。插入一个S7-300站点,在硬件组态中依次插入表10-16中的硬件。在硬件组态窗口中双击CP模块,打开CP模块的属性窗口,单击Ad-dresses选项卡即可看到该CP模块的硬件地址(在编写通信程序时,需要使用该地址参数)。
然后单击属性窗口底部的“Parameter…”按钮,选择通信协议Protocol为MODBUS Slave,如图10-16所示。

图10-16 MODBUS Slave协议选择
双击Protocol图标
,弹出MODBUS Slave协议的通信参数设置窗口,如图10-17所示。在该窗口中“MODBUS Slave”设置通信参数,如通信速率设置为9600 bit/s、数据位数为8位、停止位数为1位,无奇偶校验,MODBUS从站地址为2等。

图10-17 MODBUS Slave通信参数设置
单击“FC01”“05”“15”选项卡,读取强制输出位的状态,如图10-18所示。左边的地址为信息传送地址,右边对应西门子的PLC地址区,即左边地址0~100对应MODBUS地址区为00001~00101,对应西门子数据区为M0.0~M12.4;101~200对应MODBUS地址区为00102~00201,对应西门子数据区为Q0.0~Q12.3;201~300和301~400对应Modbus地址区为00202~00301和00302~00401,对应西门子数据区为Timer和Counter。

图10-18 MODBUS Slave FC01,05,15地址分配
单击FC02选项卡,读取输入数据位的状态,如图10-19所示,地址对应关系如上面所述。

图10-19 MODBUS Slave FC02地址分配
单击“FC03”“06”“16”选项卡,组态输出寄存器数据区,如图10-20所示,设置对应数据区DB块。

图10-20 MODBUS Slave输出寄存器数据区分配
单击“FC04”选项卡,组态输入寄存器数据区,如图10-21所示,设置对应数据区DB块。

图10-21 MODBUS Slave输入寄存器数据区分配
最后设置写参数的限制值,如图10-22所示。
配置完成后保存时会提示是否装载驱动。此时必须连接到实际的PLC,单击“Yes”按钮装载驱动,装载时CPU必须为STOP模式。驱动装载完成后,如果再次装载,STEP7会提示Driver already exists,配置完成后保存编译硬件组态,并确认没有错误。
(4)程序设计
1)双击OB1,打开OB1编程画面,从库“Libraries”->“CP PtP”->“CP341”中调用发送程序块FB8和接收程序块FB7,然后再从OB1中删除。因为MODBUS从站通信要用到这两个功能块。
2)调用MODBUS从站功能块FB80,位置在“Libraries”->“Modbus”->“Modbus”->“FB80”。分配背景数据块DB80,将参数LADDR设为硬件组态中的起始逻辑地址256,其他参数见表10-17和图10-23。
表10-17 MODBUS从站功能块参数

3)创建FC03、06、16功能代码通信数据块DB1和FC04功能代码通信数据块DB2,如图10-24所示。
(5)通信测试
将所有组态配置和程序下载到PLC并运行程序,然后在计算机上打开MODBUS主站仿真软件Modscan32进行MODBUS从站协议通信测试。Modscan32软件具体使用方法参照相关说明,这里不予叙述。Modscan32显示界面数据显示区的10个字对应S7-300 CPU中DB1的前10个字的数值(DBW0-DBW9)。如果两者数值相同,那么通信成功。

图10-22 MODBUS Slave写参数限制值

图10-23 在OB1中调用FB80

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