李艷姣,王建民,張 杰
(河北聯(lián)合大學(xué)電氣工程學(xué)院,河北唐山 063009)
Visual Basic是一種可視化編程方法,是應(yīng)用廣泛的編程語言[1]。在用VB進行智能控制算法的軟件設(shè)計時,存在WINCC組態(tài)軟件與VB之間的數(shù)據(jù)交換問題。WINCC組態(tài)軟件支持OPC技術(shù),而且OPC具有高速的數(shù)據(jù)傳送性能、開發(fā)成本低,具有很強的優(yōu)越性。
選礦廠的磨礦過程具有機理復(fù)雜、過程影響因素多,非線性、大滯后和時變性的特性,常規(guī)的PID控制難以取得很好的控制效果[2]。集散控制主要提供了梯形圖、功能塊圖的編程方式,如果要完成智能控制(例如模糊控制),需編制相應(yīng)的程序模塊。SIMATIC WINCC提供OPC技術(shù),采用VB編寫了相應(yīng)的智能控制程序,并用OPC技術(shù)實現(xiàn)與WINCC的數(shù)據(jù)交換。
采用S7-300PLC和工控機構(gòu)成DCS系統(tǒng),其監(jiān)控系統(tǒng)結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
(1)生產(chǎn)管理層主要是面向該廠的領(lǐng)導(dǎo)層,通過以太網(wǎng),董事長、總經(jīng)理和礦長等在辦公室對現(xiàn)場的情況進行了解。
(2)監(jiān)控操作層主要包括作為服務(wù)器的工業(yè)控制計算機和中控室,操作人員在中控室可以監(jiān)控生產(chǎn)現(xiàn)場各個信號的變化并進行相應(yīng)的操作,服務(wù)器負責(zé)層與層之間的通訊,同時該層所記錄的數(shù)據(jù)也為日后的數(shù)據(jù)分析和系統(tǒng)故障分析帶來了方便。中控室中的集中監(jiān)控站軟件采用WINCC V6.0。SIMATIC WINCC全面支持OPC技術(shù),WINCC中的OPC符合OPC基金會的OPC規(guī)范,因此,將WINCC作為OPC服務(wù)器[3]。
(3)過程控制層由2個S7-300PLC和6個ET200遠程分站組成,與中控室進行通訊,還與現(xiàn)場設(shè)備相連接。
有些組態(tài)軟件的數(shù)據(jù)庫是經(jīng)過加密封裝的,用戶無法從外部直接訪問其中的數(shù)據(jù),雖然WINCC軟件的數(shù)據(jù)庫未加密,但是數(shù)據(jù)庫中的表名、表的結(jié)構(gòu)等都是保密的,這樣給數(shù)據(jù)共享帶來的困難。需要從監(jiān)控站上實時獲取相關(guān)的生產(chǎn)數(shù)據(jù)來控制磨機負荷的給定控制。因此,采用運算能力較強的VB編程語言實現(xiàn),VB程序通過OPC接口實現(xiàn)與WINCC的數(shù)據(jù)交換。
OPC(OLE for Processing Control,用于過程控制的OLE技術(shù))是為了保證不同軟件產(chǎn)品、硬件設(shè)備及現(xiàn)場的數(shù)據(jù)能進行交換而由OPC基金會制定的。OPC服務(wù)器有3種對象:服務(wù)器(Server)、組(Group)、數(shù)據(jù)項(Item)[4]。OPC服務(wù)器作為數(shù)據(jù)源程序,收集現(xiàn)場的數(shù)據(jù)信息,通過OPC接口傳送給OPC客戶端;OPC客戶端作為數(shù)據(jù)接收程序[5]。該系統(tǒng)的OPC體系接口如圖2所示。
圖2 OPC的體系結(jié)構(gòu)
WINCC組態(tài)軟件按服務(wù)器提供OPC接口,VB中的OPC自動化接口為OPC客戶端模式編寫OPC接口軟件。VB開發(fā)的OPC客戶端能夠?qū)崿F(xiàn)與OPC服務(wù)器之間的連接、斷開和讀取數(shù)據(jù)的功能。
3.1WINCCOPC服務(wù)器的設(shè)置
由于WINCC OPC服務(wù)器與客戶端程序運行在網(wǎng)絡(luò)不同的計算機上,要進行數(shù)據(jù)交互,則需對OPC服務(wù)器進行相應(yīng)的DCOM的設(shè)置。Windows XP下的dcomcnfg.exe是專門對遠程訪問DCOM進行設(shè)置的工具。在計算機的“開始”菜單選擇“運行”,并在輸入框中輸入dcomcnfg.exe,打開“分布式DCOM組態(tài)屬性”對話框,選擇“應(yīng)用程序”標簽,從應(yīng)用程序的顯示列表中選擇“OPCServer.Wincc”條目。單擊“屬性”按鈕,進行“OPCServer.Wincc”屬性的設(shè)置,完成DCOM的組態(tài)[6]。
在WINCC中要建立通過OPC通訊的變量。 值得注意的是,WINCC OPC 服務(wù)器必須與客戶機位于相同的網(wǎng)絡(luò)上[7]。
3.2OPC客戶應(yīng)用程序的編寫
服務(wù)器與客戶端之間的數(shù)據(jù)交互主要包括創(chuàng)建與連接服務(wù)器對象;添加組、項;進行數(shù)據(jù)的讀寫[8]。VB開發(fā)的OPC客戶端流程如圖3所示。
圖3 客戶端程序流程圖
VB開發(fā)OPC客戶端的設(shè)計步驟為:在VB中新建1個工程,在VB工具欄中利用“工程-引用”將Siemens OPC DAAutomation 2.0控件加入,然后編寫VB客戶端程序。
3.2.1變量聲明
先對OPC對象的變量進行聲明,變量的數(shù)據(jù)類型應(yīng)該指定為對象型。這些變量在窗體代碼的通用部分進行聲明。這樣,就可以在窗體的任何位置代碼內(nèi)引用。在模塊代碼的開始部分,加上“Option Explicit”語句,表示模塊里所有變量需要顯式的聲明。OPC自動化接口數(shù)組的索引要求必須從1開始[9]。
Dim WithEvents MyobjServer As OPCServer ‘定義OPC服務(wù)器
Dim MyobjGroups As OPCGroups ‘定義OPC標簽組
Dim MyobjGroup As OPCGroup ‘定義OPC組
Dim MyobjItems As OPCItems ‘OPC項對象
Dim lServerHandles() As Long ‘句柄
Dim ClientHandles() As Long
Dim errors() As Long
3.2.2OPC的連接
所有變量定義后,進行OPC連接的編程??紤]到代碼的重復(fù)利用,采用子程序的方法進行編程。然后調(diào)用該子程序?qū)崿F(xiàn)和OPC服務(wù)器連接。
Sub Connect()
If MyobjServer Is Nothing Then
‘創(chuàng)建1個OPC服務(wù)器對象
Set MyobjServer = New OPCServer
End If
If MyobjServer.ServerState = OPCDisconnected Then
‘連接OPC服務(wù)器
MyobjServer.Connect strProgID,strNode
End If
If MyobjGroups Is Nothing Then
‘建立1個OPC組集合
Set MyobjGroups = MyobjServer.OPCGroups
End If
If MyobjTestGrp Is Notbing Then
‘添加1個OPC組
Set MyobjtTestGrp = MyobjGroups.Add("TestGrp")
End If
End Sub
3.2.3添加OPC標簽
對OPC服務(wù)器訪問前,應(yīng)先在OPC組里添加要訪問的OPC標簽。添加OPC標簽的子程序為:
Sub AddItem()
Dim strItemIDs(10) As String
Dim lClientHandles(10) As Long
Dim lErrors() As Long
Dim I As Integer
If MyobjTestGrp Is Nothing Then
Exit Sub
End If
If Not MyobjItems Is Nothing Then
If MyobjItems.Count > 0 Then
Exit Sub
End If
End If
‘設(shè)置組活動狀態(tài)
MyobjTestGrp.IsActive = True
‘取消組異步通知
Set MyobjItems = MyobjTestGrp.OPCItems
‘生成從TAG1到TAG8的項標識符
For I = 1 To 8
strItemIDs(I) = "TAG" & I
lClientHandles(I) = I
Next
‘添加OPC標簽
Call MyobjItems.AddItems(10,strItemIDs,lClientHandles,lErrors)
End Sub
3.2.4OPC變量的讀寫
在讀取前,為了避免錯誤發(fā)生,對OPC組和OPC標簽數(shù)進行檢查。讀寫的子程序為:
Sub SyncRead(nSource As Integer,ByRef vtItemValues() As Variant,ByRef lErrors() As Long)
If MyobjTestGrp Is Nothing Then
Exit Sub
End If
If MyobjTestGrp.OPCItems.Count>0 Then
‘同步讀取
MyobjTestGrp.SyncRead nSource,8,lServerHandles,vtItemValues,lErrors
End If
End Sub
Sub SyncWrite(nIndex As Integer,ByRef vtItemValues() As Variant,ByRef lErrors() As Long)
Dim lHandle(1) As Long
If MyobjTestGrp Is Nothing Then
Exit Sub
End If
If MyobjTestGrp.OPCItems.Count>0 Then
lHandle(1)=lServerHandles(nIndex)
‘同步寫入
MyobjTestGrp.SyncWrite 1,lHandle(),vtItemValues,lErrors
End If
End Sub
3.2.5OPC斷開
連接著OPC服務(wù)器的OPC應(yīng)用程序,在退出前應(yīng)斷開與OPC服務(wù)器的連接。如果不斷開連接,OPC服務(wù)器使用的計算機資源將不斷被釋放,如果長期反復(fù)發(fā)生,連接運轉(zhuǎn)的控制系統(tǒng)可能會使計算機的資源慢慢枯竭,從而發(fā)生嚴重的問題[10]。
Sub Disconnect()
Dim lError() As Long
If Not MyobjItems Is Nothing Then
If MyobjItems.Count > 0 Then
‘清除OPC標簽
MyobjItems.Remove8 ,lServerHandles,lErrors
End If
Set MyobjItems = Nothing
End If
If Not MyobjTestGrp Is Nothing Then
‘清除OPC組
MyobjGrounps.Remove "TestGrp"
Set MyobjTestGrp = Nothing
End If
If Not MyobjGroups Is Nothing Then
Set MyobjGroups = Nothing
End If
If Not MyobjServer Is Nothing Then
If MyobjServer.ServerState < > OPCDisconnected Then
‘?dāng)嚅_OPC服務(wù)器
MyobjServer.Disconnect
End If
Set MyobjServer = Nothing
End If
End Sub
在某大型選礦廠,為實現(xiàn)磨機負荷的最優(yōu)控制,在外環(huán)功率控制回路中,采用VB編程語言開發(fā)來控制磨機負荷,必須保證WINCC組態(tài)軟件與VB上位機之間的數(shù)據(jù)交互。采用OPC技術(shù)很好地實現(xiàn)了監(jiān)控系統(tǒng)之間的數(shù)據(jù)交互,滿足了選礦廠的要求,效果良好。圖4為WINCC實時監(jiān)控界面,圖5為VB開發(fā)的磨機負荷控制界面。在實際的應(yīng)用中,能夠順利地進行數(shù)據(jù)交換。
圖4 WINCC實時數(shù)據(jù)界面
文中介紹了磨機負荷控制系統(tǒng)中利用WINCC作為OPC服務(wù)器,VB開發(fā)OPC客戶端的方法,重點闡述了VB開發(fā)客戶端程序的設(shè)計過程,實現(xiàn)了WINCC與監(jiān)控軟件之間的數(shù)據(jù)交換操作。在線調(diào)試和試運行后,實現(xiàn)了控制系統(tǒng)之間的無縫連接和數(shù)據(jù)實時共享。
圖5 開發(fā)的磨機負荷控制界面
參考文獻:
[1]趙艷秋,王建民.采用OPC技術(shù)實現(xiàn)豎爐燒結(jié)DCS系統(tǒng)與VB軟件的接口.計算機與數(shù)字工程,2006,34(1):114-117.
[2]鄒金慧,黃宋魏,許江淳.基于PLC的磨礦分級智能控制系統(tǒng).自動化儀表,2007,28(11):43-45.
[3]吳曉蕾,李逸,胡國軍,等.通過OPC實現(xiàn)VB訪問WINCC數(shù)據(jù).電氣傳動,2009,39(12):63-66.
[4]尹靜濤,劉利平.OPC技術(shù)在高爐生產(chǎn)測控系統(tǒng)中的應(yīng)用.制造業(yè)自動化,2012,34(1):139-140.
[5]徐思成,李增權(quán),郭國選.基于OPC技術(shù)和以太網(wǎng)的異構(gòu)網(wǎng)絡(luò)集成.儀表技術(shù)與傳感器,2011(1):109-110.
[6]高德欣,張文武,楊清.利用OPC實現(xiàn)WINCC與監(jiān)控系統(tǒng)的動態(tài)數(shù)據(jù)交換.中國海洋大學(xué)學(xué)報,2006,36(4):677-680.
[7]童立均,江智軍,何小斌.OPC技術(shù)在水廠生產(chǎn)過程控制系統(tǒng)的應(yīng)用研究.自動化儀表,2008,29(6):37-41.
[8]匡芬芳.OPC技術(shù)在液位控制中的應(yīng)用.自動化儀表,2011,32(6):46-49.
[9]葉海濤,蘇建元.VB中利用OPC訪問WinCC實現(xiàn)下位機實時報警.測控技術(shù),2005,24(11):50-52.
[10]郭春芬,莊立臣.基于OPC技術(shù)的粉塵濃度監(jiān)控系統(tǒng)研究.煤礦機械,2011,32(1):83-85.