基于QNX的多线程技术在船舶嵌入式操纵训练系统中的应用
2017-10-17王立伟刘常波胡坤张建华李建辉
王立伟 刘常波 胡坤 张建华 李建辉
摘 要: 为了解决船舶嵌入式操纵训练系统软件设计中出现的数据显示滞后、界面卡顿和系统死机问题,引入基于QNX操作系统的多线程技术进行系统软件程序改进设计。通过仿真实验对系统功能和实时性能进行了检验,结果表明:系统软件可以模拟船舶运动,实现训练功能;多线程程序改进设计有效解决了数据显示滞后、界面卡顿和死机问题,系统能够完成对模型的实时解算和状态参数的实时显示,數据更新时间在2 ms内,满足实时性要求。
关键词: QNX; 多线程技术; 嵌入式训练系统; 程序设计
中图分类号: TN967.7?34 文献标识码: A 文章编号: 1004?373X(2017)20?0091?04
Abstract: In order to resolve the problems of data display delay, interface buffering, and system crash during software design of the embedded training system for ship maneuvering, the QNX OS?based multithreading technology is imported for design improvement of system software program. The simulation experiment was carried out to detect the function and real?time performance of the system. The results show that the system software can simulate ship motion and realize the training function, the design improvement of multithreading program effectively resolves the problems of data display delay, interface buffering and system crash, the system can accomplish real?time resolution of the model and real?time display of status parameters, and the data update interval (no more than 2 ms) can meet the real?time requirement.
Keywords: QNX; multithreading technology; embedded training system; program design
0 引 言
船舶操纵系统是借助操纵装置改变或保持船舶的速度、姿态以及方向的系统,在船舶生命力及航行安全中占有极为重要的地位[1]。嵌入式操纵训练系统通过在原有操纵系统中加入嵌入式训练模块,将模拟训练与实装训练结合起来,有效地解决了传统训练方式不能同时兼顾训练真实性和训练实用性的问题,具有逼真、高效和低费用的特点,已成为各国关注的焦点[2]。
在船舶嵌入式操纵训练系统软件设计中,由于模型解算计算量大、系统资源有限,系统软件经常会在某些特定条件下(如航速过大或转舵角度过大时)出现数据显示滞后、卡顿甚至系统死机现象。为了充分利用系统有限的资源,提高实时性能,实现训练功能,本文对某船舶嵌入式操纵训练系统进行了多线程程序改进设计。
1 QNX操作系统与多线程技术
QNX实时操作系统由加拿大QNX公司设计开发,特点是多任务、多用户、实时性强、扩展性好、可嵌入,目前已广泛应用于自动化、医疗机械、军事、通信、航空航天领域[3]。独特的中断处理方式,快速的上下文切换和基于优先级驱动的抢占调度方式,保证了其强大的实时性能。同时,QNX还具有良好的可移植性和自保护机制,符合 POSIX 标准, 这些都使得其在嵌入式实时领域得到了越来越广泛的应用[4]。
多线程技术(Multithreading Technology)是一种让多个线程并发执行的技术,这种并发执行可从硬件或软件上来实现。它可以有效地提高资源利用率,使程序设计变得简单,程序响应更快[5]。QNX是一种支持多任务、多用户的分布式实时操作系统,支持多线程技术,符合POSIX线程标准[6]。QNX系统基于优先级的进程调度策略和快速上下文切换等特点,使得其在多线程应用方面具有得天独厚的优势,它已经在数据采集、实时监控和测试等对实时性要求十分苛刻的领域得到了成功应用[7]。
2 船舶嵌入式操纵训练系统多线程软件设计
2.1 QNX多线程库函数
与其他系统不同,QNX操作系统并没有提供单独的线程库,而是在C语言函数库中包含了与线程相关的API函数,在程序编写时,通过添加
2.2 QNX线程的同步与互斥机制
线程间的同步是指相互合作的线程在某个确定点上协调工作,只有多个线程均到达此点,才进行下一步的工作。线程间的互斥是指对共享资源的约束访问,同一时刻只允许某个线程访问临界资源 [9]。为了阻止线程间的竞争,QNX操作系统提供了多种同步和互斥机制,确保了某个时刻只有单个线程可以访问共享内存[10],表2为QNX系统同步互斥机制及相关实现函数。
2.3 船舶嵌入式操纵训练系统多线程程序设计
本文设计的船舶嵌入式操纵训练系统基于QNX系统开发,使用PhAB开发工具进行系统图形界面设计,利用QNX Momentics IDE软件进行系统主程序设计,操纵训练系统的基本结构如图1所示,可以实现操控数据的采集、运动模型的解算以及模拟训练管理等功能,繁多的任务要求使得系统的实时性问题凸显。在各类任务中,仿真模型的解算占用资源多、耗时明显,若不采用措施对计算机资源进行合理配置,则不能在规定的时间内完成仿真模型解算,满足不了系统实时性要求。
为了解决系统的实时性问题,引入QNX的多线程技术,将各个任务划分到多个不同线程中。在仿真系统中,多个线程并发执行,可使系统同一时间内完成的任务更多,提高了系统的响应速度和执行效率。QNX系统提供了单进程多线程和多进程多线程两种体系,可以根据不同的需要选择相适应的程序结构。
根据船舶嵌入式操纵训練系统的功能需要,本文采用了单进程多线程结构对系统软件进行了优化设计,将系统任务分散到不同的线程来完成,主要包括人机交互线程、界面显示线程、仿真模型线程、监控线程和训练管理线程,图2为多线程软件实现流程。嵌入式训练系统软件在单进程多线程结构设计下以独立进程的方式运行,系统调用进程后,由进程管理模块为相应的进程分配地址空间,进而调用所有的任务线程。进程中的主线程创建其余各任务线程,并根据优先级的大小选择线程的执行顺序。多线程程序编写实例如下所示:
3 仿真实验验证
为了检验系统功能,本文进行了仿真实验验证,包括操纵实验和系统实时性检测。
3.1 操纵实验
操纵实验主要用于验证嵌入式操纵训练系统中实验的运动模型程序、舵机模型程序、自动控制程序及模型解算程序是否能正常运行,系统能否为受训者提供一个符合船舶运动规律的训练环境。实验方法为,将系统转换到训练模式,通过模拟操作面板上的相应按钮设置舵角和航向值,由训练机根据舵角值及其他各类参数完成模型的解算,解算出的状态参数由监控界面进行实时显示并保存,最后使用Matlab软件进行数据绘图分析。操纵实验包括以下内容:
3.1.1 对方向舵的响应
在航速[UC]=10 kn,方向舵[δr]=20°时,系统的航向和回转轨迹线如图3所示。由图中可以看出,在操作方向舵时,航向随操舵时间的增加而不断的变化,船舶作回转运动。
3.1.2 对航向自动控制的响应
设定初始航向为0°,指令航向为30°,航速[UC]=10 kn,检验系统对航向的自动控制功能,此时系统方向舵舵角和航向的响应曲线如图4所示。
由图4可知,方向舵舵角经历了一个随时间逐步增加的过程,与实际舵机的工作规律一致,同时航向PID控制器能通过对方向舵的控制实现航向的自动控制。
3.2 系统实时性检测
系统实时性检测主要用于检验监控界面是否能实时显示船舶运动状态,系统能否实时完成模型状态参数解算,系统数据能否及时更新等。实验方法为,将嵌入式训练系统软件程序导入装有QNX 6.3.2系统的VP9嵌入式单板机中,记录系统更新数据的时间点,记录并分析系统更新数据所花费的时间,同时观察系统监控界面是否会出现卡顿现象。图5为6 000 ms内的系统实时性测试数据,分析可知系统的数据更新时间在2 ms内,满足了实时要求。同时,在实验过程中系统监控界面能实时显示更新各状态参数,未出现界面卡顿现象。
4 结 语
本文研究了多线程技术在某船舶嵌入式操纵训练系统软件设计中的应用,通过仿真实验,对系统的功能及实时性能进行了验证。仿真结果表明,所设计的船舶嵌入式操纵训练系统软件能通过设置舵角值以及进行模型解算来模拟船舶运动。同时能够实现对航向的自动控制,符合船舶的实际运动规律,可以实现训练功能。基于QNX系统的多线程程序改进设计,有效解决了原系统中数据显示滞后、卡顿及死机现象,通过对资源的合理配置,系统数据更新的时间在2 ms内,能够完成对模型的实时解算和实时显示,即使在较大的转舵角度和高航速等程序计算量很大的情况下,系统也未出现死机和画面卡顿现象,系统程序运行有效、可靠,满足了船舶嵌入式操作训练系统的实时性要求。
参考文献
[1] 梁霄,李巍.船舶操纵性与耐波性[M].大连:大连海事大学出版社,2012:4?10.
[2] 王立伟,胡大斌,肖剑波,等.船舶机动控制嵌入式训练系统方案设计研究[J].舰船科学技术,2015,37(8):188?189.
[3] 蒋正林,杨斌.基于QNX的双足机器人视觉姿态平衡研究[J].成都信息工程学院学报,2014,29(2):141?142.
[4] 王立伟,胡大斌,肖剑波.基于QNX的嵌入式操控训练系统软件设计[J].现代电子技术,2014,37(12):15?18.
[5] 陈杰.基于多线程的电能质量扰动识别系统设计[D].哈尔滨:哈尔滨理工大学,2014:11?12.
[6] QNX Software System Ltd. Processes and threads [EB/OL]. [2016?09?19]. http://www.qnx.com/developers/docs/6.4.0/neutrino/getting_started/s1_procs.html.
[7] 王莹.深海探测装备的监控界面开发[D].杭州:杭州电子科技大学,2015:11?12.
[8] 程品.四足仿生机器人控制系统的研究与设计[D].武汉:华中科技大学,2014:20?22.
[9] 李慧明.多线程技术在实时测量系统中的应用[J].电脑编程技巧与维护,2016,1(1):12?13.
[10] 李存.QNX Neutrino实时操作系统性能分析[J].微型电脑应用,2014,30(3):36?37.