本文由米尔自动化网http://www.mirautomation.com/整理推荐
米尔自动化网http://www.mirautomation.com/
多串口数据采集技术在生产调度监测系统中的应用
一.概述
中石化股份公司巴陵分公司鹰山石油化工厂(以下简称鹰化厂)信息中心自行开发了生
产调度监测系统,该系统采集生产装置中DCS系统的实时过程数据,存放于生产调度服务
器,生产指挥人员通过网络和客户端软件能得到其需要的生产过程实时和历史数据。该项目
荣获鹰化厂“科技进步三等奖”。本文主要讨论了以微软VB5.0为开发工具采用Moxa公司多
串口卡C320Turbo实现对DCS系统实时过程数据的采集。本文结合鹰化调度监测系统的
实际应用,论述多串口数据采集技术的核心算法。
生产调度监测系统是我厂MIS系统的重要组成部分,是MIS系统完整实现的数据基础。以
实时数据采集为基础,采集所有主装置生产过程数据。生产调度监测系统向工厂管理信息系
统、办公自动化系统提供数据,以达到整个生产过程的综合管理及优化的目的。
该系统数据采集软件的开发环境:在WindowsNT4.0下VB5.0企业版开发,以Oracle8
为后台数据库。NT4.0Server具有与Windows95相同的用户界面,由于其功能强大,再
加上友好的图形界面,使用户更容易接受,可减轻网络管理员的负担,是目前主流的网络操
作系统之一。VB是Windows环境下最主要的开发工具之一,从生产调度监测系统数据采
集软件的开发过程来看,选择VB企业版作为开发工具是十分适合的。
二、多串口数据采集的原理
数据采集是指通过上位机把DCS数据采集到生产调度服务器数据库中,是生产调度监
测系统的核心技术。我们创造性地在服务器上安装多串口设备,服务器上运行多串口数据采
集软件,通过多串口直接采集现场多套DCS生产过程数据,这样,用一台服务器就实现多
台数据采集工作站的功能,充分利用了服务器功能强大的优点(由于数据采集软件数据量较
大,必须有速度较快的服务器充当生产调度服务器,我厂生产调度服务器采用HP服务器,
数据采集软件占用CPU时间较少)。采用多串口数据采集方式完全改变了以往生产调度系
统的系统结构,大副降低了生产调度监测系统的硬件成本,减少了系统维护工作量(多台数
据采集计算机日夜运行,出故障的概率高)。这种数据采集模式在厂生产高度监测系统中得
到成功实施,系统运行一年多以来,被证明是完全可行和可靠的。目前,石化行业和其它制
造行业普遍采用DCS,大部分生产单位采用多套DCS系统进行生产控制,因此这种多串口
数据采集技术具有相当的推广应用价值。
多串口数据采集系统逻辑结构图:
我厂各主要生产装置的实时过程数据由四套DCS系统采集和设定。生产调度监测系统
服务器(以下称上位机)采集DCS系统的各种数据,并把采集到的数据实时存入生产调度
本文由米尔自动化网http://www.mirautomation.com/整理推荐
米尔自动化网http://www.mirautomation.com/
服务器数据库系统中,自动地形成历史数据库。其它与上位机通过网络连在一起的计算机可
以通过计算机网络能够快速并准确无误地取得实时数据和历史数据。
三、数据采集软件的核心算法
鹰化厂生产调度监测系统数据采集软件运行于上位机上,软件用VB5.0企业版开发,
由于数据采集软件的主要功能是采集DCS系统的实时过程数据,因此,其核心算法便是对
RS232CTTY通信口进行有效的控制的方法,这方面的主要算法有以下几个:(由于篇幅所
限,在此只列出主要核心算法的代码)
3-1多个RS232CTTY串口通信是同时进行的
由于VB不支持多线程开发,因此只利用VB的内部功能无法做到多串口通信同时进行。
利用VB的定时器控件数组巧妙地实现了多个串口同时通信而不互相干扰,这样大大加快了
通信速度。
以下代码实现从数据库中取出各种通信参数动态生成多个通信控件MSCOMM、定时器
以实现多个串口同时通信的功能:
WithfrmGetData.datRS232COM.Recordset
.MoveLast
.MoveFirst
Fori=1To.RecordCount
Index=.Fields("rs232com")
Me.TabStrip1.Tabs.Addi,"COM"&Index
Me.TabStrip1.Tabs(i).Caption="COM"&Index
LoadfrmGetData.lblAcmd(Index)
LoadfrmGetData.lblGcmd(Index)
LoadfrmGetData.TimeReComm(Index)
LoadfrmGetData.TimerSend(Index)
LoadfrmGetData.MSCommDCS(Index)
frmGetData.MSCommDCS(Index).Settings=.Fields("set")
frmGetData.MSCommDCS(Index).CommPort=.Fields("rs232com")
frmGetData.MSCommDCS(Index).PortOpen=True
frmGetData.MSCommDCS(Index).RThreshold=1
frmGetData.TimeReComm(Index).Interval=1
Ifi=1Then
frmGetData.lblAcmd(Index).Visible=True
frmGetData.lblGcmd(Index).Visible=True
EndIf
.MoveNext
Nexti
EndWith
3-2RS232CTTY串口通信是事件驱动的
RS232TTY通信程序开发一般采用2种方法:
1)查询法:程序不断地查询RS232TTY口,如果有数据则接收,否则继续查询。
2)中断法:有通信事件产生时则自动产生中断,程序转入通信事件处理模块。
鹰化厂生产调度监测系统数据采集软件采用中断法开发。RS232CTTY串口通信是利
用VB5.0的MSCOMM通信控件实现的,在通信过程中,各个通信事件自动驱动相关的处
理模块,使数据采集程序的结构性好,便于调试,并且在处理串口通信的过程中占用CPU
本文由米尔自动化网http://www.mirautomation.com/整理推荐
米尔自动化网http://www.mirautomation.com/
时间少。
3-3通信格式的处理
在与DCS系统进行通信的过程中,数据采集向DCS系统发送数据采集请求,其请求
的命令格式必须严格地遵照各个DCS的通信命令的格式要求,如果有误,则采集不到DCS
的数据。本系统对通信格式先作预处理,利用数据维护子模块得到符合各个要采集的DCS
系统的通信格式的采集命令字符串,并且存放至数据库的相关表格记录之中,在要进行通信
时,只需要从相关表格中取得此字符串,发往相应的RS232CTTY口即可,这样采集程序
运行时不再需进行通信格式的生成,使得程度的运行效率得到提高,并且由于采集程序不涉
及到通信命令的生成,使得程序不可能产生通信格式方面的错误,因此程序运行的可靠性大
大提高。
以下子程序实现从数据库中取出通信命令字符串并给RS232口:
PublicSubSendTGData(IndexAsInteger)
DimstrDataAsString
DimstrFindIndexAsString
frmGetData.lblAcmd(Index).Caption=""
FlagLineBusy(Index)=True
frmGetData.datQRunPageCom.Refresh
WithfrmGetData.datQRunPageCom.Recordset
strFindIndex="rs232com="&Index
.FindFirststrFindIndex
If.NoMatch=FalseThen
strData=.Fields("Gcommand")
frmGetData.MSCommDCS(Index).Output=strData
frmGetData.lblGcmd(Index).ForeColor=vbBlack
frmGetData.lblGcmd(Index).Caption=strData
frmGetData.lblGcmd(Index).Refresh
Else
frmGetData.lblGcmd(Index).Caption=""
EndIf
EndWith
EndSub
3-4数据包的处理
DCS系统得到上位机的数据采集要求后,便把上位机所要求的过程数据进行数据打包
处理并发给上位机。为了提高通信效率,上位机一次要求的数据不止一个,DCS系统回应
的数据包中包含这些数据,这样便要求有一个解开数据包的子模块。本系统的数据采集解数
据包子模块利用数据过滤的算法得到单个过程数据,之后把此过程数据放入一个过程数据集
合中,于是便得到各个过程数据。
四、多串口数据采集软件的易用性和健壮性
4-1多串口数据采集软件的易用性:即程序界面、人机接口的友好性
在生产调度监测系统中,只有系统维护人员可以看到数据采集软件的界面。由于数据采
集软件需要同时采集多个DCS系统的数据,因此给数据采集软件的编写、调试以及维护带
来相当大的困难,数据采集软件利用VB的多页面控件实现了本系统的多串口通信数据显示
功能,这种界面给系统开发维护人员提供极大方便。
在一个窗口上可以同时看到多个串口数据,只需鼠标在所需要的串口上
本文由米尔自动化网http://www.mirautomation.com/整理推荐
米尔自动化网http://www.mirautomation.com/
(COM5,COM6,COM7等)一点,此串口的接收和发送的数据即显示出来。
4-2多串口数据采集软件的健壮性:通信自动恢复功能和事件日志功能
在通信过程中,可能有意外的事件发生,例如停电造成Modem不能通信等等情况,这
些情况会造成通信出错而导致系统失败。数据采集软件对各种意外事件均做了相当充分的考
虑,如Modem停电或断线等,在恢复供电后或Modem断线重新挂接后,数据采集软件可
以判断并进行自动恢复工作。
当有通信意外事件发生时,数据采集软件自动地把出现的意外事件记录到数据库中,便
于维护人员分析。在生产调度系统运行一年多以来,没有出现因为数据通信有误而导致系统
失败的情况发生,其中数据采集软件的通信自动恢复和事件日志功能起了关键性的作用。
以下子程序通过检查专线Modem的状态判断通信线路是否正常:
PublicFunctionCheckConnect(IndexAsInteger)AsBoolean
DimintPosAsInteger
intPos=InStr(1,frmGetData.lblAcmd(Index).Caption,"NOCARRIER")
IfintPos>0Then
frmGetData.TimerSend(Index).Enabled=False
mGetData.blnConnect(Index)=False
frmGetData.lblAcmd(Index)=""
frmGetData.lblGcmd(Index).ForeColor=vbRed
frmGetData.MSCommDCS(Index).OutBufferCount=0
frmGetData.MSCommDCS(Index).InBufferCount=0
CallmGetData.LogEvents(Index,"NOCARRIER")
CheckConnect=False
ExitFunction
EndIf
intPos=InStr(1,frmGetData.lblAcmd(Index).Caption,"CONNECT")
IfintPos>0Then
frmGetData.lblAcmd(Index)=""
frmGetData.MSCommDCS(Index).InBufferCount=0
frmGetData.MSCommDCS(Index).OutBufferCount=0
frmGetData.lblGcmd(Index).ForeColor=vbBlack
CallmGetData.LogEvents(Index,"CONNECT")
mGetData.blnConnect(Index)=True
IffrmGetData.mnuBegin.Checked=TrueThen
frmGetData.TimerSend(Index).Enabled=True
EndIf
ExitFunction
EndIf
FlagLineBusy(Index)=False
CheckConnect=True
EndFunction
以下子程序实现通信事件日志记录到数据库系统:
PublicSubLogEvents(IndexAsInteger,strEventsAsString)
WithfrmCommEvents.datPrimaryRS.Recordset
本文由米尔自动化网http://www.mirautomation.com/整理推荐
米尔自动化网http://www.mirautomation.com/
.AddNew
.Fields("rs232com")=Index
.Fields("DateTime")=Date&""&Time
.Fields("EventsLog")=strEvents
.Update
EndWith
EndSub
五、结束语
目前,我厂生产调度实时监测系统投入使用1年多以来,MOXA公司的C320Turbo
多串口卡以其高性能(双CPU)、易于使用、高可靠性等特点充分保证了生产数据准确可靠,
系统运行安全稳定,数据更新快速,大大方便生产指挥人员及时、准确掌握生产实际情况,
为生产指挥人员正确、有效、科学地指挥生产提供了强有力的保证,确保了工厂生产的安全
运行。
|
|