欢迎光临散文网 会员登陆 & 注册

西门子s7-1200 PLC与s7-200 SMART PLC 基于Modbus RTU主从轮询的通信

2023-06-14 23:03 作者:工控与或非  | 我要投稿

一、引言

在应用西门子中小型PLC进行通信的时候,尽管西门子目前主推的PLC比如s7-200 Smart、S7-1200系列PLC CPU都自带有网口,可以非常方便的进行以太网组网,但一些特殊场合,还是需要采用串口通信。

二、Modbus RTU通信

Modbus协议是一个标准、开放、免费的协议,支持RS232、RS485电气接口类型。在Modbus网络中,只能有一个主站,其他为从站;传输方式有ASCII、RTU和TCP,其中Modbus RTU是最常用的Modbus通信协议。

2.1 配置西门子S7-1200 PLC为Modbus RTU主站

2.1.1 硬件组态

西门子s7-1200系列PLC,比如CPU型号为CPU1214C DC/DC/DC,自带一个网口,如果需要应用串口通信,则必须新增串行通信模块,比如支持RS422/RS485通信的模块CM1241。

图1  配置串行通信模块CM1241

如图1所示,在博途V13软件中配置PLC的硬件组态,CPU位于插槽1,左侧101插槽添加通信模块CM1241,右侧2号及往后插槽配置信号模块SM。在通信模块的硬件属性页中,可以查看接口的端口组态,尤其注意“操作模式”为“半双工”,以及波特率、奇偶校验、数据位和停止位。

2.1.2 通信编程

下载硬件组态,确保硬件配置无错误,再编写通信程序。将s7-1200 PLC配置为Modbus RTU主站,需要在程序中调用MB_COMM_LOAD和MB_MASTER指令。

图2  调用Modbus RTU通信端口初始化指令MB_COMM_LOAD

值得注意的是,Modbus RTU通信端口初始化指令MB_COMM_LOAD只能上电调用一次,为此需要用到系统“FirstScan”位使能和触发指令,这个位可在CPU属性页的“系统和时钟存储器”中启用和设置。

MB_COMM_LOAD指令各管脚的定义,可按F1获取帮助信息,其中BAUD、PARITY的值必须与图1所示的通信模块CM1241组态的通信参数一致。MB_DB为主站数据块,决定了PLC是作为主站还是从站。如图2。

然后如图3,调用通信主站指令MB_MASTER(其实是一个FB块),其背景数据块MB_MASTER_DB(BD7)必须与图2端口初始化指令的MB_DB设置相同。

图3   调用Modbus RTU主站通信指令MB_MASTER读从站

REQ为上升沿触发通信,MB_ADDR为从站地址,MODE为读写模式(0=读,1=写),DATA_ADDR为Modbus地址,DATA_LEN为数据长度,DATA_PTR为数据接收区(注意为指针类型指向一片数据区,用来收发数据),具体定义可按F1获取帮助信息。

图4  调用Modbus RTU主站通信指令MB_MASTER写从站

主站通信程序编程比较复杂,需要编写读、写并定义读写数据接收区。且图1配置的通信模块的操作模式为半双工,只能单个子站读或写,这意味着同一时刻主站通信块指令MB_MASTER只能执行一次。实际工程应用中,如果只有一个子站,则读、写轮询;如果有多个子站,则需要子站间轮询,再读写轮询;如此形成一个轮询链。

2.1.3 轮询通信的说明

以某项目为例,19个子站需要编写38条MB_MASTER指令,上一个子站的写完成标志位(或错误标志位),触发本子站读指令;而本子站读完成标志(或错误标志),触发本子站写指令;进而本子站写完成标志位(或错误标志位),触发下一个子站读指令。首尾相连,形成闭环,不断轮询。

如果有子站通信错误或丢失,则会影响其他子站通信的实时响应。可在图2的MB_COMM_LOAD的RESP_TO(响应超时)设置响应等待时间,默认值为1000毫秒,可设置为100毫秒,太小会出现子站超时误判断,太大的话,如果有子站掉线,则会严重影响其他子站的数据刷新。

2.1.4 数据接收区的说明

定义的数据接收区DB3(Modbus_RTU_DB),常规设置页面的属性中,应取消勾选“优化的块访问”(即s7-1200的符号访问),修改之后兼容s7-300/400数据块按地址偏移量访问的方式。如图5所示。

图5   设置通信数据块属性,取消勾选“优化的块访问”

数据块DB3修改属性之后,就可以按绝对地址寻址。打开数据块DB3,在列头右键,勾选“显示隐藏”>“偏移量”,如图6。

图6   数据块显示偏移量

如图7所示,在数据块的属性中取消勾选“优化的块访问”,就可以查看数据块内每个数据存储区的偏移地址了。

图7  取消“优化的块访问”后,显示数据块的偏移量

因为Modbus RTU通信设置的数据接收区,是按数据块的偏移量,也就是绝对地址寻址的,所以将数据块设置为DATA_PTR接收区的同时必须修改块的访问方式;否则,通信报错。

2.2 配置西门子S7-200 SMART PLC为Modbus RTU从站

Modbus RTU从站设置相对要简单一些,只需要调用MBUS_INIT和MBUS_SLAVE指令。由于S7-200 SMART PLC自带串口,无需令加模块,设置也简单。

图8  西门子s7-200 SMART PLC作为Modbus RTU从站的通信编程1

注意,如图8所示,MBUS_INI指令输入HoldStart为V存储器中保持寄存器的起始地址,如果设置为&VB1000,则建立了VB1000与Modbus寄存器[40001]的联系,即VB1000+VB1001=VW1000=Modbus[40001]。

图9   西门子s7-200 SMART PLC作为Modbus RTU从站的通信编程2

可以将一些需要通信的数据转移到VB1000开始的数据区内,传给Modbus主站,也可以接收主站发送过来的数据。

2.3 主从站通信测试

至此,已经完成了主从站之间的通信设置和编程,接下来就可以连接通信口开始数据包的测试了。

图10  从站发送数据

子站从VB1000开始发送数据至Modbus[40001]开始的寄存器内,主站从Modbus[40001]开始的寄存器内读取数据,转存至DB3数据块内。如图10、11所示:3号子站VD1008,对应DB3.DBD168,经测试,通信正常。

图11  主站接收数据

三、总结

西门子PLC的通信设置较为复杂,尤其是非网口非以太网通信,需要调用通信指令,定义通信模式,设置通信参数和数据收发区。对于小型PLC s7-200,或s7-200 SMART,由于自带串口,采用Modbus RTU通信较为经济、便捷。

而对于中小型PLC s7-1200,由于CPU自带网口,没有串口,如非必须,建议采用Modbus TCP通信方式,经网口与上位机或其他设备交互数据,特殊场合采取Modbus RTU通信协议通信,需要增加通信模块。

西门子s7-1200 PLC与s7-200 SMART PLC 基于Modbus RTU主从轮询的通信的评论 (共 条)

分享到微博请遵守国家法律