西门子PLC与HIMA H41Q的Modbus RTU冗余通信

2015-01-13 02:06刘天虎王海群
化工自动化及仪表 2015年10期
关键词:接收数据发送数据功能块

刘天虎 王海群 徐 峰 唐 山

(北京航天石化技术装备工程公司加热炉事业部,北京 100166)

根据某项目加热炉的控制要求,在其自控系统中设计有安全仪表系统(SIS),SIS对控制系统的异常检测结果实施联锁停止控制,是工厂自动控制中的重要组成部分。西门子PLC编程灵活且组网功能强大,因而被广泛应用于工业自控系统[1]。随着现场总线技术的不断发展与兼容要求的不断提高,为了与其他厂商的设备进行通信,西门子提供了Modbus通信[2]产品,协议转换器Master Dongle的软件,以实现主站通信功能。

某项目加热炉控制系统采用西门子PLC和SIS联合控制模式,二者之间采用冗余Modbus RTU实现数据通信,在此着重介绍主站的硬件结构和软件组态。

1 系统简介

某项目加热炉自控系统回路的安全完整性等级要求达到SIL2或SIL3,因此必须用具有SIL等

级的控制系统SIS。项目要求配套控制系统要实现安保联锁、回路调节、参数显示及设定等功能,这些功能由一套SIS完全实现。经统计仅有2/3的点要进入SIS去完成安保联锁功能,考虑到SIS采购和后期维护费用都很高,故采用SIS和PLC联合控制模式。该项目的H41Q系统CPU板卡自带RS485接口只支持Modbus RTU协议,使用其他通信接口都要额外增加通信板卡,又考虑到Modbus RTU协议的非实时性,因此两个系统间的数据交互采用冗余Modbus RTU,既可满足安全性和可靠性,又能有效降低采购和维护成本。

2 系统结构

某加热炉控制系统的硬件结构如图1所示,SIS采用HIMA H41Q系列,PLC采用S7-300系列,触摸屏为SIEMENS MP377系列。PLC和SIS之间的数据交互由冗余Modbus RTU实现。系统编程在PC机进行,PC机与PLC通信采用西门子USB-MPI电缆,PC机与SIS通信采用普通网线。

图1 加热炉自控系统硬件结构示意图

3 通信实现

SIS采用冗余CPU,每块CPU卡带一个RS485接口用于Modbus RTU通信,SIS作为从站。PLC配有两个CP341 RS422/485(以下简称CP341)模块,每块CP341带一个RS485接口,并且每块CP341配一个主站Dongle,PLC作为主站。

作为Modbus从站的SIS组态相对简单,只需将读写数据放置到相应的数据区域,等待主站PLC的指令即可。下面主要针对主站的组态进行说明。

3.1 PLC硬件组态

PLC的硬件组态如图2所示,两个CP341的逻辑起始地址分别为256和272。PLC的核心是S7-315-2DP CPU,同时使用了两块CP341卡件作为Modbus RTU主站,每块CP341卡件配一个Master Dongle,两个模块的Protocol参数设置完全一致。

图2 PLC硬件组态

CP341的参数设置如图3所示,双击CP341→Parameters→Protocol,选择Modbus Master;双击蓝色按钮Protocol,选择Modbus Master设置总线传输速率和帧字符结构,SIS从站的设置必须和主站设置一致。该项目中的传输速率设置为9 600bit/s,8位数据位,1位停止位,无校验。

图3 CP341参数设置

选择半双工RS485,接收端初始状态按图4设置电气接口。各从站的接口电气标准必须与主站一致。

图4 CP341电气接口设置

3.2 软件组态

根据网络结构,主从站的Modbus接口是一对一直连的,因此两个主站卡的编程方式完全一致。基于一块CP341卡件只能调用一个数据发送功能块FB8和一个数据接收功能块FB7,同时一块主站卡要实现读取从站和写从站功能,因而采用先读后写的顺序,先发送读取报文再发送写入报文。下面以第一块主站模块为例说明主站读写的编程过程。

创建发送数据块DB1,定义Modbus功能代码03和16的数据格式,如图5所示。

图5 Modbus功能代码03和16的数据格式定义

读从站多个寄存器使用功能代码03,从站地址为1,起始地址为0(即Modbus地址从40001开始),读取长度为4个字;写从站多个寄存器使用功能代码16,从站地址为1,起始地址为0(即Modbus地址从40001开始),写入长度为4个字,写入的数据在随后的4个字里。创建两个接收数据DB块DB2和DB3,用于存放读写报文的相应返回数据,每个DB分配了一个0~100的字型数组,如图6所示。

图6 DB分配的字型数组

创建顺序读写功能块FC1,首先对发送功能块FB8进行说明,如图7所示。

图7 发送功能块FB8的组态

图7中SF中的S为发送,此处必须为大写;LADDR为硬件组态中的起始逻辑地址,第一块为256,第二块为272;REQ发送数据为上升沿触发,本项目为M0.0;DB_NO为发送数据块号,本项目为地址MW10;DBB_NO为发送数据的起始地址,本项目为地址MW12;LEN为发送数据的长度,本项目为地址MW14;R_TYP中的X为扩展数据块,必须为大写;DONE为发送完成位,无故障发送完成后为true,本项目为M0.1;ERROR为错误位,说明有错误,本项目为M0.2。

浆砌石防护坝断面为:顶宽0.5 m,堤高为4.2 m(包括基础),临水坡1∶0.1,背水坡1∶0.3,底宽2.68 m,基础埋深2.2 m,基础宽2.88 m,采用M 7.5水泥砂浆砌筑。为防止不均匀沉降及应力对堤防工程产生破坏,挡土墙每10 m设一道伸缩缝,缝宽2 cm,采用聚乙烯闭孔泡沫板填缝。堤防沿长度方向每隔2.5 m设DN 110 PVC排水管,坡度3%,进口设反滤料。

接收功能块FB7的组态说明如图8所示。LADDR为硬件组态中的起始逻辑地址,第一块为256,第二块为272;DB_NO为接收数据块号,本项目为地址MW16;DBB_NO为接收数据的起始地址,本项目为地址MW18。

图8 功能块FB7的组态

设置的指令计数器(MW2)如图9所示,设置为2即为读指令和写指令。

图9 指令计数器的设置

根据指令计数器的值构造发送指令并指定接收缓冲区,如图10所示,指令计数器的值为1,构造的发送指令为使用发送数据块DB1,发送数据起始地址DB1.DBB0,数据长度6(功能代码03的要求);接收数据块为DB2,接收数据的起始地址为0。

图10 缓冲接收区组态

如图11所示,指令计数器为2,构造的发送指令为使用发送数据块DB1,发送数据的起始地址DB1.DBB6,数据长度14(功能代码16,此为发送命令和数据的总长度);接收数据块DB3,接收数据的起始地址为0。

图11 发送指令组态

需要注意,超时定时器的时间T1必须大于预设的从站响应时间t,而从站响应时间应大于等于主站发出请求到接收到从站响应数据的时间最大值max(T读,T写),即T1>t≥max(T读,T写),如图12所示。

图12 时间组态

3.3 数据处理

以第一块CP341为例说明的通信的实现方法。同样,第二块CP341的组态按照第一块的构建方式需要构建块FC2/DB4/DB5/DB6,然后在OB1中同时调用FC1和FC2,如图13所示。这样两个卡件都可以将数据从SIS读取或写入。

图13 FC1和FC2的调用

建立数据块DB7(存放PLC读取SIS的数据)和DB8(存放PLC写入SIS的数据),如图14所示,PLC读取SIS的长度占用4个寄存器,即4个字,前两个字用于状态开关量通信,后两个字用于压力模拟量通信。

图14 读数据块组态

图15 写数据块组态

DB7和DB8内存放的是最终PLC读取或要写入的数据。因此需要新建FC3和FC4用于Modbus1和Modbus2两个模块的数据处理。

在FC3内读开关量的组态如图16所示,DB2存放了PLC读自SIS的两个字长度的开关量,由于西门子的数据结构设计为高字节低地址、低字节高地址,与从站内高字节高地址、低字节低地址的数据结构相反,因此需要高低字节反序赋给DB7的相应字。

图16 读SIS开关量组态

在FC3内读模拟量的组态如图17所示,DB2存放了PLC读自SIS的两个字长度的一个浮点数模拟量,同样需要高低字反序赋给DB7的相应字。

图17 读SIS浮点数组态

FC3内写开关量的组态如图18所示,DB1内存放了PLC写入SIS的两个字长度的开关量,高低字节同样要反序赋给DB1。

图18 写SIS开关量

FC3内写模拟量的组态如图19所示,将DB8内的两个字反序后赋给DB1相应的字。

图19 写SIS浮点数

3.4 通信通断的判断

SIS定义了一个脉冲量,脉冲变化时间为0.5s,PLC将该变量读取到DB1.DBX0.0和DB4.DBX0.0内,如果通信正常则DB1.DBX0.0和DB4.DBX0.0都为脉冲变化。如图20所示,对于Modbus1通信,DB1.DBX0.0持续为0超过10s或持续为1超过10s,则认为Modbus1通信线路故障。Modbus2通信状态的判断方法亦然。

由于Modbus RTU为非实时通信,因此两个数据链路读写到的数据可能不一致,为避免同一个地址的数据不一致导致无法选择判断的问题出现,先确定优先采用通信链路1来读写到的数据,只有在链路1故障时,才用通信链路2读写到的数据。通信链路状态的判断和通信链路的选取都是由主站PLC来实现,如图21所示。

图20 通信状态判断程序组态

图21 根据通信状态调用Modbus通信功能块

为了保持在Modbus1和Modbus2切换时写入的数据一致,在FC3和FC4内做了数据赋值处理。如图22所示,在Modbus1通信正常时,调用FC3,在FC3内将写入SIS的数据赋值给Modbus2的写入数据块。

图22 保持写入SIS数据一致性组态1

如图23所示,Modbus1通信故障,调用FC4,在FC4内将写入SIS的数据赋值给Modbus1的写入数据块内。

同时可以将M1.0和M1.1两个状态送至HMI显示,以便操作人员查看两个通信线路的通信状态。

4 上电测试

SIS和PLC同时上电,系统运行正常后,断开Modbus1的通信线,HMI显示Modbus1故障,Modbus2正常,此时PLC读写SIS数据正常;然后断开Modbus2通信线,HMI显示Modbus1故障,Modbus2故障,此时PLC无法读写SIS数据。

图23 保持写入SIS数据一致性组态2

至此,完成了PLC和SIS间的冗余Modbus RTU通信组态。测试结果完全满足设计要求。在实现通信的同时,冗余链路有效提高了PLC与SIS数据交互的可靠性。

5 结束语

笔者基于某项目加热炉控制系统的实际要求,由SIS实现安保联锁功能,PLC实现调节功能,给出了SIS和PLC采用冗余Modbus RTU(两路)通信方式实现数据交互的硬件结构和软件组态。上电实测结果表明:该冗余通信方案的设计实现,提高了系统数据交互的可靠性。这种系统构成方式,可供其他工业项目借鉴。

[1] 廖常初.S7-300/400PLC应用技术[M].北京:机械工业出版社,2006.

[2] 崔坚.西门子工业网络通信指南[M].北京:机械工业出版社,2005.

猜你喜欢
接收数据发送数据功能块
低复杂度多输入多输出雷达目标角度估计方法
基于LoRa的低能耗物联网技术研究
一种车载自组织网络的媒体接入控制协议
带标记方式的CRDSA++协议性能分析*
Ovation系统FIRSTOUT和FIFO跳闸首出比较
使用IPSec安全传输数据
基于主控同步的CAN总线多点实时数据采集技术
单片机模拟串口数据接收程序的实现及优化
自定义功能块类型在电解槽联锁中的应用
基于MACSV6.5.2的锅炉燃尽风开关量调节门控制功能块设计