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属性:从接收缓冲区中读出数据,然后将该数据从缓冲区移走。
MSComm的常用属性
2.20、MSComm的常用属性属性说明(Name)MSComm控件的名称(自定义)打开属性页CommPort获得或设置通讯端口号DTREnable 决定在通讯过程中是否使数据终端机状态线有效。
取值为:TrueFalseEOFEnable 获得或设置是否搜索EOF字符。
取值为:TrueFalseHandshaking 获得或设置软件的握手协议。
取值为:0 comNone1 comXOnXoff2 comRTS3 comRTSXOnXOffInBufferSize获得或设置接收缓冲区的大小,以字节数为单位。
Index在对象数组中的编号InputLen获得或设置输入属性从接收缓冲区读出的字符数。
InputMode 获得或设置输入属性检索的数据类型。
取值为:0 comInputModeText1 comInputModeBinaryLeft距离容器左边框的距离NullDiscard 决定是否将空字符串从端口传送到接收缓冲区。
取值为:TrueFalseOutBufferSize获得或设置传输缓冲区中的字符数ParityReplace获得或设置当出现奇偶校验错误时,用来替换数据流中无效字符的字符。
RThreshold获得或设置要接受的字符数。
RTSEnable 决定能否使行有效。
取值为:TrueFalseSettings获得或设置波特率、奇偶校验、数据位和停止位参数。
SThreshold获得或设置传输中所能允许的最小字符数Tag存储程序所需的附加数据Top距容器顶部边界的距离。
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控件应用讲义
第12章 VB应用12.1 MSComm控件可以通过它对计算机的RS-23串行通信口进行读写操作1.主要属性设置:(1)CommPort属性:设置通信端口,一般计算机上1-2个RS-232口,由此属性指定使用哪个口,设定其值为1则表示使用1端口。
(2)Settings 属性:默认值“9600,n,8,1”。
9600——波特率n ——效验方式。
“n”不效验8 ——数据位1 ——停止位(3)Sthreshold 属性:设置要返回多少个字符才发生MSComm1_OnComm事件2.两台计算机串行通信的硬件接线A计算机的串口2脚(发送)——B计算机的串口3脚(接收)A计算机的串口3脚(接收)——B计算机的串口2脚(发送)A计算机的串口5脚(地)——B计算机的串口5脚(地)1.读写操作Private Sub Command1_Click() '发送MSComm1.Output = Text1.TextEnd SubPrivate Sub Command2_Click() '清空1Text1.Text = ""End SubPrivate Sub Command3_Click() '发送Text2.Text = MSComm1.InputEnd SubPrivate Sub Command4_Click() '清空2Text2.Text = ""End SubPrivate Sub Form_Load()MSComm1.PortOpen = TrueEnd Sub4.应用MSComm1_OnComm事件自动接收设置Sthreshold 属性为1,当有一个及以上字符进入串行口,发生MSComm1_OnComm事件。
Private Sub MSComm1_OnComm()Text2.Text = Text2.Text + MSComm1.InputEnd Sub。
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事件。
MSComm控件使用详解
MSComm控件使用详解2008-04-06 19:15:39| 分类:Windows编程|举报|字号订阅MSComm控件使用详解MSComm控件的常用属性1.MSComm1.Settings:=’9600,n,8,1’; //设置波特率,校验位,数据位,停止位Settings属性: 设置串口的波特率,校验位,数据位,停止位, ’9600,n,8,1’表示波特率为9600,无奇偶校验,数据位为8为,1位停止位MSComm1.InBufferSize:=1024; // 接受缓冲区大小InBufferSize 属性:接收缓冲区的大小,默认值为1024,也可以自己设定,比如, MSComm1.InBufferSize:=2000,则接收缓冲区的大小为2000字节MSComm1.OutBufferSize:=1024; // 发送缓冲区大小OutBufferSize属性:发送缓冲区的大小,默认值为1024,也可以自己设定,比如,MSComm1.OutBufferSize:=2000,则发送缓冲区的大小为2000字节MSComm1.InBufferCount:=0; //清空接受缓冲区InBufferCount属性:当前接收缓冲区接收到的数据的长度, count:=MSComm1.InBufferCount,则count值就是接收缓冲区接收到的数据的长度,对InBufferCount 赋值MSComm1.InBufferCount:=0,可以清空接受缓冲区MSComm1.OutBufferCount:=0; //清空发送缓冲区OutBufferCount属性:当前发送缓冲区中数据的长度,对OutBufferCount 赋值MSComm1. OutBufferCount:=0,可以清空发送缓冲区MSComm1.InputMode:=comInputModeText;// 以文本方式取回数据MSComm1.InputMode:=comInputModeBinary; //设置接收数据模式为二进制形式InputMode属性:串口接收数据的模式, comInputModeText(0)表示以文本(ASCII)方式取回数据,comInputModeBinary(1)表示以二进制方式取回数据comInputModeText, comInputModeBinary为预定义常量,分别表示0,1 RcvByte:=MSComm1.InputInput属性:通过Input属性可以读取串口中接收到的数据,RcvByte:=MSComm1.Input表示读取串口接收到的数据,其中RcvByte的数据类型为: array of Byte 或array of Variant.在读取之前先设置RcvByte的长度:SetLength(RcvByte,len),如果一次读取所有数据,则SetLength(RcvByte, MSComm1.InBufferCount)MSComm1.Output:= OutputDatOutput属性:通过Output属性可以发送数据, MSComm1.Output:=OutputDat,则将OutputDat中的数据发送出去,其中OutputDat数据类型为array of Byte,发送前要设置OutputDat的长度, SetLength(OutputDat,len),然后向OutputDat中填入数据,再清空发送缓冲区MSComm1.OutBufferCount:=0,然后再发送MSComm1.Output:=OutputDatMSComm1.InputLen:=0;////////////// 一次读取所有数据/////////InputLen属性:一次从Input属性中读取数据的长度, MSComm1.InputLen:=1,表示一次读取一个字节,如果MSComm1.InputLen:=0,则表示一次读取全部数据MSComm1.SThreshold:=0;//一次发送所有数据,发送数据时不产生OnComm 事件SThreshold属性:通过该属性设置产生OnComm 事件(发送时产生)的阀值,若MSComm1.SThreshold:=0, 则一次发送所有数据,发送数据时不产生OnComm 事件, 若MSComm1.SThreshold:=5,当发送缓冲区的字节数从5字节减少到4字节时, 产生OnComm 事件MSComm1.RThreshold:=1;//////////// 每接收1个字节就产生一个OnComm 事件RThreshold属性: 通过该属性设置产生OnComm 事件(接收时产生)的阀值,若MSComm1.RThreshold:=0,不产生OnComm 事件,若MSComm1.RThreshold:=5,接收缓冲区每收到5字节时,则产生OnComm 事件MSComm1.PortOpen:=True; //打开串口PortOpen属性:设置端口的打开与关闭,打开端口MSComm1.PortOpen:=True,关闭端口MSComm1.PortOpen:=FalsemPort:=CommPort;CommPort属性:设置端口号, mPort:=1, 设置端口号为COM1CommEvent属性: 常用的两个comEvReceive, comEvSendOnComm 常数常数值描述comEvSend 1 发送事件。
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位通讯程序)可方便实现串口通讯。
MSComm控件在数控机床通讯中的应用_乔冰琴
自1952年美国麻省理工学院成功地试制了第一台数控机床,数控机床已成为实现柔性自动化最重要的装备,是发展柔性生产的基础。
为了实现FMC(FlexibleManufacturingCell,柔性制造单元)、FMS(FlexibleManufacturingSystem,柔性制造系统)以及进一步联网组成CIMS(ComputerIntegratedManufacturingSystem,计算机集成制造系统)的要求,一般的数控系统都具备RS232和RS422高速远距离串行接口,高档的数控系统具有DNC(DirectNumericalControl,计算机直接数控或分布式数控)接口,可以实现几台机床之间或机床与计算机之间的数据通讯。
为解决计算机与数控机床之间的信息交换和互连,同时为确保数控设备和系统的正常使用,采用MicrosoftVisualBasic通信控件MSComm开发了数控机床与计算机通讯的软件,实现了数控机床与计算机之间的信息交换。
1MSComm控件MicrosoftCommunicationsControl(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。
具体来说,MSComm控件提供了两种处理通信问题的方法:一是事件驱动方法,由MSComm控件的OnComm事件捕获并处理通信错误及事件;二是查询法,通过检查CommEvent属性的值来判断事件和错误。
MSComm控件的常用属性有:①CommPort属性:设置或返回通讯端口号。
格式为:MSComm.CommPort[=PortNumber],缺省值为1,例如:MSComm.CommPort=2,即设置当前通信串口为COM2口。
②Settings属性:设置并返回波特率、奇偶校验、数据位、停止位参数。
格式为:MSComm.Settings[=value]。
MSComm 控件的Input 属性及InputMode 属性探究
MSComm 控件的Input 属性及InputMode 属性探究最近对MSComm 控件的Input 属性研究得出一些观点,提供给各位关心串口通信的爱好者。
当设置MSComm 控件的InputMode 属性为comInputModeText时,串口是按返回接收到的ASCII码在MSComm 控件转换成Unicode码。
以下代码可揭示上述结论:Option ExplicitDim strData As VariantPrivate Sub Command1_Click()Text2 = ""End SubPrivate Sub Form_Load()Text1 = ""Text2 = ""mPort = 1MSComm1.InputMode = comInputModeText '数据通过 Input 属性以文本形式取回。
MSComm1.RThreshold = 1MSComm1.Settings = "9600,N,8,1"MSComm1.PortOpen = TrueMSComm1.InputLen = 1End SubPrivate Sub MsComm1_OnComm() '接收数据Dim BytReceived() As ByteDim strBuff As StringSelect Case mEventCase 2Text1 = ""Text3 = MSComm1.InBufferCount '接收缓冲区的字节数strBuff = MSComm1.Input 'BytReceived() = strBuff 'Dim i As IntegerFor i = 0 To UBound(BytReceived)If Len(Hex(BytReceived(i))) = 1 ThenstrData = strData & "0" & Hex(BytReceived(i))ElsestrData = strData & Hex(BytReceived(i))End IfNext'数据处理代码Dim sj As Stringsj = Right(strData, 2) & Left(strData, 2)Text1 = strDataText2 = Text2 & ChrW(Val("&H" & sj))strData = ""End SelectEnd Sub注意上述代码中设置MSComm 控件的InputMode 属性为comInputModeText,而接收是按2进制Byte字节的数组取出。
串口通信-MSComm控件使用详解
串口通信-MSComm控件使用详解2012-11-13 09:35 6988人阅读评论(0) 收藏举报控件编程 Delphi编程(13)MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。
MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。
Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。
具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。
1.MSComm控件两种处理通讯的方式1.1 事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。
在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。
在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。
OnComm 事件还可以检查和处理通讯错误。
所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。
在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。
这种方法的优点是程序响应及时,可靠性高。
每个MSComm 控件对应着一个串行端口。
如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。
1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。
在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。
如果应用程序较小,并且是自保持的,这种方法可能是更可取的。
例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。
mscomm控件使用方法
mscomm控件使用方法献花(0)4).InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。
5).InBufferCount:返回接收缓冲区内等待读取的字节数,可通过设置该属性为0来清空接收缓冲区。
8).InputLen:设置或返回接收缓冲区内用Input读入的字节数,设置该属性为0表示Input读取整个缓冲区的内容。
9).Input:从接收缓冲区读取一串字符。
10).OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。
11).OutBufferCount:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。
12).OutPut:向发送缓冲区传送一串字符。
该项目上位机采用Delphi编写,数据采集仪采用研华ADAM5510作为下位机采集实时压力数据,采用AcII方式传送数据,数据传输速率为9600bp,1位开始位,8位数据位,1位停止位,无奇偶校验位。
数据通信的具体格式为:。
程序用到的全局变量为:ReceiveStr:String;//接受Acii码字符数据字符串Setting:=9600,n,8,1;//设置通信口参数InputLen:=1;//设置Input一次从接受缓冲区读取字节数为1InBufferCount:=0;//清除接受缓冲区OutBufferCount:=0;//清除发送缓冲区InBufferSize:=50;//设置接受缓冲区为50字节OutBufferSize:=2;//设置发送缓冲区为2字节ShowMeage(串口已经打开!);end;2).数据接收与处理buffer:Olevariant;Temp:tring;cNow:Char;tmp某:Double;beginif((cLat=Chr(13))and(cNow=Chr(10)))thenbeginF1:=Trim(F1);dF1:=StrToFloat(F1);withSerieDepthdo//利用TChart绘制深度曲线begintmp某:=某Value[1]-某Value[0];Delete(0);Add某Y(某t+tmp某,dF1,,clGed);end;F1:=;end;if((cLat<>Chr(13))and(cNow<>Chr(10)))thenbeginF1:=F1+cNow;end;cLat:=cNow;end;end;3).串口关闭下面这些代码是针对发送和接收为16进制处理的。
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控件总结
有些博客乱七八糟的各种打开COM然后一堆繁琐的注册,我想说一句简单的命令就可以了,如下:Windows打开运行,并注册mscomm32.ocx文件,代码如下:regsvr32 c:\windows\SysWOW64\MSCOMM32.OCXWindows+r调出运行,输入regedit转到注册表中,如下:找到HEKY_CLASSES_ROOT项下的License项,新建主键为4250E830-6AC2-11cf-8ADB-00AA00C00905,键值为kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun的项目,如下所示(特别注意,不新建或者主键、键值出现错误,VS添加MSCOMM后还是没法找到COM控件的)。
注意这里主键和键值一个都不能错,否则VS2010添加MSCOMM控件后,还是会找不到这个控件。
我以身试法,崩溃过,因为键值缺了一个最后的5.VS2010工具箱中添加COM组件反应的确超级慢,真的要等一会会儿,然后跳出选择工具箱项,从COM组件中浏览,如下所示:此时在对话框中右键单击,添加Acticve控件,将会出现Microsoft Communications Control, version 6.0控件。
我拖人实现的原来的工程也可以开开心心的打开了啦啦啦。
MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。
MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。
Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。
具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。
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 值大 无效的端口号 属性只在运行时有效 属性在运行时是只读的 端口已经打开 设备标识符无效或不支持 不支持设备的波特率 指定的字节大小无效 缺省参数错误 硬件不可用(被其他设备锁住) 函数不能分配队列 设备没有打开 设备已经打开 不能使用通信通知 不能设置通信状态 不能设置通信事件屏蔽 该存在只在端口打开是有效 设备忙 通信设备读错误 检取端口设备控制块时出现内部错误
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 lpszNewV alue); 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 控件提供了以下的两种处理通讯的手段:事件驱动通讯是一个处理和串口交互强有力的方法。
在很多情况下,你想要一个事件发生的时间,例如:从CD(Carried Detect)或RTS(Request To Send)线到达一个字符或发生了改变。
在这种情况下,采用MSComm 控件的OnComm 事件来捕捉和处理这种通讯事件。
OnComm 事件也可以检测和处理通讯时发生的错误。
对于那些可能事件和通讯的错误,请参考CommEvent 属性。
你也可以通过检测CommEvent 属性的值来发现应用程序中的事件和出错。
每个MSComm 控件可以控制你和一个串口进行通讯。
如果需要通过应用程序访问更多的串口,必须使用更多的MSComm 控件。
端口地址和中断号可以由WINDOW S 中的控制面板来改变。
以下是MSComm 控件的主要属性:MSComm 控件属性input 属性说明:返回和设置从接收缓收区中得到的数据流。
在允许阶段该属性为只读。
不可更改语法:MSCommname.inputInput 属性、inputlen 属性和inputmode 属性是有关系的。
Inputlen 属性决定读取的字符个数。
当inputlen 属性为0时,用input 属性来读取数据时将讯取整个缓冲区中的数据。
Inputmode 属性是设置读取数据的类型。
当inputmode 属性被子设置为comin putmodetext 时,数据被读取并按照文本的形式存储在变量中;而当inputmode 属性设置为cominputmodebinary 时,则接收来的数据按照二进制形式存储在一个二进制数组中。
commevent 属性。
说明:返回最近的通讯事件和错误。
语法:mevent虽然oncomm事件在通讯错误和通讯事件发时都响应,但commevent属性为这些通讯事件和通讯错误保留出错数字码。
MSCOMM控件的常用属性和方法
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事件。
●Sthreshold:该属性亦为一阀值。
当发送缓冲区中字符数小于该值时,MSComm控件设置Commevent属性为ComEvSend,并产生OnComm事件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 lpszNewV alue); 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。
停止比特数可以是1、1.5、2。
注意:只有当通信的双方的Settings属性值都一样时,通信连接才能生效。
3)Handshaking属性这一属性用于设置或者返回硬件握手协议,也就是PC和通信设备之间为了控制流速而设定的内部协议。
属性值可以设置为下表中的任一个。
设定值值描述ComNone 0 默认值,无握手协议comXOnXOff 1 XON/XOFF握手ComRTS 2 RTS/CTS握手comRtsXOnXOff 3 RTS/CTS和XON/XOFF握手皆可4)RThreshold属性void SetRThreshold(short nNewValue); short GetRThreshold();在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm之前,RThreshold 属性设置并返回的要接收的字符数。
这里nNewValue是short型参数,说明在产生OnComm 事件之前要接收的字符数。
当接收字符后,若RThreshold属性设置为0(默认值)则不会产生OnComm事件。
否则,该属性为一阈值,当接收缓冲区内字节个数达到或超过该值后就会产生OnComm事件,例如,设置RThreshold为1,接收缓冲区收到每一个字符都会使MSComm控件产生OnComm事件。
5)CTSHolding属性void SetCTSHolding(BOOL bNewValue); BOOL GetCTSHolding();其属性设定值如下表所示。
设定值功能描述TRUE CTS线为高电平FALSE CTS线为低电平该属性确定是否可通过查询CTS线的状态发送数据。
CTS是调制解调器发送到相连计算机的信号,指示传输可以进行。
该属性在设计时无效,在运行时为只读。
如果CTS线为低电平(CTSHolding = FALSE)并且超时时,MSComm控件设置CommEvent 属性为comEventCTSTO(Clear To Send Timeout)并产生OnComm事伯。
CTS线用于RTS/CTS 硬件握手。
如果需要确定CTS线的状态,CTSHolding属性给出一种手工查询方法。
6)SThreshold属性void SetSThreshold(short nNewValue); short GetSThreshold();MSComm控件设置CommEvent属性为comEvSend并产生OnComm事件之前,设置并返回传输缓冲区中允许的最小字符数。
这里nNewValue是short型数据,代表在OnComm事件产生之前在传输缓冲区中的最小字符数。
若设置Sthreshold属性为0(默认值),数据传输事件不会产生OnComm事件。
若设置Sthreshold 属性为0,当传输缓冲区完全空时,MSComm控件产生OnComm事件。
如果在传输缓冲区的字符数小于value,CommEvent属性设置为comEvSend,并产生OnComm事件。
comEvSend 事件仅当字符数与Sthreshold交叉时被激活一次。
例如,如果Sthreshold等于5,仅当在输出队列中字符数从5降到4时,comEvSend才发生。
如果在输出队列中从没有比Sthreshold多的字符,comEvSend事件将绝不会发生。
7)InputMode属性void SetInputMode(long nNewValue); long GetInputMode();访属性用于设置或者返回传输数据的类型。
其取值和基本含义如下表所示。
设定值值描述ComInputModeText(缺省) 0 通过Input属性以文本方式取回数据ComInputModeBinary 1 通过Input属性以二进制方式取回数据8)InputLen属性void SetInputLen(short nNewValue); short GetInputLen ();该属性用于设置并返回Input属性从接收缓冲区读取的字符数。
nNewValue是short型数值,说明Input属性从接收缓冲区中读取的字符数。
InputLen属性的默认值是0。
当设置InputLen为0时,使用Input将使MSComm控件读取接收缓冲区中全部的内容。
若接收缓冲区中InputLen字符无效,Input属性返回一个零长度字符串(“”)。
在使用Input前,用户可以选择检查InBufferCount属性来确定缓冲区中是否已有需要数目的字符。
该属性在从输出格式为定长数据的机器读取数据时非常有用。
9)InBuffersize属性void SetBufferSize(short nNewValue); short GetInBufferSize();InBuffersize属性用于设置或返回输入缓冲区的大小,默认值为1024字节。
10)InBufferCount属性void SetInBufferCount(short nNewValue); short GetInBufferCount();InBufferCount属性用于返回输入缓冲区内的等待读取的字节个数,可以通过该属性值为0来清除接收缓冲区。
11)Input属性V ARIANT GetInput();Input属性表示从接收缓冲区移走一串字符,将缓冲区中收到的数据读入变量。
属性值为V ARIAN型变量。
该属性在端口未打开时不可用,在运行时是只读的。
注意:当InputMode属性值为0时(文本模式),变量中含String型数据。
当InputMode属性值为1(二进制模式),变量中含Byte型数组数据。
12)PortOpen属性void SetPortOpen(BOOL bNewValue); BOOL GetPortOpen();PortOpen属性用于打开或者关闭端口。
如果bNewV alue设为TRUE,可以打开端口;设为FALSE时可以关闭端口。
一般情况下在程序开始时打开端口,在程序结束时关闭端口。
当应用程序终止时,MSComm控件将自动关闭串口。
在打开端口前,确定CommPort属性调协为正确的端口号。
而且,用户的串口设备必须支持Settings属性中的设置。
如果硬件设备不支持Settings属性中的一些设置,则硬件工作或许不正确。
13)OutBuffersize属性void SetOutBufferSize(short nNewValue);OutBuffersize属性用于设置或者返回发送缓冲区的大小,值为整形表达式,表示传输缓冲区的字节数,默认值为512字节。
对发送缓冲区设置得越大,应用程序可以使用的内存就越小。
然而,如果发送缓冲区太小,缓冲区将会溢出,除非使用握手协议。
14)OutBufferCounter属性void SetOutBufferSize(short nNewValue); short GetOutBufferSize();OutBufferCounter属性用于返回发送缓冲区内等待发送的字节数,可以通过设置该属性为0来清空发送缓冲区。
15)Output属性void SetOutput(const V ARIANT & newValue);Output属性用于向发送缓冲区写数据流。
属性为V ARIANT变量。
该属性在端口未打开时不可用,在运行时只是写的。
注意:Output属性可以发送文本数据或二进制数据。
传输文本数据时,应该将字符型数据放入V ARIANT变量中;传输二进制数据(即按字节传送)时,应将字节型数据放入V ARIANT 型变量中。
如果通常给应用程序发送ANSI字符串,可以以文本方式发送。
如果数据包含了内嵌控制字符、NULL字符等,必须将其作为二进制传递过去。
16)CommEvent属性short GetCommEvent();如果在通信过程中发生错误或事件,将会引发OnComm事件并且改变其属性值。
CommEvent 属性值反映错误或者事件类型,通信的设计中可以根据该属性值执行同的操作。
该属性在端口未打开时不可用,在运行时是只读的。
通信错误及通信事件的设定值分别如下两表所示。
通信错误设定值设定值值描述comEventBreak 1001 接收到中断信号comEventCTSTO 1002 CTS超时comEventDSRTO 1003 DSR超时comEventFrame 1004 帧错误,硬件检测到一个帧出错,双方设置的格式不一致时,就会引发此错误comEventOverrun 1006 端口超速。
一个字符没有在下一个字符到达之前被硬件读取,该字符丢失comEventCDTO 1007 数据检测超时comEventRxOver 1008 接收缓冲区溢出comEventRxParity 1009 奇偶校验错误comEventTxFull 1010 传输缓冲区溢出,表明输出缓冲区已满,不能再将字符输出到缓冲区comEventDCB 1011 检索端口、设备控制块(DCB)时的意外错误通信事件设定值设定值值描述comEvSend 1 发送事件。