基于WinForm的航天电磁继电器动态特性测试系统软件设计与实现

2020-09-26 00:58孙志刚蒋爱平高萌萌尹程玉王国涛
计算机测量与控制 2020年9期
关键词:调用线程电磁

孙志刚,蒋爱平,高萌萌,尹程玉,王国涛,2

(1.黑龙江大学 电子工程学院,哈尔滨 150008;2.哈尔滨工业大学 军用电器研究所,哈尔滨 150001)

0 引言

动态特性是指一系列的电气或机械参数在继电器动作过程中随时间的变化情况。首先,它包括线圈电流、表征触点状态的触点电压等电气参数随时间变化规律,以及根据这些电气参数变化规律得到的吸合时间、释放时间等时间参数。其次,它也包括衔铁或触头的位置、瞬时速度以及瞬时加速度等机械参数随时间的变化规律。为了进一步提高继电器动态特性的测试精度与水平,哈尔滨工业大学军用电器研究所与厦门宏发电力电器有限公司联合开发航天电磁继电器动态特性测试系统(下文简称电磁测试系统)。该系统包含时间参数测试模块、基于高速摄像和图像分析的动态特性分析模块、以及寿命试验过程中触头表面状态演变测试模块于一体,配合设计合理的硬件电路和系统控制、数据处理软件、数据库等构成继电器动态特性的专用测试系统,能够较好地实现继电器动态特性的自动测量。

电磁测试系统完成一次测试操作后,研究人员需要在系统自带的本地计算机上,打开指定路径下的TXT文件或Excel文件查看数据,对图像文件的查看同样是访问对应的存储路径。过去,对数据和图像的分析处理停留在手工作业的方式,随着数据仿真处理软件的出现与发展成熟,研究人员通过优盘拷贝的方式将测试结果复制到其他电脑设备上,借助MATLAB等软件对数据进行绘图与图像处理操作。上述分析过程在调用MATLAB等软件时需要将源文件更改为dat等形式的文件,使得分析过程一体化程度不高,且稳定运行MATLAB等大型仿真软件对电脑配置要求较高,对动态特性的分析只使用其中一部分功能,软件资源得不到合理的分配与使用,针对性不强。此外,该过程对测试生成的文本文件和图像文件的传输采用优盘拷贝的方式,机动性不高、实时性不强,现阶段采用的微信等通讯工具进行发送,再次使得整个分析过程集成化程度大大下降。

根据测试设备或测试系统产生的原始结果设计一款界面化显示的分析软件,可以选择基于C++语言与MFC控件进行开发设计[1],如王凯等人基于MFC设计了航空电子系统综合自动监测设备的客户端软件,能很好地配合操作人员控制自动检测设备平台的各类仪器完成测试任务并管理测试过程中的多种信息[2]。也有设计者选择基于C#语言与WinForm控件进行开发设计[3],如余磊等人提出一种基于C#和SQL Server的信号接收机自动校准系统软件,其中采用双缓冲技术解决了曲线闪烁的问题,并结合SQL Server实现高效数据存储和管理[4]。本文在已有的研究基础上,设计了一套基于WinForm的航天电磁继电器动态特性测试系统软件,软件包括在电磁测试系统本地计算机上运行的客户端软件与远程电脑设备运行的服务器软件,通过因特网Socket多线程通信的方式,将测试结果及时高效的发送至多台电脑设备上,服务器软件能够直接调用文本文件完成曲线的绘制,能够调用图像文件并智能化截取有效区域进行放大显示,大大方便了研究人员的分析过程,提高了资源利用率与研究效率。

1 系统组成与功能设计

1.1 系统组成

电磁测试系统软件由客户端软件与服务器软件两部分组成[5],其软件组成结构图如图1所示。

图1 电磁测试系统软件组成结构图

客户端软件运行在电磁测试系统的本地计算机上,在Window XP、Windows7等较早版本系统上能够稳定运行,且对系统硬件配置要求不高,电磁测试系统完成一次测试后将测试结果存储在指定路径下,客户端软件运行后与远程服务器建立通信连接,并选择该路径下的文本文件和图像文件进行发送,通过IP地址与端口号的更换,实现向多台电脑设备发送文件的目的。服务器软件运行在远程电脑设备上,默认运行在研究人员的PC电脑端,软件同样兼容较早与最新的Windows系统且占用较少的系统资源,服务器软件运行后,开启服务器监听,经过三次握手后与客户端建立通信连接,接收客户端发送的文本文件和图像文件,并根据研究人员的选择存储到指定路径下,服务器软件的图像显示与曲线绘制部分根据研究人员选择的不同文本文件或图像文件进行后续处理,通过切换已连接客户端列表中不同的客户端名称,实现多线程接收不同客户端软件发送的文本文件和图像文件。

1.2 功能设计

根据系统组成部分的描述,客户端软件主要包括:验证登录、连接请求、路径查找、文件读取与文件发送等功能模块[6],分别实现对研究人员身份的验证、文本文件和图像文件存储路径的查找、根据IP地址和端口号发起Socket通信请求、文本文件和图像文件的文件流读取与开启线程将文件流进行远程发送等功能。

服务器软件主要包括:验证登录、监听请求、文件接收、路径查找、文件存储、曲线绘制、图像显示与数据解析等功能模块[6],分别实现对研究人员身份的验证、开启服务监听、接收文件流、文件存储路径查找、文件流转文本文件或图像文件存储、调用文本文件绘制曲线图、调用图像文件显示图像与文本文件数据解析等功能。

2 电磁测试系统软件总体设计

2.1 客户端软件设计

客户端软件主要运行在电磁测试系统的本地计算机上,客户端软件是以Visual Studio 2010为开发环境,C#编程语言开发的[7],与服务器软件的数据通信方式是基于TCP/IP的Socket通信。程序设计主要包括验证登录、连接请求、路径查找、文件读取与文件发送5个功能模块。

2.1.1 验证登录

客户端软件运行后进入登录界面,研究人员输入用户名与登录密码后,软件将输入框内输入的数据信息与系统内设定的数据信息进行比较判断,验证成功后跳出窗口提示登陆成功,并跳转至客户端的主显示界面,验证失败同样跳出窗口提示登录失败,并重置输入框内的历史输入内容,等待研究人员重新输入验证。

2.1.2 查找与读取

在客户端软件的主显示界面,点击“选择文件”按钮,调用OpenFileDialog方法启动文件对话框,并通过其InitialDirectory属性打开默认的存储路径,选择需要发送的文本文件或图像文件,调用FileStream方法将文本文件或图像文件转化成文件流,待Socket套接字初始化完成后,通过Send方法进行发送。

2.1.3 连接与传输

在客户端软件的主显示界面,输入需要连接电脑设备的IP地址和端口号,点击“连接服务器”按钮,客户端通过服务器的IP地址和端口实例化Socket对象[8];接着在软件程序中调用Connect方法连接到服务器;然后利用Socket提供的Send Write(getInputStream)和Recv read(getOutputStream)方法,通过I/O流对象收发数据,本文主要进行文件流发送;通信结束后,关闭I/O对象和Socket[9],上述通信过程如图2所示。

图2 客户端软件Socket通信过程

2.2 服务器软件设计

服务器软件运行在研究人员的PC电脑上,服务器软件同样是以Visual Studio 2010为开发环境,C#编程语言开发的[7],与客户端软件基于TCP/IP的Socket建立通信。程序设计主要包括验证登录、监听请求、文件接收、路径查找、文件存储、曲线绘制、图像显示与数据解析8个功能模块。验证登录模块同样是为了验证PC电脑端研究人员的身份,其设计过程与客户端类似,此处不加以赘述。

2.2.1 监听与接收

在服务器软件的主显示界面,点击“开始监听”按钮,利用本地连接的网络端口实例化一个Server-Socket对象;接着调用blind方法将IP地址与端口关联套接字结构;然后调用listen方法,使Server-Socket开始监听端口上发来的Socket套接字请求;最后利用Accept方法返回Socket对象,同时利用ServerSocket提供的Send Write(getInputStream)和Recv read(getOutputStream)方法,对I/O进行读写文件流的操作,本文主要进行读取操作;通信结束后,关闭I/O对象和ServerSocket,上述通信过程如图3所示。

图3 服务器软件Socket通信过程

2.2.2 查找与存储

服务器软件在完成文件流接收后,主动调用OpenFileDialog方法启动文件对话框,并通过其InitialDirectory和Filter属性打开默认存储路径和默认存储格式,确定上述过程后等待输入文件名,点击“确定”按钮后调用FileStream方法将文件流存储为文本文件或图像文件。

2.2.3 曲线绘制

在服务器软件的主显示界面,点击 “电弧曲线”或“空气释放”或“空气吸合”按钮,首先调用OpenFileDialog方法启动文件对话框,并通过其InitialDirectory和Filter属性设置对话框打开路径和文本文件形式;其次调用StreamReader方法逐行读取文本文件的数据,存储在二维数组变量中;再次通过调用Bitmap方法设置曲线绘制的画布,调用Graphics方法对画布进行加载,调用Brush与Pen方法对画笔进行设置,并绘制初始化坐标轴[10];最后,将二维数组标量中存储的坐标对进行转换,调用DrawImage方法根据坐标对绘制曲线。

2.2.4 图像显示

在服务器软件的主显示界面,点击“图片选择”按钮,调用OpenFileDialog方法启动文件对话框,并通过其InitialDirectory和Filter属性设置对话框打开路径和图像文件形式,设置Pannel控件的Size-Mode属性为StretchImage,对选择的图片进行放大延伸显示。

2.2.5 数据解析

在服务器软件的主显示界面,点击“文件选择”按钮,调用OpenFileDialog方法启动文件对话框,并通过其InitialDirectory和Filter属性设置对话框打开路径和文本文件形式,通过StreamReader方法读取文本文件中的数据,并根据设定的数据解析协议对数据进行解析显示,数据解析协议如表1所示。

表1 数据解析协议

3 软件设计关键技术

3.1 多线程通信

线程是操作系统分配处理器时间的基本单元,是系统中可以并发执行的程序段,拥有起点、执行的顺序系列和一个终点,一个或多个线程组成一个进程。在多线程应用程序中可以同时执行多个操作,当一个线程必须阻塞时,CPU可以运行其他线程而不是等待,这样可以大幅度提高程序的执行效率[11]。

在本文中,每个电磁测试系统用单个线程启动连接请求,研究人员的PC电脑端通过多个线程与各电磁测试系统建立通信链接,当其中一个电磁测试系统完成测试并运行客户端软件进行文件发送时,服务器软件可以通过其余线程监听其他电磁测试系统的连接请求与文件发送,避免了单线程通信的大数据通信或多线程通信的同步数据发送造成的缓冲池堵塞等问题。

C#的System.Threading命名空间提供了大量的类和接口来支持多线程通信,其中,Thread类用于对线程进行管理,包括线程的创建、启动、终止、合并以及休眠等。.NET可以通过以下语句创建并启动一个新的线程:

Class1 c1 = new Class1();

Thread thread = new Thread(new ThreadStart(c1.ThreadFunc));

thread.Start();

一旦方法Start()被调用,该线程将保持“alive”状态,可以通过它的IsAlive属性进行查询。

Thread类的方法Thread.Suspend()可以暂停一个正在运行的线程,而Thread.Resume()则可以让暂停的线程继续执行。如果希望线程暂停一段时间以便CPU将时间片中剩余部分分配给其他线程,可以调用Thread.Sleep方法[11]。

线程启动后,如果线程执行的方法运行结束,则线程终止。另外,也可以通过调用Thread类的Abort方法让线程强行终止,例如:

Thread td = new Thread(方法名)

td.Abort();

3.2 双缓冲绘图

本文在窗体中使用GDI+技术绘图时,有时会发现绘制出的图形线条不够流畅,或者在改变窗体大小时会出现不断闪烁的现象。绘制的图形线条不流畅,是因为窗体在重绘时其自身的重绘与图形的重绘之间存在时间差,从而导致这两者之间的图像显示不协调;改变窗体大小出现的闪烁现象,是因为窗体在重绘时其自身的背景颜色与图形颜色频繁交替,从而造成人们视觉上的闪烁现象。本文采用双缓冲技术绘制曲线图,则可以解决上述绘图中出现的若干问题[12]。

本文在实现过程中,首先通过Bitmap类的构造函数创建一个位图实例,然后通过调用Graphics类的FromImage方法创建画布对象,最后调用Graphics类的DrawImage方法实现在窗体上绘制图形。下面对本文中用到的关键技术进行详细讲解。

1)Bitmap类的构造函数:

该构造函数用来在内存中创建位图实例,其重载方法有多种,本文中用到的重载形式如下:

public Bitmap(int width, int height);

2)FromImage方法:

该方法通过加载Image实例创建画布对象,语法格式如下:

public static Graphics FromImage(Image image);

3)DrawImage方法:

该方法实现在画布上绘制图像,其重载方式有多种,本文中用到的重载形式如下:

public void DrawImage(Image image, int x, int y);

4 测试结果与分析

4.1 客户端软件

软件运行后进入登录界面,验证用户名与密码成功后,提示登陆成功,如图4所示。

图4 客户端验证登陆成功

主显示界面输入服务器IP地址和端口号,点击“连接服务器”按钮发起连接请求,并与指定服务器建立通信连接,点击“选择文件”按钮选择存储路径下的文本文件或图像文件,点击“发送文件”进行远程发送,如图5所示。

图5 存储路径下文件选择

4.2 服务器软件

验证用户名与密码成功后进入主显示界面,点击“开始监听”按钮后监听客户端的连接请求,通信链路建立后,接收客户端发送的文本文件或图像文件并打开默认路径的对话框,选择路径和输入文件名后进行存储,如图6所示。

图6 接收客户端发送的文件

文件全部存储完成后,分别点击“图片选择”、“文件选择”、“电弧曲线”、“空气释放”与“空气吸合”按钮,进行曲线绘制与图像显示,上述操作完成后的软件显示界面如图7所示。

图7 操作完成后的软件显示界面

4.3 测试总结

针对现有条件下航天电磁继电器动态特性测试系统存在的一体化软件不配套、人工作业分析效率低等问题,设计了一套基于WinForm的动态特性测试系统软件。其中,客户端软件运行在电磁测试系统本地计算机上,服务器软件运行在研究人员的PC电脑端,基于Socket多线程通信实现双方的文本文件和图像文件的实时传输,解决了人工作业时数据拷贝不便的问题,基于双缓冲技术绘制文本文件的曲线图和基于图像调用与局部放大技术的图像显示,解决了人工作业分析效率低下的问题,整套设备与电磁测试系统完美对接,提高了整体的集成度。经过实际运行测试,客户端软件与服务器软件建立的Socket通信稳定,文件传输速率快且丢包率低,服务器软件绘制的曲线显示正常,能够通过不同颜色进行对比分析,图像加载快捷,数据解析显示正确,测试结果达到了本文预期设定的目标。

5 结束语

航天电磁继电器动态特性测试系统作为军用环境下对航天电磁器件的动态特性参数进行测试的重要实验系统(设备),其测试产生的文本文件与图像文件表征了航天电磁器件的性能优良程度,对文本文件和图像文件的处理就显得尤为重要。人工作业环境下对大量数据与图像的处理带来时间成本的浪费,借助第三方仿真分析软件针对性不强且资源浪费严重。本文基于WinForm设计了一套针对航天电磁继电器动态特性测试系统的软件,能够实现对文本文件与图像文件的快速传输与处理,系统的信息化程度、人机交互能力高,大大提高了研究人员的科研效率,同时该系统可拓展性与移植性强,兼容电弧特性的分析使用。目前,该系统软件已经在哈尔滨工业大学军用电器研究所初步得到应用。

猜你喜欢
调用线程电磁
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
瞬变电磁法在煤矿采空区探测中的应用
智能电磁感知体制新进展
“充能,发射!”走近高能电磁轨道炮
千姿百态说电磁 历久弥新话感应——遵循“三步法”,搞定电磁感应综合题
系统虚拟化环境下客户机系统调用信息捕获与分析①
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析