首先按照通信协议层的帧格式对接收数据进行解析。
解析出需要发往应用层的数据,按一定的消息格式(包含发送数据和通道号)组成一条消息,然后将其发送给应用层,应用层收到这个消息后将其存入AMessageList应用层消息列表中。
当处理完成后将ProtocolList[channel].RxLen置0,将ProtocolList[channel].ReceiveSuccessFlag置0,以便于该channel串口通道可以接收下一帧数据。
基于任务调度的操作系统会按一定的调度时间来搜索ProtocolList中各个串口通道是否接收到一个完整的帧并进行处理,这样就能够实现协议栈对多个串口接收到的数据帧进行及时处理,多串口同时进行通信。
基于任务调度的操作系统会按一定的调度时间来搜索AMessageList是否为空,如果不为空则对相应的消息进行处理,这样就能够实现应用层对收到的多个消息进行及时处理,实现并行通信。
3.4 协议层对从应用层接收到的消息处理
智能仪表需要向客户机返回抄读数据时,首先智能仪表应用层将抄读数据按照一定的消息格式组成一条消息,然后将该消息发送给通信协议层。通信协议层收到该消息后将其存入PMessageList协议层消息列表中。
基于任务调度的操作系统会按一定的调度时间来搜索PMessageList是否为空,如果不为空则对相应的消息进行处理。
通信协议层对消息的处理过程如下:
通信协议层将消息进行解析,解析出发送的Data和发送通道channel。
将需要发送的数据按照通信协议的帧格式进行组帧,并存储于ProtocolList[channel].TxBuff中。ProtocolList[channel].TxLen为需要发送的长度。
调用串口发送函数,将该帧数据通过串口channel发送出去。
3.5 发送回调函数程序设计
当channel的串口将协议层数据帧发送出去后会调用发送回调函数将ProtocolList[channel].TxLen置为0。
结语
本文根据智能仪表的发展方向和多用户同时抄表的需求,阐述了设计支持多串口同时抄表的智能仪表程序的必要性。给出了支持多串口同时抄表的智能仪表软件构架、驱动层程序设计、通信协议层程序设计和应用层程序设计。它可以使多个抄表部门根据各自的权限同时对同一块仪表进行抄读和设置。该设计可以广泛地应用于智能仪表行业,从而推动我国仪表行业的发展和国际化。