《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 15.?dāng)?shù)據(jù)持久化接口的使用。附:3.2發(fā)布與版本更新說明。
1.C#跨平臺物聯(lián)網(wǎng)通訊框架ServerSuperIO(SSIO)介紹
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》1.4種通訊模式機制。
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》2.服務(wù)實例的配置參數(shù)說明
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 3.設(shè)備驅(qū)動介紹
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》-4.如開發(fā)一套設(shè)備驅(qū)動,同時支持串口和網(wǎng)絡(luò)通訊。
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 5.輪詢通訊模式開發(fā)及注意事項。
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 6.并發(fā)通訊模式開發(fā)及注意事項
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 7.自控通訊模式開發(fā)及注意事項
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 8.單例通訊模式開發(fā)及注意事項
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 9. 協(xié)議過濾器,解決一包多發(fā)、粘包、冗余數(shù)據(jù)
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 10.持續(xù)傳輸大塊數(shù)據(jù)流的兩種方式(如:文件)
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 11.實現(xiàn)設(shè)備(驅(qū)動)與設(shè)備(驅(qū)動)交互和級聯(lián)控制。
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 12.服務(wù)接口的開發(fā),以及與云端雙向交互
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 13.自定義視圖顯示接口開發(fā),滿足不同的顯示需求
《連載 | 物聯(lián)網(wǎng)框架ServerSuperIO教程》- 14.配制工具介紹,以及設(shè)備驅(qū)動、視圖驅(qū)動、服務(wù)實例的掛載
ServerSuperIO 3.2更新說明:
1.增加IDataPersistence數(shù)據(jù)持久化接口,可以以多種形式存儲設(shè)備的參數(shù)和實時數(shù)據(jù)。現(xiàn)在僅支持Xml序列化的方式,后期會支持MongoDB、influxdb和實時數(shù)據(jù)庫(類似PI)等。
2.增加r配制參數(shù)ComNullInterval和NetNullInterval等,輪詢模式下,串口和網(wǎng)絡(luò)IO通道為空的情況下,中斷時間間隔。
下載地址:http://pan.baidu.com/s/1c1ZZLOO
更新說明地址:http://www.bmpj.net/thread-36-1-1.html
目 錄
15.?dāng)?shù)據(jù)持久化接口的使用... 2
15.1 概述... 2
15.2 定義IDataPersistence數(shù)據(jù)持久化接口... 2
15.3 使用IDataPersistence數(shù)據(jù)持久化接口... 5
15.?dāng)?shù)據(jù)持久化接口的使用
15.1 概述
ServerSuperIO 3.2版本以前,設(shè)備數(shù)據(jù)僅支持Xml序列化的方式,如果以其他方式存儲數(shù)據(jù),那么只能把持久化操作寫在設(shè)備驅(qū)動中,本質(zhì)上失去了模塊化的靈活性。3.2 版本以后增加了數(shù)據(jù)持久化接口,方便支持多種形式存儲設(shè)備的參數(shù)數(shù)據(jù)和實時數(shù)據(jù),3.2版本里現(xiàn)在僅支持Xml序列化的方式,后期會支持MongoDB、influxdb和實時數(shù)據(jù)庫(類似PI)等
15.2 定義IDataPersistence數(shù)據(jù)持久化接口
1.接口定義
凡是涉及到不同數(shù)據(jù)存儲方式的都可以繼承IDataPersistence接口,具體代碼定義發(fā)下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | public interface IDataPersistence { /// <summary> /// 連接數(shù)據(jù)源 /// </summary> void Connect(); /// <summary> /// 選擇數(shù)據(jù)對象 /// </summary> /// <param name="devid"></param> /// <param name="objType"></param> /// <returns></returns> object Select( string devid, Type objType); /// <summary> /// 插入數(shù)據(jù)對象 /// </summary> /// <param name="devid"></param> /// <param name="obj"></param> void Insert( string devid, object obj); /// <summary> /// 更新數(shù)據(jù)對象 /// </summary> /// <param name="devid"></param> /// <param name="obj"></param> void Update( string devid, object obj); /// <summary> /// 刪除數(shù)據(jù)對象 /// </summary> /// <param name="devid"></param> /// <param name="obj"></param> void Delete( string devid, object obj); /// <summary> /// 判斷是否存在 /// </summary> /// <param name="devid"></param> /// <param name="obj"></param> /// <returns></returns> bool Exist( string devid, object obj); } |
2.接口實現(xiàn)形式
如果以MongoDB、influxdb和實時數(shù)據(jù)庫,那么都可以繼承IDataPersistence接口,下面以Xml存儲數(shù)據(jù)為例,代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | public class XmlPersistence:IXmlPersistence { public void Connect() {} public object Select( string devid, Type objType) { string path = GetSavePath(devid,objType); return SerializeUtil.XmlDeserailize(path, objType); } public void Insert( string devid, object obj) { string path = GetSavePath(devid,obj.GetType()); SerializeUtil.XmlSerialize(path, obj); } public void Update( string devid, object obj) { this .Insert(devid, obj); } public void Delete( string devid, object obj) { string path = GetSavePath(devid,obj.GetType()); if (System.IO.File.Exists(path)) { System.IO.File.Delete(path); } } public bool Exist( string devid, object obj) { string path = GetSavePath(devid, obj.GetType()); return System.IO.File.Exists(path); } ...... } |
15.3 使用IDataPersistence數(shù)據(jù)持久化接口
ServerSuperIO框架二次開發(fā)的設(shè)備驅(qū)動涉及到兩類數(shù)據(jù):設(shè)備參數(shù)和實時數(shù)據(jù)。這兩類數(shù)據(jù)都對應(yīng)著基類:DeviceParameter和DeviceDynamic。每個設(shè)備驅(qū)動可能對應(yīng)著不同的設(shè)備參數(shù)(系數(shù)等)和實時數(shù)據(jù)(溫度、濕度、流量等),因為涉及到不同的硬件設(shè)備和傳感器??梢苑謩e繼承DeviceParameter和DeviceDynamic兩個基類,這兩個基類都具有InitDataPersistence(IDataPersistence dataPersistence)接口,實現(xiàn)不同的數(shù)據(jù)持久化存儲接口,并進行Save、Load和Delete操作。
具體定義方法,如下代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class DeviceDyn:DeviceDynamic { public DeviceDyn() : base () { this .InitDataPersistence( new XmlPersistence()); } public override string GetAlertState() { throw new NotImplementedException( "無報警信息" ); } public float Flow{ set ; get ;} } |
具體使用方法,如下代碼:
1 2 3 4 | DeviceDyn dyn= new DeviceDyn(); dyn.Save(); //保存 dyn.Load(); //加載 dyn.Delete(); //刪除 |
注:this.InitDataPersistence()不進行此操作,默認(rèn)使用XmlPersistence進行數(shù)據(jù)持久化。
1.[連載]《C#通訊(串口和網(wǎng)絡(luò))框架的設(shè)計與實現(xiàn)》
2.[開源]C#跨平臺物聯(lián)網(wǎng)通訊框架ServerSuperIO(SSIO)介紹
2.應(yīng)用SuperIO(SIO)和開源跨平臺物聯(lián)網(wǎng)框架ServerSuperIO(SSIO)構(gòu)建系統(tǒng)的整體方案