MSComm控件实现串口通信的方法

合集下载

VB6.0下MSComm控件实现串口通信

VB6.0下MSComm控件实现串口通信

VB6.0下用MSComm控件实现串口通信MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能,以下先对其属性进行详细的说明后再举一个例子进行说明:1基本属性CommPortO mPort[=value]Object为MSComm控件,value为整数值,标志端口号。

说明:该属性设置并返回通讯端口号,value的值可以设为1-16间的任意数(默认为1)。

在打开端口之前必须先设置CommPort属性,当端口不存在时,如果用PortOpen属性打开它,MSComm控件会产生错误68(即设备无效的错误)。

SettingsObjiect.Setting[=value]Object为MSComm控件,value为字符串类型,表示通讯端口的设置值。

说明:本属性用来设置并返回端口的波特率、奇偶校验位、数据位和停止位参数。

当端口打开时,如果指定的value参数非法,则MSComm控件产生380号(非法属性值)错误。

有效的value参数值由四个设置值组成,有如下格式:“BBBB,P,D,S”,其中BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。

Value的默认值为:“9600,N,8,1”,下面给出合法的波特率、奇偶校验位、数据位和停止位参数:波特率:110,300,600,1200,2400,4800,9600(默认),14400,19200,28800,38400,56000,57600,115200,128000,256000。

奇偶校验值:E(偶校验,Even)、M(标记,Mark)、N(默认,Default,None)、O(奇校验,Odd)、S(空格,Space)。

数据位值:4,5,6,7,8(默认),9。

停止位值:1(默认),1.5,2。

PortOpenO bject.PortOpen[=value]Object为MSComm控件。

Value为布尔类型,表明通讯端口的状态。

vb串口通信控件-mscomm

vb串口通信控件-mscomm

vb串口通信控件-mscommMSComm控件提供了两种处理通信的方式:一种为事件驱动方式,该方式相当于一般程序设计中的中断方式。

当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。

本文的两个例子均采用该方式。

另一种为查询方式,在用户程序中设计定时或不定时查询 MSComm控件的某些属性是否发生变化,从而确定相应处理。

在程序空闲时间较多时可以采用该方式。

常用属性和方法利用MSComm控件实现计算机通信的关键是理解并正确设置MSComm控件众多属性和方法。

以下是MSComm控件的常用属性和方法:●Commport:设置或返回串口号。

●Settings:以字符串的形式设置或返回串口通信参数。

●Portopen:设置或返回串口状态。

●InputMode:设置或返回接收数据的类型。

●Inputlen:设置或返回一次从接收缓冲区中读取字节数。

●InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。

●InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数。

●Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。

●OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。

●OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。

●Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。

●Rthreshold:该属性为一阀值。

当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent属性为ComEvReceive,并产生OnComm事件。

用户可在OnComm事件处理程序中进行相应处理。

若Rthreshold属性设置为0,则不产生OnComm事件。

例如用户希望接收缓冲区中达到一个字符就接收一个字符,可将Rthreshold设置为1。

这样接收缓冲区中接收到一个字符,就产生一次OnComm事件。

C_builder5中基于MSComm控件串口通信的编程与实现

C_builder5中基于MSComm控件串口通信的编程与实现

收稿日期:2001-09-17作者简介:罗日成(1970-),男,湖南隆回人,硕士,长沙电力学院讲师,主要从事遗传算法及控制软件方面的设计开发。

C ++builder5中基于MSC omm 控件串口通信的编程与实现罗日成,李卫国(长沙电力学院电力系,湖南长沙 410077)摘 要:由于串行接口具有连接简单、使用方便、数据传递可靠等优点,在工业实时控制系统中得到了广泛应用。

本文探讨了基于Windows98平台上利用Micros oft C ommunications C ontrol 控件编写串行通信程序的方法,并结合开发实践,阐述了用C ++builder5语言实现了基于ActiveX 技术的串行通信编程的一般步骤。

实践表明,该方法简单、可靠,从而大大缩短实时控制软件的开发周期,减少程序员的工作量。

关 键 词:串行通信;Windows98;C ++builder5;ActiveX 控件;数据采集中图分类号:TP319; 文献标识码:A 文章编号:1001-4551(2002)01-0024-04The Programming and R ealization of Serial Communicationin C ++builder 5B ased MSComm ControlLUO Ri 2cheng ,LI Wei 2guo(Department o f Electr.Power Eng.,Changsha Univer sity o f Electr.Power.,Changsha 410077)Abstract :Serial inter face possesses the g ood qualities of connecting sim ply ,using conveniently and data trans fering credibly ,s o it has gained abroad appliance in real 2time control system.In this paper ,the method of serial communication ’s programming with M icros oft C ommunication C ontrol in the Windows 98platform is discussed ,the approach of serial communication ’s programming which is based on the technique of ActiveX in C ++Builder5.0is expatiated.The method is sim pleness and credibility.I t can shorten programming period greatly and reduce the w ork of the programmer.K ey w ords :serial communication ;Windows98;C ++Builder5;ActiveX control ;data collection1 引 言目前,计算机的串行通信应用十分广泛,串行接口已成为计算机的必需部件和接口之一。

vc 使用mscomm控件实现串口通讯

vc 使用mscomm控件实现串口通讯

vc 使用mscomm控件实现串口通讯2009-07-07 08:34mscomm控件是微软发布的串口通讯控件,可以被多种开发工具使用,本章简单介绍vc环境下该控件的使用情况.1、控件的装载。

新建一个mfc工程,选择project-add to project-components and controls打开components and controls gallery对话框,双击 registered actives controls ,做出如下图的选择:点插入按钮后,就可把把该控件安装到controls面板上,同时创建串口类,我们从controls面板上把该控件添加到应用程序对话框就可以使用该控件设计通讯程序了。

2、初始化并打开串口。

m_ctrlComm.SetCommPort(1); //选择串口1if(!m_ctrlComm.GetPortOpen())//如果串口没有打开,则打开串口m_ctrlComm.SetPortOpen(TRUE);m_ctrlComm.SetSettings("38400,n,8,1");//波特率38400,无校验,8个数据位,1个停止位m_ctrlComm.SetInputMode(1);//以二进制方法检取数据m_ctrlComm.SetRThreshold(1);//参数为1表示当串口接收缓冲区有多于或等于1个字符时,将出发一个//接收数据的OnComm事件m_ctrlComm.SetInputLen(0);//设置当前接收缓冲区的数据长度为0m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据3、串口关闭。

m_ctrlComm.SetPortOpen(FALSE);4、数据发送strSendFrame = "10 40 01 41 16 ";CStringToCByteArray(strSendFrame,cbaSendBuf);//转换为字节流cbaLastSendFrameBuf.Copy(cbaSendBuf);ucLastSendCtlCode = cbaSendBuf[1];pView->m_ctrlComm.SetOutput((COleVariant)cbaSendBuf);//串口发送5、数据接收响应mscomm控件的oncomm事件处理接收到的数据。

VB6.0环境下利用Mscomm控件实现串行通信

VB6.0环境下利用Mscomm控件实现串行通信

VB6.0环境下利用Mscomm控件实现串行通信Use Mscomm Control Component to Implement Serial Communication under Visual Basic摘要: 本文简要介绍了VB6.0中Mscomm通信控件的属性和使用方法,并结合具体实例给出了基本的通信程序。

主题词:串行通信Visual Basic Mscomm .vbx控件Abstract: This paper briefly introduces the principle and method of Mscomm object of Visual basic 6.0, and with a real example basic program codes are given.Key Words:Serial Communication; Visual Basic; Mscomm .vbx control component随着计算机技术的飞速发展及其广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。

微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。

而单片机具有价格低,功能强,抗干扰能力好,温限宽和面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。

在需要对采集的数据进行分析处理或在远程需要对控制对象的控制过程进行统计或有条件控制时,采用数据库访问技术能有效地解决这类问题。

Visual Basic 6.0以其强大的功能、使用简单、能在短时间内开发出高效的通信程序而成为Windows系统开发的主要编程语言。

首先表现在VB可直接使用户自定义控件VBX或OCX文件;其次表现在VB可通过调用动态链接库(DLL,dynamic link library)来加快应用程序关键部分的执行速度。

C#串口通信:MSComm控件使用详解

C#串口通信:MSComm控件使用详解

C#串口通信:MSComm控件使用详解目次MSComm 控件两种处理通讯的方式CommPort 属性RThreshold 属性CTSHolding 属性SThreshold 属性CDHolding 属性DSRHolding 属性Settings 属性InputLen 属性EOFEnable 属性Handshake 常数OnComm 常数InputMode 常数错误消息MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi 等语言中均可使用。

Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

1.MSComm控件两种处理通讯的方式MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。

1.1 事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。

在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者Carrier Detect (CD) 或Request To Send (RTS) 线上一个字符到达或一个变化发生时。

在这些情况下,可以利用MSComm 控件的OnComm 事件捕获并处理这些通讯事件。

OnComm 事件还可以检查和处理通讯错误。

所有通讯事件和通讯错误的列表,参阅CommEvent 属性。

在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。

这种方法的优点是程序响应及时,可靠性高。

每个MSComm 控件对应着一个串行端口。

如果应用程序需要访问多个串行端口,必须使用多个MSComm 控件。

串口通信MSComm控件和SerialPort

串口通信MSComm控件和SerialPort

一.概述输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。

但在技术广泛应用的今天,Visual S 没有将此控件加入控件库,所以人们采用了许多方法在Visual 来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。

现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。

NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visual Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。

二.SerialPort常用属性、方法和事件1.命名空间System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/ O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using Sys tem.IO.Ports。

2.串口的通讯参数串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。

SerialPort类与MSComm有一些区别:✍通讯端口号[PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是mPort的short类型。

VB控件MSComm串口通讯实例教程

VB控件MSComm串口通讯实例教程

现有电子秤一台,使用串口与计算机进行通讯。

编写VB程序来访问串口,达到读取电子秤上显示的数据。

该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600、偶校验、7个数据位、2个停止位。

所有字符现有电子秤一台,使用串口与计算机进行通讯。

编写VB程序来访问串口,达到读取电子秤上显示的数据。

该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600、偶校验、7个数据位、2个停止位。

所有字符均发送11位ASCII码,一个起始位。

在VB中与串口通讯需要引入控件MSComm串口通讯控件(在Microsoft Comm Control 6.0中)。

具体程序如下:控件简称:MSCDim Out(12) As Byte '接收var中的值Dim var As Variant '接收MSC.input中的数值Dim nRece As Integer '计算MSC.inputbuffer的个数Dim i As Integer, j As Integer '随即变量,计算循环************************************************************************** **Private Sub Form_Load()ClearTextWith MSC.CommPort = 1 '设置Com1为通信端口.Settings = "9600,E,7,2" '设置通信端口参数 9600赫兹、偶校验、7个数据位、2个停止位.(这里需要进一步说明的是:.Setting=”BBBB,P,D,S”。

含义是:B:Baud Rate(波特率);P:Parity(奇偶);D:Data Bit;S:Stop Bit).InBufferSize = 40 '设置缓冲区接收数据为40字节.InputLen = 1 '设置Input一次从接收缓冲读取字节数为1.RThreshold = 1 '设置接收一个字节就产生OnComm事件End WithEnd Sub************************************************************************** **Private Sub ClearText()Text3.Text = ""Text2.Text = "5"Text1.Text = ""End SubPrivate Sub Command1_Click()ClearText' nRece = 0 '计数器清零With MSC.InputMode = comInputModeBinary '设置数据接收模式为二进制形式.InBufferCount = 0 '清除接收缓冲区If Not .PortOpen Then.PortOpen = True '打开通信端口End IfEnd WithEnd SubPrivate Sub MSC_OnComm()DelayTime ‘用来延续时间ClearTextWith MSCSelect Case .CommEvent '判断通信事件Case comEvReceive: '收到Rthreshold个字节产生的接收事件SwichVar 1If Out(1) = 2 Then '判断是否为数据的开始标志.RThreshold = 0 '关闭OnComm事件接收End IfDoDoEventsLoop Until .InBufferCount >= 3 '循环等待接收缓冲区>=3个字节' nRece = nRece + 1For i = 2 To 12SwichVar iText1.Text = Text1.Text & Chr(Out(i))NextText1.Text = LTrim(Text1.Text)Text2.Text = Text2.Text & CStr(nRece).RThreshold = 1 '打开MSComm事件接收Case Else' .PortOpen = FalseEnd SelectEnd WithEnd Sub************************************************************************** **Private Sub DelayTime()Dim bDT As BooleanDim sPrevious As Single, sLast As SinglebDT = TruesPrevious = Timer (Timer可以计算从子夜到现在所经过的秒数,在Microsoft Windows中,Timer函数可以返回一秒的小数部分)Do While bDTIf Timer - sPrevious >= 0.3 Then bDT = FalseLoopbDT = True(通信传输速率为9600bps,则最快速度1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均5.0ms 发送一个字节,连续读取串口数据时要在程序中添加循环等待程序)Private Sub SwichVar(ByVal nNum As Integer)DelayTimevar = Nullvar = MSC.InputOut(nNum) = var(0)End Sub(设置接收数据模式采用二进制形式,即 InputMode=comInputModeBinary,但用Input 属性读取数据时,不能直接赋值给 Byte 类型变量,只能通过先赋值给一个 Variant 类型变量,返回一个二进制数据的数组,再转换保存到Byte类型数变量中。

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

MSComm控件实现串口通信的方法碧峰晨曦摘要:详细介绍了MSComm控件,并在VC++6.0中利用MSComm控件开发了基于对话框的串口通信实例。

关键词:串口通信,MSComm,VC++图书编号:TP3110.引言串口通信具有实现简单、价格低廉、通信稳定、数据传输可靠等优点,因而广泛应用于各种工业控制系统中。

MSComm控件是微软公司开发的专门用于串口通信的控件。

该控件为开发串口通信程序提供了更加快捷、容易的方法。

在VC++中,对控件属性的操作都是通过特定的函数来实现的,这些函数都是CMSComm类的成员函数。

当声明了一个CMSComm类对象后,就可以通过如下格式调用成员函数来访问控件属性了:<对象名>.<成员函数名>(<参数表>)或<对象名>-><成员函数名>(<参数表>)1.MSComm控件属性及事件1.1 MSComm控件属性MSComm控件有许多属性,最主要的几个属性如下:1)CommPort:设置该属性值可以获取当前程序使用的串口编号。

2)Setting:设置或者获取串行通信的通信参数(包括波特率、奇偶校验类型、数据位数及停止位数等)。

3)PortOpen:设置该属性可以打开或关闭串口。

4)Input:从接收缓冲区中返回并删除数据。

5)Output:向串口通信输出缓冲区写入数据。

6)CommEvent:当MSComm控件在运行时发生错误或产生各种事件时,向程序返回错误或事件类型。

1.2 MSComm控件的事件该控件只有一个事件,即OnComm事件。

当CommEvent属性值发生变化时就会触发OnComm事件。

根据CommEvent属性值来分别执行各种情况下的处理程序。

2 MSComm控件实例应用2.1插入MSComm控件在VC++6.0中新建一个基于对话框的工程,命名为Test。

默认情况下,VC++6.0中不会包含MSComm控件,所以需要我们手动将MSComm控件加载到VC++6.0中。

(1)单击主菜单project的子菜单Add To project的Components and Controls选项;(2)在弹出的“Components and Controls Gallery”对话框中选择Registered ActiveX Controls文件夹中的“Microsoft Communications Control,version6.0”选项,如图l:图1.插入MSComm控件单击其中的“Insert’’按钮,MSComm控件就被增加到工程中了。

与此同时,类CMSComm的相关文件mscomm.h和mscomm.cpp也一并被加人Project的Header Files和Source Files中。

为了使用MSComm控件,将MSComm控件拖入对话框。

在使用控件编程前还需创建该控件的实例,使用使用ClassWizard添加对话框类CTestDlg的WM_CREATE消息响应函数OnCreate(LPCREATESTRUCT lpCreateStruct) ,在该函数内创建控件实例:int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct){……// TODO: Add your specialized creation code hereDWORD style=WS_VISIBLE|WS_CHILD;if (!myComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1)){AfxMessageBox("创建MSComm控件失败!");return -1;}return 0;}2.2串口初始化及打开初始化主要完成串口的通信参数设置,设置好参数后就可以打开串口了。

在对话框的头文件Test.h中最顶行,加入引用控件类的代码:#include "mscomm.h"然后,在对话框类的定义代码中加入CMSComm类变量的声明:CMSComm mycomm;在CTestDlg::OnInitDialog()函数中添加串口初始化代码:BOOL CTestDlg::OnInitDialog(){……myComm.SetCommPort(2); //选择COM2myComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位myComm.SetInBufferSize(2048); //指定接收缓冲区大小myComm.SetInBufferCount(0); //清空接收缓冲区myComm.SetInputMode(1); //设置数据获取方式myComm.SetInputLen(0); //设置每次读取长度myComm.SetRThreshold(1); //设置接收OnComm事件门限值myComm.SetOutBufferSize(1024); //设置发送缓冲区大小myComm.SetOutBufferCount(0); //清空发送缓冲区myComm.SetSThreshold(1); //设置发送OnComm事件门限myComm.SetPortOpen(1); //打开串口return TRUE; // return TRUE unless you set the focus to a control}2.3 OnComm事件处理MSComm控件一般用OnComm事件来接收数据。

使用ClassWizard加MSComm控件的OnComm消息响应函数OnOnCommMscomm(),该函数的作用为接收数据,其代码如下:void CTestDlg::OnOnCommMscomm(){// TODO: Add your control notification handler code hereV ARIANT input1; //定义V ARIANT类型变量BYTE rxdata[2048]; //定义存放二进制数据的数组long len1,k;COleSafeArray safearray1; //定义COleSafeArray类的实例CString strDis;switch(myComm.GetCommEvent()){case 2://收到RThreshold 个字符//添加接收处理代码input1=myComm.GetInput();//将V ARAIANT变量赋值给COleSafeArray类的实例safearray1=input1;//使用COleSafeArray类的成员函数获取数据长度len1=safearray1.GetOneDimSize();for(k=0;k<len1;k++)//使用COleSafeArray类的成员函数将数据写入数组safearray1.GetElement(&k,rxdata+k);for(k=0;k<1;k++){strDis+=rxdata[k];m_Edit1.SetSel(1000000,1000000);m_Edit1.ReplaceSel(strDis);strDis="|";UpdateData(false);}}}2.4 串口发送数据在对话框上添加一个“发送”按钮,利用ClassWizard为该按钮添加“BN_ CLICKED”消息处理函数onsend(),实现的功能为通过串口发送数据,该函数的代码为:void CTestDlg::OnSend(){// TODO: Add your control notification handler code hereUpdateData(true);CByteArray sendArr;WORD wLength;wLength=m_Edit2.GetLength();//m_Edit2为与文本框联系在一起的CString型成员变量sendArr.SetSize(wLength);for(int i=0;i<wLength;i++){sendArr.SetAt(i,m_Edit2.GetAt(i));}myComm.SetOutput(COleVariant(sendArr));}2.5 程序测试运行程序,在发送编辑框中随意输入点什么,单击发送按钮,在另一端利用串口调试助手实现通信数据的接收和发送。

程序运行情况如图2。

图2.程序测试3.结束语本文介绍了详细介绍了在VC++6.0中利用MSComm控件实现串口通信的过程,并给出了详细的编程代码。

该方法快速、简单,免去了以往利用WindowsAPI 实现串口通信的复杂编程,具有很强的使用性。

[参考文献] (References)[1] 王坤,高贇.基于VC++实现串口通信的方法[J].信息化研究,2010,36(10):52-54[2] 刘书智,李琳娜.Visual C++实践与提高--串口通信与工程应用篇[M].北京:中国铁道出版社,2009[3] 吉翔,李永全.VC++下MSComm控件的串口通信方法[J].电脑开发与应用,2009,22(12):34-36[4] 张瑞卿,胡爱军,张超.基于VC++的PC机与PLC串口通讯的实现[J].设计与研究,2010年第9期:58-61。

相关文档
最新文档