系统配置模块主要完成系统的配置。它包括总线各端口是配置为主模式还是从模式、各通信协议的波特率等。系统可以通过两种方式配置:一种为硬件方式配置,另一种是通过互连网进行软件配置。协议间通信总调度模块主要是驱动不同协议之间进行相互通信。各总线协议的格式解析分别由相应的协议模块完成。硬件驱动模块主要完成把各硬件缓冲区中的数据发送到总线,同时把从总线接收来的数据存放到协议缓冲区中。
2.3 缓冲区结构
本系统的缓冲区采用改进的循环队列结构,采用了三个指针Bp.In、Bp.Out、Bp.Try。其中,Bp.In是队头指针。当队列接收一数据时,如果队列缓冲区尚有空间,则数据入队,同时Bp.In加1。Bp.0ut是队尾指针。当数据要出队时,如果队列缓冲区非空,则Bp.Out加1。队列缓冲区空或满的判定方法可以用下面的伪C语言描述:
if(Bp.In++==Bp.Out)
{队列缓冲区已满};//如队头加1等于队尾指针,则//表示该队列已满
if(Bp.0ut==Bp.In)
{队列缓冲区已空};//如果队尾指针赶上队头则表示//该队列已空
Bp.Try是为通信时重发而准备的。当要发送数据时,Bp.Try向前移动(Bp.Try++),但Bp.Out不动(数据不出队)。当Bp.Try=Bp.In时,表示队列缓冲区已没有数据要发送。如果要求数据重发,仅仅把Bp.Try重新指回Bp.Out(Bp.Try=Bp.Out)再次发送。只有当发送成功时,才允许数据出队(Bp.Out=Bp.Try)。由于一次发送数据的多少由Bp.Try决定(一次不一定把队列缓冲区数据都发送完),这样给数据的发送提供了极大的方便。
2.4 硬件缓冲区
系统要发送数据时把发送协议缓冲区的数据拷贝到发送硬件缓冲区,并驱动一次发送后退出。硬件发送缓冲区中的数据是由发送中断自动完成的。硬件发送中断驱动完一次数据发送就退出。当硬件发送完数据后就会产生中断标志并重新进入中断,重复上面的过程直到数据发送完。同样,发送中断只负责发送完硬件发送缓冲区中的数据而不关心这些数据代表的意义。中断程序流程图如图4所示。
2.5 各总线协议间的通信方法
各总线协议间通信是采用周期轮询方式下的实地址共享。其基本思想就是系统定时地由配置为主模式的端口向其对应总线的每个从机发送请求读数命令包。从机接收到命令后就把它的数据传送给主机(总线集成器)。主机把接收到的数据存放在对应的协议地址中。当配置为从机的端口所对应的总线上的主机向总线集成器请求数据时,总线集成器只是简单地把前一个周期轮询的数据应答过去。由于轮询总线的周期比较短,因此应答的数据稍微滞后。但对总线采集的数据的真实性影响不大。