Mscomm控件属性、方法及事件

合集下载

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控件使用详解

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控件属性与事件

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功能介绍

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控件的用法和函数说明

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控件属性

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控件

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_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 事件。

MSComm控件使用总结

MSComm控件使用总结

MSComm控件在VS2010和VC6++中是不同的,下面以VS2010中为例,说明该控件的使用:1、打开串口,并初始化void CSMommTestDlg::OnBnClickedBtn(){// TODO: 在此添加控件通知处理程序代码if (m_Comm.get_PortOpen())//如果发现串口原来是打开的,关闭串口m_Comm.put_PortOpen(FALSE);m_Comm.put_CommPort(1);//选择COM1端口m_Comm.put_InBufferSize(1024);//设置输入缓冲区大小m_Comm.put_OutBufferSize(512);//设置输出缓冲区大小m_Comm.put_Settings("9600,n,8,1");//设置波特率9600,无校验,8个数据位,1个停止位if (!m_Comm.get_PortOpen()){m_Comm.put_PortOpen(TRUE);//打开串口m_Comm.put_RThreshold(1);//每当接收缓冲区中有1个字符,则接收串口数据m_Comm.put_InputLen(0);//设置当前缓冲区长度为0m_Comm.get_Input();//预读缓冲区以清除残留数据}else{AfxMessageBox("打开端口失败!");}}2、OnComm事件处理,当接受到信息的时候会触发这一事件void CSMommTestDlg::OnCommMscomm(){// TODO: 在此处添加消息处理程序代码VARIANT variant_inp;COleSafeArray safearray_inp;CString strInput;if (m_Comm.get_CommEvent()==2)//值为2表示接收缓冲区内有字符{variant_inp=m_Comm.get_Input();//读取缓冲区消息strInput=variant_inp.bstrVal;SetDlgItemText(IDC_EDIT_RECV,strInput);}}3、发送消息void CSMommTestDlg::OnSendClickedBtn(){// TODO: 在此添加控件通知处理程序代码CString str;GetDlgItemText(IDC_EDIT_SEND,str);m_Comm.put_Output(COleVariant(str));//发送数据}。

msm控件的用法和函数说明

msm控件的用法和函数说明

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(非法属性值)。

Mscomm控件属性、方法及事件

Mscomm控件属性、方法及事件

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将会利用该串口和外界通信。

MSComm控件

MSComm控件

MSComm控件MSComm控件提供了两种处理通信的方法:1.事件驱动通信,是一种功能很强的处理串口活动的方法。

在大多数情况下,用户需要获知事件发生的时间,例如,在CD(Carrier Detect)线或RTS(Request To Send)线上有字符到达或发生了改变等。

在这种情况下,使用MSComm控件的OnComm事件捕获和处理这些通信事件。

OnComm也可以捕获和处理通信中的错误。

要获取所有事件和通信错误的完整清单,请参阅CommEvent属性。

2.用户也可以在每个重要的程序功能之后检查CommEvent属性的值来检测事件和通信错误。

这对小的自含程序可能比较常用。

例如,如果编写一个简单的电话拨号程序,那么在接收了每个字符后都产生一个事件并没有意义,因为你只打算从调制解调器中接收OK响应信息。

使用的每个MSComm控件都与一个串口对应。

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

可以在Windows 控制面板中修改串口地址的中断地址。

MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。

属性描述CommPort 设置并返回通讯端口号。

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

PortOpen 设置并返回通讯端口的状态。

也可以打开和关闭端口。

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

Output 向传输缓冲区写一个字符串。

如何使用://以VC++为例:首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。

此时,你只需要关心控件提供的对Windows 通讯驱动程序的API 函数的接口。

换句话说,只需要设置和监视MSComm控件的属性和事件。

打开所需串口后,需要考虑串口通信的时机。

VBmscomm串口控件及及51单片机通讯使用指南

VBmscomm串口控件及及51单片机通讯使用指南

一、概述串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC间的通讯以及PC和单片机之间的通讯之中。

提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。

实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通讯,甚至其实现方法和C、汇编相比,要更加快捷方便。

下面,笔者就介绍一下在VB中实现串口通讯的方法。

在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。

我们只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。

下面,笔者就简要地介绍一下MSComm控件的使用方法。

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

以下是MSComm控件的常用属性和方法:●Commport:设置通讯所占用的串口号。

如设成1(默认值),表示对Com1进行操作。

语法 mPort[value ] (value 一整型值,说明端口号。

)说明在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。

但是如果用PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。

注意:必须在打开端口之前设置 CommPort 属性。

●CTSHolding 属性:确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。

Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。

该属性在设计时无效,在运行时为只读。

语法: object.CTSHolding(Boolean)Mscomm 控件的 CTSHolding 属性设置值:True Clear To Send 线为高电平。

MSComm控件之属性

MSComm控件之属性

事件或错误返回下列值
常量
ComEventBreak ComEventCTSTO ComEventDSRTO ComEventFrame ComEventOverrun ComEventCDTO

1001 1002 1003 1004 1006 1007
描述
收到了断开信号 Clear To Send Timeout。在发送字符时,在系统指定的事 1 件内, CTS(Clear To Send)线是低电平 Data Set Ready Timeout。在发送字符时,在系统指定的事件内, DSR(Data Set Ready)线是低电平 数据帧错误。硬件检测到一个数据帧错误 端口溢出。硬件中的字符尚未读,下一个字符又到达,并且丢失 Carrier Detect Time。在发送字符时,在系统指定的事件内,CD (Carrier Detect) 线是低电平。 也称为 RLSD CD (Receive Line Singal Detect,接收线信号检测) 接收缓冲区溢出。在接收缓冲区中没有空间 奇偶校验错。硬件检测到奇偶校验错误 7 发送缓冲区满。在对发送字符排队时,发送缓冲区满 检取端口 DCB (Device Control Blick) 时发生了没有预料到的错误
ComEvEOF

MSComm 控件可捕获的错误消息
常量 ComInvalidPropertyvalue ComSetNotSupported ComGetNotSupported ComPortOpen ComPortInvalid 值 380 383 394 8000 8001 8002 8003 8004 ComPortAleadyOpen 8005 8006 8007 8008 8009 8010 8011 ComNoOpen 8012 8013 8014 ComSetCommStateFailed ComPortNotOpen ComReadError ComDCBError 8015 8016 8018 8019 8020 8021 描述 无效的属性值 属性只读 属性只读 端口打开时该存在无效 超时设置必须比 0 值大 无效的端口号 属性只在运行时有效 属性在运行时是只读的 端口已经打开 设备标识符无效或不支持 不支持设备的波特率 指定的字节大小无效 缺省参数错误 硬件不可用(被其他设备锁住) 函数不能分配队列 设备没有打开 设备已经打开 不能使用通信通知 不能设置通信状态 不能设置通信事件屏蔽 该存在只在端口打开是有效 设备忙 通信设备读错误 检取端口设备控制块时出现内部错误

mscom控件详解龚建伟

mscom控件详解龚建伟

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 控件。

1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。

如果应用程序较小,并且是自保持的,这种方法可能是更可取的。

例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

MSCOMM控件的属性

MSCOMM控件的属性

MSCOMM控件的属性●CommPort :设置或返回端口代号。

VB中有16个端口限制。

mPort=1 ‘使用Com1端口●Setting :设置初始化参数。

以字符串形式设置或传回连接速度,奇偶校验,数据位,停止位等4个参数。

如“9600,N,8,1”,奇为O,偶为E。

MSComm1.Setting=”9600,N,8,1”●Input :从输入寄存器传回并移除已被读取的字符。

Buffer=MSComm1.Input ,读入Buffer字符串变量中●Output : 写入输出寄存器●InputLen:指定由串行端口读入的字符串长度。

默认值为0,此值会使得控件的Input指令一次读取所有输入缓冲区的数据。

如果我们需要对固定的字符串长度做特别的运算时,要设置该属性。

●HandShaking :指定通信两方的握手协议。

握手协议要做的就是数据传输速度的控制,也称为”流量控制(Flow Control)”。

简单说,如果一方送出的数据的速度超过另一方所能处理的速度,接收方便会要求传送方暂停送出数据。

RTS/CTS 握手协议是硬件握手协议,它用RTS脚位及CTS脚位的功能。

XON/XOFF 即软件握手协议。

它使用XON表示暂停数据的传送;而使用XOFF 表示恢复传送。

其中由于XON使用chr(19)作为控制信号,若所传送的数据中含有chr(19)字符,将使得传送暂停,而发生错误。

●Rthreshold: 设置或返回接收事件的字符数。

当接收寄存器达到所设置的字符数时,将会引发Oncomm事件中的接收事件。

默认为0。

表示无论寄存器有多少字符均不会引发接收事件。

●CommEvent:只要由通信错误或事件发生时都会产生Oncomm事件。

●DTREnable:判断在通信时是否启用Data Terminal Ready(DTR)线路。

DTR是由计算机传送到调制解调器的信号,指示计算机在等待接收传输。

当设为True时,DTR线会在连接端口打开时置高电位。

MSComm控件属性详解

MSComm控件属性详解

MSComm控件属性详解必须要熟悉的几个——CommPort:设置并返回通信端口号;Setting:以字符串的形式设置并返回数据传输速率、奇偶校验、数据比特、停止比特;PortOpen:设置并返回通信端口的状态,也可以打开和关闭端口;Input:从接收缓冲区返回和删除字符;Output:向传输缓冲区定一个字符串1) CommPort属性void SetCommPort(short nNewValue); short GetCommPort();这一属性设置并返回连接的串行端口号,Windows将会利用该串口和外界通信。

在设计时,nNewValue可以设置成从1~16的任何数(默认值为 1)。

但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。

注意:必须在打开端口之前设置CommPort属性。

2) Settings属性void Settings(LPCTSTR lpszNewValue); String GetSettings();该属性用于设置并返回数据传输速率、奇偶校验、数据比特、停止比特参数。

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

其中lpszNewValue用字符串表示,由四个设置值组成,有如下的组成格式:“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、12800、25600。

奇偶校验值可以是设置为下表的任一值。

设定值描述E偶校验(EVEN)M标号校验(MARK)N无校验(NONE)O奇校验(ODD)S空格校验(SPACE)数据比特数可以是4、5、6、7、8。

MSComm详解应用

MSComm详解应用

MSComm应用详解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 控件。

1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

在程式的每个关键功能之后,能够通过检查CommEvent 属性的值来查询事件和错误。

假如应用程式较小,并且是自保持的,这种方法可能是更可取的。

例如,假如写一个简单的电话拨号程式,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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通信对象后,将通信端口关闭。

相关文档
最新文档