魏慶禹,周琦祥,張龍琴,曹玉波*
(1.吉林化工學院 信息與控制工程學院,吉林 吉林 132022;2.阿特拉斯·科普柯(上海)貿易有限公司長春辦事處,吉林 長春 130051)
水箱液位系統作為過程控制中的典型案例,能夠很好地模擬工業中局部的生產過程[1-2],對于驗證控制算法的可靠性亦是一個理想的被控對象。系統在投入運行之前先通過仿真驗證,也能在一定程度上遏制因操作不當帶來的嚴重后果。因此,建立水箱液位系統仿真平臺具有現實意義。對于以C/S模式(Client/Server)運行的仿真控制系統,本地的配置環境中往往僅支持單用戶進行操作,且針對不同的操作系統需開發多個版本的軟件,遂使客戶端的配置成本較高[3-5]。現如今,隨著計算機網絡技術的飛速發展,基于Web的控制系統仿真操作成為可能,即在保證仿真系統功能的前提下,通過相關的權限控制將系統發布在廣域網中,操作人員無須安裝特定的仿真環境,利用瀏覽器進行在線操作即可,避免了客戶端維護、升級產生的額外支出。與此同時,支持多用戶訪問的特性也使系統衍生出了較強的交互性。本文將Web開發與單容水箱系統模型相結合,在B/S模式(Browser/Server)的基礎上提出了Web應用的系統架構,設計并實現了基于Web的單容水箱液位控制系統仿真平臺。
基于Web的控制系統仿真是通過瀏覽器、Web服務器、應用服務器幾部分交互實現的。基于B/S模式的Web應用使得多個用戶可以通過不同的客戶端(瀏覽器)訪問該Web頁面,由于UI層是通過Web服務器提供服務,因此操作人員可以通過互聯網訪問Web應用,并且在任何時間及地點都能夠獲得相同的用戶體驗。Django是一種開源的Web框架,由Python寫成,它通過分層設計,用一種業務邏輯(View)、界面顯示(Template)、數據(Model)分離的方法組織代碼,降低了各部分之間的耦合性[6]。瀏覽器、服務器端分別進行實時的數據通信,以滿足系統實時仿真的需求,基于Django的Web架構設計如圖1所示。

圖1 Web架構設計圖
開發過程中,Web框架和瀏覽器間通過wsgi協議進行交互,這里使用Django集成的wsgiref模塊。模板層(Template)的主要作用是負責UI界面的創建,即在HTML文檔通過GET方式在瀏覽器端被渲染后,用戶輸入的參數會以POST方式在前端發出,隨之創建一個Request請求,使得參數以請求的路徑傳遞到服務器端。對于Django下的視圖層(Views),它將接收路由系統urls.py分發的查找視圖請求,結合Views中事先配置的邏輯來處理參數,最終得到一個被處理后的數據,此數據使用def()函數創建Response以對前端進行應答,這里前端會通過Ajax異步通信的技術周期性地接收新的數據,最后由瀏覽器的JavaScript引擎再次進行UI界面的渲染工作。在此過程中,若需要數據庫中的數據進行相應的邏輯處理時,View與Model之間會通過ORM(對象關系映射)進行數據的讀取交換,由于ORM采用映射數據來描述對象關系的映射,這使得ORM能在任何一個應用的業務邏輯層和數據庫層之間充當橋梁。
單容水箱系統結構如圖2所示。系統運行時,水經過調節閥R0被送入水箱,打開閥門R1,在水箱內水的壓力及重力作用下,水流從水箱底部流出。水箱的進水量Q0由進水調節閥R0的開度控制,出水量Q1由用戶手動調節出水閥R1來改變,系統可以通過改變閥門R0開度來控制進水量Q0,以達到對水箱液位控制的目的。

圖2 單容水箱系統結構圖
控制系統的廣義被控對象由執行機構及被控對象兩部分構成。首先采用機理建模法對被控對象進行數學建模,假設水箱的橫截面積為A,系統的輸入為流入量Q0,輸出為水箱液位h,根據物料平衡關系以及流體力學方程,可以得到被控對象的狀態方程模型如下[7-9]:
(1)
使用歐拉法將狀態方程轉化為差分方程:
(2)
式中,(k)為當前時刻的變量值;(k-1)為前一時刻的變量值。
對于執行機構的動態模型,由于實際的系統中調節閥往往存在著一定的滯后現象,且閥門的流量系數c、慣性系數ω均取決于閥門的類型。因此,根據一階純滯后環節及直線式調節閥的特點,得到執行機構的數學模型為
Q0(t)=c·u(t)·(1-e-τ/T) ,
(3)
上式離散化后可得
Q0(k)=c·[ω·u(k)+(1-ω)·Q0(k-1)] ,
(4)
式(2)、(4)構成了廣義被控對象的離散化模型。
為實現對水箱液位的定值控制,本系統的控制器模型采用了位置式PID算法。變送器將反饋值h(t)送入PID控制器,并與設定值R(t)作差得到偏差值,控制算法結合偏差e(t)在比例、積分、微分的作用下形成控制量,并將控制器輸出u(t)作用于執行機構,繼而對被控對象進行控制,其控制規律可以表示為[10-11]
(5)
式中,Kp為比例增益;Ti、Td分別為積分時間常數、微分時間常數。
將上式差分化后得到PID控制算法的離散模型如下:
(6)
其中,Ki為積分系數,Kd為微分系數,T為系統的采樣時間。
上述式(2)、(4)、(6)構成了完整的單容水箱PID控制系統的差分化模型,通過差分方程求微分方程的近似解,可使得連續問題離散化,便于計算機進行處理。
基于Django架構的服務器后臺主要配置文件如表1所示。其中,settings.py文件中的配置直接或間接影響Web應用的行為和功能,設置Allowed_Hosts為["*"],將只能本地訪問的url路徑開放為局域網內所有主機均可訪問。添加Installed_Apps=['單容水箱.apps.單容水箱.Config'],以使Django系統在啟動時會加載此應用程序。wsgi.py作為Python應用與Web服務器之間的通信接口,其中的application()即是一個符合wsgi標準的Http處理函數,它通過environ、start_reaponse兩種參數分別進行Http的請求和響應;urls.py本質是一個請求映射表,它的作用是在url請求和處理該請求的Views函數間建立對應關系。例如,當客戶端發出的url請求為/tankrequest時,服務器會根據請求,在urls.py文件中進行尋址,并匹配到與其對應的Views函數views.tankrequest進行處理;最后,在Views.py中,系統根據前端發送的參數,結合水箱離散化模型,得出系統的控制變量和狀態變量,并將數據響應給前端頁面,瀏覽器進行渲染并展示給用戶。

表1 服務器端主要配置文件
前端的UI界面經由瀏覽器渲染后,須利用form表單提交這一技術將用戶需要的參數進行收集,以供系統模型進行數據處理。關于相關參數提交與獲取的主要程序如圖3所示,涉及被控變量設定值、手動調節閥的開度、比例增益、積分系數及微分系數等變量的提交。表單的按鈕有submit及button兩種屬性,為了實現局部刷新,此處form使用button屬性進行數據的提交,并通過class元素將子參數交由Ajax技術進行觸發事件的綁定。與此同時,數據經服務器傳回到前端的文本對象模型(DOM)中以后,需通過JS代碼將數據傳送到SVG指定的DOM端口中去,即此過程是將數據流從一個DOM移到一個或若干個DOM中去,從而滿足前端的流程圖中配置的若干子參數,數據會根據DOM屬性的不同被分派到SVG矢量圖的各個位置,最終經過瀏覽器的渲染進行展示。

圖3 客戶端-form及SVG交互
Ajax,一種基于JS與XML的異步通信技術,它可以在Web服務器與無須刷新的瀏覽器頁面之間進行數據通信,這意味著可在不重新加載整體網頁的情況下對頁面的局部內容進行刷新,關于Ajax的異步收發過程如圖4所示。需要Ajax進行異步發送的參數即是用戶在form表單中提交的數據,當用戶觸發button時,相應的function()函數會周期地運行Ajax環境,并將參數以POST通信的方式直接放入服務器配置的變量里。同樣地,Ajax異步收發也會不間斷地從后端(url:/tankresponse)傳回數據(getData),并將數據分發到前端HTML頁面配置的接口(DOM)當中。

圖4 客戶端-Ajax異步收發
如圖5所示為水箱液位PID控制仿真的測試過程,仿真界面通過直觀的動畫效果、參數顯示和系統的輸入輸出變化過程曲線,提高了操作者的使用體驗。在仿真系統運行過程中,用戶可以給定液位高度,通過實時整定PID算法的參數了解比例、積分、微分作用對系統控制性能的影響,并可在系統穩定時進行干擾變量(出水閥門開度)的在線修改,從而驗證PID控制器克服干擾的能力。

圖5 水箱液位控制系統仿真Web頁面
本文主要介紹了基于Web的單容水箱控制系統從設計、開發到測試的過程,借助Django系統前后端分離的特點搭建了B/S模式的Web架構,通過建立并推導水箱控制系統的廣義被控對象及位置式PID算法的差分化模型,精確地描述了系統液位變化的動態特性。最后結合Html、CSS、JavaScript、Python等編程語言,分別對客戶端及服務器端進行了開發。經過對水箱液位控制系統的測試,發現該Web應用能夠同時滿足水箱液位仿真的實時性及準確性,且本系統不需安裝額外的客戶端,操作人員可直接通過瀏覽器運行仿真環境,極大地提高了仿真系統的實用價值。