《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。附小文:招.NET开发,结果他转JAVA了,一切都是为了生活
参考文章:
2.C#跨平台物联网通讯框架ServerSuperIO(SSIO)
一、感慨
上大学的时候,没有学过C#,花了5块钱在地坛书市买了一本教程,也就算是正式入行了。后来深造,学过JAVA,后来迫于生计,打算转JAVA了。后来考虑考虑,自己写的框架还是有很大发展余地,后来还是在C#的阵地上坚持了下来。从一开始的雏形,到SuperIO的产品化,再到服务器端的ServerSuperIO,也是慢慢演化而来。后期打算把ServerSuperIO移植到嵌入式设备上,以及完善开发文档。本来不想提这些,但是今天打算招一个C#开发人员(B/S方面),是群友,可是人家要转JAVA开发了,也只能说缘分不到,无法在一起做事,后面附一些聊天记录,供大家职业发展参考。
二、答疑
有人问,你这个框架和SuperSocket、netty......有什么区别?ServerSuperIO是通讯框架不?是;ServerSuperIO支持高并发不?理论上支持;ServerSuperIO支持跨平台不?在Ubuntu上跑过。但是这些并不是ServerSuperIO起初设计的初发点,它继承了SuperIO的设计思想,后期才逐步的向服务端发展,加强通讯能力、跨平台等等。
ServerSuperIO是一个物联网框架,首先是以设备(传感器)为核心构建的框架,设备(传感器)的协议无关性,可以随意挂载设备驱动在框架下运行。所以ServerSuperIO本质上协调设备驱动(协议)、IO通道(COM和NET)、运行机制(模式)之间的关系,使之无缝结合、运行。
一直在工业领域混,做集成系统、远程监测监控等等,所以ServerSuperIO不仅仅是一个通讯框架,更多的是结合了工作实践经验,本着能够解决实质问题。
三、运行控制模式
1、轮询模式
这是框架最早的运行模式,串口和网络通讯时都可以使用这种控制模式。当有多个设备 连接到通讯平台时,通讯平台会轮询调度设备进行通讯任务。某一时刻只能有一个设备发送请求命令、等待接收返回数据,这个设备完成发送、接收(如果遇到超时 情况,则自动返回)后,下一个设备才进行通讯任务,依次轮询设备。
应用场景是这样的,服务端与设备进行通讯遵循呼叫应答的方式,也就是IO可用的情况下,服务端先发起通讯命令请求,设备根据命令信息,检验通过后返回数据给服务端。这种通讯模式很好理解,每个设备的通讯都遵循排队的原则。但是如果某个设备的命令需要及时发送,怎么办?ServerSuperIO框架是支持设备优先级别调度的,例如:对某个设备要进行实时的检测,需要连续发送命令,那么就需要对设备进行高级别设置,发送请求数据命令。
通讯结构如下图:
2、并发模式
网络通讯的情况下,轮询模式显然效率比较低,那么可以采用并发模式。并发通讯模式是集中发送给所有设备请求指令,框架是采用循环同步方式发送请求命令给每个IO通道对应的设备,当然也可以采用并行异步方式集中发送请求命令。硬件设备接收到指令后进行校验,校验成功后返回对应指令的数据,通讯平台异步监听到数据信息后,进行接收操作,然后再进行数据的分发、处理等。
那么这里就涉及到IO通道接收到的数据是异步接收的,如何才能和设备驱动匹配上(把数据分发到设备驱动上),这是能过DeviceCode和DeviceIP两种方式来实现的。DeviceCode可以是设备地址或是设备编码,DeviceIP是预先设置好的参数,要求终端设备的IP地址是固定的。
通讯结构如下图:
3、自控模式
只有网络通讯时可以使用这种控制模式。自控通讯模式与并发通讯模式类似,区别在于发送指令操作交给设备驱动本身进行控制,或者说交给二次开发者,二次开发者可以通过时钟定时用事件驱动的方式发送指令数据。硬件设 备接收到指令后进行校验,校验成功后返回对应指令的数据,通讯平台异步监听到数据信息后,进行接收操作,然后再进行数据的分发、处理等。
自控通讯模式可以为二次开发者提供精确的定时请求实时数据机制,使通讯机制更灵活、自主,如果多个设备驱动使用同一个IO通道的话,时间控制会有偏差。
同样涉及到数据的分发,和并发模式一样。
通讯结构如下图:
4、单例模式
只有网络通讯时可以使用这种控制模式。在一个服务实例内只能有一个设备驱动,相当于一个设备驱动对应着N多个硬件设备终端。更适合通讯的数据协议有固定的标准,以命令关键字处理不同的数据。适用于高并发的硬件终端设备主动上传数据,服务器端根据数据信息进行处理和返回相应的数据。
通讯结构如下图:
四、招.NET开发,结果他转JAVA了,一切都是为了生活
最近工作比较忙,开发、解决问题、招聘......,连看手机的时间都没有了,吃饭也是匆匆了事。为了更好的推进平台化建设,确实需要人,也为将来储备人才,在群里和网友聊聊,本来小伙前期还是挺感兴趣的。今天问问他的想法,结果打算转JAVA了,也是我文章前头感慨的原因。我为了生存,他也为了生存,都是可以理解的。
聊天记录如下,请参考:
2.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍
2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案
3.C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)
5.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO
物联网&集成技术(.NET) QQ群:54256083