王 兵,江海凡,丁國富
(西南交通大學機械工程學院,成都 610031)
隨著產品更新換代周期日益縮短以及產品復雜程度的不斷增加,柔性制造系統(Flexible manufacturing system,FMS)[1]需要滿足更多、更高的要求,例如更短的設計周期、更低的建造成本、更低的調試風險等。虛擬調試(Virtual commissioning,VC)[2]通過仿真技術在虛擬環境中對系統運行邏輯進行測試,減輕了實機調試的負擔,可有效解決上述問題。
虛擬調試通過執行涉及系統虛擬模型與實際控制器的仿真對系統進行驗證[2],因此關于虛擬調試的研究多集中在虛擬模型的構建方面,其中又以邏輯模型方面的研究最為突出。
離散事件系統規范(Discrete event system specification,DEVS)是一種模塊化、層次化的形式化機制[3],對于復雜邏輯的描述具有較大的優勢,被廣泛應用于虛擬調試的邏輯模型構建中。利用DEVS構建邏輯模型主要有3種形式:第1種是利用DEVS的原型構建設備邏輯模型[4],主要適用于不考慮設備交互情況下的行為邏輯描述;第2種是將DEVS原型作為三階建模框架(Three-phase modelling framework)中各階模型的構建方法[5–6],通過多種模型的組合描述設備行為邏輯與交互邏輯;第3種是在第2種的基礎上,根據可編程邏輯控制器(Programmable logic controller,PLC)的控制機制簡化模型組合并擴展DEVS原子模型[7],其目的是使邏輯模型能夠完整地描述實際的控制機制。
綜上所述,目前對于虛擬調試的研究主要集中在邏輯模型的構建方法方面,而從系統整體上考慮虛擬調試的實現,并快速設計系統控制方案則需要進一步的研究。鑒于此,本文提出一種基于可試驗數字孿生體(Experimentable digital twin,EDT)[8]的虛擬調試架構。EDT是數字孿生技術與仿真技術的結合,在運行階段無需考慮物理系統,通過對其數字孿生體的重復測試與試驗驗證系統的功能與性能[9]。所提的架構從設備層、單元層與系統層3層構建FMS的數字孿生體,重點闡述邏輯建模方法與過程,提出基于邏輯模型實現PLC程序快速設計的方法,并進行實例驗證。
如圖1所示,基于EDT的FMS虛擬調試架構包括物理系統與虛擬系統兩部分。
物理系統由硬件設備與軟件系統組成,軟件與硬件之間自上而下傳遞控制信息,實現遞階控制過程。系統層與單元層之間用Kafka作為消息中間件實現生產指令的調用與執行反饋;單元層與設備層之間用Redis作為實時數據庫實現控制變量的寫入與設備狀態的讀取。
虛擬系統由虛擬模型與驅動引擎組成。設備層的模型是對物理設備幾何、運動、邏輯3個維度的映射;單元層、系統層的模型是對各層運行控制邏輯的映射,各層模型之間通過邏輯模型自上而下傳遞控制信息,自下而上傳遞執行反饋信息。驅動引擎用于支撐虛擬模型的構建與仿真,包括圖形引擎(支撐幾何模型的構建與實時渲染)與仿真引擎(支撐邏輯模型的構建與仿真)。
虛擬調試的實現分為兩部分:(1)利用驅動引擎與各層模型之間的輸入、反饋關系實現虛擬系統的仿真運行; (2)將物理系統運行過程中調用的Kafka指令同步到單元層模型,或將Redis中的控制變量同步到設備層模型,利用驅動引擎實現虛擬系統的仿真運行。
綜上所述,邏輯模型是實現FMS數字孿生體仿真的核心,因此邏輯建模是實現基于EDT的FMS虛擬調試架構的一項關鍵技術。此外,虛擬調試的最終要求是設計系統的控制方案,因此基于邏輯模型實現PLC程序的設計是另一關鍵技術。
由于DEVS原子模型無法完整描述系統運行控制過程,文獻[7]將其輸出函數擴展后得到一個九元組:

其中λa、λd和λm是由λ擴展后的輸出函數,分別表示到達特定狀態時的輸出、偏離特定狀態時的輸出和經過特定時間時的輸出,且擴展后的模型允許外部轉換函數δext以多個輸入事件作為函數輸入。與原始原子模型相比,其優點體現在3個方面:(1)具有一對多的輸出關系,即在一個狀態轉移中允許輸出事件集Y中多個元素的更改,不再局限于一對一、多對一的輸出關系。(2)只要發生狀態轉移,就允許觸發輸出函數,保證系統中所有的狀態變化能被通知。(3)外部轉換函數δext中的輸入事件既可以是輸入事件集X中的某個事件,又可以是多個事件的組合,通過組合結果和當前狀態決策函數輸出。
上述擴展形式可以描述與狀態變化、時間相關的輸出,但是實際情況中還存在與頻數相關的輸出,如傳送帶上工件到達指定數量時傳送帶停止,機器人開始抓取工件,因此本文在上述DEVS原子模型擴展形式的基礎上將其再次擴展為一個十元組:
E_FMS=<X,Y,S,δint,δext,λa,λd,λm,λc,ta>
再次擴展后的模型增加了一個輸出函數λc,表示事件或狀態出現一定次數時的輸出,具體描述為:
λc(Flag,StateOrEvent,Count)=Out
其中Flag表示函數是否執行的標志,該函數可能只在特定條件下存在;StateOrEvent表示需記錄出現次數的狀態或事件;Count表示觸發函數時StateOrEvent需出現的次數,取值范圍為[0,+∞);Out表示函數的輸出結果。文獻[7]中的擴展形式雖然定義了輸出函數λm,但是并未給出函數的具體形式,參考λc的形式可將其描述如下:

圖1 基于EDT的虛擬調試架構Fig.1 Virtual commissioning architecture based on EDT

其中Flag、StateOrEvent、Out與λc中含義相同,Time表示觸發函數時StateOrEvent需持續的時間,取值范圍為[0,+∞)。
文獻[7]中的擴展形式允許多個輸入事件的組合作為外部轉移函數δext的輸入,輸入的判斷依據是輸入事件的值(如“0”、“1”),但是在某些情況中以輸入事件的值是否變化作為輸入判斷依據,如工件在傳送帶上運行過程中,通過光電傳感器時不斷產生電脈沖信號(低電平變為高電平或高電平變為低電平),根據電脈沖信號的次數記錄工件數量。因此本文擴展了δext中輸入的表示方式,利用x*描述上述情況,例如“x*==1”表示輸入事件x的值由“0”變為“1”,“x*==0”表示輸入事件x的值由“1”變為“0”。
FMS邏輯模型的構建是自底向上的過程,由下層邏輯構建上層邏輯,其流程如圖2所示。
本文將FMS各層邏輯模型分為控制模型與輸出模型。控制模型用于描述各類傳感信息輸入系統時如何決策出控制系統行為的信號;輸出模型則描述了控制模型輸出的信號與執行器行為的聯系。如圖2所示,設備層中的控制模型、輸出模型分別為設備控制模型與設備部件模型,設備部件模型根據設備中的運動部件構建,設備控制模型則根據設備命令執行過程中部件動作順序構建,每條設備命令構建一個設備控制模型;單元層的控制模型、輸出模型分別為單元控制模型與單元設備模型,單元設備模型由設備控制模型與設備輸出模型耦合得到,單元控制模型則與單元指令對應;同理,系統層的控制模型、輸出模型分別為系統層控制模型與系統層單元模型,構建方法與單元層的控制模型、輸出模型類似。

圖2 FMS多層邏輯建模流程Fig.2 Process of multi-layer logic modeling for FMS
PLC是目前最適用和應用最廣泛的工業控制技術[2],PLC產品基本上都符合IEC61131–3國際標準,該標準中規定了梯形圖、功能塊圖、語句表、結構文本與順序功能圖5種編程語言。梯形圖由于表達直觀而被廣泛使用,其與邏輯模型之間的對應關系如圖3所示。
順序控制設計法是PLC編程常用的方法,這種設計方法的本質是用輸入量I控制代表各步的編程元件(例如存儲器位M),再用它們控制輸出量Q,步是根據輸出量Q的狀態劃分的[10]。因此基于邏輯模型實現PLC程序設計可分為兩部分:(1)位地址的映射,將邏輯模型中的各集合映射到PLC中的存儲單元,并為集合中的元素分配地址;(2)程序段的映射,將邏輯模型狀態轉移過程中的各元素映射為不同的指令,組成各PLC程序段。

圖3 邏輯模型與PLC程序的對應關系Fig.3 Correspondence between logic model and PLC program

表1 PLC存儲區映射規則Table 1 Mapping rules of storage area for PLC
S7系列PLC的存儲區包括輸入映像存儲區(I)、輸出映像存儲區(Q)、位存儲器(M)、外部輸入寄存器(PI)、外部輸出寄存器(PQ)、定時器(T)、計數器(C)、數據塊寄存器(DB)與本地數據寄存器(L)[11],如表1所示,本文主要實現了輸入映像存儲區、輸出映像存儲區與位存儲器的映射。
PLC程序中控制程序段的輸入、輸出信號為程序中的輸入信號與中間控制信號,而控制模型輸入事件集XC、輸出事件集YC表示邏輯模型的輸入與中間結果,因此可以分別映射到PLC的輸入映像存儲區與位存儲器,如果控制模型的輸出事件集YC與輸出模型的輸入事件集XO不是完全一對一的關系,則需要對輸出模型的輸入事件集XO單獨映射;控制模型中只存在外部狀態轉移,狀態既作為函數的輸入又作為函數的輸出,在模型內部變化,因此可將其集合SC映射到PLC的位存儲器。輸出程序段的輸出信號是程序的最終輸出信號,表示任務執行的啟動信號,一般直接通過輸入信號(即控制程序段的輸出信號)控制,在輸出模型中輸入事件驅動模型產生外部狀態轉移,進而由內部狀態轉移表示任務執行過程,因此可將其狀態集SO中表示內部狀態轉移前的狀態映射到PLC的輸出映像存儲區。
控制模型由輸入事件觸發外部狀態轉移,進一步由狀態轉移觸發輸出函數產生輸出事件,根據圖3中的對應關系可通過控制模型的外部狀態轉移過程實現控制程序段的設計。如圖4所示,函數δext中轉移前的狀態映射為常開觸點指令,輸入事件根據表示形式與事件值映射為不同的指令,表示形式“x”根據事件值“0”或“1”映射為常開觸點指令或常閉觸點指令,表示形式“x*”根據事件值“0”或“1”映射為觸點負跳沿檢測指令或觸點正跳沿檢測指令,上述指令作為程序段輸入根據組合關系“&” 或“||”按順序串聯或并聯連接;轉移前后的狀態分別映射為復位指令與置位指令,轉移過程中的輸出事件根據事件值“0”或“1”映射為復位指令或置位指令,如果控制模型的輸出事件與輸出模型的輸入事件是一對多的關系,則需根據控制模型的輸出事件將輸出模型對應的輸入事件映射為相同的指令,上述指令全部作為控制程序段的輸出。
輸出模型由輸入事件觸發外部狀態轉移,進一步由內部狀態轉移表示執行過程,根據圖3中的對應關系可通過輸出模型的外部狀態轉移過程實現輸出程序段的設計。如圖5所示,輸入事件將事件值“0”或“1”映射為常開觸點指令或常閉觸點指令,轉移后的狀態(一般為表示過程開始的狀態)映射為輸出線圈,上述指令分別作為程序段的輸入與輸出。
輸出函數λm和λc分別可映射為PLC中的定時器指令與計數器指令。如圖6(a)所示,輸出函數λm的輸入StateOrEvent映射為常開觸點指令連接到定時器的置位信號端(S),Time映射為定時器時間值輸入端(PV)的時間值,輸出結果Out映射為輸出線圈連接到定時器輸出值端(Q)。

圖4 控制程序段的映射Fig.4 Mapping for control program segment

圖5 輸出程序段的映射Fig.5 Mapping for output program segment
如圖6(b)所示,輸出函數λc的輸入StateOrEvent映射為常開觸點指令連接到減計數器輸入端(CD),Count映射為計數器初值輸入端(PV)的計數初值,輸出結果Out映射為輸出線圈連接到計數器狀態輸出端(Q)。
圖7所示為基于本文所提架構的某FMS虛擬調試實現與驗證框架。該FMS由3個加工單元、1個倉儲單元與1個物流單元組成,加工單元包括雕刻設備(雕刻機)與上下料設備(氣動夾臂、工業機器人),倉儲單元包括堆垛機與立體倉庫,物流單元主要指傳送帶,由滾筒線、出貨臺、入貨臺、轉角機等組成。

圖6 特殊指令的映射Fig.6 Mapping for special instruction
如圖7底部所示,物理系統由硬件設備與軟件系統(如MES、SCADA等)組成。在物理系統運行過程中,MES通過Kafka將生產指令發送至SCADA,SCADA對生產指令進行解析,將控制變量寫入Redis。設備根據Redis中的變量值觸發相應的控制程序,驅動設備執行相應的動作。
如圖7頂部所示,虛擬系統通過對上述控制信息傳遞過程的映射,自底向上逐層構建設備、單元、系統的邏輯模型(包括控制模型與輸出模型)。其中,設備邏輯模型作為單元輸出模型參與單元邏輯模型的構建,單元邏輯模型作為系統輸出模型參與系統邏輯模型的構建。在虛擬系統運行過程中,根據各層邏輯模型中控制模型與輸出模型的耦合關系自上而下運行模型,再通過設備邏輯模型驅動設備三維模型運行;通過觀察、分析三維模型運行情況,反復修改、驗證各層邏輯模型。最后,利用所提的映射規則,根據邏輯模型設計PLC程序,利用編程軟件編寫、調試后下發到物理系統,完成最終的調試驗證。
基于EDT的虛擬調試包括以下兩種方式:一種是在純虛擬環境下,針對某一層的邏輯模型,模擬模型的輸入,再通過仿真引擎驅動邏輯模型,實現虛擬系統的運行;另一種是在半實物環境下,結合物理系統的運行過程,通過Kafka與Redis提供的API在虛擬系統中調用生產指令或讀取控制變量,將生產指令或控制變量解析處理后,分別作為單元邏輯模型與設備邏輯模型的輸入驅動虛擬系統運行,實現對系統不同層次控制方案的調試驗證。
虛擬系統與物理系統實現逐層控制的本質是相同的,都是自上而下不斷地分解輸出,物理系統的輸出通過解析處理后可用于控制虛擬系統,反之同樣可行。虛擬系統系統層和單元層產生的輸出可利用API分別傳入Kafka與Redis中,物理系統從中可調用該輸出,對其解析處理后可用于物理系統的運行控制,對于實現以虛控實以及基于數字孿生的車間裝備智能控制具有一定的參考意義。
為進一步驗證所提架構中的關鍵技術,結合圖7中的FMS對其進行描述,圖8所示為以氣動夾臂為例構建的設備邏輯模型,圖9所示為加工單元邏輯模型。

圖7 某FMS的虛擬調試實現與驗證框架Fig.7 Implementation and verification framework of virtual commissioning for FMS
設備邏輯模型中的輸出模型根據設備中運動部件構建,通過部件運動確定模型的輸入輸出,控制模型則根據設備需執行的命令構建,不同的命令用不同的控制模型表示,圖8(d)所示為其中一個控制模型。單元邏輯模型的輸出模型根據單元中的設備構建,如圖9所示的氣動夾臂與雕刻機可分別構建輸出模型,該模型可通過對設備邏輯模型的簡化等價來構建,圖9(a)所示的模型即為圖8所示模型的等價模型。

圖8 設備邏輯模型Fig.8 Logic model of device

圖9 加工單元邏輯模型Fig.9 Logic model of manufacturing unit
在本文的案例中,倉儲單元與加工單元的運行過程都是連續的,即單元開始執行任務時各設備按順序依次執行設備命令,而物流單元的運行需要與倉儲單元、加工單元不斷交互,其過程是不連續的,因此其邏輯模型有所不同,如圖10所示。
物流單元由于需要與倉儲單元、加工單元不斷交互,因此其控制模型的輸入需要考慮其他單元的運行結果,如圖10(c)中的DL_Transport1表示倉儲單元執行結束時的輸出,DL_Transport2、DL_Transport3與DL_Transport4則分別表示3個加工單元執行結束時的輸出。此外,物流單元的運行通過出貨臺、入貨臺以及不同的轉角機與滾筒線的聯動實現,因此控制模型的輸出可同時作為不同輸出模型的輸入,即存在一對多的耦合關系,如圖10(c)中的彩色箭頭所示。
邏輯模型可以清晰地描述系統的控制決策與執行過程,是實現系統基于狀態的虛實同步以及以虛控實的重要基礎。邏輯模型的構建與驗證通過仿真引擎實現,本文采用DEVS++程序庫[12]作為該仿真引擎,通過對其二次開發實現本文提出的DEVS擴展形式。DEVS++是以C++語言編寫的開源程序庫,庫中只包含頭文件與源文件,因此可直接通過編程軟件對其進行二次開發,本文采用Visual Studio 2012作為二次開發工具。
二次開發的內容分為兩部分:一是實現模型形式的擴展,通過改寫Atomic類中的函數delta_x(),允許外部轉移函數輸入可為多個輸入事件組合的情況,以及以輸入事件值的變化作為輸入的情況,新增函數delta_y_arrival()、delta_y_departure()、delta_y_timed()與delta_y_counted()實現多種輸出;二是實現模型的構建,通過繼承Atomic類并在派生類中重寫上述函數以實現模型功能。二次開發的流程如圖11所示,根據實例中的模型設計開發調試界面,其運行結果如圖12所示。

圖10 物流單元邏輯模型Fig.10 Logic model of logistic unit
限于篇幅,本文以圖8所示的邏輯模型為例演示基于邏輯模型的PLC程序設計過程,首先利用表1中的存儲區映射規則實現關鍵位地址的映射,建立符號表。然后利用本文提出的程序段映射規則設計氣動夾臂的控制程序段與輸出程序段,將程序段按順序排列構建完整的PLC程序。通過STEP7編程軟件編寫PLC程序,并利用S7–PLCSIM仿真,結果證明達到了預期的控制效果,如圖13(a)所示,PLC代碼如圖13(b)所示。邏輯模型相比PLC程序具有規范性強、可重用性高等特點,其構建過程消耗的時間較短,修改調整過程簡單,因此通過映射規則設計PLC程序可比直接設計節省大量時間。
針對缺乏從系統整體上考慮虛擬調試的實現以及實現系統控制方案設計等問題,本文提出一種基于EDT的FMS虛擬調試架構,根據其兩項關鍵技術主要做了以下工作:
(1)在DEVS擴展形式的基礎上對其原子模型的輸出函數再次進行擴展、補充,使其對系統運行控制過程的描述更加全面。
(2)基于擴展后的邏輯模型,提出邏輯模型到PLC程序的映射規則,實現了位邏輯運算指令、計數器指令與定時器指令等常用指令的映射,為快速、準確地設計PLC程序提供了一種切實可行的方法。

圖11 DEVS++二次開發流程Fig.11 Second development process of DEVS++

圖12 邏輯模型仿真驗證Fig.12 Simulation and verification of logic models

圖13 部分PLC程序及其運行Fig.13 Part of PLC program and its operation
本文建立了邏輯模型到PLC程序常用指令的映射規則,但PLC 程序指令繁多,完全實現邏輯模型到PLC程序的映射需進一步的擴展。此外,建立邏輯模型到PLC程序的自動生成算法也是后續研究的重點。