石新梅,曹 建+,趙 亮,李宗燦,黃 兵
(1.中南大學 物理與電子學院,湖南 長沙410083;2.中國科學院 上海微系統(tǒng)與信息技術(shù)研究所 汽車電子工程中心,上海200050)
設(shè)備實時性不強一直是阻礙軟PLC 在工業(yè)控制領(lǐng)域推廣應(yīng)用的關(guān)鍵問題[1]。工業(yè)上提高系統(tǒng)實時性的關(guān)鍵在于提高操作系統(tǒng)的實時性,如開發(fā)實施內(nèi)核[2]或者對現(xiàn)有系統(tǒng)進行實時性擴展[3],但此類方法大都成本高,且實現(xiàn)復雜。
前人對PLC的研究采用的都是基于共享內(nèi)存的循環(huán)掃描工作模式[4-6],而此工作模式最重要的缺陷就是響應(yīng)時間可預(yù)測性不高。由循環(huán)掃描所引起的響應(yīng)時間滯后可達兩個掃描周期以上[7],具體與編程方法等有關(guān)。目前循環(huán)掃描工作模式常用的改進方法包括:根據(jù)任務(wù)對實時性要求的不同而采用不同的掃描周期[8,9]、運用不同的實時調(diào)度算法[10]、分時處理[11]、分區(qū)I/O 服務(wù)等等。但這些方法往往周期設(shè)置受限,或者程序設(shè)計相對復雜且可移植性不高,有的甚至以損失部分任務(wù)的響應(yīng)時間為代價。
響應(yīng)速度雖說是衡量一個實時系統(tǒng)的重要標準之一,但實時系統(tǒng)最重要的特征是執(zhí)行時間的可預(yù)測性[12]。因此,為了改善傳統(tǒng)PLC的實時性問題,本文提出了收發(fā)信號工作模式。采用該模式的軟PLC 系統(tǒng)實現(xiàn)簡單,能夠?qū)崟r通信且具有很高的執(zhí)行時間可預(yù)測性,同時還可以減少由于循環(huán)帶來的CPU 資源消耗。
Qt使用了一種元對象系統(tǒng)機制對C++進行了擴展。頭文件中包含Q_OBJECT 宏聲明的QObject子類,在編譯過程中,都會由元對象工具生成另一個相應(yīng)的標準C++源文件。該文件中有QObject子類的 “元信息”,包括一個含有對象的類名,以及它所支持的信號和槽的列表等。當事件或者狀態(tài)發(fā)生改變的時候,信號就會被觸發(fā)[13]。其中槽函數(shù)可以跟普通成員函數(shù)一樣被正常調(diào)用,其唯一的特殊性是可以與信號相關(guān)聯(lián)。
程序中通過調(diào)用connect方法建立信號和槽的連接,即將信號類和信號索引、槽類和槽索引記錄到全局的connectlist中。這樣在程序運行時,當一個信號被發(fā)出,通過查找connectlist就能調(diào)用與其相關(guān)聯(lián)的槽函數(shù),從而就能實現(xiàn)類間通信。信號和槽的關(guān)系可以是一對一或者一對多,同時信號之間也可以相關(guān)聯(lián)。若一個信號與多個槽或信號相關(guān)聯(lián),則當這個信號發(fā)出,它們會相繼被調(diào)用。
由于元對象工具在編譯過程中已將信號-槽的列表,以及connectlist等創(chuàng)建完成,實際工作中槽的調(diào)用時間,即系統(tǒng)響應(yīng)時間,就完全取決于運行狀態(tài)下讀取connectlist以及相應(yīng)調(diào)度的速度。
圖1 (a)是循環(huán)掃描模式框架結(jié)構(gòu)。各模塊都有自己的內(nèi)存副本以保存自身數(shù)據(jù),模塊內(nèi)部可以隨機更改內(nèi)存副本。共享資源區(qū)存儲了所有模塊內(nèi)存副本的映射。I/O口可以隨機讀取共享資源中的數(shù)據(jù)。所謂循環(huán)掃描,指的是每次循環(huán)開始,都首先將所有模塊的內(nèi)存副本映射到共享資源,然后根據(jù)共享資源區(qū)數(shù)據(jù)執(zhí)行用戶程序,執(zhí)行完畢后再重新將數(shù)據(jù)寫到I/O 或各內(nèi)存副本中。由此可見,掃描周期必須小于模塊最小更新時間,以防止數(shù)據(jù)丟失。
圖1 (b)是收發(fā)信號模式的框架結(jié)構(gòu)。開始工作后,模塊內(nèi)數(shù)據(jù)的更新將觸發(fā)信號,從而使共享資源區(qū)數(shù)據(jù)更新。這個更新又將觸發(fā)新的信號,從而實現(xiàn)其它模塊的更新。
由以上分析可知,若要實現(xiàn)兩模塊之間的通信,在循環(huán)掃描模式下,假設(shè)模塊1在前一次循環(huán)將新數(shù)據(jù)映射到共享資源,則模塊2將在后一次循環(huán)讀取該新數(shù)據(jù),從而實現(xiàn)更新。響應(yīng)時間跟周期有關(guān);在收發(fā)信號模式下,模塊N 可以直接更改共享資源數(shù)據(jù),進而觸發(fā)信號,其它模塊隨即響應(yīng),響應(yīng)時間僅跟數(shù)據(jù)調(diào)度相關(guān)。
由以上分析可見,收發(fā)信號工作模式實現(xiàn)簡單,響應(yīng)時間可預(yù)測性高。另外,此模式可以避免類似循環(huán)掃描模式中的空循環(huán),同時不必對未改變的變量進行讀取和判斷,因此可以在一定程度上節(jié)約CPU 資源。
圖1 循環(huán)掃描模式和收發(fā)信號模式的框架
本文的設(shè)計運用Qt的信號-槽技術(shù),在共享資源思想的基礎(chǔ)上,通過以下步驟實現(xiàn)PLC 系統(tǒng)中各模塊間以收發(fā)信號模式通信:
(1)設(shè)計一個變量類VariableItem,作為共享資源中的數(shù)據(jù)保存類型。此變量既能存儲數(shù)據(jù)值,又能在值改變時發(fā)射信號。每個變量必須有一個唯一屬性,以便于識別。PLC 控制系統(tǒng)中所有須用到的數(shù)據(jù)都對應(yīng)一個Variable-Item 對象,并根據(jù)唯一屬性來區(qū)分。
(2)設(shè)計一個容器類Variable作為共享資源空間。容器類統(tǒng)一管理a中的VariableItem 對象,可以對變量對象執(zhí)行的操作有:統(tǒng)計、注冊、注銷等。本文中變量名為變量唯一性特征。所謂完成一個變量的注冊,就是在Variable容器里添加一個新名字的VariableItem 對象,并保存在QMap中。
(3)將模塊用類封裝,并設(shè)計信號接收端口,即槽函數(shù)。模塊有變量名屬性,表示其所要關(guān)聯(lián)的變量。根據(jù)是否對變量具有寫權(quán)限,模塊被分成兩類,其中具有寫權(quán)限的模塊有一個指向其關(guān)聯(lián)變量的指針,以更新變量值。
(4)通過connect的方法,將已注冊變量對象與相應(yīng)模塊關(guān)聯(lián),同時進行有效性檢查 (例如:判斷變量是否注冊,變量數(shù)據(jù)類型是否一致等)。
實際工作過程:系統(tǒng)首先自動將所有用戶設(shè)定的變量注冊,并將每個變量都與相應(yīng)模塊關(guān)聯(lián)。隨后,任意變量值的改變將觸發(fā)信號,進而觸發(fā)相應(yīng)模塊的槽函數(shù)。這種更新也可產(chǎn)生新信號,觸發(fā)新的模塊更新??刂七^程具體流程如圖2所示。
圖2 控制流程
本文分別在Windows7 (簡稱Win7)和Linux2.6.32操作系統(tǒng)下進行了測試和對比。所用Win7操作系統(tǒng)的硬件平臺 為:處 理 器Inter (R)Core (TM)i5-2400 CPU @3.01GHz,內(nèi)存4G,硬盤300G。Linux 系統(tǒng)的硬件平臺為:處理器Cortex A8,600MHz,RAM DDR2 SDRAM 128MByte,F(xiàn)lash 128MB nand flash。
本文模擬了軟PLC的循環(huán)掃描工作模式,以及收發(fā)信號工作模式。考慮到實際應(yīng)用中的復雜性,本文進行了多種測試對比。所有測試都采用gettimeofday函數(shù)記錄時間點,并都獲取了兩萬組測試結(jié)果。
如圖3 (a)部分是模擬循環(huán)掃描i個變量變化的測試框圖。圖3中次線程i代表第i個任務(wù)模塊,每個線程擁有自己的變量m_num。次線程i不斷產(chǎn)生一到三倍掃描周期之間的隨機時間,并按照隨機時間休息,休息完就刷新成員m_num 的值,并記錄時間點;主線程中的數(shù)組thread-Num [N]是各次線程m _num 的映射表。主線程在掃描周期開始時刻遍歷所有次線程的m_num。若某m_num 改變,則刷新映射表數(shù)組,并記錄時間點。將檢測到m_num值變化的主次線程時間點相減,再加上掃描周期,即得到一組循環(huán)掃描響應(yīng)時間。
圖3 (b)部分是模擬i個變量改變的收發(fā)信號模式測試框圖。M _flag 是線程和QWidget對象的唯一標識。主線程中將線程i的信號與QWidget對象i的槽連接。線程i在1s至5s之間隨機發(fā)信號,模擬數(shù)據(jù)更新,并記錄時間點和M _flag。QWidget對象在槽中同樣記錄時間點和M _flag。將具有相同M _flag 的收發(fā)信號時間點相減,即得到一組收發(fā)信號的響應(yīng)時間。
圖3 測試流程
表1、表2中的測試種類分別代表兩種平臺下單個信號槽的連接測試、單個信號與100個槽的連接測試、200個信號與200個槽分別連接測試 (信號都在1~5s內(nèi)隨機發(fā)出)、循環(huán)掃描1 個對象的隨機更新測試、以及循環(huán)掃描200個對象的隨機更新測試。軟件PLC 對于不同的PLC 程序掃描周期一般在10-100ms之間。因此在模擬循環(huán)掃描工作模式時,分別選擇了10ms和100ms兩個比較有代表性的掃描周期。收發(fā)信號模式中的200個信號,即對應(yīng)循環(huán)掃描工作模式中的200個掃描對象。選擇200個信號槽是基于實驗平臺處理速度的考慮,以保證測試過程中掃描周期大于檢測更新時間。
圖4、圖5是有代表性的響應(yīng)時間測試結(jié)果??v坐標為該響應(yīng)時間占總測試結(jié)果的百分比,橫坐標從左到右依次為單個信號與100個槽連接的響應(yīng)時間、200個信號槽分別連接的響應(yīng)時間、200 個對象以100ms 為掃描周期的響應(yīng)時間。
表1 Linux響應(yīng)時間測試結(jié)果
表2 Win7響應(yīng)時間測試結(jié)果
對于周期性的任務(wù),最能反應(yīng)系統(tǒng)實時性的是響應(yīng)時間方差。如圖4、圖5所示,收發(fā)信號模式的響應(yīng)時間集中分布在0~2ms左右,而循環(huán)掃描模式的響應(yīng)時間則在一到兩倍掃描周期內(nèi)接近平均分布。從表1、表2中可以看出,在信號槽一一對應(yīng)的情況下,收發(fā)信號模式的響應(yīng)時間方差比循環(huán)掃描工作模式的方差小了3到4個數(shù)量級。因此,不論從響應(yīng)時間快慢,還是從響應(yīng)時間可預(yù)測性來看,收發(fā)信號模式相對于循環(huán)掃描模式都有一定的優(yōu)勢。
但值得注意的是,如果與同一個信號關(guān)聯(lián)的槽過多,則會影響降低系統(tǒng)的實時性,如圖4、圖5 最左邊的兩曲線。因此在設(shè)計過程中應(yīng)當盡量避免信號槽一對多的情況。
在獲得響應(yīng)時間的同時測得兩種平臺下CPU 占用率。在Win7 平臺下通過任務(wù)管理器查看CPU 占用率,在Linux下通過top命令查看CPU 占用率。數(shù)據(jù)穩(wěn)定后的觀察結(jié)果如表1、2 最后一行所示。可見相對于循環(huán)掃描模式,收發(fā)信號模式能在監(jiān)控200個對象隨機變化時明顯減少CPU 占用率。
進一步增強系統(tǒng)實時性是軟PLC 系統(tǒng)重要的發(fā)展方向。本文在共享資源的基礎(chǔ)上,運用了收發(fā)信號模式代替?zhèn)鹘y(tǒng)循環(huán)掃描模式實現(xiàn)實時數(shù)據(jù)交互。測試結(jié)果表明,相對于傳統(tǒng)的循環(huán)掃描模式,該模式實現(xiàn)簡單、響應(yīng)時間短、可預(yù)測性高、CPU 占用率低,是一種性能良好的實時交互模式,能滿足大多數(shù)實際場合的需求。但因Qt實現(xiàn)原理限制,使用該模式需要注意避免信號槽的一對多使用。另外該模式在實際使用過程中可能存在信號-槽形成死循環(huán)等狀況,有待進一步改進。
[1]ZHANG Lei.The study and realization on running system of soft-PLC based on PC [D].Taiyuan:Taiyuan University of Technology,2008 (in Chinese).[張磊.基于PC的軟PLC運行系統(tǒng)研究與實現(xiàn) [D].太原:太原理工大學,2008.]
[2]ZHANG Lei.The study on RTX-based full software numerical control system[D].Qinghuangdao:Yanshan University,2006(in Chinese).[張蕾.基于RTX 的全軟件數(shù)控系統(tǒng)的研究[D].秦皇島:燕山大學,2006.]
[3]YU Saihua.Research and development of the soft-PLC system based on Windows[D].Nanjing:Nanjing University of Aeronautics and Astronautics,2012 (in Chinese). [喻賽花.基于Windows的軟PLC 系統(tǒng)開發(fā) [D].南京:南京航空航天大學,2012.]
[4]WU Yuxiang,GUO Jianxung,ZHOU Jianxiang.Design of embedded soft-PLC programming system[J].Control Engineering of China,2010,17 (3):363-367 (in Chinese). [吳玉香,郭建勛,周建香.嵌入式軟PLC編程系統(tǒng)的設(shè)計 [J].控制工程,2010,17 (3):363-367.]
[5]MA Yuanjia,QIN Fujun.Research of running system of soft-PLC based on the real time database[J].Microcomputer Information,2010,4 (1):55-56 (in Chinese).[馬遠佳,秦付軍.基于實時數(shù)據(jù)庫的軟PLC 運行系統(tǒng)研究 [J].控制系統(tǒng),2010,4 (1):55-56.]
[6]CHEN Xue,LIU Yinzhong,XU Ensong.Design and implementation of soft-PLC ladder diagram editing software based on Qt[J].Computer Systems & Applications,2011,20 (12):64-69 (in Chinese).[陳雪,劉蔭忠,徐恩松.基于Qt的PLC梯形圖編輯軟件的設(shè)計與實現(xiàn) [J].計算機系統(tǒng)應(yīng)用,2011,20 (12):64-69.]
[7]LAN Chengzhang,F(xiàn)AN Limin.Brief analysis on the lag phenomenon of PLC input/output response[J].Value Engineering,2010 (3):41-41 (in Chinese).[蘭成章,范麗敏.PLC中輸出滯后輸入的淺析 [J].價值工程,2010 (3):41-41.]
[8]ZHANG Zhilong.A kind of high-performance computer programmable logic controller(PCC)[J].Programmable Controller &Factory Automation,2011 (7):7-13 (in Chinese).[張志龍.一種高性能計算機可編程控制器 [J].可編程控制器與工廠自動化,2011 (7):7-13.]
[9]MA Xiongbo,HAN Zhenyu,WANG Yongzhang,et al.Research of a RTX-based soft-PLC multi-task system [J].Modular Machine Tool &Automatic Manufacturing Technique,2010(1):35-41 (in Chinese).[馬雄波,韓振宇,王永章,等.基于RTX 的軟PLC多任務(wù)系統(tǒng)研究 [J].組合機床與自動化加工技術(shù),2010 (1):35-41.]
[10]BA Wei.Research on the dynamic-priority scheduling algorithms of tasks in real-time systems[D].Dalian:Dalian University of Technology,2010 (in Chinese).[巴巍.實時系統(tǒng)動態(tài)優(yōu)先級任務(wù)調(diào)度算法的研究[D].大連:大連理工大學,2010.]
[11]SHEN Huiyang.The communication methods between PLC and inverter in same link and different protocols[J].Manufacturing Automation,2012,34 (1):10-13 (in Chinese).[申輝陽.PLC和變頻器同鏈路不同協(xié)議同時通信方法 [J].制造業(yè)自動化,2012,34 (1):10-13.]
[12]Khalib Z I A,Ahmad B R,Ong O B L.High performance nonpreemptive dynamic scheduling algorithm for soft real time system[C]//Computer Applications and Industrial Electronics,2012:54-59.
[13]Blanchette J,Summerfield M.C++GUI QT4programming[M].2nd ed.Upper Saddle River:Prentice Hall,2008.