APP下载

某火炮电机调速系统监测软件设计与实现

2017-02-02任海波焦灵侠

火炮发射与控制学报 2017年4期
关键词:火炮缓冲区控件

任海波,郭 敏,焦灵侠,周 杨,杨 燕

(1.西北机电工程研究所,陕西 咸阳 712099;2.榆林学院,陕西 榆林 719000;3.西安工业大学,陕西 西安 710021)

在火炮伺服系统中,电机调速系统的各项性能直接影响到火炮系统的作战性能,为达到指标要求,在电机调速系统调试的过程中,需要对其多项高速变化的参数进行实时监测,因此对监测软件的实时性和稳定性要求较高。目前多采用将数据以文件的形式记录下来,利用MATLAB进行绘图,再进行比较分析。存在操作繁琐、实时性差和调试效率低等缺点。

作为主流的可视化开发环境VC++6.0具有界面友好,功能强大,开发灵活等优点,文献[1]中采用的CDC类开发绘图模块,存在开发周期长和难度高的缺点,而美国NI (National Instuments)公司为VC++6.0开发、提供了一个集成式套件,即Measurement Studio 6.0,包括了各种常用测量和自动化控件、工具和类库[2],可以补偿VC开发图形控件时存在的缺陷。

笔者提出采用VC++6.0和Measurement Studio 6.0联合开发的某火炮电机调速系统监测软件,其具备对系统参数实时数据采集、实时显示、数据保存和数据回放等功能。

1 软件总体设计

系统连接示意图如图1所示,某火炮电机调速系统监测软件运行在PC机上,调试系统通过USBCANⅡ连接,某火炮电机调速系统和PC机按照约定的通信协议将需要监测的数字量,以曲线、数字或指示灯等方式显示在人机交互界面上。

PC机和某火炮电机调速系统之间的通信方式为主从问答方式。PC机向某火炮电机调速系统发送命令帧,某火炮电机调速系统接收到命令帧后向PC机发送响应帧,发送频率为1 ms一帧,从而实现数据交换。

1.1 软件架构

某火炮电机调速系统监测软件主要由数据收发模块、数据处理模块和数据显示3个模块组成,如图2所示。数据接收模块作为通信接口主要负责数据的实时接收,数据处理模块负责根据通信协议对数据进行解析,以FIFO的模式进行存取,并将数据以文件的形式记录下来。数据显示模块主要负责为用户提供一个良好的人机交互界面,在图形显示区域连续动态地显示波形。

1.2 开发环境

某火炮电机调速系统监测软件在Windows XP操作系统下,采用VC++6.0和Measurement Studio 6.0混合编程的模式开发。VC++6.0为用户提供类库和控件快速完成人机交互界面设计。Measurement Studio 6.0作为专业的虚拟仪器控件以ActiveX的形式嵌入到VC++6.0环境中,在CWGraph控件的“属性”中可以快速地设计出调试软件需要显示的各波形的各项属性,降低了软件开发难度,缩短了开发周期。

2 监测软件的设计与实现

监测软件为用户提供了良好的人机交互界面,主要功能有数据采集、数据解析、波形显示、x轴和y轴动态缩放、数据保存和历史数据回放等功能。

2.1 通信协议

CAN总线采用CAN 2.0协议规范,波特率为500 Kbit/s,标准信息帧格式;CAN总线网络采用树形拓扑结构,由驱动器和上位机两个通信节点构成。

驱动器向上位机发送工作状态信息,帧ID: 0x102,共8个字节。帧格式如图3所示。 Data 0表示帧序列编码:以0~255循环;Data 1表示A相电流,Data 2表示B相电流,Data 3表示q轴电流,所有电流的数据类型为有符号整数,用0~255表示-128~127 A;Data 4和Data 5高四位表示位置主令,Data 6和Data 7高四位表示位置反馈,所有位置的数据类型为无符号整数,用0~4 095表示0~4 095密位;本文不涉及上位机发送到驱动器的控制命令。

2.2 监测软件简要介绍

监测软件的主界面分为波形显示区、波形控制区和命令控制区,如图4所示。

2.2.1 波形显示区

在火炮伺服系统中,用高低和方位两个方向分别控制,因此将波形显示区分为高低和方位两个区。每个区可同时显示5条曲线,分别为位置主令、位置反馈、A相电流、B相电流和q轴电流,每条曲线共用时间轴,位置主令和位置反馈共用一个y轴,A相电流、B相电流和q轴电流共用一个y轴,出于简化软件考虑,只设置一个y轴,将各项电流值扩大10倍后再显示,每10 密位的刻度对应1 A的电流。

用户通过在曲线显示区域双击鼠标左键,全屏显示该曲线显示区域,也可通过按住鼠标左键拖动来移动显示曲线,通过拨动鼠标滚轮缩放显示曲线。

2.2.2 波形控制区

用户可以通过设置x轴和y轴的范围对曲线进行缩放和拖移,也可用鼠标进行拖移或缩放操作。

2.2.3 命令控制区

用户在此设置驱动器的执行命令,并通过相应的按钮实现向驱动器发送命令、暂停、重启、保存数据和历史数据回放等操作。

2.3 关键技术

在监测软件设计过程中,高速实时数据采集、数据处理和显示的同时进行是软件设计的难点,为了满足数据采集、处理和显示的实时性、可靠性、完整性的要求,笔者采用将数据的采集和处理与数据显示分开处理,实现软件实时性;利用数据缓冲技术将数据接收线程的数据暂存,避免丢数,实现数据的完整性;由于NI控件不是线程安全,在线程中刷新数据,会出现不可预知的异常[3],因此,利用MFC的消息机制[4],通过发送消息的模式,通知绘图控件刷新界面数据。

1)采用数据接收线程读取CAN总线上的数据,由于数据采集率为1 kHz,按照经验,Windows XP操作系统允许用户最多20 ms进入一次线程,且CAN本身自带数据缓冲功能,数据接收线程每次处理完数据后休眠20 ms,再进行数据接收,当数据接收线程进入休眠时,并达到了重绘点数,即可进行波形重绘,这样既不会丢失数据,又可分出CPU资源进行数据处理,从而实现数据实时接收与波形实时绘制同时进行。

2) 由于数据采集率为1 kHz,而波形的重绘频率较低,一般不会超过60 Hz,因此,采用数据缓冲技术,即环形缓冲区[5],将采集到的数据放入环形缓冲区,当检测到环形缓冲区的数据达到重绘点数(128个)时,便向主界面发送重绘波形的消息,对波形进行刷新。

3) 由于NI控件不是线程安全的,用户不能在线程中刷新绘图控件,因此监测软件自定义了刷新消息,通过发送消息的方式,驱动绘图控件刷新。

2.4 监测软件关键功能的详细设计

2.4.1 数据接收模块

首先,在监测软件初始化程序中完成以下操作:创建并启动数据接收线程;加载周立功USBCANⅡ驱动程序;设置和启动CAN。

然后,在数据接收线程中采集循环,循环读取CAN数据,根据通信协议解析后,将数据依次存放至环形缓冲区中。

在软件退出时,关闭CAN和退出数据接收线程。

2.4.2 数据处理模块

数据处理模块包括数据解析、数据缓存和数据保存3个模块,数据处理流程如下:

依据通信协议规定,位置主令值的解析方法为:

Pvalue=(float)(X+(Y& 0x0f)*256)

(1)

式中:Pvalue表示实际的位置值;X和Y分别为驱动器向上位机发送的数据第4字节和第5字节,位置反馈值的解析方法同理。

A相电流值的表示范围压缩到-128~127,解析方法为

Ivalue=(float)(Z-128)

(2)

式中:Ivalue表示实际的A相电流值;Z表示驱动器向上位机发送的数据第1字节,B相电流值和q轴电流值的解析方法同理。

在监测软件初始化程序中,完成建立环形缓冲区对象,并设置环形缓冲区的深度为4 K字节,在数据接收线程中,将解析后的数据依次写入环形缓冲区,在得到更新波形数据的消息时,在消息处理函数中,读缓冲区数据。当环形缓冲区满时,将“最早”的数据丢弃,将“最新”的数据写入缓冲区。

当数据需要保存时,执行数据保存操作时,先新建*.txt类型的文本,文本名按“data”+当前时间的规则命名,将接收到的数据以字符串形式保存在文本中。

数据处理流程图如图5所示。

2.4.3 数据显示模块

数据显示模块主要包括波形显示单元和波形操控单元。

2.4.3.1 波形显式单元

波形显示单元有两种状态,即工作状态和回放状态,在不同的状态下,数据源、数据处理和显示方式不同。当其处于工作状态时,数据显示流程如图6所示。

数据来自CAN总线,为了使波形显示流畅完整,需要降低波形的刷新频率,以波形的重绘频率刷新曲线,图形控件的绘图数组长度设置为1 024字节,绘图数组的大小决定了一屏能显示波形的最长时间,如果用户需要显示更长时间的波形,必须增大绘图数组。每当缓冲区的数据量达到128个时,将绘图数组第0~127序列的数据删除,再将128~1 023序列的数依次前移128位,再将最新的128个数放入数组的最后,如图7所示[6]。因此,当前图形控件的数据是实时显示的,能观察到的波形数据只有最新的1 024组数据。

当其处于回放状态时,数据来源于文本文件,当用户按下“打开数据”的按钮时,按照命名规则找到用户要回放的数据文件,因为每个文件存储的数据量不等,因此,根据具体文件的数据量重新设置图形控件的绘图数组容量,再将所有数据解析后,依次放入绘图数组中,绘制波形。用户可根据实际需求对波形进行缩放和拖移操作,在图形控件上双击后即可全屏显示。

2.4.3.2 波形操控单元

波形操控单元主要是通过对其x轴和y轴范围的设置来实现波形的全屏显示、波形拖移和波形缩放。

在波形显示之前,软件会一直记录波形x轴和y轴向的最大和最小值,只要在鼠标双击事件中将x轴和y轴的范围设置成波形的范围,即可实现双击后波形全屏显示。

拖移与缩放是在鼠标左键按下事件中记录起始点的坐标,然后在左键弹起的事件中记录终点坐标,波形缩放是将两个坐标形成的矩形区域范围设置新的x轴和y轴的范围,而波形拖放是分别记录两个坐标在x轴和y轴方向的相对位移量,然后x轴和y轴分别在各自的方向上平移位移量。

以上主要是通过鼠标操作波形,也可通过波形控制区设置x轴和y轴的范围进行波形操作。

3 软件测试

测试网络拓扑结构参见图1,将一个某火炮电机调速系统连接在CANⅡ上,某火炮电机调速系统监测软件运行在PC机上,为了测试该软件,设定驱动器以1 kHz的频率向上位机发送正弦波,发送的正弦波频率有50、40、30、20、10和1 Hz等选项。软件运行效果如图8所示,图中,在GD Curve中绿色、蓝色、红色曲线分别为50、40和30 Hz正弦曲线,在FW Curve中绿色、蓝色、红色曲线分别为20、10和1 Hz正弦曲线,曲线平滑,无变形,波形的全屏、拖移与缩放功能正常。试验表明,某火炮电机调速系统监测软件波形显示正常而稳定,软件设计达到预期的使用要求。

4 结束语

笔者设计的基于VC++6.0和NI控件联合开发的实时监测软件,用于某火炮电机调速系统的性能测试,并对监测软件的关键技术和关键功能做了详细说明。该软件具有界面美观、实时性能好、开

发成本低等特点,具有较强的实用价值和参考价值。但在扩展性、可移植性和通用性方面依然存在不足。

References)

[1]孟玉静,叶桦,周玲,等.基于CANBUS的高速采样虚拟示波器软件的设计与实现[J]. 工业仪表与自动化装置, 2012(6):26-31. MENG Yujing,YE Hua,ZHOU Ling,et al.The design and implementation of high-speed sampling virtual oscilloscope software[J].Industrial Instrumentation & Automation, 2012(6):26-31.(in Chinese)

[2]李同立.基于VC++的虚拟示波器软件设计[J].软件导刊,2013,12(11):56-59. LI Tongli. Design of virtual oscilloscope software based on VC++[J].Software Guide, 2013,12(11):56-59.(in Chinese)

[3]熊启龙.基于Indy 控件的遥测中心GPRS数据接收软件应用[J].水利信息化,2012(5):49-52. XIONG Qilong.Application of GPRS data receiving software in telemetry center based on controls of Indy[J].Water Resources Informatization,2012(5):49-52.(in Chinese)

[4]赵钦,黄玲.基于Windows 消息机制的自动检测系统设计[J].广西科学院学报,2010,26(4):497-499. ZHAO Qin,HUANG Ling.Design of automatic test system based on Windows messages[J].Journal of Guangxi Aca-demy of Sciences,2010,26(4):497-499.(in Chinese)

[5]姚章俊,陈蜀宇,卢尧.一种高性能环形缓冲区的研究与实现[J].计算机工程,2012,38(8):228-231. YAO Zhangjun,CHEN Shuyu,LU Yao.Research and implementation of high-performance ring buffer[J].Computer Engineering, 2012,38(8):228-231.(in Chinese)

[6]孟玉静,叶桦,仰燕兰.双机时钟不同步情况下虚拟示波器波形显示方法的改进[J].工业控制计算机,2012,15(21):11-13. MENG Yujing,YE Hua,YANG Yanlan.Improvement in virtual oscilloscope waveform display on condition of clock asynchronization of dual converters[J].Industrial Control Computer, 2012,15(21):11-13.(in Chinese)

猜你喜欢

火炮缓冲区控件
嵌入式系统环形缓冲区快速读写方法的设计与实现
火炮也减肥
关于.net控件数组的探讨
关键链技术缓冲区的确定方法研究
地理信息系统绘图缓冲区技术设计与实现
AVS标准中的视频码流缓冲区校验模型分析
就这样玩会VBA中常见的自定义控件
陆战之神——火炮
在PowerBuUder中利用WinSock控件制作简单的Web服务器
VB.NET中ListBox控件实现流程跟踪