基于自由口协议和Modbus RTU协议称重数据远传研究
2018-09-10陈志伟徐世许
陈志伟 徐世许
摘要: 为了将称重数据实时传送到DCS中方便管理,本文以青岛某碱厂采集的20多种生产原料数据为例,基于自由口协议和Modbus RTU协议,设计应用了称重数据远传系统。系统由上位机、可编程逻辑控制器(programmable logic controller,PLC)和分布式控制系统(distributed control system,DCS)组成。上位机从数据库中读取数据并经过转换写入PLC内存区;DCS设有RS485接口,且只能识别Modbus RTU协议,于是DCS经RS485光纤转换器与PLC相连,实时读取PLC中的数据。本方案主要应用西门子自由口协议和Modbus协议,编写PLC内部程序,上位机方面使用VB60编写上位机与PLC的串行端口数据传输程序,同时应用ADO方式对结构化查询语言(structured query language,SQL)数据库进行数据操作,实现数据的查询、导出和删除。该系统已成功应用于堿厂生产现场,能够满足对数据远程实时监控的要求。
关键词: 自由口协议; Modbus RTU协议; 通信; DCS
中图分类号: TP393.04文献标识码: A
近年来,随着工业的迅速发展,传统的通信方式已不能适应现代工业生产的需求,将自动化设备采集的数据传送到计算机并进行相关的分析处理,已经成为交通、电力、冶金等相关行业的重要目标[1]。通常情况下,需要运用企业资源计划(enterprise resource planning,ERP)系统[2],实现对计算机数据的远程监控和分析,但是过高的成本使小型集散控制系统失去经济效益。DCS凭借操作简单、网络通信能力好等优点,在很多领域得到了普遍应用,但是DCS无法与其他系统共享信息,使得整个系统信息封闭[34]。为了将Toledo地磅系统中的称重数据传送至该厂的DCS系统中,实现对生产现场实时监控,需要设计一个称重数据远传系统,解决DCS系统信息封闭的缺点。基于此,本文设计了一个由上位机、PLC和DCS组成的称重数据远传系统,并应用自由口协议和Modbus RTU协议[57]实现数据采集、传输和存储。该系统通过在上位机上使用高级语言编写程序,使地磅系统数据库中的数据先传送至PLC指定区域中存放,再由DCS系统主动查询PLC中的数据,从而降低成本,并充分运用DCS的功能。称重数据远传系统能够实时将地磅上传到SQL Server数据库中的数据传送到DCS系统中,满足了厂家对数据实时监管的需求。该研究提高了工厂的工作效率和管理水平。
1称重数据远传系统硬件结构
称重数据远传系统由上位计算机、PLC和DCS组成,称重数据远传系统硬件结构如图1所示。PLC选用含有两个RS485通信端口的西门子S7200 226系列,并运用自由口协议与上位机通信,运用Modbus RTU协议与DCS通信。DCS使用的是FOXBORO I/A Series,控制器为FCP270,通讯卡采用FBM231或Modbus板卡[810]。由于DCS只能作为主站,实时主动查询指定区域内的数据,所以需要在从机PLC内对数据进行分区,供DCS查询[11]。
考虑PLC与DCS的通信距离过远且传送过程中有电磁干扰,采用RS485串口通信不能保证信号的实时性和稳定性,于是采用了一套RS485光纤转换器(光端机)来实现数据的远距离通信[12]。
该数据远传系统的工作原理是将地磅传感器传送到AVS AC系统的数据存入SQL Server数据库,然后通过编写的VB软件将SQL Server中的数据经过MSComm控件调用Windows的底层应用程序编程接口(application programming interface,API)发送到PLC的内存区(V区)。
由于上位机用到的串口过多,于是安装了Moxa板卡进行串口拓展。将Moxa端口1设置为RS232接口后,利用Moxa的端口1连接到PLC的Port 1进行数据传输,数据传送至PLC后,由PLC内部的程序将数据进行相应的分区,从而实现数据的定位存储,然后DCS通过FBM231板卡或Modbus板卡对PLC中固定区域的数据每05 s采集一次,采集完成后在DCS的监控界面中显示当前正确的数据和历史数据的趋势图。
2上位机程序设计
2.1上位机程序流程图
称重数据远传系统在上位机上的软件操作系统通过VB 60编程实现。上位机程序流程图如图2所示。
2.2上位机自由口通信指令
自由口通信需要在上位机和PLC内分别编程来实现。在VB 60中编写的上位机自由口通信写指令格式是固定的,由起始字符、数据段和结束字符组成:
Send(0)=&H21‘起始字符
Send(1)~Send(18)‘由数据库数据转换为二进制的数据段
Send(19)=&H0A‘结束字符
设置结束字符是为了方便人为识别指令在何处结束。
PLC向上位机返回的响应指令格式固定,由起始字符、数据段和结束字符组成:
Receive(0)=&H21‘起始字符
Receive (1)~Receive(18)‘返回存入PLC中的信息码
Receive(19)=&H0A‘结束字符
2.3MSComm控件的使用
为了使应用程序更加便捷、快速地使用串行接口接收和发送数据,Microsoft公司开发了微软通信控制(microsoft communications control,MCC)。该控件简化了Windows下串行通信的编程,并通过事件驱动(eventdriven)方法和查询法对通讯过程中产生的问题进行相应处理[13]。MSComm控件程序段如下:
With Mscomm1
.MSComm1.CommPort = 3‘使用3號串口
.MSComm1.Settings = "9 600,n,8,1"‘波特率为9 600,无校验,8位数据位,1位停止位
.MSComm1.InputLen = 0‘一次读取全部数据
.MSComm1.PortOpen = True‘打开端口
.MSComm1.InputMode = ComInputModeBinary‘Input属性以二进制方式取回
MSComm1.InBufferCount=0‘清空接收缓冲区
MSComm1.Output=send‘将自由口通信写指令以二进制形式发送
Do
Doevents
Loop until MSComm1.InBufferCount>=20‘返回字符个数大于等于20个时Receive=MSComm1.Input‘接收返回码
运用自由口协议和MSComm控件,经过编程后实现上位机和PLC的通信。在VB 60环境下,开发的上位机程序界面如图3所示。
2.4使用ADO控件实现对SQL Server和Excel的操作
ADO Data控件是通过Microsoft ActiveX数据对象(activeX data object,ADO)建立符合OLE DB规范数据源连接的数据绑定控件。在VB 60的环境下使用ADO控件对数据库中的数据表进行操作,具体操作步骤如下[1416]:
1)在工程中选择“部件”命令,添加Adodc控件与DataGrid控件。
2)用Adodc中的ConnectionString属性或Connection对象连接数据库。
3)用Adodc中的RecordSource属性或者Recordset对象从数据源中需要的数据,选择打开的记录集。
4)用Recordset对象中的属性对记录集中的记录实现读取、查询、删除和导出等功能。
5)通过DataGrid控件中的Datasource属性设置在DataGrid控件中显示的数据内容,在此处将该属性设置为Adodc 1,即可将数据直观的显示在程序界面。
6)该软件能够根据日期、货物代号、车牌号或车辆代号对数据进行查询、删除、导出等功能,数据查询与清理界面如图4所示。
3PLC程序设计
3.1自由口通信的程序设计
S7200 PLC通信协议的类型有很多,主要有点对点接口(point to point interface,PPI)协议、多点接口(multipoint interface,MPI)协议、PROFIBUS协议、Modbus RTU协议、自由口协议等。PPI协议不能一次性传输足够长的数据,而且需要使用用于过程控制的(OLE for process control,OPC)服务器[1718]对程序进行开发,过程复杂。自由口协议是由用户自定义与其他设备的串行通信协议,使用简单方便,于是该设计选择自由口协议作为该系统的通信协议。S7200 CPU的通信口可以设置为自由口模式,设置后,端口0或端口1由PLC内部程序来控制,于是整个通信过程就由发送指令XMT、接收指令RCV、接收完成中断、字符中断和发送完成中断来控制。S7200自由口通信是基于RS485通信基础的半双工通信的,在该协议下发送和接收指令不能同时执行[19]。
自由端口模式的使用需要在特殊寄存器(SM)中进行参数设置。因为端口1与上位机通信,所以要对SMB130、SMB187、SMB188、SMB190、SMB192、SMB194进行设置。
SMB130为端口1的控制字节,自由端口模式控制字节如图5所示。图5中,pp为奇偶检验选择,选择无校验,所以是00;d为每个字符的数据位,选择8位/字符,所以是0;bbb为自由端口的波特率,选择9 600,所以是010;mm为协议的选择,选择自由端口模式,所以是01。综上所述,控制字节的二进制表示形式为00001001,转化为十六进制则为09。
SMB186为消息接收状态字节,当该字节非零时,RCV指令未被激活或接收已经结束。
SMB187~SMB194为RCV指令开始、终止接收数据的条件。
SMB187为消息接收控制字节,消息接收控制字节如图6所示。图6中,en为禁止或允许接收消息,此处为1,表示允许接收消息;sc为起始字符检测,此处为1,使用起始字符检测;ec为结束字符检测,此处为0,不使用结束字符检测;il为空闲线时间检测,此处为1,使用空闲线检测;c/m为1,使用消息定时器来检测数据接收结束状态;tmr为1,使SWM192中的时间有效;bk为0,忽略break条件。
SMB188字节中存放消息的起始字符,SMB190中存放以ms为单位的空闲线时间间隔,SMB192中存放以ms为单位的字符间/消息间定时器的超时值,若超出该时间段,则停止接收消息,SMB194为接收的最大字符数(1~255B)。
3.2Modbus RTU从站协议的通信程序设计
工厂中应用的DCS只能识别Modbus RTU协议,所以在PLC中使用Modbus协议通信时需要安装STEP 7Micro/WIN V32指令库[20],然后在库文件中找到“Modbus Slave Port 0”,调用MBUS_INIT指令和MBUS_SLAVE指令。MBUS_INT指令如图7所示,MBUS_SLAVE指令如图8所示。
输入参数Mode为1时,分配Modbus协议并启用该协议。Addr用于设置从站地址,该地址为6,Baud将波特率设置为9 600,Parity为0是无校验,Delay是以ms为单位的Modbus消息结束的延迟时间。主设备能够访问PLC的V存储区的最大字个数用MaxHold表示,PLC中V存储区内保持寄存器的起始地址用HoldStart表示。
指令添加之后要分配库存储器,Modbus指令需要780B的V存储区,为了使MBUS_INIT指令中用HoldStart和MaxHold参数分配的V存储区不重叠,库存储区的起始地址应该在V存储区之外。该工程的库存储区设置在VB4000。
4DCS对PLC的数据读取
FOXBORO I/A Series的DCS具有强大的功能,能够对数字信息进行实时采集和监控。DCS通过FBM231板卡上的RS485接口连接到PLC,然后通过组态软件对PLC内存区中20多个固定的存储区域进行数据采集,每05 s扫描一次所有内存区。由于DCS对数据的读取方式与PLC的数据存储方式不同,所以需将采集的数据进行高字节与低字节互换,才能得到正确的数据形式,最后将正确的数据显示在DCS的监控界面中,并产生历史趋势图。
5结束语
本文基于自由口协议和Modbus RTU协议,设计了由上位机、PLC和DCS组成的称重数据远传系统,实现了将上位机数据远程传送到DCS中监控的功能,开发了DCS的信息共享功能。该系统结构精简,经济性好,并且能够满足工业现场对数据进行实时监控的要求。该系统运用ADO方式对数据进行操作,方便了现场工作人员对数据的使用和管理,减少了数据查询时的错误,同时提高了企业的管理效率和管理水平,节约生产成本。
参考文献:
[1]邓磊. 工业实时数据在线分析平台研究[D]. 武汉: 华中科技大学, 2012.
[2]兰德瑞, 陈美彤. 国内ERP应用状况分析[J]. 化工管理, 2016, 14: 67.
[3]丁善达, 赵景萍, 黄龙, 等. PLC、DCS、FCS三大类型控制系统的基本特点[J]. 中国科技纵横, 2016(19): 76, 191.
[4]李曉. 浅析PLC、DCS、FCS三大控制系统[J]. 黑龙江科技信息, 2017(6): 158159.
[5]徐世许, 朱妙其, 王毓顺. 可编程序控制器: 原理·应用·网络[M]. 合肥: 中国科学技术大学出版社, 2008.
[6]Ma Y H, So P L, Gunawan E. Performance Analysis of OFDM System for Broadband Power Line Communications Under Impulsive Noise and Multipath Effects[J]. IEEE Transactions on Power Delivery, 2005, 20(2): 674682.
[7]刘辉, 师宁. S7200与FX2N PLC实时数据通信的研究[J]. 通信电源技术, 2013, 30(4): 7678.
[8]王永强. FOXBORO DCS系统和从设备之间的通讯测试方法[J]. 数字技术与应用, 2016(10): 3.
[9]李红, 刘大飞, 徐寿永. 横河CS3000与FOXBOROI/A DCS系统对比[J]. 化工管理, 2014(3): 14.
[10]雷钊, 陈翔, 谢林, 等. ModBus在FOXBORO系统中的应用[J]. 自动化与仪器仪表, 2012(1): 7578.
[11]王吉林, 祝铃钰, 许轶, 等. 基于OPC通讯的实时流程模拟技术研究[J]. 现代化工, 2008, 28(S1): 174176.
[12]张宏磊, 马应成, 张松宝, 等. 西霞院水电站电量数据传输方式优化[J]. 水电与抽水蓄能, 2008, 32(2): 2627.
[13]明日科技. Visual Basic控件参考大全[M]. 北京: 人民邮电出版社, 2006.
[14]明日科技. Visual Basic开发经验技巧宝典[M]. 北京: 人民邮电出版社, 2007.
[15]邵超, 张斌, 张巧荣. 数据库实用教程SQL Server 2008[M]. 北京: 清华大学出版社, 2009.
[16]伍经纹, 徐世许, 王鹏. 基于工业以太网FINS通信的配料监管系统设计[J]. 青岛大学学报: 工程技术版, 2016, 31(4): 5255.
[17]张俊彪, 王鸿辉, 何长安. 基于OPC Server的PC与S7300/400的通信[J]. 电力自动化设备, 2007, 27(4): 8386.
[18]田茂琴. OPC数据访问服务器研究与应用[J]. 现代电子技术, 2015, 38(21): 7275.
[19]廖常初. S7200 PLC编程及应用[M]. 北京: 机械工业出版社, 2007.
[20]袁金云, 尹生强, 李俊杰, 等. 基于Modbus协议的PLC与多台电表通信研究[J]. 青岛大学学报: 工程技术版, 2015, 30(3): 5963.