APP下载

超声电机数据采集系统软件设计与实现

2019-04-04王晓丹姚舜才杜飞

现代电子技术 2019年6期
关键词:数据采集

王晓丹 姚舜才 杜飞

关键词: 超声电机; 数据采集; 上位机软件; MFC; 多线程技术; 串口监控

中图分类号: TN919?34                    文献标识码: A                            文章编号: 1004?373X(2019)06?0105?04

Abstract: In order to improve the current situation that the existing ultrasonic motor data acquisition system cannot process large amounts of data and its data acquisition accuracy is not high, a method that the Microsoft Foundation Classes (MFC) and multithreading technology are applied to the data acquisition system of the ultrasonic motor is proposed. The programming method using the multi?threading technology on the Visual Studio 2012 development platform is emphatically introduced, and applied to the design of the upper computer software program that performs real?time data transceiving and serial port monitoring for the ultrasonic motor controller, which can test the real?time variation of the ultrasonic motor′s rotating speed and torque versus with time at different drive voltages and duty ratios. The software can realize real?time monitoring and operation functions of the ultrasonic motor, which has been successfully applied in the ultrasonic motor data acquisition system in the laboratory. The practical results show that the data acquisition software can effectively control the start and stop of the motor, has a fast speed and high accuracy in data processing, can draw clear and accurate curves, and run smoothly and reliably.

Keywords: ultrasonic motor; data acquisition; upper computer software; MFC; multi?threading technology; serial port monitoring

0  引  言

随着当今时代电力电子技术的不断进步,超声波电动机作为一种新概念的新型電动机于20世纪80 年代中期逐渐走进人们的视野。它集电子学、摩擦力学、波动学等众多学科技术于一体,拥有比传统的电磁式电机更小的体积,更快的响应速度,几乎不受电磁干扰等独特优势而被广泛应用在航空航天和军事、汽车领域[1]。也正是因为其具有独一无二且不可替代的优点,深入研究超声电机的各种性能和应用技术才显得格外有意义。

文献[2]提出在Matlab平台下,应用Matlab内部特有的函数功能实现信号的接收和输出,该方法虽然编程简单,易于实现,但其通用性不高,应用范围小,不能够灵活;文献[3]详细叙述了应用循环缓冲技术与多线程技术共同实现远程采集数据,该方法很难达到数据的精确度要求,不适用于微型电机的数据采集。目前,国外尤其是日本对超声电机的研究及应用非常广泛,处于世界领先地位,我国对于超声电机的研究比较落后,对超声电机的应用领域也非常狭隘,在超声电机数据采集领域更是迄今没有一套完整的解决方案。

为了推进超声电机在我国的研究与发展,本文针对超声电机的数据采集做了详细的研究与大量的试验,提出将MFC(Microsoft Foundation Classes)结合多线程技术应用于超声电机数据采集系统,实现对超声电机进行实时控制和数据采集。该方法易于实现且能够处理大量数据,充分利用了Visual Studio 2012丰富的数据库和支持更多新技术架构的特点。应用多线程能够避免某任务长时间占用CPU,是个很好的选择,且MFC与多线程技术在其他领域的应用已较为成熟。

1  超声电机数据采集模块

数据采集在通信与信息技术领域的地位十分重要。当前对超声电机的数据采集在精度和采集数据量上提出了更高标准和要求[4]。本文提出将MFC多线程串口通信技术应用于对超声电机的动态数据采集,从而实现对超声电机的实时控制、诊断和监测等功能,进而改进电机的性能。超声电机数据采集模块设计如图1所示。

从图中可以看到,该数据采集软件可实时控制超声波电动机的启动和停止,根据用户的需要,选择不同的占空比和超声电机的工作电压,测试超声电机在相同的占空比不同的工作电压或者相同的工作电压不同的占空比的条件下超声电机的工作性能,并将得到的数据存为文件。不仅可以显示当前采集的数据曲线,还可以选择以往采集到的数据文件并显示信号,大大增强了软件的实用性而且提高了數据采集量。

2  多线程技术与串口通信

2.1  多线程技术

程序在计算机上的一个运转实例称为进程,程序中的一条运行分支称为线程,同一个程序在相同的时间运行多个任务称为多线程[5]。而由计算机主动建立的线程称为主线程,用户还可以依据自身需求在程序中建立多个线程,它们可以在同一个进程中一起运作。一个进程的虚拟地址空间中存放着该进程的所有线程,这里的系统空间和全局变量等资源被这些线程共同分享[6]。为了实现就绪态线程和执行态线程之间的快速转换,还需要硬件对多线程的支持,比如:程序计数器PC、程序状态寄存器SR。本文应用多线程技术实现超声电机数据采集系统边接收信号边发送命令的功能,提高了系统整体运行效率。

Visual Studio 2012中包含了MFC类库,在MFC中,用AfxBeginThread()来创建并初始化一个线程的运行,工作者线程和用户界面线程分别由AfxBeginThread()的两种重载函数来建立[7]。

SuspendThread()和ResumeThread()分别用于挂起线程和恢复使用挂起的线程。当前被停止的线程不会消耗处理器的时间,并且不允许主动调用ResumeThread()来恢复自己,其他未挂起的线程可以为自己也可以为别的线程调用SuspendThread()。

线程同步:多线程提高了程序执行效率,各线程经常在相同的时间内访问它们共有的资源,这样就会造成各线程之间竞争资源的问题[8]。Win32API所包含的临界区域、互斥对象、信号量和事件等可控对象有效地解决了这个问题。如果某一个操作必须要等到另外一个操作执行完之后才可以执行,则建议使用事件对象;如果在相同的时间,同一个应用程序中指定个数的线程需要访问同一个资源,建议使用信号量对象;不同的应用程序在相同的时间访问同一个资源,建议使用互斥对象;其他的使用临界区域[9]。

2.2  串口通信技术

Windows下使用下列三种串口通信方法进行编写程序:

1) MSComm控件设计;

2) 用Windows API函数设计;

3) 采用由第三方供给的串口通信类进行编写程序。

MSComm是一种Windows下串口通信编写程序的ActiveX控件[10],其优点是使用简单方便快捷,缺点是封装性比较大,容易对程序编写的可操作性和可控性造成很大的影响。Windows API对程序员的操作技术和编程技术要求非常高,其长处是运行稳定[11]。第三方串口通信类融合了前两种方法的优点,不仅编程效率高而且可控性强[12],因此第三方串口通信类的应用要比前两种广泛。由于本程序用于实际项目工作中,对运行的稳定性要求比较高,所以选用Windows API函数编写。

3  数据采集系统软件实现

打开Visual Studio 2012,建立一个基于会话框的MFC应用程序并命名,其他步骤保持缺省状态。在已有的对话框中设置菜单栏,分别有设置、开关、保存数据、清空数据和退出等菜单项,相应的编辑工具栏、接收和发送数据模块以及串口设置模块,更改各个控件的ID名称。根据MFC中的消息循环机制和规则,按照串口通信协议中的要求,就可以完成本串口通信部分的编写。串口通信流程如图2所示。

串口通信协议的通信方式为主、从方式,采用串行异步通信协议;数据格式含有起始位:1位;数据位:8位;停止位:1位;偶校验位:1位;数据传输速率为9 600 b/s。通信过程为,当主机发出命令后,等待从机回复命令,从机务必在接收到主机命令后20 ms内响应主机,倘若主机发出命令后在20 ms内没有收到从机发出的响应信息或收到从机响应信息不正确,则重发该命令;从机收到主机命令后要判断本次通信是否正确,并设置相应的状态位给主机应答。

通过对超声波电动机数据采集系统的分析,将实现程序分成如下几个线程:

1) 主线程。负责处理用户界面的消息,同时调度其他线程执行数据处理。

2) 串口监视线程。负责监视线程并采集数据同时将数据保存。

3) 入库线程。将采集到的数据按规则计算分析并将处理好的数据保存。

4) 显示线程。在上位机界面显示出读取到的数据,这些数据反映了超声电机转速大小,便于操作人员依据这些数据来判断超声电机的工作状态,从而实现对超声电机的控制,实时监控和故障诊断[13]。

下面介绍将多线程技术应用于超声电机数据采集系统上位机软件关键程序。

1) 初始化串口

m_hComm = NULL;

// 初始化异步操作成员变量

m_ov.Offset = 0;

m_ov.OffsetHigh = 0;

// 创建异步操作的事件成员变量

m_ov.hEvent = NULL;

// 初始化发送及关闭事件

m_hWriteEvent = NULL;

m_hShutdownEvent = NULL;

//初始化发送变量

m_szWriteBuffer = NULL;

m_nWriteSize=1;

// 串口监控线程处于非激活状态

m_bThreadAlive = FALSE;

2) 启动监视串口事件的工作线程

boolCMyserial::StartMonitoring()

{

If

(!(m_Thread = AfxBeginThread(CommThread, this)))

return FALSE;

TRACE("Thread started\n");

return TRUE;

}

UINT CMyserial::CommThread(LPVOID pParam)

{

CMyserial *port = (CMyserial*)pParam;

port?>m_bThreadAlive = TRUE;

DWORDBytesTransfered = 0;

DWORD Event = 0;

DWORD CommEvent = 0;

DWORD dwError = 0;

COMSTAT comstat;

BOOL  bResult = TRUE;

if (port?>m_hComm)                         //检查串口是否打开

PurgeComm(port?>m_hComm, PURGE_RXCLEAR | PURGE_

TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);

bResult = WaitCommEvent(port?>m_hComm, &Event, &port?>

m_ov);

3) 发送和接收数据模块

if (port <= 0 || port > 4)

return ?1;

m_RCount++;                            //接收的字节计数

m_ctrlRCount.SetWindowText(strTemp);

//显示接收计数

//如果选择了“十六进制显示”,则显示十六进制值

CStringstr;

if(m_bRHex)

str.Format("%02X",ch);

else

str.Format("%c",ch);

lpsStr = (LPCTSTR)m_strData;

m_Port.WriteToPort(lpsStr);                          //发送数据

m_SCount+=m_strData.GetLength();

4) 关闭事件线程和串口

// 创建关闭串口事件

if (m_hShutdownEvent != NULL)

ResetEvent(m_hShutdownEvent);

else

m_hShutdownEvent=CreateEvent(NULL, TRUE, FALSE,

NULL);

SetEvent(m_hShutdownEvent);                   //关闭串口

if(m_hShutdownEvent!=NULL)

CloseHandle(m_hShutdownEvent);

if(m_ov.hEvent!=NULL)

CloseHandle(m_ov.hEvent );

if(m_hWriteEvent!=NULL)

CloseHandle(m_hWriteEvent );

TRACE("Thread ended\n");

delete [] m_szWriteBuffer;                     //删除发送缓冲区

4  结果分析

本设计在超声电机数据采集主动控制系统的实验平台上,对超声电机进行了数据采集试验并测试了超声电机在不同的电压和占空比的条件下,转速随时间变化规律,结果如图3所示。

实验结果表明,该方法对超声电机的数据采集与测试非常有效,且该软件能达到实时监控超声电机的目的,运行稳定,能够实时控制超声电机的启动停止,数据处理速度快,绘制曲线清晰、准确。

5  结  语

超声电机作为一种新概念的微型电动机,在精密机械仪表、自动化装备、车辆专用器件、工農业控制系统、计算机、航空航天、智能机器人等领域有着广阔的应用前景。而将基于MFC的多线程技术应用于超声电机数据采集系统,大大改善了系统各方面性能,不仅有效地解决了因串口长时间占用CPU导致的线程堵塞问题,而且能够处理大量数据并且保证了数据的精确度,也使超声电机在应用过程中更加稳定地发挥性能,满足了用户多路数据并发的需求,为超声电机的应用提供了全方位服务。该数据采集软件具有实际应用价值,可为相关专业人员进一步研究和应用提供参考。

参考文献

[1] 李颜鑫.超声波发电机的发展现状及应用[J].科技展望,2016,26(28):112.

LI Yanxin. Development and application of ultrasonic generator [J]. Technology outlook, 2016, 26(28): 112.

[2] 吴侃,于明礼,李明.基于Matlab GUI的超声电机控制系统串口通信研究[J].机电工程,2015,32(11):1471?1476.

WU Kan, YU Mingli, LI Ming. Study on serial communication of ultrasonic motor control system based on Matlab GUI [J]. Journal of mechanical & electrical engineering, 2015, 32(11): 1471?1476.

[3] 艾红,邓大伟,邝野.远程数据采集与监测系统研究[J].自动化仪表,2012,33(8):31?33.

AI Hong, DENG Dawei, KUANG Ye. Research on remote data acquisition and monitoring system [J]. Process automation instrumentation, 2012, 33(8): 31?33.

[4] 熊飞.高速数据采集系统实现及其应用[D].南京:南京理工大学,2017.

XIONG Fei. Implementation and application of high?speed data acquisition system [D]. Nanjing: Nanjing University of Science and Technology, 2017.

[5] CHANG X C, ZHANG C H, SUN L. A data collecting and caching mechanism for gateway middleware in the web of things [J]. Advanced materials research, 2013, 756: 2157?2162.

[6] 张超.多线程串口通信技术在GPS导航中的应用[J].电子制作,2016(17):38?39.

ZHANG Chao. Application of multithreaded serial communication technology in GPS navigation [J]. Practical electronics, 2016(17): 38?39.

[7] 龚寄,何雅槐.永磁同步电机控制器串口通信上位机软件设计[J].自动化应用,2016(8):21?23.

GONG Ji, HE Yahuai. Design of serial communication upper computer software for permanent magnet synchronous motor controller [J]. Automation application, 2016(8): 21?23.

[8] KIM J W, PARK C H, JEONG S S, et al. Driving characteristics of a simple square?frame ultrasonic motor [J]. Applied mechanics and materials, 2011, 110: 210?216.

[9] 欧如月.MFC多线程技术在串口通信中的应用[J].信息与电脑(理论版),2017(15):171?172.

OU Ruyue. Application of multi?thread technology in serial communication [J]. China computer & communication (theoretical edition), 2017(15): 171?172.

[10] 赵淳生,朱华.超声电机技术的发展和应用[J].机械制造与自动化,2008,37(3):1?9.

ZHAO Chunsheng, ZHU Hua. Development and application of ultrasonic motors technologies [J]. Machine building & automation, 2008, 37(3): 1?9.

[11] 范筱朔.多线程技术在数据通信中的应用探究[J].电脑迷,2017(11):81.

FAN Xiaoshuo. Application of multithreading technology in data communication [J]. PC fan, 2017(11): 81.

[12] 陈让琛.多线程串口通信技术在北斗导航中的运用分析[J].无线互联科技,2017(15):8?9.

CHEN Rangchen. Analysis on the use of multi?threaded serial communication technology in Beidou navigation [J]. Wireless Internet technology, 2017(15): 8?9.

[13] 刘浩,李荣冰,刘建业,等.基于串口通信的DSP在线烧写技术研究[J].电子测量技术,2017,40(7):184?187.

LIU Hao, LI Rongbing, LIU Jianye, et al. Research on online programming techniques for DSP based on serial communication [J]. Electronic measurement technology, 2017, 40(7): 184?187.

猜你喜欢

数据采集
CAN总线通信技术在电梯监控系统中的应用
基于AVR单片机的SPI接口设计与实现
CS5463在植栽用电子镇流器老化监控系统中的应用
大数据时代高校数据管理的思考
基于广播模式的数据实时采集与处理系统
通用Web表单数据采集系统的设计与实现
基于开源系统的综合业务数据采集系统的开发研究
大数据时代的管理会计