VC++6.0串口通信编程基础及缓冲器电源程序解析
基于VC6.0MFC的简单串口通信软件编程
基于VC6.0MFC的简单串⼝通信软件编程(⼀)基于对话框编程基本步骤:1.新建基于对话框的⼯程;2.拖曳所需的基本控件,构成界⾯;3.使⽤类向导(CLASS WIZARD)创建与基本控件对应的成员变量、成员函数,确定与函数相应的消息或事件——即触礁发该函数执⾏的条件(如单击等)。
(⼆)使⽤mscomm控件:1.基本设置:m_com.SetCommPort(1); //选择COM1m_com.SetInBufferSize(1024); //设置输⼊缓冲区的⼤⼩,Bytesm_com.SetOutBufferSize(256); //设置输出缓冲区的⼤⼩,Bytesif(!m_com.GetPortOpen()) //打开串⼝m_com.SetPortOpen(TRUE);m_com.SetInputMode(1); //设置输⼊⽅式为⼆进制⽅式m_com.SetSettings("4800,s,8,1");m_com.SetRThreshold(1); //为1表⽰有⼀个字符引发⼀个事件 m_com.SetInputLen(0);2.似乎每次设置m_com.SetSettings("4800,s,8,1"),必须先关再开串⼝才有效。
设置的校验位似乎只对发送数据有效,对接收数据⽆效。
3.虽然m_com.SetRThreshold(1)设置接收到⼀个字符就引发⼀个事件(触发执⾏函数),但执⾏函数读取到的数据可能不⽌1Byte,如另⼀串⼝连续发送多个字节,当串接收到第⼀个字节后就触发函数,但在函数去输⼊缓冲区读取数据时可以读到8Byte。
(三)MFC的⼀些基本使⽤:1.Unsigned char 与char不同,在执⾏加减时,char型当作带符号数(可能为负)。
2.当控件对应的变量是控件类时,可能通过该类的成员函数来获取数据或执⾏操作:如m_com是mscomm控件的变量,可以执⾏m_com.SetPortOpen(FALSE)来关闭串⼝。
利用VC++6.0实现上位机与PLC的串行通信(1)
利用VC++6.0实现上位机与PLC的串行通信作者:惠鸿忠, Hui Hongzhong作者单位:聊城大学刊名:微计算机信息英文刊名:CONTROL & AUTOMATION年,卷(期):2006,22(16)被引用次数:12次参考文献(4条)1.郭飒基于OPENGL的灯光控制系统的实现[期刊论文]-微计算机信息 2004(05)2.苗长新注浆泄漏监测程序的设计及其串行通信实现[期刊论文]-微计算机信息 2003(06)3.李现勇Visual C++串口通信技术与工程实践 20024.SIMATIC S7-200可变程序控制器系统手册引证文献(12条)1.吴镇平基于PLC的桥式组合大切机监控系统设计[期刊论文]-闽西职业技术学院学报 2010(1)2.徐洋.王宏华.周强.李俊星基于MSP430单片机的无刷直流电机实验测试平台设计[期刊论文]-机械制造与自动化2010(4)3.杨英琴.侯力.郑熙.王裕林.陈丹PLC控制系统在厚壁钢管超声波探伤中的应用[期刊论文]-机械设计与制造2010(12)4.吴镇平.林海涨.李捷辉利用VC++6.0实现PLC实时监控[期刊论文]-装备制造技术 2009(7)5.王少江.侯力.薄立朗.匡红PLC和变频器在超声波自动探伤系统的应用[期刊论文]-煤矿机械 2009(4)6.唐捷.蔡智圣.李争名.赵士滨基于PC机并口通信的多媒体设备控制系统的设计与实现[期刊论文]-光盘技术2009(2)7.李波.舒朝君.江彦.余磊.刘永喜.胡玉庆.皮智敏基于VC的PLC数据采集管理系统[期刊论文]-现代电子技术2009(6)8.董奎勇.钱炜.王明军.熊磊基于VC++的月球车的数据采集处理系统[期刊论文]-微计算机信息 2008(28)9.黄良希.LI Ding-zhu用于机动车路考系统的车载通讯系统研究[期刊论文]-微计算机信息 2008(23)10.汤光华.吴青自由口模式下S7200 PLC与上位机的通信[期刊论文]-微计算机信息 2008(13)11.李志伟基于AT指令的串行通信程序的设计[期刊论文]-微计算机信息 2007(9)12.安宪军.黄尔烈.贾少锐.张常全基于Delphi7.0的上位机与PLC的通信[期刊论文]-微计算机信息 2007(7)本文链接:/Periodical_wjsjxx200616021.aspx。
VC++6.0网络编程入门例程(sockets)
VC++6.0⽹络编程⼊门例程(sockets)服务器端: 1.初始化阶段调⽤WSAStartup() 此函数在应⽤程序中初始化Windows Sockets DLL ,只有此函数调⽤成功后,应⽤程序才可以再调⽤其他Windows Sockets DLL中的API函数。
在程式中调⽤该函数的形式如下:WSAStartup((WORD)((1<<8|1), (LPWSADATA)&WSAData)参数:(1<<8|1):表⽰我们⽤的是WinSocket1.1版本;WSAata:⽤来存储系统传回的关于WinSocket的资料。
2、建⽴Socket 初始化WinSock的动态连接库后,需要在服务器端建⽴⼀个监听的Socket,为此可以调⽤Socket()函数⽤来建⽴这个监听的Socket,并定义此Socket所使⽤的通信协议。
此函数调⽤成功返回Socket对象,失败则返回INVALID_SOCKET(调⽤WSAGetLastError()可得知原因,所有WinSocket 的API函数都可以使⽤这个函数来获取失败的原因)。
SOCKET PASCAL FAR socket( int af, int type, int protocol ) 参数: af: ⽬前只提供 PF_INET(AF_INET); type: Socket 的类型 (SOCK_STREAM、SOCK_DGRAM); protocol:通讯协定(如果使⽤者不指定则设为0); 如果要建⽴的是遵从TCP/IP协议的socket,第⼆个参数type应为SOCK_STREAM,如为UDP(数据报)的socket,应为SOCK_DGRAM。
3、绑定端⼝ 接下来要为服务器端定义的这个监听的Socket指定⼀个地址及端⼝(Port),这样客户端才知道待会要连接哪⼀个地址的哪个端⼝,为此我们要调⽤bind()函数,该函数调⽤成功返回0,否则返回SOCKET_ERROR。
基于VC_6_0的多串口通信方法_王中训
该多路串行通信系统由上位机和下位机构成 ,如图 1所 示 ,上位机为 PC机 , PC机通过多用户卡可扩展出八个串口 , 下位机为单片机 。与传统的 TTL 等数字电路的逻辑电平不 同 , RS2232标准规定信号电压在 - 15 ~ - 3 V 和 3~15 V ,传 号和空号之间至少有 6V 的电压差 ,提高了数据传输的可靠 性和抗干扰能力 。因此 ,单片机与 PC机需要用一个电平转 换板 , 用 MAX232 芯 片 实 现 TTL 电 平 和 RS232 电 平 相 互 转换 。
图 2 单线程实现多串口通信流程 3. 2 创建读写线程 ,实现串行通信
如图 3所示 ,打开并配置完串口后 ,开启两个线程 ,一个 读线程和一个写线程 ,主线程主要负责将所有串口接收到的 数据进行处理显示以及各个子线程的调度和管理 ,读线程负 责读取八个串口的数据 ,写线程负责向需要控制的串口中写 入数据 。在实际应用中向串口写入数据的操作并不频繁 ,所 以写线程在刚开始创建时即被挂起 ,当需要向串口发送数据 时才激活写线程 ;当写操作完成后 ,又被挂起 ,以减少系统开 销 ,提高程序的执行效率 [4 ] 。
由于运用标准通信函数需要对硬件电路的结构原理非常了解编程比较复杂scomm控件进行串口编程scomm控件是微软公司提供的indows环境下实现串行通信的利用它可以非常简单地实现串行通scomm控件虽然简单易用但在实际测试中也发现了其本身的一些缺点如实时性不高高速通信时准确率较差和处理速度较慢等缺点另外由于其本身存在一i函数实现串口编程利用有很强的灵活性但需要用户详细了解串口程序开发过程和一些复杂indows系统中串口和其他通信设备是作为文件处理的
第 28卷 2008年 6月
计算机应用 Computer App lications
串口调试助手VC60程序
串口调试助手VC60程序目次:1.建立项目那可能是你在安装VC6时没有把Active某一项选上,重新安装VC6,选上Active某就可以了),//{{AF某_INCLUDES()#include\(这时运行程序,如果有错,那就再从头开始)。
4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_R某DATA,另一个用于输入发送数据,ID为IDC_EDIT_T某DATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。
别忘记了将接收编辑框的Propertie->Style中把Miltiline和VerticalScroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。
休息一会吧?我们天天与电脑打交道,要注意保重,我现在在单杠上做引体向上可以来40次,可我都32了,佩服吗?。
好了,再接着来,下面是关键了:{//TODO:AddyourcontrolnotificationhandlercodehereVARIANTvariant_inp;COleSafeArrayafearray_inp;LONGlen,k;BYTEr某data[2048];//设置BYTE数组An8-bitintegerthatinotigned.CStringtrtemp;afearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray 型变量len=afearray_inp.GetOneDimSize();//得到有效数据长度for(k=0;kafearray_inp.GetElement(&k,r某data+k);//转换为BYTE型数组for(k=0;kBYTEbt=某(char某)(r某data+k);//字符型trtemp.Format(\将字符送入临时变量trtemp存放m_trR某Data+=trtemp;//加入接收编辑框对应字符串}}UpdateData(FALSE);//更新编辑框内容}到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开VC6对照着做一步写一行的,运行试试。
用VC++6.0实现PC机与嵌入式系统的串口通信
I lme t t n o e iIP r mpe na i f S r o t o a Co mmu ia in Be we n a Co nc t t e mp t r o ue a d t e Emb d e Sy t m Us n n h e d d se ig
Co o e t a d mp n ns n Co t i nr s o Ga r Ney对 话 框 的 Reitrd gsee
在嵌入式系统中,经常会遇 到通 讯问题。串 口 讯是一种实用 通 的通讯方式 。嵌入式系统与上位机 的通 讯通常是通过 串口进 行的。 P I S公司的 L C 2 0 HL P 2 0 是基于一个支持实时仿真和跟踪的 3 位 2 A M7 D — P 的嵌 入 式 R S 。 有 两 个 异 步 串 行 接 口 R r MI C U r S IC 具 ( UART ' oUART1 和 RS 3 ) 2 2电平转 换电路 ,可与上位 机进行 通 信。 在 Wi o s n w 环境下开发与下位机的通讯系统。经常使用基于 d VC+ +的 Wid ws 台开 发。 VC+ no 平 +是微软公司推 出的一个 面向 对象的、功能丰富的可视化 重量级 的开发工具 。它虽然复杂,但 功 能非常强大。它在图形处理和 数据库管理等方 面都有较大 的优势 。 因此 ,我们利用 V + 6 提供 的通 讯控件 MS o C +. 0 C mm, MF 以 C来 设计界面编制程序,实现 与 L C 2 0的通 讯系UN - a . EN n d ng Sih i W Ya g- o ’
( c o lo e ti n i e rn n tm ain S h o fElcrc E gn e ig a d Au o to ,
Hee ie s y o c n lg ,Hee 30 9 fiUnv ri fTe h oo y t fi2 O o )
基于VC++ 6.0的串口通信实验报告
网络与通信实验报告题目:串口通行实验班级:0309103学号:*********姓名:***指导老师:付大丰日期:2012-10-21一、实验要求把两台计算机的串口通过串口线连在一起,通过串口实现两台计算机通讯。
可以利用高级语言、C语言编程实现,要求程序界面友好,有发送和接收功能,其接收和发送内容可在屏幕上显示。
二、实验原理串口通讯把数据的字节分解成单个的二进制比特流依次传输,其结构简单,连接线少,应用非常广泛。
实现串口通信的方法很多。
如:利用标准通信函数实现串口通信、利用API实现串口通信和利用ActiveX控件实现。
本文主要采用ActiveX控件Microsoft CommunicationsControl(MSComm)编程,Windows平台先进的ActiveX技术使得对串口编程不再需要处理烦琐的细节。
利用已有的AxtiveX控件,只需要编写少量的代码,就可以轻松高效地完成任务。
以下对ActiveX控件属性进行简单介绍,在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_comm),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性,这里只介绍其中几个常用属性:CommPort:设置并回通讯端口号,缺省为COMl。
Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen:设置并返回通讯端口的状态,也可以打开和关闭端口。
Input:从接收缓冲区返回和删除字符。
Output:向发送缓冲区写一个字符串。
InputLen:设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲区中的全部内容。
InBufferCount:返回接收缓冲区中已接收到的字符数,将其置0可以清除接收缓冲区。
InputMode:定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。
RThreshold和SThreshold:表示在OnComm事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。
用VC6。0实现串行通讯的三种方法
摘要:本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。
在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。
依据不同的条件实现对串口的灵活编程控制是我们所需要的。
在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。
串行通信程序开发环境为 VC++ 6.0。
Windows下串行通信与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。
串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。
与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTAT,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。
以下将结合实例,给出实现串行通信的三种方法。
实现串行通信的三种方法方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。
此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。
VC60串口通信编程基础及缓冲器电源程序解析(精华)
VC++6.0串口通信编程基础及缓冲器电源程序解析目录一、概述 (3)二、开发平台 (3)2.1硬件平台 (3)2.2软件平台 (3)2.3源码 (3)三、用MFC创建一个空对话框程序 (4)四、关联变量介绍及实例 (9)五、串口通信编程的简单实现 (13)5.1界面及相关控件创建 (13)5.2数据接收和发送编程 (19)5.3程序测试 (21)六、缓冲器电源上位机程序简析 (23)6.1界面初始化编程 (24)6.2串口编程(采用C SERIAL P ORT类编写) (25)6.3上下位机通讯帧格式 (28)6.4控制按钮编程 (29)一、概述本文介绍了一种在VC++6.0中实现简单串口通信编程的方案,并在此基础上对实验室的旧版缓冲器电源上位机程序进行分析。
阅读本文之前最好已经了解C++及MFC的一些基础知识:类与对象的关系及各自定义、构造函数与析构函数、MFC常用类的分类、MFC消息定义、消息映射机制等。
C++编程已经有很多年了,而且不是纯粹的面向对象编程,有很多不完美的地方。
推荐使用C#编程,在这方面实验室已经有很好的基础。
本文简单介绍面向对向编程的一些初级知识。
二、开发平台2.1 硬件平台2.2 软件平台2.3 源码三、用MFC创建一个空对话框程序步骤一. 打开VC++6.0软件,在菜单栏选择【文件】—【新建】步骤二. 在弹出的【新建】对话框中单击【工程】选项卡,在该列表框列出的应用程序类型中选择【MFC AppWizard(exe)】选项接着输入工程名称并选择保存路径。
步骤三. 单击确定之后打开如下所示对话框,选择步骤四. 单击下一步,打开下面所示对话框,保持默认设置,不做改动步骤五. 单击下一步,继续打开如下对话框,风格只有MFC标准有效,源文件备注指的是产生一个关于源文件描述的文本文件,使用MFC类库的方式有两种:共享dll(动态链接库)和静态链接库,前者是动态调用MFC类库,即不包含在生成的可执行程序中,后者是静态调用MFC类库,即将MFC类一起编译在可执行程序中,方便应用程序移植到别的计算机上运行,这里也保持默认设置。
VC++6.0操作简介及编程规范
VC++6.0操作简介一、 VC++6.0VC++6.0二、 VC++6.0环境的基本操作1. 建立应用程序 操作步骤如下:(1) 关闭 当前工作区:【文件】→【关闭 工作区】 (必要时) (2) 建立工程: 【文件】 →【新建】(出现“新建”对话框)在“新建”对话框中选中“工程”选项卡→选中其中的“Win32 Console Application”项→选择存储“位置”→输入工程名→单击“确定”按钮(出现“Win32Console Application”对话框)在“Win32 Console Application”对话框中选择“An empty project”选项→单击“完成”按钮注意:在操作过程中,如果出现提示性对话框,可根据具体情况按“确定”或“取消”按钮。
至此,一个新的工程已经建立,接下来,可以在该工程中建立文件或(和)将已经存在的文件添加到工程中:在工程中新建文件:【工程】→【添加工程】→【新建】(出现“新建”对话框)在“新建”对话框中选中“文件”选项卡→选中其中的“C++ Source File”或者“C/C++ Header File”项→选择新建的置(目录)→输入文件名→单击“确定”按钮→输入文件内容。
例如,新建的名为M1.cpp的源文件内容如下:向工程中添加文件【工程】→【添加工程】→【Files…】(出现“插入文件到工程”对话框)在“插入文件到工程”对话框中选中要插入的文件→选择文件要插入的工程(插入到)→单击“确定”按钮2.编辑文件操作步骤如下:在“工作区”窗口中选择“FileView”选项卡→展开相应工程的文件分支(工程名files)→双击类要编辑的文件名(此时,相应文件的内容已经显示在编辑窗口中)→对文件进行编辑3.编译、构建与运行应用程序编译源文件:在“工作区”窗口选择“FileView”选项卡→选择要编译的源文件→【编译】→【编译xx】构建可执行文件:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【构建xx.exe】运行应用程序:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【执行xx.exe】4.在工程中新建类(1)新建类:设置活动工程(工作区中有多个工程时需要此步)。
VC++6.0串口
打开VC++6.0,新建基于对话框的工程RS485Comm,在主对话框窗口IDD_RS485COMM_DIALOG上添加两个按钮,ID分别为IDC_SEND和IDC_RECEIVE,标题分别为“发送”和“接收”;添加一个静态文本框IDC_DISP,用于显示串口接收到的内容。
在RS485CommDlg.cpp文件中添加全局变量:HANDLE hCom; //全局变量,串口句柄在RS485CommDlg.cpp文件中的OnInitDialog()函数添加如下代码: // TODO: Add extra initialization herehCom=CreateFile("COM1",//COM1口GENERIC_READ|GENERIC_WRITE, //允许读和写0, //独占方式NULL,OPEN_EXISTING, //打开而不是创建0, //同步方式NULL);if(hCom==(HANDLE)-1){AfxMessageBox("打开COM失败!");return FALSE;}SetupComm(hCom,100,100); //输入缓冲区和输出缓冲区的大小都是1024COMMTIMEOUTS TimeOuts;//设定读超时TimeOuts.ReadIntervalTimeout=MAXDWORD;TimeOuts.ReadTotalTimeoutMultiplier=0;TimeOuts.ReadTotalTimeoutConstant=0;//在读一次输入缓冲区的内容后读操作就立即返回,//而不管是否读入了要求的字符。
//设定写超时TimeOuts.WriteTotalTimeoutMultiplier=100;TimeOuts.WriteTotalTimeoutConstant=500;SetCommTimeouts(hCom,&TimeOuts); //设置超时DCB dcb;GetCommState(hCom,&dcb);dcb.BaudRate=9600; //波特率为9600dcb.ByteSize=8; //每个字节有8位dcb.Parity=NOPARITY; //无奇偶校验位dcb.StopBits=TWOSTOPBITS; //两个停止位SetCommState(hCom,&dcb);PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);分别双击IDC_SEND按钮和IDC_RECEIVE按钮,添加两个按钮的响应函数: void CRS485CommDlg::OnSend(){// TODO: Add your control notification handler code here// 在此需要简单介绍百特公司XMA5000的通讯协议://该仪表RS485通讯采用主机广播方式通讯。
VC++6.0实现串口
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
(3)设置初始化函数OnInitDialog(),添加代码实现对话框串口通信的初始化工作,如下:
BOOLCPc_pcDlg::OnInitDialog()
{…//VC自动生成的代码
// TODO: Add extra initialization here
IsStop = False;
}
else
{
res = WaitForSingleObject(rOverLaped.hEvent,5000);
}
IsStop = False;
m_strReceive+=DataBuffer;
(1)掌握PC与PC串口通信的线路连接方法。
(2)利用VisualC++ API函数和MSComm控件实现PC与PC串口通信的程序设计方法。
6.1.2 PC
本设计用到的硬件和软件清单见表6-1。
表6-1设计用软、硬件
序号
名称
数量
1
PC或IPC
1
2
串口通信线(三线制)
1
3
Visual C++6.0
1
(2)按照弹出的应用向导对话框依次填写,第1步选择基于对话框,其他均采用默认。
(3)单击“完成”,将会弹出一个关于新工程信息的对话框。单击“确定”按钮。这样MFC向导便自动生成了一个名称为pc_pc_api的工程。
2
(1)应用程序中添加了一个对话框资源IDD_PC_PC_API_DIALOG,打开属性对话框,将对话框标题改为“PC与PC串口通信API”。
基于VC++6.0的PC机和单片机串口通信
基于VC++6.0的PC机和单片机串口通信UJ{li『J用技术零零六总第六十七期基于VC++6.0的PC机和单片机串口通信王英杰林怡青彭美春聂~彪广东l业大学机电工程学院广东广I,510090摘要:本文使用VC++6.0提供的串行通信MSComm控件以及WindowsAPI函数实现Pc机和单片机之间的通信详细介绍了实现的方法,给出了应用实例关键词:串口通信:多线程;API函数;单片机ProgramforSerialCommunicationbetweenPCandSingleChipMicr0pr0cess0rbasedonVisualC++6.0 WANGYingjieLINYiqingNIEYibiao GuangdongUniversityofTechnologyGuangdongGuangzhou,510090 Abstract:ThispaperuseaSerialCommunicationControlMSCommandWin dowsAPIfunctionsuppliedbyVisualC++6.0torealizeserialcommunicationbetween PCandsinglechipmicroprocessor.Introducerealizationmethodsdetailedly,provideappli cationexamples.Keywords:serialcommunication;multi-thread;APIfunction;singlechipmi croprocessor.1引言在现代_l业控制中,串口通信的应用越来越广泛.单片机和PC机之间的串口通信在进行数据交换时经常被使用.在串行通信时,要求通信双方都采用一个标准接口,RS.232C接口是单片机利PC机进行通信最常用的一种接口.单片机与PC机进行串口通信最简单的二线制法,即接收数据针脚(RxD)与发送数据针脚(TxD)相连,彼此交叉,信号地(GND)对应相接.但是,串口还不能直接和单片机相连,可以选用MAX232和MAX485进行电平转换.MAX232用于RS.232C标准;MAX485用于RS485标准.RS.232C标准规定在码元畸变小于4%的情况下,传输电缆长度最大约为l5米,最高传输速率为20kbit/s.RS485标准最人传输距离约为1219米,最大传输速率约为l0Mbit/sIlj.为了实现单片机和PC机之间的串口通信,采川VC6.O++来实现编程,VC6.O++是一种功能强大的面向对象的Windows编程开发平台.与以往DOS下串行通信不同,Windows不提倡应用程序直接控制硬件,而是通过Windows系统提供的设备驱动程序来进行数据传递.串口在Win32中是作为文件来处理的,而不是直接对端口进行操作.本文采用MSComm…基金资助:广州市科技计划项目资助课题(项目编号:No.2002Jl—℃o3O1)作者简介::_F英杰(1979一),男,河南驻马店人,硕士究生,究方向主要为汽车电子控制.36U脑用技术二零零六总第六十七期控件,WindowsAP!函数米实现PC机与单片机之间的通信.2使用VC什提供的MSComm控件实现串行通信MicrosoftCommunicationControl(简称MSComm)是Microsoft公司提供的简化Windows下的串行通信编程的ActiveX控件,为应用程序提供了串口接收发送数据的简便方法.MSComm控件通过串行端口传输和接收数据为应用程序提供串行通信功能.MSComm提供了两种处理通信问题的方法:一是事件驱动法,主要是利用OnComm事件捕获并处理这些通信时间,也可以检查和处理通信错误:二是查询法,在这种情况下,每当应用程序执行完一个串口操作后,将查看MSComm控件的CommEvent属性以确定执行结果或者检查某一事件是否发生.2.1,在VC集成开发环境中用MSComm控件进行串口编程的基本步骤:(1)在建立的Workspace中插入MSComm控件:(2)添加MSComm控件的ID的控制变量;(3)对串口进行初始化,设置MSComm控什的属性;(4)添加串口事件的消息处理函数OnComm()l~,在函数中编写数据处理代码;(5)编写串口发送等其它代码;(6)关闭串口.2.2应用举例(1)初始化串口,在OnlnitDialogO函数中添加.mcom.SetCommport(1);//选择COM1m—corn.SetlnBufferSize(1024);//设置输入缓冲区的大小mcorn.SetOutBufferSize(512);//殴置输出缓冲区的大小if(!m—corn.GetPortOpenO)mcom.SetPortopen(TRUE);//打开串口mcom.SetlnPutModel(1);//设置输入方式为二进制方式m—com.SetSettings(“9600,n,8,1”);//设置波特率9600,无校验,8个数据位,1个停I上位m—corn.SetRThreshold(1);每一个字符到接收缓冲触发接收数据的OnComm事件mcorn.SetInputLen(O)://设置当前接收数据长度为0I11corn.GetlnputO;//预读缓冲区以消除残留数据(2)向单片机发送数据UpData(TRuE);UpData(FALSE);charData[21;Data[0]=0x32;Data【1】=OxFF;CByteArrayarray;array.RemoveAll0;array.SetSize(2);for(intI-O;i<2;i ++)array.SetAt(i,Data[i]);m—com.SetOutput(COleV ariant(array));(3)接收单片机发米的数据,径OnComm事件中添加.V ARIANTvarianttrap;COleSafeArraysafearraytmp;LONGlen.k:BYTE rxdata[20];//没置BYTE数组CStringstrtemp;varianttmp=mCorn.GetlnputO;//渎缓冲区safearray_tmp=varianttrap;//VARIANT型变姑转换为ColeSafeArray 型变量len=safearraytmp.Get0neDimsize();//得到有效数据度for(k0;k<len;k++)safearray—trap.GetElement(&k,rxdata+k);//转换为BYTE型数组for(k=0;k<len;k++)//将数组转换为Cstring型变{BYTEbt=(char)(rxdata+k);//字符型strtemp.Format(“%c”,bt);//将字符送入临时变量strtemp存放mReceive+=strtemp;//D,入接收编辑框对应字符串37U甘讧i用技术二零零六总第六l七期ch=bt:)3用WindowsAPI函数实现串口通信住Windows环境.VC++6.0提供了完备的AP!戍川程序函数,通过这些函数与通信便件接口.通信函数是中断驱动的:发送数据时,先将其放入缓冲区,串口准备好后,就将其发送出去;传来的数据迅速申请中断,使Windows接收它并将其存入缓冲区,以供读取.发送过程较易实现,接收处理方式主要有查询和中断两种方式.采用查询方式时,CPU要不断的测试串口是否有数据以防止接收串口数据出现遗漏;而采用中断方式则无需测试串口,一曰.有数据传至.CPU中当前任务,由中断服务程序完成操作.3.1应用Win32API函数进行串口程的一般编程步骤(1)打开串口:CreateFile函数;(2)建立通信事件:CreateEvent函数;(3)初始化串口.设置串口参数:SetCommState函数;(4)建立读数据的线程:(5)写数据:WriteFile函数:(6)结束时关闭端口:若程序中打开了其它线程,则先终止线程.停止WaitCommEvent函数的等待以及关闭端口CloseHandle函数.3.2应用举例主要介绍一下在API串口通信中如何结合异步通信,多线程等手段,编写出高质量的通信程序.下面为上位机通信程序部分代码.(1)取得通讯端口的资源HANDLEhCom;hCom=CreateFile(“COM2”,//文件名GENERICREADIGENERICWRITE,//允许读写O,//独占方式NULL.OPENEXlsTlNG.//打开而不是创建FILEFLAGOvERLAPPED.//异步方式NULL);ASSERT(hCom!=INV ALID检测打开串口操作是否成功. HANDLEVALUE);//SetCommMask(hCom,EV—RXCHARlEVTXEMPTY);//设置事件驱动的类型SetupComm(hCom,1024,512);//设置输入,输出缓冲区的大小PurgeComm(hCom,PURGETXABORTlPURGE_R_XABORTlPURGE _TXCLEARlPURGERXCLEAR);//消干净输入,输出缓冲区COMMTIMEOUTSCommTimeOuts://定义超时结构,并填写该结构setCommTimeouts(hCom,&CommTimeOuts);//设置读写操作所允许的超时(2)通讯参数的设定DCBdeb;//定义DCB结构If(!Getcommstate(hCom,&dcb))//取得串El配置并填充~UDCB 结构ReturnFALSE;38腑心用技术_二零零六总第六十七期dcb.BaudRate=96o0://设置波特率为9600dcb.ByteSize=8;//设置每字节位数为8位dcb.ParityNOPARITYdcb.StopBits;ONESTOPBIT;//设置一个停止位dcb.tBinary=TRUE:dcb.tParityFALSE:SetCommState(hCom,&dcb);//重新配置串口,使配置有效(3)启动一个辅助线程,用于串口事件的处理.Windows提供了两种线程.辅助线程和用户界面线.区别在于:辅助线程没有窗口,所以它没有白己的消息循环.但是辅助线程很容易编程,通常也很有刚.在此,我们使用辅助线程.主要用它米监视串口状态,看有无数据到达,通信有无错误;而主线程则可专心进行数据处理,提供友好的用户界面等重要的工作. hCommWatchThread=CreateThread((LPSECURITY—丌RIBUTES)NULL,//安全属性0,//初始化线程栈的大小,缺省为与主线程大小相同(LPFHREADSTARTROUTINE)CommWatchProc,//线程的全局函数GetSafeHwnd0,//此处传入了主框架的旬柄0,&dwThreadtD);ASSERT(hCommWatchThread!=NULL);(4)数据处理为辅助线程弓一个全局函数,主要完成数据接收的_』二作. UINTCommWatchProc(HWNDhSendWnd){DWORDdwEvtMask=0;SetCommMask(hCom.EVRXCHARIEVTXEMPTY)://有哪些串口事件需要监视?WaitCommEvent(hCom,&dwEvtMask,OS);//等待串口通信事件的发生,检测返回的dwEvtMask,知道发生了什么串口事件:if((dwEvtMask&EV—RXCHAR)=EVRXCHAR)f//缓冲区中有数据到达COMSTA TComStat:DWORDdwLength;ClearCommError(hCom,&dwErrorFlags,&ComStat); dwLength=ComStat.cblnQue://输入缓冲区有多少数据?if(dwLength>O){BOOLtReadStat;fReadStat=ReadFile(hCom,IpBuffer,dwLength,&dwBytesRead;&READOS(npTTYInfo));//读数据if(!fReadStat){if(GetLastError0=ERROR—IO—PENDING){while(!GetOVerlappedResuIt(hCom,&READ_OS(npTTYlnfo),&dwBytesRead,TRUE)){dwError=GetLastError();if(dwError==ERROR—IO—INCOMPLETE)continue;39I肭用技术零零六总笫六_卜七期//缓冲数据没有读完,继续::PostMessage((HWND)hSendWnd,WM_NOTIFYPROCESS,0,O);//通知主线程,串口收到数据}?(5)在主线程中发送F行命令BOOLfWriteStat;charszBuffer[count];…………//准备好发送的数据,放在szBuffer[]q~fWriteStat=WriteFile(hCom,szBuffer,dwBytesToWrite,&dwBytesWritten,&WRITE_OS(npTTYlnfo));//写数据interr=GetLastError0;if(1fWriteStat)(if(GetLastError0==ERROR—IO—PENDING){while(!GetOverlappedResult(hCom,&WRITEOS(npTTYlnfo),&dwB~esWriRen,TRUE)){dwErrorGetLastError0;iffdwE~om=ERROR_IO—INCOMPLETE){dwBytesSent+=dwBytesWritten;continue;)本文使用了多线程技术,在辅助线程中监视串口,有数据到达时依靠事件驱动,读入数据并向土线程报告:并且,WaitCommEvent0,ReadFile(),WriteFile()都使用了异步通信技术,依靠重叠(overlapped)读写操作,让串口读写操作在后台运行. 4单片机通信程序设计下位机采用MCS.5l系列的805l单机.下位机的串行通信程序设计可以采用查询法或中断法来进行数据的收发.无论采用什么方法,其串行数据的发送只要简单地从累加器向串口缓冲寄存器传送数据即可(使用MOVSBUF,A指令);其串行数据的接收只要从串口缓冲寄存器向累加器传送数据即可(使用M0V A,SBUF~‟令).实际应用中,单片机通信程序一般采用中断方式与PC机进行通信,PC机作为主控方.当单片机收~-UPC机发送来的地址信号时,便转入相应的中断服务子程序,$1JPC机进行通信.其接收中断服务予程序流程如图所示,该中断服务子程序也适用于多机通信的系统..发送中断服务子程序同理,不再赘述.5结束语本文主要介耋f{TPC机与单片机之间的串行通信技术.重点介绍了怎样使用MSComm控件平IIWin32API函数实现串行通信.MSComm~较简单只用于较简单的系统,Win32API函数应用较广但比较复杂繁琐,但使用灵活,功能也强大很多.参考文献[1]曾自强,lj.用VC++实现单片机与PC机串口通信的三种方法[J]自动化与仪器仪表,2005年第3期,[2]龚建伟.VisualC++/Turboc串LI通信编程实践[M]北京:电了T.业版社.2004.[3]lffI贵波,乔爽.PC机与单)-t~Lm行通信的实现方法探讨[J],交通科技与经济,2005年第3期.。
VC6.0MFC串口通信编写全过程(推荐文档)
其于MFC 的串口调试助手编辑过程一、新建打开VC6.0 文件 新建 工程 MFC AppWiard(exe)位置(选择保存工程位置) 工程名称(输入工程名XXXX )确定 选择基本对话框 下一步 下一步 下一步 选择(CXXXXDlg ) 完成 确定 在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消” 及提示框)删除或修改使用,至此基本框架完成如下图:二、往生成的基本框架中添加控件1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下:菜单栏 工程 添加到工程 Components and controls … Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0” Insert 确定 OK 关闭此子窗口完成添加操作标志如上图所示。
2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示:这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。
4、对以上四个控件编程步骤如下:a 、右击串口通信控件 建立类向导Member variables Control IDS 中选择IDC_MSCOMM1 add variable … Member variable name 中输入控件变量名m_ctrlComm (变量名可以随意选取,但程序中应与所取变量名一致) OK 确定b、右击编辑框、属性、常规、ID:中输入ID号,此编辑框用于接收显示数据的其ID 号为IDC_EDIT_RXDATA(可以随意选取,但程序中应与所取ID号一致),再在此窗口的样式中勾选”多行”,同时将“自动水平滚动(T)”勾选去掉,再勾选“垂直滚动(V)”,此勾选操作是用于垂直多行显示的,按回车后即可输入;同理右击另一编辑框输入ID号为IDC_EDIT_TXDATA此编辑框用于编辑发送数据的,同样也选上用于垂直多行显示,发送框可以不用垂直多行显示;再为按钮控件添加ID号,为IDC_BUTTON_MANUALSEND,并将标题中的“Button1”改为“发送”,功能是按一次就把发送编辑框中的内容发送一次。
VC6.0串口编程例程
引言在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。
我们可以通过设备管理器来查看COM的硬件参数设置,如图1。
图1 在Windows上查看PC串口设置迄今为止,几乎每一台PC都包含COM。
本质而言,COM是PC为和外界通信所提供的一种串行数据传输的接口。
作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。
不过RS-232C显然已经开始被后起之秀USB赶超,因为USB的传输速率已经远远超过了RS-232C。
尽管如此,RS-232C仍然具有非常广泛的应用,在相对长的一段时间里,难以被USB等接口取代。
RS-232C接口(又称EIA RS-232C),1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"。
本文将对这一接口进行硬件原理的介绍,随后我们将逐章学习DOS平台的串口编程,及Windows平台下基于API、控件和第三方类的串口编程,最后本文将给出一个综合实例。
在本文的连载过程中,您可以通过如下方式联系作者(热忱欢迎读者朋友对本文的内容提出质疑或给出修改意见):作者email:21cnbao@(可以来信提问,笔者将力求予以回信解答,并摘取其中的典型问题,在本系列文章最后一次连载的《读者反馈》中予以阐述);硬件原理众所周知,CPU与存储芯片和I/O芯片的通信是并行的(并行传输的最大位数依赖于CPU的字长、数据总线的宽度),一种叫做UART(通用异步收发器,Universal Asynchronous Receiver/Transmitter)的芯片提供了并行数据传输和RS-232C串行数据传输方式的转换。
这样的设备通常有如图2所示的管脚分布,当其向外传输数据时,CPU并行的将数据写入这类芯片的寄存器,UART再将寄存器中的数据一位一位地移动并向外传输;当外界向其传输数据时,UART一位一位地接收数据,并将其移位组合为并行数据,CPU再并行地读取这些数据。
在VC6.0中用通讯控件开发串行通信程序
在VC6.0中用通讯控件开发串行通信程序
黎文安;何斌;文康珍
【期刊名称】《机电工程技术》
【年(卷),期】2003(032)006
【摘要】详细介绍了Visual C++中通信控件的属性、事件和方法,并结合实例详细介绍了在Visual C++6.0中利用通信控件开发Windows环境下串行通信程序的方法,文中给出了关键的程序代码.
【总页数】2页(P51-52)
【作者】黎文安;何斌;文康珍
【作者单位】武汉大学电气工程学院,湖北,武汉,430072;武汉大学电气工程学院,湖北,武汉,430072;武汉大学电气工程学院,湖北,武汉,430072
【正文语种】中文
【中图分类】TP311.52
【相关文献】
1.VC++中用通讯控件开发串行通信程序 [J], 樊菁
2.VC++中用通讯控件开发串行通信程序 [J], 曾明
3.VC6.0下应用MSComm控件实现RS485串行通讯 [J], 李庆华;姜会文;邱书波
4.Delphi编程中用MSComm控件实现串行通讯 [J], 张立材
5.VC中基于MSCOMM控件串行通信程序的开发 [J], 陈进; 王伯营
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC++6.0串口通信编程基础及缓冲器电源程序解析目录一、概述 (3)二、开发平台 (3)2.1硬件平台 (3)2.2软件平台 (3)2.3源码 (3)三、用MFC创建一个空对话框程序 (4)四、关联变量介绍及实例 (9)五、串口通信编程的简单实现 (13)5.1界面及相关控件创建 (13)5.2数据接收和发送编程 (19)5.3程序测试 (21)六、缓冲器电源上位机程序简析 (23)6.1界面初始化编程 (24)6.2串口编程(采用C SERIAL P ORT类编写) (25)6.3上下位机通讯帧格式 (28)6.4控制按钮编程 (29)一、概述本文介绍了一种在VC++6.0中实现简单串口通信编程的方案,并在此基础上对实验室的旧版缓冲器电源上位机程序进行分析。
阅读本文之前最好已经了解C++及MFC的一些基础知识:类与对象的关系及各自定义、构造函数与析构函数、MFC常用类的分类、MFC消息定义、消息映射机制等。
C++编程已经有很多年了,而且不是纯粹的面向对象编程,有很多不完美的地方。
推荐使用C#编程,在这方面实验室已经有很好的基础。
本文简单介绍面向对向编程的一些初级知识。
二、开发平台2.1 硬件平台2.2 软件平台2.3 源码三、用MFC创建一个空对话框程序步骤一. 打开VC++6.0软件,在菜单栏选择【文件】—【新建】步骤二. 在弹出的【新建】对话框中单击【工程】选项卡,在该列表框列出的应用程序类型中选择【MFC AppWizard(exe)】选项接着输入工程名称并选择保存路径。
步骤三. 单击确定之后打开如下所示对话框,选择步骤四. 单击下一步,打开下面所示对话框,保持默认设置,不做改动步骤五. 单击下一步,继续打开如下对话框,风格只有MFC标准有效,源文件备注指的是产生一个关于源文件描述的文本文件,使用MFC类库的方式有两种:共享dll(动态链接库)和静态链接库,前者是动态调用MFC类库,即不包含在生成的可执行程序中,后者是静态调用MFC类库,即将MFC类一起编译在可执行程序中,方便应用程序移植到别的计算机上运行,这里也保持默认设置。
步骤六. 单击下一步,得到下图所示对话框,单击完成按钮则就完成了一个对话框应用程序的创建。
步骤七. 新建立的对话框程序,打开工作区的【ClassView】选项卡,得到下图表示类,粉红色小方块表示类的成员函数,绿色小方块表示成员变量,黄色钥匙表示保护类型(protected)的成员变量或成员函数,该工程中没有私有类型的成员,私有类型成员是在前面加一把锁标明。
步骤八. 打开工作区的【FileView】选项卡,得到下图,工作区是工程文件目录步骤九.打开工作区的【ResourceView 】选项卡,双击Dialog 中的IDD_MYDIALOG_DIALOG ,即可打开对话框编辑窗体。
步骤十. 标准控件工具栏,各控件功能请参考有关资料自带的串口通信控件MSComm 并不在工具栏里,需要自行添加,添加路径: 菜单栏【工程】——【增加到工程】——【Components and Controls Gallery 】,选择Registered ActiveX Controls 文件夹中的然后添加即可。
静态文本框 动态编辑框按钮MFC 自带的串口通信控件四、关联变量介绍及实例关联变量是C++/MFC 编程中一个重要概念,是进行数据交换的重要途径。
下面举一实例来说明关联变量。
创建一个新的MFC 对话框工程(定名为sample ),然后添加2个编辑框和一个按钮(窗体自带控件已删除),如下图: 注:在控件上右击选择【属性】,可以修改控件的名称及参数。
在对话框窗体上添加2个静态文本框IDC_EDIT1和IDC_EDIT2以及一个按钮IDC_BUTTON2。
要实现的功能:IDC_EDIT1为输入框,IDC_EDIT2为输出显示框,在输入框中输入一个整数,点击按钮实现×2,在输出框中得到输入值 2倍。
步骤一. 在编辑界面上右击鼠标,选择【建立类向导】,进入MFC ClassWizard 窗口,单击【Message Maps 】选项卡进入消息添加页面。
单击IDC_EDIT1 IDC_BUTTON2IDC_EDIT2步骤二.单击【Member Variables】选项卡,进入添加变量页面,如下图,分别为输入框和输出框添加一个int型的关联变量m_a和m_b。
注:每个控件可添加多个变量,变量类型可选。
添加方法:选择左图大方框内要添加变量的控件对象,然后单击Add Member Variable按钮,弹出右图,填入要添加变量的名字,选择类型,单击OK,然后在左图大方框内的相应控件上就会显示出来。
这些变量添加后在代码文件中就会体现,在主代码文件sampleDlg.cpp中:控件的数据交换,在本例中体现为关联变量,其代码在虚函数DoDataExchange 中。
如上所述在MFC ClassWizard中添加的关联变量都可以在DoDataExchange 中找到对应代码。
步骤三. 为按钮控件添加消息及消息响应函数。
首先介绍常用标准消息的添加方法,如下,进入MFC ClassWizard窗口,单击【Message Maps】选项卡进入消息添加页面。
如图给按钮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 类由Remon Spekreijse 编写,使用时需下载源程序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型这两个地方务必选上此处选择“下移”或“下拉列表”按住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 类,即添加#include "SerialPort.h"。
其次,在类class CSCPortTestDlg : public CDialog 中声明SerialPort 类的对象和一个状态变量。
本例中为:CSerialPort m_SerialPort BOOL m_bSerialPortOpened步骤三. 初始化界面及控件显示:在SCPortTestDlg.cpp 文件的BOOL CSCPortTestDlg::OnInitDialog()函数中添加代码:m_ctrlComboComPort 为组合框控件IDC_COMBO_COMPORT 关联的变量 GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow();的用法请参考有关资料程序初始运行显示COM1 串口还未打开,【打开串口】按钮可用,【关闭串口】按钮不可用步骤四.【打开串口】和【关闭串口】按钮功能的实现为添加单击消息,消息响应函数OnButtonOpen(),代码如下:为添加单击消息,消息响应函数OnButtonClose(),代码如下:5.2数据接收和发送编程功能:将接收到的数据放到编辑框IDC_EDIT_RECEIVEMSG显示点击【发送】按钮,将编辑框IDC_EDIT_SENDMSG的数据发送出去步骤一.窗口接收到串口数据的消息及其消息响应函数首先,窗口接收到串口数据消息为WM_COMM_RXCHAR,是在SerialPort.h中已经定义好的。
其次,命名与之对应的消息处理函数为OnComm,在SCPortTestDlg.h中声明最后,将消息WM_COMM_RXCHAR和处理函数OnComm映射到一起,在文件SCPortTestDlg.cpp中添加映射代码,如下:关于消息及消息响应函数的定义,映射机制的建立,请参考有关资料步骤二. 消息处理函数OnComm的实现,代码如下步骤三. 数据发送的实现,为按钮【发送】添加单击消息,响应函数如下:步骤四. 为按钮【退出】添加单击消息,响应函数如下:5.3程序测试经过上面步骤,程序设计完毕,编译运行。