摘 要:在工業(yè)控制領域,組態(tài)軟件用于現(xiàn)場監(jiān)控時計算能力不強,難以實現(xiàn)復雜的控制策略,而數(shù)學軟件Matlab可完成復雜的運算。在組態(tài)軟件與matlab二者間建立通信可實現(xiàn)優(yōu)勢互補。該文基于ActiveX技術,詳細介紹了組態(tài)軟件RSView32與matlab間進行通信的步驟。該文的研究工作為在工業(yè)控制領域中使用組態(tài)軟件來完成復雜的控制算法開辟了新的途徑,為測控系統(tǒng)與仿真系統(tǒng)的集成提供了新的技術支持。
關鍵詞:工業(yè)控制 組態(tài)軟件RSView32 數(shù)學軟件matlab 通信
1、前言
在工業(yè)控制領域,如何更有效地實現(xiàn)控制算法一直是人們普遍關心的問題。目前,工控組態(tài)軟件具有豐富的圖形功能,強大的與硬件通信的能力,但是它的計算能力不強,難以實現(xiàn)復雜的控制策略。MATLAB語言具有強大的科學運算能力,借助其自帶的工具箱可實現(xiàn)各種復雜算法的運算[1]。同時,在工業(yè)測控系統(tǒng)開發(fā)過程中,實現(xiàn)測控系統(tǒng)與仿真系統(tǒng)的集成是當前的一個發(fā)展方向[2]。因此,在工業(yè)控制中將工控組態(tài)軟件與MATLAB相結合,實現(xiàn)優(yōu)勢互補一直是自動控制領域研究的熱點。
RSView32是Rockwell公司開發(fā)的一種組態(tài)軟件包,它是第一個在圖形顯示中利用ActiveX、VisualBasic Applications、OPC(面向過程控制的OLE)的MMI產品,提供了監(jiān)視、控制和數(shù)據(jù)采集功能。在RSView32與matlab間建立通信的方式目前有DDE動態(tài)數(shù)據(jù)交換技術和ActiveX技術二種方式。ActiveX技術是在DDE的基礎上發(fā)展起來的,但它們之間還是有區(qū)別的,ActiveX在調用時不需要服務者事先已經運行,它實際上是在調用一種部件,而無須要求該部件對應的程序正在運行,這會使得其功能更加強大,語句結構更簡單,它的唯一要求就是MATLAB在程序運行的機器上已經安裝并可以成功運行[3]。采用DDE方式進行通信已在一些論文中多次提到,但采用ActiveX技術在RSView32與matlab間通信鮮見有詳細的描述,本文詳細地介紹了二者間進行ActiveX技術通信的步驟[4]。
2、實現(xiàn)通信的過程
首先在RSView32的主界面中輸入所需的參數(shù),通過通信將數(shù)據(jù)傳送給Matlab進行控制運算,然后將結果傳送回RSView32,并通過其主界面演示出相應的結果。其通信流程見下圖1。
3、使用ActiveX控件建立通信的步驟:
3.1 ActiveX對象的創(chuàng)建
在VBA中定義MATLAB對象前,必須在Windows
[align=center]
圖1 RSView32與MATLAB通信步驟框圖[/align]
下安裝RSView32和MATLAB6.1軟件,并在RSView32的VBA中引用MATLAB程序。MATALB的ActiveX對象名固定為”Matlab.application”,其具體程序如下:
‘將MATLAB實例對象定義為公共變量
Public objMATLAB As Object
Private Sub form_initialize()
‘創(chuàng)建matlab的實例
Set objMATLAB =
CreateObject("matlab.application")
End Sub
3.2在RSView32的人機界面中向tag中讀入一變量值
為了能接收輸入值,在界面上設置Solid Animation ,并讓其對應一個標簽tag,在VBA中讓該標簽名與一變量相關聯(lián):
Set tAvalve7 = gTagDb("inoil\Avalve7")
這里Avalve7是與Solid Animation相對應的一個標簽名,tAvalve7是在VBA中定義的一個變量,在人機界面中通過Solid Animation滑動動畫拖動滾動條即可輸入數(shù)據(jù),該數(shù)據(jù)并儲存在VBA中的tAvalve7.value中。
3.3在VBA中用PutFullMarix命令將該數(shù)寫入MATLAB中
用PutFullMarix命令向MATLAB中寫入數(shù)據(jù)格式為:
Call matlab.putfullMatrix(“a”, “base”,
Mreal,Mimag)
其中 a 為Matlab中的矩陣變量名,base 為變量類型,Mreal 為VBA程序中的實部矩陣,Mimag為VBA中的虛部矩陣。
為了測試PutFullMarix命令,在RSView32的VBA中設計一窗體,其中有一CommandButton3,對CommandButton3_Click()事件編程序如下,運行時在窗體中點擊CommandButton3,則會通過命令PutFullMatrix()實現(xiàn)數(shù)據(jù)從VBA傳送到MATLAB中,并通過getfullmatrix()命令又傳送回VBA中。最后在Text1中顯示結果”90”。
Private Sub CommandButton3_Click()
Dim matlab As Object
Dim result As String
Set matlab =
CreateObject("matlab.application")
Dim sita(1 To 6) As Double
sita(1) = 0: sita(2) = 90: sita(3) = 0
sita(4) = -90: sita(5) = 0: sita(6) = 0
Dim Mreal(1 To 6, 1 To 1) As Double
Dim Mimag() As Double
Dim sitam() As Double
Dim I As Integer
Dim mreal2(1 To 6, 1 To 1) As Double
Dim mimag2() As Double
For I = 1 To 6
Mreal(I, 1) = sita(I)
Next I
Call matlab.PutFullMatrix("sitam", "base", Mreal, Mimag)
Call matlab.getfullmatrix("sitam", "base", mreal2, mimag2)
Text1 = mreal2(2, 1)
End Sub
3.4在VBA中用Execute命令執(zhí)行一條MATLAB命令例如,下面的程序將完成打開Matlab的Command
Windows 窗口以及在Figure No.1窗口中顯示一個三
維著色表面圖形。
‘將MATLAB實例對象定義為公共變量
Public objMATLAB As Object
Private Sub form_initialize()
‘創(chuàng)建matlab的實例
Set objMATLAB =
CreateObject("matlab.application")
result = objMATLAB.execute("surf(peaks)")
End Sub
在RSView32中的界面上可設置命令按鈕,如”測試”,在該按鈕的右鍵菜單中打開”Edit Button1”,在如下圖2所示界面中,用Vbaexec begin來調用在VBA程序中的begin函數(shù),該函數(shù)的程序為 :
Private Sub CommandButton1_Click()
Dim matlab As Object
Dim result As String
Set matlab =
CreateObject("matlab.application")
result = matlab.Execute("surf(peaks)")
End Sub
Public Sub begin()
UserForm6.Show
End Sub
[align=center]
圖2 RSView32中的按鈕設置界面[/align]
這樣,在RSView32的界面中,就可用”測試”按鈕來調用Matlab中的Command Windows 窗口以及在Figure No.1窗口中顯示一個三維著色表面圖形。
3.5在VBA中用GetFullMarix命令讀取結果
執(zhí)行本命令將matlab中的一個矩陣變量傳送到VBA程序的1維或2維數(shù)組中,其格式為:
Call matlab.getfullmatrix(“a”,”base”,
MReal,Mimag)
例如下面的程序將完成從Matlab中的b數(shù)組中傳送數(shù)據(jù)到VB中的Mreal1數(shù)組中。
MATLAB.execute "b=[1,2;4,7]"
Dim mreal1(1 To 2, 1 To 2) As Double
Dim mimag1() As Double
Call MATLAB.getfullmatrix("b", "base", mreal1, mimag1)
Text1 = mreal1(2, 2)
4、結論
本文采用上述步驟成功地在RSView32與matlab二者間建立了通信,從而利用各自的優(yōu)勢,將復雜的運算由matlab完成,由RSView32實現(xiàn)良好的人機界面和豐富的圖形顯示。本文的工作為在工業(yè)控制領域中使用組態(tài)軟件來完成復雜的控制算法開辟了新的途徑,為測試系統(tǒng)與仿真系統(tǒng)的集成提供了新的技術支持。
參考文獻
[1]石瑩,洪銳,錢曉龍.MATLAB與組態(tài)軟件的數(shù)據(jù)交換技術.儀器儀表學報.2003,24(4):337-340
[2]吳躍斌,謝樹俊,徐立等.液壓仿真技術的現(xiàn)在和未來.液壓與氣動,2002(11):1-3
[3]王穎,胡宗軍,鄒介棠等.ActiveX:從Visual Basic6.0調用MATLAB的實現(xiàn)方法.機電工程.1999(5)
[4] 徐江華,孫榮,邵惠鶴.博士論文:基于組態(tài)王、Excel和Matlab的PID自整定仿真軟件.計算機工程.2003,29(3):27-29