基于LabView图形化编程语言的软件架构设计方法研究

2016-03-11 10:48苏娟郑国昆张帆李志超北京航天发射技术研究所北京100076
工程建设与设计 2016年18期
关键词:功能模块线程队列

苏娟,郑国昆,张帆,李志超(北京航天发射技术研究所,北京100076)

基于LabView图形化编程语言的软件架构设计方法研究

苏娟,郑国昆,张帆,李志超
(北京航天发射技术研究所,北京100076)

分析了LabView图形化编程语言的特点及运行机理,提炼出应用LabView语言编写地面发射支持系统监控类软件的总体架构、功能模块划分及优先级设定方法,并对各个功能模块的可重用程序框图进行说明,提供了一种基于LabView编程语言的地面发射支持系统监控类软件通用设计方法。

LabView;监控类软件;可重用

【DOI】10.13616/j.cnki.gcjsysj.2016.12.182

1 引言

目前,我国航天地面发射支持系统型号配套软件、仿真测试软件,并使用了LabView语言准确地实现了用户需求。近年来,在软件的使用过程中,软件出现了时序不同导致的多线程变量赋值错误、软件界面触发逻辑混乱导致用户误触发等典型的质量问题,分析主要原因为:软件无统一设计架构,设计师精力集中在功能实现及代码级,导致当软件使用场景及输入负载变化时,软件性能不达标,并影响正常功能的实现。

针对上述问题,论文提出一种基于LabView语言的通用设计架构,并提出了功能模块划分依据和优先级设定方法,提炼出了常用功能模块可重用设计思路,为监控类软件提供了一种可靠的设计方法。

2 软件总体架构设计

在进行程序框图设计时,应考虑将源代码控制在一屏能显示的范围内。主VI只处理前面板用户事件,涉及数据处理和通信接口,均通过调用子VI实现。

基于LabView的软件总体架构一般采用标准状态机设计架构,通过While循环+状态判断条件架构实现软件运行状态的切换,基于状态机的架构设计,关键在于状态的定义和状态切换条件定义。

数据采集需要持续执行的功能模块,一般采用动态调用的方法,实现主VI和子VI并行运行。

3 软件多线程架构设计

3.1 多线程运行机理

LabView通过6个执行系统实现了多线程调度系统,并为每个执行系统分配一个线程池和一个调度队列,实现程序框图中多个循环模块并行执行。一般情况下,可通过VI属性—执行—首选执行系统来实现对执行系统的选择。一般为默认选项:与调用方一致。调用方(主VI)的选项一般为默认标准系统,当界面显示要求高,频繁使用属性节点时,应将与界面显示相关的VI执行系统设置为用户界面,以避免频繁的执行系统和线程切换导致程序性能下降。

3.2 多线程架构设计方法

设计多线程架构时,应当遵循这样的原则:一般一个功能模块对应一个线程,对于通信类多通道并行执行的功能一般按照通道数建立多个线程并行运行。可以同时运行的功能模块可并排摆放,不要用连线、顺序框等方式强制它们依次执行。在并行执行时,LabView会自动把它们安排在不同的线程下同时运行,以提高程序的执行速度,节省运行时间。为避免某一个线程占用CPU资源达100%,其他线程反应迟钝,导致用户认为程序死锁的情况,应在循环中加延时函数。延时的时间长短应根据本循环实现功能的优先级来确定,优先级越高的线程延时时间越短。

4 软件功能模块设计

根据软件功能不同,将系统划分为“参数初始化”“数据接收”“数据解析”“数据发送”“UI界面显示”“曲线图像”“数值显示”“系统心跳”“错误响应”“数据存储”10个功能模块,每个功能模块设计思路如下。

4.1 参数初始化

采用顺序结构,程序首先完成参数初始化工作,初始化成功后顺序结构后移,开始运行主程序。程序在初始化模块中可进行变量初始化、读取硬盘参数配置文件等工作。

4.2 数据接收

软件实际应用中,必须保证分析处理的实时性,此处软件设计无延时,While循环实现数据接收功能。同时为保证数据的完整性和实时性,接收完数据后将数据与时间信息打包为簇常量,并入数据接收队列。若存在多个数据接收通道,为保证多个通道间数据互补干扰,采用多个独立While循环实现多通道数据接收工作[1]。

4.3 数据解析

数据解析功能模块用于将数据接收队列内的数据进行解析,并赋给相应的系统变量。由于系统解析在要求一定的处理实时性的同时,还具有一定的处理复杂度,设计采用循环间隔为200ms的While循环结构实现。将所有系统变量打包至一个簇常量,对数据进行解析,分别更新簇常量内对应系统的参数值,可以避免系统变量增多导致结构复杂的现象,同时提高数据刷新速度。在完成数据解析功能的同时,设计数据存储队列,解析数据完成入列操作,为数据存储模块准备。

4.4 数据发送

数据发送模块用于将数据发送队列中的数据出列并按照一定的格式发送出去,由于软件发送数据一般为指令帧,为非周期触发,故采用队列传递方式,当队列中无数据时,此线程处于阻塞模式,此时,线程一次循环的等待时间设置为250ms,在本时间段内,其他线程占用CPU资源执行。

4.5 UI界面响应

UI界面以While循环结合事件触发的结构实现,用于响应用户在UI界面进行的操作,同时生成相应的操作代码,并将操作代码入列数据发送队列。

4.6 曲线图像

曲线图像模块用于以曲线的方式显示系统反馈参数,由于多曲线多通道占用系统资源,此处设计使用时间间隔为100ms的定时While循环模块。由于人眼错觉,100ms的刷新速度可以满足需求,又可以降低系统资源占用。

4.7 数值显示

数值显示模块用于以数值的方式显示系统反馈参数,由于占用系统资源较少,此处设计使用时间间隔为100ms的定时While循环模块。由于人眼错觉,100ms的刷新速度满足需求。

4.8 系统心跳

系统心跳用于检测系统心跳信息,周期固定2s,用间隔周期2000ms的定时While循环实现。设计中采用心跳数组,每接收一次心跳信息,数组值加1,软件周期判断该数值是否增加,若增加则心跳指示灯亮,否则为灭。

4.9 错误响应

错误响应模块用于响应系统错误并执行相应处理操作。使用时间间隔为1000ms的While循环控件实现,模块独立运行,采集系统错误,经过系统信息处理函数处理,根据处理信息选择相应执行操作。

4.10 数据存储

数据存储模块用来实现系统接收发送数据的存储功能。本模块基于数据完成性要求高,而存储实时性低且文件读取写入资源消耗高的特点,使用数据存储队列与While循环结合进行设计实现。本模块使用循环间隔为10000ms的定时While循环,读取数据存储队列内数据,每次将队列中的所有数据读出,并以二维数组的形式批量写入存储文件,当存储队列中无数据时,结束本次循环,避免造成软件响应滞后。

存储数据线程通过对存储队列的出列操作,按照时间、数据解除簇常量捆绑,分别经过“时间存储格式化输出”“数据存储格式化输出”子VI,实现存储格式格式化存储。同时,模块检测当前系统时间,按照小时为单位进行数据存储,若存在新的小时,则创建新的存储文件路径,这样可以避免长时间运行程序造成存储文件异常,同时提高文件检索效率。

5 应用效果评估

在发射平台环境监测上位机软件中应用了上述设计方法。经试验表明,本架构满足系统使用功能、性能需求,软件使用过程中未发生卡滞、死机等异常现象。在软件参加总装调试阶段,对于总体及用户提出的界面易用性更改,只涉及主VI变更,并未影响子VI及软件架构改变,大大降低了软件维护成本。

【1】谢冰.基于LabView的数据采集与信号处理系统设计[J].现代电子技术,2011(14):13-15.

Research on the Software Architecture Design Methods Based on the LabView Graphical Programming Language

SU Juan,ZHENG Guo-kun,ZHANG Fan,LI Zhi-chao
(Beijing Space Launch Technology Institude,Beijing 100076,China)

This paper analyzes the characteristics and operation mechanism of the Labview,and refined the architecture、the function moduledivision and the priority setting of the monitoring software on the ground support system.And it described the reusable program block diagram ofeach functional module,provided ageneral designing method of monitoring software on the ground support system.

LabView;monitoring software;reusable

TP311.52

A

1007-9467(2016)12-0196-03

2016-11-07

苏娟(1982~),女,河南郑州人,工程师,从事控制系统软件设计研究。

猜你喜欢
功能模块线程队列
基于C#线程实验探究
队列里的小秘密
基于多队列切换的SDN拥塞控制*
基于国产化环境的线程池模型研究与实现
在队列里
丰田加速驶入自动驾驶队列
浅谈linux多线程协作
基于ASP.NET标准的采购管理系统研究
输电线路附着物测算系统测算功能模块的研究
功能模块的设计与应用研究