任麗麗 唐 娟 夏伯鍇
(1.中石油蘭州石化公司自動化研究院,蘭州 730060;2.中國石油大學(華東),山東 青島 266580)
對于石油化工行業,“安穩長滿優”是生產裝置運行的目標[1,2]。采用先進控制與優化技術提高裝置的自控水平,對于充分發揮生產裝置的運行潛力,有效實現平穩運行、增產與降耗具有十分重要的意義[3,4]。目前國內裝置較多引進國外的先進控制與優化軟件,由于這類軟件開發成本高,應用時還需專家到現場測試數據,并對軟件進行安裝、調試與培訓,費用昂貴,同時由于知識產權問題,重復購買時價格基本相同。所以,開發具有自主版權的先進控制與優化軟件勢在必行。
筆者采用VC++和Visual Basic平臺開發先進控制系統軟件包,設計了軟件包的體系結構,并對狀態反饋預測控制算法進行簡要推導,著重探討基于VC++的動態鏈接庫技術在先進控制系統軟件包中的設計與應用。
按照需求分析、功能要求和設計原則,優化控制軟件包體系(OCS)設計為C/S(客戶/服務器)結構,如圖1所示,服務器端(上位機)響應并提供固定的服務,客戶端(下位機)向服務器端請求某種服務。
本設計采用基于VB中應用程序間數據傳送的動態數據交換(DDE)技術實現數據共享[5]。所有共享變量均置于運行平臺處,各模塊所需的變量可從運行平臺中得到。通過DDE技術,應用程序之間相互傳送數據。上位機和下位機的TCP/IP通信采用Winsock控件。

圖1 軟件包體系結構
客戶端(下位機)常采用DCS、工控機、組態王及PLC等。在設計中,下位機的控制對象采用組態王應用軟件。服務器端(上位機)包含有運行平臺、先進控制算法模塊和模擬仿真模塊。
采用組態王模擬下位機DCS,通過上-下位機聯調對熱水罐的液位、溫度的二入二出耦合模型進行仿真[6]。先進控制算法模塊從運行平臺得到過程對象模型的狀態變量和輸出變量,輸入、輸出和狀態個數,以及控制的預測步數。調用動態鏈接庫函數計算出控制量,通過DDE技術寫入運行平臺。采用C語言基于VC++ 6.0(VC)環境編寫先進控制算法,通過編譯生成動態鏈接庫(DLL)。在VB中通過聲明調用.dll中的導出函數,即可計算出控制量。
運行平臺通過TCP/IP協議再把控制量發送至下位機的組態王,通過過程對象模型的仿真計算模塊,計算出狀態變量和輸出變量,再通過TCP/IP協議將其送入運行平臺。反復進行以上步驟,通過上下位機的聯調即可實現過程對象的先進控制。
研究中采用多變量狀態反饋預測控制策略,以使系統突破內模控制(IMC)的框架,可用于不穩定的被控對象。具有較強的抗干擾能力,魯棒性好,穩態無偏差且在線計算量小。多變量狀態反饋預測控制數學模型基于狀態空間,過程對象數學模型可描述為:
x(k+1)=Ax(k)+Bu(k)
y(k)=Cx(k)
(1)
由式(1)可得狀態變量x和輸出y在未來p時刻的預測值,即:
(2)
(3)
未來p時刻的輸出預測修正值和當前輸出預測值分別為:
(4)
(5)
多變量預測控制系統與單變量(SISO)預測控制系統[7]的不同之處在于,多變量預測控制系統的每一個輸出yj(k)都可以有一個相應的預測時域pj,或者說多變量預測控制系統的預測時域P是一個向量,即P=[p1,p2,…,pr]T,其中r為過程對象輸出的維數。
由式(3)可知,對于第j個輸出,在未來pj采樣時刻的預測值[8,9]為:
(6)
(7)
j=1,2,…,r
采用單值預測控制策略思路,可得:
u(k+i)=u(k),i>0
通過使反饋修正后的輸出預測值等于輸出給定值,得到最優控制律。
聯立式(4)、(5)、(7)可得:
ysj(k+pj)=cjApjx(k)-cjApjx(k-pj)+
(9)
整理式(9)可得增量形式的最優控制律為:
Δu(k)=S-1(P)[Ys(k)-y(k)-Δx-Δu]
Δu(k)=u(k)-u(k-1)
Δx=CAP[x(k)-x(k-P)]
軟件開發過程中,VB與VC的鏈接采用的是動態鏈接庫DLL技術。動態鏈接庫是二進制文件[10~12]。在軟件包開發應用中調用.dll時,將所需的.dll文件置于Windows的系統目錄windowssystem之下。
在VC++中創建apc.dll的步驟如下:
a. 創建apc.dll工程。在VC++菜單中選擇FileNewProject,再選擇Win32 Dynamic-Link Library,在Project Name中輸入工程名apc,并保存apc.dll工程文件。
b. 創建apc.def文件。LIBRARY apc,定義導出函數algorithm()為例,EXPORTS;algorithm @1。
c. 創建apc.h頭文件。在菜單中選擇FileNewC++ Head File項,輸入代碼后保存文件名apc.h。
d. 填寫apc.cpp文件。輸入代碼后保存文件名apc.cpp。
e. 編譯apc.dll文件。
在apc.dll中,函數和過程對于VB應用程序來說是外部過程,為了調用這些函數和過程,必須在VB中進行聲明。在一個VB(工程)中,要調用的dll過程只需聲明一次,以后即可在程序的任何地方調用[5,12,13]。dll過程的聲明有兩種格式:
a. Declare Sub過程名Lib”庫名”[Alias“別名”]([參數表列]);
b. Declare Function過程名Lib”庫名”[Alias“別名”]([參數表列])As類型。
在本設計中,采用第一種聲明方式,即declare sub algorithm lib“apc.dll”(byval as long,byval as long,byref as double,byref as double,byref as double,byref as long,byref as double),其中algorithm為VB應用程序中使用的過程名;apc.dll為動態鏈接庫庫名;Byval為傳值方式;ByRef為傳址方式。由于u,x,y,p,ys為數組,所以必須將相應參數聲明設為傳址方式,即把數組的第一個元素作為參數傳入,這樣在dll中就得到了數組的首地址,從而可對整個數組進行訪問。
開發中,需要對C語言與VB語言的數據類型進行轉換,見表1。由于dll過程中的參數是用C語言數據類型定義的,當在VB中聲明一個過程時,必須指定與其匹配的VB數據類型。

表1 C語言與VB語言數據類型轉換
在VB中進行調用時,使用call語句。如調用動態鏈接庫中的預測控制algorithm函數,則為call algorithm(m,n,u(0),x(0),y(0),p(0),ys(0))。
對熱水罐的液位和溫度二入二出耦合模型進行仿真測試,被控變量的控制效果如圖2、3所示,對于穩定的被控過程,預測步數減小,預測控制作用增強,動態調節過程加快;反之,預測步數增大,則預測控制作用減弱,動態調節過程減慢,控制系統的魯棒性增強。

圖2 預測時域p1=2、p2=1的控制效果

圖3 預測時域p1=6、p2=5的控制效果
測試運行結果表明,以DDE和TCP/IP通信為基礎,軟件包各模塊協調運行正常,上位機的預測算法對下位機組態王中的水罐模型實現了完美控制。基于狀態變量反饋的預測控制算法對耦合模型也消除了穩態誤差。這就驗證了軟件包整體功能設計的正確性。