亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

[連載]《C#通訊(串口和網絡)框架的設計與實現》-6.通訊控制器的設計

2019-11-14 13:44:45
字體:
來源:轉載
供稿:網友

目       錄

第六章           通訊控制器的設計... 2

6.1           控制器接口... 2

6.2           串口控制器... 3

6.3           網絡控制器... 5

6.4           通訊控制管理器... 9

6.5           遠程交互... 9

6.6           小結... 10

 

第六章     通訊控制器的設計

     經過前幾章的介紹,這章介紹通訊控制器。主要負責對設備驅動(IRunDevice)、IO通道(IIOChannel)進行協調、調度、以及事件做出響應,在此基礎上實現輪詢通訊模式、并發通訊模式和自控通訊模式的任務調度。由于串口和網絡硬件鏈路特性的原因以及通訊機制不一樣,所以通訊控制器的實現上也有很大差別。

6.1    控制器接口

     控制器內置一個線程負責對設備驅動和IO實例進行任務協調、調度,相當于在《第4章 設備管理器的設計》、《第5章 串口和網絡的IO設計》實現的基礎上構建了一個更高層次的協調機制,并實現設備與IO的匹配、不同的通訊機制。

     不管串口通訊控制器和網絡通訊控制器如何實現,都會繼承自統一的(IIOController)接口,接口定義的代碼如下:

public interface IIOController{       /// <summary>       /// 當然是否工作       /// </summary>       bool IsWorked { set; get; }       /// <summary>       /// IO控制器的關鍵字。       /// </summary>       string Key { get; }       /// <summary>       /// 啟動服務       /// </summary>       void StartService();       /// <summary>       /// 停止服務       /// </summary>       void StopService();       /// <summary>       /// IO控制器類型       /// </summary>       CommunicationType ControllerType { get; }}

     控制層次結構圖如下:

 

6.2    串口控制器

    每個(硬件)串口都對應一個串口控制器,每個串口控制器里都會有一個獨立的線程,也就是說用到多少個串口號就會有多少個控制器和線程。框架平臺可能會掛載多個設備驅動(插件),有可能一個設備驅動對應一個串口,也可能幾個設備驅動共用一個串口,那么也就是說串口控制器和設備驅動之間存在1對1或1對N的關系。結構示意圖如下:

 

    一個串口控制器內的所有設備設置的串口通訊參數都是一樣的,所以設備驅動(IRunDevice)接口的COM中的Port屬性、IO接口(IIOChannel)的Key屬性、以及串口控制器(IIOController)接口Key屬性是一致的,都用于標識串口號。既然一個串口控制器中的所有設備都共用一個硬件串口,就決定了所有設備驅動之間的任務調度只能采用輪詢模式,一個設備發送和接收操作完之后,再調度下一個設備驅動,設備驅動之間就是串行工作模式,避免一個串口控制器內多個設備驅動同時操作串口IO導致數據混亂,影響正常通訊。

    一個串口控制器內的設備驅動是串行工作模式,如果把所有設備驅動都設置成一個串口號,在一個串口控制器下串行調度,那么就會影響設備驅動的通訊效率,某個設備的調度周期的公式如下:

某個設備調度周期=(串口控制器所有設備數-1)* 單個設備驅動執行耗時

      這僅是一個理論值,實際應用中要比這個理論值要大,因為涉及到不類型的設備驅動共用一個串口號,在一個串口控制器下工作,處理的數據流程、方式不同,例如:有可能數據保存在TXT文件中、有可能保存在SQL數據庫中、有可能保存在NoSQL數據庫中等等。

     有人會想,豈不是在一個串口下掛載的設備越多效率越低,的確是這樣的。但是,多個串口控制器之間是并行工作模式。如果現場環境對通訊效率有要求的話,可以增加串口服務器,也就是增加可用的串口硬件電路,把N個設備驅動平衡負載到不同的串口上,增加并行運行的串口控制器的節點,進而提高框架平臺的運行效率。

    但是,這樣解決之后也帶來一定的風險和瓶頸,就是對于數據的存儲,如果多個并行的數據流同時向一個單線程的存儲介質寫數據,那么又會造成互斥的現象,甚至造成意想不到的結果或異常,如下圖:

 

     如果同時向Sql Server、Oracle、MySQL等數據庫存儲數據,那么是沒有問題的;如果采用文本文件、桌面數據庫等存儲數據,那么可能存在問題,可以分多個文件進行保存操作。DCS系統大多采用PI(Plant Information System)數據庫??傊鳛橐粋€系統來講,需要整體設計、考慮,這塊需要特別注意。

6.3    網絡控制器

     框架平臺只有一個網絡控制器,網絡控制器內有一個獨立的線程負責對所有網絡設備驅動進行輪詢、并發、自控模式通訊調度。輪詢通訊模式與串口控制器類似,只是串行的調度所有網絡設備驅動,但是框架只有一個網絡控制器,不能通過增加網絡控制器來提高通訊效率,這種模式是網絡通訊調度雞肋;并發通訊模式,線程會通過控制器中的線程集中發送所有設備的請求命令數據,接收數據是通過IO異步監聽來完成,異步接收到數據后再把數據分發到設備驅動的RunIODevice接口,進行數據處理;自控通訊模式,發送命令數據的職能移交給了設備驅動本身,可以通過定時器來完成發送命令數據的功能,線程不再負責發送命令數據,接收數據與并發通訊模式一樣。網絡控制器的內部示意圖如下:

 

     針對網絡通訊,輪詢通訊模式是不能發揮其優勢的,所以增加了并發通訊模式和自控通訊模式。后兩種通訊模式會用到《第4章 設備驅動管理器的設計》的“4.6   設備計數器的特殊用處”的設計,設備驅動計數器如果大于等于某個值的時候,就會通過RunIODevice(new byte[]{})驅動當前設備,執行整個設備處理流程,以改變設備驅動的運行狀態,實際上當前設備驅動處于“通訊中斷”狀態。

    發送數據代碼如下:

public void ControllerSend(IRunDevice dev, byte[] data){       int counter = DeviceManager.GetInstance().GetCounter(dev.DeviceParameter.DeviceID.ToString());       int sendNum = sessionSocketManager.GetInstance().Send(dev.DeviceParameter.NET.Remoteip, data);       if (sendNum == data.Length && sendNum != 0)       {              DeviceMonitorLog.WriteLog(dev.DeviceParameter.DeviceName, "發送請求數據");              Interlocked.Increment(ref counter);       }       else       {              Interlocked.Increment(ref counter);              DeviceMonitorLog.WriteLog(dev.DeviceParameter.DeviceName, "嘗試發送數據失敗");       }       dev.ShowMonitorIOData(data, "發送");       if (counter >= 3)       {              try              {                     dev.RunIODevice(new byte[] { });              }              catch (Exception ex)              {                     DeviceMonitorLog.WriteLog(dev.DeviceParameter.DeviceName, ex.Message);                     GeneralLog.WriteLog(ex);              }              Interlocked.Exchange(ref counter, 0);       }       DeviceManager.GetInstance().SetCounter(dev.DeviceParameter.DeviceID.ToString(), counter);}

     異步接收、分數據的代碼如下:

PRivate void NETDeviceController_ReceiveSocketData(object source, ReceiveSocketDataArgs e){       if (GlobalProperty.GetInstance().ControlMode == ControlMode.Parallel || GlobalProperty.GetInstance().ControlMode == ControlMode.Self)       {              int counter = 0;              IRunDevice dev = null;              IRunDevice[] list = DeviceManager.GetInstance().GetDevices(e.RemoteIP, CommunicationType.NET);              for (int i = 0; i < list.Length; i++)              {                     dev = list[i];                     if (String.CompareOrdinal(dev.DeviceParameter.NET.RemoteIP, e.RemoteIP) == 0)                     {                            dev.ShowMonitorIOData(e.ReceiveData, "接收");                            dev.AsyncRunIODevice(e.ReceiveData);                            counter = DeviceManager.GetInstance().GetCounter(dev.DeviceParameter.DeviceID.ToString());                            Interlocked.Decrement(ref counter);                            if (counter < 0)                            {                                   Interlocked.Exchange(ref counter, 0);                            }                  DeviceManager.GetInstance().SetCounter(dev.DeviceParameter.DeviceID.ToString(), counter);                     }              }       }}

6.4    通訊控制管理器

    通訊控制管理器負責對串口控制器和網絡控制器進行管理,實際上是對Dictionary<Key,Value>進行的封裝,所有涉及到操作控制器的地方都是通過控制管理器來完成的。IIOControllerManager<TKey, TValue>通訊控制管理器的接口定義如下:

 

6.5    遠程交互

     在了解串口控制器和網絡控制器的基本原理和功能后,還要考慮到一個應用場景:控制器不僅僅要與硬件進行數據交互,還有可能要把采集上來的數據轉發到其他服務器或節點上,也就是框架平臺要具備路由的功能,整合設備驅動采集上來的數據,進行打包、轉發。

    從這個應用場景來看,在開發設備驅動的時候,不適合在設備驅動的處理流程中進行轉發、多業務處理,受環境、網絡、業務復雜度的影響可能會阻塞控制器的調度,影響框架的整體運行效率。

    在物聯網建設中,多級互聯、逐層轉發是很常見技術需求。為了解決這個現實問題,框架平臺提供了IAppService應用服務接口,二次開發者可以把設備驅動中的數據信息封裝后傳入到IAppService接口中,可以在這里實現緩存、轉發等具體的業務服務。這樣設計的主要目的是不影響框架平臺實時的數據采集,保證數據源的穩定性。

    IAppService具體的設計和應用將來《第7章 外部接口的設計》中進行詳細介紹。

6.6    小結

     通訊控制器實現這后,理論上框架平臺就能夠跑起來了,但是距離我們開始設計的目標還差很多工作要做,還不能為二次開發提供很大的便利。在后續的設計中,慢慢的會把框架平臺豐富起來。

 

作者:唯笑志在

Email:504547114@QQ.com

QQ:504547114

.NET開發技術聯盟:54256083

文檔下載:http://pan.baidu.com/s/1pJ7lZWf

官方網址:http://www.bmpj.net


上一篇:介紹.NETCore

下一篇:C#基礎04

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美中在线观看| www.欧美免费| 在线国产精品播放| 久久伊人色综合| 中文字幕综合在线| 美女撒尿一区二区三区| 国产精品久久久久久久久久新婚| 日韩精品在线视频美女| 国产精品久久久久久网站| 日韩国产高清污视频在线观看| 欧美综合激情网| 日韩福利在线播放| 国产精品久久久av久久久| 欧美中文字幕视频| 国产精品美女免费看| 国产精品美女午夜av| 久久久久久久国产精品| 亚洲欧美精品中文字幕在线| 国内精品久久久久久| 69视频在线免费观看| 亚洲视频欧洲视频| 57pao国产精品一区| 91综合免费在线| 成人国产精品一区| 亚洲欧美制服综合另类| 国产精品福利在线观看网址| 欧美大尺度电影在线观看| 中文字幕久热精品视频在线| 亚洲精品欧美一区二区三区| 2019中文字幕在线免费观看| 国产日韩精品视频| 亚洲视频视频在线| 欧美国产亚洲精品久久久8v| 欧美夫妻性生活xx| 亚洲成人黄色在线观看| 欧美人交a欧美精品| 久久久久久91香蕉国产| 成人免费观看网址| 成人亚洲欧美一区二区三区| 国产成人一区二区在线| 国产精品久久久久久久久久久久久久| 久久久久久久97| 国产成人高潮免费观看精品| 亚洲激情成人网| 欧美大尺度激情区在线播放| 亚洲视频在线观看| 久久久久久久久久久国产| 午夜精品久久久久久久99热| 欧美成人在线免费视频| 亚洲精品成人久久| 国产区精品视频| 这里只有视频精品| 国产专区精品视频| 免费91麻豆精品国产自产在线观看| 欧美精品999| 亚洲国产成人精品久久| 亚洲精品自拍视频| 久久香蕉精品香蕉| 亚洲在线免费看| 久久99久国产精品黄毛片入口| 日韩女在线观看| 日韩性生活视频| 日韩美女在线观看一区| 51ⅴ精品国产91久久久久久| 国产aⅴ夜夜欢一区二区三区| 久久久久久有精品国产| 精品夜色国产国偷在线| 国产亚洲欧美日韩美女| 色婷婷**av毛片一区| 国产精品www网站| 欧美午夜视频一区二区| 国内外成人免费激情在线视频| 欧美日韩国产在线| 清纯唯美亚洲激情| 国产在线视频欧美| 国产深夜精品福利| 国产成人极品视频| 欧美日韩成人精品| 91精品91久久久久久| 欧美综合第一页| 亚洲精品一区久久久久久| 国产不卡在线观看| 亚洲丝袜在线视频| 26uuu亚洲国产精品| 精品久久久久久久中文字幕| 91精品在线观| 久久成人18免费网站| 国产精品h在线观看| 精品久久久久久中文字幕一区奶水| 韩剧1988在线观看免费完整版| 热久久免费国产视频| 国产精品福利在线| 国产69精品久久久久久| 国产福利精品在线| 日韩精品福利在线| 人妖精品videosex性欧美| 久久成人18免费网站| 欧美性xxxxhd| 久久久国产一区| 亚洲精品免费av| 欧美极品少妇全裸体| 91久久久久久久久久久| 日日狠狠久久偷偷四色综合免费| 精品女同一区二区三区在线播放| 国产日产久久高清欧美一区| 国产成人精品一区二区三区| 国产精品亚洲片夜色在线| 97国产精品视频人人做人人爱| 中文字幕日韩在线视频| 日韩在线播放一区| 亚洲美女av电影| 欧美成人午夜影院| 97久久精品国产| 国产精品99久久久久久人| 亚洲精品福利资源站| 国产香蕉一区二区三区在线视频| 欧美日韩国产黄| 亚洲护士老师的毛茸茸最新章节| 精品无人区乱码1区2区3区在线| 亚洲影院色无极综合| 欧美国产一区二区三区| 中文字幕无线精品亚洲乱码一区| 91chinesevideo永久地址| 欧美老女人bb| 国产999精品视频| 欧美日韩在线观看视频| 日韩精品丝袜在线| 亚洲人成绝费网站色www| 2020国产精品视频| 久久久久免费视频| 亚洲欧美日韩图片| 久久韩剧网电视剧| 国产精品黄色影片导航在线观看| 欧美理论电影在线播放| 日韩久久免费电影| 疯狂蹂躏欧美一区二区精品| 国产精品视频在线播放| 欧美在线视频观看免费网站| 国产成人在线亚洲欧美| 欧美一级成年大片在线观看| 亚洲精品美女久久久久| 91在线视频精品| 狠狠久久五月精品中文字幕| 91精品久久久久久久久久久| 久久久国产在线视频| 亚洲成人激情在线观看| 97avcom| 国产亚洲成精品久久| 91精品国产综合久久久久久久久| 欧美高清自拍一区| 另类专区欧美制服同性| 最新国产成人av网站网址麻豆| 精品视频www| 日韩av在线精品| 成人伊人精品色xxxx视频| 91理论片午午论夜理片久久| 2019中文在线观看| 一本一本久久a久久精品综合小说| 亚洲在线免费观看| 久久久久久999| 68精品久久久久久欧美| 亚洲电影免费观看高清完整版在线| 欧美色道久久88综合亚洲精品| 羞羞色国产精品|