魏慶禹,周琦祥,張龍琴,曹玉波*
(1.吉林化工學(xué)院 信息與控制工程學(xué)院,吉林 吉林 132022;2.阿特拉斯·科普柯(上海)貿(mào)易有限公司長(zhǎng)春辦事處,吉林 長(zhǎng)春 130051)
水箱液位系統(tǒng)作為過(guò)程控制中的典型案例,能夠很好地模擬工業(yè)中局部的生產(chǎn)過(guò)程[1-2],對(duì)于驗(yàn)證控制算法的可靠性亦是一個(gè)理想的被控對(duì)象。系統(tǒng)在投入運(yùn)行之前先通過(guò)仿真驗(yàn)證,也能在一定程度上遏制因操作不當(dāng)帶來(lái)的嚴(yán)重后果。因此,建立水箱液位系統(tǒng)仿真平臺(tái)具有現(xiàn)實(shí)意義。對(duì)于以C/S模式(Client/Server)運(yùn)行的仿真控制系統(tǒng),本地的配置環(huán)境中往往僅支持單用戶進(jìn)行操作,且針對(duì)不同的操作系統(tǒng)需開發(fā)多個(gè)版本的軟件,遂使客戶端的配置成本較高[3-5]?,F(xiàn)如今,隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,基于Web的控制系統(tǒng)仿真操作成為可能,即在保證仿真系統(tǒng)功能的前提下,通過(guò)相關(guān)的權(quán)限控制將系統(tǒng)發(fā)布在廣域網(wǎng)中,操作人員無(wú)須安裝特定的仿真環(huán)境,利用瀏覽器進(jìn)行在線操作即可,避免了客戶端維護(hù)、升級(jí)產(chǎn)生的額外支出。與此同時(shí),支持多用戶訪問(wèn)的特性也使系統(tǒng)衍生出了較強(qiáng)的交互性。本文將Web開發(fā)與單容水箱系統(tǒng)模型相結(jié)合,在B/S模式(Browser/Server)的基礎(chǔ)上提出了Web應(yīng)用的系統(tǒng)架構(gòu),設(shè)計(jì)并實(shí)現(xiàn)了基于Web的單容水箱液位控制系統(tǒng)仿真平臺(tái)。
基于Web的控制系統(tǒng)仿真是通過(guò)瀏覽器、Web服務(wù)器、應(yīng)用服務(wù)器幾部分交互實(shí)現(xiàn)的。基于B/S模式的Web應(yīng)用使得多個(gè)用戶可以通過(guò)不同的客戶端(瀏覽器)訪問(wèn)該Web頁(yè)面,由于UI層是通過(guò)Web服務(wù)器提供服務(wù),因此操作人員可以通過(guò)互聯(lián)網(wǎng)訪問(wèn)Web應(yīng)用,并且在任何時(shí)間及地點(diǎn)都能夠獲得相同的用戶體驗(yàn)。Django是一種開源的Web框架,由Python寫成,它通過(guò)分層設(shè)計(jì),用一種業(yè)務(wù)邏輯(View)、界面顯示(Template)、數(shù)據(jù)(Model)分離的方法組織代碼,降低了各部分之間的耦合性[6]。瀏覽器、服務(wù)器端分別進(jìn)行實(shí)時(shí)的數(shù)據(jù)通信,以滿足系統(tǒng)實(shí)時(shí)仿真的需求,基于Django的Web架構(gòu)設(shè)計(jì)如圖1所示。
圖1 Web架構(gòu)設(shè)計(jì)圖
開發(fā)過(guò)程中,Web框架和瀏覽器間通過(guò)wsgi協(xié)議進(jìn)行交互,這里使用Django集成的wsgiref模塊。模板層(Template)的主要作用是負(fù)責(zé)UI界面的創(chuàng)建,即在HTML文檔通過(guò)GET方式在瀏覽器端被渲染后,用戶輸入的參數(shù)會(huì)以POST方式在前端發(fā)出,隨之創(chuàng)建一個(gè)Request請(qǐng)求,使得參數(shù)以請(qǐng)求的路徑傳遞到服務(wù)器端。對(duì)于Django下的視圖層(Views),它將接收路由系統(tǒng)urls.py分發(fā)的查找視圖請(qǐng)求,結(jié)合Views中事先配置的邏輯來(lái)處理參數(shù),最終得到一個(gè)被處理后的數(shù)據(jù),此數(shù)據(jù)使用def()函數(shù)創(chuàng)建Response以對(duì)前端進(jìn)行應(yīng)答,這里前端會(huì)通過(guò)Ajax異步通信的技術(shù)周期性地接收新的數(shù)據(jù),最后由瀏覽器的JavaScript引擎再次進(jìn)行UI界面的渲染工作。在此過(guò)程中,若需要數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行相應(yīng)的邏輯處理時(shí),View與Model之間會(huì)通過(guò)ORM(對(duì)象關(guān)系映射)進(jìn)行數(shù)據(jù)的讀取交換,由于ORM采用映射數(shù)據(jù)來(lái)描述對(duì)象關(guān)系的映射,這使得ORM能在任何一個(gè)應(yīng)用的業(yè)務(wù)邏輯層和數(shù)據(jù)庫(kù)層之間充當(dāng)橋梁。
單容水箱系統(tǒng)結(jié)構(gòu)如圖2所示。系統(tǒng)運(yùn)行時(shí),水經(jīng)過(guò)調(diào)節(jié)閥R0被送入水箱,打開閥門R1,在水箱內(nèi)水的壓力及重力作用下,水流從水箱底部流出。水箱的進(jìn)水量Q0由進(jìn)水調(diào)節(jié)閥R0的開度控制,出水量Q1由用戶手動(dòng)調(diào)節(jié)出水閥R1來(lái)改變,系統(tǒng)可以通過(guò)改變閥門R0開度來(lái)控制進(jìn)水量Q0,以達(dá)到對(duì)水箱液位控制的目的。
圖2 單容水箱系統(tǒng)結(jié)構(gòu)圖
控制系統(tǒng)的廣義被控對(duì)象由執(zhí)行機(jī)構(gòu)及被控對(duì)象兩部分構(gòu)成。首先采用機(jī)理建模法對(duì)被控對(duì)象進(jìn)行數(shù)學(xué)建模,假設(shè)水箱的橫截面積為A,系統(tǒng)的輸入為流入量Q0,輸出為水箱液位h,根據(jù)物料平衡關(guān)系以及流體力學(xué)方程,可以得到被控對(duì)象的狀態(tài)方程模型如下[7-9]:
(1)
使用歐拉法將狀態(tài)方程轉(zhuǎn)化為差分方程:
(2)
式中,(k)為當(dāng)前時(shí)刻的變量值;(k-1)為前一時(shí)刻的變量值。
對(duì)于執(zhí)行機(jī)構(gòu)的動(dòng)態(tài)模型,由于實(shí)際的系統(tǒng)中調(diào)節(jié)閥往往存在著一定的滯后現(xiàn)象,且閥門的流量系數(shù)c、慣性系數(shù)ω均取決于閥門的類型。因此,根據(jù)一階純滯后環(huán)節(jié)及直線式調(diào)節(jié)閥的特點(diǎn),得到執(zhí)行機(jī)構(gòu)的數(shù)學(xué)模型為
Q0(t)=c·u(t)·(1-e-τ/T) ,
(3)
上式離散化后可得
Q0(k)=c·[ω·u(k)+(1-ω)·Q0(k-1)] ,
(4)
式(2)、(4)構(gòu)成了廣義被控對(duì)象的離散化模型。
為實(shí)現(xiàn)對(duì)水箱液位的定值控制,本系統(tǒng)的控制器模型采用了位置式PID算法。變送器將反饋值h(t)送入PID控制器,并與設(shè)定值R(t)作差得到偏差值,控制算法結(jié)合偏差e(t)在比例、積分、微分的作用下形成控制量,并將控制器輸出u(t)作用于執(zhí)行機(jī)構(gòu),繼而對(duì)被控對(duì)象進(jìn)行控制,其控制規(guī)律可以表示為[10-11]
(5)
式中,Kp為比例增益;Ti、Td分別為積分時(shí)間常數(shù)、微分時(shí)間常數(shù)。
將上式差分化后得到PID控制算法的離散模型如下:
(6)
其中,Ki為積分系數(shù),Kd為微分系數(shù),T為系統(tǒng)的采樣時(shí)間。
上述式(2)、(4)、(6)構(gòu)成了完整的單容水箱PID控制系統(tǒng)的差分化模型,通過(guò)差分方程求微分方程的近似解,可使得連續(xù)問(wèn)題離散化,便于計(jì)算機(jī)進(jìn)行處理。
基于Django架構(gòu)的服務(wù)器后臺(tái)主要配置文件如表1所示。其中,settings.py文件中的配置直接或間接影響Web應(yīng)用的行為和功能,設(shè)置Allowed_Hosts為["*"],將只能本地訪問(wèn)的url路徑開放為局域網(wǎng)內(nèi)所有主機(jī)均可訪問(wèn)。添加Installed_Apps=['單容水箱.apps.單容水箱.Config'],以使Django系統(tǒng)在啟動(dòng)時(shí)會(huì)加載此應(yīng)用程序。wsgi.py作為Python應(yīng)用與Web服務(wù)器之間的通信接口,其中的application()即是一個(gè)符合wsgi標(biāo)準(zhǔn)的Http處理函數(shù),它通過(guò)environ、start_reaponse兩種參數(shù)分別進(jìn)行Http的請(qǐng)求和響應(yīng);urls.py本質(zhì)是一個(gè)請(qǐng)求映射表,它的作用是在url請(qǐng)求和處理該請(qǐng)求的Views函數(shù)間建立對(duì)應(yīng)關(guān)系。例如,當(dāng)客戶端發(fā)出的url請(qǐng)求為/tankrequest時(shí),服務(wù)器會(huì)根據(jù)請(qǐng)求,在urls.py文件中進(jìn)行尋址,并匹配到與其對(duì)應(yīng)的Views函數(shù)views.tankrequest進(jìn)行處理;最后,在Views.py中,系統(tǒng)根據(jù)前端發(fā)送的參數(shù),結(jié)合水箱離散化模型,得出系統(tǒng)的控制變量和狀態(tài)變量,并將數(shù)據(jù)響應(yīng)給前端頁(yè)面,瀏覽器進(jìn)行渲染并展示給用戶。
表1 服務(wù)器端主要配置文件
前端的UI界面經(jīng)由瀏覽器渲染后,須利用form表單提交這一技術(shù)將用戶需要的參數(shù)進(jìn)行收集,以供系統(tǒng)模型進(jìn)行數(shù)據(jù)處理。關(guān)于相關(guān)參數(shù)提交與獲取的主要程序如圖3所示,涉及被控變量設(shè)定值、手動(dòng)調(diào)節(jié)閥的開度、比例增益、積分系數(shù)及微分系數(shù)等變量的提交。表單的按鈕有submit及button兩種屬性,為了實(shí)現(xiàn)局部刷新,此處form使用button屬性進(jìn)行數(shù)據(jù)的提交,并通過(guò)class元素將子參數(shù)交由Ajax技術(shù)進(jìn)行觸發(fā)事件的綁定。與此同時(shí),數(shù)據(jù)經(jīng)服務(wù)器傳回到前端的文本對(duì)象模型(DOM)中以后,需通過(guò)JS代碼將數(shù)據(jù)傳送到SVG指定的DOM端口中去,即此過(guò)程是將數(shù)據(jù)流從一個(gè)DOM移到一個(gè)或若干個(gè)DOM中去,從而滿足前端的流程圖中配置的若干子參數(shù),數(shù)據(jù)會(huì)根據(jù)DOM屬性的不同被分派到SVG矢量圖的各個(gè)位置,最終經(jīng)過(guò)瀏覽器的渲染進(jìn)行展示。
圖3 客戶端-form及SVG交互
Ajax,一種基于JS與XML的異步通信技術(shù),它可以在Web服務(wù)器與無(wú)須刷新的瀏覽器頁(yè)面之間進(jìn)行數(shù)據(jù)通信,這意味著可在不重新加載整體網(wǎng)頁(yè)的情況下對(duì)頁(yè)面的局部?jī)?nèi)容進(jìn)行刷新,關(guān)于Ajax的異步收發(fā)過(guò)程如圖4所示。需要Ajax進(jìn)行異步發(fā)送的參數(shù)即是用戶在form表單中提交的數(shù)據(jù),當(dāng)用戶觸發(fā)button時(shí),相應(yīng)的function()函數(shù)會(huì)周期地運(yùn)行Ajax環(huán)境,并將參數(shù)以POST通信的方式直接放入服務(wù)器配置的變量里。同樣地,Ajax異步收發(fā)也會(huì)不間斷地從后端(url:/tankresponse)傳回?cái)?shù)據(jù)(getData),并將數(shù)據(jù)分發(fā)到前端HTML頁(yè)面配置的接口(DOM)當(dāng)中。
圖4 客戶端-Ajax異步收發(fā)
如圖5所示為水箱液位PID控制仿真的測(cè)試過(guò)程,仿真界面通過(guò)直觀的動(dòng)畫效果、參數(shù)顯示和系統(tǒng)的輸入輸出變化過(guò)程曲線,提高了操作者的使用體驗(yàn)。在仿真系統(tǒng)運(yùn)行過(guò)程中,用戶可以給定液位高度,通過(guò)實(shí)時(shí)整定PID算法的參數(shù)了解比例、積分、微分作用對(duì)系統(tǒng)控制性能的影響,并可在系統(tǒng)穩(wěn)定時(shí)進(jìn)行干擾變量(出水閥門開度)的在線修改,從而驗(yàn)證PID控制器克服干擾的能力。
圖5 水箱液位控制系統(tǒng)仿真Web頁(yè)面
本文主要介紹了基于Web的單容水箱控制系統(tǒng)從設(shè)計(jì)、開發(fā)到測(cè)試的過(guò)程,借助Django系統(tǒng)前后端分離的特點(diǎn)搭建了B/S模式的Web架構(gòu),通過(guò)建立并推導(dǎo)水箱控制系統(tǒng)的廣義被控對(duì)象及位置式PID算法的差分化模型,精確地描述了系統(tǒng)液位變化的動(dòng)態(tài)特性。最后結(jié)合Html、CSS、JavaScript、Python等編程語(yǔ)言,分別對(duì)客戶端及服務(wù)器端進(jìn)行了開發(fā)。經(jīng)過(guò)對(duì)水箱液位控制系統(tǒng)的測(cè)試,發(fā)現(xiàn)該Web應(yīng)用能夠同時(shí)滿足水箱液位仿真的實(shí)時(shí)性及準(zhǔn)確性,且本系統(tǒng)不需安裝額外的客戶端,操作人員可直接通過(guò)瀏覽器運(yùn)行仿真環(huán)境,極大地提高了仿真系統(tǒng)的實(shí)用價(jià)值。
吉林化工學(xué)院學(xué)報(bào)2023年3期