设计了基于PCI总线的1553B总线接口驱动软件, 系统运行环境为Windows XP加RTX实时扩展模块, 保证了总线接口驱动软件的实时性和容错性。
MIL-STD-1553B为美国国防部制定的国内、国际陆、海、空三军和航天工业控制系统广泛应用的数据总线,为电子系统的标准信息传输和互联接口系统。这种数据总线被用来为各种系统之间数据和信息的交换提供媒介,它类似"局域网或LAN"。总线的传输速度为每秒1M 比特,字的长度为20 个比特,数据有效长度为16 个比特,信息量最大长度为32 个字,传输方式为半双工方式,传输协议为命令/响应方式,故障容错有典型的双冗余方式,第二条总线处于热备份状态,信息格式有BC 到RT、RT 到BC、RT 到RT、广播方式和系统控制方式;能挂31 个远置终端,终端类型有总线控制器(BC)、远置终端(RT)和总线监听器(BM),帧传输方式可分为两部分:帧传输方式和广播帧传输方式。在帧传输方式中有六种帧传输格式,分别为BC 到RT、RT 到BC、RT 到RT 和命令模式三种,传输过程中各种字所需的时间:命令字、状态字和数据字均为20 微秒,响应时间最长为12 微秒。不同帧与帧之间传输是有时间间隔的,一般时间间隔为10 到30 微秒,传输媒介为屏蔽双绞线。
RTX 是美国Ardence公司开发的Windows平台的硬实时系统,可以为用户提供优秀的实时控制性能,高效的可扩展性及稳定性。RTX 被设计为Windows上的一个实时的扩展子系统,其本身并不是一个独立的操作系统。RTX 提供了对IRQ、I/O、内存的精确控制,以确保实时任务执行时具有100%的可靠性。由于RTX的操作均在Ring 0 级实现,可以在保证最高性能的基础上实现最少的配置操作。RTX支持30KHz的持续中断触发速度,平均IST延迟小于1微秒。RTX 与Windows 系统无缝地结合在一起,可以利用Windows 系统的各种优势。包括大量标准的API函数;高效的内存管理机制;以及各种Windows 下的通用资源。RTX 应用程序在开发阶段运行于系统的Ring 3 级别;一旦开发者完成了调试工作,RTX 应用程序将被部署到Ring 0 级别以提供最好的时间响应特性。其他的Windows 扩展不具备这种能力。作为一个完全的Windows 扩展系统, RTX 子系统(RTSS, Real-time Sub-system )拥有精确高速的任务调度器,同时支持基于优先级和时间片轮询两种调度算法。RTX最高支持1000个独立的进程,每个进程下可以运行的线程数不受限制。128个优先级可以满足几乎所有用户的编程需要,RTX调度器可以确保线程切换时间保持在500纳秒到2微秒之间。通过应用高速的IPC信息和同步机制,RTX 可以实现和Windows之间的数据通讯。精确的时间执行机制对实时系统至关重要,通过选用适合的时钟,RTX 的时钟分辨率可以达到100纳秒,并且不会产生漂移现象。其定时器周期最低可以做到1000、500、200、100微秒。作为Windows 的扩展子系统,除了借助Windows 的资源外,RTX还可以独立存在,即使在Windows 系统呈现蓝屏时,RTX 依然可以健壮地运行。
- RTX实时扩展子系统架构
---
- 基于RTX下的PCI总线1553B模块驱动程序主要开发步骤
采用基于PCI总线QPCX-1553板卡开发,下图是QPCX-1553B板卡的部分寄存器功能。
--
根据板卡说明书,通过对PCI总线的枚举获取QPCX-1553板卡基地址,控制寄存器,中断号等信息,程序如下
PCI_SLOT_NUMBER SlotNumber;
PPCI_COMMON_CONFIG PciData;
UCHAR buffer[PCI_COMMON_HDR_LENGTH];
ULONG uTemp = 0;
USHORT IoBase;
int vendorID;
int deviceID;
PCHAR vBAR0=NULL, vBAR1 = NULL; // pointer virtual memory addresses
vendorID=0x13c6;
deviceID=0x1556;
以上代码通过RtGetBusDataByOffset函数来枚举计算机上的所有PCI总线槽,每个槽上插的PCI板卡信息读取放在PciData结构体里,根据(PciData->VendorID==vendorID)和(PciData->DeviceID==deviceID)来找到我们的板卡,这里我们的1553B板卡的vendorID为0x13c6,deviceID为0x1556,这样确定我们的板卡。根据板卡手册确定我们板卡的8MB内存空间,基地址存放在PLX9056的BAR2里面,及在结构体的位置为PciData->u.type0.BaseAddresses[2],获取基地址后,通过RtMapMemory()函数映射成我们应用程序可以访问的指正,通过这个指针实现对板卡各个寄存器的操作。RTX环境下具有直接访问内存和IO的能力,中断服务线程直接响应物理中断号,不需要中断的中转,板卡中断服务函数绑定使用以下函数:
HANDLE RtAttachInterruptVector(
PSECURITY_ATTRIBUTES pThreadAttributes,
ULONG StackSize,
VOID (RTFCNDCL *pRoutineIST)(PVOID ContextIST),
PVOID ContextIST,
ULONG Priority,
INTERFACE_TYPE InterfaceType,
ULONG BusNumber,
ULONG BusInterruptLevel,
ULONG BusInterruptVector);
数据传输通信协议是指对数据传输的约定,包括定时、控制、格式化和数据表示方法等。1553B总线采用指令/响应型通信协议,它有三种终端类型:
(A) 总线控制器(BC),它是在总线上惟一被安排为执行建立和启动数据传输任务的终端。
(B) 远程终端(RT)它是用户子系统到数据总线上的接口,它在BC的控制下提取或吸收数据。
(C) 总线监视器(MT),它是监控总线上的信息传输,以完成对总线上的数据源进行纪录和分析,但它本身不参与总线通信
根据1553B总线协议和QPCX-1553B板卡的寄存器功能,在RTX下实现编写QPCX-1553B的以下功能和函数
--BM功能流程图
根据BM的流程,实现以下各个功能函数:
初始化卡:BusTools_API_InitExtended()
BM初始化卡: BusTools_BM_Init()
设置总线方式:BusTools_SetInternalBus()
设置信息分配:BusTools_BM_ MessageAlloc()
设置时间模式:BusTools_TimeTagMode ()
设置滤波参数:BusTools_BM_FilterWrite()
耦合方式和电压:BusTools_SetVoltage()
动BM工作:BusTools_BM_StartStop()
获取总线消息:BusTools_BM_MessageRead()或者BusTools_BM_MessageReadBlock()
停止BM工作: BusTools_BM_StartStop()
板卡下电:BusTools_API_Close()
--RT功能流程图
根据RT的流程,实现以下各个功能函数:
初始化卡:BusTools_API_InitExtended()
设置总线方式:BusTools_SetInternalBus()
设置RT有广播方式:BusTools_SetBroadcast()
设置子地址模式码方式:BusTools_SetSa31 ()
RT初始化卡: BusTools_RT_Init()
设置模拟RT:BusTools_RT_AbufWrite ()
开收/发缓冲区:BusTools_RT_CbufWrite ()
置模拟RT发送的消息: BusTools_RT_MessageWrite ()
启动RT工作: BusTools_RT_StartStop ()
读模拟RT的消息: BusTools_RT_MessageRead ()
停止RT工作: BusTools_RT_StartStop ()
板卡下电:BusTools_API_Close()
--BC功能流程图
根据BC功能的流程,实现以下各个功能函数:
初始化卡:BusTools_API_InitExtended()
初始化BC功能: BusTools_BC_OneShotInit()
设置耦合和输出电压:BusTools_SetVoltage()
开始BC消息传输: BusTools_BC_OneShotExecute()
板卡下电:BusTools_API_Close()
基于RTX的1553B总线接口驱动软件具备与标准Windows驱动软件高度的一致性,同时具备强大的实时性和容错性,在某xx导弹单元测试仪中经过实践验证,满足了项目的使用,取得了很好的效果。
● 国防安全和军事工程
● 航空和航天仿真系统
● 分布式实时仿真系统
● 实时仿真测试系统
● 飞行模拟器显控系统
● 分布式实时仿真和转台控制系统