首頁 >後端開發 >C#.Net教程 >共享終端控制感測器或設備,形成迴路控制實例

共享終端控制感測器或設備,形成迴路控制實例

零下一度
零下一度原創
2017-06-23 15:58:221866瀏覽

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.網路通訊控制器分組,提升互動的負載平衡能力。 v3.6.6 版本發布######### #####

以上是共享終端控制感測器或設備,形成迴路控制實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn