基于力控組態軟件的新型DCS監控軟件設計
1 引言
分布式控制系統通常可以分為現場控制層、過程監控層、生產管理層和市場經營管理層四個層次,過程監控層通過對多個控制設備的集中管理,完成監控生產過程的目的。力控PCAuto監控組態軟件是處于過程監控層的軟件平臺,它可運行于Windows 98/NT/2000/XP操作系統之上,能與國內外各工控廠家的常用設備通信,與工控機和網絡系統相結合,可方便、快速地構造滿足不同需求的數據采集與監控系統。
雖然力控提供了許多常用設備的驅動程序,但在實際應用中,由于工程需要和設備的特殊性,力控所提供的現有驅動程序并不能滿足所有設備需要,此時便需利用力控驅動開發包提供的接口來開發新驅動程序。對于普通用戶來說,驅動開發是一項很艱難的工作,但是力控提供了多種與第三方軟件的接口,如OLE控件、內部組件等,這就為我們提供了另外一個解決問題的思路:利用VB、VC等開發工具自行開發通信程序采集數據,再利用力控提供的OLE控件等接口將通信程序與力控連接,實現數據共享。這樣,無需開發新驅動程序便可使力控采集到現場設備的數據。這種基于力控組態軟件的新型監控軟件的結構框圖如圖1所示:
圖1 軟件結構框圖
本文以基于RS-485串行通信的分布式控制系統為應用背景,對這種新型監控軟件的實現做了探討。
2 上位機串行通信的實現
2.1 串行通信接口技術
串行通信常用的接口有RS-232C接口及RS-485接口。由于RS-232C接口通信距離較近,當傳輸距離較遠時,可采用RS-485串行通信接口。RS-232C接口和RS-485接口之間的轉換可采用相應的轉換模塊。一般計算機內都配有通信適配器,使計算機能夠與其它具有RS-232C 接口的計算機或設備進行通信。數據通過串口一次只傳送1個字節,且數據和控制信號都在單根導線上移動,需要應用通信協議。常用的通信協議如下:1個起始位;7個或8個數據位;奇偶效驗位;1個或2個停止位;通信速率(單位為波特率或bit/s)。
構成基于RS-485串行通信的分布式控制系統通常采用以下硬件構成方案:計算機RS-232C接口經RS-232C串行通信線連接RS-232C/RS-485轉換模塊,轉換模塊經RS-485串行通信線連接各個現場設備的RS-485接口。再配以上位機監控軟件,便可以從計算機串行口采集現場設備的數據。
串行通信可以在DOS或Windows環境下進行,可以用匯編或高級語言編寫通信程序。本文介紹如何利用Windows的ActiveX控件進行編程。利用ActiveX控件編寫串行通信程序,其編程步驟如下:
(1) 設置通信協議(傳輸速率、奇偶校驗、傳輸位數、終止位);
(2) 讀取線路狀態,判斷是否可以通信;
(3) 發送或接收數據;
(4) 重復第2和第3步,直至通信完成。
2.2 串行通信編程
在Windows環境下編寫串行通信程序,可以利用VB提供的良好界面設計能力及強大的串行通信功能。VB 6.0利用MSComm控件通過串行端口發送和接收數據,為應用程序提供串行通信能力。
MSComm控件是用于Windows環境的32位串行通信控件,每個MSComm控件對應于一個串行端口。應用程序中需要多個串行口時,要使用多個MSComm控件。MSComm控件的主要屬性及說明如附表所示。
附表 MSComm控件常用屬性
使用MSComm控件前,需要向工具箱添加該控件:選擇“工程”菜單中“部件”項,“控件”頁中選中“Microsoft Comm control 6.0”項,點擊“確定”,完成MSComm控件的添加。
MSComm提供兩種處理通信的方式:事件驅動通信和查詢通信方式。串口通信中每接收或發送一個字符就產生一個事件,事件驅動通信就是利用MSComm控件OnComm事件捕獲并處理通信事件,該事件包括了處理串口通信的各個消息。以下為采用計算機串口1發送接收數據的程序示例。
發送數據:
Private Sub DataSend ( )
Dim Data(5) As Byte
MSComm1. Commport = 1
'設置MSComm1對應Comm1
MSComm1. Settings =”96000,N,8,1”
' 9600bit/s,無奇偶效驗,8位數,1位終止位
If MSComm1. PortOpen =False Then
'打開端口
MSComm1. PortOpen = True
End If
Data (0) = CByte(TeAddr.Text)
'設備地址
Data e(1) = &H4
'功能號 讀取電力參數
Data e(2) = &H0
'數據起始地址
Data (3) = &H0
Data (4) = &H0
'數據長度
Data e(5) = &H15
MSComm1. OutBufferCount = 0
'清除發送緩沖區
MSComm1. Output = Data
'發送數據
MSComm1. PortOpen = False
'關閉端口
End Sub
接收數據:
Private Sub MSComm1_OnComm()
Dim rec() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
'串口接收事件
rec = MSComm1.Input
'讀輸入緩沖區
End Select
End Sub
3 力控實時數據庫與DbCom控件
力控的實時數據庫是一個開放的數據平臺。用戶可以利用數據庫提供的接口,在該平臺上進行二次開發,創建自己的應用程序。實時數據庫提供的控件DbCom就是一種方便、高效的接口方式。
DbCom是一個標準OLE控件,用戶在各種常用開發環境(如C++ Builder、VC++、VB、Delphi等)下可以調用DbCom來訪問數據庫中的數據。通過DbCom,上位機通信程序不但可以讀取力控數據庫數據,而且可以設置力控數據庫數據。在安裝力控時,安裝程序自動完成DbCom的安裝與注冊。DbCom是一個在程的OLE控件,在應用程序中使用時,必須同時啟動數據庫DB。
下面給出通過DbCom控件訪問力控數據庫的兩個常用方法。
(1) 方法1:GetRealData。用于讀取多個數值型數據
語法形式:long GetRealData(long count, LPCTSTR strNames, double* data)。
參數說明:count:數據個數。
strNames:數據名字符串,字符型變量,數據名間以','號分隔。
data:雙精度浮點(Double)型指針,返回的數據數組。
返回值:長整型。0:成功;-1:失敗。
(2) 方法2: SetStringData。根據數據名稱和數據值設置數據庫
語法形式:long SetStringData(long nCount, VARIANT* pvTagPars, VARIANT* pvData)。
參數說明:nCount:數據個數。
pvTagPars:VARIANT數組,nCount個數據名稱。
pvData:VARIANT數組,nCount個數據值。
返回值:成功為0,否則為非0。
以下程序為上位機通信程序讀寫力控實時數據庫的兩種常用方法的示例。
//讀取數據庫
Private Sub GetParameters()
'讀取電度值和有功功率值
Dim count As Integer, result As Integer
Dim rdata(1) As Double
Dim pars As String
count=2
pars=”dbkWh1.PV,dbkW1.PV ”
'調用DbCom的方法
result = DbCom1. GetRealData (count, pars, rdata)
'讀取數據
If result=-1 Then
MsgBox("請先啟動力控實時數據庫!")
Else
kWh=rdata(0)
'電度值
kW=rdata(1)
'有功功率值
End If
End Sub
//設置數據庫
Private Sub SetParameters()
'將電度值和有功功率值寫入力控數據庫
Dim count As Integer, result As Integer
Dim * pTagPars(1) As VARIANT, * pVals(1) As VARIANT
count=2
pTagPars(0)=dbkWh1.PV
'數據名
pTagPars(1)=dbkW1.PV
pVals(0)=kW·h 數據值
pVals(1)=kW 調用DBcom的方法
result=DbCom1.SetStringData(count, pTagPars, pVals)
'設置數據
End Sub
4 結束語
本文提出的基于力控組態軟件的新型監控軟件,利用了力控實時數據庫提供的OLE控件接口,將力控組態軟件的強大功能與VB自行開發程序的靈活性結合起來,更好的滿足了工業分布式控制系統的需要。這種新型監控軟件已在某港口配電監控系統等實際工程項目中得到成功應用。
文章版權歸西部工控xbgk所有,未經許可不得轉載。