在工控領域,組態軟件司空見慣,國外的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)開發能力,使嵌入式硬件系統真正的組態化、模塊化成爲可能,這項技術的推出,無疑爲快速打造形態萬千,功能不一樣的產品提供了最有力的支撐。數組
YFIOs就是YFSoft I/O Server的簡稱,在物聯網、雲計算時代,一切以數據爲中心,不一樣的傳感器經過不一樣的方式接入網絡,經過雲計算的方式爲不一樣的終端用戶提供服務。網絡
爲了適應這種新形勢的發展,加速和下降各類傳感器、智能模塊的入網代價,以微軟成熟的.NET Micro Framework系統爲基礎,打造出物聯網時代的輕量級嵌入式組態系統 —— YFIOs。架構
和傳統組態或其餘物聯網、嵌入式等方案相比,有以下優點: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。
Microsoft .NET Micro Framework 將 .NET 的可靠性和效率與 Visual Studio的高生產率結合起來,以針對價格較低、資源受限的小型設備開發應用程序,可幫助人們使用熟悉的 Visual Studio工具來構建託管的嵌入式應用程序。2009年5月,.NET Micro Framework採用Apache 2.0 license,比Linux等開源軟件更爲完全的方式實現了源代碼徹底開放。
.NET Micro Framework技術能夠應用到:Sideshow、遠程控制、智能家電、教育類機器、醫療電子、零售終端以及汽車電子等行業應用場景;此外因爲.NET Micro Framework集成了各類接口,如串口、網口、Wifi、Zigbee、I2C、SPI、SDIO、USB等通訊接口,加上其應用開發簡便,因此在物聯網時代,將大有做爲。
.NET Micro Framework對存儲器和處理器的要求更低。開發人員能夠在低功耗、低成本的ARM七、ARM九、Blackfin和Cortex-M3處理器上使用該框架(不須要MMU支持),所開發出來的軟件僅須要幾百Kbytes的RAM或Flash/ROM存儲空間。而Windows Embedded CE的託管代碼環境須要約10~12Mbytes的存儲空間,基於.NET的應用編程設備只須要較少的存儲空間,下降了產品成本。
做爲.NET家族的一員,.NET Micro Framework是微軟專門針對超輕量級平臺設計的軟件架構。與.NET Framework和.NET Compact Framework不一樣的地方是,.NET Micro Framework具備自啓動的特性,而且在HAL層,微軟將操做系統的必要特性引入,如:啓動管理、中斷處理、線程調度、內存管理等。.NET Micro Framework能夠單獨使用,不須要依託其它操做系統,所以佔用空間很小。
YFIOs由三大部分構成,一是YFIOs運行時,包含YFIODB、YFIOBC、驅動引擎和策略引擎四部分;二是應用模塊,包含驅動、策略和IO數據三部分;三是YFIOs IDE環境(YFIOsManager),該工具和Microsoft Visual Studio開發工具一塊兒共同完成驅動、策略的開發、配置及部署工做。
系統架構圖和YFIOs和.NET Micro Framework 關係圖(以下圖所示):
YFIODB是一個在內存實現的數據庫,主要存放IO數據,供驅動程序、策略程序直接訪問,從而起到跨模塊交換數據的目的。其IO數據通常可分兩類,一種是內部IO數據,該類IO數據不綁定任何設備驅動,主要做爲中間變量或臨時變量來使用;另外一種是設備IO數據,該類IO數據和實際的驅動程序進行綁定,該IO數據的值映射驅動所對應的設備參變量的值。
序號 |
變量名稱 |
長度 |
說明 |
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變量填充到內存數據庫中去。
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」標誌能夠獲知是否要寫入到實際設備,或是否寫入完成。
和YFIODB不一樣,YFIOBC是用來供驅動程序和策略程序存儲和交換大塊數據而用的,如攝像頭的圖像數據。該結構設計的如同文件系統,可新建、刪除和讀寫,其內容大小僅受設備內存的限制。
和操做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平臺上的共享內存操做,讀寫都在內存中完成。
一個驅動程序可對應一種設備,也能夠對應一類設備,關鍵在於設備支持的協議是私有的,仍是公開的,通常公開的協議,如Modbus,不一樣廠家的通訊設備都有不一樣程度的支持(好比支持3號或16號指令),凡支持該協議的設備,均可以經過同一個設備驅動進行訪問,惟一不一樣的就是設備地址、數據類型、起始地址和數據長度等參變量,咱們能夠根據實際須要,相應配置便可。
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系統不支持驅動卸載)。
public enum DeviceConnMode
{
SerialPort = 0,
Ethernet,
CAN,
USB,
SPI,
I2C,
SDIO,
Zigbee,
AD,
DA,
I,
Q,
PWM,
Other,
}
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; }
若是驅動程序提供的標準配置項,不足以配置驅動,則能夠自行定製驅動配置頁,自行生成配置數據,驅動自行解析。
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內存變量名稱,驅動名稱和策略名稱等等信息。
驅動程序除了按設定的掃描時間週期執行外,還能夠把掃描時間設置爲0,表示不會自動運行。設置爲該模式的驅動,通常被策略程序直接調用而得以執行。
另外驅動還能夠設置爲Disabled,這樣該驅動任何方式的調用將被禁止,如該驅動不存在同樣。
能夠把YFIOs運行時想象成一個支持多任務的操做系統,這樣每一個策略的OnRun接口,均可以當成一個進程的Main函數,惟一不一樣的是,這個Main函數被調用的機制多種多樣(參見策略執行模式)。
策略就是一段代碼,一段標準的.NET Micro Framework程序,能夠根據項目的需求充分訪問.NET Micro Framework已有的開發資源(如各種庫函數),編寫任意功能的代碼模塊。
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系統不支持策略卸載)。
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接口以後,觸發該事件。
注意:策略並不只支持一種策略執行模式,同一個策略能夠配置多個執行模式,只要符合條件,該策略將會被調用。
策略除了按策略執行模式執行外,策略之間還能夠互相調用,而且還能夠直接調用指定名稱的驅動程序的接口函數。
策略在配置的時候,也能夠設置爲Disabled,這樣該策略的全部接口將沒法訪問,和該策略不存在同樣。
和驅動程序的擴展配置接口相同,請參見2.5.4項的介紹。
操做視頻演示:http://v.youku.com/v_show/id_XNDkxMzgyNTgw.html
操做演示視頻:http://v.youku.com/v_show/id_XNDg2MjMxODI4.html
設備運行視頻:http://v.youku.com/v_show/id_XNDg2MjM4MTQw.html
一、.NET Micro Framework 官方網址
http://www.microsoft.com/netmf/default.mspx
二、.NET Micro Framework官方博客
http://blogs.msdn.com/netmfteam/
三、中文博客
http://www.cnblogs.com/yefanqiu
四、葉帆科技
五、物聯網中間件技術開發論壇
從2012-12-21起YFIOs和YFHMI將開展爲期半年的免費試用活動,符合申請條件的用戶,將依次獲取YFIOs和YFHMI的試用機會。
申請表下載:http://sky-walker.com.cn/MFRelease/document/yfios_yfhmi_application.doc