分享終端控制感應器或裝置,形成迴路控制執行個體

來源:互聯網
上載者:User

21.1 概述

ServerSuperIO以前所做的工作逐步為形成迴路控制或級聯控制打下基礎,例如:服務連接器和裝置驅動連接器的開發與應用。總之,是通過多種形式下發命令控制裝置(驅動)或感應器,雲端控制網站或監測點的感應器、App或者其他終端控制感應器、根據感應器的採集資料控制另一個感應器等。

下面介紹雲端、App或者其他終端如何控制感應器裝置(感應器控制感應器類似,請參見:12.服務介面的開發,以及與雲端雙向互動)。根據通訊協議,結構化方案、不需要太多代碼即可完成相應的功能。效果如:

21.2 結構

控制端發起控制命令,用ServerSuperIO服務介面開發一個簡單的代理服務,通過服務連接器IServiceConnector介面與裝置驅動進行互動,裝置驅動接收到控制命令後下發給裝置或感應器,等待控制返回的確認訊息,再原路返回給控制端。

21.3 通訊協議

有人問為什麼不使用MQTT協議,那如何相容不同裝置和感應器的協議?以於中國現實情況,顯然還不能達到統一標準的水平,在經濟不好的情況下,企業也不可能投資替換掉原來的硬體裝置。也不符合ServerSuperIO設計的原則,就是要搞協議無關性,任何標準或非標準的協議都可以整合進來。如果想過一條河,把橋修好、把索道搭好、把船擺好…具體怎麼過河由你自己決定。

有人問ServerSuperIO都整合了什麼協議?上面已經給出了答案,另外我想說的是沒有任何一個架構可以包治百病。從相反的角度來考慮,如果像組態一樣把任何協議都加進來,企業又想拿出來多少的價值來對等交換呢,所以協議驅動還是交給大家來自己寫吧。

我們示範的協議如:

21.4 控制端

控制端包括很多種:雲端向下級發送控制命令、App或Pc機軟體串連服務發送控制命令等等。發送控制命令如:

21.5 代理服務(SSIO服務介面)

代理服務是通過ServerSuperIO的IService介面實現,在繼承類中使用ServerSuperIO架構本身的單例模式開發代理服務,代碼如下:

public override void StartService()        {            string devId = "ControlDeviceService";            Driver dev = new Driver();            dev.ReceiveRequestInfos += Dev_ReceiveRequestInfos;            dev.DeviceParameter.DeviceName = "控制裝置磁碟機";            dev.DeviceParameter.DeviceAddr = 0;            dev.DeviceParameter.DeviceID = devId;            dev.DeviceParameter.DeviceCode = "";            dev.DeviceDynamic.DeviceID = devId;            dev.DeviceParameter.NET.RemoteIP = "127.0.0.1";            dev.DeviceParameter.NET.RemotePort = 9600;            dev.DeviceParameter.NET.ControllerGroup = "LocalGroup";            dev.CommunicateType = CommunicateType.NET;            dev.Initialize(devId);            IServer server = new ServerManager().CreateServer(new ServerConfig()            {                ServerName = "控制裝置服務",                ListenPort=6670,                ComReadTimeout = 1000,                ComWriteTimeout = 1000,                NetReceiveTimeout = 1000,                NetSendTimeout = 1000,                ControlMode = ControlMode.Singleton,                SocketMode = SocketMode.Tcp,                StartReceiveDataFliter = false,                ClearSocketSession = false,                StartCheckPackageLength = false,                CheckSameSocketSession = false,            });            server.AddDeviceCompleted += server_AddDeviceCompleted;            server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;            server.SocketConnected += server_SocketConnected;            server.SocketClosed += server_SocketClosed;            server.Start();            server.AddDevice(dev);        }

dev.ReceiveRequestInfos事件是控制驅動繼承ServerSuperIO架構中RunDevice驅動類擴充的事件介面,ServerSuperIO單例模式接收到資料資訊,如果符合協議標準會把資料資訊反饋給驅動程式的Communicate介面,ReceiveRequestInfos事件把資料資訊傳遞給代理服務訂閱該事件的Dev_ReceiveRequestInfos函數。代碼如:

代理服務中的Dev_ReceiveRequestInfos函數,通過服務連接器介面IServiceConnector,根據DeviceCode(addr)把資訊傳遞給相應的裝置驅動。代碼如:

代理服務通過ServiceConnectorCallback和ServiceConnectorCallbackError函數介面接收裝置驅動反饋的結果資訊,如果中間出現異常會調用ServiceConnectorCallbackError,如果正常會調用ServiceConnectorCallback函數,ServiceConnectorCallback函數介面根據記錄的命令與IO通道的對應關係,再把結果發送給控制端。ServiceConnectorCallback代碼如:

在這裡邊有一個注意的地方,就是裝置驅動在規定的時間內沒有反饋控制命令的確認資訊,也就是感應器沒有反饋相應的資訊。這種情況要增加一個定時檢測服務,如果逾時沒有反饋資訊,發送給控制端相應的訊息。代碼如:

21.6 裝置驅動

這個裝置驅動與感應器相對應,之間相互過行資料互動。裝置驅動的RunServiceConnector介面負責接收代理服務Dev_ReceiveRequestInfos(OnServiceConnector)函數傳遞過來的命令資訊。代碼如:

有兩點說明:1.接收到命令資料後可以通過OnSendData函數立即下發資料資訊,以設定的IP尋找相應的IO通道,適用於自控模式。2. 接收到命令資料後放到this.Protocol.SendCache協議緩衝中,等待下發命令,適用於輪詢、併發模式。

針對於返回的結果對象ServiceConnectorCallbackResult的isAsyn參數,如果為true,說明通過AsyncServiceConnectorCallback callback返回結果資訊,也就是說要等待感應器返回確認資訊,並且裝置驅動接收後再反饋到代理服務;如果為false,說明會立即反饋到代理服務,適用於傳遞資料資訊而不管與感應器是否互動成功。

可以在這個函數中把callback參數進行臨時儲存,等待感應器返回確認資訊後在Communicate函數中觸發非同步回調到代理服務。代碼如:

21.7 Demo說明

開啟兩個TestDevice程式,一個作為裝置感應器,一個作為控制端,DeviceCode要以應;TestDeviceDriver是裝置驅動,在服務執行個體中載入,我用的是自控模式,使用TestSelfMain項目;ControlDeviceService是代理服務,在TestSelfMain中載入。具體參見工程代碼:

備忘:將來我們的大資料平台,也可以通這種模式下發控制命令到網站。

1.[連載]《C#通訊(串口和網路)架構的設計與實現》

2.[開源]C#跨平台物聯網通訊架構ServerSuperIO(SSIO)介紹

2.應用SuperIO(SIO)和開源跨平台物聯網架構ServerSuperIO(SSIO)構建系統的整體方案

3.C#工業物聯網和整合系統解決方案的技術路線(資料來源、資料擷取、資料上傳與接收、ActiveMQ、Mongodb、WebApi、手機App)

5.ServerSuperIO開源地址:

物聯網&整合技術(.NET) QQ群:54256083

下載地址:

1.C#跨平台物聯網通訊架構ServerSuperIO(SSIO)介紹

《連載 | 物聯網架構ServerSuperIO教程》1.4種通訊模式機制。

《連載 | 物聯網架構ServerSuperIO教程》2.服務執行個體的配置參數說明

《連載 | 物聯網架構ServerSuperIO教程》- 3.裝置驅動介紹

《連載 | 物聯網架構ServerSuperIO教程》-4.如開發一套裝置驅動,同時支援串口和網路通訊。

《連載 | 物聯網架構ServerSuperIO教程》- 5.輪詢通訊模式開發及注意事項。

《連載 | 物聯網架構ServerSuperIO教程》- 6.並發通訊模式開發及注意事項

《連載 | 物聯網架構ServerSuperIO教程》- 7.自控通訊模式開發及注意事項

《連載 | 物聯網架構ServerSuperIO教程》- 8.單例通訊模式開發及注意事項

《連載 | 物聯網架構ServerSuperIO教程》- 9. 協議過濾器,解決一包多發、粘包、冗餘資料

《連載 | 物聯網架構ServerSuperIO教程》- 10.持續傳輸大塊資料流的兩種方式(如:檔案)

《連載 | 物聯網架構ServerSuperIO教程》- 11.實現裝置(驅動)與裝置(驅動)互動和級聯控制。

《連載 | 物聯網架構ServerSuperIO教程》- 12.服務介面的開發,以及與雲端雙向互動

《連載 | 物聯網架構ServerSuperIO教程》- 13.自訂視圖顯示介面開發,滿足不同的顯示需求

《連載 | 物聯網架構ServerSuperIO教程》- 14.配製工具介紹,以及裝置驅動、視圖驅動、服務執行個體的掛載

《連載 | 物聯網架構ServerSuperIO教程》- 15.資料持久化介面的使用

《連載 | 物聯網架構ServerSuperIO教程》- 16.OPC Server的使用步驟

《連載 | 物聯網架構ServerSuperIO教程》- 17.支援即時資料庫,高並發儲存測點資料

《連載 | 物聯網架構ServerSuperIO教程》- 18.整合OPC Client,及使用步驟

《連載 | 物聯網架構ServerSuperIO教程》-19.裝置驅動和OPC Client支援mysql、oracle、sqlite、sqlserver的持久化

《物聯網架構ServerSuperIO教程》-20.網路通訊控制器分組,提高互動的Server Load Balancer能力。v3.6.6 版本發布

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.