基于多线程的动力驱动装置实时测控系统

2022-06-27 01:23于思源
测控技术 2022年6期
关键词:上位测控线程

于思源, 汪 波, 李 阳

(1.西北工业大学 自动化学院,陕西 西安 710129; 2.兰州万里航空机电有限责任公司,甘肃 兰州 730070)

襟缝翼作为飞机增升装置,位于机翼的前缘或后缘。打开襟翼,能够增大翼展面积,使飞机在起飞、降落等低速过程中保持较大的升力,从而缩短滑跑距离。同时,打开缝翼也能够调整气流方向,使机翼保持较大的压力差和足够的升力。襟缝翼的动力驱动装置按照飞行控制系统的工作指令,驱动翼面进行展开和收回,并向飞行控制系统反馈工作状态。动力驱动装置作为襟缝翼控制系统中的重要组成部分,其可靠性决定了飞机的飞行安全[1-3]。因此,在设计、出厂、使用和返修等多个环节需要对其进行性能测试。测试过程需执行通信、控制和数据采集等多项任务,从而保证测试的实时性和可靠性。

目前电液加载方式广泛应用于大型动力驱动装置的测试中,其具有加载力矩大、频带宽等优点,但存在力矩超调大、响应缓慢、环境污染大的弊端[4]。在测控系统的设计中,采用电动加载方式,将电机作为执行机构,采用直接转矩控制策略,将加载力矩作为控制对象。电动加载方式的响应时间短、超调小,加载力矩稳定[5-6],且工作噪声小、污染低。在实验中,测控系统应能精确快速地跟随期望力矩曲线,为动力驱动装置提供稳定的负载。相较于液压加载系统,电动加载方式在测试中具备较大的优势。

上位机软件的开发基于NI(美国国家仪器)公司提供的LabWindows/CVI虚拟仪器开发环境。LabWindows/CVI使用C语言编程,通过事件触发和回调函数实现所需功能[7-8]。与使用图形编程语言的开发工具LabVIEW相比,LabWindows/CVI使的编程方式更为灵活,有利于实现较为复杂的功能,更适合于大中型复杂测控软件的开发。

在软件设计中,应用多线程技术合理分配系统资源。在不同线程中处理不同任务,保证了多个任务同步进行,避免了不同任务之间的相互影响,提高了软件的效率,满足了测控系统的实时性要求。软件能够同步完成控制指令的下发、加载力矩的给定、供电电源的参数监测、数据采集以及数据的后续分析与管理等多项任务。在测试完成后,可根据测试数据生成结果报表进行打印,无须人工抄写记录实验数据,减轻了操作人员的负担。较传统测控系统而言,本文设计的测控系统具有效率高、测试精度好、可扩展性强的优点,对大、中型测控系统的设计和优化具有参考价值。

1 系统总体设计

1.1 硬件平台搭建

襟缝翼动力驱动装置的测控系统结构如图1所示,其由上位机分系统、襟缝翼动力驱动装置、加载平台、加载控制柜、传感器组、信号调理模块等组成。

图1 动力驱动装置测控系统原理结构图

测控系统工作时,上位机向动力驱动装置发送工作指令,动力驱动装置按照接收到的工作指令完成指定动作,并向上位机反馈工作状态。当进行加载实验时,上位机向加载控制柜发送期望力矩指令,加载控制柜根据指令驱动位于加载平台的电机输出要求的力矩。上位机采集动力驱动装置的电源状态信息和加载平台的转矩、转速、位置信息,对采集的数据和动力驱动装置的反馈信息进行分析和处理,将处理后的结果用于控制或显示,并根据用户需求进行存储。

上位机分系统由研华工控机、上位机软件和计算机板卡组成,通过发送工作指令控制测控系统工作,并对实验数据进行实时处理和显示。上位机软件提供人机交互界面,实时显示测控系统的工作状态并响应用户的操作。加载平台分系统由加载电机、联轴器、光电编码器、智能传感器和固定装置组成;霍尔电压、电流传感器与频率传感器用于监测设备电源的状态。

襟缝翼动力驱动装置由动力驱动装置控制器和动力驱动装置执行机构两部分组成[9],文献[9]介绍了一种襟缝翼动力驱动装置的结构。其中控制器用于与襟缝翼飞行控制单元(FSECU)进行通信,并控制与检测执行机构的运动状态。襟缝翼控制器和上位机之间的通信通过429板卡实现,采用ARINC429协议,该协议具有抗干扰性强、安全性好、可靠性高的特点[10]。襟缝翼控制器接收上位机的工作指令,依据制定好的协议判断工作指令是否正确,在确认收到正确的工作指令后,根据指令内容控制执行机构动作,并向上位机反馈工作状态。

1.2 软件功能需求

上位机软件作为测控系统的控制中心,需控制测控系统各个设备的工作,对实验数据进行实时处理和显示,并提供人机交互界面,响应用户的操作。如图2所示,上位机软件需具备以下功能。

图2 测试软件功能需求

① 实时控制动力驱动装置工作。上位机软件需在每一个指令周期向襟缝翼动力驱动装置发送一次工作指令,并根据动力驱动装置的当前状态更新工作指令的内容。

② 接收、处理与显示动力驱动装置的反馈信息。上位机软件需接收动力驱动装置上报的状态反馈信息,并保证不遗漏任何信息。在对反馈信息进行分析和处理后,在监测界面显示动力驱动装置的当前工作状态。

③ 实时控制加载力矩。在进行加载实验时,上位机根据加载平台当前的转矩、转速和位置状态实时计算期望力矩值,并发送到加载控制柜。

④ 实时绘制实验图像。在实验过程中,以时间为自变量实时绘制转矩曲线、转速曲线,并在监测界面实时显示位置信息。

⑤ 实时监测电源状态。上位机软件需对传感器所采集的电压、电流、频率传感器测量信号进行分析和计算,在监测界面实时显示电源的状态信息。

⑥ 存储实验数据。软件需将整个实验过程中的全部历史数据进行存储,形成数据文件。

⑦ 及时响应用户操作。上位机需及时响应由鼠标、键盘等产生的用户事件,及时满足用户的请求。

2 多线程技术

2.1 单线程与多线程的技术特点

线程是在进程内部可独立执行的基本单元,是操作系统对系统资源的基本调度单位。一个进程至少包括一个线程,称为主线程。除主线程外,还可在一个进程中添加多个辅助线程[11-13]。每个线程独立执行自身的代码指令,线程之间可以相互通信,共享同一个进程内部的全局数据,占用统一的数据资源。多线程机制是指在一个进程中存在多个线程,不同的线程独立执行不同的任务。多线程机制下,不同的代码能够并行执行,适应多任务同步系统的需要。

如图3(a)所示,在单线程机制下,测控系统的全部功能均由主线程实现。用户事件作为一个高级别的中断,将优先得到系统响应,从而打断了其他任务的执行,这将造成实验数据遗漏、通信控制间断,无法保证实验数据的实时性和控制的有效性。引入多线程机制后,应用程序具有多个执行不同功能的线程,如图3(b)所示。在主线程创建、显示与运行用户界面,在次线程中完成数据采集、数据显示等任务。这成功消除了其他功能的运行过程和用户界面之间的相互影响,避免了系统阻塞。多线程机制在应用程序内部实现了多任务扩展,满足了系统的实时性要求。

图3 单线程、多线程结构

2.2 系统的多线程工作机制

LabWindows/CVI提供了2种多线程机制,一是异步定时器,二是线程池[14]。异步定时器是一种在程序中适时生成的定时器,在一定的时间间隔内反复执行相同的代码。线程池相当于一个容器,其中存放和管理多个线程,每个线程之间可以相互通信。

2.2.1 异步定时器机制

使用异步定时器的原因有以下两点。

① 线程分离。异步定时器使用Windows多媒体线程,其独立于主线程外工作。因此,相较于占用主线程资源的普通定时器而言,它的优点是在产生拖曳面板、单击控件等用户事件时,其工作不会被打断,数据不会丢失,保证了程序能够连续稳定的执行。

② 高精度。Windows多媒体线程中的定时器应用于音乐、动画等的播放,在多媒体应用中要求保证播放的流畅度[15]。因此,该定时器需具备高精度的特性。异步定时器的最高精度为10 ms,其取决于Windows系统所支持的分别率间隔。文献[15]介绍了一种数据采集系统的设计,其中对比了使用不同定时器完成执行相同代码所耗费的时间,得到了异步定时器的精度远高于普通定时器的结论。

工作命令下达、反馈信息接收与处理是按照固定指令周期执行的任务,每隔固定时间执行一次,适用于在异步定时器中完成。期望力矩的计算需结合动力驱动装置的工作状态,实验图像绘制与实验数据记录需采用前三项任务的数据,且随着实验过程的结束而停止,因此也放在异步定时器中实现。异步定时器的使用步骤如下。

① 创建异步定时器。设置时间间隔并传递在异步定时器中所执行函数的名称。

timerID=NewAsyncTimer (0.03,-1,0,AsyncCB,0);//时间间隔为30 ms

② 添加异步定时器的回调函数。该函数的功能即为异步定时器所需实现的功能。

int CVICALLBACK AsyncCB (int reserved,int timerId,int event,void *callbackData,int eventData1,int eventData2)

{

Command_deta();//工作命令下达子函数

LoadRef();//力矩指令给定子函数

AnalysisFeedback();//反馈信息接收与处理子函数

PlotChart();//图像绘制子函数

SaveData();//实验数据记录子函数

}

③ 使能异步定时器,开始执行对应任务。

SetAsyncTimerAttribute(ansy_panel,ASYNC_ATTR_ENABLED,1);

④ 关闭异步定时器,并从程序中删除异步定时器。

SetAsyncTimerAttribute(ansy_panel,ASYNC_ATTR_ENABLED,0);

DiscardAsyncTimer (timerID);

2.2.2 线程池机制

电源状态监测任务中所监测的电源为交流电源,且需采集多路电流、电压和频率信息。传感器测量得到的是交流电的瞬时值,而最终显示在监测界面上的是交流电的有效值。为了在满足香农采样定理的前提下,尽可能准确地计算出交流电的有效值,每路通道均设置5000个采样点。电源监测任务中所采集的数据量大、数据分析的计算量大,导致完成该任务需耗费较长的时间。

若将其放在异步定时器中执行,会使定时器实际的时间间隔大于设定的时间间隔,降低了异步定时器的精度。因此,单独建立一个辅助线程用于实现电源状态监测任务。

异步定时器只能创建一个次线程,若在多媒体线程内创建多个定时器,不同定时器之间的相互影响会引入不确定的结果,也失去了定时器内代码独立执行的优势。若要创建多个辅助线程,则使用线程池功能。线程池相当于一个容器,其中存放和管理着多个线程。线程开启后,通过在while循环中执行相应子函数实现所需功能。电源状态监测任务从软件运行后即开始执行,直到软件退出才停止执行,适合于在while循环中实现。线程池的使用方法如下。

① 开启线程池,传递要在辅助线程中执行函数的名称。

CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_HANDLE,ThreadFunction,NULL,&threadID);

② 编写线程池需执行函数的功能。

int CVICALLBACK ThreadFunction (void *functionData)

{

While(1)

{

GatherCVFdata();//采集电量信息子函数

ProcessCVFdata();//处理计算采集数据子函数

DisplayCVFdata();//显示计算结果子函数

}

}

③ 关闭线程函数,不需线程函数继续执行时,可使用该函数关闭线程。

CmtWaitForThreadPoolFunctionCompletion(DEFAULT_THREAD_POOL_HANDLE,ThreadID,OPT_TP_PROCESS_EVENTS_WHILE_WAITING);

④ 释放线程资源,关闭线程函数后,应释放线程句柄,使其不再占用资源。

CmtReleaseThreadPoolFunctionID(DEFAULT_THREAD_POOL_HANDLE,ThreadID);

3 系统软件设计

上位机软件运行后,首先验证用户名和密码完成登录,在选择设备型号并配置好实验相关参数后,即可进入实验主界面。在主线程中运行用户界面,响应用户的操作。除主线程外,通过异步定时器和线程池技术创建两个辅助线程。在测控系统完成初始化工作后,启动两个辅助线程。在异步定时器中实现工作指令下发、期望力矩给定等与实验的控制和实验数据的分析处理相关的功能。在线程池创建的线程中可实现电源状态监测的功能。3个线程同时运行,分别完成不同的功能,各线程之间相互独立,消除了不同任务之间的影响。系统总体流程如图 4所示。

图4 系统软件流程图

4 系统验证

为验证所设计的襟缝翼动力驱动装置测控系统的功能,对某型待交付的襟缝翼驱动装置进行性能测试。测试结果如图5所示,将转速、转矩数据经过标幺值处理后,分别绘制转速图像和转矩图像。转速图像中包括测控系统的测量转速和动力驱动装置的上报转速;转矩图像中包括测控系统的期望转矩和测量得到的实际转矩。

图5 测试结果

如图5所示,转速波形、转矩波形在任一时刻均保持同步,不存在丢失数据的问题。拖曳面板、单击按钮等用户操作不会干扰程序运行过程。

5 结束语

在LabWindows/CVI环境下,基于多线程技术开发了襟缝翼动力驱动装置的实时测控系统。多线程技术适用于多任务同步的系统,能够提高对CPU的利用率,消除用户界面操作和程序运行过程的相互影响。满足测控系统实时性要求的关键在于使用了多线程技术,结合测控系统不同功能的特点,分别采用异步定时器技术或线程池技术实现,取得了较好的结果。测控系统工作时,能够快速响应用户操作,有效控制实验过程,完整记录实验数据。本套测控系统的设计与实现,为襟缝翼动力驱动装置的性能验证工作提供了极大便利。

猜你喜欢
上位测控线程
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
星载测控终端型谱化研究
一场史无前例的乐队真人秀
基础油“上位”
基于VC的PLC数据采集管理系统
Java的多线程技术探讨