[连载]《C#通讯(串口和网络)框架的统筹与实现》-1.报道框架介绍

[连载]《C#通讯(串口和网络)框架的计划与贯彻》-
0.前言

 

目       录

先是章           通讯框架介绍… 2

1.1           通讯的本质… 2

1.2           框架简介… 3

1.3           解决具体问题… 4

1.4           应用场景… 5

1.5           框架应用特点… 6

1.6           框架设计特点… 7

1.7           插件式应用框架… 9

1.8           开发环境… 10

1.9           第三方组件… 11

1.10        小结… 12

 

 

率先章     通讯框架介绍

1.1    通讯的原形

    
通讯就是信息的传递,消息传送又分为:单向消息传送和双向信息传递。用喇叭举办播放是单向音信传送,打电话是双向消息传递。

    
单向消息传递相对较为简单,只需要向音信接收者实时发送数据,而不用管音信是否到达,以及到达后是否举行了处理。这种信息传送格局适用于对数据完整性要求不高的施用场景,例如:采集温度传感器的多寡。可是,假设数据源或是传感器相比多的话,要考虑到并发量的题材,随着互联网技术的发展,并发问题是足以很好的缓解。

    
双向音讯传送相对较为复杂,不仅关乎到发送数据的题目,还涉及到新闻握手、数据补传等一密密麻麻互动问题。如若把双向音信传送非要分成客户端和服务端的话,还关乎到是哪一方首发起音信传递,客户端主动向服务端发送数据,服务端接收到数量后开展拍卖;但是,有时候服务端不愿意接受到客户端的数据,唯有在服务端向客户端发送请求命令后,客户端按照指令才得以回来相应的数目。在与硬件举办双向通讯的时候,还波及到载波通道是半双工和全双工的题材,半双工是一律时刻在通道上不得不A向B或B向A发送数据,只好单向数据传输;全双工是A向B发送数据,同时B向A也得以发送数据,发送和接收数据两者可以同步举行。这种音讯传递形式适用于对数码完全性要求相比较高的运用场景。

   
不管是单向讯息传递,如故双向音讯传送,都关系传输协议、编码格局和数量校验。传输协议是可以封装和剖析并且可以互相精晓的多少格式,它是一种多少规约情势,可以拔取标准的商谈模式,例如:Modbus、XMPP、AMQP、MQTT等,也足以应用自定义协议;有了传输协议后,在传输过程中还关乎到编码格局,例如:GBK、UTF、ASCII,有可能在编码的底子上还要举行加密,以保证数据的安全性;为了多少包完全性、可解析性,还要扩展对数码的校验,一般选取较多的校验形式为CRC。传输协议、编码形式和数码校验的目标只有一个:制止数据在传输过程中倍受打扰,或被恶心篡改,给多少处理造成意外的结果。打个比方,一个华夏人说官话,一个别人说美式英文,语法不平等,编码格式不平等,结果造成说话听不懂、文字看不懂,尽管误认为是在骂人,有可能还要打一架。

   
现在主导都是面向对象开发模式,new出来一个目的,把目的的特性赋值后,直接把对象传给接口函数完成发送数据。那种操作形式使开发者更多的眷顾业务范围,从而掩盖了许多技术细节,例如:序列化、协议、编码、字节流的操作等等。

   
不过,SuperIO保持对底层字节流(byte[])的操作,更多的关怀通讯框架、数据协议、数据缓存、数据处理流程、设备驱动、插件、二次开发等方面。因为在物联网时代,将相会对广大数据源,包括:各种传感器、手机、PC端、智能硬件、传统嵌入式设备等等,协议众多,并且很难统一,所以最直白的操作数据就是字节流(byte[])。其余,很早从前传输技术不发达(300波特率),同时受寄存器的存储限制,为了裁减数据量,1个字节的8位要表示8种状态类型。

   
在物联网时代,将面临各类通讯处境,例如:一个串口通道,一对一、一对多的方法通讯;一个网络IP通道,一对一、一对多的报道。所以,没有一个好的框架支撑是力不从心满足通用性的要求。

    
有人问题串口通讯、网络通讯咋办,有人回答这么些很容易,不过要把上述问题以及其他问题都考虑全面的话就是一个扑朔迷离的题材,并且有点题目不是很好解决。

1.2    框架简介

     
假如一个供销社的硬件产品不少,协议又各不相同,每一个硬件产品都对应一套上位机软件,需要专人珍惜。而客户的需要日渐变化,造成维护资产较高,并且阻碍了店铺的高速前进。此外,即便修改同类硬件产品的配套软件,也说不定造成新的BUG出现。

    
随着市场和合作社提升的急需,需要组合、重构软件系统以适应环境、硬件的随地转变,降低人力、运维成本,释放劳重力。

    
所以,对于发展到自然等级、或是一个老谋深算的公司必然要有软件框架作为支撑,这是从业务角度考虑提升应用框架的必然性。

    
技术下面,框架是一个系统所有或一些的可复用设计,日常由一组接口、抽象类和类之间的搭档组成。随着音讯化的上扬,软件出品的开销也越来越复杂化,解决问题的复杂度也在不断的滋长。IT界也在检索多种办法,包括制定各样软件开发标准和规范、开发更尖端更有生产力的编程语言、开发更好的编译器和运转时以及不需要编译的解释性开发语言、开发效率强大以及更通用性的组件库、探索适用不同应用场景的设计格局等。

    
从软件工程角度出发,在设计层面要接纳非常规的软件构架和设计模式来达到我们预料的目的:

  • n  尽量进步软件的可重用性,防止不必要的双重编码工作。
  • n  增添组装的封装性。
  • n  进步软件的模块化程度。
  • n  不同功效模块之间可以无缝集成。
  • n  软件具有灵活的可扩张性。
  • n  软件出品的扩充和开发实现标准化。
  • n  软件出品具备面向不同拔取规模的适应性和易移植性。

   
为了实现这一个要求,在计划层面上,越来越多的软件出品起先采取拔取框架的研商举办软件结构设计。应用框架已经是一个被大面积采用的术语,它成为软件开中一种非常实用并且常用的筹划、开发规范。

   
我们必然见过无数自称“框架”的软件出品,也许有人会觉得不屑,有些代码量很少的顺序依然也称自己是某种格局的行使框架?事实上,应用框架无关乎规模大小,就像房子一样,摩天大楼和民房都是房屋,只可是它们的范畴和精巧度大小不雷同而已。

    在架构师眼里,代码都是索要统筹的,都是有框架的。

1.3    解决具体题材

    在工业领域,平常遭遇软硬件之间的数码交互,并且面临着复杂的现场环境:

(1)复杂的、多样的通讯协议。有正统的商谈,例如:Modbus等,也有广大基于标准协议修改的商议格式、以及自定义合计格式,并且距离。对于不好的软件架构,疲于应对,扩大设备或协商要对任何软件举办梳理,往往在此过程中冒出新的题材或BUG。

(2)针对不同用户对软件界面或效益的要求有很大不同,使之满意不同用户的显得要求,可以自定义数据突显界面。

(3)在做集成项目标时候,输入输出数据的多样性。首先,要合并其他厂家的配备,要求数据开展交接。其次,还有好多是任何厂家要合并自己家的设施,就涉嫌的出口数据的题材,数据格式要求也是出入。  

(4)通讯链路的多种性,对于同一个装置可能要援助RS232/RS485/RS422、RJ45、3G/4G等通讯情势,所以对于一个设施要对应多种报道形式(串口和网络),也给大家的支出造成很大的阻碍。

(5)软件各版本、以及软件与硬件之间的兼容性很差,管理起来复杂。

  
为了化解以上诸多问题,开发一个软件框架,协理二次开发。在不对软件框架改动的境况下,可以很有益的联网设备、维护设备、集成设备、处理设施业务数据等。软件框架相对平稳,把容易变化的部分开展灵活设计。

1.4    应用场景

   
作为一个框架平台,在形成产品后要稳住它的使用场景,在统筹框架在此之前要有明晰的认识,并在计划过程中不停加剧应用目的。

   
在产品拔取方面,框架平台可能要部署在PC机上,与成千上万硬件、传感器举办数据交互,并在本土开展数量存储。

    
在类型应用方面,框架平台可能部署在服务器端,与客户端(PC机、硬件、传感器等)举行数量交互,并蕴藏到数量中。

    
既然框架平台在PC机上和服务端都可能应用,那么框架与框架之间也有数据交互的可能。

    
所以,框架平台的互相场景包括两方面:第一、与硬件产品竞相。第二、与软件出品竞相。基本这两方面考虑:

1)框架平台利用在PC机上

第一利用在自动站的工控机上,通过RS485/RS232、RJ45、4-20mA等办法

募集硬件装备的数目信息。同时,通讯平台与服务器端的软件拓展交互,负责上传数据音讯,以及接受控制命令等。

2)框架平台应用在服务器端上

顶点设备以3G/4G、无线专网、卫星等与报道平台连接,举办数据交互,终

端设备包括:PC机、移动终端(手机)、监测设施和传感器等。

    基于上述考虑,框架平台的应用场景布局图如下:

 图片 1

1.5    框架应用特点

  对于框架的特征,咱们要有简短、清晰的筹划,其中囊括:效能范围、性能层面、应用范围、运行层面、二次开发层面等等
,这多少个将激化我们在规划、开发过程的对象。这多少个不仅要写在纸上,更要记在脑子里。SuperIO在计划的时候,简单的列出了它的性状,固然有些特点是后来宏观的,如下:

  • n  迅速构建通讯数据收集平台软件的宿主程序

  • 迅速构建设备驱动,以及有关的协商驱动、命令缓冲、自定义参数和实时数据属性等

  • 急速二次开发图形展现、数据输出、服务驱动,并以插件的花样展开挂载。
  • n  一个设施驱动,同时补助串口(COM)和网络(TCP Server/Tcp
    Client)通讯机制,可以无限制切换

  • 内置协议驱动,可以把第三方协商转换成自定义的商谈,协议的龙虎山真面目是对字节流的操作。

  • 内置设备命令缓冲器,可以安装命令发送的事先级别,保证命令的很快响应。

  • 以服务驱动插件的主意对OPC服务、4-20mA输出、LED大屏展现、短信服务等展开二次开发。
  • n  连忙支付、运行平稳、扩大性强大
  • n  适用工业上位机软件,以及系统集成中采集远程设备数量
  • n  支持Windows XP/7/8/8.1、Windows Server 2003/2008/2012

1.6    框架设计特性

   
有些书籍说了一大堆设计特征,有点令人难以想象,没见有层次感,我认为对于此类框架的特性最根本的统揽两点:稳定性、扩充性、性能。

稳定性

     
对于一个实时数据收集框架来说,紧要的规划特性就是安静,那是另外一切特点的前提。不可能出现很是后软件无故退出的情景、不可以冒出关闭软件后经过不能退出的光景、不可能出现不能够响应数据的面貌、无法冒出不可以处理多少的场合等等。

    
基于可能存在的这几个秘密的问题,我们要考虑:容错机制、模块无缝衔接、记录日志等。

    
容错机制是装有软件都有些一种体制,核心思想是对充裕动静的处理形式。对于操作一般性的效率,假使出现万分状态,大家或许不需要过多的过问,只需要举行日志记录就可以了,对于再度操作同样的效率可以作证卓殊动静的可重复性,依照日志音讯可以有针对的举办缓解;对于事务性的天职,对特别意况的拍卖会有多种增选,可以概括的笔录非凡消息、可以销毁当前的资源,重新先导任务,直接任务成功、可以还原到出现万分状态的节点等,按照不同的面貌,接纳处理的格局也不一致。就一定于,某人说错话了,要拓展弥补,这就要看当时的条件和直面的人,假诺是好情人,这事尽管过去了。

    
模块无缝对接要求大家对接口、抽象类以及类的模块划分、设计粒度有很好的把握,更多的显示在经历方面。模块之间是一个契约关系,如何进行契约会涉及到无数设计情势的选拔,所以说对规划模块的握住程度直接影响软件框架的成熟度。就好比五个人对话,说话模式、语意都无法相互掌握,就有可能话不投机半句多。

    
记录日志是所有软件必须要有的特点,这为我们排查错误提供了很大的造福。日志记录有不少开源的门类得以拿来一向拔取,例如常用的Log4Net。可是,有时间琢磨这东西的光阴,自己也能写一个适用于自己的日志库了。

    
稳定性是软件运行的最直白反应,是兼备实时性框架设计最要害考虑的因素,也是最难达到的。

扩展性

     
用户可能比设计者更关爱稳定性,不过用户不仅满足于平安,还会指出各类新要求,更多的反映在功用方面。若是扩张性糟糕,对于开发者来说是万丈深渊。

     
所以,可扩张性是应用框架最强烈的特性之一,它表示应用框架的效果有着生长力量。没有扩充能力的利用框架毫无使用价值和意义,因为框架本身就是为了提供一个合并的上下文环境给现实的施用使用。应用框架的可扩张性使大家可以基于一个阳台实现不同的法力,满足不同的选择需求,有些需求是框架本身就补助的。

    
框架的可扩展性紧要是经过持续和集纳两种艺术实现的。继承形式是指通过派生类继承基类或接口,通过录取基类的遵守并定义新的遵守的章程实现效益扩充;聚合模式是指调用不同的品种组合为一个新品类而扩充出全新的效应。研讨Framework框架源代码,可以深刻感受到连续和集合的效益。

     
倘使单说增加性会令人有些失之空洞,那么我们还要考虑模块化、可重用性、可维护性等等。

     
模块化,并不是把每个功效都编译成一个DLL程序集就可以称作模块化,一个主次集内部也足以模块化。从框架层面在逻辑上横向、纵向对模块和层次开展分割,以减低模块之间的耦合度,不会因为一个模块的变化而影响其他模块,划分模块时保证模块之间输入输出的统一性。

     
可重用性,也可以称呼可复用性,是衡量代码质地的首要标志之一。既然是框架设计之中一个目标就是提升效率,裁减没有必要的再度工作,降低资金。一般的话,框架可选择可以是离散存在的函数、可以是包裹好的类库、可以是包装好的重重类库,以利于我们在近似功用、业务中使用。

      
可维护性,依照业务要求变动可以方便开展改动的力量,也是扩大性的视角。保证我们尽量少修改代码完成需求而又不影响软件的完全运行。

性能

    
性能是软件运行功能的首要目的,是对软件运行极限的考验。例如,不管挂载多少设备驱动,用户要求1分钟要读取一遍具有设备的数目,假诺实现持续,用户说对不起,大家无法签合同。

    
在互联网行业对性能的要求更高、更健全,有成百上千目的性的参数,例如:响应时间、延迟时间、吞吐量、并发量、资源利用率等等,所以一般要对软件、服务拓展压力测试。在观念行业方面也不防借鉴运用先进的框架或第三方组件,例如:信息队列框架(kafka、ActiveMq、RabbitMq、ZeroMq、EQueue),响应式音信框架(Akka.net)、作业调度框架(Quartz.net)等等,那个可以促进增强软件、系统的施行效能和特性。

    
当然,对于性能来讲,软件只是一个下边,更多的还关乎到网络布局、服务器部署等地方,是一项综合性的构造。

    
对于平安、扩大性、性能,它是一个完好的多个地方。相信我们都看过F1较量,要求赛车在全速行驶过程中保持不翻车,高速行驶对轮胎磨损很惨重,并且要求在很短的大运内方便对轮胎的转移。

1.7    插件式应用框架

    
插件技术是在软件的设计和开支进程中,将总体应用程序划分为宿主程序和插件对象两有些,宿主程序可以调用插件对象,插件对象可以在宿主程序上实现自己的逻辑,而两边的交互基于一种集体的通信契约。宿主程序可以独自于插件对象存在,尽管没有另外插件对象,宿主程序的周转也不受影响,由此,大家能够在防止改变宿主程序的情形下通过增减插件或改动插件的不二法门充实或调整效率。由于拔取了插件技术的宿主程序有所了一个框架的本质特征,因此可以将它看做是一种插件式框架。插件式框架可以使得地降低效果对象与对象管理逻辑之间的耦合程度,并将耦合置于最优的水准。

    
对绝大多数总括机用户和软件开发者而言,插件式应用框架其实算不上什么秘密的东西,事实上,几乎每个人都曾采用过所有插件式功效的软件出品。这一个软件有大有小,从操作简捷的比如说播放器软件到复杂桀骜的各个标准应用软件,都或多或少使用过插件机制,只是对于最后用户而言,由于通常满意于拔取一款成熟软件,很少有人刻意去关心那几个软件使用的是何许的架构体系。

     Visual Studio
IDE、Elipse等都是插件式的开发工具,并贯彻了很强大的插件机制,也促使那些软件变的更是强大。

     一般而,一款软件、一个框架使用插件机制的来头根本基于以下3点:

  • n  可以在不必对程序举行重复编译和发布的规范下扩充程序的效能。
  • n  可以在不需要程序源代码的环境下为程序扩张新的功力。

  • 在一个顺序的业务逻辑不断暴发变动、新的平整不断出席时亦可灵活适应。

   
实现插件机制一般有3种技术:基于动态连接库DLL的插件、基于组件对象模型COM的插件、以及基于.NET反射技术的插件。

    SuperIO是运用反射技术实现的插件机制,在背后的章节中展开详细介绍。

1.8    开发环境

开发语言

使用C#支付的SuperIO框架,当然使用另外语言也得以实现,例如:JAVA。

开发工具

一最先接纳的是Visual Studio 2008工具举办支付,后来擢升到Visual Studio
2012,并对SuperIO举行了再次编译。

补助框架

一起初选取的是Framework 2.0框架举办支付,后来升任到Framework
4.0,为了配合较低版本的操作系统(Windows xp
sp3),最高版本的框架只好拔取Framework 4.0,再高版本的框架在Windows xp
sp3下无法运转。如下图:

 图片 2

编译环境

运用X86平台对项目举办编译,假若开发插件也需要用X86平台展开编译,紧要考虑到32位和64位操作系统的通用性。如下图:

 图片 3

支付环境:

一起始在Windows xp sp3操作系统下展开支付,后来晋级到Windows 8/8.1。

1.9    第三方组件

    使用Developer
Express套件对框架的UI部分举行布局,紧要采纳在Menu、MdiTabForm、DockPanel这五个地点。

   
使用PCOMM.DLL对串口通道进行操作,没有运用微软自带的SerialPort组件,因为这些组件与局部工业串口卡不配合,请参见:SerialPort操作PCI-1621D多串口卡,出现非凡”参数不科学”

   
OPC服务端采纳的是OPC基金会的WtOPCSvr.dll组件,然则这么些需要正版授权。OPC客户端采用的是OPCDAAuto.dll组件。可以在http://pan.baidu.com/s/1pJ7lZWf下载SuperIO_Demo.rar事例代码,里边有完全的OPC服务端和客户端的代码。事例评释:http://www.bmpj.net/article-11-1.html

1.10     小结

    
从软件设计角度,框架是一个可复用的软件架构解决方案,规定了使用的系统布局,注明软件系列结构中各层次间及其层次内部各组件间的恒心关系,责任分配和操纵流程,表现为一组接口,抽象类以及实例间协作的点子。

    
框架决定了一个软件的生命力,一个好的框架更能推进我们对它的不断维护、重构、完善。

 

下一单将介绍(SuperIO)框架总体的宏图。

 

作者:唯笑志在

Email:504547114@qq.com

QQ:504547114

.NET开发技术联盟:54256083

相关文章