大部分嵌入式设备核心工作是通过各种外设采集处理数据,发送处理好的数据。网络传输(DTU)的功能是这方面的典型案例。比方一个非常简单的例子,一个串口收到的数据,转发到多个网络目的地。
这种需求的难点和复杂性在哪里呢?
多种外设,使用外设之间差异性很大,具体表现为,初始化,设置不同,连接建立就绪不一样,设备就绪断开表现不一样。
在linux中把大部分的外设都抽象为设备,对于设备的读写轮询基本一致。这方面没有难度,但是各种设备的数据传输能力大小存在差异,简单处理会导致数据丢失。
采集数据处理很多时候需要周期,定时处理。
实现多设备多通道数据集中处理收发有多个进程来实现。
实现该功能的进程分成两类,多个对应单个设备的单设备进程。一个数据集中处理的服务进程。单设备进程和之间用。
整个方案化繁为简,非常容易扩展。非常合适与多种设备之间的交互,增加设备简单,方便快速开发多个功能。
单设备进程
主要的功能是建立设备就绪状态,并把设备收发数据转给socket客户端,从而交给服务进程处理。
管理单个设备和socket客户端。
初始化设备,socket客户端,直到准备就绪
常见的单个设备有:R232/R485串口,TCP 客户端,TCP服务器端,UDP客户端。UDP服务器端。USB接口。等等
一直不断检查,轮询
设备,socket客户端是否掉线,如掉线再次准备。
设备,socket客户端是否有数据接收。接收数据。
设备,socket客户端是否有数据发送。发送数据。
缓存数据
单设备进程相同或不同类型的可以同时启动多个,达到多设备多通道的目的。
单设备进程把各种设备之间的差异最大限度保留在单设备进程中,避免把不同的设备混在一起管理混乱,开发难度大。
所有单设备进程开发模式一致,目的明确,单一,触类旁通,开发简单。
增加一个设备进程不需要考虑别的设备。专注于自身就可以了。
服务进程
可以对应多个单设备进程,用server socket监听单设备进程client的连接。建立连接,接收从单设备进程来的数据,对数据分析,编解码,进行综合处理。根据实现功能决定把结果数据发给哪些单设备进程。
需要维护server socket,socket多个与客户对应连接。
不断检查socket多个与客户对应连接收发数据。
用时钟信号,周期处理数据。
大数据量缓存处理。
服务进程不需要知道每种设备的差异,管理多种设备麻烦事情不存在了。只需要维护server socket,socket多个与客户对应连接。并进行数据收发就可以了。服务程序很简单。
服务程序可以集中处理上层应用方面的一些工作,如协议解析,数据保存,数据转发等工作。
socket通信
套接口(Socket)为目前Linux上最为广泛使用的一种的进程间通信机制。
基于Socket的多进程之间通信的实现方法。原理是建立一个进程专门用来做为通信服务器(server)来中转各个进程之间的通信。
其他各进程作为客户端(client)。客户端的动作是首先建立通信Socket连接服务器端,然后通过通信Socket进行送信和收信。
一个服务端可以与多个客户端建立多个连接,进行一对多通信。
SCOKET通信可以是本地方式,也可以是TCP/IP方式。进程之间选择本地方式。
单设备进程与服务进程之间通过socke通信,服务进程作为服务端,单设备进程作为客户端。根据应用的需求可以开多个单设备进程实现多通道。一般模式是一个服务进程对多个单设备进程。
处理程序之间关系,和内部结构图:
联系人:付小姐
咨询QQ:99187411
咨询电话:15010577199