基于ModBus与WinCC的釜液位监控系统

2014-03-21 10:49王华强
仪表技术与传感器 2014年2期
关键词:轮询液位计寄存器

王华强,龙 灏

(合肥工业大学电气与自动化工程学院,安徽合肥 230009)

0 引言

在配料控制系统中,反应釜及原料罐的液位是控制系统开泵、开阀的重要依据之一。液位智能仪表大多数都是直接安装在现场,在监控室获得每个测量点的液位十分困难。实现液位温度等模拟信号的监控主要有以下几种途径:

(1)智能仪表4~20 mA标准信号经过安全栅,直接送入PLC,该方法需使用相应的AI、AO模块,但该方法硬件复杂、接线繁琐且造价昂贵,未充分利用智能仪表的通讯功能。

(2)智能仪表直接和上位机通讯,利用VC等程序编写通讯软件,未使用相应的控制器,通用性差,功能单一。

(3)基于CP341的ModBus通讯,西门子公司推荐使用ModBus slave模式,但购买相关驱动的价格昂贵[1]。

故在保证通讯稳定与功能实现的前提下,提出了基于CP341的ASCII通讯方式,并利用WinCC实现了液位的监控与归档。

1 项目背景与系统结构

反应釜配料控制系统共有10种物料与6种溶剂,依据配方,物料与物料、物料与溶剂按照配方经由各自管道下入釜中,经搅拌电机搅拌,经过一系列可控的化学反应之后形成所需的合成革材料。限于篇幅,只介绍液位监控系统的设计。

液位监控系统采用S7-300 PLC,CPU314,机架上有PS模块、CP343-1以太网通讯模块、CP341串行通讯处理模块,及I/O模块。支持MODBUS-RTU协议的16个超声波液位计通过CP341与PLC-300通讯。S7-300通过CP343-1,经由交换机与5台上位机IPC通讯,上位机的监控由WinCC实现。系统结构图如图1所示。

图1 系统结构图

2 ModBus通讯实现

2.1ModBus通信与通讯帧定义

ModBus定义了2种串行传输模式:RTU模式和ASCII模式,各互联的ModBus设备只有处于同一通讯模式下才能进行相互操作。RTU模式在支持ModBus的智能仪器仪表和PLC等设备中得到广泛的应用,系统基于CP341的ASCII通讯形式实现ModBus-RTU通讯[2]。

不同厂商所提供的ModBus协议数据格式略有不同,该项目使用S7-300与特力声UTG21-PS型超声波液位计,S7-300作为主站,超声波液位计作为从站。通信信息组成:地址码、功能码、数据段、CRC校验码[3]。超声波液位计保持寄存器如表1所示。

表1 UTG21-PS型超声波液位计寄存器

超声波液位计中液位测量值所在保持寄存器的地址为0002H,每个测量值占用4个字节,数据类型为IEEE754浮点型。通讯数据格式采用无奇偶校验帧格式,1位起始位,8位字长,1位停止位[3]。实际通讯S7-300与超声波液位计通讯帧格式定义如表2、表3所示。

表2 读寄存器帧

表3 读寄存器返回帧

例如,读取1号液位计液位计信号(共4个字节)。命令代码为:01H,03H,00H,02H,00H,02H,C9H,15H。根据ModBus帧格式定义:01H为地址码,03H为功能码读取多个寄存器的值,0002H为保持寄存器起始地址,0002H为保持读取寄存器数,C915H为CRC码。仪表回传:01H,03H,04H,00H,00H,C8H,42H,A5H,01H。按照ModBus帧格式定义:01H为地址码,03H为功能码,04H为返回字节个数,0000C842H即为返回的浮点型液位瞬时数据(转换为十进制为100),A501H即为CRC码。

2.2S7-300CRC校验程序设计

CRC校验即循环冗余校验,是数据通讯领域中最常见的一种差错校验方法,也是通讯成功与否的关键之一[4]。考虑到校验程序要经常调用,在Step7中建立函数FC1实现CRC校验算法。使用语句表编程语言。定义FC1输入为DB-No(INT)、DBB-Start(INT);DBB-Counts(INT)。输出变量定义为CRC-H(BYTE),CRC-L(BYTE)。程序算法步骤如下:

(1)设置CRC寄存器,并给其赋值FFFF(hex)。

(2)将待校验数据(起始位、停止位位不参加计算)的第一个8-bit字节与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。

(3)CRC寄存器向右移一位,MSB补零,移出并检查LSB。

(4)如果LSB为0,重复第三步;若LSB为1,CRC寄存器与A001H相异或。

(5)重复第三与第四步直到8次移位全部完成。此时该字节数据处理完毕。

(6)重复第二至第五步直到所有数据全部处理完成。

(7)最终CRC寄存器的内容即为CRC值。

2.3PLC与超声波液位计通讯程序设计

PLC与液位计的通讯实现采用轮循的方式。在程序中一个智能从站对应一个DB发送数据块和一个DB接收数据块。在Step7中提供系统功能块:FB7 “P_RCV_RK”用于接收功能块、FB8 “P_SEND_RK”用于发送功能块,可实现对不同液位计的轮循。主站程序轮询流程图如图2所示。

图2 主站程序轮询流程图

首先进行初始化,初始化阶段主要完成CP341模块的参数化设置,复位接收缓冲区等工作。在Step7中的HW config 中设置CP341的属性,填入需要设置的CP341的CPU地址,“Protocol”处选择ASCII形式,并在弹出的“Protocol”窗口内设置CP341的波特率9 600 bit/s、奇偶校验方式(无)、数据格式(1位开始位,8位数据位,1位停止位)、字符延迟时间设定为4 ms[4]。接口类型为RS485半双工。为了实现S7-300对多个从站的轮循,程序构造了一个轮询计数器,通过修改轮询计数器的值来修改主站发送数据帧的站地址。

初始化完成后,按照通讯定义的帧格式,生成1#从站读数据,包括从站地址、功能码、读取寄存器的首地址、寄存器的个数、调用FC1生成的CRC校验码。启动发送功能,调用FB8 “P_SND_RK”发送数据到从站,FB8将返回状态信息,判断是否发送完成,如果发送错误,则重新启动发送[5]。发送完成后,置位发送标志位M9.0,构造上升沿脉冲使FB7“REQ”始能有效,准备接收从站返回数据。同时启动超时定时器T9,如果超时定时时间到,还没有接收到数据,则放弃等待,开始轮询下一从站。接收完成后,做如下几方面处理:

(1)根据接收数据的地址标识符判断是来自哪个从站的数据,调用FC1进行CRC校验,如接收正确完成,复位发送成功标志位,将接收的数据4~7字节转移到指定的从站数据块中,同时清空数据接收缓冲区。

(2)复位接收完成标志位,同时修改轮循计数器的值,准备轮询下一个从站,复位超时定时器,启动一个100 ms延时定时器,延时时间到后开始轮询下一从站。确保程序高效正确的运行,避免由于通讯故障导致PLC程序死锁。

程序设计需要注意的问题:

(1)ModBus通讯中,数据传输时先低字节,后高字节,需要对接收过的数据高低字节进行交换方可写入相应的接收DB块中。

(2)通过控制接收发送标志位,可以有效保证程序正确执行,使程序结构更加清晰完整。

通过上述操作,即可实现S7-300对10个液位传感器的轮循、数据查询、解析功能,保证程序运行正常。重要DB块定义及参数地址如表4所示。

表4 重要参数地址

3 基于以太网的上位机监控

3.1上位机与WinCC的配置

配备CP343-1模块的S7-300与多台上位机通过交换机即可构成以太网网络,通讯介质为双绞线。配置以太网需要注意的问题:

(1)分别在HW config中设置CP343-1的IP地址,在Set PG/PC中设置上位机的IP地址。该项目中5台工控机的IP地址为192.168.0.1~192.168.0.5,CP343-1的IP地址为192.168.0.11。

(2)在WinCC项目管理器窗口中添加SIMATIC S7 Protocol Suite驱动程序,在TCP/IP下建立相应的连接。该TCP/IP连接的系统参数中逻辑设备名称必须与本机的网络适配器名一致。并在新建立连接的属性里填写相应的IP地址、机架号、槽号[6]。

(3)在新建连接中建立相应的外部变量,16个液位外部变量起始地址对应为DB1.DD0~DB16.DD0,数据类型为浮点数32位IEEE754。

3.2WinCC画面组态

WinCC是Windows Control Center的简称,集成了SCADA、组态、脚本语言和OPC等先进技术,为用户提供了Windows操作系统下使用各种通用软件的功能[7]。该项目使用WinCC版本为6.2。

打开图形编辑器,添加相应的文本、I/O域,修改I/O域属性,将I/O域连接相应的外部变量。在选项板中调用相应的智能对象棒图。修改棒图的属性:对象的工程驱动值同样连接对应的外部变量。在棒图的颜色属性中使用动态对话框。事件名称为变量,表达式为对应的外部变量,数据类型为模拟量,表达式数值范围为0~0.2 m、4.8~5.0 m时棒图颜色填充为红色,其他范围为绿色,即可实现当液位过高或过低时警示。液位监控主画面如图3所示。

图3 液位监控画面

工业现场的安全至关重要,当危险情况发生时,需利用各种方式第一时间通知监控室人员,在WinCC中可直接调用Windows的API函数,在棒图的属性中添加C动作,即可实现液位过高和过低时语音报警[8]。代码如下:

long_main(char*lpszPictureName,char*

lpszObjectName,char*lpszPropertyName)

{#progma code(“Winmm.dll”)

void WINAPI PlaySoundA(char*pszSound,char*hmode,DWORD dwflay);

#progma code()

if((“level1”>4.8)&& (“level1”<0.2))

PlaySoundA(“D:WinCCmediaSound.wav”,

Null,8);

return 1020;

}

WinCC使用变量记录来组态过程值的归档,首先组态外部变量过程值归档,定义采集和归档周期。然后在图形编辑器中调用WinCC Online Table Control控件,即可在运行系统显示过程数据。液位归档如图4所示。

图4 液位归档画面

4 结束语

论述了配料系统液位监控系统设计,基于ModBus与以太网通讯网络,并在上位机上使用WinCC监控显示。实现了液位信号的快速采集、处理、监控、报警,保证了系统安全稳定运行。同时基于CP341的ASCII码通讯程序设计也省去购买硬件狗及相应驱动的费用。系统具有实时性好、稳定性高、经济等特点,在工厂实际生产中运行良好稳定,值得在同类型的自动化企业中推广。

参考文献:

[1]王海波.基于CP341的Modbus RTU通讯的设计与实现.工矿自动化,2009(8):90-92.

[2]郎学政,许同乐,李中华.基于Modbus协议的PLC在自动供水监控系统中的应用.仪表技术与传感器,2012(2):62-65.

[3]曹振国,许琳.智能化仪器仪表原理及应用.北京:中国水利水电出版社,2011:268-274.

[4]王延年,陈红,高霞.基于CP341模块的MODBUS RTU从站协议免驱动通信.西安工程大学学报,2010,24(6):786-790.

[5]廖常初.S7-300/400 PLC 应用技术.北京:化学工业出版社,2008:210-217.

[6]刘华波,王雪,何文雪,等.组态王软件WinCC及其应用.北京:机械工业出版社,2009:72-78.

[7]西门子有限公司自动化与驱动集团.深入浅出西门子WinCC.北京:北京航天航空大学出版社,2004:1-5.

[8]杨路明,雷亚军.组态软件WinCC在自动监控系统中的应用.计算技术与自动化,2003,22(4):21-24.

猜你喜欢
轮询液位计寄存器
STM32和51单片机寄存器映射原理异同分析
干煤粉气化炉激冷室液位计失准分析及优化
Lite寄存器模型的设计与实现
气液分离罐液位计接管泄漏分析
基于等概率的ASON业务授权设计∗
一种新型船用自闭式液位计的研制
移位寄存器及算术运算应用
依托站点状态的两级轮询控制系统时延特性分析
利用时间轮询方式操作DDR3实现多模式下数据重排
Endress+Hauser Deltabar FMD72电子差压液位计