基于MFC的旋转倒立摆上位机控制系统设计与实现

2018-09-13 11:22陶翔翔范硕王志明
电脑知识与技术 2018年17期
关键词:串口通信上位机

陶翔翔 范硕 王志明

摘要:该文主要介绍旋转倒立摆系统上位机的设计方法,使用通信控件MSComm与下位机通信,实现对旋转倒立摆的启停控制、状态监测以及PID參数设置。文章在Win10环境下基于VS2015进行MFC应用程序开发,详细介绍了应用程序的基本框架以及软件的界面资源,阐释了典型消息响应函数的实现方法,最后显示了上位机与串口调试助手的通信结果。

关键词:旋转倒立摆;上位机;MFC;串口通信

中图分类号:TP31 文献标识码:A 文章编号:1009-5039(2018)17-0269-04

倒立摆系统是一个复杂的、不稳定的非线性系统,对倒立摆系统的研究能有效反映控制中的许多经典问题:如非线性问题、鲁棒性问题、镇定问题、随动问题以及跟踪问题等。通过对倒立摆系统的研究,不仅可以解决控制中相关理论和技术实现问题,还能将控制理论所涉及的三个基础学科:力学、数学和电学有机地结合起来,在倒立摆系统中进行综合应用[1]。

本文主要介绍旋转倒立摆系统上位机的设计方法,使用通信控件MSComm[2]与下位机通信,实现对旋转倒立摆的启停控制、旋转角度的监测,同时对系统的PID参数进行设置。详细介绍了应用程序的基本框架以及软件界面的资源组成,选取了典型的消息响应函数进行介绍,还将上位机与串口调试助手的通信结果显示出来。

1 旋转倒立摆系统结构

1.1 控制系统硬件结构

旋转倒立摆的结构如图1所示。电动机A固定在支架B上,通过转轴F驱动旋转臂C旋转。摆杆E通过转轴D固定在旋转臂C的一端,当旋转臂C在电动机A驱动下作往复旋转运动时,带动摆杆E在垂直于旋转臂C的平面作自由旋转。

1.2 控制系统软件结构

旋转倒立摆上位机利用MFC进行应用程序开发,通过串口与下位机进行通信,实现系统启停控制、PID参数设置、角度数据显示。下位机采用51单片机,由角位移传感器测量得到摆杆旋转角度送入到控制器中,计算PID控制律并转化为电压信号提供给驱动芯片,来驱动直流电机转动,从而带动旋臂在水平面内旋转,最终实现控制摆杆直立的效果。

2 旋转倒立摆上位机控制系统设计

2.1 基于MFC的控制软件框架

MFC是微软公司提供的一个类库,以C++类的形式封装了Windows API,并且包含一个应用程序框架,为软件开发者完成了一些例行化的工作,比如各种窗口、工具栏、菜单的生成和管理等,极大的提升编程的效率。

使用MFC开发向导ClassWizard创建基于对话框的应用程序,项目生成后,即产生了属于倒立摆系统的InvertedPendulum对象,生成CpendulumApp类和CpendulumDlg类,CpendulumApp类中包含CpendulumDlg类成员变量。

最基本的应用程序框架由此建立起来,应用程序通过定义,初始化,由Winmain开始,注册、创建、显示窗口、消息响应,直到程序终止,结束运行周期。

2.2 界面设计

2.2.1 界面资源

上位机界面包含控件类型有Combobox、Button、Radio-button、Edit Control,主要用作通信协议设置框,系统启动及停止控制按钮,PID参数设置按钮,接收发送数据按钮,接收发送数据显示框以及波形显示框。

上位机设计中所涉及的主要的控件如下表,包括控件的用途、类型以及控件ID。

接着在对话框中添加串行口通信控件MSComm[3],它封装了许多实现串行口通信的函数。插入该控件,便可调用它提供的函数,而无须直接对接口硬件进行操作,从而方便地实现计算机与外部设备的串行通信。

采用事件驱动法,即每当计算机俘获新字符,或者端口状态改变,或者接受到故障信息时,MSComm控件触发OnComm事件,工作原理类似于中断方式[4]。而应用程序在捕获该事件后,通过检查MSComm控件的ComEvent属性可以获知事件或故障,从而采取相应的操作。这种方法的特点是程序响应及时可靠性高,适应于中断频率不太高的串行口通信。

2.2.2 界面消息响应函数

为对应的控件添加消息响应函数,通过消息响应机制同时响应多个任务。当用户进行了输入或是窗口的状态发生改变时,系统发送消息到窗口,所有产生的消息被放入消息队列中,根据优先级执行相应程序。由此,为控件添加了消息响应函数之后,就可以通过操作控件执行目标任务。

下面详细介绍下绘制坐标轴、响应接收事件并绘制摆杆角度波形的消息响应函数。

(1)OnPaint消息响应函数

在响应WM_PAINT消息的函数OnPaint中绘制坐标轴,由此在需要重绘波形时即可利用WM_PAINT消息重绘坐标轴区域覆盖之前的波形,在此基础上更新角度数据波形。

在OnPaint函数内,首先定义CPaintDC类的对象DCWave,通过这个对象就可以使用CDC类的成员函数完成波形区中的图形绘制操作;接着定义CRect结构rectWave,在后续的坐标轴绘制中可以通过CRect类的方法,获取区域的具体信息,如顶点、高和宽。

用编辑框IDC_Wave的GetClientRect函数将矩形大小写入rectWave中,然后获取IDC_Wave的句柄,调用CDC的成员函数FillSolidRect填充rectWave坐标区;接着获取rectWave的宽和高,利用DCWaved的成员函数MoveTo和LineTo绘制绘图区外边框以及坐标轴边框;通过计算得到坐标轴线,同样通过前面的划线命令绘制坐标轴;最后利用DCWave的成员函数TextOut把坐标轴刻度写在相应的位置。

绘成的坐标区如上图所示,纵坐标为角度数值,范围为0-360°,由于MSComm控件为事件驱动,接收到数据才会刷新波形,因此横坐标为在波形区显示的角度数据的组数,方便观察。

(2)OnComm消息响应函数

通过串行口通信控件MSComm,利用事件驱动方法与下位机进行通信。在串口接收缓冲区中有字符或一个字符到达,再或者是一个变化发生时,控件触发OnComm事件。

每当接收事件发生时,首先利用InvalidateRect函数使坐标轴区域rectWave无效,再使用UpDateWindow将WM_PAINT直接发送到绘图区,立即触发OnPaint响应函数,重绘坐标轴。

接着通信控件的成员函数get_Input读取缓冲区,然后将缓冲区的字符每三个为一组的ASCII码值拼成一个十进制整型的角度数值显示在最新数据框IDC_RecLatest中,同时将这个角度数值转换成字符型数据更新在接收历史框IDC_Rec中。

最后在波形区域rectWave,利用MoveTo和LineTo成员函数绘制角度数据的波形。为了动态显示波形,每次更新波形时,将之前的波形左移,最新的数据更新在上一个数据的波形右侧,在不断接收角度数据和更新波形时产生整个波形动态左移、新数据从右侧补充进来的效果。

2.3 串口通信

串口是计算机上一种非常通用设备通信的协议。串口通信的概念非常简单,串口按位(bit)发送和接收字节。本文中串口用于ASCII码字符的传输。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验位[5]。对于两个进行通行的端口,这些参数必须匹配。

串口的通信协议由下位机规定,具体规则如下:

(1)上位机发送给下位机的命令和下位机返回的数据必须以结尾,作为校验位。

(2)通信的波特率为11520bps,数据位为8位,无停止位,无奇偶校验。

3 通信结果

控制界面实现以下人机交互功能[6]:

(1)串口初始化

利用MSComm控件初始化串口号、波特率,设置缓冲区一个字符引发事件,打开串口;

(2)倒立摆的启停控制

通过点击“启动”和“停止”按钮控制旋转倒立摆系统启动和停止工作;

(3)PID参数设置

在上位机界面中输入想要设置的PID参数,点击“发送数据”按钮,下位机接收并设置系统参数,控制旋转倒立摆;

(4)倒立摆的角度数据显示

下位机采集旋转倒立摆的角度数据,发送给上位机,上位机将数据直接显示在编辑框,同时以波形的形式显示出来。

将上位机与串口调试助手进行通信,通信结果如下:

上位机点击“启动”,“停止”按钮发送启停命令,串口调试助手接收显示如图:

在PID输入框中输入数值,点击“发送数据”按钮,串口调试助手接收显示如图:

串口调试助手发送一组角度数值,上位机接收后显示在接收历史框和最新数据框中,同时在波形区绘制出角度数据的波形:

4 总结

本文主要介绍了旋转倒立摆系统上位机的设计方法,实现了对旋转倒立摆的启动和停止控制、摆杆角度的监测以及系统PID参数的设置。对于实现倒立摆控制系统的观测有较大的实践意义。

参考文献:

[1] 张建海.单片机控制的二级倒立摆系统的研究[D].河北工业大学,2005.

[2] 龙灏,丁旭玲.基于Windows API函数的串口通讯程序设计[J].电子世界,2015(19).

[3] 蔣萍花,张楠.数据采集系统串口通信的设计与实现[J].电子测量技术,2015(6).

[4] 陈曙光.利用ActiveX控件实现对计算机串口的通信管理[J].合肥工业大学学报:自然科学版,2000,3.

[5] 黄晖,柴剑勇,严兴, 等.串口通信技术[J].科技创新导报,2010(27).

[6] 王超.基于单片机的分布式果品贮藏远程监控系统[J].中国农机化学报,2016(4).

猜你喜欢
串口通信上位机
基于Qt和Flash的嵌入式Linux软件架构设计
基于MSP430单片机的窄带无线数据传输模块的设计
便携式数传电台测试系统的设计与实现