中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

發布時間:2021-09-17 10:39:34 來源:億速云 閱讀:120 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“serversuperio分享終端控制傳感器或設備形成回路控制的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“serversuperio分享終端控制傳感器或設備形成回路控制的示例分析”這篇文章吧。

21.1     概述

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

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

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

21.2     結構示意圖

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

控制端發起控制命令,用ServerSuperIO服務接口開發一個簡單的代理服務,通過服務連接器IServiceConnector接口與設備驅動進行交互,設備驅動接收到控制命令后下發給設備或傳感器,等待控制返回的確認消息,再原路返回給控制端。

21.3     通訊協議

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

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

我們演示的協議如下圖:

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

21.4     控制端

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

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

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函數。代碼如下圖:

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

代理服務中的Dev_ReceiveRequestInfos函數,通過服務連接器接口IServiceConnector,根據DeviceCode(addr)把信息傳遞給相應的設備驅動。代碼如下圖:

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

代理服務通過ServiceConnectorCallback和ServiceConnectorCallbackError函數接口接收設備驅動反饋的結果信息,如果中間出現異常會調用ServiceConnectorCallbackError,如果正常會調用ServiceConnectorCallback函數,ServiceConnectorCallback函數接口根據記錄的命令與IO通道的對應關系,再把結果發送給控制端。ServiceConnectorCallback代碼如下圖:

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

在這里邊有一個注意的地方,就是設備驅動在規定的時間內沒有反饋控制命令的確認信息,也就是傳感器沒有反饋相應的信息。這種情況要增加一個定時檢測服務,如果超時沒有反饋信息,發送給控制端相應的消息。代碼如下圖:

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

21.6     設備驅動

這個設備驅動與傳感器相對應,之間相互過行數據交互。設備驅動的RunServiceConnector接口負責接收代理服務Dev_ReceiveRequestInfos(OnServiceConnector)函數傳遞過來的命令信息。代碼如下圖:

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

有兩點說明:1.接收到命令數據后可以通過OnSendData函數立即下發數據信息,以設置的IP查找相應的IO通道,適用于自控模式。2. 接收到命令數據后放到this.Protocol.SendCache協議緩存中,等待下發命令,適用于輪詢、并發模式。

針對于返回的結果對象ServiceConnectorCallbackResult的isAsyn參數,如果為true,說明通過AsyncServiceConnectorCallback callback返回結果信息,也就是說要等待傳感器返回確認信息,并且設備驅動接收后再反饋到代理服務;如果為false,說明會立即反饋到代理服務,適用于傳遞數據信息而不管與傳感器是否交互成功。

可以在這個函數中把callback參數進行臨時保存,等待傳感器返回確認信息后在Communicate函數中觸發異步回調到代理服務。代碼如下圖:

serversuperio分享終端控制傳感器或設備形成回路控制的示例分析

以上是“serversuperio分享終端控制傳感器或設備形成回路控制的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

保康县| 增城市| 浮梁县| 宁远县| 沙洋县| 广灵县| 周至县| 丰顺县| 图木舒克市| 古浪县| 大洼县| 钟祥市| 江孜县| 隆子县| 磴口县| 普陀区| 博爱县| 广宁县| 剑阁县| 色达县| 青海省| 昌黎县| 岳普湖县| 新巴尔虎左旗| 永州市| 响水县| 拜城县| 平武县| 安远县| 和顺县| 奉节县| 拜泉县| 南部县| 饶阳县| 鹤壁市| 读书| 上杭县| 绥德县| 南安市| 贵定县| 手机|