图5-5 单通道数据接收和显示VI结构图
图5-6接收数据存为文本的VI图
图5-7制作完成的串口控制界面
5.2 VC++6.0界面程序结构设计
5.2.1 VC++6.0软件串口编程介绍
VC++ 6.0是微软公司于1998年推出的一种开发环境,以其强大的功能,友好的界面,32位面向对象的程序设计及Active X的灵活性而受广大软件开发者的青睐,被广泛应用于各个领域。应用VC 开发串行通信目前通常有如下几种方法:一是利用Windows API通信函数;二是利用VC的标准通信函数_inp、_inpw、_inpd、_outp、_outpw、_outpd等直接对串口进行操作;三是使用Microsoft Visual C 的通信控件(MSComm)。以上几种方法中第一种使用面较广,但由于比较复杂,专业化程度较高,使用较困难;第二种方法需要了解硬件电路结构原理;第三种方法比较方便,好用,只需要对串口进行简单配置,利用事件驱动的编程原理进行各种事件的响应处理,再根据下位机固件的需要编写通信协议即可。
5.2.2 VC++6.0电机参数显示界面
MSComm控件是微软开发的专用通信控件,封装了串口的所有功能,使用很方便,但在实际应用中要小心对其属性进行配置。下面就结合“电机参数显示界面”说明该类应用方法和界面程序结构设计思路。
图5-8程序设计界面
可以看到整个界面是一个MFC对话框,界面上嵌入了按钮,显示框,滑动条和一些修饰控件,该界面配备的功能概述如下: 1. 串口选择和配置功能 2. 指令按钮发送和定时发送 3. 电压,电流,转速,力矩数据显示 4. 十进制十六进制切换显示功能 5. 电机启动和停止指令发送 6. 滑动条0-255数据发送 7. 参数保存为文本功能
界面采用VC软件的MFC编程方法,首先制作了基本对话框,然后拖拽控件到对话框,最后针对不同的事件对不同的类进行操作,由于程序代码篇幅比较大,现在只给出最重要的串口接收事件函数解析,具体代码实现如下:
void CSCommTestDlg::OnComm() // 串口事件处理函数 {
// TODO: Add your control notification handler code here
//写入数据到记事本
static UINT VP=0; static UINT VI=0; static UINT VS=0; UINT ZHUANJU=0; CString TEMP;
static BYTE count3=0; VARIANT variant_inp; COleSafeArray safearray_inp;// 读取 发送的数据位于 安全数组的 一个指针的指向 内存中 LONG len,k; BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integer that is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { variant_inp=m_ctrlComm.GetInput(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray 型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k if(!switch_display) //FALSE 正常显示 { if(m_ctrlHexDisplay.GetCheck())//注意此处的复选开关控件变量的使用 选用哪种显示方式 strtemp.Format(\\//02X将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔 单片机发送十六进制数据 else strtemp.Format(\将字符送入 //m_strRXData+=strtemp; //加入接收编辑框对应字符串 m_strRXData=strtemp+m_strRXData;//新接收的数据为第一个 m_cstring_volut=\正常显示的时候3参数显示为空 m_cstring_speed=\ m_cstring_current=\ } else //3参数显示 { ++count3; if(count3==1) { VP=bt; strtemp.Format(\ // m_cstring_volut+=strtemp; //单片机发送一帧的第一个参数为电压 m_cstring_volut=strtemp+m_cstring_volut; } if(count3==2) { VI=bt; strtemp.Format(\ // m_cstring_volut+=strtemp; //单片机发送一帧的第一个参数为电压 m_cstring_current=strtemp+m_cstring_current; } if(count3==3) { VS=bt; strtemp.Format(\ // m_cstring_volut+=strtemp; //单片机发送一帧的第一个参数为电压 m_cstring_speed=strtemp+m_cstring_speed; 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库多功能数据采集控制板的设计与实现 - 图文(8)在线全文阅读。
相关推荐: