引言
随着我国航空事业的迅速发展,各种新型飞机和发控设备相继研制成功,以往一些测控设备在功能和性能上已无法满足新的要求。本测控系统就是在某型飞机的研制过程中扩展出来的一个功能比较全面的1553总线测控系统,总体上采用了PC/104结构的嵌入式系统,既可以实现1553总线数据的实时接收和发送,还可以完成多路数据的采集及负载控制。
总体概述及工作原理
本系统的主要功能是对外部的电压电流及负载I/O信号进行采集测量,并根据由1553总线传输来的飞机控制设备发送的命令字对负载进行控制,对电压电流及负载当前状态进行监控,并将当前数据反馈给控制设备。整个系统在满足实时高速传输的同时,也必须完成对负载精确的控制,测控过程要能够实时监控和显示,方便操作人员控制及发送指令。
为满足以上条件,系统主构架选用了PC/104的嵌入式模块,不仅尺寸小、功耗低,而且其堆栈式结构方便了外扩设备。总体上分为采集、处理、通讯三大部分,各部分硬件上通过PC/104总线紧密连接,由上位机通过以太网总体控制,而软件上分成独立的模块,实现各自部分的功能,在实时嵌入式操作系统VxWorks下再通过主程序的调度协调起来。
硬件设计
系统硬件总体设计以PC/104体系结构为核心,以1553B总线卡作为与飞机(或其他发控设备)通讯的主要接口,ADT600负责电压电流模拟量和负载I/O信号的采集。PC/104可以外扩LCD显示器和键盘鼠标等外设,通过以太网与上位机相连可对测控系统进行有效的控制和过程监测,同时PC/104通过母板外接I/O扩展板对负载进行实时控制。系统框图如图1所示。
SCM/SuperDX是一种高度集成、自栈结构、IBM-PC/AT兼容的PC/104 CPU模块,它被设计成可以方便与其它周边设备及模块构成完整系统的核心部件,采用增强型的80486处理器作为CPU,板载有PC/AT兼容的DMA控制器、中断控制器及定时器,ROM-BIOS,4M~16M字节的DRAM及键盘,网口等。本系统中,将嵌入式操作系统VxWorks下载到Campact Flash中以启动PC/104,上位机通过以太网与PC/104相连,通过网络加载将程序加载到PC/104的RAM中执行,上位机进行实时监视和程序控制,PC/104的LCD显示屏可以实时显示测试数据及数据传输状况。
采集卡选用SBS公司的ADT600,它与PC/104完全兼容,最多提供十六个模拟输入通道,通过71055的可编程外围接口(PPI)提供24路数字量I/O线。模拟量输入的量程可用跳线器选为?5~+5V,?10~+10V,0~10V,并带有+/?35V的过压保护。本系统的模拟量是电压电流信号,量程选择?5~+5V。而I/O通道通过71055的PPI设置为方式0的基本输入输出,采集卡和调理板调理电路硬件连接图如图2、3所示。
电压、电流模拟量的采集应注意数字地和模拟地的分离,以减小干扰,最后通过磁珠单点相连,而I/O电路将电压/地的数字I/O信号通过转换电路转换为采集卡输入电压范围的地/开路信号。
1553B通讯卡选用SBS公司的ASF-PC104-XT-1,该卡能实现PC/104总线和1553B总线的转换,是一款智能MIL-STD-1553的板卡,支持MIL-STD-1553A和MIL-STD-1553B协议,适用于PC/104底板,可以工作在BC模式、RT模式、BM模式及并发BM模式,实现多个终端之间的快速通信。它具有以下高级结构特点:具有高速可编程逻辑装置用于以字为单位的底层1553协议的编解码;采用TI公司的DSP用于信息级和底层1553协议的处理;具有128K字节的高速静态双端口RAM用于信息缓存;配合底板接口的高速可编程逻辑电路(ASIC设计);板上提供标准的和IRIG时间码相关的高级计时电路;配套的软件接口库为1553和429设备管理提供扩展功能。
由于SCM/SuperDX提供的I/O资源有限,因此,采集卡ADT600和1553B通讯卡的I/O地址的合理选择就十分重要,以避免冲突以及在调试时产生不必要的麻烦,SCM/SuperDX的I/O地址分配如表1所示。ADT600模块要占据十二个连续的I/O口的位置,基地址由DIP开关选择,而ASF-PC/104卡需要主机为其分配未经使用的8块连续的地址寄存器,考虑以上因素,选取ADT600的基地址为300h,ASF-PC/104为390h。
软件设计
软件设计的重点主要包括底层设备驱动的编写、系统任务的划分及优先级的设定。操作系统选用VxWorks,以充分满足1553B实时通讯的要求,系统总体软件主流程图如图4所示。系统启动之后执行主程序进行自检测和AD/1553板卡的初始化,若失败则报错,将错误信息显示在显示屏上,成功后创建主任务并执行,包括数据的采集、发送和接受及解析命令控制字并执行,主程序将循环执行,直到上位机发送停止程序的控制命令。
底层设备驱动配置
驱动程序为硬件平台和应用软件间提供一个固定接口的软件层,应用程序必须通过驱动程序才能与硬件进行数据通信。而驱动程序的编写又与操作系统密切相关,具体的操作系统对驱动的要求有所不同,本设计的底层驱动和操作系统VxWorks及任务关系图如图5所示。根据本系统的实际需要,编写了与VxWorks系统密切相关的底层设备驱动。
首先介绍1553B通讯卡的驱动配置。本系统选用的1553B通讯卡有两种板卡访问方式:内存映射和I/O访问。I/O寻址采用专门的指令,编程缺乏灵活性,并且每次只能传送单个字节;而内存映射方式指令丰富,编程方便、硬件节省,便于实现快速交换数据。故选用内存映射方式,PC/104可以映射的空间为0xC8000~0xEFFFF,选取内存映射基地址为0xD0000。同时INT引脚通过跳线选择IRQ9。软件设置如下:
1)调用setup_fw.c将固件库源文件F002p.dat生成与ASF-P104卡匹配的Firmware.h(固件数据结构)文件,为板卡硬件提供匹配的接口定义信息;
2)在sbs_sys.h文件中添加#define VXWORKS和#define NO_FILE_SYSTEM语句行,设置操作系统信息;
3)在dev_cfg.h文件中按如下设置定义设备配置信息:
配置好软件设置后就是1553驱动程序的实现,即完成设备驱动函数的编写。在编写函数之前,需要定义驱动号以及设备的描述符,这在头文件中实现,如下所示:
}M1553_DEV; /*1553设备描述符*/
头文件定义完毕就可以编写函数了,以编写M1553Drv( )函数为例。M1553Drv( )函数调用iosDrvInstall( )安装设备的驱动例程。它在设备驱动程序表中为设备分配一个条目,并在其中填入此设备xxCreate( ),xxDelete( ),xxOpen( ),xxClose( ),xxRead( ),xxW rite ( )和xxIoctl( )等函数的地址。函数实体如下:
一一编写其他的1553设备驱动函数M1553DevCreate( ),M1553Open( ),M1553Read( )和M1553Write( )以及中断服务程序M1553Int( )。
以上为1553B卡的底层驱动编写,ADT600与之类似,只是头文件有差异,同理编写设备函数ADC_InitializeBoardSettings(),ADC_DigitalToSBS(),ADC_SetChannel(),ADC_StartConversion(),ADC_ConversionDone()和ADC_ReadData()。至此,设备驱动配置完成,将驱动程序加载至应用程序,上层程序代码就可以直接调用这些底层驱动函数进行编程。
任务设计
VxWorks是一个实时多任务操作系统,因此根据系统的功能模块要求,将应用程序分割成若干个独立的任务,使CPU通过操作系统来调度多个任务,轮番服务于一系列任务中的一个,使得应用程序的设计大大简化,并使程序的结构模块化、层次化。同时,使用了实时内核,所有时间要求苛刻的事件都可以尽可能快地得到处理。
任务划分的好坏直接影响到系统的性能。将一个实时应用问题分解为多个任务,可以加快执行速度,且有效地利用系统资源。但是,过度地分解任务,将会使系统中有大量的任务,需频繁地进行任务的切换,任务之间还要进行很多同步和互斥控制,将增加系统服务工作,降低系统的速度和有效性。因此,划分任务时必须进行各种综合平衡和折衷,有时将两个操作合并在一起处理效果好些,但有时必须分开处理。这都依赖于实时应用的特性。
根据系统功能需求,主任务划分如下,任务间总体上采用优先级抢占机制进行调度,各任务功能及优先级的划分如表2所示。PC/104优先接受来自飞机控制设备的命令字,然后执行负载控制任务,等待控制任务释放信号量后,程序就执行数据采集及发送任务,通讯监控任务对数据的接发进行实时监控,确保无信息的丢失,更重要的是,第一时间传递发控设备的控制命令,若启动重发机制之后仍然接受不到信息则会报错。而硬件初始化及自检测任务只是在主程序开始时调用,由于优先级的限制,只有等待再次软启动之后才会再次执行。
除了优先级的抢占外,主要任务间还通过设置信号量进行二次调度,确保任务的连续正确执行及资源的合理分配,优化程序结构。在主程序引导函数ProgStart( )中,建立了2个二进制信号量和1个互斥信号量:semCON,semSEND,currNodeSemId。semCON信号量用于数据接收任务和监控任务的信息传递,主要是数据的超时重发机制监控;semSEND信号量用于数据采集任务和数据发送任务的信息传递;currNodeSemId信号量用于数据采集监控任务中数据采集的完整性而设立的信号量,避免通讯任务抢占临界资源以及调用不合理而产生“死锁”现象。其中,2个二进制信号量创建时为空(SEM_EMPTY),处于不可用状态,高优先级任务执行semGive()释放后变为满(SEM_FULL),变为可用状态,供低优先级任务执行semTake()使用。互斥信号量currNodeSemId创建时,为了避免优先级倒置的情况以及为任务提供删除安全,联合使用了SEM_Q_PRIORITY、SEM_INVERSION_SAFE、SEM_DELETE_SAFE选项联合使用,使用按位或操作,程序代码如下:
currNodeSemId=semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE|SEM_DELETE_SAFE)
程序最后执行ProgStop()结束主程序,删除创建的任务并释放信号量资源。因为程序中使用了互斥信号量,并启动了互斥信号量的任务删除保护功能,所以在删除任务之前,必须先成功占有互斥信号量。先删除任务,再删除信号量。
结束语
本文主要讲述了1553B总线测控系统的设计及其在VxWorks下的软件开发过程。实际中,建立了地面最小实验系统,经过联机调试,测控系统运行正常,系统具有很好的实时性和稳定性,达到了预期效果。
责任编辑:gt
-
嵌入式
+关注
关注
5082文章
19104浏览量
304767 -
操作系统
+关注
关注
37文章
6801浏览量
123280 -
总线
+关注
关注
10文章
2878浏览量
88051
发布评论请先 登录
相关推荐
评论