石新梅,曹 建+,趙 亮,李宗燦,黃 兵
(1.中南大學(xué) 物理與電子學(xué)院,湖南 長(zhǎng)沙410083;2.中國(guó)科學(xué)院 上海微系統(tǒng)與信息技術(shù)研究所 汽車電子工程中心,上海200050)
設(shè)備實(shí)時(shí)性不強(qiáng)一直是阻礙軟PLC 在工業(yè)控制領(lǐng)域推廣應(yīng)用的關(guān)鍵問(wèn)題[1]。工業(yè)上提高系統(tǒng)實(shí)時(shí)性的關(guān)鍵在于提高操作系統(tǒng)的實(shí)時(shí)性,如開發(fā)實(shí)施內(nèi)核[2]或者對(duì)現(xiàn)有系統(tǒng)進(jìn)行實(shí)時(shí)性擴(kuò)展[3],但此類方法大都成本高,且實(shí)現(xiàn)復(fù)雜。
前人對(duì)PLC的研究采用的都是基于共享內(nèi)存的循環(huán)掃描工作模式[4-6],而此工作模式最重要的缺陷就是響應(yīng)時(shí)間可預(yù)測(cè)性不高。由循環(huán)掃描所引起的響應(yīng)時(shí)間滯后可達(dá)兩個(gè)掃描周期以上[7],具體與編程方法等有關(guān)。目前循環(huán)掃描工作模式常用的改進(jìn)方法包括:根據(jù)任務(wù)對(duì)實(shí)時(shí)性要求的不同而采用不同的掃描周期[8,9]、運(yùn)用不同的實(shí)時(shí)調(diào)度算法[10]、分時(shí)處理[11]、分區(qū)I/O 服務(wù)等等。但這些方法往往周期設(shè)置受限,或者程序設(shè)計(jì)相對(duì)復(fù)雜且可移植性不高,有的甚至以損失部分任務(wù)的響應(yīng)時(shí)間為代價(jià)。
響應(yīng)速度雖說(shuō)是衡量一個(gè)實(shí)時(shí)系統(tǒng)的重要標(biāo)準(zhǔn)之一,但實(shí)時(shí)系統(tǒng)最重要的特征是執(zhí)行時(shí)間的可預(yù)測(cè)性[12]。因此,為了改善傳統(tǒng)PLC的實(shí)時(shí)性問(wèn)題,本文提出了收發(fā)信號(hào)工作模式。采用該模式的軟PLC 系統(tǒng)實(shí)現(xiàn)簡(jiǎn)單,能夠?qū)崟r(shí)通信且具有很高的執(zhí)行時(shí)間可預(yù)測(cè)性,同時(shí)還可以減少由于循環(huán)帶來(lái)的CPU 資源消耗。
Qt使用了一種元對(duì)象系統(tǒng)機(jī)制對(duì)C++進(jìn)行了擴(kuò)展。頭文件中包含Q_OBJECT 宏聲明的QObject子類,在編譯過(guò)程中,都會(huì)由元對(duì)象工具生成另一個(gè)相應(yīng)的標(biāo)準(zhǔn)C++源文件。該文件中有QObject子類的 “元信息”,包括一個(gè)含有對(duì)象的類名,以及它所支持的信號(hào)和槽的列表等。當(dāng)事件或者狀態(tài)發(fā)生改變的時(shí)候,信號(hào)就會(huì)被觸發(fā)[13]。其中槽函數(shù)可以跟普通成員函數(shù)一樣被正常調(diào)用,其唯一的特殊性是可以與信號(hào)相關(guān)聯(lián)。
程序中通過(guò)調(diào)用connect方法建立信號(hào)和槽的連接,即將信號(hào)類和信號(hào)索引、槽類和槽索引記錄到全局的connectlist中。這樣在程序運(yùn)行時(shí),當(dāng)一個(gè)信號(hào)被發(fā)出,通過(guò)查找connectlist就能調(diào)用與其相關(guān)聯(lián)的槽函數(shù),從而就能實(shí)現(xiàn)類間通信。信號(hào)和槽的關(guān)系可以是一對(duì)一或者一對(duì)多,同時(shí)信號(hào)之間也可以相關(guān)聯(lián)。若一個(gè)信號(hào)與多個(gè)槽或信號(hào)相關(guān)聯(lián),則當(dāng)這個(gè)信號(hào)發(fā)出,它們會(huì)相繼被調(diào)用。
由于元對(duì)象工具在編譯過(guò)程中已將信號(hào)-槽的列表,以及connectlist等創(chuàng)建完成,實(shí)際工作中槽的調(diào)用時(shí)間,即系統(tǒng)響應(yīng)時(shí)間,就完全取決于運(yùn)行狀態(tài)下讀取connectlist以及相應(yīng)調(diào)度的速度。
圖1 (a)是循環(huán)掃描模式框架結(jié)構(gòu)。各模塊都有自己的內(nèi)存副本以保存自身數(shù)據(jù),模塊內(nèi)部可以隨機(jī)更改內(nèi)存副本。共享資源區(qū)存儲(chǔ)了所有模塊內(nèi)存副本的映射。I/O口可以隨機(jī)讀取共享資源中的數(shù)據(jù)。所謂循環(huán)掃描,指的是每次循環(huán)開始,都首先將所有模塊的內(nèi)存副本映射到共享資源,然后根據(jù)共享資源區(qū)數(shù)據(jù)執(zhí)行用戶程序,執(zhí)行完畢后再重新將數(shù)據(jù)寫到I/O 或各內(nèi)存副本中。由此可見(jiàn),掃描周期必須小于模塊最小更新時(shí)間,以防止數(shù)據(jù)丟失。
圖1 (b)是收發(fā)信號(hào)模式的框架結(jié)構(gòu)。開始工作后,模塊內(nèi)數(shù)據(jù)的更新將觸發(fā)信號(hào),從而使共享資源區(qū)數(shù)據(jù)更新。這個(gè)更新又將觸發(fā)新的信號(hào),從而實(shí)現(xiàn)其它模塊的更新。
由以上分析可知,若要實(shí)現(xiàn)兩模塊之間的通信,在循環(huán)掃描模式下,假設(shè)模塊1在前一次循環(huán)將新數(shù)據(jù)映射到共享資源,則模塊2將在后一次循環(huán)讀取該新數(shù)據(jù),從而實(shí)現(xiàn)更新。響應(yīng)時(shí)間跟周期有關(guān);在收發(fā)信號(hào)模式下,模塊N 可以直接更改共享資源數(shù)據(jù),進(jìn)而觸發(fā)信號(hào),其它模塊隨即響應(yīng),響應(yīng)時(shí)間僅跟數(shù)據(jù)調(diào)度相關(guān)。
由以上分析可見(jiàn),收發(fā)信號(hào)工作模式實(shí)現(xiàn)簡(jiǎn)單,響應(yīng)時(shí)間可預(yù)測(cè)性高。另外,此模式可以避免類似循環(huán)掃描模式中的空循環(huán),同時(shí)不必對(duì)未改變的變量進(jìn)行讀取和判斷,因此可以在一定程度上節(jié)約CPU 資源。
圖1 循環(huán)掃描模式和收發(fā)信號(hào)模式的框架
本文的設(shè)計(jì)運(yùn)用Qt的信號(hào)-槽技術(shù),在共享資源思想的基礎(chǔ)上,通過(guò)以下步驟實(shí)現(xiàn)PLC 系統(tǒng)中各模塊間以收發(fā)信號(hào)模式通信:
(1)設(shè)計(jì)一個(gè)變量類VariableItem,作為共享資源中的數(shù)據(jù)保存類型。此變量既能存儲(chǔ)數(shù)據(jù)值,又能在值改變時(shí)發(fā)射信號(hào)。每個(gè)變量必須有一個(gè)唯一屬性,以便于識(shí)別。PLC 控制系統(tǒng)中所有須用到的數(shù)據(jù)都對(duì)應(yīng)一個(gè)Variable-Item 對(duì)象,并根據(jù)唯一屬性來(lái)區(qū)分。
(2)設(shè)計(jì)一個(gè)容器類Variable作為共享資源空間。容器類統(tǒng)一管理a中的VariableItem 對(duì)象,可以對(duì)變量對(duì)象執(zhí)行的操作有:統(tǒng)計(jì)、注冊(cè)、注銷等。本文中變量名為變量唯一性特征。所謂完成一個(gè)變量的注冊(cè),就是在Variable容器里添加一個(gè)新名字的VariableItem 對(duì)象,并保存在QMap中。
(3)將模塊用類封裝,并設(shè)計(jì)信號(hào)接收端口,即槽函數(shù)。模塊有變量名屬性,表示其所要關(guān)聯(lián)的變量。根據(jù)是否對(duì)變量具有寫權(quán)限,模塊被分成兩類,其中具有寫權(quán)限的模塊有一個(gè)指向其關(guān)聯(lián)變量的指針,以更新變量值。
(4)通過(guò)connect的方法,將已注冊(cè)變量對(duì)象與相應(yīng)模塊關(guān)聯(lián),同時(shí)進(jìn)行有效性檢查 (例如:判斷變量是否注冊(cè),變量數(shù)據(jù)類型是否一致等)。
實(shí)際工作過(guò)程:系統(tǒng)首先自動(dòng)將所有用戶設(shè)定的變量注冊(cè),并將每個(gè)變量都與相應(yīng)模塊關(guān)聯(lián)。隨后,任意變量值的改變將觸發(fā)信號(hào),進(jìn)而觸發(fā)相應(yīng)模塊的槽函數(shù)。這種更新也可產(chǎn)生新信號(hào),觸發(fā)新的模塊更新。控制過(guò)程具體流程如圖2所示。
圖2 控制流程
本文分別在Windows7 (簡(jiǎn)稱Win7)和Linux2.6.32操作系統(tǒng)下進(jìn)行了測(cè)試和對(duì)比。所用Win7操作系統(tǒng)的硬件平臺(tái) 為:處 理 器Inter (R)Core (TM)i5-2400 CPU @3.01GHz,內(nèi)存4G,硬盤300G。Linux 系統(tǒng)的硬件平臺(tái)為:處理器Cortex A8,600MHz,RAM DDR2 SDRAM 128MByte,F(xiàn)lash 128MB nand flash。
本文模擬了軟PLC的循環(huán)掃描工作模式,以及收發(fā)信號(hào)工作模式??紤]到實(shí)際應(yīng)用中的復(fù)雜性,本文進(jìn)行了多種測(cè)試對(duì)比。所有測(cè)試都采用gettimeofday函數(shù)記錄時(shí)間點(diǎn),并都獲取了兩萬(wàn)組測(cè)試結(jié)果。
如圖3 (a)部分是模擬循環(huán)掃描i個(gè)變量變化的測(cè)試框圖。圖3中次線程i代表第i個(gè)任務(wù)模塊,每個(gè)線程擁有自己的變量m_num。次線程i不斷產(chǎn)生一到三倍掃描周期之間的隨機(jī)時(shí)間,并按照隨機(jī)時(shí)間休息,休息完就刷新成員m_num 的值,并記錄時(shí)間點(diǎn);主線程中的數(shù)組thread-Num [N]是各次線程m _num 的映射表。主線程在掃描周期開始時(shí)刻遍歷所有次線程的m_num。若某m_num 改變,則刷新映射表數(shù)組,并記錄時(shí)間點(diǎn)。將檢測(cè)到m_num值變化的主次線程時(shí)間點(diǎn)相減,再加上掃描周期,即得到一組循環(huán)掃描響應(yīng)時(shí)間。
圖3 (b)部分是模擬i個(gè)變量改變的收發(fā)信號(hào)模式測(cè)試框圖。M _flag 是線程和QWidget對(duì)象的唯一標(biāo)識(shí)。主線程中將線程i的信號(hào)與QWidget對(duì)象i的槽連接。線程i在1s至5s之間隨機(jī)發(fā)信號(hào),模擬數(shù)據(jù)更新,并記錄時(shí)間點(diǎn)和M _flag。QWidget對(duì)象在槽中同樣記錄時(shí)間點(diǎn)和M _flag。將具有相同M _flag 的收發(fā)信號(hào)時(shí)間點(diǎn)相減,即得到一組收發(fā)信號(hào)的響應(yīng)時(shí)間。
圖3 測(cè)試流程
表1、表2中的測(cè)試種類分別代表兩種平臺(tái)下單個(gè)信號(hào)槽的連接測(cè)試、單個(gè)信號(hào)與100個(gè)槽的連接測(cè)試、200個(gè)信號(hào)與200個(gè)槽分別連接測(cè)試 (信號(hào)都在1~5s內(nèi)隨機(jī)發(fā)出)、循環(huán)掃描1 個(gè)對(duì)象的隨機(jī)更新測(cè)試、以及循環(huán)掃描200個(gè)對(duì)象的隨機(jī)更新測(cè)試。軟件PLC 對(duì)于不同的PLC 程序掃描周期一般在10-100ms之間。因此在模擬循環(huán)掃描工作模式時(shí),分別選擇了10ms和100ms兩個(gè)比較有代表性的掃描周期。收發(fā)信號(hào)模式中的200個(gè)信號(hào),即對(duì)應(yīng)循環(huán)掃描工作模式中的200個(gè)掃描對(duì)象。選擇200個(gè)信號(hào)槽是基于實(shí)驗(yàn)平臺(tái)處理速度的考慮,以保證測(cè)試過(guò)程中掃描周期大于檢測(cè)更新時(shí)間。
圖4、圖5是有代表性的響應(yīng)時(shí)間測(cè)試結(jié)果。縱坐標(biāo)為該響應(yīng)時(shí)間占總測(cè)試結(jié)果的百分比,橫坐標(biāo)從左到右依次為單個(gè)信號(hào)與100個(gè)槽連接的響應(yīng)時(shí)間、200個(gè)信號(hào)槽分別連接的響應(yīng)時(shí)間、200 個(gè)對(duì)象以100ms 為掃描周期的響應(yīng)時(shí)間。
表1 Linux響應(yīng)時(shí)間測(cè)試結(jié)果
表2 Win7響應(yīng)時(shí)間測(cè)試結(jié)果
對(duì)于周期性的任務(wù),最能反應(yīng)系統(tǒng)實(shí)時(shí)性的是響應(yīng)時(shí)間方差。如圖4、圖5所示,收發(fā)信號(hào)模式的響應(yīng)時(shí)間集中分布在0~2ms左右,而循環(huán)掃描模式的響應(yīng)時(shí)間則在一到兩倍掃描周期內(nèi)接近平均分布。從表1、表2中可以看出,在信號(hào)槽一一對(duì)應(yīng)的情況下,收發(fā)信號(hào)模式的響應(yīng)時(shí)間方差比循環(huán)掃描工作模式的方差小了3到4個(gè)數(shù)量級(jí)。因此,不論從響應(yīng)時(shí)間快慢,還是從響應(yīng)時(shí)間可預(yù)測(cè)性來(lái)看,收發(fā)信號(hào)模式相對(duì)于循環(huán)掃描模式都有一定的優(yōu)勢(shì)。
但值得注意的是,如果與同一個(gè)信號(hào)關(guān)聯(lián)的槽過(guò)多,則會(huì)影響降低系統(tǒng)的實(shí)時(shí)性,如圖4、圖5 最左邊的兩曲線。因此在設(shè)計(jì)過(guò)程中應(yīng)當(dāng)盡量避免信號(hào)槽一對(duì)多的情況。
在獲得響應(yīng)時(shí)間的同時(shí)測(cè)得兩種平臺(tái)下CPU 占用率。在Win7 平臺(tái)下通過(guò)任務(wù)管理器查看CPU 占用率,在Linux下通過(guò)top命令查看CPU 占用率。數(shù)據(jù)穩(wěn)定后的觀察結(jié)果如表1、2 最后一行所示??梢?jiàn)相對(duì)于循環(huán)掃描模式,收發(fā)信號(hào)模式能在監(jiān)控200個(gè)對(duì)象隨機(jī)變化時(shí)明顯減少CPU 占用率。
進(jìn)一步增強(qiáng)系統(tǒng)實(shí)時(shí)性是軟PLC 系統(tǒng)重要的發(fā)展方向。本文在共享資源的基礎(chǔ)上,運(yùn)用了收發(fā)信號(hào)模式代替?zhèn)鹘y(tǒng)循環(huán)掃描模式實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)交互。測(cè)試結(jié)果表明,相對(duì)于傳統(tǒng)的循環(huán)掃描模式,該模式實(shí)現(xiàn)簡(jiǎn)單、響應(yīng)時(shí)間短、可預(yù)測(cè)性高、CPU 占用率低,是一種性能良好的實(shí)時(shí)交互模式,能滿足大多數(shù)實(shí)際場(chǎng)合的需求。但因Qt實(shí)現(xiàn)原理限制,使用該模式需要注意避免信號(hào)槽的一對(duì)多使用。另外該模式在實(shí)際使用過(guò)程中可能存在信號(hào)-槽形成死循環(huán)等狀況,有待進(jìn)一步改進(jì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運(yùn)行系統(tǒng)研究與實(shí)現(xiàn) [D].太原:太原理工大學(xué),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].秦皇島:燕山大學(xué),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].南京:南京航空航天大學(xué),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ì) [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).[馬遠(yuǎn)佳,秦付軍.基于實(shí)時(shí)數(shù)據(jù)庫(kù)的軟PLC 運(yùn)行系統(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è)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(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].價(jià)值工程,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ì)算機(jī)可編程控制器 [J].可編程控制器與工廠自動(dòng)化,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].組合機(jī)床與自動(dòng)化加工技術(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).[巴巍.實(shí)時(shí)系統(tǒng)動(dòng)態(tài)優(yōu)先級(jí)任務(wù)調(diào)度算法的研究[D].大連:大連理工大學(xué),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).[申輝陽(yáng).PLC和變頻器同鏈路不同協(xié)議同時(shí)通信方法 [J].制造業(yè)自動(dòng)化,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.