[连载]《C#通信(串口和互连网)框架的筹划与落成》- 6.简报控制器的设计

6.1    控制器接口

    
控制器内置三个线程负责对配备驱动和IO实例进行任务协调、调度,相当于在《第肆章
设备管理器的设计》、《第⑤章
串口和网络的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; }
}

     控制层次结构图如下:

图片 1 

 

6.2           串口控制器… 3

6.3    网络控制器

    
框架平台唯有3个互连网控制器,网络控制器内有3个单独的线程负责对富有网络设施驱动实行轮询、并发、自笔者控制形式通信调度。轮询通讯格局与串口控制器类似,只是串行的调度全数互联网设施驱动,但是框架唯有二个网络控制器,无法经过扩张网络控制器来抓牢通信功效,那种方式是互联网通信调度鸡肋;并发通信格局,线程会通过控制器中的线程集中发送全数装备的呼吁命令数据,接收数据是经过IO异步监听来形成,异步接收到数量后再把数量分发到设备驱动的RunIODevice接口,举办多少处理;自控通信情势,发送命令数据的职能移交给了设备驱动本身,可以经过定时器来完毕发送命令数据的功能,线程不再承担发送命令数据,接收数据与出新通信形式一样。网络控制器的在那之中示意图如下:

 图片 2

    
针对网络通信,轮询通信方式是无法表明其优势的,所以增添了产出通信格局和平条约束通信形式。后二种简报形式会用到《第⑥章
设备驱动管理器的陈设》的“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);
                     }
              }
       }
}

第④章     通信控制器的布署性

    
经过前几章的牵线,那章介绍通信控制器。重要负责对装备驱动(IRunDevice)、IO通道(IIOChannel)进行和谐、调度、以及事件做出响应,在此基础上贯彻轮询通信模式、并发通信格局和平条约束通信方式的职务调度。由于串口和网络硬件链路特性的案由以及通信机制分裂,所以通信控制器的达成上也有相当的大差异。

6.3           网络决定器… 5

6.4    通讯控制管理器

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

图片 3 

目       录

6.2    串口控制器

   
种种(硬件)串口都对应一个串口控制器,每一种串口控制器里都会有2个独自的线程,也正是说用到某些个串口号就会有多少个控制器和线程。框架平台大概会挂载七个设备驱动(插件),有也许2个设施驱动对应叁个串口,也或许多少个设施驱动共用三个串口,那么也正是说串口控制器和装置驱动之间存在1对1或1对N的涉及。结构示意图如下:

 图片 4

   
一个串口控制器内的保有装备安装的串口通信参数都以同一的,所以设备驱动(IRunDevice)接口的COM中的Port属性、IO接口(IIOChannel)的Key属性、以及串口控制器(IIOController)接口Key属性是一致的,都用来标识串口号。既然贰个串口控制器中的全部设备都共用二个硬件串口,就控制了全部装备驱动之间的职分调度只可以动用轮询形式,贰个装备发送和吸收接纳操作完今后,再调度下2个设备驱动,设备驱动之间正是串行工作方式,制止叁个串口控制器内八个设备驱动同时操作串口IO导致数据错乱,影响健康通信。

   
2个串口控制器内的装备驱动是串行工作形式,假使把具备设施驱动都设置成三个串口号,在贰个串口控制器下串行调度,那么就会潜移默化设施驱动的广播发表效用,某些设备的调度周期的公式如下:

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

     
那仅是3个驳斥值,实际运用中要比那一个理论值要大,因为涉嫌到不类型的装置驱动共用三个串口号,在多少个串口控制器下办事,处理的多少流程、方式各异,例如:有只怕数量保存在TXT文件中、有或者保留在SQL数据库中、有恐怕保存在NoSQL数据库中等等。

    
有人会想,岂不是在二个串口下挂载的设备越来越多功效越低,的确是那样的。然而,三个串口控制器之间是互相工作形式。倘使现场环境对电视发表功效有必要的话,能够追加串口服务器,也正是增多可用的串口硬件电路,把N个设备驱动平衡负载到区别的串口上,扩展互动运营的串口控制器的节点,进而增加框架平台的周转功用。

   
不过,那样化解今后也带来一定的高风险和瓶颈,就是对此数据的存款和储蓄,假诺八个彼此的数据流同时向叁个单线程的存款和储蓄介质写多少,那么又会促成互斥的场景,甚至造成意外的结果或尤其,如下图:

图片 5 

     如果同时向Sql
Server、Oracle、Mysql等数据仓库储存储数据,那么是绝非难点的;假使使用文本文件、桌面数据库等储存数据,那么只怕存在难题,可以分多少个文本进行保存操作。DCS系统大多使用PI(Plant
Information
System)数据库。综上说述,作为贰个种类来讲,须要完整安顿、考虑,那块必要特别注意。

6.5           远程交互… 9

6.4           通信控制管理器… 9

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

6.6           小结… 10

6.6    小结

    
通信控制器完结这后,理论上框架平台就可知跑起来了,可是距离大家早先安插的靶子还差很多干活要做,还不能够为三次开发提供相当大的造福。在继承的设计中,逐步的会把框架平台充分起来。

 

我:唯笑志在

Email:504547114@qq.com

QQ:504547114

.NET开发技术联盟:54256083

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

合法国网球国际赛址:http://www.bmpj.net

6.5    远程交互

    
在摸底串口控制器和网络控制器的基本原理和职能后,还要考虑到三个采纳场景:控制器不仅仅要与硬件举办多少交互,还有大概要把采访上来的数额转载到其余服务器或节点上,也正是框架平台要享有路由的职能,整合设备驱动采集上来的数据,举办李包裹装、转发。

   
从那几个利用场景来看,在支付设备驱动的时候,不符合在设施驱动的处理流程中开始展览中间转播、多工作处理,受条件、网络、业务复杂度的影响可能会阻塞控制器的调度,影响框架的欧洲经济共同体运行功效。

   
在物联网建设中,多级互联、逐层转载是很广泛技术要求。为了化解那几个具体题材,框架平台提供了IAppService应用服务接口,一遍开发者能够把装备驱动中的数据音讯打包后传出到IAppService接口中,能够在此处完毕缓存、转载等具体的事情服务。那样设计的关键指标是不影响框架平台实时的数据收集,保障数据源的稳定。

    IAppService具体的铺排性和使用以后《第柒章
外部接口的安插》中举行详尽介绍。

6.1           控制器接口… 2

相关文章