1553B总线控制器异步通讯仿真软件设计
建立模块(M1-1)和仿真功能实现模块(M1-2)两个主模块组成,各主模块根据需要包含相应的功能子模块(模块的命名方式:M层次-模块号)。设置文件建立模块(M1-1)为用户提供输入界面,用户可以方便地定义系统所使用的终端地址、要传输的消息内容和数据以及周期消息传输的消息表,对不同的用户有很大的适应性。仿真功能实现模块(M1-2)根据M1-1提供的数据定时组织周期消息的传输,并查询异步消息的传输请求,及时响应异步消息请求并组织传输,每个大周期定时向故障节点发送查询消息,以判断相应RT的状态并刷新实时显示各节点状态。系统模块数据流如图3所示(设该软件为0级模块,即M0-仿真软件)。
设置文件建立模块主要为用户提供一个友好的输入界面,用户输入的数据主要为仿真功能实现模块提供输入。仿真功能实现模块从软件中取出用户在设置文件模块中定义的传输消息所必需的数据,组织消息传输。根据不同功能的实现,它所包含的子模块主要为:IDEA卡的初始化和周期消息传输(M2-1)、异步通讯实现模块(M2-2)、RT故障检测(M2-3)。
由于IDEA卡在驱动上提供了应用程序接口函数API,因此在操作IDEA卡时只需调用相应的API,而不需直接驱动IDEA卡。在驱动IDEA接口卡进行数据传输前首先要初始化数据接口卡,通过调用相应的API,进行卡的自检,并将用户定义的消息内容和消息表写入IDEA卡的存储区。组织周期消息传输时,为节省总线的开销,在每个大周期结束前向网络连接的终端发送查询状态的消息,判断该节点是否可以正常通讯,将正常通讯的终端设置为活动终端,并在组织消息表时进行过滤,只组织关于活动终端的消息。图4给出了仿真软件在仿真平台中的位置及其结构。
3.1 异步通讯实现模块M2-2
本软件的重点就是非周期消息的组织传输,即异步通讯的实现。周期传输的消息多数时间是固定不变的,因此每个周期都传输相同的消息实际加重了总线的负载,为此本软件中大多数消息都为异步消息,对终端进行查询。当消息变化时请求发送的终端设置相应的矢量字,总线控制器则根据收到的矢量字发送相应的消息。这样大大节省了总线的开销,提高了效率。本软件采用BC定时查询方式实现异步通讯。
仿真软件所仿真的BC每个小周期(50ms)内向各个活动终端发送方式指令-发送矢量字,询问该终端是否有异步通讯请求,被询问终端向BC返回一个矢量字(0~31)。若某一终端返回矢量字0,则表示该终端无异步通讯请求,BC继续查询下一活动终端;若该终端返回的矢量字非零,则表示该终端有异步通讯请求,BC必须立即组织该终端请求的异步通讯。
异步通讯是根据查询返回的矢量字组织的,不同的矢量字(1~31)对应不同的消息内容和数目,每个矢量字所对应的非周期消息数目和内容由用户在设置文件模块中自由定义。为了便于在同步通讯中插入异步通讯的程序实现,定义一个数组队列。在仿真开始前遍历用户在消息定义中输入的异步消息,将消息号加入对应的矢量字的数组中,并将该计数器加1。
在对IDEA卡实现异步通讯即非周期消息的传输时,根据IDEA卡提供的API,采用使IDEA卡产生中断的方法,设置向各个终端查询矢量字的消息传输结束后产生中断,在IDEA卡的中断处理例程中组织异步通讯。如果返回的矢量字非零,则该终端有异步传输请求,取出相应矢量字的第一条异步消息,插入消息表中传输,并将该矢量字的消息数减1;同样为异步消息设置传输结束后中断,在中断处理程序中继续判断消息数目,循环至该适量字对应的异步消息传输完毕,继续查询下一终端,传输周期消息。程序流程图如图5所示。
3.2 RT故障检测模块
由于总线所连接的各个终端正常运行的时间很长,出故障的概率较小。为节省总线开销并及时捕获故障节点,在每个大周期(即40个小周期)结束前向每个终端查询一次状态。若有节点已经启动/修复,则立即清除该节点的故障标志,重排周期消息表,添加与该终端相关的可传输消息;若发现某终端故障标志被设置,同样重排消息表并将相关消息删除。为了保证消息的正确传输,当某条消息传输出错时定义消息的两次重发,当消息在该总线和另一条余度总线上重发失败后,将该消息视为出错,同时将相应的终端RT设置故障标志。程序实现控制流如图6所示。
3.3 软件设计的容错处理
1553B总线主要应用在航空电子即空中运动平台中,舰船系统也有应用。应用环境都比较恶劣,受到的干扰较多,且工作时间长。1553B本身采用了一定的措施以保证数据传输的正确性,如它采用双余度总线A和B(见图3),消息在其中一条总线上传输,若此总线发生错误,则消息也可以在另一条总线上传输。本软件利用1553B这个特点,为每条消息设置中断。在中断例程中,对传输出错