技术中心
 
 

多串口数据采集技术在生产调度监测系统中的应用

   日期:2013-06-25     来源:互联网    

一.概述

中石化股份公司巴陵分公司鹰山石油化工厂(以下简称鹰化厂)信息中心自行开发了生产调度监测系统,该系统采集生产装置中DCS系统的实时过程数据,存放于生产调度服务器,生产指挥人员通过网络和客户端软件能得到其需要的生产过程实时和历史数据。该项目荣获鹰化厂“科技进步三等奖”。本文主要讨论了以微软VB5.0为开发工具采用Moxa公司多串口卡C320 Turbo实现对DCS系统实时过程数据的采集。本文结合鹰化调度监测系统的实际应用,论述多串口数据采集技术的核心算法。

生产调度监测系统是我厂MIS系统的重要组成部分,是MIS系统完整实现的数据基础。以实时数据采集为基础,采集所有主装置生产过程数据。生产调度监测系统向工厂管理信息系统、办公自动化系统提供数据,以达到整个生产过程的综合管理及优化的目的。

该系统数据采集软件的开发环境:在Windows NT4.0下VB5.0企业版开发,以Oracle 8为后台数据库。NT4.0 Server具有与Windows 95相同的用户界面,由于其功能强大,再加上友好的图形界面,使用户更容易接受,可减轻网络管理员的负担,是目前主流的网络操作系统之一。VB是Windows环境下最主要的开发工具之一,从生产调度监测系统数据采集软件的开发过程来看,选择VB企业版作为开发工具是十分适合的。

二、多串口数据采集的原理

数据采集是指通过上位机把DCS数据采集到生产调度服务器数据库中,是生产调度监测系统的核心技术。我们创造性地在服务器上安装多串口设备,服务器上运行多串口数据采集软件,通过多串口直接采集现场多套DCS生产过程数据,这样,用一台服务器就实现多台数据采集工作站的功能,充分利用了服务器功能强大的优点(由于数据采集软件数据量较大,必须有速度较快的服务器充当生产调度服务器,我厂生产调度服务器采用HP服务器,数据采集软件占用CPU时间较少)。采用多串口数据采集方式完全改变了以往生产调度系统的系统结构,大副降低了生产调度监测系统的硬件成本,减少了系统维护工作量(多台数据采集计算机日夜运行,出故障的概率高)。这种数据采集模式在厂生产高度监测系统中得到成功实施,系统运行一年多以来,被证明是完全可行和可靠的。目前,石化行业和其它制造行业普遍采用DCS,大部分生产单位采用多套DCS系统进行生产控制,因此这种多串口数据采集技术具有相当的推广应用价值。

我厂各主要生产装置的实时过程数据由四套DCS系统采集和设定。生产调度监测系统服务器(以下称上位机)采集DCS系统的各种数据,并把采集到的数据实时存入生产调度服务器数据库系统中,自动地形成历史数据库。其它与上位机通过网络连在一起的计算机可以通过计算机网络能够快速并准确无误地取得实时数据和历史数据。

三、数据采集软件的核心算法

鹰化厂生产调度监测系统数据采集软件运行于上位机上,软件用VB5.0企业版开发,由于数据采集软件的主要功能是采集DCS系统的实时过程数据,因此,其核心算法便是对RS232C TTY通信口进行有效的控制的方法,这方面的主要算法有以下几个:(由于篇幅所限,在此只列出主要核心算法的代码)

3-1多个RS232C TTY 串口通信是同时进行的

由于VB不支持多线程开发,因此只利用VB的内部功能无法做到多串口通信同时进行。利用VB的定时器控件数组巧妙地实现了多个串口同时通信而不互相干扰,这样大大加快了通信速度。

以下代码实现从数据库中取出各种通信参数动态生成多个通信控件MSCOMM、定时器以实现多个串口同时通信的功能:

With frmGetData.datRS232COM.Recordset

.MoveLast

.MoveFirst

For i = 1 To .RecordCount

Index = .Fields("rs232com")

Me.TabStrip1.Tabs.Add i, "COM" & Index

Me.TabStrip1.Tabs(i).Caption = "COM" & Index

Load frmGetData.lblAcmd(Index)

Load frmGetData.lblGcmd(Index)

Load frmGetData.TimeReComm(Index)

Load frmGetData.TimerSend(Index)

Load frmGetData.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

If i = 1 Then

frmGetData.lblAcmd(Index).Visible = True

frmGetData.lblGcmd(Index).Visible = True

End If

.MoveNext

Next i

End With

3-2 RS232C TTY 串口通信是事件驱动的

RS232 TTY通信程序开发一般采用2种方法:

1)查询法:程序不断地查询RS232TTY 口,如果有数据则接收,否则继续查询。

2)中断法:有通信事件产生时则自动产生中断,程序转入通信事件处理模块。

鹰化厂生产调度监测系统数据采集软件采用中断法开发。RS232C TTY 串口通信是利用VB5.0的MSCOMM通信控件实现的,在通信过程中,各个通信事件自动驱动相关的处理模块,使数据采集程序的结构性好,便于调试,并且在处理串口通信的过程中占用CPU时间少。

3-3 通信格式的处理

在与DCS系统进行通信的过程中,数据采集向DCS系统发送数据采集请求,其请求的命令格式必须严格地遵照各个DCS的通信命令的格式要求,如果有误,则采集不到DCS的数据。本系统对通信格式先作预处理,利用数据维护子模块得到符合各个要采集的DCS系统的通信格式的采集命令字符串,并且存放至数据库的相关表格记录之中,在要进行通信时,只需要从相关表格中取得此字符串,发往相应的RS232C TTY口即可,这样采集程序运行时不再需进行通信格式的生成,使得程度的运行效率得到提高,并且由于采集程序不涉及到通信命令的生成,使得程序不可能产生通信格式方面的错误,因此程序运行的可靠性大大提高。

以下子程序实现从数据库中取出通信命令字符串并给RS232口:

Public Sub SendTGData(Index As Integer)

Dim strData As String

Dim strFindIndex As String

frmGetData.lblAcmd(Index).Caption = ""

FlagLineBusy(Index) = True

frmGetData.datQRunPageCom.Refresh

With frmGetData.datQRunPageCom.Recordset

strFindIndex = "rs232com=" & Index

.FindFirst strFindIndex

If .NoMatch = False Then

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 = ""

End If

End With

End Sub

3-4 数据包的处理

DCS系统得到上位机的数据采集要求后,便把上位机所要求的过程数据进行数据打包处理并发给上位机。为了提高通信效率,上位机一次要求的数据不止一个,DCS系统回应的数据包中包含这些数据,这样便要求有一个解开数据包的子模块。本系统的数据采集解数据包子模块利用数据过滤的算法得到单个过程数据,之后把此过程数据放入一个过程数据集合中,于是便得到各个过程数据。

四、多串口数据采集软件的易用性和健壮性

4-1 多串口数据采集软件的易用性:即程序界面、人机接口的友好性

在生产调度监测系统中,只有系统维护人员可以看到数据采集软件的界面。由于数据采集软件需要同时采集多个DCS系统的数据,因此给数据采集软件的编写、调试以及维护带来相当大的困难,数据采集软件利用VB的多页面控件实现了本系统的多串口通信数据显示功能,这种界面给系统开发维护人员提供极大方便。

在一个窗口上可以同时看到多个串口数据,只需鼠标在所需要的串口上(COM5,COM6,COM7等)一点,此串口的接收和发送的数据即显示出来。

4-2 多串口数据采集软件的健壮性:通信自动恢复功能和事件日志功能

在通信过程中,可能有意外的事件发生,例如停电造成Modem不能通信等等情况,这些情况会造成通信出错而导致系统失败。数据采集软件对各种意外事件均做了相当充分的考虑,如Modem停电或断线等,在恢复供电后或Modem断线重新挂接后,数据采集软件可以判断并进行自动恢复工作。

当有通信意外事件发生时,数据采集软件自动地把出现的意外事件记录到数据库中,便于维护人员分析。在生产调度系统运行一年多以来,没有出现因为数据通信有误而导致系统失败的情况发生,其中数据采集软件的通信自动恢复和事件日志功能起了关键性的作用。

以下子程序通过检查专线Modem的状态判断通信线路是否正常:

Public Function CheckConnect(Index As Integer) As Boolean

Dim intPos As Integer

intPos = InStr(1, frmGetData.lblAcmd(Index).Caption, "NO CARRIER")

If intPos > 0 Then

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

Call mGetData.LogEvents(Index, "NO CARRIER")

CheckConnect = False

Exit Function

End If

intPos = InStr(1, frmGetData.lblAcmd(Index).Caption, "CONNECT")

If intPos > 0 Then

frmGetData.lblAcmd(Index) = ""

frmGetData.MSCommDCS(Index).InBufferCount = 0

frmGetData.MSCommDCS(Index).OutBufferCount = 0

frmGetData.lblGcmd(Index).ForeColor = vbBlack

Call mGetData.LogEvents(Index, "CONNECT")

mGetData.blnConnect(Index) = True

If frmG

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢