王慧鋒, 干玲劍
(華東理工大學(xué)化工過程先進(jìn)控制與優(yōu)化教育部重點(diǎn)實(shí)驗(yàn)室, 上海 200237)
基于多核處理器的PLC控制程序并行執(zhí)行
王慧鋒, 干玲劍
(華東理工大學(xué)化工過程先進(jìn)控制與優(yōu)化教育部重點(diǎn)實(shí)驗(yàn)室, 上海 200237)
針對(duì)可編程邏輯控制器(Programmable Logic Controller,PLC)的編程語言不支持程序的并行編譯,無法使控制程序并行執(zhí)行于多核處理器的問題,根據(jù)功能塊圖的可拆分性,提出了用有向無環(huán)圖(Directed Acyclic Graph,DAG)任務(wù)模型表示PLC控制程序的方法,并采用靜態(tài)列表任務(wù)調(diào)度算法,優(yōu)化DAG中的任務(wù)節(jié)點(diǎn)在不同CPU核上的分配調(diào)度,解決了PLC控制程序并行執(zhí)行時(shí)會(huì)遇到的通信延時(shí)問題。此外,針對(duì)變量資源的競爭問題提出了使用互斥量的方法。實(shí)驗(yàn)結(jié)果表明,此方法能有效地將PLC控制程序并行運(yùn)行在多核處理器上,大大縮短了程序的執(zhí)行時(shí)間。
多核處理器; 并行執(zhí)行; 有向無環(huán)圖; PLC控制程序; 靜態(tài)列表任務(wù)調(diào)度算法
PLC是一種抗干擾能力強(qiáng)、可靠性高、使用靈活的基于單核處理器的控制系統(tǒng),已廣泛應(yīng)用于鋼鐵、石油、化工、機(jī)械制造、汽車等各個(gè)行業(yè)[1]??s短PLC控制程序的執(zhí)行時(shí)間是提高PLC性能的主要方法,目前國內(nèi)外學(xué)者研究設(shè)計(jì)了將程序移植到具有并行執(zhí)行能力的FPGA上運(yùn)行的方法[2-4],通過并行執(zhí)行梯形圖來縮短執(zhí)行時(shí)間從而大幅度提高PLC的響應(yīng)速度。多核處理器能夠通過多個(gè)CPU核進(jìn)行并行計(jì)算來減少程序的執(zhí)行時(shí)間,但是目前針對(duì)控制程序在多核處理器上的并行執(zhí)行的研究相對(duì)較少。在工業(yè)控制領(lǐng)域中,PLC控制程序的開發(fā)設(shè)計(jì)通常遵循IEC61131-3工業(yè)標(biāo)準(zhǔn)[5],而IEC61131-3標(biāo)準(zhǔn)規(guī)定的編程語言不支持程序的并行編譯[6],即PLC工程師設(shè)計(jì)的控制程序只能運(yùn)行于單核處理器上,無法直接在多核處理器上并行運(yùn)行。為了充分發(fā)揮多核處理器在工業(yè)控制領(lǐng)域的優(yōu)勢,設(shè)計(jì)使PLC控制程序在多核處理器上并行執(zhí)行的方法具有重要現(xiàn)實(shí)意義。
本文從函數(shù)層面根據(jù)功能塊圖可拆分的特性,考慮PLC控制程序中功能塊之間的依賴關(guān)系,提出了一種基于DAG任務(wù)模型的方法。用DAG表示PLC控制程序,然后將基于靜態(tài)列表的任務(wù)分配調(diào)度算法運(yùn)用至PLC控制程序的在多核處理器上并行執(zhí)行中,實(shí)現(xiàn)了控制程序的整體執(zhí)行時(shí)間的縮短,同時(shí)也解決了PLC控制程序?qū)嶋H并行運(yùn)行在多核處理器上時(shí)會(huì)遇到的通信延時(shí)問題。此外,本文還針對(duì)變量資源的競爭問題提出了采用互斥量的方法。
多核硬件平臺(tái)結(jié)構(gòu)對(duì)PLC控制程序的并行執(zhí)行有至關(guān)重要的影響,例如處理器的CPU核數(shù)和通信機(jī)制會(huì)影響控制程序的執(zhí)行時(shí)間和通信時(shí)間。多核硬件平臺(tái)結(jié)構(gòu)一般用拓?fù)鋱DTG=(P,N),其中P表示內(nèi)核節(jié)點(diǎn)集合,N表示連接內(nèi)核的邊集合。本文主要研究總線共享的同構(gòu)多核處理器,它的各個(gè)CPU核處理速度相同,任意兩個(gè)CPU核間的通信速率相等。如圖1所示,m個(gè)CPU核掛載在共享總線上。本文設(shè)定同構(gòu)多核處理器是全連通的,此時(shí)拓?fù)鋱D可表示為TG=P。
圖1 總線共享的緩存結(jié)構(gòu)Fig.1 Cache structure with shared bus
2.1 概述
在自動(dòng)化領(lǐng)域,工業(yè)控制程序通常使用IEC61133-3或IEC61499[7]標(biāo)準(zhǔn)進(jìn)行建模。功能塊圖是IEC61133-3標(biāo)準(zhǔn)提出的一種最具發(fā)展?jié)摿Φ木幊陶Z言,它能夠形象地描述程序的并行性,具有功能塊結(jié)構(gòu)簡單、有利于程序的結(jié)構(gòu)化設(shè)計(jì)和滿足代碼重復(fù)利用的需求的優(yōu)點(diǎn)。此外,功能塊圖程序具有良好的可拆分性,能夠分段運(yùn)行于多個(gè)CPU核上。因此,本文采用功能塊圖作為PLC控制程序模型。此外,控制系統(tǒng)提出的其他組件模型(例如FASA[8],Procom[9])也可以很容易地轉(zhuǎn)換成這種模型。
2.2 功能塊圖模型
在模型中,控制程序被模擬為由功能塊和連接線組成的一個(gè)網(wǎng)絡(luò)。功能塊主要分為復(fù)合功能塊和基本功能塊兩種,其中復(fù)合功能塊由其他復(fù)合功能塊或基本功能塊組成,所有的功能塊都由存儲(chǔ)信息的變量和處理信息的指令組成。功能塊之間通過輸入和輸出變量進(jìn)行連接,發(fā)送功能塊的輸出變量通過信號(hào)連接到一個(gè)接收功能塊的輸入變量,這種方式使得功能塊之間具有依賴關(guān)系。在一段PLC控制程序中,在確定變量α的值之前,必須先確定變量β的值,則稱α依賴于β,這種關(guān)系為依賴關(guān)系。依賴關(guān)系是分析控制程序邏輯的基礎(chǔ)。
閥門控制是工業(yè)控制中比較經(jīng)典的案例,在工業(yè)生產(chǎn)過程中具有廣泛的應(yīng)用。本文以閥門控制為例介紹使PLC控制程序并行執(zhí)行的方法,圖2所示為閥門控制的一種功能塊圖(FBD)。
2.3 拆分PLC控制程序
為了使PLC控制程序能夠并行編譯,本文采用Beremiz開源軟件將控制程序中的功能塊圖轉(zhuǎn)化為C語言代碼,但是,此工具得到的C代碼是串行單線程的,并且只能運(yùn)行在單核處理器上。為了能夠使控制程序并行運(yùn)行,先對(duì)功能塊圖的結(jié)構(gòu)進(jìn)行分析,然后以功能塊為單位將控制程序離散化。
首先遍歷生成的C代碼,得到PLC控制程序中包含的所有功能塊信息,包括功能塊的名字、輸入與輸出變量以及信號(hào)連接線。根據(jù)這些信息,將功能塊圖中的信號(hào)連線轉(zhuǎn)換成變量,并且保證每個(gè)功能塊引腳上均存在變量。圖3示出了拆分PLC控制程序?yàn)楦鱾€(gè)單獨(dú)的功能塊結(jié)構(gòu)的具體流程。
在拆分PLC控制程序時(shí),需要重點(diǎn)考慮的是信號(hào)連接線中的分支結(jié)構(gòu)。在分支結(jié)構(gòu)中,主連接線與各個(gè)分支的能流完全相同,因而需要為與分支及主干相連的所有功能塊添加相同的變量。以閥門控制程序(圖2)中的節(jié)點(diǎn)2、3、4所形成的分支結(jié)構(gòu)為例,其信號(hào)連接線的替換結(jié)果如圖4所示。
圖2 閥門控制程序的功能塊圖Fig.2 FBD of the valve control program
圖3 功能塊圖拆分流程圖Fig.3 Flowchart of splitting FBD
2.4 功能塊之間的依賴關(guān)系
為了使拆分后的功能塊能夠有序地并行執(zhí)行,還需要對(duì)PLC控制程序進(jìn)行依賴關(guān)系分析。通過遍歷拆分后的所有功能塊的輸入輸出變量,找到具有相同變量名稱的輸入變量和輸出變量的不同功能塊或者同一個(gè)功能塊(考慮功能塊有自循環(huán)的可能性),得到功能塊之間的依賴關(guān)系,從而決定功能塊之間的執(zhí)行順序。
圖4 功能塊圖拆分實(shí)例Fig.4 Example of splitting FBD
此外,為了解決不同功能塊在同一個(gè)核上或不同核上進(jìn)行通信的問題,將多個(gè)功能塊公共讀寫的變量設(shè)為全局變量。如果某個(gè)功能塊改變了全局變量的值,它將影響到可以訪問該變量的其他功能塊,從而功能塊之間實(shí)現(xiàn)了數(shù)據(jù)的傳遞。
3.1 DAG的基本概念
一個(gè)有向無環(huán)圖G一般表示為一個(gè)二元組G=(T,V),其中T={τ1,τ2,τ3,…,τn} 表示圖中任務(wù)節(jié)點(diǎn)τ的集合,τi表示第i個(gè)任務(wù),τi的權(quán)值w(τi)為任務(wù)i的執(zhí)行時(shí)間。V為圖中所有有向邊的集合,給定兩個(gè)節(jié)點(diǎn)τi,τj∈T,vij表示從起點(diǎn)τi到終點(diǎn)τj的邊,邊表示任務(wù)之間的依賴關(guān)系,邊上的權(quán)值c(vij)代表通信時(shí)間。前驅(qū)節(jié)點(diǎn)定義為pred(τi)={τx∈T:vxi∈V},后繼節(jié)點(diǎn)定義為succ(τi)={τx∈T:vix∈V}。此外,滿足pred(τi)=?的節(jié)點(diǎn)τi稱為源點(diǎn),而滿足succ(τi)=?的節(jié)點(diǎn)稱為匯點(diǎn)。
3.2 從功能塊圖到DAG
功能塊圖與DAG是非常相似的,功能塊可以直接映射為DAG中的一個(gè)任務(wù)節(jié)點(diǎn),功能塊之間的依賴關(guān)系可以由DAG中的有向邊來保存,功能塊的執(zhí)行時(shí)間也會(huì)被繼承下來。由于本文主要考慮控制程序的并行執(zhí)行問題,因此閥門控制程序中的各個(gè)功能塊的執(zhí)行時(shí)間使用文獻(xiàn)[8]測量得出的結(jié)果,分別為:節(jié)點(diǎn)0為14 μs,節(jié)點(diǎn)1為6 μs,節(jié)點(diǎn)2為17 μs,節(jié)點(diǎn)3為9 μs,節(jié)點(diǎn)4為8 μs,節(jié)點(diǎn)5為9 μs,節(jié)點(diǎn)6為6 μs。為了使功能塊圖能夠準(zhǔn)確地轉(zhuǎn)化為對(duì)應(yīng)的DAG,還需要解決以下一些問題:
(1) 有向無環(huán)圖中的任務(wù)節(jié)點(diǎn)之間是不存在循環(huán)的,而PLC控制程序中通常會(huì)存在內(nèi)部循環(huán)體。事實(shí)上,由于記錄功能塊間關(guān)系的全局變量的值是可以向后傳遞的,也就是說存在內(nèi)部循環(huán)的功能塊之間的數(shù)據(jù)反向傳遞是自動(dòng)完成的,不需要用有向邊單獨(dú)表示出來,但是為了補(bǔ)償更新數(shù)據(jù)帶來的附加延遲,在DAG中需要添加一個(gè)虛擬節(jié)點(diǎn)。
(2) DAG中的任務(wù)節(jié)點(diǎn)通常沒有復(fù)合結(jié)構(gòu),而一個(gè)功能塊可以擁有多個(gè)層級(jí)。本文的解決方案是將復(fù)合功能塊作為一個(gè)任務(wù)節(jié)點(diǎn),使復(fù)合功能塊中的所有基本功能塊分配到同一個(gè)CPU核上執(zhí)行,節(jié)點(diǎn)的執(zhí)行時(shí)間等于它所包含的基本功能塊串行執(zhí)行時(shí)間的總和。
全局變量一般存儲(chǔ)在主存儲(chǔ)器中,而訪問主存儲(chǔ)器通常會(huì)有幾百個(gè)時(shí)鐘周期的延遲。假設(shè)處理器的主頻是1 GHz,訪問主存儲(chǔ)器的通信延遲大約為1 000個(gè)時(shí)鐘周期,在不考慮緩存結(jié)構(gòu)的情況下,通信的延遲時(shí)間為1 μs,因此閥門控制程序的DAG中所有邊的權(quán)值都為1 μs。閥門控制程序的DAG表示如圖5所示。
圖5 閥門控制程序的DAGFig.5 DAG of valve control program
4.1 調(diào)度基本概念
在將一個(gè)由功能塊組成的PLC控制程序轉(zhuǎn)換成DAG后,需要解決的是DAG調(diào)度問題,即給DAG中每個(gè)任務(wù)節(jié)點(diǎn)合理地分配一個(gè)CPU核并且賦予一個(gè)開始時(shí)刻。節(jié)點(diǎn)τi∈T在CPU核p∈P上的開始時(shí)刻記為ts(τi,p),則結(jié)束時(shí)刻可表示為
(1)
其中w(τi,p)是τi在p上的運(yùn)行時(shí)間。
在多核處理器TG=(P,N)上對(duì)有向無環(huán)圖G=(T,V)的調(diào)度S一般可以描述如下:
所有節(jié)點(diǎn)的最晚結(jié)束時(shí)刻為S的調(diào)度長度,即程序的執(zhí)行時(shí)間為
(2)
其中proc(τi)表示分配給τi的CPU核。
當(dāng)一個(gè)節(jié)點(diǎn)的所有輸入邊結(jié)束通信時(shí),該節(jié)點(diǎn)才可以開始在CPU核上執(zhí)行,稱該時(shí)刻為數(shù)據(jù)就緒時(shí)刻(Data Ready Time,DRT)。DRT是一個(gè)節(jié)點(diǎn)可以開始的最早時(shí)刻,可表示為
(3)
其中:tf(vij,proc(τi),p)為邊vij∈V的通信結(jié)束時(shí)間;p為分配給τj的CPU核。
由于只有當(dāng)邊的起點(diǎn)和終點(diǎn)節(jié)點(diǎn)分配在不同CPU核上時(shí),才會(huì)進(jìn)行核間通信,因此DAG中邊vij的結(jié)束時(shí)刻可表示為
(4)
如果τi沒有輸入邊,即τi為源點(diǎn),那么對(duì)所有的p∈P,tdr(τi,p)=0。
對(duì)節(jié)點(diǎn)進(jìn)行調(diào)度通常使用插入技術(shù)[10],使用該技術(shù)需要滿足以下節(jié)點(diǎn)調(diào)度條件:
假定[A,B](A,B∈[0,])是CPU核p上的一個(gè)空閑時(shí)間區(qū)間,則當(dāng)max{A,tdr(τi,p)}+w(τi,p)≤B時(shí),τi可以安排在p上的[A,B]區(qū)間內(nèi)。此時(shí)τi在p上的開始時(shí)刻為
(5)
4.2 靜態(tài)列表調(diào)度算法
一般性的多核任務(wù)分配以及調(diào)度問題已經(jīng)被驗(yàn)證是NP難題[11-12],因此很多文獻(xiàn)研究啟發(fā)式方法,期望得到一個(gè)近似最優(yōu)的結(jié)果。靜態(tài)列表調(diào)度算法[10]具有時(shí)間復(fù)雜度低、實(shí)用性強(qiáng)、易于實(shí)現(xiàn)等特點(diǎn),因此本文采用該方法來優(yōu)化DAG任務(wù)節(jié)點(diǎn)的調(diào)度,具體步驟如下:
算法1:Static_List_Scheduling(G,TG)
輸入:DAGG=(T,V)和拓?fù)鋱DTG=P
輸出:G在TG上的調(diào)度
(1) NodeList←Sort_Nodes(T);
(2) for eachn∈NodeList do
(3)pbest←Select_Processor(n,P);
(4) Schedule_Node(n,pbest);
(5) end
Sort_Nodes()函數(shù)根據(jù)DAG中任務(wù)節(jié)點(diǎn)的依賴關(guān)系來確定所有節(jié)點(diǎn)的優(yōu)先級(jí),并建立調(diào)度列表。因?yàn)槿蝿?wù)節(jié)點(diǎn)的優(yōu)先級(jí)決定了任務(wù)的執(zhí)行先后順序,列表中節(jié)點(diǎn)的次序會(huì)影響調(diào)度結(jié)果。文獻(xiàn)[13]的實(shí)驗(yàn)結(jié)果表明,使用bottom level作為優(yōu)先級(jí)進(jìn)行節(jié)點(diǎn)排序的列表調(diào)度方法優(yōu)于其他方法,因此本文使用的靜態(tài)節(jié)點(diǎn)排序準(zhǔn)則是按照節(jié)點(diǎn)的 bottom level 進(jìn)行降序排列,如果兩個(gè)節(jié)點(diǎn)具有相同的bottom level,那么隨機(jī)排列各節(jié)點(diǎn)。
本文采用computation bottom level[13]方法確定節(jié)點(diǎn)的優(yōu)先級(jí)。節(jié)點(diǎn)的computation bottom level是指從該節(jié)點(diǎn)出發(fā)到任意一個(gè)匯點(diǎn)的只包括節(jié)點(diǎn)權(quán)重的最長路徑的長度。在定義computation bottom level時(shí)不考慮邊的權(quán)重,它可以用式(6)遞歸定義。
(6)
在得到調(diào)度列表之后,Select_Processor()函數(shù)會(huì)結(jié)合插入技術(shù)給DAG中每個(gè)任務(wù)節(jié)點(diǎn)分配一個(gè)合適的CPU核,具體步驟如下:
算法2:Select_Processor(n,P)
輸入:節(jié)點(diǎn)n∈T和CPU核的集合P
輸出:運(yùn)行輸入節(jié)點(diǎn)n的最佳CPU核pbest
(1)tmin←;pmin←NULL
(2) for eachp∈Pdo
(3) iftmin>max{tdr(n,p),tf(p)} then
(4)tmin←max{tdr(n,p),tf(p)};pmin←P
(5) end if
(6)end for
(7)proc(n)←pmin
以閥門控制程序?yàn)槔?使用靜態(tài)列表調(diào)度算法調(diào)度分配DAG到四核處理器上的結(jié)果如圖6所示。
圖6 靜態(tài)列表調(diào)度算法的分配結(jié)果Fig.6 Allocation of static list scheduling algorithm
5.1 變量資源的競爭問題
在控制程序中不同的功能塊經(jīng)常會(huì)對(duì)相同的變量進(jìn)行寫操作,即包含同一個(gè)輸出變量。當(dāng)功能塊被分配到不同的CPU核上時(shí),功能塊的同時(shí)運(yùn)行會(huì)導(dǎo)致變量資源的競爭,降低多核處理器的性能,甚至比單核處理器還要差。為保證程序的正常運(yùn)行和數(shù)據(jù)的完整性,需要使用同步訪問技術(shù),保證變量在任何時(shí)刻,最多有一個(gè)功能塊訪問。
本文采用互斥對(duì)象機(jī)制實(shí)現(xiàn)變量的同步。只有擁有互斥對(duì)象的功能塊才有訪問公共變量的權(quán)限,因?yàn)榛コ鈱?duì)象只有一個(gè),所以能保證公共變量不會(huì)同時(shí)被多個(gè)功能塊訪問。具體的工作機(jī)制如圖7所示。
圖7 互斥對(duì)象機(jī)制Fig.7 Mutex mechanism
本文設(shè)計(jì)了一個(gè)實(shí)驗(yàn)來驗(yàn)證該方法的可行性。實(shí)驗(yàn)中有兩個(gè)主要的功能塊:一個(gè)是向上計(jì)數(shù),另一個(gè)是向下計(jì)數(shù),它們會(huì)對(duì)同一個(gè)公共變量進(jìn)行寫操作。拆分后的兩個(gè)功能塊示意圖如圖8所示,在雙核處理器上的運(yùn)行結(jié)果如圖9所示。從運(yùn)行結(jié)果中可知,向上計(jì)數(shù)和向下計(jì)數(shù)功能塊可以有序無競爭地對(duì)公共變量進(jìn)行寫操作。
5.2 通信延時(shí)問題
多核處理器從主存儲(chǔ)器提取數(shù)據(jù)時(shí),數(shù)據(jù)會(huì)連同其相鄰字節(jié)作為一個(gè)緩存行一起被提取,然后存儲(chǔ)于緩存中。假設(shè)有兩個(gè)獨(dú)立的緩存,在其中一個(gè)緩存中一個(gè)緩存行被寫入,而在另一個(gè)緩存中該緩存行被讀取,那么即使讀寫的地址不相交,也需要在這兩個(gè)緩存之間移動(dòng)該緩存行。擁有這兩個(gè)獨(dú)立緩存的不同CPU核必須在存儲(chǔ)總線上傳遞這個(gè)緩存行,這將會(huì)帶來嚴(yán)重的通信延時(shí)問題。
圖8 拆分后的功能塊Fig.8 Divided function blocks
圖9 雙核處理器上的運(yùn)行結(jié)果Fig.9 Execution result on two-core processor
由于本文研究的硬件平臺(tái)結(jié)構(gòu)是總線共享的同構(gòu)多核處理器,每個(gè)CPU核都擁有獨(dú)立的一級(jí)緩存,功能塊間的通信是使用全局變量的方式。當(dāng)有依賴關(guān)系的功能塊運(yùn)行于不同CPU核時(shí),必然會(huì)引起全局變量的數(shù)據(jù)值在不同的緩存中跳躍,導(dǎo)致系統(tǒng)性能的衰減。
靜態(tài)列表調(diào)度算法會(huì)為每個(gè)任務(wù)節(jié)點(diǎn)選擇能夠提供最早開始時(shí)間的CPU核,考慮了核間通信帶來的延遲時(shí)間,將有依賴關(guān)系的任務(wù)節(jié)點(diǎn)盡量安排在同一個(gè)CPU核上,減少在不同緩存之間的跳躍次數(shù),從而提高系統(tǒng)的性能。
本文設(shè)計(jì)了一個(gè)控制程序來驗(yàn)證靜態(tài)列表調(diào)度算法是否能夠改善通信延時(shí)問題以提高控制程序的執(zhí)行時(shí)間。拆分后的4個(gè)功能塊如圖10所示。
從圖10可以看出,功能塊間通過全局變量sig、IN1和IN2進(jìn)行通信,向上計(jì)數(shù)功能塊2和向下計(jì)數(shù)功能塊依賴于向上計(jì)數(shù)功能塊1,而乘法功能塊又同時(shí)依賴于向上計(jì)數(shù)功能塊2和向下計(jì)數(shù)功能塊。當(dāng)4個(gè)功能塊分別運(yùn)行于4個(gè)CPU核上時(shí),在4個(gè)緩存之間將會(huì)有4次跳躍。根據(jù)靜態(tài)列表調(diào)度算法,向上計(jì)數(shù)功能塊1和向上計(jì)數(shù)功能塊2會(huì)被分配到CPU核0上,而向下計(jì)數(shù)功能塊和乘法功能被分配到CPU核1上,算法只使用了2個(gè)CPU核,在不同緩存之間的跳躍次數(shù)為2,減少了一半。在4個(gè)CPU核和2個(gè)CPU核上分別運(yùn)行這個(gè)控制程序1 000次,實(shí)驗(yàn)結(jié)果顯示,分配在4個(gè)CPU核上的平均執(zhí)行時(shí)間為114.571 μs,而使用靜態(tài)列表調(diào)度算法分配在兩個(gè)CPU核上的平均執(zhí)行時(shí)間為57.976 μs。
圖10 通信實(shí)驗(yàn)時(shí)拆分后的功能塊Fig.10 Divided function blocks of communication experiment
6.1 概述
為了評(píng)估本文方法的可行性和性能表現(xiàn),采用C和C++語言編寫代碼實(shí)現(xiàn)PLC控制程序的拆分,功能塊圖與DAG的轉(zhuǎn)換以及靜態(tài)列表調(diào)度算法,并且以閥門控制程序?yàn)閷?shí)驗(yàn)實(shí)例,將控制程序并行運(yùn)行在多核處理器上。
6.2 硬件平臺(tái)的選擇
本文使用的硬件平臺(tái)是英特爾的酷睿4核處理器,滿足本文所提出的硬件平臺(tái)模型的所有要求。該平臺(tái)使用虛擬機(jī)運(yùn)行64位版本的Ubuntu12.04 LTS操作系統(tǒng)(內(nèi)核版本號(hào)為3.6.11)與RT-Preempt補(bǔ)丁(版本號(hào)為3.6.11.9)。在Linux系統(tǒng)內(nèi)核的基礎(chǔ)上,加上RT-Preempt補(bǔ)丁,是為了讓Linux系統(tǒng)滿足硬實(shí)時(shí)的需求。
6.3 靜態(tài)列表調(diào)度實(shí)驗(yàn)及結(jié)果
將閥門控制程序串行運(yùn)行在1個(gè)CPU核上作為參考,并且采用4個(gè)參數(shù)進(jìn)行分析:平均執(zhí)行時(shí)間(Mean)、最壞執(zhí)行時(shí)間(Worst)、最好執(zhí)行時(shí)間(Best)和標(biāo)準(zhǔn)差(Std)。為了排除實(shí)驗(yàn)的偶然性和隨機(jī)性,采集100個(gè)實(shí)驗(yàn)數(shù)據(jù)。閥門控制程序在1個(gè)CPU核(1C)、2個(gè)CPU核(2C(L))、4個(gè)CPU核(4C(L))上運(yùn)行的結(jié)果如表3所示。
表3 PLC控制程序執(zhí)行時(shí)間Table 3 Execution time of PLC control program
從表3可知,靜態(tài)列表調(diào)度算法根據(jù)CPU核的集合不同給出了不同的調(diào)度結(jié)果。此方法確實(shí)有效地縮短了PLC控制程序整體的執(zhí)行時(shí)間,其中程序在4個(gè)CPU核上并行運(yùn)行的結(jié)果要優(yōu)于2個(gè)CPU核,運(yùn)行時(shí)間分別減少到原來的64.5%和68.5%。
6.4 控制程序并行執(zhí)行方法比較
文獻(xiàn)[14]從應(yīng)用層面提出了一種使PLC串行程序并行化的軟件方法。該方法是將一個(gè)完整的PLC控制程序作為一個(gè)任務(wù)分配到CPU核上執(zhí)行,控制程序中的功能塊是串行執(zhí)行的,實(shí)現(xiàn)的是控制應(yīng)用的并行,而本文提出的方法實(shí)現(xiàn)了功能塊間的并行,縮短執(zhí)行時(shí)間的效果更加顯著。文獻(xiàn)[15]雖然從功能塊層面對(duì)并行化方法進(jìn)行了研究和驗(yàn)證,但是此文針對(duì)的是獨(dú)立任務(wù),只有控制程序中數(shù)據(jù)獨(dú)立的功能塊才可以在不同核上并行運(yùn)行,而本文通過構(gòu)建DAG任務(wù)模型和靜態(tài)列表調(diào)度算法可以實(shí)現(xiàn)有依賴關(guān)系的功能塊并行執(zhí)行于不同的CPU核上,使控制程序較均勻地分配到各個(gè)CPU核上,解決了負(fù)載均衡問題。文獻(xiàn)[16]提出了一種將控制程序流水線化的方法,通過流水線式地計(jì)算和傳遞數(shù)據(jù)使得程序的掃描周期縮減,此方法充分考慮了功能塊的數(shù)據(jù)依賴關(guān)系,也解決了多核處理器的負(fù)載均衡問題,但是沒有減少反而增加了PLC控制程序整體的運(yùn)行時(shí)間。
本文根據(jù)功能塊圖的特性,將DAG模型和靜態(tài)列表調(diào)度算法運(yùn)用到PLC控制程序在多核處理器上并行執(zhí)行中,并對(duì)PLC控制程序并行運(yùn)行時(shí)會(huì)遇到的通信延時(shí)和變量資源的競爭問題進(jìn)行了分析并提出有效的解決方法。 實(shí)驗(yàn)結(jié)果表明,此方法有效地將PLC控制程序并行運(yùn)行在多核處理器上,大大縮短了程序的執(zhí)行時(shí)間。本文的工作雖然是針對(duì)具有共享總線的緩存結(jié)構(gòu)的同構(gòu)多核處理器與用功能塊圖編寫的PLC控制程序設(shè)計(jì)的,但也對(duì)其他PLC控制程序模型并行運(yùn)行在其他結(jié)構(gòu)的多核處理器上具有一定的指導(dǎo)作用。
[1] DONG Yulin,ZHENG Chunjiao.Design and research of embedded PLC development system[C]//2011 3rd International Conference on IEEE Computer Research and Deve-lopment (ICCRD).Shanghai:IEEE,2011:226-228.
[2] ICHIKAWA S,AKINAKA M,HATA H.An FPGA implementation of hard-wired sequence control system based on PLC software[J].IEEE Transactions on Electrical and Electronic Engineering,2011,6(4):367-375.
[3] DU Daoshan,LIU Yadong,GUO Xingu,etal.Study on LD-VHDL conversion for FPGA-based PLC implementation[J].The International Journal of Advanced Manufacturing Technology,2009,40(11/12):1181-1190.
[4] 羅奎.梯形圖并行編譯研究及其在FPGA上的實(shí)現(xiàn)[D].杭州:杭州電子科技大學(xué),2014.
[5] VAN DER WAL E.Introduction into IEC 1131-3 and PLC open[C]//The Application of IEC 61131 to Industrial Control:Improve Your Bottom Line Through High Value Industrial Control Systems (Ref.No.1999/076),IEE Colloquium on IET.London:IET,1999:2/1-2/8.
[6] 趙營.PLC并行依賴關(guān)系分解的研究[D].杭州:杭州電子科技大學(xué),2011.
[7] 楊磊,徐蓉萍.IEC 61499-工業(yè)控制技術(shù)發(fā)展的新階段[J].計(jì)算機(jī)測量與控制,2002,10(11):721-725.
[8] ORIOL M,WAHLER M,STEIGER R,etal.FASA:A scalable software framework for distributed control systems[C]//Proceedings of the 3rd International ACM SIGSOFT Symposium on Architecting Critical Systems.USA:A cm,2012:51-60.
[9] SENTILLES S,VULGARAKIS A,BURET,etal.A component model for control-intensive distributed embedded systems[M]//Component-Based Software Engineering.Berlin Heidelberg:Springer,2008:310-317.
[10] SINNEN O.Task Scheduling for Parallel Systems[M].USA:John Wiley & Sons,2007.
[11] SARARKAR V.Partitioning and Scheduling Parallel Programs for Multiprocessors[M].USA:MIT Press,1989.
[12] GAREY M R,JOHNSON D S.Computers and Intractability:A Guide to the Theory of NP-Completeness [M].San Francisco:W.H.Freeman & Co Ltd,1979.
[13] SINNEN O,SOUSA L.List scheduling:Extension for contention awareness and evaluation of node priorities for heterogeneous cluster architectures[J].Parallel Computing,2004,30(1):81-101.
[14] VULGARAKIS A,SHOOJA R,MONOT A,etal.Task synthesis for control applications on multicore platforms[C]//2014 11th International Conference on Information Technology:New Generations (ITNG).Las Vegas:IEEE,2014:229-234.
[15] CANEDO A,AL-FARUQUE M A.Towards parallel execution of IEC 61131 industrial cyber-physical systems applications[C]//Design,Automation & Test in Europe Conference & Exhibition (DATE).Dresden :IEEE,2012:554-557.
[16] CANEDO A,LUDWIG H,FARUQUE A,etal.High communication throughput and low scan cycle time with multi/many-core programmable logic controllers[J].Embedded Systems Letters,2014,6(2):21-24.
Parallel Execution of PLC Control Program Based on Multi-Core Processor
WANG Hui-feng, GAN Ling-jian
(Key Laboratory of Advanced Control and Optimization for Chemical Process, Ministry of Education,East China University of Science and Technology, Shanghai 200237, China)
The programming language for PLC does not support parallel compiling so that the control program cannot run in parallel on multi-core processor.By means of the feature that Functional Block Diagram can be split,a method is proposed in this work,which uses DAG task model to represent the PLC control program to solve this problem.Moreover,static list scheduling algorithm is used to deploy the tasks in DAG for different CPU cores and handle with the problem of communication delay when PLC control program is executing in parallel.Besides,this paper proposes a mutex-based method to resolve the variable resources competition.Experimental results show that these methods succeed in making PLC control program run in parallel and reduce the execution time of the program.
multi-core processor; parallel execution; directed acyclic graph; PLC control program; static list scheduling algorithm
1006-3080(2016)06-0820-07
10.14135/j.cnki.1006-3080.2016.06.012
2015-12-22
王慧鋒(1969-),女,哈爾濱人,教授,博士,研究方向?yàn)闄z測技術(shù)與自動(dòng)化裝置。
干玲劍,E-mail:ganlu2@126.com
TP314
A