伍斌
摘要:某型地面维护系统通过RS422A串行通讯口与电子控制器进行数据通讯,对某型发动机数字式电子监控系统进行友好的交互式维护。该文深入地介绍了某型发动机数字式电子监控系统地面维护设备的实现原理,以及Windows操作系统下利用串口通信机制实现该系统的方法。
关键词:串行通信;SPCOMM;线程
中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)01-0180-03
Based on the Delphi and the Realization of Serial Communication of a Certain Type of Ground Maintenance System
WU Bin
(College of Computer Science&Technical,Guizhou University,Guiyang 550025,China)
Abstract:A certain type of ground maintenance system through the RS422A serial communication mouth and the electronic controller in data communication, in one type of engine digital electronic monitoring system for friendly interactive maintenance. This paper introduces a type of engine digital electronic monitoring system ground maintenance equipment in principle, and Windows operating system of serial communication mechanism to realize this system method.
Key words: serial communication; SPCOMM; thread
串行通信作为一种灵活、方便、有效的通信手段,被广泛应用于工业控制。在工业生产实践中,用PC机和单片机或PLC工控机组成的系统对工程进行实时监控,完成数据采集、数据处理以及控制信号的产生与传输等功能。此时,PC机要与过程控制的实时信号相联系,就要求能实现对PC机的串行端口进行操作。准确快速地完成这些功能,了解多路串行通信原理是关键。
1基于Windows的串行通信机制
Windows操作系统的机制禁止应用程序直接访问计算机硬件,其通信机制是使用Windows提供的串行通信API函数和设备控制块(记录块DCB),用户采用多线程技术来实现多路串行通信。在Windows中,操作系统为每个通信设备开辟了用户可定义大小的读/写缓冲区,数据进出通信口均由操作系统后台完成,应用程序只需对读/写缓冲区操作即可。
它为程序员提供了一系列的标准API函数,屏蔽了对通讯线控制器UART的编程及其它操作,其中几个常用的串行通信操作函数如下:CreatFile打开串行口;CloseHandle关闭串行口;SetupComm设置通信缓冲区的大小;ReadFile读串口操作;WriteFile写串口操作;SetCommState设置通信参数;GetCommState获取默认通信参数;ClearCommError清除串口错误并获取当前状态。
2系统实现
在某型地面维护系统中,采用军用加固便携式计算机为平台进行开发,利用扩展IO板卡、RS422A通讯口及相应接口,通过专门开发的维护软件,进行数字式电子控制器交互式维护,具有良好的接口、功能扩展能力,具有友好的用户界面及完善的即时帮助;以直观、易用的操作模式支持数字式电子监控系统调试、检测,发动机的内、外场联调、试车,数据修改、下载、分析等功能。
2.1系统硬件结构
系统由一台上位机(即定制的便携式电脑,其中集成了扩展I/O板卡、RS422A串行通讯口及航空插头),一台电子控制器(含下位机A、下位机B和A/D转换器)及定制的22芯15米屏蔽电缆组成。上位机主要是供用户设置发动机参数,存储、处理控制器发送出来的数据,对数字式电子控制器进行交互式维护;下位机是一台数字式电子控制器,该控制器采用Texas Instruments公司研制的军档数字信号处理器(DSP)SMJ320F240芯片,并集成有模拟/数字转换器ADC、数字/模拟转换器DAC,频率/计数器F/D、数字量输入/输出电路DI/DO及RS422串行通讯口等接口电路。系统硬件结构见图1。
2.2系统软件功能模块
地面维护软件采用模块化设计的方法,总体功能其划分为9个模块:
1)用户权限认证、管理模块(CSC-1):验证用户身份,防止非授权用户使用该系统,并
按照用户的使用情况进行分级保护,防止越级操作。
2)对电子控制器的上电、复位、故障模拟及运行模式设置模块(CSC-2):通过虚拟仪器面板上的按钮、开关等控件,控制IO板卡输出信号,进行电子控制器的上电、进监控状态、复位、故障模拟、通讯通道切换及运行模式设置。
3)电子控制器实时通讯、管理模块(CSC-3):保证与电子控制器进行可靠快速的数据传输。
4)实时数据采集、示波、存储模块(CSC-4):对控制器当前的各种状态进行直观的显示,其中包括64个控制器运行状态信号、29个开关量输入信号、24个开关量输出信号、8个飞控信号、4个频率量信号和14个模拟量信号,还包括当前控制器的各种技术参数的显示。
5)电子控制器飞行记录数据下载、存储模块(CSC-5):将控制器在飞机飞行过程中记录下来的数据从存储器中下载到地面计算机中,然后可通过维护软件的回放功能查看发动机在飞行过程中的各种状态。6)维护数据检查、修改、固化模块(CSC-6):高级用户可对电子控制器当前的各种参数进行查看,并可对参数进行适应性的修改。7)记录数据回放、分析模块(CSC-7):地面维护软件提供对保存数据的回放功能,用以重现控制器在飞行过程中的各种状态,使维护人员更准确的判断控制器和发动机的状态。
8)生成用户维护日志模块(CSC-8):由于对控制器参数的修改直接影响到控制器的正常运行,该软件对维护过程中修改的每个参数都做了详细的记录,并生成日志文件,保证操作的可追溯性。
9)数据转换成通用数据库格式模块(CSC-9):将保存下来的发动机参数数据转换为通用数据库的格式,要求将所有参数按规律转存为Microsoft Excel格式,以便打印及进行数据处理。
2.3通讯协议设计
地面维护设备与电子控制器之间通过一路全双工的RS-422A串行总线通道进行通讯。
2.3.1通讯描述
当电子控制器上电完成初始化过程和POB后,进入信息交换状态,开始发送/接收数据帧。通讯开始后,电子控制器按照周期50ms的周期向地面维护设备广播式发送74字节长的数据包,当地面维护设备收到电子控制器发来的同步头后,马上向电子控制器按应答方式发送一帧12字节的维护数据,通讯模式如此循环进行。
2.3.2接口方式
地面维护设备与电子控制器之间接口采用全双工的RS-422A串行总线接口进行通讯,地面维护软件自动检测出计算机中可用的RS-422A串行总线接口,并设置可用串口为可选项,当计算机中的某个串口不可用时,可以设置成其他可用串口进行通讯,这样大大提高了地面维护软件的灵活性。
2.3.3通讯速率
默认通讯的波特率均为115200bps,为了使地面维护软件具有很好的移植性,特将地面维护软件的通讯波特率设置为可选方式,包括可选项19200bps、38400bps、57600bps和115200bps。
2.3.4通讯周期
电子控制器向地面维护设备发送数据的通讯周期为50ms。地面维护设备向电子控制器发送数据的通讯周期为50ms。
2.4软件实现
本系统中地面维护程序是使用Delphi7开发的Windows窗体结构的应用软件,开发平台为Windows2003服务器版和Win? dows2000专业版。程序中利用第三方控件SPComm实现串口通信。
地面维护软件实现对控制器传输出的数据进行解读,并以各种适合的方式直观地显示出这些数据代表的信号的状态;另外,对控制器当前的技术参数进行适应性的维护或修改。要完成这些工作,地面维护软件首先要与控制器建立可靠、快速的通讯,两者之间通过一个全双工的RS422A串行通讯口进行实时数据交互,依靠上述通讯协议来保证通讯的可靠性和实时性,各个接口都正确并且硬件设备连接无误的情况下,两者可进行数据传输。
地面维护设备与电子控制器之间建立通讯后,维护软件开始监听串口,当接收到控制器输出的数据后进行分析和处理。
相关部分程序:
CommReceiveData函数:从I/O端口接收数据函数(SRS-3.1.1)
功能:接收和处理数据过程
输入:从串口接收到的数据
输出:程序界面上的各种显示(指示灯、波形、数据等)
Procedure CommReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var
i,Count: Integer;
ReceiveBuffer:PFrameData;
begin
ReceiveBuffer := Buffer;//从控制器缓存中读取数据
for i:=1 to FrameLenght do
begin
FrameData[i] := ReceiveBuffer[i+4];
SaveDataBuf[i] := ReceiveBuffer[i+4];
end;
SetEvent(hEvt);//设置系统内核事件,触发数据处理线程
DealData(FrameData);//处理采集数据函数
inc(PBarNum);
PBR_RunState.Position := PBarNum; //采集状态
end;
参数说明:Buffer接收数据缓冲区;
BufferLength接收数据缓冲区长度
设计说明:采用独立线程设计数据的存储事件,以避免WINDOWS系统多任务工作对数据存储的干扰,充分保证保存数据的实时性和准确性。
procedure TSaveThread. SaveData;
begin
CurrentIndex := 1;//置当前索引号为1
while not Terminated and not Application.Terminated do
begin
WaitForSingleObject(hEvt,INFINITE);//阻塞线程
ReadCount := ReadData;//读数据函数
if CurrentIndex = 64 then//读满64*62字节则写入数据文件
begin
WCount := WriteLine;//执行写数据函数
CurrentIndex := 0;
end;
CurrentIndex := CurrentIndex + 1;//级链缓冲索引号加1
end;
end;
参数说明:hEvt数据保存线程内核事件
3结束语
该型地面维护系统已在的某型发动机地面试车、外场试飞、外场维护中都发挥了重要的作用,保存了大量的数据,为该型发动机的研制、调试、改良提供良好的数据保障。
实践证明在Delphi环境开发串口通信的程序具有灵活、方便、高效等特点,可解决该地面维护系统中串口通讯的可靠性和实时性、多线程实现数据的采集和处理、图形图象处理等关键难题,有很强的工程实用性。
参考文献:
[1]蒋方帅.Delphi程序设计[M].北京:清华大学出版社,2002.
[2]范逸之,陈立元.Delphi与RS232串行通信控制[M].北京:清华大学出版社,2002.
[3]黄军,熊勇.Delphi串口通信编程[M].北京:人民邮电出版社,2002.
[4]胡汉才.单片机原理与接口技术[M].北京:清华大学出版社,2004.