RFID刷卡拍照,如果是傳統意義上的開發,我們一般需要Crowdsourced Security Testing道是什麼型號的RFID刷卡器,自己動手編寫一套讀寫RFID的代碼,用來讀取RFID標籤。網路攝影機驅動開發也是這樣的,先要知道網路攝影機驅動的協議,然後自己編寫讀取映像並顯示的代碼。
如果是windows平台,一般廠家還會提供dll等調用庫,這樣只需調用相關介面函數就能實現相關的功能,不過如果是嵌入式平台,就相對比較麻煩一些了,一般都需要根據通訊協定自行開發相關驅動程式。
無論採用何種辦法,我們實現了該功能。但是過了一段時間,RFID裝置換了,網路攝影機裝置也換了,那麼我們的大部分代碼一般都要作廢了,需要重新進行相關驅動的開發,如果這是已經安裝到現場的項目,臨時更換相關感應器裝置,那對開發廠家來說,真是一場夢魘。
而基於物聯網中介軟體平台進行這類程式開發,就會很好的規避這類問題。
(1)、平台內建相關驅動(也可以自己開發,後續複用)。
(2)、遠程配置,遠程部署,隨時更換驅動。
(3)、驅動和商務邏輯完全解耦合。
下面就以RFID刷卡拍照為例,介紹基於YFIOs物聯網中介軟體平台,如何進行相關程式的開發。
RFID和網路攝影機的驅動如何開發,我們本篇文章就不作介紹了,我們直接使用已經開發好的驅動(對驅動開發比較感興趣的網友,可以參見這篇文章:《YFIOs驅動開發指南》)。
RFID驅動配置
我們選用的易火眼的串口RFID驅動,只需如下配置即可。
(1)、建立使用者裝置,選擇YHY632的RFID讀卡機的驅動。
(2)、配置裝置參數,選擇裝置所接的串口,及配置串口參數。
(3)、其它參數都是預設,勾選變數自動添加,這樣使用者變數就不需要手動建立了。
變數自動添加(裝置名稱字:關鍵字)
網路攝影機驅動配置
選擇對應型號的驅動,設定串口號和串口參數,勾選變數自動添加選項。
該驅動的掃描周期需要設定為0,表示該驅動不會自動運行。
商務邏輯編程(策略開發)
商務邏輯相對簡單:先判斷是否刷了RFID卡,如果刷了,則進行拍照。
根據這種商務邏輯,為了降低資源的使用,我們採用事件方式觸發該策略的執行。也就是驅動執行一次完畢後,調用一次該策略,並向該策略傳遞驅動程式啟動並執行結果。
public int OnRun(IOperate op, StrategyMode mode, object arg)
{
int val = (int)arg;
if (val == 0)
{
Bitmap bmp = null;
//調用網路攝影機驅動,裝置名稱需要和配置的一致
int ret = op.DriverRun("CameraDriver", null);
if (ret == 0)
{
int hander = op.IOBC_Create(op.IORead("CameraDriver:BlockName"), 0);
if (hander >= 0)
{
int Count = op.IOBC_GetLength(hander);
byte[] dataSrc = new byte[Count];
op.IOBC_Read(hander, dataSrc, 0, Count);
op.IOBC_Close(hander);
bmp = new Bitmap(dataSrc, Bitmap.BitmapImageType.Jpeg);
bmp.Flush();
}
}
return 0;
}
以上代碼相對簡單,有幾個地方需要說明一下:
(1)、object arg參數跟調用的機制相關,和驅動綁定的事件中,會傳遞驅動執行的結果,如果是策略調用策略,相關的值根據實際需要進行傳遞。在本應用中,arg是一個整型數,為0表示驅動執行成功。
(2)、根據裝置驅動的名稱調用驅動。
(3)、大塊資料的互動,通過YFIOBC資料區塊完成。
策略編寫完畢後,需要進行載入:
執行模式為事件模式,和RFID驅動綁定。在驅動的OnRun函數執行完畢後調用該策略,並把執行結果以參數的方式傳遞給策略。
策略相關開發的博文請參見《YFIOs策略開發指南》。
部署運行
裝置更換
物聯網中間平台的最大優勢體現在裝置更換上,如果我們需要更換網路攝影機,則不需要更改任何代碼,直接更換網路攝影機驅動即可。
-----------------------------------------------------------------------------
MF簡介:http://blog.csdn.net/yefanqiu/article/details/5711770
MF資料:http://www.sky-walker.com.cn/News.asp?Id=25
技術論壇: http://www.yfiot.net