[连载]《C#通讯(串口和网络)框架的统筹与实现》- 6.通信控制器的设计

6.6           小结… 10

6.6    小结

    
通信控制器完结那后,理论上框架平台就可见跑起来了,但是距离我们开始筹划的对象还差很多办事要做,还不可能为二次开发提供十分大的福利。在继续的陈设中,稳步的会把框架平台丰硕起来。

 

笔者:唯笑志在

Email:504547114@qq.com

QQ:504547114

.NET开发技术联盟:54256083

文书档案下载:http://pan.baidu.com/s/1pJ7lZWf

合法国网球公开始竞赛址:http://www.bmpj.net

6.3    互连网控制器

    
框架平台唯有1个互联网控制器,互连网控制器内有三个独门的线程负责对负有互联网设施驱动举办轮询、并发、自控方式通信调度。轮询通信形式与串口控制器类似,只是串行的调度全数网络设施驱动,可是框架唯有2个互联网控制器,不能够通过扩充网络控制器来增强通信作用,那种方式是互联网通信调度鸡肋;并发通信形式,线程会通过控制器中的线程集中发送全体装备的伏乞命令数据,接收数据是通过IO异步监听来完结,异步接收到数量后再把多少分发到设备驱动的RunIODevice接口,实行多少处理;自我控制通信方式,发送命令数据的效益移交给了设备驱动本人,能够经过定时器来成功发送命令数据的法力,线程不再承担发送命令数据,接收数据与出新通信模式一样。互连网控制器的在那之中示意图如下:

 图片 1

    
针对网络通信,轮询通信形式是不能够发布其优势的,所以扩大了出现通信形式和平条约束通信格局。后三种简报方式会用到《第肆章
设备驱动管理器的设计》的“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.3           网络决定器… 5

6.5           远程交互… 9

6.1    控制器接口

    
控制器内置3个线程负责对装备驱动和IO实例举办职务协调、调度,也就是在《第伍章
设备管理器的筹划》、《第4章
串口和网络的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; }
}

     控制层次结构图如下:

图片 2 

目       录

 

第陆章           通信控制器的设计… 2

6.2           串口控制器… 3

6.2    串口控制器

   
各样(硬件)串口都对应三个串口控制器,各种串口控制器里都会有二个单身的线程,也正是说用到多少个串口号就会有微微个控制器和线程。框架平台大概会挂载七个装备驱动(插件),有只怕二个配备驱动对应一个串口,也大概多少个设备驱动共用3个串口,那么也正是说串口控制器和设备驱动之间存在1对1或1对N的涉及。结构示意图如下:

 图片 3

   
3个串口控制器内的全部设施安装的串口通信参数都以一律的,所以设备驱动(IRunDevice)接口的COM中的Port属性、IO接口(IIOChannel)的Key属性、以及串口控制器(IIOController)接口Key属性是千篇一律的,都用于标识串口号。既然2个串口控制器中的全体设备都共用1个硬件串口,就控制了颇具设施驱动之间的任务调度只好动用轮询方式,三个设施发送和吸收接纳操作完现在,再调度下3个配备驱动,设备驱动之间正是串行工作方式,制止八个串口控制器内多少个装备驱动同时操作串口IO导致数据错乱,影响正常通信。

   
1个串口控制器内的设施驱动是串行工作方式,如若把具备设施驱动都设置成三个串口号,在三个串口控制器下串行调度,那么就会影响设备驱动的报纸发表功能,有些设备的调度周期的公式如下:

某个设备调度周期=(串口控制器所有设备数-1)* 单个设备驱动执行耗时

     
那仅是3个答辩值,实际应用中要比这些理论值要大,因为涉嫌到不类型的装备驱动共用四个串口号,在三个串口控制器下工作,处理的多寡流程、格局各异,例如:有可能数量保存在TXT文件中、有大概保留在SQL数据库中、有只怕保存在NoSQL数据库中等等。

    
有人会想,岂不是在三个串口下挂载的装置更多效用越低,的确是如此的。不过,四个串口控制器之间是互为工作格局。假若现场条件对通信效能有需求的话,能够扩大串口服务器,也正是增多可用的串口硬件电路,把N个设备驱动平衡负载到不相同的串口上,扩充互动运转的串口控制器的节点,进而抓牢框架平台的运作功用。

   
可是,这样化解未来也拉动一定的风险和瓶颈,就是对于数据的囤积,如果多少个相互的数据流同时向七个单线程的存款和储蓄介质写多少,那么又会招致互斥的情景,甚至招致意外的结果或尤其,如下图:

图片 4 

     如果同时向Sql
Server、Oracle、Mysql等数据仓库储存款和储蓄数据,那么是绝非难点的;借使应用文本文件、桌面数据库等储存数据,那么大概存在难点,可以分七个文本进行保存操作。DCS系统大多接纳PI(Plant
Information
System)数据库。由此可知,作为三个系统来讲,供给完整安插、考虑,那块须要尤其注意。

6.5    远程交互

    
在询问串口控制器和互联网控制器的基本原理和成效后,还要考虑到2个利用场景:控制器不仅仅要与硬件进行数量交互,还有恐怕要把采访上来的多寡转载到此外服务器或节点上,也正是框架平台要享有路由的作用,整合设备驱动采集上来的数目,举行包装、转载。

   
从那个利用场景来看,在开发设备驱动的时候,不符合在设备驱动的拍卖流程中开始展览转载、多事情处理,受条件、互连网、业务复杂度的震慑或许会阻塞控制器的调度,影响框架的共同体运营功效。

   
在物联网建设中,多级互联、逐层转载是很宽泛技术供给。为了解决这些具体题材,框架平台提供了IAppService应用服务接口,贰次开发者能够把装备驱动中的数据音讯打包后传出到IAppService接口中,能够在此处完成缓存、转载等实际的作业服务。那样设计的要害目标是不影响框架平台实时的多少收集,保障数据源的安静。

    IAppService具体的安插性和行使以往《第玖章
外部接口的筹划》中开始展览详尽介绍。

6.4    通信控制管理器

   
通信控制管理器负责对串口控制器和互连网控制器举办保管,实际上是对Dictionary<Key,Value>实行的卷入,全数涉及到操作控制器的地点都以通过操纵管理器来形成的。IIOControllerManager<TKey,
电视机alue>通信控制管理器的接口定义如下:

图片 5 

6.1           控制器接口… 2

6.4           通信控制管理器… 9

第4章     通信控制器的统一筹划

    
经过前几章的牵线,那章介绍通信控制器。首要承担对装备驱动(IRunDevice)、IO通道(IIOChannel)实行和谐、调度、以及事件做出响应,在此基础上完结轮询通讯方式、并发通信情势和平条约束通信形式的职分调度。由于串口和互连网硬件链路本性的由来以及通信机制不均等,所以通信控制器的落到实处上也有十分大差距。

相关文章