VC++6.0串口通信编程基础及缓冲器电源程序解析目录一、概述.............................................................................................3二、开发平台.....................................................................................32.1硬件平台....................................................................................32.2软件平台....................................................................................32.3源码...........................................................................................3三、用MFC创建一个空对话框程序................................................4四、关联变量介绍及实例..................................................................9五、串口通信编程的简单实现.........................................................135.1界面及相关控件创建................................................................135.2数据接收和发送编程................................................................195.3程序测试...................................................................................21六、缓冲器电源上位机程序简析.....................................................236.1界面初始化编程........................................................................246.2串口编程(采用CSERIALPORT类编写)...................................256.3上下位机通讯帧格式.................................................................286.4控制按钮编程............................................................................29一、概述本文介绍了一种在VC++6.0中实现简单串口通信编程的方案,并在此基础上对实验室的旧版缓冲器电源上位机程序进行分析。阅读本文之前最好已经了解C++及MFC的一些基础知识:类与对象的关系及各自定义、构造函数与析构函数、MFC常用类的分类、MFC消息定义、消息映射机制等。C++编程已经有很多年了,而且不是纯粹的面向对象编程,有很多不完美的地方。推荐使用C#编程,在这方面实验室已经有很好的基础。本文简单介绍面向对向编程的一些初级知识。二、开发平台2.1硬件平台USB—串口线RS232接口笔记本已安装USB——串口线驱动2.2软件平台操作系统WindowsXP开发软件VC++6.02.3源码串口类CserialPort包含两部分:SerialPort.h(头文件)SerialPort.cpp(cpp文件)三、用MFC创建一个空对话框程序步骤一.打开VC++6.0软件,在菜单栏选择【文件】—【新建】步骤二.在弹出的【新建】对话框中单击【工程】选项卡,在该列表框列出的应用程序类型中选择【MFCAppWizard(exe)】选项接着输入工程名称并选择保存路径。步骤三.单击确定之后打开如下所示对话框,选择步骤四.单击下一步,打开下面所示对话框,保持默认设置,不做改动步骤五.单击下一步,继续打开如下对话框,风格只有MFC标准有效,源文件备注指的是产生一个关于源文件描述的文本文件,使用MFC类库的方式有两种:共享dll(动态链接库)和静态链接库,前者是动态调用MFC类库,即不包含在生成的可执行程序中,后者是静态调用MFC类库,即将MFC类一起编译在可执行程序中,方便应用程序移植到别的计算机上运行,这里也保持默认设置。步骤六.单击下一步,得到下图所示对话框,单击完成按钮则就完成了一个对话框应用程序的创建。步骤七.新建立的对话框程序,打开工作区的【ClassView】选项卡,得到下图表示类,粉红色小方块表示类的成员函数,绿色小方块表示成员变量,黄色钥匙表示保护类型(protected)的成员变量或成员函数,该工程中没有私有类型的成员,私有类型成员是在前面加一把锁标明。步骤八.打开工作区的【FileView】选项卡,得到下图,工作区是工程文件目录步骤九.打开工作区的【ResourceView】选项卡,双击Dialog中的IDD_MYDIALOG_DIALOG,即可打开对话框编辑窗体。步骤十.标准控件工具栏,各控件功能请参考有关资料自带的串口通信控件MSComm并不在工具栏里,需要自行添加,添加路径:菜单栏【工程】——【增加到工程】——【ComponentsandControlsGallery】,选择RegisteredActiveXControls文件夹中的然后添加即可。静态文本框动态编辑框按钮MFC自带的串口通信控件四、关联变量介绍及实例关联变量是C++/MFC编程中一个重要概念,是进行数据交换的重要途径。下面举一实例来说明关联变量。创建一个新的MFC对话框工程(定名为sample),然后添加2个编辑框和一个按钮(窗体自带控件已删除),如下图:注:在控件上右击选择【属性】,可以修改控件的名称及参数。在对话框窗体上添加2个静态文本框IDC_EDIT1和IDC_EDIT2以及一个按钮IDC_BUTTON2。要实现的功能:IDC_EDIT1为输入框,IDC_EDIT2为输出显示框,在输入框中输入一个整数,点击按钮实现×2,在输出框中得到输入值2倍。步骤一.在编辑界面上右击鼠标,选择【建立类向导】,进入MFCClassWizard窗口,单击【MessageMaps】选项卡进入消息添加页面。单击IDC_EDIT1IDC_BUTTON2IDC_EDIT2步骤二.单击【MemberVariables】选项卡,进入添加变量页面,如下图,分别为输入框和输出框添加一个int型的关联变量m_a和m_b。注:每个控件可添加多个变量,变量类型可选。添加方法:选择左图大方框内要添加变量的控件对象,然后单击AddMemberVariable按钮,弹出右图,填入要添加变量的名字,选择类型,单击OK,然后在左图大方框内的相应控件上就会显示出来。这些变量添加后在代码文件中就会体现,在主代码文件sampleDlg.cpp中:控件的数据交换,在本例中体现为关联变量,其代码在虚函数DoDataExchange中。如上所述在MFCClassWizard中添加的关联变量都可以在DoDataExchange中找到对应代码。步骤三.为按钮控件添加消息及消息响应函数。首先介绍常用标准消息的添加方法,如下,进入MFCClassWizard窗口,单击【MessageMaps】选项卡进入消息添加页面。如图给按钮IDC_BUTTON2添加BN_CLICKED消息(即按钮被单击的消息)。对于按钮的单击消息有个更快捷的添加方式:直接在编辑窗体上双击该按钮,弹出下面窗口,该窗口为按钮添加一个单击消息,图中OnButton2为单击消息的消息响应函数。单击OK,直接跳到OnButton2函数的代码区,此时单击消息及空的消息响应函数添加完毕。1.选择控件或窗体2.选择相应的消息3.单击添加步骤四.为空的消息响应函数OnButton2添加功能代码:这里有2行重要代码:UpdateData(TRUE);//关联变量时常用,把框体内容赋给与之相关联的变量UpdateData(FALSE);//关联变量时常用,把更新后的变量值返回给框体至此,程序设计完毕,编译运行即可。有时候在某个代码文件上编译时,可能是因为其他文件的全局变量未传递过来,导致错误,此时直接点击【生成】即可,最终再点击【运行】,观察可执行程序的效果。注:生成的可执行程序在该工程的Release文件夹或Debug文件夹下可以找到。编译生成运行五、串口通信编程的简单实现常用串口通讯编程方法:1.利用VC++6.0提供的MSComm控件编程2.使用32位的API通信函数3.使用CserialPort类进行编程本节将采用第三种方法编写一个简单串口通信程序。所用的CserialPort类由RemonSpekreijse编写,使用时需下载源程序SerialPort.h和SerialPort.cpp。注:本节所有代码均可从网上找到,此处只是对代码进行介绍和实现。5.1界面及相关控件创建步骤一.建立一个新MFC对话框工程,命名为SCPortTest,添加下图所示控件组合框控件IDC_COMBO_COMPORT关联CComboBox型变量m_ctrlComboComPort编辑框IDC_EDIT_RECEIVEMSG关联CString型变量m_strEditReceiveMsg编辑框IDC_EDIT_SENDMSG关联CString型变量m_strEditSendMsg组合框控件IDC_COMBO_COMPORT按钮ID_OK编辑框IDC_EDIT_RECEIVEMSG编辑框IDC_EDIT_SENDMSGCComboBox型变量m_ctrlComboComPort的添加:这里选ControlCComboBox型★接收编辑框IDC_EDIT_RECEIVEMSG设置问题:在该控件上单击右键,选择【属性】,进入该控件属性设置,设置垂直滚动,如下:★添加组合框控件IDC_COMBO_COMPORT的几个问题:在该控件上单击右键,选择【属性】,进入该控件属性设置【样式】选项卡:【数据】选项卡此处选择“下移”或“下拉列表”按住Ctrl和回车键换行这两个地方务必选上下拉框显示问题步骤二.添加CserialPort类及定义对象①把SerialPort.cpp和SerialPort.h文件复制到工程目录文件夹内,如下图步骤所示,将SerialPort.cpp加入SerialPort.h加入注:VC++6.0上可能没有解决方案见下文点击此处三角,控件的整体框架显现,如图中所示的虚线框这个距离要够大,否则下拉的数据无法显示多行1.单击选择被添加到的文件夹2.单击这里执行添加★关于无法通过下图所示添加文件的问题:这是由Visio及OFFICE与VC++6.0冲突造成的,解决方案见网上资料。本文解决此问题后在VC++6.0上添加了2个按钮:用这两个按钮实现添加和打开。3.选择文件然后确定②声明类对象和接口状态变量:首先,在SCPortTestDlg.h文件内添加语句,引入SerialPort类,即添加#includeSerialPort.h。其次,在类classCSCPortTestDlg:publicCDialog中声明SerialPort类的对象和一个状态变量。本例中为:CSerialPortm_SerialPortBOOLm_bSerialPortOpened步骤三.初始化界面及控件显示:在SCPortTestDlg.cpp文件的BOOLC