探讨总线的接口软件设计与实现

所属栏目:软件开发论文 发布日期:2010-09-15 08:37 热度:

  摘要:近年来,1553B数据总线由于其高可靠性和实时性,在航天、航空、军事等领域的电子联网系统中取得了广泛的应用。MIL-STD-1553B是美国军用标准的串行通信总线,全称是“飞机内部时分制指令/响应多路传输数据总线”。这个标准规定了数字式的命令/响应时分制多路数据总线的技术要求,也规定了多路总线的操作方式和总线上信息流的格式以及电气要求。MIL-STD-1553B总线接口板是实现航天电子综合化系统的关键部件,完成总线的信息综合、资源共享、任务协调和容错重构。
  关键词:1553B总线;接口软件;总线控制器;远程终端;堆栈
  11553B总线卡的通信接口
  1553B总线的主要特征:传输速度为1Mbit/s,字的长度为20bit,数据有效长度为16bit,信息量最大长度为32个字。传输方式为半双工方式,传输协议为命令/响应方式,故障容错是典型的双冗余方式,第二条总线处于热备份状态。传输媒介为屏蔽双绞线,总线耦合方式为直接耦合
  和变压器耦合。由于PC局部总线技术的发展,使得PCI总线成为PC总线事实上的标准。这使得航电系统所需要的接口板由ISA总线向PCI总线的转换便显得尤为迫切。我们设计的仿真控制系统实现了基于PCI总线通信的1553B总线接口板。其具体的设计思路是:与1553B总线的接口采用DDC公司的BU-61580协议芯片,与PCI总线的接口采用AMCC公司的PCI总线接口芯片S5920,其中重点部分在于S5920与BU-61580之间的接口逻辑的设计,这部分采用了一片Lattice公司的GAL20V8可编程逻辑芯片和地址锁存和数据驱动、隔离的分立元件来实现。1553B总线协议电路主要是围绕BU-61580协议芯片其RT子地址要用专门的外部电路来设置,接口卡上设计了RT子地址设置电路,可以通过增减短路来完成1553B总线终端RT子地址的设置。1553B总线输出电路完成接口卡与1553B总线的信息交换,主要包括隔离变压器和专用接口。接口卡有A和B两个输出通道,通道都可独立接受和发送信息。信号从BU-61580的内部发送接收机出来后要经过一个隔离变压器后,连接到专用的传输线接口上。逻辑电路主要通过一片GAL20V8完成接口卡全部逻辑处理,包括S5920本地端和BU-61580相连时一些控制信号的转换等逻辑功能。接口卡的电源状态由指示电路上的LED指示灯来显示,1553B板卡的实现原理图如图1所示。
  表1.jpg
  2接口软件设计
  1553B总线卡是仿真测试系统的核心部件,它的功能是连接测试系统和被测系统,实现两个系统间的实时信号通讯,保障系统间各种工作状态控制及状态数据及时、正确地传输。本文不讨论总线卡的有关底层驱动问题,只探讨接口传输应用层软件的相关设计和实现。
  2.1软件总体设计思路
  总线上所有消息的传输都由BC激励和控制,因此其软件设计的好坏关系到整个系统的性能。本BC通讯软件的设计有如下几个关键之处。
  2.1.1消息的组织
  本应用软件的消息有数据转发、采集RT(RotateTer-mina1,简称RT)工程参数以及时间码。广播时间码是每帧都要处理的消息,属于周期性消息。采集RT工程参数是由事件的请求触发的,属于非周期性消息。对于非周期性消息,BC要在原有周期性消息基础上增加要求RT发送向量字的方式指令消息。设计时,BC以4Hz的频率向RT发送询问指令,被查询的RT若有事件请求,就将矢量字置位,BC将在下一帧增加处理该事件的消息。这样,每一帧的消息描述块、消息块内容和堆栈的消息处理个数都不一样。所以,每一帧都需要在保留周期性消息的前提下增加非周期性消息描述块、复位堆栈指针、更改消息个数、更新消息块、填写发送数据和接收数据。
  2.1.2消息时间间隔的选取
  消息的时间间隔可以是均匀的,也可以是非均匀的。由于消息之间的时间间隔对所有RT都会产生影响,而且任务不同使得总线繁忙程度也不同。另外,有些消息需要在消息结束后的中断服务中进行处理,这时适当增加消息间隔时间可提高系统通讯的可靠性;而有些消息不需要这
  样的处理,减少消息时间间隔反而有利于提高总线系统运行效率。因此,本设计采用非均匀分配时间间隔的方式。实现这一目的,只需根据不同的消息对描述符堆栈中时间间隔字进行编程即可。根据以上分析,所设计的BC通讯软件的工作过程可用图2表示。
  表2.jpg
  2.2关键数据结构和函数介绍
  测试系统的功能是模拟机上航电系统,通过对被测试系统进行控制操纵等过程来完成各项测试任务。所以,本项目中1553B卡主要工作于BC模式。而对于1553B卡软件的开发,主要使用以下几个重要函数:
  2.2.1与板卡的硬件控制相关的函数
  (1)Get_4000Module_Type(WORDdevice_num,WORDmodule_num,WORD*modtype):该函数用来获取板卡。参数device_num指板卡数,取值范围是0~3;参数module_num指板卡上相应的模块,取值范围是0~2;参
  数modtype指板卡类型。
  (2)Init_Module_MCH(usintdevice_num,usintmod-ule_num):该函数用来初始化板卡相关模块。要注意的是,它是第一个用户必须调用的函数,使得用户可以访问1553板卡上的四个模块。
  (3)Set_Mode_MCH(inthandle,shortmode):用来设定板卡的工作模式。参数mode的取值有BC_MODE、RT_MODE、BM_MODE和BM_RT_MODE。在本项目中,板卡工作于BC模式,故mode取值为BC_MODE。
  (4)Stop_Card_MCH(inthandle):该函数用来停止板卡的运行。
  (5)Release_Module_MCH(inthandle):该函数用来释放板卡资源并给板卡下电,每调用一次Init_Module_MCH()函数,就必须调用一次Release_Module_MCH()函数。
  2.2.2关于1553B数据传输的重要函数
  (1)Read_BC_Datablk_MCH(inthandle,usintblk-num,usintwdcnt,usint*data):该函数用来读取数据。参数handle是函数Init_Module_MCH()的返回值,参数blknum指数据堆栈号,参数wdcnt指希望从buffer里读取数据的字数,参数data是一个指向buffer的指针,读到的1553数据最终会存储到这个buffer。
  (2)Set_BC_Cmd_MCH(inthandle,usintcmdnum,structCMDENTRY*entry):该函数用来创建一个命令栈的入口,参数cmdnum指命令堆栈入口号。
  (3)Load_BC_Datablk_MCH(inthandle,usintblk-num,usintwdcnt,usint*data):该函数用来为一个RT接受命令加载数据。参数blknum为数据堆栈号,取值范围是0~750,wdcnt为希望写入发送寄存器里的字数,参数data为用户想要写入的数据地址。
  (4)Run_BC_MCH(inthandle):该函数在所有的1553消息被Set_BC_Cmd_MCH()创建后调用,用来执行消息堆栈,送出消息。
  2.2.3软件封装的函数
  考虑到使用的方便和有效等情况,在二次开发过程中对1553B总线卡的操作进行了类的封装并在类中提供了以下接口函数,专门用来进行1553B卡的通信控制。
  (1)初始化函数的封装。1553B卡的初始化函数
  Init1553()利用BOOLInit1553()进行封装。与初始化函数相对应,程序退出时必须调用释放1553B板卡资源的函数Stop1553()。
  ①1553B卡的初始化函数Init1553()的封装。
  BOOLInit1553()
  {
  usintuModType;
  Get_4000Module_Type(0,0,&uModType);//获取板卡
  if(uModType!=EXC4000_MODTYPE_MCH){
  AfxMessageBox("Error_EXC4000PCI");
  returnFALSE;
  }
  m_ExcHandle1553=Init_Module_MCH(0,0);
  if((uModType=Set_Mode_MCH(m_ExcHandle1553,BC
  _MODE))!=0){
  AfxMessageBox("1553moduleinitfailed");
  returnFALSE;
  }
  returnTRUE;
  }
  ②Stop1553()函数的封装。
  与初始化函数相对应,程序退出时必须调用释放1553B板卡资源的函数Stop1553()。
  BOOLStop1553()
  {
  usintuModType;
  if((uModType=Stop_Card_MCH(m_ExcHandle1553))!
  =0){
  AfxMessageBox("1553modulestopfailed");
  returnFALSE;
  }
  if((uModType=Release_Module_MCH(m_
  ExcHandle1553))!=0){
  AfxMessageBox("1553moduleReleasefailed");
  returnFALSE;
  }
  returnTRUE;
  }
  (2)数据处理函数的封装。
  ①BOOLSend1553MessageRTR(WORDcmd,WORDdata[],UINTnum,intdataIp):该函数用来控制被测系统发送“接受指令”给测试系统,其中参数data[]是要测试系统接收的数据,参数dataIp是要写入的数据堆栈号。
  ②BOOLSend1553MessageRTT_CYCLE(WORDcmd,intdataIp,WORDtime):该函数是用来发送“发送指令”给测试系统。
  3接口软件测试
  为了方便系统应用软件的开发,能够及时了解所设计的1553B接口卡软件的工作状态,我们测试它的通信效果。主要测试内容有1553消息字块定义、消息查看、错误信息、重试等几个部分。
  3.11553消息字块定义
  1553B总线上发送数据以“消息”为单位,首先需要定义“消息”。在测试界面上可以通过选择工作模式、传输通道、间隔时间等内容来确定消息字块的样式。消息定义的界面如图3所示。在板卡的测试中,选择BC-RT工作模式,RT地址设为0,子地址为1。时间间隔(Gap)设置为1000微秒,选择B通道。
  表3.jpg
  3.2数据输入
  测试数据可以由自己输入或者点击“Random”按钮产生随机数据,如图4所示。
  
  3.3数据接收显示
  数据显示界面如图5所示。
  表5.jpg
  在对端显示所接收的数据,其中包括控制字、状态字、数据内容、错误信息显示等内容,从而可以准确地掌握数据总线的工作情况。错误消息显示能够帮助操作人员对数据总线的错误进行判断和定位,使问题较快地得到解决。测试结果表明,该接口软件能够实时正确地传输数据
  和控制字块,满足仿真测试系统的通信要求。
  4结束语
  MIL-STD-1553B总线作为一种高可靠性和实时性的主从式数据总线,目前在军事和工业领域已经得到了广泛的应用。本设计采用价格低廉且易采购的元器件,组成了结构简单、功能完善的1553B多路总线接口模块。根据任务需求主要实现了BC通信的板块,采用VC编程实现了接口板的通信,提高了代码的效率,大大缩短了编程的时间。

  搜论文知识网致力于为需要刊登论文的人士提供相关服务,提供迅速快捷的论文发表、写作指导等服务。具体发表流程为:客户咨询→确定合作,客户支付定金→文章发送并发表→客户接收录用通知,支付余款→杂志出版并寄送客户→客户确认收到。鸣网系学术网站,对所投稿件无稿酬支付,谢绝非学术类稿件的投递!
  

文章标题:探讨总线的接口软件设计与实现

转载请注明来自:http://www.sofabiao.com/fblw/dianxin/ruanjiankaifa/4158.html

相关问题解答

SCI服务

搜论文知识网的海量职称论文范文仅供广大读者免费阅读使用! 冀ICP备15021333号-3