上位机开发

1、前言

       之前的博客中有一篇关于MSCOMM使用的文章,里面最然给出了例子,但是对MSCOMM的使用介绍的不够。加之,近来又接触了上位机编程方面的东西,遂详细的做点笔记在这里。

        MSCOMM控件应用比较广泛的原因主要还是在于它的操作简便性。特别是不需要做很多的代码编写工作就可以实现一些很基础的功能。但是在实际的开发使用时候还是要了解一些基本的MSCOMM属性,这样在出现问题的时候才不至于找不到原因。

 

2、MSCOMM的常用属性

这些图片都是从书中截取出来的。该书的pdf版本下载链接附在本文的最下面。

1、  BOOL get_PortOpen()和put_PortOpen(BOOL newValue)属性

BOOL get_PortOpen()  返回当前是否打开串口,TURE为打开,FALSE为关闭;

put_PortOpen(BOOL newValue)  设置串口打开,参数newValue为要打开的串口号。

 

2、  put_CommPort(short newValue)和short get_CommPort()

put_CommPort()  设置需要打开的串口;

get_CommPort()  获取已经打开的串口号。

Tips:在打开串口之前必须要设置要打开的串口。在关闭串口前也必须保证串被关闭串是处于打开状态的。

 

3、  put_InBufferSize()和put_OutBufferSize()

put_InBufferSize()  设置输入缓冲区大小(Byte),缺省下为1024字节;

put_OutBufferSize()  设置输出缓冲区大小(Byte),缺省下为1024字节。

 

4、  put_InputLen()

   put_InputLen()  设置当前接收区数据长度为0,表示全部读取。

 

5、put_InputMode()

put_InputMode()  设置为以二进制或者字符串的方式进行输入。

 

6、  put_RThreshold()

put_RThreshold()  设置一个阈值,当输如缓冲区的字符数量达到该阈值时,控件就会产生一个onComm事件,并且CommEvent属性设置为ComEvReceive,即为接受事件。

7、  put_Settings()

设置通信的参数,格式为:波特率,奇偶校验类型,数据位,停止位;

例如:

[cpp]  view plain copy
  1. m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600无校验位,8位数据位,1位停止位  

更多的属性可以在书上查找到,利用上述的属性可以做基础的串口初始化设置,设置的过程可以如下:

 

[cpp]  view plain copy
  1. if(m_mscomm.get_PortOpen())            //如果串口是打开的,则关闭串口  
  2.     {  
  3.        m_mscomm.put_PortOpen(FALSE);  
  4.     }  
  5.     m_mscomm.put_CommPort(4);              //选择COM1  
  6.     m_mscomm.put_InBufferSize(1024);       //接收缓冲区  
  7.     m_mscomm.put_OutBufferSize(1024);      //发送缓冲区  
  8.     m_mscomm.put_InputLen(0);              //设置当前接收区数据长度为0,表示全部读取  
  9.     m_mscomm.put_InputMode(1);         //以二进制方式读写数据  
  10.     m_mscomm.put_RThreshold(16);           //接收缓冲区有1个以及1个以上字符时,将引发接收数据的OnComm事件  
  11.     m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600无校验位,8位数据位,1位停止位  
  12.     if(!m_mscomm.get_PortOpen())           //如果串口没有打开则打开  
  13.     {  
  14.        m_mscomm.put_PortOpen(TRUE);//打开串口  
  15.        AfxMessageBox(_T("串口1打开成功"));  
  16.     }  
  17.     else  
  18.     {  
  19.        m_mscomm.put_OutBufferCount(0);  
  20.        AfxMessageBox(_T("串口1打开失败"));  
  21.     }  

3、MFC中插入MSCOMM控件

在资源管理视图的对话框资源下,右键>插入ACTIVEX控件,找到:


选择确定,并为该控件添加关联变量,添加响应的类。这样就可以对其进行操作了,串口的初始化设置如上面代码设置即可。

4、数据类型的处理

    输入输出缓冲区的类型都是VARIANT类型,程序中常用的字符处理类型是CString,char*等类型。所以需要将数据类型进行转换。


在需要发送数据时:

5、注意事项

### C++ 上位机开发教程资料 #### 使用C++进行上位机开发的重要性 在单片机项目开发中,上位机扮演着重要角色,用于数据显示(如波形、温度等)以及用户控制(如LED、继电器等)。为了实现这些功能,下位机(即单片机)与上位机之间的数据通信至关重要[^2]。 #### 基于Qt框架的C++上位机开发实例 对于初学者来说,基于Qt框架进行C++上位机开发是一个不错的选择。例如,在一个具体的案例中,开发者们选择了Qt5.15版本来构建串口助手应用。此过程不仅涉及UI界面的设计,还包括了程序逻辑的编写,比如通过`qDebug()`函数输出调试信息,当特定按钮被按下时显示“hello world.”这样的提示语句[^4]。 #### 实现串口通信的关键技术点 针对串口通信这部分内容,可以利用Qt提供的QSerialPort类库来进行操作。该类提供了访问本地计算机上的物理或虚拟COM端口所需的方法和属性。下面是一段简单的代码片段展示如何枚举当前系统中存在的可用串行端口号: ```cpp #include <QCoreApplication> #include <QSerialPortInfo> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { qDebug() << "Name : " << info.portName(); qDebug() << "Description : " << info.description(); qDebug() << "Manufacturer:" << info.manufacturer(); } return a.exec(); } ``` 这段代码能够遍历并打印出所有已连接到系统的串行设备名称及其描述信息,这对于后续建立稳定可靠的上下位机间的数据交换非常有帮助[^3]。 #### 输出与输入控制 值得注意的是,在实际编程过程中,除了上述提到的技术要点外,还需要掌握好基本的I/O流管理技能。相比于传统的C语言风格printf/scanf组合而言,现代C++更推荐采用iostream标准模板库中的成员对象——`std::cout`负责处理屏幕输出任务;而`std::cin`则用来接收来自用户的键盘输入[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值