《連載 | 物聯網架構ServerSuperIO教程》- 5.輪詢通訊模式開發及注意事項。附:網友製作的類庫說明(CHM)

來源:互聯網
上載者:User

標籤:cell   const   ima   模型   sam   toc   byte   index   存在   

感謝唯笑志在分享
原博主原地址:
http://www.cnblogs.com/lsjwq/

目       錄

5. 輪詢通訊模型開發及注意事項... 2

4.1           概述... 2

4.2           通訊機制說明... 2

4.3           裝置驅動開發注意事項... 3

4.3.1    即時發送資料... 3

4.3.2    優先發送其他資料... 3

4.4           宿主程式服務執行個體配置注意事項... 4

4.5           輪詢運行效果... 4

5. 輪詢通訊模型開發及注意事項    
4.1    概述

      輪詢通訊模式是SuperIO最早且唯一的通訊模式,在此基礎上增加了自控模式、併發模式。ServerSuperIO架構除了具備這3種通訊模式外,還具備單例模式,後邊會對這些通訊模式進行詳細介紹。

      剛參加工作的時候,也不知道什麼通訊模式,但是當時工業領域的通訊環境非常複雜,調製解調的通訊鏈路,300傳輸速率的傳輸速率,受地質、電纜等強電磁幹擾,經常會出現資料被幹擾的現象。當時也沒有所謂的互連網技術,為了保障通訊的穩定性,只能進行輪詢的通訊模式。

4.2    通訊機制說明

      這是架構最早的運行模式,串口和網路通訊時都可以使用這種控制模式。當有多個裝置 串連到通訊平台時,通訊平台會輪詢調度裝置進行通訊任務。某一時刻只能有一個裝置發送請求命令、等待接收返回資料,這個裝置完成發送、接收(如果遇到逾時 情況,則自動返回)後,下一個裝置才進行通訊任務,依次輪詢裝置。

      應用情境是這樣的,服務端與裝置進行通訊遵循呼叫應答的方式,也就是IO可用的情況下,服務端先發起通訊命令請求,裝置根據命令資訊,檢驗通過後返回資料給服務端。這種通訊模式很好理解,每個裝置的通訊都遵循排隊的原則。但是如果某個裝置的命令需要及時發送,怎麼辦?ServerSuperIO架構是支援裝置優先順序別調度的,例如:對某個裝置要進行即時的檢測,需要連續發送命令,那麼就需要對裝置進行進階別設定,發送請求資料命令。

     通訊結構如:

 

4.3    裝置驅動開發注意事項4.3.1    即時發送資料

     ServerSuperIO架構會輪詢調度所有裝置,以呼叫應答的方式向裝置發送請求即時資料命令,對於同一個裝置的請求即時資料命令一般相對固定。在調度某一具體裝置驅動的時候,會調用固定的調用IRunDevice驅動介面的GetConstantCommand函數,以獲得請求即時資料的命令。代碼如下:

1234567 public override byte[] GetConstantCommand(){            byte[] data = this.Protocol.DriverPackage<String>("0""61"null);            string hexs = BinaryUtil.ByteToHex(data);            OnDeviceRuningLog("發送>>"+hexs);            return data; }

      this.Protocol.DriverPackage驅動調用61命令獲得要發送的命令,並返回byte[]數組,ServerSuperIO獲得資料後會自動通過IO介面下發命令資料。如果返回null類型,系統不進行下發操作。

4.3.2    優先發送其他資料

       對於一個裝置不可能只有一個讀即時資料的命令,可能還存在其他命令進行互動,例如:讀參數、即時校準等,這時就需要進行優先順序調度發送資料資訊。可以通過兩種方式讓ServerSuperIO架構優先調度該裝置驅動。

  1. 把命令增加發送資料緩衝中,架構從緩衝中獲得資料後會自動刪除,代碼如下:
1 this.Protocol.SendCache.Add("讀參數",readParaBytes);

      2.設定裝置的優先順序別屬性,代碼如下:

1 this.DevicePriority=DevicePriority.Priority;
4.4    宿主程式服務執行個體配置注意事項

      在宿主程式中建立服務執行個體的時候,需要把服務執行個體的配置參數設定為輪詢通訊模式,並啟動服務執行個體,把執行個體化的裝置驅動增加到該服務執行個體中。代碼如下:

12345678910111213141516171819 DeviceDriver dev1 = new DeviceDriver();dev1.DeviceParameter.DeviceName = "串口裝置1";dev1.DeviceParameter.DeviceAddr = 0;dev1.DeviceParameter.DeviceID = "0";dev1.DeviceDynamic.DeviceID = "0";dev1.DeviceParameter.COM.Port = 1;dev1.DeviceParameter.COM.Baud = 9600;dev1.CommunicateType = CommunicateType.COM;dev1.Initialize("0");IServer server = new ServerFactory().CreateServer(new ServerConfig(){      ServerName = "服務執行個體1",      SocketMode = SocketMode.Tcp,      ControlMode = ControlMode.Loop,      CheckSameSocketSession = false,      StartCheckPackageLength = false,});server.Start();server.AddDevice(dev1);

     ControlMode = ControlMode.Loop代碼是設定服務執行個體調度裝置為輪詢控制模式。

4.5    輪詢運行效果

1.圖片

 

2.視頻

 

 

附:群裡網友製作的類庫說明(CHM),網友名稱:norman33,QQ號:235936468。感謝norman33,共建美好社區。:http://pan.baidu.com/s/1qXDVIvq

《連載 | 物聯網架構ServerSuperIO教程》- 5.輪詢通訊模式開發及注意事項。附:網友製作的類庫說明(CHM)

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.