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

MFC下的MSCOMM控件用于串口通信的几个例子

MFC下的MSCOMM控件用于串口通信的几个例子

MFC下的MSCOMM控件用于串口通信的几个例子MFC下的MSCOMM控件用于串口通信的几个例子VC基于MSCOMM控件串口通讯(转)/hanhaitianyu/blog/item/0c4cc0ef5d344 ef7b3fb9526.html在mfc中进行串口通讯最简单的方法莫过于在对话框中使用MSCOMM控件了,MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem).还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工、事件驱动的、高效实用的通信程序。

一、用MSComm控件通信1.串口通信基础知识一般悦来,计算机都有一个或多个串行端口,它们依次为com1、Com2、…,这些串口还提供了外部设备与pC进行数据传输和通信的通道。

这些串口在CPU和外设之间充当解释器的角色。

当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据,当用通信控件或声明调用API函数时,它门由COMM. DRV解释并传递给设备驱动程序,作为一个程序员,要编写通信程序.只需知道通信控件提供给Windows通信AP1函数的接口即可.换句话说,只需设定和监视通信控件的属性和事件即可。

2.使用Mscomm控件在开始使用MSComm控件之前。

需要先了解其属性、事件或错误属性描述CommPort 设置或返回通信端口号Settings 以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位PortOpen 设置或返回通信端口的状态。

也可以打开和关闭端口Input 返回和删除接收缓冲区中的字符Output 将字符串写入发送缓冲区CommEvent属性为通信事件或错误返回下列值之一。

vc串口通讯控件MSComm编程详解

vc串口通讯控件MSComm编程详解

vc串口通讯控件MSComm编程详解在mfc中进行串口通讯最简单的方法莫过于在对话框中使用MSCOMM控件了,MSComm 通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem).还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工、事件驱动的、高效实用的通信程序。

一、用MSComm控件通信1.串口通信基础知识一般悦来,计算机都有一个或多个串行端口,它们依次为com1、Com2、…,这些串口还提供了外部设备与pC进行数据传输和皿信的通道。

这些串口在CPU和外设之间充当解释器的角色。

当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据,当用通信控件或声明调用API函数时,它门由COMM. DRV解释并传递给设备驱动程序,作为一个vB程序员,要编写通信程序.只需知道通信控件提供给Windows通信AP1函数的接口即可.换句话说,只需设定和监视通信控件的属性和事件即可。

2.使用Mscomm控件在开始使用MSComm控件之前。

需要先了解其属性、事件或错误属性描述CommPort 设置或返回通信端口号Settings 以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位PortOpen 设置或返回通信端口的状态。

也可以打开和关闭端口Input 返回和删除接收缓冲区中的字符Output 将字符串写入发送缓冲区CommEvent属性为通信事件或错误返回下列值之一。

在该控件的对象库中也可以找到这些常量。

常量值描述ComEventBreak 1001 收到了断开信号ComEventCTSTO 1002 Clear To Send Timeout。

MSComm控件的应用(串口编程)

MSComm控件的应用(串口编程)

MSComm控件的应用(串口编程)MSComm控件通过串行端口发送和接收数据,为应用程序提供了串行通讯功能。

在基于对话框的应用程序中加入一个MSComm控件非常简单。

只需打开“Project->AddToProject->Components and Controls->Registered Activex Controls”,然后选择控件:Microsoft Communication Control,version 6.0插入到当前的工程中。

CMS m类的相关文件 mscomm.cpp 和 mscomm.h 就加到工程中了。

从工具箱中把MSComm控件拖到对话框上,给控件关联成员变量m_Comm。

1.初始化串口,一般在OnInitDialog()函数中m_Comm.SetCommPort(1); //选择COM1m_Comm.SetInputMode(1); //设置数据通讯格式为二进制数组格式0.为文本格式//1.为二进制数组格式m_Comm.SetSettings("9600,n,8,1");//设置波特率为9600bps,无奇偶校验位,数据位8//位,停止位1位m_Comm.SetRThreshold(1); //设置为每次接到一个字节数据就触发OnComm事件m_Comm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取波特率:110、300、600、1200、2400、4800、9600、14400、19200、28800、38400、115200 奇偶校验:E偶校验、M标号校验、N无校验、O奇校验、S空格校验数据位:4、5、6、7、8停止位:1、1.5、22.打开串口if(!m_Comm.GetPortOpen()) //如果串口是关闭的,则行打开串口{m_Comm.SetPortOpen(true);m_Comm.GetInput(); //清除串口输入缓冲区中残留数据}else{AfxMessageBox("串口打开失败!");}3.关闭串口if(m_Comm.GetPortOpen()){m_Comm.SetPortOpen(false);}4.接受数据,OnComm()函数中,数据保存在RcvData中VARIANT m_input;char *str;int len,nEvent;CString RcvData;nEvent = m_Comm.GetCommEvent();switch(nEvent){case 2:len=m_Comm.GetInBufferCount(); //接收缓冲区的字符数目if(len>0){m_input=m_Comm.GetInput();str=(char*)(unsigned char*)m_input.parray->pvData;}*(str+len) = '\0’;RcvData.Format("%s", str);}5.发送数据,把str数据发送出去int i,Count;Count=str.GetLength();CByteArray m_Array;m_Array.RemoveAll();m_Array.SetSize(Count);for(i=0;i<Count;i++){m_Array.SetAt(i,str[i]);}m_Comm.SetOutput(COleVariant(m_Array));。

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控件使用详解龚建伟:这篇东西来不及好好整理,因有朋友经常提及,先放在这里,如果有必要,再详细理顺一下,更为详细的信息请去看MSDN。

摘要:本文详细介绍了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 属性。

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

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

Value 由四个设置值组成,有如下格式:“BBBB,P,D,S”
BBBB:波特率P: 奇偶校验,D:数据位数,S:停止位数
Value的缺省值:“9600,N,8,1”。

3.PortOpen:用于打开或关闭串口,或者返回串口的开、关状态
Void CMSComm::SetPortOpen(BOOL bNewValue);
BOOL CMSComm::GetPortOpen();
说明:bNewValue值设置为TRUE,则打开串口;bNewValue值设置为FALSE,则关闭串口。

编程时可以再程序中打开或关闭串口,当程序终止,MSComm控件自动关闭串口。

4.InPut:从接收缓冲区内读出数据
VARIANT CMSComm::GetInPut();
说明:返回数据类型为VARIANT型变量,该属性在串口没有打开时不能用,在运行时是只读的。

InPutMode=0时(检取数据为文本方式),变量中含String型数据。

InPutMode=1时(检取数据位二进制方式),变量中含Byte型数据。

5.OutPut:向发送缓冲区写数据,或返回发送缓冲区当前的数据
Void CMSComm::SetOutPut(const VARIANT& newValue);
VARIANT CMSComm::GetOutPort();
说明:变量类型为VARIANT,该属性在串口未打开时不可用。

OutPut可以发送文本或二进制数据,当发送文本类型数据时,将字符型数据放入VARIANT型变量中;发送二进制数据时(按字节发送),将字节型数据放入VARIANT型变量中。

若数据中包含了内嵌控制字符。

空字符等,必须将其作为二进制数据发送。

6.InputLen:设置并返回Input属性从接收缓冲区读取的字符数。

Void CMSComm::SetInputLen(short nNewValue);
Short CMSComm::GetInputLen();
说明:InputLen属性的缺省值是0.设置InputLen为0时,使用Input将使MSComm控件读取接收缓冲区
中全部的内容。

若接受缓冲区中InputLen字符无效,Input属性返回一个零长度字符串(“”)。

在使用Input前,用户可以选择检查InBufferCount来确定缓冲区中是否已有需要数目的字符。

该属性在从输出格式为定长数据的机
器读取数据时非常有用。

7.InBufferSize:设置或返回输入缓冲区的大小。

VoidCMSComm::SetInBufferSize(short nNewValue);
Short CMSComm::GetInBufferSize();
说明:设置值的缺省值(默认值大小为1024字节(byte))。

8.OutBufferSize:设置或返回发送缓冲区内的大小。

VoidCMSComm::SetOutBufferSize(short nNewValue);
Short CMSComm::GetOutBufferSize();
说明:设置值的缺省值,默认值大小为512字节(byte),此值太小,缓冲区数据易溢出,太大会占不必
要的内存。

9.InBufferCount:设置或返回输入缓冲区内等待读取的字节个数。

Void CMSComm::SetInBufferCount(short nNewValue);
Short CMSComm::GetInBufferCount();
说明:当设置InBufferCount属性值为0时,可以清空接收缓冲区。

10.OutBufferCount:设置或返回输入缓冲区内等待读取的字节个数。

Void CMSComm::SetOutBufferCount(short nNewValue);
Short CMSComm::GetOutBufferCount();
说明:当设置InBufferCount属性值为0时,可以清空发送缓冲区。

相关文档
最新文档