用VC 6.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 函数的接口。换句话说,只需要设置和监视MSComm控件的属性和事件。

---- 在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_Serial),通过该对象便可以对串口属性进行设置,MSComm 控件共有27个属性,这里只介绍其中几个常用属性:

---- CommPort 设置并返回通讯端口号,缺省为COM1。

---- Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

---- PortOpen 设置并返回通讯端口的状态,也可以打开和关闭端口。

---- Input 从接收缓冲区返回和删除字符。

---- Output 向发送缓冲区写一个字符串。

---- InputLen 设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲 区中的全部内容。

---- InBufferCount 返回接收缓冲区中已接收到的字符数,将其置0可以清除接收缓 冲区。

---- InputMode 定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。

---- RThreshold 和 SThreshold 属性,表示在 OnComm 事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。

---- 以下是通过设置控件属性对串口进行初始化的实例:

BOOL  CSampleDlg:: PortOpen()
{
BOOL  m_Opened;
......
m_Serial.SetCommPort(2);     // 指定串口号
m_Serial.SetSettings("4800,N,8,1");  // 通信参数设置
m_Serial.SetInBufferSize(1024);   // 指定接收缓冲区大小
m_Serial.SetInBufferCount(0);    // 清空接收缓冲区
m_Serial.InputMode(1);       // 设置数据获取方式
m_Serial.SetInputLen(0);      // 设置读取方式
m_Opened=m_Serail.SetPortOpen(1);      //  打开指定的串口
return m_Opened;
}

时间: 2024-10-04 13:16:51

用VC 6.0实现串行通信的三种方法的相关文章

VC中加入定时机制的几种方法

定时机制是指在程序运行当中间隔特定的时间引发指定的事件.在DOS下编程时,主要依靠时钟中断Int 8及其调用中断 Int 1cH来实现,应用程序通过修改这些系统中断来达到实现定时触发.而在Windows下,若想象在DOS下肆无忌惮的修改系统是不现实的,那么应当如何实现定时机制呢?下面在下就在学习当中的几点体会谈谈这个问题,提出几种方案供大家参考. 第一种方案是大家熟悉的截获定时消息的途径.在Windows提供给我们使用的系统资源当中,有一种称为"定时器(Timer)"的特殊资源,在申请

PHP遍历数组的三种方法及效率对比分析

 这篇文章主要介绍了PHP遍历数组的三种方法及效率对比,实例分析了foreach.while与for三种遍历数组的方法与相关的效率比对,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例分析了PHP遍历数组的三种方法及效率对比.分享给大家供大家参考.具体分析如下: 今天有个朋友问我一个问题php遍历数组的方法,告诉她了几个.顺便写个文章总结下,如果总结不全还请朋友们指出 第一.foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. ? 1 2 3 4 5 6

访问 Microsoft SQL Server 元数据的三种方法

server|访问|数据 访问 Microsoft SQL Server 元数据的三种方法 上海微创软件有限公司 肖桂东 适用读者:Microsoft SQL Server 中.高级用户 元数据简介 元数据 (metadata) 最常见的定义为"有关数据的结构数据",或者再简单一点就是"关于数据的信息",日常生活中的图例.图书馆目录卡和名片等都可以看作是元数据.在关系型数据库管理系统 (DBMS) 中,元数据描述了数据的结构和意义.比如在管理.维护 SQL Serv

用ADO连接数据库的三种方法及其性能比较

ado|比较|连接数据库|性能    ADO连接数据库通常有三种方法:System DSN Connection,DSN-less Connection 和 OLE DB Connection,这是大家都很熟悉的,它们的使用方法如下:      (注:三种方法的区别在于使用的是哪个关键字 - DSN,Driver,Data Source,Provider.UID,PWD 是 ODBC 的标记,User ID,Password 是 OLEDB 的标记.特别指出的是 Data Source 在 OD

用ASP技术得到主页被访问次数的三种方法

访问 用ASP技术得到主页被访问次数的三种方法             华中理工大学自动控制工程系  周茜 田忠和    ASP 是Microsoft Active Server Pages 的缩写,即动态服务器主页. 它是服务器端脚本编写环境,在Web服务器上解释脚本,可以组合HTML页.脚本命令和ActiveX组件来创建动态.交互式.高效率的 Web 页和基于 Web 的功能强大的服务器应用程序.ASP 可以在Microsoft 的任何 Web服务器上发布各种动态数据,而且ASP应用程序很容

实现Flash动画文件全屏效果的三种方法

flash动画 实现Flash动画文件全屏效果的三种方法 第一种方法: 不显示浏览器菜单栏.工具栏的全屏.这种全屏稍稍复杂,也与FLASH的设置无关,但要借助JavaScript来完成.方法是:在HTML文件中<head></head>间加入以下代码: <script language="JavaScript"> <!-- window.open("nfd.swf","","fullscreen

Exchange Server灾难恢复的三种方法

如果你和多数的管理员一样,那么可能你每天晚上都要很负责任地对你的Exchange数据库进行备份,并且把备份记录存储到一个安全的位置上.这样做非常棒--但是仅仅采取这些步骤可能并不能完全让你从严重的灾难中逃脱.在这篇文章中,我将介绍对Microsoft Exchange进行灾难恢复最重要也是最佳的三种方法. 文档 不用去考虑你的公司规模也不用考虑服务器的复杂程度,让文档中尽可能多的记录关于你的服务器配置的信息才是最重要的--并且要让它时刻保持更新. 让我给你提供一个恰当的例子:几年前,我使用的Ex

C#中获取、生成随机数的三种方法

  这篇文章主要介绍了C#中获取.生成随机数的三种方法,本文讲解了Random 类生成法.Guid 类生成法以及RNGCryptoServiceProvider 类生成法,需要的朋友可以参考下 随机数的定义为:产生的所有数字毫无关系. 在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号. 在C#中获取随机数有三种方法: 一.Random 类 Random类默认的无参构造函数可以根据当前系统时钟为种子,进行一系列算法得出要求范围内的伪随机数. 代码如下: Random rd = new R

asp.net读取excel文件的三种方法示例

 这篇文章主要介绍了asp.net读取excel文件的三种方法示例,包括采用OleDB读取Excel文件.引用的com组件读取Excel文件.用文件流读取,需要的朋友可以参考下 方法一:采用OleDB读取Excel文件   把Excel文件当做一个数据源来进行数据的读取操作,实例如下:  代码如下: public DataSet ExcelToDS(string Path)    {    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;&q