摘要:介绍了支撑多串口一起抄表的智能外表软件构架、驱动层程序规划办法,并规划了一种支撑多串口一起抄表的智能外表程序。经过通讯协议层和使用层中的接纳回调函数、发送回调函数、接纳帧处理和发送帧处理具体进程,有效地完结多个用户依据自己的权限一起对同一块外表进行抄读。实践证明,该规划获得了较好的预期作用,具有杰出的使用远景。
导言
跟着计算机技能、通讯技能、电子技能的开展,推进了外表职业快速开展;一起,跟着人力本钱的添加,人工抄表将会逐步被筛选;智能外表将成为外表职业开展的方向。能够预见,在未来20年外表职业将阅历一次革新,我国将由现在的人工抄表方法逐步转变为长途抄表,各级水、气和电力管理部分能够依据不同的权限对同一块外表进行长途抄读。为了支撑多用户一起抄表,本文规划了一种支撑多串口一起抄读的智能外表程序,对程序规划流程做了具体的论述。
1 支撑多串口智能外表软件构架
支撑多串口智能外表软件构架如图1所示,支撑多串口智能外表的软件构架分为4层:驱动层、依据使命调度的操作体系、通讯协议层和使用层。驱动层首要供给智能外表的各种硬件驱动。其间,串口驱动程序完结的功用包括:串口的装备、供给通讯协议在串口发送列表和串口接纳列表中注册的接口函数、为通讯协议层供给数据服务。依据使命调度的操作体系的规划能够进步程序的通用性和扩展性;通讯协议层和使用层依据需求在操作体系中注册使命,假如今后需求添加一个功用,则能够直接添加一个使命而不需求对曾经的代码进行改动。
通讯协议层首要对从物理层接纳的数据帧和指令帧,依照通讯协议的帧格局进行解析和对从使用层接纳到的数据和指令依照通讯协议的帧格局进行组帧。使用层首要完结智能电表和抄表客户端使用目标之间的通讯。支撑多协议的智能外表软件构架如图1所示。
2 驱动层串口程序规划
通讯协议层体系初始化时,通讯协议需求在每个串口的发送列表和接纳列表中注册。其间,串口发送协议列表和串口接纳协议列表如下所示:
3 协议层和使用层程序规划
在通讯协议层界说一个类型为PROTOCOL的数组ProtocolPortList,ProtocolPortList数组的首要作用是:寄存对应串口接纳的数据和要发送的数据、表征该串口现在的状况。代码如下:
PROTOCOL ProtocolPortList[SERIAL_PORT_COUNT];
typedef struct{
UINT8 RxBuff[RECV_FRAME_BUFF_LEN];
UINT8 TxBuff[SEND_FRAME_BUFF_LEN];
UINT8 ReceiveSuccessFlag;
UINT8 RxLen:
UINT8 TxLen;
}PROTOCOL;
RxBuff是用来寄存从串口接纳的数据,TxBuff为要发送的数据,假如接纳到一帧合法数据将ReceiveSuccessFlag置0xFF,该标志的作用是为操作体系供给一个处理RxBuff中数据的标志,避免现已接纳的帧被后续帧掩盖。RxLen为RxBuff接纳字节的长度,TxLen为TxBuff要发送数据的长度。
3.1 接纳回调函数程序规划
当串口接纳到一个字节后调用接纳回调函数,接纳数据回调函数数据处理流程图如图2所示。首要判别回来的channel是否为物理通道1、物理通道2或物理通道3。假如不是则将此数据扔掉,假如是则判别ProtocolList[channel].ReceiveSuccesFlag是否为0xFF。假如是,阐明该串口现已接纳到一帧数据但还没有被处理,不能接纳数据。假如不是,则判别接纳字节是否契合通讯协议的帧格局,假如不契合则将接纳字节扔掉,假如契合将接纳字节Data存入接纳缓冲区ProtocolList[channel].RxBuff中,而且将接纳长度ProtocolList[channel].RxLen加1,最终判别是否一帧数据接纳结束,假如接纳完结则将ProtocolList[channel].ReeeiveSuiccesFlag置为0xFF。
3.2 音讯格局
在使用层和通讯协议层中都有一个音讯列表,分别来搜集协议栈发送给它的音讯和使用层发送给通讯协议层的音讯。
Message MessageList[MAX_MESSAGE_NUM];
其间Message的结构如下所示:
typedef struct{
Un8 Channel;
Un8 STaskID;
Un8 DTaskID;
Un8 MessageType;
Un8*Data;
}Message;
通道号为协议栈接纳数据的串标语,STaskID为源使命号(协议栈的使命号或使用层的使命号),DTaskID为意图使命ID(协议栈的使命号或使用层的使命号),MessageType代表什么类型的音讯(读数据恳求、写数据恳求),Data为所要写入数据的指针。
3.3 依据使命调度的操作体系对接纳帧的处理
当依据使命调度的操作体系履行通讯协议层使命时会查找ProtocolList数组中哪个元素的ProtocolList[channel].ReceiveSuccesFlag为0xFF,然后对其ProtocolList[channel].RxBuff中的数据进行处理,处理进程是:
①首要依照通讯协议层的帧格局对接纳数据进行解析。
②解分出需求发往使用层的数据,按必定的音讯格局(包括发送数据和通道号)组成一条音讯,然后将其发送给使用层,使用层收到这个音讯后将其存入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。
结语
本文依据智能外表的开展方向和多用户一起抄表的需求,论述了规划支撑多串口一起抄表的智能外表程序的必要性。给出了支撑多串口一起抄表的智能外表软件构架、驱动层程序规划、通讯协议层程序规划和使用层程序规划。它能够使多个抄表部分依据各自的权限一起对同一块外表进行抄读和设置。该规划能够广泛地使用于智能外表职业,然后推进我国外表职业的开展和国际化。