上位机软件设计.docx
- 文档编号:30858519
- 上传时间:2024-04-09
- 格式:DOCX
- 页数:11
- 大小:181.81KB
上位机软件设计.docx
《上位机软件设计.docx》由会员分享,可在线阅读,更多相关《上位机软件设计.docx(11页珍藏版)》请在冰豆网上搜索。
下位机软件设计介绍
一、 系统概述
转台
PC104
RS232
上位机
控制台
本文主要介绍伺服转台系统的上位机控制软件的设计和开发过程。
本转台伺服系统的大体框架如图1所示。
图1
上位机控制台和下位机PC104通过RS232串口通信。
其中,下位控制计算机PC104采用DOS操作系统,上位机控制台是基于VC++6.0开发的运行于上位机(XP系统)的控制软件。
本软件的目的是最终实现上位机控制台和PC104之间的通信,从而达到通过操作上位机控制台控制伺服转台的目的。
二、 实现功能
根据本伺服系统的技术和功能要求,上位软件需要实现的主要功能如下:
1.基本参数设置
基本参数设置功能包括:
lPID参数的设定,需要分别设定方位和俯仰的P、I、D参数
l前馈参数的设定,需要分别设定方位和俯仰的前馈参数
l零位标定,需要分别标定方位和俯仰的零位
2.基本性能测试
包括系统的阶跃响应和频率响应的测试。
l阶跃响应测试,需要分别设定方位和俯仰阶跃的幅值
l频率响应测试,需要分别设定方位和俯仰的频率和幅值。
3.基本控制功能
上位软件包括的基本的控制功能如下:
l伺服待机
l指向功能,需要分别设置方位和俯仰指向的角度
l匀速功能,需要分别设置方位和俯仰运转的速度值
4.显示功能
.
主要显示下位机会发给上位机的信息,分析回发的信息,当有错误进行报错提示。
三、 通信协议
通信协议主要规定了上位机软件和下位伺服计算机PC104之间串口通信的格式和内容。
上位机软件按照协议规定的帧格式向下位机发送命令数据,下位机接收处理命令数据并依照通信协议规定的格式向上位机软件回发响应信息。
串口通信的特性约定如下:
l物理接口:
RS232
l传输速率:
9600bps
名称
帧头
信息流方向
信息类别
数据内容
检查和
帧尾
字节长度
1
1
1
N
1
1
10H(上位机发往
PC104)01H 按下面章节 按下面章节
编码
7BH
前面所有字
节累加和,保
7DH
(PC104发往上 约定 约定
留低8位
位机)
l帧格式:
N-8-1(无校验,8个数据位,1个停止位)命令帧的封装格式:
依照前文提到的功能要求,上位机发往下位机的命令帧可分为15个类别。
其中,数据内容是以补码发送的。
上位机实际输入的命令数据是精确到小数点后两位的浮点数,发送的数据为整型(占两个字节)。
这里的处理方法是:
上位机发送的数据=上位机输入的数据*100
经浮点数转整型数处理后的各命令帧的具体格式如下(表中数据均为十六进
制表示):
名称
帧
方
类
数据内容
校验和
帧
总字
头
向
别
尾
节数
方位PID
7B
10
21
P、I、D参数(各占两个字节)
待定
7D
11
俯仰PID
7B
10
22
P、I、D参数(各占两个字节)
待定
7D
11
方位前馈
7B
10
23
方位前馈参数(占两个字节)
待定
7D
7
俯仰前馈
7B
10
24
方位前馈参数(占两个字节)
待定
7D
7
零位标定
7B
10
25
方位和俯仰零位(各占两个字节)
待定
7D
9
方位阶跃
7B
10
26
方位阶跃幅值(占两个个字节)
待定
7D
7
俯仰阶跃
7B
10
27
俯仰阶跃幅值(占两个字节)
待定
7D
7
方位频响
7B
10
28
方位频率和幅值(各占一个字节)
待定
7D
7
俯仰频响
7B
10
29
俯仰频率和幅值(各占一个字节)
待定
7D
7
伺服待机
7B
10
2A
空数据
待定
7D
5
伺服指向
7B
10
2B
方位和俯仰指向角度(各占两个字节)
待定
7D
9
匀速
7B
10
2C
方位和俯仰角速度(各占两个字节)
待定
7D
9
下位跟踪
7B
10
2D
速度、截距和高度(各占两个字节)
待定
7D
11
上位跟踪
7B
10
2E
方位和俯仰角度(各占两个字节)
待定
7D
9
初始化
7B
10
2F
空数据
待定
7D
5
方位PID
回发
7B
01
41
00(若接收数据正确)或FF(若接收数
据错误)
待定
7D
6
俯仰PID
回发
7B
01
42
00(若接收数据正确)或FF(若接收数
据错误)
待定
7D
6
方位前馈
回发
7B
01
43
00(若接收数据正确)或FF(若接收数
据错误)
待定
7D
6
俯仰前馈
回发
7B
01
44
00(若接收数据正确)或FF(若接收数
据错误)
待定
7D
6
零位标定
回发
7B
01
45
00(若接收数据正确)或FF(若接收数
据错误)
待定
7D
6
初始化
回发
7B
01
46
00(若接收数据正确)或FF(若接收数
据错误)
待定
7D
6
四、 上位机软件开发过程
转台上位机控制软件是基于VC6.0开发的对话框软件。
大致开发步骤如图2所示。
布局设计
建立MFC工程,在对话框中添加所有所需的控件
修改控件属性,关联变量
为按钮控件添加事件响应函数
在.cpp文件中编写响应函数,
添加响应的功能函数,细化代码
本机通信测试
联机通信测试
图2
1布局设计
根据软件的功能要求将上位机软件大致分为四个区域:
参数设置区、性能测试区、控制区和显示区。
工程建立成功后从控件工具条中拖入所需控件,修改基本属性(名称、大小、样式等),完成后如图3所示。
图3
说明:
VC6.0的基本控件里不包括MSComm控件,所以要手动添加【MicrosoftCommunicationsControl,version6.0】组件到工程中。
2关联变量和事件响应函数
l关联变量
图3中我们使用的主要控件分为三种:
静态文本、编辑框和按钮。
给控件关联变量的目的是便于对控件的格式、内容等进行设置。
对于编辑框,首先为其关联一个double类型的变量,该变量用来获得编辑框输入的内容。
其次再关联一个CEdit类型的变量,该变量用来控制输入内容的范围、长度等。
以方位PID中参数P对应的编辑框为例。
其ID为IDC_EDIT_AZ_P,关联double型变量m_Edit_AZ_p,限制取值范围为0-200。
如图4所示。
图4
如果在编辑框内输入数据超出设定的范围,会弹出错误提示,如图5。
图5
再为其关联CEdit型变量m_Control_AZ_p,利用该类型下的SetLimitText函数来限制输入数据的长度为7。
在程序中添加如下代码即可:
m_Control_AZ_p.SetLimitText(7);
完成上面内容后,VC会自动在源文件和头文件中加入响应变量的初始化和设置并生成代码,我们可以修改代码来满足更多的要求,例如初始化编辑框的初
.
始内容为0,只需要为m_Edit_AZ_p赋值0即可。
其他所有的编辑框的操作与之类似。
l添加事件响应函数
所谓事件响应函数,这里是指鼠标点击窗口上的按钮时软件所应该执行的操作。
以方位PID参数设置的“确定”按钮为例。
打开【建立类向导】的
【MessageMaps】页,为方位PID的确定按钮控件(ID为IDC_BUTTON_AZ_PID_OK)添加单击鼠标的事件响应函数,命名为OnButtonAzPidOk()。
完成后VC会在对话框的源文件中自动添加该函数的代码,此时为一个空函数,不执行任何操作。
相似的,依次为其他的按钮添加相应的响应函数。
完成后所有的事件响应函数如表1所示。
表1控件时间响应函数列表
控件ID 说明 响应函数IDC_BUTTON_AZ_PID_P 方位PID确定按钮 OnButtonAzPidOk()IDC_BUTTON_AZ_PID_CLEAR 方位PID清除按钮 OnButtonAzPidClear()IDC_BUTTON_PI_PID_OK 俯仰PID确定按钮 OnButtonPiPidOk()IDC_BUTTON_PI_PID_CLEAR 俯仰PID清除按钮 OnButtonPiPidClear()IDC_BUTTON_AZ_FF_OK 方位前馈确定按钮 OnButtonAzFfOk()IDC_BUTTON_PI_FF_OK 俯仰前馈确定按钮 OnButtonPiFfOk()IDC_BUTTON_ZERO_OK 零位标定确定按钮 OnButtonZeroOk()IDC_BUTTON_ZERO_CLEAR 零位标定清除按钮 OnButtonZeroClear()IDC_BUTTON_INIT 初始化确定按钮 OnButtonInit()IDC_BUTTON_AZ_STEP_OK 方位阶跃确定按钮 OnButtonAzStepOk()IDC_BUTTON_PI_STEP_OK 俯仰阶跃确定按钮 OnButtonPiStepOk()IDC_BUTTON_AZ_FRESP_OK 方位频响确定按钮 OnButtonAzFrespOk()IDC_BUTTON_AZ_FRESP_CLEAR 方位频响清除按钮 OnButtonAzFrespClear()IDC_BUTTON_PI_FRESP_OK 俯仰频响确定按钮 OnButtonPiFrespOk()IDC_BUTTON_PI_FRESP_CLEAR 俯仰频响清除按钮 OnButtonPiFrespClear()IDC_BUTTON_DISPLAY_CLEAR接收显示区清除按钮OnButtonDisplayClear()
.
IDC_BUTTON_STAND
待机确定按钮
OnButtonStand()
IDC_BUTTON_POINT_OK
指向确定按钮
OnButtonPointOk()
IDC_BUTTON_POINT_CLEAR
指向清除按钮
OnButtonPointClear()
IDC_BUTTON_CSPEED_OK
匀速确定按钮
OnButtonCspeedOk()
IDC_BUTTON_CSPEED_CLEAR
匀速清除按钮
OnButtonCspeedClear()
IDC_BUTTON_LOCALTRACK_OK
下位跟踪确定按钮
OnButtonLocaltrackOk()
IDC_BUTTON_LOCALTRACK_CLEAR
下位跟踪清除按钮
OnButtonLocaltrackClear()
IDC_BUTTON_REMOTETRACK_OK
上位跟踪确定按钮
OnButtonRemotetrackOk()
IDC_BUTTON_REMOTETRACK_CLEAR
上位跟踪清除按钮
OnButtonRemotetrackClear()
3编写事件响应函数,代码细化
l事件响应函数
完成前面步骤后,VC会在源文件中生成相应的代码。
下面的任务就是分别编写事件响应函数内部的代码。
按照前面通信协议的要求,将编辑框输入的数据按照通信协议的要求封装并经串口发送即可。
不过,在此之前,需要对串口进行初始化。
在窗口的初始化函数中添加如下代码:
m_ctrlComm.SetCommPort(4); //选择串口号(1-16可选)m_ctrlComm.SetInputMode
(1); //输入方式为二进制方式m_ctrlComm.SetInBufferSize(1024);//设置输入缓冲区大小m_ctrlComm.SetOutBufferSize(512);//设置输出缓冲区大小
//波特率9600,无校验,8个数据位,1个停止位m_ctrlComm.SetSettings("9600,n,8,1");if(!
m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(TRUE); //打开串口m_ctrlComm.SetRThreshold
(1);
//接收缓冲区中有多于或等于1个字符时将发送一个接收数据的
OnComm事件
m_ctrlComm.SetInputLen(0);
按照通信协议的要求,在事件响应函数中,接收到编辑框输入的数据(浮点数)后,将其转换为整型放入数组,计算校验和然后发送。
除了我们添加的25个按钮事件响应函数以外,还有一个串口的事件响应函数CCOMRTDlg:
:
OnComm(),串口缓冲区每收到一个数据都产生一个事件并调用该函数。
l接收显示函数
根据协议要求,下位机回发的数据中包含特定的校验信息,接受函数需要显示接收到的内容并根据数据内容作出响应。
这里对于回发的6种类别的信息,分别根据信息类别和数据位的内容给出6种不同弹出提示。
以方位PID参数发送为例,如果下位机接收数据有误,则上位机控制软件弹出如下提示:
l上位跟踪函数
上位跟踪函数也是事件响应函数之一。
该函数输入值是在界面上输入的航迹的高度、截距和速度值,而发送给下位机的是经过航迹公式求得的方位和俯仰的角度值。
根据系统要求,需要在每个定时周期(20ms)内求得此刻需要指向的角度值然后发送给下位机。
系统跟踪航迹的过程中不可进行除待机以外的其他操作。
即在发送航迹数据过程中使上位机控制界面中除待机按钮以外的其他按钮均为不可操作状态。
在航迹数据发送完成后将其恢复。
这里主要介绍如何实现高精度定时。
利用WindowsAPI函数QueryPerformanceFrequency()可以获得系统的频率。
用QueryPerformanceCounter()函数可以获得系统计数器的当前计数值。
那么如果需要定时周期为myTime,那么定时方法大致如下:
QueryPerformanceFrequency(freq); //获得系统频率QueryPerformanceCounter(stop); //获取计数器初值do
{
//需要周期执行的代码
……………………
.
QueryPerformanceCounter(stop); //获取计数器当前值stop=(double)_stop.QuadPart;
}while((stop-start)<=myTime*freq); //判断定时20ms到否,未到转至do
语句
l其他细节
由于将浮点数转化为整型时出现截断误差,这里需要做如下处理:
若输入为正数,对其加0.5再转为整型;若输入为负数,对其减0.5再转为整型。
此外,为了防止在操作对话框时因为按下“回车”或者“ESC”键导致对话框直接关闭退出,需要在源文件中添加对这两个事件的屏蔽函数。
4软件测试
本机测试时,利用虚拟串口工具和串口调试助手软件建立虚拟串口连接进行测试,实现串口两端的数据收发。
检验数据发送是否正确,对响应的处理是否正确。
联机测试时,和下位机PC104通过RS232进行测试。
5部分改进和问题。
改进:
考虑到上位机软件在不同计算机上运行时,系统所分配的串口号不同。
在界面上添加了串口选择(可选端口号1-8)列表框和响应按钮。
同时,添加指示灯来显示串口的状态(打开或关闭)。
如图6所示。
图6
为了便于上位跟踪航迹时数据的分析,在上位机发送航迹数据的同时,存储所发送的方位和俯仰角度值,在发送完成后将存储的数据写入文件,便于对跟踪效果进行分析。
.
问题:
1)在上位跟踪时,由于定时过程中需要反复读取系统计数器的当前值,以此来判断定时时间是否到达。
这导致软件运行时占用大量的系统资源。
测试时发现,航迹发送期间无法响应待机按钮。
考虑采用线程编程方法才能节省系统资源。
考虑到数据内容可能与帧头或者帧尾相同而导致数据解码出错,所以将所有命令
帧的帧长固定为一定长度(11个字节),数据位不够的补零,帧尾在第11个字节,校验和在第10个字节。
但是这样会导致上位机通过串口向下位机发送收据的时间变长。
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上位 软件设计