這篇文章主要為大家展示了“serversuperio分享終端控制傳感器或設備形成回路控制的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“serversuperio分享終端控制傳感器或設備形成回路控制的示例分析”這篇文章吧。
成都創(chuàng)新互聯(lián)公司是專業(yè)的靖西網(wǎng)站建設公司,靖西接單;提供成都網(wǎng)站建設、網(wǎng)站設計,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行靖西網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
ServerSuperIO以前所做的工作逐步為形成回路控制或級聯(lián)控制打下基礎,例如:服務連接器和設備驅動連接器的開發(fā)與應用??傊?,是通過多種形式下發(fā)命令控制設備(驅動)或傳感器,云端控制站點或監(jiān)測點的傳感器、App或者其他終端控制傳感器、根據(jù)傳感器的采集數(shù)據(jù)控制另一個傳感器等。
下面介紹云端、App或者其他終端如何控制傳感器設備(傳感器控制傳感器類似,請參見:12.服務接口的開發(fā),以及與云端雙向交互)。根據(jù)通訊協(xié)議,結構化方案、不需要太多代碼即可完成相應的功能。效果如下圖:
控制端發(fā)起控制命令,用ServerSuperIO服務接口開發(fā)一個簡單的代理服務,通過服務連接器IServiceConnector接口與設備驅動進行交互,設備驅動接收到控制命令后下發(fā)給設備或傳感器,等待控制返回的確認消息,再原路返回給控制端。
有人問為什么不使用MQTT協(xié)議,那如何兼容不同設備和傳感器的協(xié)議?以于中國現(xiàn)實情況,顯然還不能達到統(tǒng)一標準的水平,在經(jīng)濟不好的情況下,企業(yè)也不可能投資替換掉原來的硬件設備。也不符合ServerSuperIO設計的原則,就是要搞協(xié)議無關性,任何標準或非標準的協(xié)議都可以集成進來。如果想過一條河,把橋修好、把索道搭好、把船擺好…具體怎么過河由你自己決定。
有人問ServerSuperIO都集成了什么協(xié)議?上面已經(jīng)給出了答案,另外我想說的是沒有任何一個框架可以包治百病。從相反的角度來考慮,如果像組態(tài)一樣把任何協(xié)議都加進來,企業(yè)又想拿出來多少的價值來對等交換呢,所以協(xié)議驅動還是交給大家來自己寫吧。
我們演示的協(xié)議如下圖:
控制端包括很多種:云端向下級發(fā)送控制命令、App或Pc機軟件連接服務發(fā)送控制命令等等。發(fā)送控制命令如下圖:
代理服務是通過ServerSuperIO的IService接口實現(xiàn),在繼承類中使用ServerSuperIO框架本身的單例模式開發(fā)代理服務,代碼如下:
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單例模式接收到數(shù)據(jù)信息,如果符合協(xié)議標準會把數(shù)據(jù)信息反饋給驅動程序的Communicate接口,ReceiveRequestInfos事件把數(shù)據(jù)信息傳遞給代理服務訂閱該事件的Dev_ReceiveRequestInfos函數(shù)。代碼如下圖:
代理服務中的Dev_ReceiveRequestInfos函數(shù),通過服務連接器接口IServiceConnector,根據(jù)DeviceCode(addr)把信息傳遞給相應的設備驅動。代碼如下圖:
代理服務通過ServiceConnectorCallback和ServiceConnectorCallbackError函數(shù)接口接收設備驅動反饋的結果信息,如果中間出現(xiàn)異常會調(diào)用ServiceConnectorCallbackError,如果正常會調(diào)用ServiceConnectorCallback函數(shù),ServiceConnectorCallback函數(shù)接口根據(jù)記錄的命令與IO通道的對應關系,再把結果發(fā)送給控制端。ServiceConnectorCallback代碼如下圖:
在這里邊有一個注意的地方,就是設備驅動在規(guī)定的時間內(nèi)沒有反饋控制命令的確認信息,也就是傳感器沒有反饋相應的信息。這種情況要增加一個定時檢測服務,如果超時沒有反饋信息,發(fā)送給控制端相應的消息。代碼如下圖:
這個設備驅動與傳感器相對應,之間相互過行數(shù)據(jù)交互。設備驅動的RunServiceConnector接口負責接收代理服務Dev_ReceiveRequestInfos(OnServiceConnector)函數(shù)傳遞過來的命令信息。代碼如下圖:
有兩點說明:1.接收到命令數(shù)據(jù)后可以通過OnSendData函數(shù)立即下發(fā)數(shù)據(jù)信息,以設置的IP查找相應的IO通道,適用于自控模式。2. 接收到命令數(shù)據(jù)后放到this.Protocol.SendCache協(xié)議緩存中,等待下發(fā)命令,適用于輪詢、并發(fā)模式。
針對于返回的結果對象ServiceConnectorCallbackResult的isAsyn參數(shù),如果為true,說明通過AsyncServiceConnectorCallback callback返回結果信息,也就是說要等待傳感器返回確認信息,并且設備驅動接收后再反饋到代理服務;如果為false,說明會立即反饋到代理服務,適用于傳遞數(shù)據(jù)信息而不管與傳感器是否交互成功。
可以在這個函數(shù)中把callback參數(shù)進行臨時保存,等待傳感器返回確認信息后在Communicate函數(shù)中觸發(fā)異步回調(diào)到代理服務。代碼如下圖:
以上是“serversuperio分享終端控制傳感器或設備形成回路控制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站欄目:serversuperio分享終端控制傳感器或設備形成回路控制的示例分析
URL標題:http://chinadenli.net/article12/ihesdc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、動態(tài)網(wǎng)站、關鍵詞優(yōu)化、電子商務、定制網(wǎng)站、手機網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)