基于VC_6_0的串口通信程序设计

合集下载

基于VC6.0MFC的简单串口通信软件编程

基于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实现串口

VC++6.0实现串口
if (!SetCommMask(hCom,EV_RXCHAR | EV_TXEMPTY))
{
MessageBox("掩码设置失败.","提示");
return;
}
DWORD param;
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunction,&param,0,&dwThreadID);
6.1.4 PC
利用Visual C++ API函数和MSComm控件编写程序实现PC与PC串口通信。
(1)两台计算机互发字符并自动接收,如一台计算机输入字符串“Please returnabc123”,执行“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,执行“发送字符”命令,信息返回到第一组的计算机。实际上就是编写一个简单的双机聊天程序。
{
MessageBox("端口打开失败.");
return;
}
SetupComm(hCom,1024,1024); //设置发送和接收缓冲区大小
//设置串口信息
DCB b;
GetCommState(hCom,&dcb);
dcb.BaudRate = 9600;
dcb.fBinary = True;
rOverLaped.hEvent = CreateEvent(NULL,True,False,NULL);//创建一个事件对象
if (ReadFile(hCom,DataBuffer,rst.cbInQue,&factbyte,&rOverLaped))
//读取数据到缓冲区中

基于VC_6_0的PC机和单片机的接口设计

基于VC_6_0的PC机和单片机的接口设计

开发研究与设计技术本栏目责任编辑:谢媛媛1引言在工业控制检测领域中,经常要组成上位机为微机而下位机为单片机的二级系统,单片机用于数据采集,上位机主要用于数据的集中处理,实现PC机与单片机通信技术成为整个测控系统中的一个关键。

本文主要探讨PC机与单片机的接口设计。

串行口是计算机与外部设备进行数据交换的重要介质,所以串行通信在工程实现中有着广泛的应用。

PC机与单片机的通信,一般采用串行通信,可以采用RS-232,RS-422或B3-485总线标准接口,也可采用非标准的2mA电流环。

Microsoft公司的VC++6.0功能强大,其基础类库(MFC)封装了Win32API中的标准通信函数,可方便地支持串口通信。

在Windows操作系统中,用VC++开发上位机的监控软件,具有控制界面简洁大方,应用程序短小精悍等优点。

在VC++中实现数据的串行通讯,可以使用WindowsAPI函数编写,也可以使用VC++自带的Mi-crosoftCommunicationsControl控件(即MSComm控件)编写。

2Windows通信APIWindowsAPI即应用程序编程接口,它由函数、消息、数据结构、数据类型以及语句组成,可使用于创建在Windows环境下运行的应用程序中。

WindowsAPI函数作为动态链接库(DLL)提供给用户,可以在任何语言中调用。

在Windows95以上串口通信中API函数采用硬件与文件通用的函数Create-File,ReadFile,WriteFile,CloseHandle,该类函数更具有一般性,并且可以用Es-capeCommFunction函数实现底层硬件操作。

利用API编写串口通信程序较为复杂,需要大量通信知识,其优点是可实现的功能丰富、应用面广,适合于编写较为复杂的低层次通信程序。

采用此方法的编程过程一般可分为以下几步:(1)初始化串行端口。

首先用CreateFile函数打开指定串口,置参数中访问类型为GENERICREAD|GENERIC-WRITE、共享模式为0、创建标志为OPEN-EXISTING、模板句柄为NULL。

基于VC_6_0的多串口通信方法_王中训

基于VC_6_0的多串口通信方法_王中训
1 系统结构
该多路串行通信系统由上位机和下位机构成 ,如图 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

基于VC++6.0的多串口通信方法

基于VC++6.0的多串口通信方法

基于VC++6.0的多串口通信方法
王中训;徐超;王德法
【期刊名称】《计算机应用》
【年(卷),期】2008(028)B06
【摘要】介绍了实现多串口通信的基本方法,采用VC++6.0并结合定时器和多线程技术编写,提出了实现多串口通信的三种方法,给出了实现的方法和步骤,并对三种方法进行了比较。

实践证明,这三种模型均有效地实现了多串口通信。

【总页数】3页(P254-256)
【作者】王中训;徐超;王德法
【作者单位】烟台大学光电信息科学技术学院,山东烟台264005;鲁东大学物理实验中心,山东烟台264000
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于MOXA多串口卡的多串口通信的实现 [J], 柯伯乐;池红;汤天浩
2.用VC++6.0编程实现航海导航的多串口通信 [J], 李宣敏
3.基于MOXA多串口卡的多串口通讯的实现 [J], 柯伯乐;池江;汤天浩
4.基于Moxa多串口卡的多串口通信的VC++实现 [J], 赵素娟
5.基于VC++
6.0的多串口通信方法 [J], 王中训;徐超;王德法
因版权原因,仅展示原文概要,查看原文内容请购买。

基于VisualC_6_0的PC机和AT89C51的串行通讯

基于VisualC_6_0的PC机和AT89C51的串行通讯

网络通讯与安全电脑知识与技术电脑知识与技术1引言我们开发的超声—电火花—磨削多功能符合加工机床是利用PC机、PMAC运动控制卡、电火花脉冲电源和超声波发生器组成的多CPU控制系统。

为了实现通过人机交互界面对电火花脉冲电源和超声波发生器进行参数设置,对它们的工作状态进行监视并根据它们的工作状态实现利用PMAC控制卡对运动的控制,使它们之间进行信息的交换。

考虑到串行通讯简单易行和可靠性,我们采用串行通讯进行信息的交换和控制命令的发送。

为了使它们之间的通讯相互协调,我们定义了相互间的通讯协议,包括波特率、数据位数、停止位的个数以及奇偶校验方法和数据格式等。

2相关的API串行通讯的函数和概念2.1打开关闭串口在Windows操作系统中,不允许用户直接对硬件操作,而是把串口和其他通信设备是作为文件进行处理,串口的打开、关闭、读取和写入所用的函数和操作文件的函数完全一致。

2.1.1打开串口CreateFile()函数为读访问或写访问打开串口,打开成功后返回该串口句柄,供读写串口时使用。

HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDe-siredAccess,DWORDfdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDfdwCreation,DWORDfdwAttrsAnd-Flags,HANDLEhTemplateFile);参数lpFileName是要打开文件的逻辑名,串口使用如COM1或COM2;参数dwDesiredAccess指定访问类型,串口通信是双向的,一般设置为:GENERICREAD|GENERICWRITE;参数fdwShare-Mode指定文件共享属性,设为0,不共享;参数lpSecurityAttributes引用安全性属性结构,设为缺省值NULL;参数fdwCreation指定如果CreateFile正被已有的文件调用时应采取的动作,此参数就必须被设置为OPENEXISTING;参数fdwAttrsAndFlags描述了该端口的各种属性,对串口而言设置为FILE_FLAG_OVERLAPPED,该标志表明串口采用异步通信模式,可进行重叠操作,端口I/O可以在后台进行,若值为NULL,则为同步通信方式,在同步方式下,应用程序将始终控制程序流,直到程序结束;参数hTemplateFile是指向模板文件的句柄,当打开串口时,该参数为NULL。

基于VC++ 6.0的串口通信实验报告

基于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实现串行通讯的三种方法

用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串口通信编程基础及缓冲器电源程序解析(精华)

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的PC机和单片机的接口设计与实现

基于VC_6_0的PC机和单片机的接口设计与实现

第13卷第3期 2005年6月安徽建筑工业学院学报(自然科学版)Journal of Anhui I nstitute of A rchitecture &I ndustryVol .13No .3 Jun .2005 收稿日期:2005203224作者简介:张晶晶(1974-),女,博士生,主要研究方向为遥感图像信息处理。

基于VC ++6.0的PC 机和单片机的接口设计与实现张晶晶(安徽大学电子科学与技术学院,合肥 230039)摘 要:基于32位W indows 操作系统的PC 机和单片机间的串行通信是一种常见的通信方式。

本文利用VC++6.0编写串行通信程序的函数,并实现了串行口通信。

关键词:串行通信;单片机;W indows;AP I 接口;数据采集中图分类号:TP241 文献标识码:A 文章编号:100624540(2005)032094203I m ple m en t desi gn of i n terface i n persona l com puter andsi n gle ch i p m i cyoco w ith VC ++6.0Z HANG J ing -jing(School of Electr onic Science and Technol ogy,Anhui University,Hefei,230039,China )Abstract:serial communicati on of pers onal computer and single chi p m icyoco based on operating syste m of 32bit is a kind of fa m iliar corres ponding mode .This paper writes the functi on on p r ogra m of serial communicati on with VC ++6.0,i m p le ments the functi on of serial interface .Key words:Serial communicati on;Single chi p m icyoco;W indows AP I interface;Data collecti on 数据采集在工业测试和实验室研究方面应用广泛,随着科学技术的发展,数据采集技术被普遍认为是现代科学研究和技术发展的重要方面。

基于VC++ 6.0的高速串口通信数据采集系统

基于VC++ 6.0的高速串口通信数据采集系统

基于VC++ 6.0的高速串口通信数据采集系统1 引言串行通讯是计算机与其他设备进行数据交换时经常使用的方法之一,他具有实现简单,使用灵活方便,数据传输可靠等优点,因而在工业监控、数据采集和实时监控系统中得到广泛应用.高速串口数据采集软件的设计不同于普通串口通信,其要求在接收数据采集设备发送大量数据的同时完成对已接受到数据的实时存储,如果处理不好二者之间的关系,会造成数据的缺失甚至程序的崩溃.这就要求应用程序能够同时处理两件以上不同的任务.Win32是基于线程的抢先式多任务操作系统,使得应用程序能够同时执行多个任务,即在一个进程中可以同时运行多个线程.一个线程是指程序的一条执行路径,系统不停的在多个线程之间切换.由于时间很短,看上去多个线程在同时运行.对于通讯这种需要花费大量时间来测试I/O操作,同时又要保持响应用户其它操作的应用程序来说,创建多线程是最佳选择.2 系统结构系统的组成结构如图1所示.中央控制PC机是系统的核心,要求数据采集软件具有良好的稳定性和兼容性.所以独立设计了一套基于Visual C++ 6.0的多线程通讯软件,它与前端的扫描仪串口通信是典型的主从式,在硬件上通过MOXA公司的串口卡实现500K波特的采集速率.图1 数据采集系统结构3 用MSComm控件实现高速串口数据采集的问题MSComm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API函数,只需要在串口通信资源的属性(Properties)一项中配置串口,串口通信的波特率、数据位数、停止位数、奇偶校验、发送缓冲区大小、接收缓冲区大小以及超时设置等均在此时进行配置.完成串口配置之后即可打开串口,进行数据读写.对于一般数据交换及串口通信来说,MSComm控件完全能够满足要求.但由于控件本身对于接收缓冲区大小设置的限定,为高速数据采集软件的设计带来了麻烦.如果接收缓冲区不能满足设计的要求,当缓冲区内数据达到消息响应值并响应存储命令时,而新采集的数据传输速度大于已接收到数据的存储速度,就会造成接收缓冲区的溢出,直接导致系统的崩溃.这一点在程序设计初期深有体会.在程序设计时也尝试当缓冲区达到阈值响应消息时,在消息响应中启动一个新的线程,先将缓冲区中接收到的数据取出到新开辟的内存单元中,再进行数据存储.程序可以运行,但出现了新的问题,即有的数据帧中的数据发生丢失.分析产生这种数据丢失的原因,还是由于控件本身对于接收缓冲区大小设置的限定.4 程序设计创新4.1多线程程序设计思想在32位Windows系统中,术语多任务是指系统可以同时运行多个进程,而每个进程也可以同时执行多个线程.进程就是应用程序的运行实例.每个进程都有自己私有的虚拟地址空间,每个进程都有一个主线程,但可以建立另外的线程.进程中的线程是并行执行的,每个线程占用CPU的时间由系统来划分.可以把线程看作是操作系统分配CPU时间的基本实体,系统不停的在各个线程之间切换,它对线程的中断是汇编语言级的.系统为每一个线程分配一个CPU时间段,某个线程只有在分配的时间段内才有对CPU的控制权.进程中所有的线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源.这一方面为编程带来了方便,但另一方面也容易造成冲突.虽然在进程中进行费时的工作不会导致系统的挂起,但会导致进程本身的挂起.所以,如果进程即要进行长期工作,又要响应用户的输入,那么它可以启动一个线程来专门负责费时的工作,而主线程仍然可以与用户进行交互.由此可见,利用Win32的重叠I/O操作和多线程特性,可以编出高效的通信程序.高速串口数据采集软件的特点是接收数据的速度要求很高,接收数据量很大,而控制扫描仪发送的命令字数据量很小.根据这些特性,可以在程序中创建一个辅助工作者线程专门来监视串行口的输入.由于写串口的数据量不大,不会太费时,所以在主线程中完成写端口的任务是可以的,不必另外创建线程.4. 2多线程程序设计①数据采集程序流程根据多线程程序的开发思想,该数据采集软件由负责人机交互的多线程和对串口进行处理的后台辅助线程组成.主线程是数据采集程序的管理者,用来初始化串口(通过调用Win32 API函数),自定义通信事件消息,创建、删除辅助线程,进行人机交互的操作及协调好各线程的运行.程序流程如图2所示.图2 数据采集程序框图②后台辅助线程分析后台辅助线程是数据采集软件的核心,包括串口监视线程,读线程。

VC_6_0环境下GPS接收机串口通信的实现

VC_6_0环境下GPS接收机串口通信的实现

文章编号:100723817(2002)0520023202中图分类号:P228.4 文献标识码:B V C++6.0环境下GPS接收机串口通信的实现李淑慧(武汉大学测绘学院,武汉市珞喻路129号,430079)摘 要 首先简单介绍了GPS接收机串口通信的基本概念,然后通过实例详细介绍了计算机与GPS接收机进行数据传输的两种方法:一种是使用W in32A P I通信函数的文件读写方式;另一种是通过V C++6.0提供的M SComm控件实现。

关键词 GPS;串口通信;W in32A P I函数;M SComm控件 开发GPS数据处理软件,首先要解决计算机和GPS接收机的串口通信。

在GPS接收机和计算机的数据传输过程中,计算机的串行端口作为CPU和串行设备间的编码转换器,提供了计算机与GPS接收机之间的数据传输通道。

作为数据终端设备,GPS接收机采用异步串行方式利用D型R S2 232C串行二进制数据交换电缆接口将采集到的数据通过串行端口传输给计算机[1]。

V isual C++封装了W indow s A P I函数,使得W indow s 应用程序的开发变得简单易学。

利用V C++6.0开发W indow s32位环境下计算机和GPS接收机的串口通信程序,可以直接利用W indow s A P I的通信函数,另外还可以利用V C提供的M SComm控件(即M icro soft Comm unicati on Contro l)。

1 W in32A P I串行通信的文件读写方式在W in32中,所有的设备都被看成是文件。

串口通信可以像访问普通文件那样通过A P I通信函数来实现,系统的虚拟驱动程序负责执行特定的工作[2]。

通过程序实例,可以具体实现GPS接收机的串口通信。

这个例子是按照事件驱动的方式进行读写的,同时利用了多线程,将串口的读写放在一个用户自定义的线程中完成。

在开始进行数据采集的时候打开这个有关串口通信的线程,然后串口的创建、设置、读写都在这个线程中进行。

基于VC++6.0串口通信开发方法

基于VC++6.0串口通信开发方法

摘要]:Windows是当前应用程序开发的主流平台,VC++6.0是该平台强大的开发工具,使用windowsAPI开发串口通信的程序可使我们更加清晰的了解串口通信的机制,并且开发人员可以根据需要使用API进行灵活的程序设计,在SCADA中串行通信是必不可少的技术,所以掌握串行通信的开发方法具有现实意义。

[关键词]:世纪长秋世纪星组态软件SCADA 触摸屏人机界面1 引言在当今的工业控制领域,串口通信是计算机与其他设备进行数据通信时经常使用的方法,具有实现简单、使用灵活、数据传输可靠等几个优点,特别是在实时监控系统中得到广泛应用,在我们使用的计算机上使用的串口一般是RS232,使用RS232接口只能进行一对一的通信,然而在工业控制领域往往是一台工控机和多台智能设备进行通信,并且要求传输距离远,因为这些需求,在工控领域一般使用RS485。

在Win32下,可以使用两种编程方式实现串口通信,其一是使用MScomm控件,这种方法程序简单,但欠灵活。

其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。

使用控件的方法在本质上也是使用API进行串口通信,控件只不过是对API的一个封装处理,本文只介绍使用API进行串口通信编程的方法。

2 串口通信的一般步骤2.1 打开串口在32位Windows中,串口和其他通信设备(如磁盘等)都被作为文件进行处理,在使用前必须先将其打开,为保证串口通信数据传输的可靠性,串口一般以非共享模式打开,也就是在被串口打开后,其他程序不能在去打开此设备。

2.2 配置串口在使用串口进行数据通信前必须对其进行正确的配置,串口需要配置的主要参数有波特率、数据位、停止位、奇偶校验、收发数据缓冲区大小。

除此之外还要对串口进行超时设置,以防止在串口通信时数据传输突然中断而导致读写操作进入无限期等待的状态,设置了超时,如果在指定时间内没有完成所进行的操作,则此操作被自动放弃。

基于VC++6.0的PC机和单片机串口通信

基于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串口通信编写全过程(推荐文档)

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机串口通讯实现方案

基于VC6.0的多单片机和PC机串口通讯实现方案

基于VC6.0的多单片机和PC机串口通讯实现方案
引言
在计算机控制系统中,不可避免的要采用多机系统进行通信。

在由一台
PC 机(上位机) 和多台单片机(下位机) 构成的分布式控制系统中,通过PC 机的串口与多台单片机的通信是最方便的。

在这样的分布式控制系统中,单片机
与微机之间的多路通信是整个系统的关键。

系统组成及通讯原理
系统构成
由上位机(即计算机)、通讯接口和下位机3 部分组成。

上位机选用的是
工控机,智能终端由单片MSP430F169 和外围传感器放大电路等构成。

要想与PC 串口连接或者其它带有串口的终端连接,必须要进行EIA-RS-232C 与MSP430 电平和逻辑关系的转换。

本设计采用MAX3232 芯片,可完成
3V~5V 电平与串口电平的双向转换。

MSP430F169 单片机属于德州仪器公司MSP430F14X/16X FLASH 系列。

该系列是一组超低功耗的微控制器,工作电压范围1.8~3.6V。

由于具有16 位RISC 结构,16 位寄存器和常数寄存器,MSP430 达到了最大的代码效率。

数字控制的振荡器提供快速从所有低功耗模式苏醒到活动模式的能力时间少
于6ms。

MSP430F169 带有两个16 位定时器(带看门狗功能)、速度极快的8 通道12 位A/D 转换器(ADC)(带内部参考电压、采样保持和自动扫描功能)、一个内部比较器和两个通用同步/异步发射接收器、48 个I/O 口(均可独立控制)
的微处理器结构。

硬件乘法器提高了单片机的性能并使单片机在编码和硬件上
可兼容。

通讯原理。

VC6.0串口编程例程

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.0MFC串口通信编写全过程

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”改为“发送”,功能是按一次就把发送编辑框中的内容发送一次。

基于VC的串口通信的设计与实现-精品

基于VC的串口通信的设计与实现-精品

课程论文首页基于VC++的串口通信的设计与实现中文摘要:在visual C++6.0平台下,利用MSComm控件编写串口通信程序,实现了串口通信参数设置与显示、打开和关闭串口、接收和发送数据、自动发送、十六进制发送与显示、清空接收区和发送区内容的功能。

关键词:串口 MSComm1 串口通信1.1 基本概念串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制的0、1为最小单位逐位进行传输,如图1所示。

图1 串行通信串行数据传送的特点是:数据传送按位顺序进行,最少只需要一根传输线即可完成,节省传输线。

与并行通信相比,串行通信还有较为显著的优点:传输距离长,可以从几米到几千米;在长距离内串行数据传送速率会比并行数据传送速率快;串行通信的通信时钟频率容易提高;串行通信的抗干扰能力十分强,其信号间的互相干扰完全可以忽略。

但是串行通信传送速度比并行通信慢得多,并行通信时间为T,则串行时间为NT。

正是由于串行通信的接线少、成本低,因此它在数据采集和控制系统中得到了广泛的应用,产品也多种多样。

1.2 工作模式通过单线传输信息是串行数据通信的基础。

数据通常是在两个站(点对点)之间进行传送,按照数据流的方向可分成3种传送模式:单工、半双工和全双工。

(1)单工形式。

单工形式的数据传送是单向的。

通信双方中,一方固定为发送端,另一方则固定为接收端。

信息只能沿一个方向传送,使用一根传输线,如图2所示。

单工形式一般用在只向一个方向传送数据的场合。

例如,计算机与打印机之间的通信是单工形式,因为只有计算机向打印机传送数据,而没有相反的数据传送。

还有在某些通信信道中,如单工无线发送等。

图2 单工形式(2)半双工形式。

半双工通信使用同一根传输线,既可发送数据又可接收数据,但不能同时发送和接收。

在任何时刻只能由其中的一方发送数据,另一方接收数据。

因此半双工形式既可以使用一条数据线,也可以使用两条数据线,如图3所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

库操作等功能[2]。
2 串行函数接口程序设计
上位机与下位机进行串行通信的程序编程可用 VB、组态王、Matlab、VC + + 等软件。由于 VB 作为 面向对象的编程工具不够完全,效率比 VC + + 低, 组态王提供的命令语言环境较弱,通过串口设备一 次最多只能交换 16 B 的数据,对较大数据量的传输
ZHANG Wei,WU He-jin,SHI Xue-dong,GUO Ming-yan
( China University of Mining and Technology ( Beijing campus) ,Beijing 100083,China)
Abstract: By means of the electro-hydraulic control system,the shearer-loader,the hydraulic supports,and the scraper conveyor are cooperated to from a high-production, efficient, safe, and automated comprehensively mechanized coal mining set. Taking the control system of this coal mining set as the background,introduces the design of the serial communication program based on VC + + 6. 0 between the host computer ( PC) and the service processors ( single-chip) . Keywords: serial communication; intelligent interface card USBCANⅡ; host computer; VC + + 6. 0 software
(1) 上位机通信软件设计 上位机的通信软件编程部分通过 VC + + 6. 0 配合 USBCANⅡ智能接口卡的通信协议实现。首先 要分别对各自的串口进行初始化,确定串口的工作 方式、波特率、数据格式等。本系统中约定:波特率 为 9 600 bit / s,数据格式为 8 个数据位、1 个停止位、 无奇偶校验位。实现过程如下: 1) 设置对话框初始化 CAN 参数( 包括验收码、 屏蔽码、滤 波 方 式、模 式、定 时 器 等) ,利 用“ClassWizard”菜单项为对话框创建基于 CDialog 的派生类 “CCansettingDlg”,并利用“ClassWizard”中的“Member Variables”为界面中的各参数控件设置关联变 量。同时,还需添加按钮( 包括连接、启动 CAN、复 位 CAN 等) ,并为各按钮添加响应函数,使得点击连 接时能将各初始化参数送入电脑,并与 CAN 总线连 接;点击启动 CAN 按钮时能将 CAN 总线的信号读 入电脑。 2) 在 VC + + 6. 0 环境下利用 MFC 编写程序接 口函数。程序员通过这些函数配合通信硬件接口的 相关协议,实现上位机与下位机的通信。主要操作 步骤如下:
AfxBeginThread( ReceiveThread,this) ; / / 调用此函数可 以打开线程
为该线程添加响应函数,并设置相关变量,通过 编程,一旦 CAN 总线上有数据,便可触发该线程,将 数据送入相关变量。将读入的数据写入数据库,方 便查询。运用 SQL 语句可以实现,语句如下:
CDatabase m_DB; m_DB. OpenEx( _T( “DSN = EHcontrol”) ) ; / / 打开数据
2010 年第 2 期
煤矿机电
·57·
基于 VC + + 6. 0 的串口通信程序设计
张伟,吴和金,史学栋,郭明彦
( 中国矿业大学( 北京) 机电与信息工程学院,北京 100083)
摘 要: 综采工作面液压支架电液控制系统,使液压支架与采煤机、刮板输送机联动,构成高产、
高效、安全、自动化的综合机械化采煤装备。以综采工作面控制系统为背景,介绍利用 VC + + 6. 0
接口通信设计方法,实现人机界面的动态显示、数据 存在很大的局限性,很难实现较为复杂的数据处理,
檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿檿
于矿灯管理系统中的相应的类,是有层次化结构的 功,达到了良好的效果。
某个特定类。 4 结语
参考文献: [1] 李建华. RS 232 和调制解调高级通信编程[M]. 北京:人民邮
电出版社,2001.
采用 C + + 语言和嵌入式软件特点相结合,在综 合应用如多级抽象类定义,实体生成类,指针隐蔽等
[2] 张勇. C / C + + 语言硬件程序设计[M]. 西安:西安电子科技大 学出版社,2003.
[3] 陈邦媛. 射频通信电路[M]. 北京:科学出版社,2005.
基于 C + + 的程序设计基本技法的基础上,对对象进 作者简介:叶忠松(1980 - ),男,工程师。2003 年毕业于上海交通
编写串行通信程序,实现上位机( PC 机) 和下位机( 单片机) 之间的通信。
关键词: 串行通信; 智能接口卡 USBCANⅡ; 上位机; VC + + 6. 0 软件
中图分类号:TP274 + . 2
文献标识码:B
文章编号:1001 - 0874(2010)02 - 0057 - 03
Program Design of Serial Communication Based on VC + + 6. 0
if( m_connect = = 1) {
m_connect = 0; Sleep(500) ; GetDlgItem ( IDC _BUTTON _CONNECT) -> SetWindowTex(t “连接”) ; / / 获得指向 IDC_BUTTON_CONNECT 的 指针并显示连接 VCI_CloseDevice( m_devtype,m_devind) ; return; } d. 启动 CAN void CCansettingDlg::OnButtonStartcan( )
1 概述
综采工作面液压支架电液控制系统硬件总体结 构如图 1[1]。下位机( 单片机) 主要完成控制液压支 架的功能,上位机( PC 机) 主要完成监测控制子控 机的功能。上位机和下位机直接挂接在 CAN 总线 上。本文讨论利用 VC + + 6. 0 进行软件编程,实现 上位机( PC 机) 和下位机( 单片机) 之间串行通信的
{ tmpstr. Forma(t “% 02x”,frameinfo[i]. Data[j]) ; act[j]= tmpstr; / / 将数据传入数组,以导入数据库
str + = tmpstr; } CString str; str. Format( _T( “insert into support1 ( id1,id2,支架 动作) values ( % s,% s,% s) ”) ,act[0],act[1],act[3]) ;
m_DB. ExecuteSQL( str) ; } return 0; }
3) 创建一个线程,即为后台运行单独开辟一个 线程,从数据 库 读 出 数 据 送 入 主 程 序 界 面; 并 将 从 CAN 总线读入的数据送入数据库,以保证 CAN 总 线的数据能及时保存到数据库。实现过程如下:
static UINT ReceiveThread( void * param) ; / / 创建一个 线程
综合使用上述语句,便可以将 CAN 总线的数据 读入数据库,实现串口通信。
(2) 下位机通信软件设计 下位机采用 MCS-51 系列的 8051 单机。下位 机的串行通信程序设计采用中断法来进行数据的收 发。其串行数据的发送只要简单地从累加器向串口 缓冲寄存器传送数据即可;其串行数据的接收只要 从串口缓冲寄存器向累加器传送数据即可。实际应 用中,单片机通信程序一般采用中断方式与 PC 机 进行通信,PC 机作为主控方。当单片机收到 PC 机 发送来的地址信号时,便转入相应的中断服务子程 序,和 PC 机进行通信。发送中断服务子程序同理, 不再赘述[5]。
a. 打开设备并初始化 CAN #include“CansettingDlg. h” CCansettingDlg::CCansettingDlg( CWnd* pParent / * = NULL * /)
: CDialog( CCansettingDlg::IDD,pParent) {
m_connect = 0; m_cannum = 0; m_devtype = VCI_USBCANⅡ; } DWORD _ _ stdcall VCI _ InitCAN ( DWORD DeviceType, DWORD DeviceInd,DWORD CANInd,PVCI _ INIT _ CONFIG pInitConfig) ; b. 获取 CAN 状态 typedef struct _VCI_CAN_STATUS { UCHAR ErrInterrupt; UCHAR regMode; UCHAR regStatus; UCHAR regALCapture; UCHAR regECCapture; UCHAR regEWLimit; UCHAR regRECounter; UCHAR regTECounter; DWORD Reserved; } VCI_CAN_STATUS,* PVCI_CAN_STATUS; c. 连接 CAN void CCansettingDlg::OnButtonConnect( ) / / 为连接按钮添加 响应函数 {
相关文档
最新文档