【物聯網中間件平臺-02】YFIOs技術白皮書(V1.1)

 

1 前言

在工控領域,組態軟件司空見慣,國外的iFix、InTouch、WinCC,國內的組態王、力控、MSCG等等。組態軟件的出現完全解決了軟件重複開發的問題,實現模塊級複用,好處不只僅是提升了開發效率,下降了開發週期,更大的優點的是成熟模塊的複用,大大提升了系統穩定性和可靠性。html

所謂組態(Configuration),就是模塊化任意組合(相似積木玩具)。組態軟件的主要特色有:ios

(1)、延展性。所謂延展性,就是系統的延續和易於擴展性,用組態軟件開發的系統,當現場或用戶需求發生改變時(包括硬件設備或系統結構的改變),用戶無需作不少修改,就能夠很方便地完成系統的升級和改造;算法

(2)、易用性。組態軟件對底層功能都進行了模塊級封裝,對於用戶,只需掌握簡單的編程語言(內嵌的腳本語言,類Basic或類C語言),甚至不須要編程技術,就能很好地,經過組態配置的方式完成一個複雜系統的開發和集成;數據庫

(3)、通用性。不一樣用戶根據系統的不一樣,利用組態軟件提供的I/O驅動(如PLC、儀表、板卡、智能模塊、變頻器等等驅動)、數據庫和圖元,就能完成一個具備動畫、實時數據處理、歷史數據和圖表並存,且具備多媒體功能和網絡功能的系統工程,不受領域或行業限制。編程

可是不管是基於PC平臺的組態軟件仍是基於ARM系統的嵌入式組態軟件,其組態粒度都顯過大,大部分經過串口、網口、CAN等通道把個系統模塊鏈接在一塊兒,在必定程度上增長了系統構建的成本和代價。windows

而以.NET Micro Framework爲依託構建的輕量級嵌入式組態軟件(YFIOs)就很好的解決了上述問題,除支持常規的串口、網口、CAN外,還支持USB、Wifi、ZigBee、SPI、I2C等通道,SPI、I2C片級總線的支持加上強大的託管代碼(C#,VB.net)開發能力,使嵌入式硬件系統真正的組態化、模塊化成爲可能,這項技術的推出,無疑爲快速打造形態萬千,功能不一樣的產品提供了最有力的支撐。數組

2 YFIOs簡介

YFIOs就是YFSoft I/O Server的簡稱,在物聯網、雲計算時代,一切以數據爲中心,不一樣的傳感器經過不一樣的方式接入網絡,經過雲計算的方式爲不一樣的終端用戶提供服務。網絡

爲了適應這種新形勢的發展,加速和下降各類傳感器、智能模塊的入網代價,以微軟成熟的.NET Micro Framework系統爲基礎,打造出物聯網時代的輕量級嵌入式組態系統 —— YFIOs架構

2.1 技術特點和優點

和傳統組態或其餘物聯網、嵌入式等方案相比,有以下優點:app

(1)、組態式搭建系統,自動添加IO配置數據,驅動和策略開發接口對外開放;

(2)、支持遠程升級,遠程調試。

(3)、因爲.NET Micro Framework的跨平臺特性,因此基於該框架的YFIOs也能夠跨平臺應用。

(4)、採用Microsoft Visual Studio 2010模板進行驅動和策略進行C#開發,開發門檻較低,和windows平臺的開發別無二致;

(5)、驅動和策略能夠在Microsoft Visual Studio 2010開發環境中在線調試;

(6)、策略能夠和驅動聯動,不只能夠直接調用驅動,還能夠和驅動進行關聯,事件觸發的方式執行策略;

(7)、策略不只能夠調用驅動,彼此之間還能夠互相調用;

(8)、驅動和策略能夠加密,也能夠綁定指定硬件運行,不只能夠保護用戶的知識產權,還能夠在此基礎上爲第三方客戶提供增值服務。

(9)、運行時小巧輕便,不含YFHMI庫的運行時僅19.2K,含MiniGUI、中文字庫、四套圖元庫的運行時,也僅355K。

2.2 .NET Micro Framework簡介

Microsoft .NET Micro Framework 將 .NET 的可靠性和效率與 Visual Studio的高生產率結合起來,以針對價格較低、資源受限的小型設備開發應用程序,可幫助人們使用熟悉的 Visual Studio工具來構建託管的嵌入式應用程序。2009年5月,.NET Micro Framework採用Apache 2.0 license,比Linux等開源軟件更爲完全的方式實現了源代碼徹底開放。

2.2.1 哪些領域能夠採用.NET Micro Framework技術?

.NET Micro Framework技術能夠應用到:Sideshow、遠程控制、智能家電、教育類機器、醫療電子、零售終端以及汽車電子等行業應用場景;此外因爲.NET Micro Framework集成了各類接口,如串口、網口、Wifi、Zigbee、I2C、SPI、SDIO、USB等通訊接口,加上其應用開發簡便,因此在物聯網時代,將大有做爲。

2.2.2 .NET Micro Framework與Window CE和Windows XP Embedded的區別?

.NET Micro Framework對存儲器和處理器的要求更低。開發人員能夠在低功耗、低成本的ARM七、ARM九、Blackfin和Cortex-M3處理器上使用該框架(不須要MMU支持),所開發出來的軟件僅須要幾百Kbytes的RAM或Flash/ROM存儲空間。而Windows Embedded CE的託管代碼環境須要約10~12Mbytes的存儲空間,基於.NET的應用編程設備只須要較少的存儲空間,下降了產品成本。

2.2.3 .NET Micro Framework與其餘.NET平臺的區別?

做爲.NET家族的一員,.NET Micro Framework是微軟專門針對超輕量級平臺設計的軟件架構。與.NET Framework和.NET Compact Framework不一樣的地方是,.NET Micro Framework具備自啓動的特性,而且在HAL層,微軟將操做系統的必要特性引入,如:啓動管理、中斷處理、線程調度、內存管理等。.NET Micro Framework能夠單獨使用,不須要依託其它操做系統,所以佔用空間很小。

2.3 YFIOs系統架構

YFIOs由三大部分構成,一是YFIOs運行時,包含YFIODB、YFIOBC、驅動引擎和策略引擎四部分;二是應用模塊,包含驅動、策略和IO數據三部分;三是YFIOs IDE環境(YFIOsManager),該工具和Microsoft Visual Studio開發工具一塊兒共同完成驅動、策略的開發、配置及部署工做。

系統架構圖和YFIOs和.NET Micro Framework 關係圖(以下圖所示):

     

 

2.4 YFIODB

YFIODB是一個在內存實現的數據庫,主要存放IO數據,供驅動程序、策略程序直接訪問,從而起到跨模塊交換數據的目的。其IO數據通常可分兩類,一種是內部IO數據,該類IO數據不綁定任何設備驅動,主要做爲中間變量或臨時變量來使用;另外一種是設備IO數據,該類IO數據和實際的驅動程序進行綁定,該IO數據的值映射驅動所對應的設備參變量的值。

2.4.1 YFIODB庫結構

  

 

2.4.2字段組成

序號

變量名稱

長度

說明

1

Name

32

變量的名稱

2

Type

2

數據類型 B布爾型 I整型 F浮點型 S 字符串

3

Value

32

變量的值

4

Comment

26

註釋

5

RWMode

2

讀寫類型 0 只讀 1 只寫 2 讀寫(自動讀) 3 讀寫(手動讀) 4-只讀(手動)

6

RWFlag

2

R 自動讀 W 自動寫  r 手動讀 n讀不操做 N 寫不操做

7

LO

16

下限

8

HO

16

上限

9

DateTime

8

數據更新時YYYY(2B)MM(1B)DD(1B)HH(1B)mm(1B)SS(1B)

統計

 

136

1000個點須要  約132.8 K Byte 的內存

YFIODB自己僅僅是一個數據庫框架平臺,並不包含以上的字段信息,也不包含任何數據。YFIOs啓動後,會根據以上字段定義的信息,建立指定大小的內存數據庫表,而且把預先定義好的內部IO變量和設備IO變量填充到內存數據庫中去。

2.4.3訪問接口

YFIODB訪問接口被操做類接口(IOPerate)進一步封裝,而操做類接口是驅動和策略標準函數接口的第一個參數,因此任何一個驅動和策略程序均可以操做YFIODB。

相關操做接口定義以下:

    //讀數據

    string IORead(string name);

    int IOReadInt(string name);

    float IOReadFloat(string name);

    //讀數據(擴展方式  變量名.字段名)

    string IOReadEx(string name);

    //寫數據(內部寫)

    int IOWrite(string name, string data);

    int IOWrite(string name, int data);

    int IOWrite(string name, float data);

    //寫數據(擴展方式  變量名.字段名)

    int IOWriteEx(string name, string data);

    //外部寫(直接寫變量)

    int Extern_IOWrite(string name, string data);

    //變量讀寫模式

    string IOReadMode(string name);

須要說明的是,該接口提供的對YFIODB的寫操做,並非直接對YFIODB數據庫某表某字段,進行寫操做,而是根據必定的邏輯算法,對各表項綜合操做(注意:擴展方式寫操做,是直接對錶中具體的項直接進行操做的)。驅動函數要採用內部寫模式,執行後,會自動復位「W」標誌位,而對策略函數來講,屬於用戶層面操做,因此要寫YFIODB的時候,要採用外部寫函數,執行後,函數會自動置位「W」標誌位。

寫YFIODB份內外的意義在於:策略函數僅僅是把變量的值寫入數據庫,而驅動纔會真正的把該變量的值寫入到實際的設備中去。而經過復位和置位「W」標誌能夠獲知是否要寫入到實際設備,或是否寫入完成。

 

2.5 YFIOBC

和YFIODB不一樣,YFIOBC是用來供驅動程序和策略程序存儲和交換大塊數據而用的,如攝像頭的圖像數據。該結構設計的如同文件系統,可新建、刪除和讀寫,其內容大小僅受設備內存的限制。

2.5.1 YFIOBC庫結構

 

2.5.2 訪問接口

和操做YFIODB接口同樣,操做YFIOBC的接口也封裝到操做類接口(IOPerate)中,因此驅動和策略程序均可以操做YFIOBC。

操做接口定義以下:

    //刪除內存數據條目

    int IOBC_Del(string name);

    //size=0 打開,size>0 建立

    int IOBC_Create(string name, uint size);

    //獲取指定條目所分配的內存大小

    int IOBC_GetLength(int hander);

    //讀寫偏移設置

    int IOBC_Seek(int hander, int offset);

    //讀內存數據

    int IOBC_Read(int hander, byte[] buffer, int offset, int count);

    //寫內存數據

    int IOBC_Write(int hander, byte[] buffer, int offset, int count);

    //關閉

    int IOBC_Close(int hander);

該接口仿照文件操做方式進行操做,其做用相似Windows平臺上的共享內存操做,讀寫都在內存中完成。

2.6驅動開發

一個驅動程序可對應一種設備,也能夠對應一類設備,關鍵在於設備支持的協議是私有的,仍是公開的,通常公開的協議,如Modbus,不一樣廠家的通訊設備都有不一樣程度的支持(好比支持3號或16號指令),凡支持該協議的設備,均可以經過同一個設備驅動進行訪問,惟一不一樣的就是設備地址、數據類型、起始地址和數據長度等參變量,咱們能夠根據實際須要,相應配置便可。

2.6.1 驅動接口類

     public interface IDriver

    {

        DriverInfo GetDriverInfo();

        int OnLoad(Device dv, IOperate op, object arg);

        int OnRun(Device dv, IOperate op, object arg);

        int OnUnload(Device dv, IOperate op, object arg);

}

驅動程序必需要實現這四個函數接口,其中GetDriverInfo僅供上位機配置程序調用。

(1)、GetDriverInfo – 返回驅動相關信息(請參見2.5.3)。

(2)、OnLoad – 驅動被加載時,將自動調用OnLoad方法。用戶能夠在該函數內,完成一些初始化操做。

(3)、OnRun – 根據配置不一樣,該函數按指定的時間間隔連續被系統調用(若是時間間隔配置爲0,則系統不會自動調用OnRun方法)。同一個接口配置的驅動,將共享一個線程,系統將依次調用該方法。

(4)、OnUnload – 驅動被卸載時,系統將調用OnUnload。(目前YFIOs系統不支持驅動卸載)。

2.6.2 通訊接口

    public enum DeviceConnMode

    {

        SerialPort = 0,

        Ethernet,

        CAN,

        USB,

        SPI,

        I2C,

        SDIO,

        Zigbee,

        AD,

        DA,

        I,

        Q,

        PWM,

        Other,

    }

2.6.3 驅動配置信息類

 

複製代碼
   public class DriverInfo  {      //32byte,驅動名稱(要保證惟一)

        public string Name;                                  //16byte,版本信息

public string Ver;  //64byte,說明

public string Explain;                              //16byte,開發者

public string Developer;   //16byte,日期                

        public string Date;                                 //自動化標誌          //0 bit 0 - 系統爲你初始化通訊接口  1 - 由驅動程序自己完成通訊接口初始化          //1 bit 0 - 無操做                  1 - 由驅動程序自己完成IO變量添加          //2~31 bit 備用    

        public int AutoFlag;    //通訊方式                    

        public DeviceConnMode ConnMode;          //64byte,設備製造商

        public string Manufacturer;                  //32byte,設備類型

        public string DeviceType;                            //設備參數  //硬件端口名稱   空爲無效項

        public string PortAddrExplain;              //硬件端口默認值 項選擇(若是有的話)用"|" 分隔開,默認項爲第一個

        public string PortAddrValue;  //端口參數名稱   空爲無效項              

        public string PortConfigExplain;               //端口參數默認值 項選擇(若是有的話)用"|" 分隔開,默認項爲第一個

        public string PortConfigValue;     //設備地址名稱   空爲無效項       

        public string DeviceAddrExplain;  //設備地址默認值 項選擇(若是有的話)用"|" 分隔開,默認項爲第一個          

        public string DeviceAddrValue;       //設備參數名稱   空爲無效項      

        public string DeviceConfigExplain;  //設備參數默認值 項選擇(若是有的話)用"|" 分隔開,默認項爲第一個

        public string DeviceConfigValue;                    //項參數  //8*32 byte,鏈接項名稱

        public string[] ItemExplain;                //8*4 byte 默認值 項選擇(若是有的話)用"|" 分隔開,默認項爲第一個

        public string[] ItemValue;                            //擴展配置信息的長度 若是爲0,則表示沒有(上位機管理程序使用)

public int ConfigSize;                      }
複製代碼

 

2.6.4 擴展配置接口

 

若是驅動程序提供的標準配置項,不足以配置驅動,則能夠自行定製驅動配置頁,自行生成配置數據,驅動自行解析。

DriverInfo信息類中的最後一項ConfigSize,就是定義該配置信息的大小。驅動的實例類中會含有一個Config字節數組,存放上位機管理程序配置的信息。

(【接口說明】選項就是選擇該驅動後,自動出現的頁面,不過該頁面並無配置任何數據,僅僅起到提示說明的做用)

    public interface IConfig

    {

        //建議面板大小319*203

        Panel[] GetPanel(byte[] InitConfig,ConfigParameter parameter);

        byte[] GetConfig();

}

 

    public class ConfigParameter

    {

        public string[] IODataNames;

        public string[] DeviceNames;

        public string[] StrategyNames;

        public object Sender;

    }

上位機管理程序會向驅動配置面板提供當前全部IO內存變量名稱,驅動名稱和策略名稱等等信息。

2.6.5 驅動的執行

驅動程序除了按設定的掃描時間週期執行外,還能夠把掃描時間設置爲0,表示不會自動運行。設置爲該模式的驅動,通常被策略程序直接調用而得以執行。

另外驅動還能夠設置爲Disabled,這樣該驅動任何方式的調用將被禁止,如該驅動不存在同樣。

2.7 策略開發

能夠把YFIOs運行時想象成一個支持多任務的操做系統,這樣每一個策略的OnRun接口,均可以當成一個進程的Main函數,惟一不一樣的是,這個Main函數被調用的機制多種多樣(參見策略執行模式)。

策略就是一段代碼,一段標準的.NET Micro Framework程序,能夠根據項目的需求充分訪問.NET Micro Framework已有的開發資源(如各種庫函數),編寫任意功能的代碼模塊。

2.7.1 策略接口類

    public interface IStrategy

    {

        StrategyInfo GetStrategyInfo();

        int OnLoad(IOperate op, object arg);

        int OnRun(IOperate op, StrategyMode mode, object arg);

        int OnUnload(IOperate op, object arg);

}

策略程序必需要實現這四個函數接口,其中GetStrategyInfo僅供上位機配置程序調用。

(1)、GetDriverInfo – 返回策略相關信息(請參見2.5.3)。

(2)、OnLoad – 策略被加載時,將自動調用OnLoad方法。用戶能夠在該函數內,完成一些初始化操做。

(3)、OnRun – 根據配置不一樣,該函數以事件、循環等等方式被系統自動調用。

(4)、OnUnload – 策略被卸載時,系統將調用OnUnload。(目前YFIOs系統不支持策略卸載)。

 2.7.2 策略執行模式

    public enum StrategyRunMode

    {

        None = 0,      //無動做  

        Loop,          //循環執行

        System_Loop,   //系統循環執行

        //事件驅動

        Event_System_Launch_Before,

        Event_System_Launch_After,

        Event_System_Error_Process,

        Event_Driver_Run_Before,

        Event_Driver_Run_After,

}

和最初的定義的執行模式不一樣,新版策略執行模塊簡化了許多。

(1)             None – 策略定義爲該模式,意味着須要其它策略來調用才能被執行。系統自己只負責加載策略和調用策略的初始化接口,

(2)      Loop – 系統自動爲策略建立一個線程,而後按指定的間隔,連續調用策略的OnRun的接口。

(3)      System_Loop – 系統不會另外爲策略建立線程,而是在主線程裏(也就是Main函數中的while循環裏)不斷調用策略的OnRun接口,若是多個策略配置了該模式,則這些策略的OnRun接口將依次執行。建議包含界面的策略配置成這種執行模式,而且僅且只有一個這樣的策略配置成這種模式。

(4)             Event_System_Launch_Before – 配置爲該模式,策略將在YFIOs執行Launch函數以前執行該策略。Launch函數執行的功能主要是初始化驅動、掛載驅動事件策略、建立線程執行驅動、初始化策略和建立線程執行策略。

(5)             Event_System_Launch_After – 策略將在YFIOs執行Launch函數以後執行。

(6)             Event_System_Error_Process – 當系統出現異常和錯誤的時候,將會自動調用配置爲該模式的策略。

(7)             Event_Driver_Run_Before – 該策略執行模式須要指定關聯觸發的驅動,在系統調用驅動OnRun接口以前,會自動執行配置該模式的策略。注意,當策略調用DriverRun接口來執行驅動的OnRun函數時,該事件也會被觸發。

(8)             Event_Driver_Run_After – 和Event_Driver_Run_Before執行模式相似,只是在調用驅動的OnRun接口以後,觸發該事件。

注意:策略並不只支持一種策略執行模式,同一個策略能夠配置多個執行模式,只要符合條件,該策略將會被調用。

 2.7.3 策略的執行

     策略除了按策略執行模式執行外,策略之間還能夠互相調用,而且還能夠直接調用指定名稱的驅動程序的接口函數。

    策略在配置的時候,也能夠設置爲Disabled,這樣該策略的全部接口將沒法訪問,和該策略不存在同樣。

2.7.4 擴展配置接口

    和驅動程序的擴展配置接口相同,請參見2.5.4項的介紹。

 

3 YFIOs應用開發

3.1 YFIOsManager簡介

 

操做視頻演示:http://v.youku.com/v_show/id_XNDkxMzgyNTgw.html

3.2 YFIOs應用實例

3.2.1 農村我的醫療遠程助理

 

3.2.2 YFHMI物聯網畫面組態系統

 

操做演示視頻:http://v.youku.com/v_show/id_XNDg2MjMxODI4.html

 

設備運行視頻:http://v.youku.com/v_show/id_XNDg2MjM4MTQw.html

4相關資源

一、.NET Micro Framework 官方網址

http://www.microsoft.com/netmf/default.mspx

二、.NET Micro Framework官方博客

http://blogs.msdn.com/netmfteam/

三、中文博客

http://blog.csdn.net/yefanqiu

http://www.cnblogs.com/yefanqiu

四、葉帆科技

http://www.sky-walker.com.cn/

五、物聯網中間件技術開發論壇

http://www.yfios.net

YFIOs/YFHMI免費試用

從2012-12-21起YFIOs和YFHMI將開展爲期半年的免費試用活動,符合申請條件的用戶,將依次獲取YFIOs和YFHMI的試用機會。

申請表下載:http://sky-walker.com.cn/MFRelease/document/yfios_yfhmi_application.doc

相關文章
相關標籤/搜索