APP下载

基于QT的炮口冲击波测试系统软件设计

2021-04-01

中北大学学报(自然科学版) 2021年2期
关键词:炮口下位冲击波

乔 华

(运城市广播电视台,山西 运城 044000)

0 引 言

炮口冲击波是火炮射击产生的危害产物之一,作为火炮研制过程中的一项主要考核目标,其特征参数是衡量火炮性能的重要指标[1].以往的存储式冲击波测试系统受限于存储器的特性,大多只能进行单次触发,在一次试验过程中只能记录一次冲击波数据[2-4].但当前火炮测试大多有连发射击的需求,新型的炮口冲击波测试系统通过对存储器进行分区实现了多次触发,并具有多个参数可编程的功能[5],这就对系统的上位机软件有了更高的要求.上位机软件需要对多次触发的数据进行管理,对不同触发次数的数据进行显示和比较,并且可通过指令交互的方式及时修改测试系统工作参数.QT作为新一代的软件开发平台,具有开发成本低、可无障碍跨平台移植的特性,本文针对测试系统需求,以QT作为软件设计平台,利用QT设计师界面类和特有的信号与槽机制进行了炮口冲击波测试系统的上位机软件设计.

1 测试系统方案

1.1 总体设计方案

炮口冲击波测试系统分为下位机和上位机两部分,如图1 所示.下位机安装于炮口周边,通过ICP压力传感器获取炮口周围的冲击波超压,压力信号经调理、采样,最终存储到FLASH存储器中.FLASH存储器已提前规划好存储地址,允许记录多次炮口冲击波数据.上位机处于远端安全距离处,主要由计算机和系统软件组成,与下位机有两种通信方式:USB通信方式和ZigBee无线通信方式.USB通信用于在试验前后近距离的数据读取和参数更改,ZigBee无线通信用于在试验过程中远距离的指令传输.

图1 总体方案框图

使用测试系统进行炮口冲击波测试,首先要根据测试需求确定测试量程、触发电平、频带宽度和记录时长等系统工作参数,提前对系统参数进行编程设置.之后根据测点布局方案将下位机安装到预定的位置并上电.火炮射击结束后,数据记录完毕,PC端的上位机软件通过USB接口读取各个测点所记录的炮口冲击波数据,并进行频谱分析和进一步的数据处理,计算出最终的超压峰值、正压作用时间和冲量[6].一次完整的炮口冲击波测试过程如图2 所示.

图2 炮口冲击波测试流程

1.2 软件设计方案

上位机软件通过指令交互的方式对下位机进行参数设置并获取其工作状态,在试验结束后从下位机中将测试数据读取出来,在软件中进行处理和分析,最终在显示界面中进行显示.由于系统可多次触发,软件还需要根据存储地址、触发时间及触发次数标志位对数据进行识别,然后在界面中同时显示,方便对数据进行对比和分析.上位机软件由3个模块组成:通信模块、数据管理模块和控制模块,软件结构框图如图3 所示.

图3 软件结构框图

通信模块负责上位机软件与下位机硬件之间的信息沟通,由USB通信和ZigBee无线通信两部分组成.数据管理模块负责对下位机传回的冲击波数据以及二者之间的交互指令进行接收、发送、识别和处理,包括冲击波数据管理以及指令数据管理两部分.冲击波数据管理程序负责将下位机存储器中的测试数据读取到上位机进行显示和处理,同时获取触发时刻系统内部RTC的实时时间并与冲击波数据对应.指令数据管理程序负责与下位机进行指令交互,通过不同的交互指令完成对下位机的状态获取、参数编程等控制任务.

信号和槽机制是QT软件设计平台的核心[7],软件各个部件之间的沟通、交互是通过QT信号和槽机制来完成的.控制模块负责统筹系统各部件的信号变化和槽函数功能执行,保证系统工作稳定正常,包括指令控制、曲线控制和内部信号管理3个部分.

2 软件功能设计

2.1 通信方式设计

系统有两种通信方式:USB通信方式和ZigBee无线通信方式.

对于USB通信方式,系统选用FTDI公司的FT245RL 作为USB通信接口解决方案,其数据传输速率可达1 MB/s[8].系统使用隐式调用的方法在QT中调用FTDI公司的D2XX动态链接库,之后在工程文件中声明动态链接库文件的位置[9].在使用D2XX动态链接库对FT245RL进行操作时,需要先通过FT_Open函数打开设备,将FT245RL驱动程序设置在D2XX模式,之后通过FT_Set latency timer函数设置延时,并通过FT_Set Timeouts函数设置超时时间,防止因读写错误而导致系统陷入死循环.之后就可通过FT_Read函数和FT_Write函数对FT245RL进行读写操作.

ZigBee通信包括下位机的分节点和上位机的主节点两部分,主节点与分节点的ZigBee模块的串口信息、网络地址等各项参数已通过其配置软件设置完毕.上位机软件与ZigBee模块的通信就相当于是与ZigBee模块所连接的串口进行通信[10].在使用ZigBee无线通信的方式与下位机进行数据交互时,软件首先通过foreach关键字遍历PC端当前可用串口,找到ZigBee模块所连接的电脑端COM口并对其进行初始化,将其波特率与ZigBee模块波特率统一.之后通过serial.open函数打开该串口,通过serial.write函数和serial.read函数对该串口进行数据读写.ZigBee通信工作原理如图4 所示.

图4 ZigBee无线通信工作原理

2.2 数据管理设计

上位机软件通过指令交互的方式通知下位机当前需要执行的操作.对于读数操作,上位机软件首先需要获取下位机的已触发次数,并根据已触发次数发送循环读数指令.在读数操作中,软件首先向下位机发送握手指令,如下位机工作正常会返回应答指令,软件识别握手成功后发送指令获取当前触发次数,下位机返回范围在0~16之间的数值代表当前触发次数.之后软件按照触发次数向下位机发送循环读数指令和对应触发次数的读数标志,根据存储地址将不同触发次数的数据读取到上位机中,其过程如图5 所示.

图5 数据读取框图

将读取完毕的数据保存在程序的缓存数组中,通过挂载的第三方绘图控件QCutsom Plot进行显示,其使用流程包括界面初始化、设置绘图数组和曲线刷新等步骤[11].

读取之后的数据按照触发次数缓存在不同的数组中,但最终仍需要将数据存到硬盘上,因此,需要对存盘数据进行区分,使得在下次回读时仍能将触发次数和数据进行对应.为此,软件将不同触发次数的数据存储到不同的.bin文件中,同时用当前时间加触发次数作为文件名来区分数据,在读数时通过文件名中的触发次数标识来区分数据,存盘结果如图6 所示.

图6 数据保存结果

2.3 控制功能设计

为了配合下位机完成测试任务,除了数据读取、显示和保存之外,上位机软件需具备参数编程、状态回读、数据擦除等功能.为满足不同场合的测试需求,尽可能提高系统通用性,测试系统的触发电平、增益、滤波带宽、可触发次数等参数均可编程设置,而设置的过程需要通过与上位机软件之间的指令交互来完成,其过程如图7 所示.上位机软件首先发送握手命令,下位机收到后会返回应答指令;上位机软件判断握手成功后,发送参数修改命令并接着发送需要修改的参数代码,下位机操作成功之后会将该代码返回,上位机软件通过返回值判断本次操作是否成功.

图7 参数修改过程

通过状态回读操作获取下位机当前工作参数及工作状态,上位机软件首先发送握手指令,在收到下位机返回的应答指令后,紧接着发送状态回读指令,此时下位机会返回一个6 B数组,各个字节代表当前的工作参数值,通过将此数组对应的不同参数显示到界面上来反馈当前系统的工作状态.

2.4 数据处理方法

炮口冲击波的数据处理过程包括去除趋势项和确定信号能量分布并滤波两个过程.

测试现场的冲击震动、高温以及测试系统本身不够理想的低频特性,会造成实测结果中出现缓慢变化且周期大于记录长度的成分,将此称为趋势项.在以往的系统中,最常用的去除趋势项的方法为基于小波变换的最小二乘法.由于此方法需要选定基函数,过程繁杂且不适合去除复杂的趋势项.本文使用经验模态分解算法去除趋势项,此方法无需设定基函数,使用简单方便,适合去除复杂的趋势项.经验模态分解算法的思想是将待分析信号分解为一系列本征模态函数.

(1)

式中:S(t)为待分析信号;Si(t)为本征模态分量;Rn(t)为残余分量,n为模态分解的阶数.经验模态分解算法的实现首先需要找出待分析信号S(t)上的所有极值点,使用三次样条函数对极值点进行插值,得到上包络曲线Smax(t)和下包络曲线Smin(t),并通过二者计算出均值曲线mea(t),

(2)

之后将S(t)与mea(t)进行相减,得到h(t),

h(t)=S(t)-mea(t).

(3)

将h(t)作为原始信号,重复上述过程,得到第n次筛选的信号,

hn(t)=Sn(t)-mean(t).

(4)

最终通过连续两次计算结果之间的标准差值SD来判断h(t)是否有本征模态分量.

(5)

式中:l为信号截止时间,当SD在特定区间内时,可保证本征模态分量的线性和稳定性,同时保证本征模态分量具有相应的物理意义.式(1)中分解得到的残余信号分量Rn(t)为单调函数,其中包含了待分析信号中的最低频成分,且其周期大于采样信号长度,因此,Rn(t)即为测试信号中的趋势项.去除趋势项前后的冲击波波形如图8 和图9 所示.

图8 去除趋势项前的冲击波波形图

图9 去除趋势项后的冲击波波形图

除了趋势项外,系统信号中还混杂着来自外界的高温、高压、高冲击、强磁等因素以及传感器和电路自身引入的噪声信号,因此,需要对其进行处理后才能得到较为纯净的炮口冲击波信号.数据处理的第一步是选取有效冲击波信号,按照相关国军标,通常使用的炮口冲击波作用时间为A类作用时间,其定义为炮口冲击波超压从环境压力上升到最大峰值后再第一次回到环境压力所用的时间.因此,在数据处理阶段首先需要人工判读炮口冲击波的作用时间,通过确定起始点和结束点为程序指明要进行处理的数据段.

之后,需要对判读后的有效信号进行滤波.由于炮口冲击波信号能量主要集中在低频范围内,因此,通常使用低通滤波器对其进行滤波.对于不同的火炮和发射条件,其冲击波信号的频率特性也不尽相同,在滤波时没有确定的标准可言,所选的截止频率过高达不到预想的滤波效果,所选截止频率过低则可能使信号产生畸变,影响信号分析的准确性.因此,需要对采集到的炮口冲击波信号进行频谱分析,确定有效信号的能量分布情况并据此设定滤波的截止频率.首先对炮口冲击波数据序列进行离散傅里叶变换,得出炮口冲击波信号的幅频特性曲线,之后分析频域下炮口冲击波信号的能量分布,计算谐波分量占原信号总能量的百分比,一般取能量百分比大于等于95%的频带为信号的有效频带,由此得出低通滤波的截止频率,然后对炮口冲击波信号进行滤波处理[12].图10 为实测炮口冲击波滤波前后的波形对比图.

图10 滤波前后冲击波波形对比图

2.5 软件的可靠性分析

软件运行的可靠性主要从以下两个方面进行保障:

1)程序结构的合理性设计

在软件设计过程中,采用模块化的设计方法,将软件设计为通信模块、数据管理模块、控制模块3个部分,各模块之间在功能上相互独立互不干扰,各个模块按照由上而下的层次进行设计,各个模块中的程序分支相互独立,最大程度得保证了软件运行的稳定.

2)错误检查机制

程序各个部位都设有监测点,等待错误征兆的出现.如USB读写程序中设有判断读写字节数与预期读写字节数是否相符的监测程序,如发生错误会及时反馈给用户.同时,各个程序分支运行设有“看门狗”,当程序运行时间超过预定时间,则进行超时异常处理,跳出当前程序分支,并汇报跳出结果.

3 界面设计与功能测试

设计完成后的上位机软件主界面如图11 所示.界面中心为曲线显示区,下方依次为曲线控制区、功能控制区和坐标显示区.

图11 上位机软件主界面

参数编程功能通过选项卡的形式将触发电平、增益倍数、滤波带宽、可触发次数、负延时长度这5个参数放置在一个对话窗口中并相互独立,在需要编程更改系统参数时只需选中对应的选项卡和要修改的参数值即可.软件与下位机的通信方式可在参数编程界面进行选择.

下位机状态同样也可通过USB和ZigBee两种通信方式进行读取.系统的触发电平等各项参数和已触发次数均会在界面中进行显示,在试验过程中可通过这种方式确认下位机工作是否正常.图12 为经过参数编程并触发两次后,通过ZigBee通信方式获取到的下位机状态,各项参数与之前的编程值相符,已触发次数显示正确.

图12 状态读取窗口

软件可通过勾选相应的触发次数复选框向下位机发送相应的触发次数读取指令,实现对部分数据的读取,也可以一次性读取全部触发数据.系统经过两次触发并通过上位机软件读取后的测试曲线如图11 所示.

4 结 语

本文基于QT平台为存储式炮口冲击波测试系统设计了上位机软件.针对下位机的测试功能需求,为软件设计了数据读取、参数编程、数据擦除等功能.针对所读取的不同触发次数的测试数据,添加触发次数标记后存盘,便于再次回读数据.在数据处理方面,为系统添加频谱分析和低通滤波功能,并使用经验模态分解算法去除测试过程中引入的趋势项.经测试,本文设计的软件功能全面,操作简易,具有良好的实用性和稳定性.

猜你喜欢

炮口下位冲击波
基于Fluent的某小口径火炮炮口流场仿真及射手防护研究
爆炸切割冲击波防护仿真研究
爆炸冲击波隔离防护装置的试验及研究
大口径线膛炮炮口振动位移测量方法
防护装置粘接强度对爆炸切割冲击波的影响
基于UDS协议的CAN BootLoader的开发与验证
体外冲击波疗法治疗半月板撕裂
基于电磁感应的炮口测速装置设计与试验研究
基于STM32和Zigbee的mini宠物智能喂养系统的设计
发射机房监控系统之下位机