天天看點

IEC61499标準背後的邏輯

   俗話說,透過現象看本質。從工業控制軟體的諸多概念,術語,軟體中,我們如果了解了工業軟體背後的邏輯,就明白了工業控制軟體的本質。

功能塊

IEC61499 标準中最重要的概念是功能塊(function block)。從使用者的角度看,功能塊是一個類似硬體原理圖中內建電路的圖形符号。通過連線,可以建構一個功能塊網絡。這就是基于IEC61499 功能塊的控制系統應用軟體。

那麼從開發者的角度看,功能塊到底是什麼呢?為什麼要采用這樣的方式來編寫工業控制的應用軟體呢? 采用一句話來透徹地描述功能塊-“功能塊是軟體元件的圖形化表示”。每一個功能塊圖形的背後是控制裝置中的軟體元件。軟體元件和響應的實體部件一起完成相關的控制功能。

軟體元件(software component)是一個成熟的概念。 為了使軟體能夠重複使用,人們提出了子產品化程式設計的概念。 軟體元件就是一種軟體單元,它們具有規範的模型和接口定義。在傳統程式設計中,程式庫中的子程式可以看做一個軟體元件。而在面向對象程式設計語言中。一個由類(class) 定義的對象就是一個軟體元件。

在IEC61499 系統中,每個功能塊對應于裝置中的嵌入式軟體裡面的一個對象(class)。比如E_CTU功能塊對應 C++ 或者java 中名稱為的E_CTU 類。

IEC61499标準背後的邏輯

如果你了解了“功能塊是軟體元件的圖形化表示”的概念,就能夠認識到, 實作 IEC61499控制系統的基礎是實作背後的軟體元件。IEC61499 功能塊庫對應的是裝置軟體内部的類庫。

工業控制軟體大多數是和實體裝置緊密結合的嵌入式軟體,它們要求具有高可靠性,确定性和實時性,而且和生産工藝和過程十分緊密。 而且控制器的硬體資源十分有限。 編寫這樣的嵌入式軟體是一個巨大的考驗,需要具有長期的工作經驗和很強的行業背景。

開發工業控制的嵌入式軟體是一項十分困難的工作。可惜許多人有一個錯覺,認為編寫小單片程式是新大學生幹的事情。

正是由于工業控制領域的嵌入式軟體開發成本高,周期長,軟體的重用就顯得十分重要。子產品化,元件化就成為正确的選擇。軟體元件就像硬體的大規模內建電路類似,如果應用工程師都采用中規模內建電路來實作硬體的化,是非常複雜和困難的。半導體公司開發了大量的大規模內建電路,它們完成了電路的設計和測試。硬體工程師隻要根據器件的資料表和輸入輸出引腳定義來設計原理圖,并且部署到PCB闆上,就能夠實作它們需要的功能了。軟體元件就是軟體工程師的“元器件”, 硬體工程師能夠使用圖形化的邏輯圖來設計硬體電路,軟體工程師也同樣能夠使用功能塊網絡來設計應用軟體。

另一方面,工業控制系統的嵌入式程式通常是周期性運作的單一功能的程式。它們更适合軟體元件化。其實在很早以前,工業裝置中就采用了軟體元件的模式來開發内部的嵌入式軟體。隻是他們那麼稱呼而已。比如SCADA 系統中的各種HMI 圖形背後對應的是軟體元件。PLC 的梯形圖和後來發展起來的IEC61131-3 功能塊,也是軟體元件的圖形化描述形式。工業控制軟體中的各種組态程式背後都是豐富的軟體元件庫。

使用圖形化,可視化,軟體元件化。加上各種系統的形式化,模型化描述語言(比如UML  ,sysML語言)。形成了工業控制軟體完整的技術體系。保證了工業控制軟體的可靠性,确定性。從這個角度,我們才能了解工業控制軟體和IT 領域的軟體技術和使用方式如此的不同。

架構

一個工業自動控制控制系統和實體裝置一起安裝運作,它們的生命周期會是十年,甚至更長。任何一個架構如果能長期地被采納,需要能夠從已有的系統向新系統轉移和更新的能力。

這樣的系統必須是“開放”的,也就是說這樣的系統架構應該具備下面幾個特性:

移植性Portability

互操作性(Interoperability)

配置性(Configurability)

一個理想的分布式系統如下圖所示。一個中心計算機可以通路軟體元件庫和項目倉庫。軟體元件和項目應用程式采用了XML标準語言描述。實作移植性。通過配置協定部署和更新裝置的控制程式。實作可配置特性。裝置之間采用一個統一的協定和網絡實作互操作性。

IEC61499标準背後的邏輯

 IEC61499 分布式工業控制系統正是符合上述特性的控制系統。配置協定采用了XML 協定格式。而互操作協定采用了TCP /UDP協定和ASN.1 資訊編碼。

IEC61499标準背後的邏輯

在開源IEC61499 項目4DIAC 的IDE和裝置中的運作時如下圖所示。IDE 與裝置之間的配置協定采用的TCP協定。而裝置之間的互操作協定采用的UDP協定。

IEC61499标準背後的邏輯

功能塊描述

功能塊背後的軟體元件可以使用不同的計算機語言來實作,比如C++,Java 或者Python,Go 等。除了性能以外,它們實作的算法和行為應該是類似的。它們的接口是統一格式。IEC61499 使用XML 語言來描述功能塊。

功能塊的XML描述類似于軟體功能塊的“源代碼”,它們部署到裝置中,由對應的軟體元件來實作該功能塊的算法和行為。

    采用了标準化XML 語言來描述。功能塊的移植性非常強。隻要裝置中實作了對應的軟體元件。就可以部署到該裝置中運作。如果在X86,ARM ,處理器的裝置中實作了一個功能塊的軟體元件,那麼這些裝置就可以運作該功能塊。唯一的差別可能是性能優劣之分。。

應用程式描述

在IEC61499 系統中,應用程式是由功能塊通過配置和連線構成的功能塊網絡。它們和硬體設計的中的邏輯圖非常相似。隻是這裡不是邏輯電路塊,而是功能塊。在IEC61499 中,功能塊網絡也是采用XML 來描述的。

配置協定

IEC61499 标準的系統中,中心計算機通過配置協定。部署和監控裝置中的功能塊網絡。該協定采用了Client/Server 結構。裝置是伺服器端,IDE是用戶端。指令格式是ASN.1 編碼的XML 指令和響應。

ASN.1 編碼

ASN.1抽象文法标記(Abstract Syntax Notation One) ASN.1是一種 ISO/ITU-T 标準,描述了一種對資料進行表示、編碼、傳輸和解碼的資料格式。這種編碼方式比XML和json 編碼要簡單的多,更适合嵌入式系統中資料交換。

Request/Rsponse 指令

在Client/Server 架構下,配置協定采取了請求/響應指令方式(Request/Response Command)下面是主要的Request/Rsponse 指令:

建立(Create)指令

  使用建立指令建立功能塊(FB),連接配接(Connect)和觀察點(Watch)

建立功能塊(FB)

請求

<Request ID="5" Action="CREATE"><FB Name="EMB_RES" Type="EMB_RES" /></Request>

響應

<Response ID="5"></Response>

建立連接配接(Connect)

請求

<Request ID="5" Action="CREATE"><Connection Source="START.WARM" Destination="E_CYCLE.START" /></Request>

響應

<Response ID="5"></Response>

      建立觀察點(Watch)

請求

<Request ID="5" Action="CREATE"><Watch Source="E_CTU.CV" Destination="*" /></Request>

響應

<Response ID="5"></Response>

查詢(QUERY)指令

查詢功能塊類型

請求

響應

查詢功能塊

請求

:<Request ID="0" Action="QUERY"><FB Name="*" Type="*"/></Request>

響應

寫指令 (WRITE)

初始化功能塊輸入資料。

請求

<Request ID="7" Action="WRITE"><Connection Source="239.0.0.1:61000" Destination="PUBLISH_1.ID" /></Request>

讀指令(READ)

-讀取所有觀察點資料(Watchs)

  讀取所有觀察點的目前資料。

請求

 <Request ID="5" Action="READ"><Watches/></Request>

響應

<Response ID="5">

  <Watches>

<Resource name="EMB_RES">

<FB name="E_CTU">

<Port name="PV">

<Data value="16" forced="false"/>

</Port>

<Port name="Q">

<Data value="FALSE" forced="false"/>

</Port>

</FB>

<FB name=”E_CYCLE”>

…….

<FB>

….

<Resource>

<Watches>

</Response>

删除指令(DELETE)

删除某個觀察點。

請求

響應

<Response ID="5"></Response>

殺除指令(KILL)

啟動指令(START)

  啟動應用程式開始執行。

請求

:<Request ID="19" Action="START"/>

響應

<Response ID="19"></Response>

互操作協定

在IEC61499 分布式系統中,應用可以映射到不同的裝置上運作。而不同裝置之間的事件和資料要通過通信功能塊傳輸。當部署到不同裝置時,要添加通信功能塊,如下圖所示。

IEC61499标準背後的邏輯

在4diac中,裝置之間的通信功能塊不是自動插入的(我原來以為是IDE自動插入的呢),而是在Forte-PC和Forte-PC_1 的RES 中人工的方式插入的。可以采用不同通信協定的通信功能塊。例如UDP.TCP,MQTT或者modbus.現在想來,這樣安排增加了系統的靈活性。如果插入publish和subscribe ,(ID 為 239:0.0.1:61000),沒有指定IP協定,預設為UDP 協定。

239:0.0.1 是多點傳播位址。傳輸效率更高。

裝置和裝置之間采用雙向UDP 協定通信(端口為61000) ,UDP 的塊資料格式采用了ASN.1 資料編碼。資料的排列順序是publish 的發送資料順序(SD_1,SD_2 ..)依次排列。

結束語

  功能塊是軟體元件的圖形化描述。每一個功能塊對應可控制器内部的一個軟體元件,比如一個對象。

  工業軟體,特别是嵌入式工業軟體的開發是非常困難的,工業軟體更需要子產品化群組件化。是以在工業控制領域,大量采納了子產品化,組态化,圖形化程式設計方式。

  開發一個功能塊系統的關鍵是配置協定,分布式功能塊的互操作協定,以及功能塊庫的實作。

   基于這些觀點,我們開發了一個在Cortex-M 單片計算機上運作的IEC61499 運作時,并且與4DIAC 相容。後面我們将陸續介紹這個軟體的實作方式。