Mscomm控件属性、方法及事件
mscomm控件的使用和安装

一、引言目前,在用计算机进行数据传输时,常用的是串行通信方式。
用C++Builder来编写串行通信程序时,可以调用Windows API函数,也可以利用VB中的MSComm控件。
利用API函数编写实际应用程序时,往往要考虑多线程的问题,这样编出来的程序不但十分庞大,而且结构比较复杂,继承性差,维护困难。
但是使用串行通信控件就相对简单一些,而且功能强大,性能安全可靠。
本文就简单的介绍一下在C++ Builder中利用MSComm 控件进行编程。
二、MSComm控件的常用属性和事件MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。
具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。
事件驱动方式在使用事件驱动法设计程序时,每当有新字符到达,或端口状态改变,或发生错误时,MSComm控件将解发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。
这种方法的优点是程序响应及时,可靠性高。
查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。
在程序的每个关键功能之后,可以通过检查CommEvent 属性的值来查询事件和错误。
如果应用程序较小,并且是自保持的,这种方法可能是更可取的。
1.MSComm 控件的常用属性CommPort属性:设置或返回通讯端口号,可以设置为1到16之间的任何值,本系统采用缺省值2;Settings属性:以字符串形式设置或返回波特率、奇偶校验、数据位和停止位,本系统采用缺省值"9600,n,8,1";PortOpen属性:设置或返回通讯口的状态以及打开和关闭端口,可通过把该属性设置为true或者false来打开或者关闭端口;InBufferSize和OutBufferSize属性:分别设置接收和发送缓冲区分配的内存数量,单位为字节,缺省值分别为1024byte和512byte;InputLen属性:确定希望从接收缓冲区移出的字符数量,当InputLen=0时,一次把接收缓冲区的字符全部移出;Input属性:从接收缓冲区中读出数据,然后将该数据从缓冲区移走。
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控件属性与事件

MSComm控件属性与事件1、CommPort属性•功能:设置或返回通信端口号。
•语法:–void CMSComm::SetCommPort(short nNewV alue); //设置串口号–short CMSComm::GetCommPort(); //查询当前串口号•说明:–nNewV alue取值范围:1~16,但是如果用SetPortOpen属性打开一个不存在的串口号,将产生错误。
•注意:–必须在打开端口之前设置CommPort属性。
程序://根据当前端口号选择所要打开的串口m_Comm.SetCommPort(atoi(m_strCOM.Mid(3,1)));2、PortOpen属性•功能:用于打开或关闭串口,或者返回串口的开关状态。
•语法:–void CMSComm::SetPortOpen(BOOL bNewV alue);–BOOL CMSComm::GetPortOpen();•说明:–bNewV alue=TRUE,则打开串口;–bNewV alue=FALSE,则关闭串口;–当程序终止时,MSComm控件会自动关闭。
–BOOL CMSComm::GetPortOpen(),返回值为真,则串口已打开,否则,未打开;程序if(m_Comm.GetPortOpen()){m_Comm.SetPortOpen(FALSE);}if(!m_Comm.GetPortOpen()){m_Comm.SetPortOpen(TRUE);//打开串口按钮颜色正常GetDlgItem(IDC_BUTTON_OPENPORT)->EnableWindow(FALSE);//关闭串口按钮颜色变灰GetDlgItem(IDC_BUTTON_CLOSEPORT)->EnableWindow(TRUE);}else{AfxMessageBox("cannot open serial port");}3、RThreshold属性•功能:•语法:–void CMSComm::SetRThreshold(short nNewV alue);–short CMSComm::GetRThreshold();•说明:–接收缓冲区收到nNewV alue个字符时产生OnComm事件。
VB控件MSComm功能介绍

VB控件MSComm功能介绍语法:object.CTSHolding(Boolean)Mscomm 控件的CTSHolding 属性设置值:True Clear To Send 线为高电平。
False Clear To Send 线为低电平。
说明:如果Clear To Send 线为低电平(CTSHolding = False) 并且超时时,MSComm 控件设置CommEvent 属性为comEventCTSTO (Clear To Send Timeout) 并产生OnComm 事件。
Clear To Send 线用于RTS/CTS (Request To Send/Clear To Send) 硬件握手。
如果需要确定Clear To Send 线的状态,CTSHolding 属性给出一种手工查询的方法。
详细信息有关握手协议,请参阅Handshaking 属性。
SThreshold 属性:MSComm 控件设置CommEvent 属性为comEvSend 并产生OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
语法object.SThreshold [ = value ]value 整形表达式,代表在OnComm 事件产生之前在传输缓冲区中的最小字符数。
说明:若设置Sthreshold 属性为0(缺省值),数据传输事件不会产生OnComm 事件。
若设置Sthreshold 属性为1,当传输缓冲区完全空时,MSComm 控件产生OnComm 事件。
如果在传输缓冲区中的字符数小于value,CommEvent 属性设置为comEvSend,并产生OnComm 事件。
comEvSend 事件仅当字符数与Sthreshold 交叉时被激活一次。
例如,如果Sthreshold 等于5,仅当在输出队列中字符数从5 降到4 时,comEvSend 才发生。
如果在输出队列中从没有比Sthreshold 多的字符,comEvSend 事件将绝不会发生。
MSComm控件的用法和函数说明

MSComm控件进行串口编程步骤:1. 在建立的程序工程中插入MSComm控件。
2. 添加MSComm控件ID 的控制变量(或者对象)。
3. 对串口进行初始化,设置MSComm控件的属性。
4. 添加串口事件的消息处理函数OnComm()函数,在函数中根据应用需要,编写数据处理代码5. 编写串口发送等其他代码。
6. 关闭串口。
+MSComm控件常用属性:mPort:设置并返回通信端口号2.Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位3.PortOpen:设置并返回通信端口的状态。
也可以打开和关闭端口4.Input:从接收缓冲区返回和删除字符5.Output:向传输缓冲区写一个字符6.InputLen:设置并返回Input属性从接收缓冲区读取的字符数。
7.InBufferSize:设置或返回输入缓冲区的大小。
8.OutBufferSize:设置或返回输入缓冲区的大小。
9.InBufferCount:设置或返回输入缓冲区内等待读取的字节个数。
10.OutBufferCount:设置或返回输入缓冲区内等待读取的字节个数。
对MSComm控件通过Get/Set函数对来获取或设置控件的属性,每个属性均有与之对应的Get/Set函数对。
用法说明mPort:设置并返回通信端口号Void CMSComm::SetCommPort(short n); 设置串口号Short CMSComm::GetCommPort(); 查询当前串口号说明:n可以设置成1到16中的任何数(缺省值为1)。
但是,如果用PortOpen属性打开一个并不存在的端口是,MSComm控件会产生错误68(设备无效);必须在打开端口之前设置CommPort属性。
2.Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位Void CMSComm::SetSettings(LPCTSTR lpszNewValue);CString CMSComm::GetSettings();说明:当端口打开时,如果设置值lpszNewValue非法,则MSComm控件产生错误380(非法属性值)。
mscomm32控件属性

---- 1、常用属性CommPort:设置或返回串行端口号,缺省为1。
Setting:设置或返回串行端的波特率、奇偶校验位、数据位数、停止位。
缺省值为"9600,N,8,1"。
PortOpen:设置它为True则打开端口,设置它为False则关闭端口。
InBufferSize:设置或返回接收缓冲区的大小,缺省为1024 字节。
InBufferCount:返回接收缓冲区内的等代读取的字节个数,设属性为0清除接收缓冲区。
OutBufferSize:设置或返回发送缓冲区,缺省为512字节。
OutBufferCounter:返回发送缓冲区内等待发送的字符数,可用0来清空缓冲区。
Output:向发送缓冲区传送数据RThreshold: 该属性确定当接收缓冲区内字节个数达或超过该值后就产生代码为ComEventReceive的OnComm事件,设置位0,则不产生OnComm事件。
CommEvent:有通讯错误或事件发生时产生OnComm事件,CommEvent事件的值可以用来确定引发OnComm事件的具体的错误或事件常用的有以下几种(更详细的资料可参考MSComm控件帮助文件)ComEventbreak:接受到中断信号ComEventFrame:硬件检测到帧错误。
ComEventRxOver:接收缓冲区溢出。
ComEventTxFull:发送缓冲区溢出。
ComEventReceive:接受到规定的字符数。
InputLen:设置或返回接收缓冲区内用Input读入的个数。
若取0,则读取整个缓冲区的内容。
Input:返回并删除接受缓冲区的数据。
---- 2、示例:---- 下面举一接收程序示例:制作一通讯接收窗口,选择菜单Controls→OLE→Insert Control→MicrosoftCommunications Control,---- 在窗口中出现通信控件图标单击鼠标右键,选择OCX Properties设置常用属性,也可在程序中进行设置窗口的Open事件程序如下ole_mPort=2ole_1.object.Settings="9600,N,8,1"ole_1.object.PortOpen=tureole_1.object.Rthreshold=10ole_1.object..Inputlen=0 . .通信控件的oncomm事件的程序如下choose case ole_mEventcase comEventBreak //接收到中断信号case comEventCDTO //处理CD超时. . .case comEvReceive sle_1.text=ole_1.object.Input. .end choose利用Microsoft公司提供的通讯控件利用Microsoft公司提供的通讯控件(Mscomm.vbx,用于16位通讯程序、Mscomm32.ocx用于开发32位通讯程序)可方便实现串口通讯。
VB mscomm控件

MSComm控件详细介绍MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。
它提供两种处理通信的方式:一是事件驱动方式,一是查询方式。
1.1 事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。
在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者Carrier Detect (CD) 或Request To Send (RTS) 线上一个字符到达或一个变化发生时。
在这些情况下,可以利用MSComm 控件的OnComm 事件捕获并处理这些通讯事件。
OnComm 事件还可以检查和处理通讯错误。
所有通讯事件和通讯错误的列表,参阅CommEvent 属性。
在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。
这种方法的优点是程序响应及时,可靠性高。
每个MSComm 控件对应着一个串行端口。
如果应用程序需要访问多个串行端口,必须使用多个MSComm 控件。
1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。
在程序的每个关键功能之后,可以通过检查CommEvent 属性的值来检测事件和通讯错误。
如果应用程序较小,并且是自保持的,这种方法可能是更可取的。
例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。
MSComm控件有两种处理通信的方式,即事件驱动和查询方式。
事件驱动方式是处理串行通信的一种有效的方法,它可以利用OnComm事件捕获并处理通信中发生的事件或错误,实时性较强。
而查询方式是在程序通过查询CommEvent属性的值来判断通信过程中的事件或错误,这种方式适合于应用程序较小、实时性要求不高的系统中。
MSComm控件进行串行通信的一般步骤为:1、设置通信对象、通信端口号及其它属性;2、设定通信协议;3、打开通信端口,进行数据的传送;4、关闭通信端口MSComm属性1.2.1 Setting属性:设置并返回波特率、奇偶校验、数据位、停止位参数。
VB_MSCOMM控件简介

VB 通信控件MscommMscomm 控件提供了功能完善的串口数据的发送和接收功能,Mscomm 控件具有两种处理方式: 1 事件驱动方式: 由Mscomm 控件的OnComm 事件捕获并处理通信错误及事件;2 查询方式: 通过检查CommEvent 属性的值来判断事件和错误。
Mscomm 控件的通信功能实现,实际上是调用了API 函数,而API 函数是由解释并传给设备驱动程序执行的,对于VB 程序开发者只需知道Mscomm 控件的属性和事件的用法即可以实现串口的操作。
以下是Mscomm 控件的主要属性和方法:1)CommPort: 设置或返回串行端口号,其取值范围为1 ~99,缺省为1。
2) Setting 设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。
如:=“9600,N,8,1”。
3)PortOpen: 打开或关闭串行端口,格式为:={TRUE|FALSE}。
4) InBufferSize: 设置或返回接收缓冲区的大小,缺省为1024 字节。
5) InBufferCount: 返回接收缓冲区内的等待读取的字节个数,可通过设置该属性为0 来清除接收缓冲区。
6) RThreshold: 该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生代码为MSCOMM_EV_RECEIVE 的OnComm 事件。
7) InputLen: 设置或返回接收缓冲区内用Input 读入的个数。
若取0,则INPUT 读取整个缓冲区的内容。
8) Input: 该属性表示从接收缓冲区移走一串字符。
9) OutBufferSize: 设置或返回发送缓冲区,缺省为512 字节。
10) OutBufferCounter: 返回发送缓冲区内等待发送的字符数,可用来清空缓冲区。
11) Output: 向发送缓冲区传送一字符串。
12) EOFEnable: 若置TRUE,则当输入中出现EOF,就停止输入并产生OnComm 事件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mscomm控件
1、引用Mscomm控件
Mscomm控件不是普通的工具箱控件,在VB中首先要引用Mscomm控件,而后才能使用用它。
引用Mscomm控件很简单:选择“工程”主菜单,在“工程”菜单上选择“部件”命令,弹出如图所示的部件对话框,在控件属性页上选定“Microsoft Comm Control 6.0”控件,单击“确定”按钮后,Mscomm就添加到控件面板上。
2、Mscomm控件信息处理
Mscomm控件拥有功能完善的串口数据的发送和接收功能,Mscomm控件提供了两种处理方式。
●事件驱动方式:由Mscomm控件的OnComm事件自动捕获并处理通信错误及事件;
●查询方式:通过定时查询Mscomm控件CommEvent属性的值来判断事件和错误。
在PC机串行端口通信时,使用了十几条线进行信号传输。
利用Mscomm控件开发串口通信软件,需了解以下5条线的代号及作用,这5条线的高低电平状态分别对应Mscomm 控件的相应属性的True/False值:
●DRT线:用于传输PC机发往串口Modem等设备的信号,该信号表示PC机是否已准备好;
●RTS线:用于传输PC机发往串口Modem等设备的信号,该信号表示PC机是否允许Modem发数据;
●DSR线:用于传输串口Modem等设备发往PC机的信号,该信号表示串口Modem 等设备是否已做好操作准备;
●CTS线:用于传输串口Modem等设备发往PC机的信号,该信号表示Modem是否允许发送数据;
●CD线:用于传输串口Modem等设备发往PC机的信号,该信号表示Modem已经和远方的设备建立了连接。
Mscomm控件的通信功能实现,实际上是调用了API函数,而API函数是由Comm.drv 解释并传给设备驱动程序执行的,对于VB程序开发者只需要知道MSComm控件的属性和事件的用法即可以实现对串口的操作。
3、Mscomm控件的属性
(1)CommPort属性
该属性用于设置或返回连接的串口编号,Windows将会利用该串口和外界通信。
CommPort属性值用1、2……表示串口COM1、COM2...,其取值范围为1~6,缺省值为1。
MSComm控件支持的最大串口号是16,系统会通知出错,并返回前一次设定的值。
(2) Settings属性
该属性用于设置或返回通信参数,属性值用字符串表示,主要设定波特率、奇偶检验、数据位数,停止位等4个参数。
组成格式为:
“BBBB,P,D,S”
其中BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。
默认值为“19200,N,8,1”,表示传输速率19200bit/s,无奇偶校验位,8位数据位,1位停止位。
波特率的合法值可以是110、300、600、1200、2400、4800、9600(默认)、14400、19200、28800、38400、56000、57600、115200、128000、256000。
奇偶校验的值可以设置为如下表所示的值之一。
奇偶校验设定值
数据位的值可以是4、5、6、7、8(默认值)。
停止位的值可以是1(默认值)、1.5、2。
只有当通信的双方的Settings属性值都一样,通信连接才有效。
(3) Handshaking属性
该属性用于设置或返回硬件握手协议,即PC机与通信设备(如Modem)之间为了控制流速而约定的内部协议,属性值可以设置为如下表中的值。
(4) PortOpen属性
该属性用于打开或关闭端口。
属性值为Boolean型。
设为True可以打开端口;设为False 可以关闭端口。
一般在程序开始时打开端口,在程序结束时关闭端口。
(5)OutBuffersize属性
该属性用于设置或返回缓冲区大小,值为Integer型,表示传输缓冲区的字节数,缺省值为512字节。
(6) OutBufferCounter属性
该属性用于返回发送缓冲区内等待发送的字符数,可用来清空缓冲区。
(7) OutPut属性
该属性用于向发送缓冲区写数据流。
属性值为Variant型变量。
注意:传输文本数据时,应将String型数据放入Variant型变量,传输二进制数据(即按字节)时,应将Byte型数组数据放入Variant型变量。
(8) SThreshold 属性
该属性为一阀值,当输出缓冲区内字节个数小于该值后产生OnComm事件,并且CommEvent属性会被设定为ComEvSend。
如果该值为0(默认值),则数据传输事件不会产生OnComm事件。
(9) InBuffersize属性
该属性用于设置或返回输入缓冲区的大小,缺省值为1024字节。
(10) InBufferCount属性
该属性用于返回输入缓冲区内的等待读取的字节个数,可通过设置该属性为0来清除接收缓冲区。
(11) InputLen属性
该属性用于设置或返回接收缓冲区内用Input属性命令读入的字节个数。
若取0,则Input属性读取整个缓冲区中的内容。
(12) Input属性
该属性表示从接收缓冲区移走一串字符,将缓冲区中收到的数据读入变量。
属性值为Variant型变量。
注意:当InPutMode属性值为0(文本模式)时,变量中含String型数据。
当InputMode 属性值为1(二进制模式)时,变量中含Byte型数组数据。
(13) RThreshold属性
该属性为一阀值,当接收缓冲区内字节个数达到或超过该值后就产生OnComm事件,并且CommEvent属性会被设定为ComEvReceive。
如果该值为0(默认值),则无论有多少数据输入缓冲区都不会产生OnComm事件。
(14) InputMode属性
该属性用于设置或返回接收数据的类型。
若取值为0,则用Input属性接收文本型数据。
取值为1,则用Input属性接收二进制数据。
(15)CommEvent属性
如果在通信过程中发生错误或事件,将会引发OnComm事件并且改变其属性值。
CommEvent属性代码反映错误或事件类型,在通信程序的设计中可根据该属性值来执行不同的操作。
通信错误的设定值如下表一所示,通信事件常数的设定值如下表二所示。
表一:通信错误设定值
表二:通信事件常数设定值
(16) EOFEnable属性
该属性若设置为TRUE,则当输入中出现EOF,停止输入并产生OnComm事件。
(17) DTSEnable属性
该属性确定在通信时是否使Data Terminal Ready(DTR)线有效。
Data Terminal Ready 是计算机发送到调制解调器的信号,指示计算机在等待接受传输。
(18) RTSEnable属性
该属性确定是否使Request To Send线有效。
一般情况下,由计算机发送Request To Send 信号到连接的调制解调器,以请示允许发送数据。
(19) DSRHolding属性
该属性确定Data Set Ready(DSR)线的状态。
Data Set Ready信号由调制解调器发送到相连的计算机,指示作好操作准备。
该属性在设计时无效,在运行时为只读。
(20) CTSHolding属性
该属性确定是否可通过查询Clear To Send(CTS)线的状态发送数据。
Clear To Send 是调制解调器发送到相连计算机的信号,指示传输可以进行。
该属性在设计时无效,在运行时为只读。
(21) CDHolding属性
该属性可以通过查询Carrier Detect(CD)线的状态确定当前是否有传输。
Carrier Detect是从调制解调器发送到相连计算机的信号,指示调制解调器正在联机。
该属性在设计时无效,在运行时为只读。
4、MSComm控件的事件
MSComm控件只有一个事件,即OnComm事件。
利用MSComm控件编写的应用程序在通信过程中若发生错误或事件,将会引发OnComm 事件并且改变其属性值,并由CommEvent属性代码反映错误类型。
在通信程序的设计中可根据CommEvent属性值来执行不同的操作。
5、利用MSComm控件的通信步骤
通常按照下面步骤使用VB的MSComm控件进行通信控制。
●加入MSComm对象;
●设定通信端口号码,即CommPort属性;
●设定通信协议,即HandShaking属性;
●设定传输速度等参数,即Settings属性;
●设置其他参数,若必要时再加上其他的属性设定;
●开启通信端口,即将PortOpen属性设定为TRUE;
●使用Input或Output属性,送出字符串或读入字符串;
●使用完MSComm通信对象后,将通信端口关闭。