王 兵,江海凡,丁國(guó)富
(西南交通大學(xué)機(jī)械工程學(xué)院,成都 610031)
隨著產(chǎn)品更新?lián)Q代周期日益縮短以及產(chǎn)品復(fù)雜程度的不斷增加,柔性制造系統(tǒng)(Flexible manufacturing system,F(xiàn)MS)[1]需要滿足更多、更高的要求,例如更短的設(shè)計(jì)周期、更低的建造成本、更低的調(diào)試風(fēng)險(xiǎn)等。虛擬調(diào)試(Virtual commissioning,VC)[2]通過仿真技術(shù)在虛擬環(huán)境中對(duì)系統(tǒng)運(yùn)行邏輯進(jìn)行測(cè)試,減輕了實(shí)機(jī)調(diào)試的負(fù)擔(dān),可有效解決上述問題。
虛擬調(diào)試通過執(zhí)行涉及系統(tǒng)虛擬模型與實(shí)際控制器的仿真對(duì)系統(tǒng)進(jìn)行驗(yàn)證[2],因此關(guān)于虛擬調(diào)試的研究多集中在虛擬模型的構(gòu)建方面,其中又以邏輯模型方面的研究最為突出。
離散事件系統(tǒng)規(guī)范(Discrete event system specification,DEVS)是一種模塊化、層次化的形式化機(jī)制[3],對(duì)于復(fù)雜邏輯的描述具有較大的優(yōu)勢(shì),被廣泛應(yīng)用于虛擬調(diào)試的邏輯模型構(gòu)建中。利用DEVS構(gòu)建邏輯模型主要有3種形式:第1種是利用DEVS的原型構(gòu)建設(shè)備邏輯模型[4],主要適用于不考慮設(shè)備交互情況下的行為邏輯描述;第2種是將DEVS原型作為三階建模框架(Three-phase modelling framework)中各階模型的構(gòu)建方法[5–6],通過多種模型的組合描述設(shè)備行為邏輯與交互邏輯;第3種是在第2種的基礎(chǔ)上,根據(jù)可編程邏輯控制器(Programmable logic controller,PLC)的控制機(jī)制簡(jiǎn)化模型組合并擴(kuò)展DEVS原子模型[7],其目的是使邏輯模型能夠完整地描述實(shí)際的控制機(jī)制。
綜上所述,目前對(duì)于虛擬調(diào)試的研究主要集中在邏輯模型的構(gòu)建方法方面,而從系統(tǒng)整體上考慮虛擬調(diào)試的實(shí)現(xiàn),并快速設(shè)計(jì)系統(tǒng)控制方案則需要進(jìn)一步的研究。鑒于此,本文提出一種基于可試驗(yàn)數(shù)字孿生體(Experimentable digital twin,EDT)[8]的虛擬調(diào)試架構(gòu)。EDT是數(shù)字孿生技術(shù)與仿真技術(shù)的結(jié)合,在運(yùn)行階段無需考慮物理系統(tǒng),通過對(duì)其數(shù)字孿生體的重復(fù)測(cè)試與試驗(yàn)驗(yàn)證系統(tǒng)的功能與性能[9]。所提的架構(gòu)從設(shè)備層、單元層與系統(tǒng)層3層構(gòu)建FMS的數(shù)字孿生體,重點(diǎn)闡述邏輯建模方法與過程,提出基于邏輯模型實(shí)現(xiàn)PLC程序快速設(shè)計(jì)的方法,并進(jìn)行實(shí)例驗(yàn)證。
如圖1所示,基于EDT的FMS虛擬調(diào)試架構(gòu)包括物理系統(tǒng)與虛擬系統(tǒng)兩部分。
物理系統(tǒng)由硬件設(shè)備與軟件系統(tǒng)組成,軟件與硬件之間自上而下傳遞控制信息,實(shí)現(xiàn)遞階控制過程。系統(tǒng)層與單元層之間用Kafka作為消息中間件實(shí)現(xiàn)生產(chǎn)指令的調(diào)用與執(zhí)行反饋;單元層與設(shè)備層之間用Redis作為實(shí)時(shí)數(shù)據(jù)庫(kù)實(shí)現(xiàn)控制變量的寫入與設(shè)備狀態(tài)的讀取。
虛擬系統(tǒng)由虛擬模型與驅(qū)動(dòng)引擎組成。設(shè)備層的模型是對(duì)物理設(shè)備幾何、運(yùn)動(dòng)、邏輯3個(gè)維度的映射;單元層、系統(tǒng)層的模型是對(duì)各層運(yùn)行控制邏輯的映射,各層模型之間通過邏輯模型自上而下傳遞控制信息,自下而上傳遞執(zhí)行反饋信息。驅(qū)動(dòng)引擎用于支撐虛擬模型的構(gòu)建與仿真,包括圖形引擎(支撐幾何模型的構(gòu)建與實(shí)時(shí)渲染)與仿真引擎(支撐邏輯模型的構(gòu)建與仿真)。
虛擬調(diào)試的實(shí)現(xiàn)分為兩部分:(1)利用驅(qū)動(dòng)引擎與各層模型之間的輸入、反饋關(guān)系實(shí)現(xiàn)虛擬系統(tǒng)的仿真運(yùn)行; (2)將物理系統(tǒng)運(yùn)行過程中調(diào)用的Kafka指令同步到單元層模型,或?qū)edis中的控制變量同步到設(shè)備層模型,利用驅(qū)動(dòng)引擎實(shí)現(xiàn)虛擬系統(tǒng)的仿真運(yùn)行。
綜上所述,邏輯模型是實(shí)現(xiàn)FMS數(shù)字孿生體仿真的核心,因此邏輯建模是實(shí)現(xiàn)基于EDT的FMS虛擬調(diào)試架構(gòu)的一項(xiàng)關(guān)鍵技術(shù)。此外,虛擬調(diào)試的最終要求是設(shè)計(jì)系統(tǒng)的控制方案,因此基于邏輯模型實(shí)現(xiàn)PLC程序的設(shè)計(jì)是另一關(guān)鍵技術(shù)。
由于DEVS原子模型無法完整描述系統(tǒng)運(yùn)行控制過程,文獻(xiàn)[7]將其輸出函數(shù)擴(kuò)展后得到一個(gè)九元組:
其中λa、λd和λm是由λ擴(kuò)展后的輸出函數(shù),分別表示到達(dá)特定狀態(tài)時(shí)的輸出、偏離特定狀態(tài)時(shí)的輸出和經(jīng)過特定時(shí)間時(shí)的輸出,且擴(kuò)展后的模型允許外部轉(zhuǎn)換函數(shù)δext以多個(gè)輸入事件作為函數(shù)輸入。與原始原子模型相比,其優(yōu)點(diǎn)體現(xiàn)在3個(gè)方面:(1)具有一對(duì)多的輸出關(guān)系,即在一個(gè)狀態(tài)轉(zhuǎn)移中允許輸出事件集Y中多個(gè)元素的更改,不再局限于一對(duì)一、多對(duì)一的輸出關(guān)系。(2)只要發(fā)生狀態(tài)轉(zhuǎn)移,就允許觸發(fā)輸出函數(shù),保證系統(tǒng)中所有的狀態(tài)變化能被通知。(3)外部轉(zhuǎn)換函數(shù)δext中的輸入事件既可以是輸入事件集X中的某個(gè)事件,又可以是多個(gè)事件的組合,通過組合結(jié)果和當(dāng)前狀態(tài)決策函數(shù)輸出。
上述擴(kuò)展形式可以描述與狀態(tài)變化、時(shí)間相關(guān)的輸出,但是實(shí)際情況中還存在與頻數(shù)相關(guān)的輸出,如傳送帶上工件到達(dá)指定數(shù)量時(shí)傳送帶停止,機(jī)器人開始抓取工件,因此本文在上述DEVS原子模型擴(kuò)展形式的基礎(chǔ)上將其再次擴(kuò)展為一個(gè)十元組:
E_FMS=<X,Y,S,δint,δext,λa,λd,λm,λc,ta>
再次擴(kuò)展后的模型增加了一個(gè)輸出函數(shù)λc,表示事件或狀態(tài)出現(xiàn)一定次數(shù)時(shí)的輸出,具體描述為:
λc(Flag,StateOrEvent,Count)=Out
其中Flag表示函數(shù)是否執(zhí)行的標(biāo)志,該函數(shù)可能只在特定條件下存在;StateOrEvent表示需記錄出現(xiàn)次數(shù)的狀態(tài)或事件;Count表示觸發(fā)函數(shù)時(shí)StateOrEvent需出現(xiàn)的次數(shù),取值范圍為[0,+∞);Out表示函數(shù)的輸出結(jié)果。文獻(xiàn)[7]中的擴(kuò)展形式雖然定義了輸出函數(shù)λm,但是并未給出函數(shù)的具體形式,參考λc的形式可將其描述如下:
圖1 基于EDT的虛擬調(diào)試架構(gòu)Fig.1 Virtual commissioning architecture based on EDT
其中Flag、StateOrEvent、Out與λc中含義相同,Time表示觸發(fā)函數(shù)時(shí)StateOrEvent需持續(xù)的時(shí)間,取值范圍為[0,+∞)。
文獻(xiàn)[7]中的擴(kuò)展形式允許多個(gè)輸入事件的組合作為外部轉(zhuǎn)移函數(shù)δext的輸入,輸入的判斷依據(jù)是輸入事件的值(如“0”、“1”),但是在某些情況中以輸入事件的值是否變化作為輸入判斷依據(jù),如工件在傳送帶上運(yùn)行過程中,通過光電傳感器時(shí)不斷產(chǎn)生電脈沖信號(hào)(低電平變?yōu)楦唠娖交蚋唠娖阶優(yōu)榈碗娖剑?,根?jù)電脈沖信號(hào)的次數(shù)記錄工件數(shù)量。因此本文擴(kuò)展了δext中輸入的表示方式,利用x*描述上述情況,例如“x*==1”表示輸入事件x的值由“0”變?yōu)椤?”,“x*==0”表示輸入事件x的值由“1”變?yōu)椤?”。
FMS邏輯模型的構(gòu)建是自底向上的過程,由下層邏輯構(gòu)建上層邏輯,其流程如圖2所示。
本文將FMS各層邏輯模型分為控制模型與輸出模型??刂颇P陀糜诿枋龈黝悅鞲行畔⑤斎胂到y(tǒng)時(shí)如何決策出控制系統(tǒng)行為的信號(hào);輸出模型則描述了控制模型輸出的信號(hào)與執(zhí)行器行為的聯(lián)系。如圖2所示,設(shè)備層中的控制模型、輸出模型分別為設(shè)備控制模型與設(shè)備部件模型,設(shè)備部件模型根據(jù)設(shè)備中的運(yùn)動(dòng)部件構(gòu)建,設(shè)備控制模型則根據(jù)設(shè)備命令執(zhí)行過程中部件動(dòng)作順序構(gòu)建,每條設(shè)備命令構(gòu)建一個(gè)設(shè)備控制模型;單元層的控制模型、輸出模型分別為單元控制模型與單元設(shè)備模型,單元設(shè)備模型由設(shè)備控制模型與設(shè)備輸出模型耦合得到,單元控制模型則與單元指令對(duì)應(yīng);同理,系統(tǒng)層的控制模型、輸出模型分別為系統(tǒng)層控制模型與系統(tǒng)層單元模型,構(gòu)建方法與單元層的控制模型、輸出模型類似。
圖2 FMS多層邏輯建模流程Fig.2 Process of multi-layer logic modeling for FMS
PLC是目前最適用和應(yīng)用最廣泛的工業(yè)控制技術(shù)[2],PLC產(chǎn)品基本上都符合IEC61131–3國(guó)際標(biāo)準(zhǔn),該標(biāo)準(zhǔn)中規(guī)定了梯形圖、功能塊圖、語句表、結(jié)構(gòu)文本與順序功能圖5種編程語言。梯形圖由于表達(dá)直觀而被廣泛使用,其與邏輯模型之間的對(duì)應(yīng)關(guān)系如圖3所示。
順序控制設(shè)計(jì)法是PLC編程常用的方法,這種設(shè)計(jì)方法的本質(zhì)是用輸入量I控制代表各步的編程元件(例如存儲(chǔ)器位M),再用它們控制輸出量Q,步是根據(jù)輸出量Q的狀態(tài)劃分的[10]。因此基于邏輯模型實(shí)現(xiàn)PLC程序設(shè)計(jì)可分為兩部分:(1)位地址的映射,將邏輯模型中的各集合映射到PLC中的存儲(chǔ)單元,并為集合中的元素分配地址;(2)程序段的映射,將邏輯模型狀態(tài)轉(zhuǎn)移過程中的各元素映射為不同的指令,組成各PLC程序段。
圖3 邏輯模型與PLC程序的對(duì)應(yīng)關(guān)系Fig.3 Correspondence between logic model and PLC program
表1 PLC存儲(chǔ)區(qū)映射規(guī)則Table 1 Mapping rules of storage area for PLC
S7系列PLC的存儲(chǔ)區(qū)包括輸入映像存儲(chǔ)區(qū)(I)、輸出映像存儲(chǔ)區(qū)(Q)、位存儲(chǔ)器(M)、外部輸入寄存器(PI)、外部輸出寄存器(PQ)、定時(shí)器(T)、計(jì)數(shù)器(C)、數(shù)據(jù)塊寄存器(DB)與本地?cái)?shù)據(jù)寄存器(L)[11],如表1所示,本文主要實(shí)現(xiàn)了輸入映像存儲(chǔ)區(qū)、輸出映像存儲(chǔ)區(qū)與位存儲(chǔ)器的映射。
PLC程序中控制程序段的輸入、輸出信號(hào)為程序中的輸入信號(hào)與中間控制信號(hào),而控制模型輸入事件集XC、輸出事件集YC表示邏輯模型的輸入與中間結(jié)果,因此可以分別映射到PLC的輸入映像存儲(chǔ)區(qū)與位存儲(chǔ)器,如果控制模型的輸出事件集YC與輸出模型的輸入事件集XO不是完全一對(duì)一的關(guān)系,則需要對(duì)輸出模型的輸入事件集XO單獨(dú)映射;控制模型中只存在外部狀態(tài)轉(zhuǎn)移,狀態(tài)既作為函數(shù)的輸入又作為函數(shù)的輸出,在模型內(nèi)部變化,因此可將其集合SC映射到PLC的位存儲(chǔ)器。輸出程序段的輸出信號(hào)是程序的最終輸出信號(hào),表示任務(wù)執(zhí)行的啟動(dòng)信號(hào),一般直接通過輸入信號(hào)(即控制程序段的輸出信號(hào))控制,在輸出模型中輸入事件驅(qū)動(dòng)模型產(chǎn)生外部狀態(tài)轉(zhuǎn)移,進(jìn)而由內(nèi)部狀態(tài)轉(zhuǎn)移表示任務(wù)執(zhí)行過程,因此可將其狀態(tài)集SO中表示內(nèi)部狀態(tài)轉(zhuǎn)移前的狀態(tài)映射到PLC的輸出映像存儲(chǔ)區(qū)。
控制模型由輸入事件觸發(fā)外部狀態(tài)轉(zhuǎn)移,進(jìn)一步由狀態(tài)轉(zhuǎn)移觸發(fā)輸出函數(shù)產(chǎn)生輸出事件,根據(jù)圖3中的對(duì)應(yīng)關(guān)系可通過控制模型的外部狀態(tài)轉(zhuǎn)移過程實(shí)現(xiàn)控制程序段的設(shè)計(jì)。如圖4所示,函數(shù)δext中轉(zhuǎn)移前的狀態(tài)映射為常開觸點(diǎn)指令,輸入事件根據(jù)表示形式與事件值映射為不同的指令,表示形式“x”根據(jù)事件值“0”或“1”映射為常開觸點(diǎn)指令或常閉觸點(diǎn)指令,表示形式“x*”根據(jù)事件值“0”或“1”映射為觸點(diǎn)負(fù)跳沿檢測(cè)指令或觸點(diǎn)正跳沿檢測(cè)指令,上述指令作為程序段輸入根據(jù)組合關(guān)系“&” 或“||”按順序串聯(lián)或并聯(lián)連接;轉(zhuǎn)移前后的狀態(tài)分別映射為復(fù)位指令與置位指令,轉(zhuǎn)移過程中的輸出事件根據(jù)事件值“0”或“1”映射為復(fù)位指令或置位指令,如果控制模型的輸出事件與輸出模型的輸入事件是一對(duì)多的關(guān)系,則需根據(jù)控制模型的輸出事件將輸出模型對(duì)應(yīng)的輸入事件映射為相同的指令,上述指令全部作為控制程序段的輸出。
輸出模型由輸入事件觸發(fā)外部狀態(tài)轉(zhuǎn)移,進(jìn)一步由內(nèi)部狀態(tài)轉(zhuǎn)移表示執(zhí)行過程,根據(jù)圖3中的對(duì)應(yīng)關(guān)系可通過輸出模型的外部狀態(tài)轉(zhuǎn)移過程實(shí)現(xiàn)輸出程序段的設(shè)計(jì)。如圖5所示,輸入事件將事件值“0”或“1”映射為常開觸點(diǎn)指令或常閉觸點(diǎn)指令,轉(zhuǎn)移后的狀態(tài)(一般為表示過程開始的狀態(tài))映射為輸出線圈,上述指令分別作為程序段的輸入與輸出。
輸出函數(shù)λm和λc分別可映射為PLC中的定時(shí)器指令與計(jì)數(shù)器指令。如圖6(a)所示,輸出函數(shù)λm的輸入StateOrEvent映射為常開觸點(diǎn)指令連接到定時(shí)器的置位信號(hào)端(S),Time映射為定時(shí)器時(shí)間值輸入端(PV)的時(shí)間值,輸出結(jié)果Out映射為輸出線圈連接到定時(shí)器輸出值端(Q)。
圖4 控制程序段的映射Fig.4 Mapping for control program segment
圖5 輸出程序段的映射Fig.5 Mapping for output program segment
如圖6(b)所示,輸出函數(shù)λc的輸入StateOrEvent映射為常開觸點(diǎn)指令連接到減計(jì)數(shù)器輸入端(CD),Count映射為計(jì)數(shù)器初值輸入端(PV)的計(jì)數(shù)初值,輸出結(jié)果Out映射為輸出線圈連接到計(jì)數(shù)器狀態(tài)輸出端(Q)。
圖7所示為基于本文所提架構(gòu)的某FMS虛擬調(diào)試實(shí)現(xiàn)與驗(yàn)證框架。該FMS由3個(gè)加工單元、1個(gè)倉(cāng)儲(chǔ)單元與1個(gè)物流單元組成,加工單元包括雕刻設(shè)備(雕刻機(jī))與上下料設(shè)備(氣動(dòng)夾臂、工業(yè)機(jī)器人),倉(cāng)儲(chǔ)單元包括堆垛機(jī)與立體倉(cāng)庫(kù),物流單元主要指?jìng)魉蛶В蓾L筒線、出貨臺(tái)、入貨臺(tái)、轉(zhuǎn)角機(jī)等組成。
圖6 特殊指令的映射Fig.6 Mapping for special instruction
如圖7底部所示,物理系統(tǒng)由硬件設(shè)備與軟件系統(tǒng)(如MES、SCADA等)組成。在物理系統(tǒng)運(yùn)行過程中,MES通過Kafka將生產(chǎn)指令發(fā)送至SCADA,SCADA對(duì)生產(chǎn)指令進(jìn)行解析,將控制變量寫入Redis。設(shè)備根據(jù)Redis中的變量值觸發(fā)相應(yīng)的控制程序,驅(qū)動(dòng)設(shè)備執(zhí)行相應(yīng)的動(dòng)作。
如圖7頂部所示,虛擬系統(tǒng)通過對(duì)上述控制信息傳遞過程的映射,自底向上逐層構(gòu)建設(shè)備、單元、系統(tǒng)的邏輯模型(包括控制模型與輸出模型)。其中,設(shè)備邏輯模型作為單元輸出模型參與單元邏輯模型的構(gòu)建,單元邏輯模型作為系統(tǒng)輸出模型參與系統(tǒng)邏輯模型的構(gòu)建。在虛擬系統(tǒng)運(yùn)行過程中,根據(jù)各層邏輯模型中控制模型與輸出模型的耦合關(guān)系自上而下運(yùn)行模型,再通過設(shè)備邏輯模型驅(qū)動(dòng)設(shè)備三維模型運(yùn)行;通過觀察、分析三維模型運(yùn)行情況,反復(fù)修改、驗(yàn)證各層邏輯模型。最后,利用所提的映射規(guī)則,根據(jù)邏輯模型設(shè)計(jì)PLC程序,利用編程軟件編寫、調(diào)試后下發(fā)到物理系統(tǒng),完成最終的調(diào)試驗(yàn)證。
基于EDT的虛擬調(diào)試包括以下兩種方式:一種是在純虛擬環(huán)境下,針對(duì)某一層的邏輯模型,模擬模型的輸入,再通過仿真引擎驅(qū)動(dòng)邏輯模型,實(shí)現(xiàn)虛擬系統(tǒng)的運(yùn)行;另一種是在半實(shí)物環(huán)境下,結(jié)合物理系統(tǒng)的運(yùn)行過程,通過Kafka與Redis提供的API在虛擬系統(tǒng)中調(diào)用生產(chǎn)指令或讀取控制變量,將生產(chǎn)指令或控制變量解析處理后,分別作為單元邏輯模型與設(shè)備邏輯模型的輸入驅(qū)動(dòng)虛擬系統(tǒng)運(yùn)行,實(shí)現(xiàn)對(duì)系統(tǒng)不同層次控制方案的調(diào)試驗(yàn)證。
虛擬系統(tǒng)與物理系統(tǒng)實(shí)現(xiàn)逐層控制的本質(zhì)是相同的,都是自上而下不斷地分解輸出,物理系統(tǒng)的輸出通過解析處理后可用于控制虛擬系統(tǒng),反之同樣可行。虛擬系統(tǒng)系統(tǒng)層和單元層產(chǎn)生的輸出可利用API分別傳入Kafka與Redis中,物理系統(tǒng)從中可調(diào)用該輸出,對(duì)其解析處理后可用于物理系統(tǒng)的運(yùn)行控制,對(duì)于實(shí)現(xiàn)以虛控實(shí)以及基于數(shù)字孿生的車間裝備智能控制具有一定的參考意義。
為進(jìn)一步驗(yàn)證所提架構(gòu)中的關(guān)鍵技術(shù),結(jié)合圖7中的FMS對(duì)其進(jìn)行描述,圖8所示為以氣動(dòng)夾臂為例構(gòu)建的設(shè)備邏輯模型,圖9所示為加工單元邏輯模型。
圖7 某FMS的虛擬調(diào)試實(shí)現(xiàn)與驗(yàn)證框架Fig.7 Implementation and verification framework of virtual commissioning for FMS
設(shè)備邏輯模型中的輸出模型根據(jù)設(shè)備中運(yùn)動(dòng)部件構(gòu)建,通過部件運(yùn)動(dòng)確定模型的輸入輸出,控制模型則根據(jù)設(shè)備需執(zhí)行的命令構(gòu)建,不同的命令用不同的控制模型表示,圖8(d)所示為其中一個(gè)控制模型。單元邏輯模型的輸出模型根據(jù)單元中的設(shè)備構(gòu)建,如圖9所示的氣動(dòng)夾臂與雕刻機(jī)可分別構(gòu)建輸出模型,該模型可通過對(duì)設(shè)備邏輯模型的簡(jiǎn)化等價(jià)來構(gòu)建,圖9(a)所示的模型即為圖8所示模型的等價(jià)模型。
圖8 設(shè)備邏輯模型Fig.8 Logic model of device
圖9 加工單元邏輯模型Fig.9 Logic model of manufacturing unit
在本文的案例中,倉(cāng)儲(chǔ)單元與加工單元的運(yùn)行過程都是連續(xù)的,即單元開始執(zhí)行任務(wù)時(shí)各設(shè)備按順序依次執(zhí)行設(shè)備命令,而物流單元的運(yùn)行需要與倉(cāng)儲(chǔ)單元、加工單元不斷交互,其過程是不連續(xù)的,因此其邏輯模型有所不同,如圖10所示。
物流單元由于需要與倉(cāng)儲(chǔ)單元、加工單元不斷交互,因此其控制模型的輸入需要考慮其他單元的運(yùn)行結(jié)果,如圖10(c)中的DL_Transport1表示倉(cāng)儲(chǔ)單元執(zhí)行結(jié)束時(shí)的輸出,DL_Transport2、DL_Transport3與DL_Transport4則分別表示3個(gè)加工單元執(zhí)行結(jié)束時(shí)的輸出。此外,物流單元的運(yùn)行通過出貨臺(tái)、入貨臺(tái)以及不同的轉(zhuǎn)角機(jī)與滾筒線的聯(lián)動(dòng)實(shí)現(xiàn),因此控制模型的輸出可同時(shí)作為不同輸出模型的輸入,即存在一對(duì)多的耦合關(guān)系,如圖10(c)中的彩色箭頭所示。
邏輯模型可以清晰地描述系統(tǒng)的控制決策與執(zhí)行過程,是實(shí)現(xiàn)系統(tǒng)基于狀態(tài)的虛實(shí)同步以及以虛控實(shí)的重要基礎(chǔ)。邏輯模型的構(gòu)建與驗(yàn)證通過仿真引擎實(shí)現(xiàn),本文采用DEVS++程序庫(kù)[12]作為該仿真引擎,通過對(duì)其二次開發(fā)實(shí)現(xiàn)本文提出的DEVS擴(kuò)展形式。DEVS++是以C++語言編寫的開源程序庫(kù),庫(kù)中只包含頭文件與源文件,因此可直接通過編程軟件對(duì)其進(jìn)行二次開發(fā),本文采用Visual Studio 2012作為二次開發(fā)工具。
二次開發(fā)的內(nèi)容分為兩部分:一是實(shí)現(xiàn)模型形式的擴(kuò)展,通過改寫Atomic類中的函數(shù)delta_x(),允許外部轉(zhuǎn)移函數(shù)輸入可為多個(gè)輸入事件組合的情況,以及以輸入事件值的變化作為輸入的情況,新增函數(shù)delta_y_arrival()、delta_y_departure()、delta_y_timed()與delta_y_counted()實(shí)現(xiàn)多種輸出;二是實(shí)現(xiàn)模型的構(gòu)建,通過繼承Atomic類并在派生類中重寫上述函數(shù)以實(shí)現(xiàn)模型功能。二次開發(fā)的流程如圖11所示,根據(jù)實(shí)例中的模型設(shè)計(jì)開發(fā)調(diào)試界面,其運(yùn)行結(jié)果如圖12所示。
圖10 物流單元邏輯模型Fig.10 Logic model of logistic unit
限于篇幅,本文以圖8所示的邏輯模型為例演示基于邏輯模型的PLC程序設(shè)計(jì)過程,首先利用表1中的存儲(chǔ)區(qū)映射規(guī)則實(shí)現(xiàn)關(guān)鍵位地址的映射,建立符號(hào)表。然后利用本文提出的程序段映射規(guī)則設(shè)計(jì)氣動(dòng)夾臂的控制程序段與輸出程序段,將程序段按順序排列構(gòu)建完整的PLC程序。通過STEP7編程軟件編寫PLC程序,并利用S7–PLCSIM仿真,結(jié)果證明達(dá)到了預(yù)期的控制效果,如圖13(a)所示,PLC代碼如圖13(b)所示。邏輯模型相比PLC程序具有規(guī)范性強(qiáng)、可重用性高等特點(diǎn),其構(gòu)建過程消耗的時(shí)間較短,修改調(diào)整過程簡(jiǎn)單,因此通過映射規(guī)則設(shè)計(jì)PLC程序可比直接設(shè)計(jì)節(jié)省大量時(shí)間。
針對(duì)缺乏從系統(tǒng)整體上考慮虛擬調(diào)試的實(shí)現(xiàn)以及實(shí)現(xiàn)系統(tǒng)控制方案設(shè)計(jì)等問題,本文提出一種基于EDT的FMS虛擬調(diào)試架構(gòu),根據(jù)其兩項(xiàng)關(guān)鍵技術(shù)主要做了以下工作:
(1)在DEVS擴(kuò)展形式的基礎(chǔ)上對(duì)其原子模型的輸出函數(shù)再次進(jìn)行擴(kuò)展、補(bǔ)充,使其對(duì)系統(tǒng)運(yùn)行控制過程的描述更加全面。
(2)基于擴(kuò)展后的邏輯模型,提出邏輯模型到PLC程序的映射規(guī)則,實(shí)現(xiàn)了位邏輯運(yùn)算指令、計(jì)數(shù)器指令與定時(shí)器指令等常用指令的映射,為快速、準(zhǔn)確地設(shè)計(jì)PLC程序提供了一種切實(shí)可行的方法。
圖11 DEVS++二次開發(fā)流程Fig.11 Second development process of DEVS++
圖12 邏輯模型仿真驗(yàn)證Fig.12 Simulation and verification of logic models
圖13 部分PLC程序及其運(yùn)行Fig.13 Part of PLC program and its operation
本文建立了邏輯模型到PLC程序常用指令的映射規(guī)則,但PLC 程序指令繁多,完全實(shí)現(xiàn)邏輯模型到PLC程序的映射需進(jìn)一步的擴(kuò)展。此外,建立邏輯模型到PLC程序的自動(dòng)生成算法也是后續(xù)研究的重點(diǎn)。