串口通信控件
在delphi7中利用mscomm控件串口通信编程

Application.ProcessMessages;
i := i + 1;
If i > 30000 Then
begin
showmessage('发送超时!');
break;
end;
Until bzw = true;
redata:=mscomm1.Input; 接收数据
restr:='';
for i:=0 to vararrayhighbound(redata,1) do
restr:=restr + inttohex(redata[i],2)+' ';
sendstr:='';
for i:=1 to 5 do
sendstr:=sendstr + senddata[i];
mscomm1.output:=sendstr; //发送数据
i:=0;
bzw:考人民邮电《DELPHI串口通信编程》
-其他例子均是网络搜索。
:在delphi7中利用mscomm控件编程
Mscomm是微软一个强大的串口通讯的控件,其强大,简单的特点今我们不舍,在delphi中我们也可以使用它。下面这些代码是针对发送和接收为16进制处理的。
var
senddata:array[1..10] of char;
end;
end;
mscomm1.PortOpen:=false;
flatmemo1.Text:=restr;
end;
//oncomm事件
procedure TForm1.MSComm1Comm(Sender: TObject);
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事件。
vb串口通讯usb通讯,很有用哦

OnComm:通信控件只提供了一个事件,该事件的触发可以对串口的通信事件及错误进行处理。通过对CommEvent 属性的判断可知当前的通信错误和事件,分别对每个CommEvent 值进行编程就完成了对各个错误和事件的处理。如:CommEvent = MSCOMM—EV—SEND 表示发送事件。这些信息可从VB 提供的常量文件CONSTANT. TXT中查出。
完成发送数据后的一系列操作。如:对刚发送的数据进行处理,当串口是和MODEM通信时,发送完数据后可进行拆除线路联接、挂机等操作。
RThreshold :设置并返回不触发OnComm事件时接收缓冲区被允许的最多字符数。当缓冲区的字符多于设置的值时,则触发OnComm 事件,并把CommEvent 设为MSCOMM—EV—RECEIVE,当RThreshold = 0 则禁止接收触发OnComm 事件,当RThreshold = 1 则接收缓冲区有一个或更多字符时就触发OnComm事件。利用这一属性,就可完成对串口接收数据的处理。
comm1. OutBufferSize = 512 ′设置发送缓冲区为512 字节 comm1. InBufferSize = 512 ′设置接收缓冲区为512 字节
comm1. SThreshold = 0 ′禁止发送事件
comm1. RThreshold = 1 ′每一个字符到接收缓冲区都触发接收事件 ′设置COM2
(2)属性
CommPort :设置通信控件与哪个串口相连接,设置并返回通信口号。 Setting :设置通信的信息格式,为字符型。顺序为:波特率、校验、数据位、停止位。
PortOpen :布尔型、开关通信口。
InputLen :从接收缓冲区读取字符个数。
用Activex实现串口通信

用Activex实现串口通信为实现Windows的串口通信可用API实现,但十分不便。
也可以用Active控件实现。
先在应用程序中插入Active控件Microsoft commcontronl(MSComm)。
SComm控件的属性MSComm控件的属性CommPort:设置串口号,类型 short :1-comm1 2-comm2.Settings:设置串口通讯参数,类型 CString :B-波特率 P-奇偶性(N-无校验,E-偶校验,O-奇验) D-字节有效位数S-停止位。
PortOpen:设置或返回串口状态,类型 BOOL:TURE-打开 FALSE-关闭。
InputMode:设置从接收缓冲区读取数据的格式,类型 long: 0-Text 1-Bin.Input:从接收缓冲区读取数据类型 VARIANT。
InBufferCount:接收缓冲区中的字节数,类型:short.InBufferSize:接收缓冲区的大小,类型:short.Output:向发送缓冲区写入数据,类型:VARIANT.OutBufferCount:发送缓冲区中的字节数,类型:short.OutBufferSize:发送缓冲区的大小,类型:short.InputLen:设置或返回Input读出的字节数,类型:short.CommEvent:串口事件,类型:short.程序示例串口初始化if(!m_comm.GetPortOpen())m_comm.SetPortOpen(TURE); /*打开串口m_comm.SetSettings("4800,n,8,1"); /*串口参数设置m_comm.SetInputMode(0); /*设置TEXT缓冲区输入方式m_comm.SetRthresHold(1); /*每接收一个字符则激发OnComm()事件接收数据m_comm.SetInputLen(1); /*每次读取一个字符VARINAT V1=m_comm.GetInput(); /*读入字符m_V1=V1.bstrval;发送字符m_comm.SetOutput(COlevariant("Hello");/*发送“Hello"。
1C# SERIALPORT串口控件的使用

BaudRate
获取或设置串行波特率
BreakState
获取或设置中断信号状态
BytesToRead
获取接收缓冲区中数据的字节数
BytesToWrite
获取发送缓冲区中数据的字节数
CDHolding
获取端口的载波检测行的状态
CtsHolding
获取“可以发送”行的状态
DataBits
获取或设置每个字节的标准数据位长度
注意:用跳线使串口的第2、3针连接,可以在本地计算机上实现串口通信,所以,通过 串口的第2、3针的连接可以对程序进行检测。串口截面图如图13.2所示。
图13.2 串口截面图
实现过程
(1)新建一个项目,命名为 Ex13_01,默认窗体为 Form1。 (2)在 Form1窗体中,主要添加两个 Button 控件,分别用于执行发送数据和接受数据,添加 两个 TextBox 控件,用于输入发送数据和显示接收数据。 (3)主要程序代码。
DiscardNull
获取或设置一个值,该值指示 Null 字节在端口和接收缓冲区之 间传输时是否被忽略
DsrHolding
获取数据设置就绪 (DSR) 信号的状态
DtrEnable
获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号
Encoding
获取或设置传输前后文本转换的字节编码
的解决方式。
来源地:/jackeyrain/blog/item/f4e3ef1fa3272fcea68669c6.html
C# SerialPort 串口控件的使用 2010-10-27 11:07
现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越 普遍。例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据 传输到另一台计算 机上,那么利用串口通信就可以实现。运行本程序,在“发送数据”文本框中输入要传送的数 据,单击【发送】按钮,将传送的数据发送到所选择 的端口号中;单击【接收】按钮,传递 的数据被接收到“接收数据”文本框中。如图13.1所示。
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控件使用详解目次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

一.概述输送带控制模块的核心技术是与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类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口通信控件 Prepared on 22 November 2020附录A串行通信控件MSComm在VisualStudio(、VC++.NET、C#.NET)中编写串口通讯程序,一般都使用MicrosoftCommunicationControl(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。
但在技术广泛应用的今天,VisualStudio没有将此控件加入控件库,所以人们采用了3种方法在VisualStudio中编写串口通讯程序:第一种方法是通过采用原来的MSComm控件,这是最简单的,最方便的方法,但需要注册(可以通过安装或VC++来实现);第二种方法是采用微软在.NET中推出的一个串口控件SerialPort,方便地实现所需要串口通讯的多种功能;第三种方法是用API函数进行串口通信,虽然难度高,但可以方便实现自己想要的各种功能。
一、MScomm控件的使用MSComm控件全称为MicrosoftCommunicationsControl,是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它既可以用来提供简单的串行端口通信功能,也可以用来创建功能完备的、事件驱动的高级通信工具。
MSComm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API函数,而且在、VC++.NET、C#.NET等语言中均可使用。
使用它可以建立与串行端口的连接,通过串行端口连接到其它通信设备(例如调制解调器),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。
利用它可以进行诸如拨打电话、监视串行端口的输入数据乃至创建功能完备的终端程序等。
1.MSComm控件处理通信的方式MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通信功能。
它提供下列两种处理通信的方式:1)事件驱动方式该方式相当于一般程序设计中的中断方式。
当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。
它是处理串行端口交互作用的一种非常有效的方法。
在许多情况下,在事件发生时程序会希望得到通知,例如,在串口接收缓冲区中有一个字符到达或一个变化发生时,程序都可以利用MSComm控件的OnComm事件捕获并处理这些通信事件;OnComm事件还可以检查和处理通信错误。
在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。
在程序设计中,可以在OnComm事件处理函数中加入自己的处理代码,一旦事件发生即可自动执行该段程序。
这种方法的优点是程序响应及时,可靠性高。
2)查询方式在程序的每个关键功能之后,在用户程序中设计定时或不定时的查询,通过检查CommEvent 属性的值来查询事件和错误,从而作出相应的处理。
在进行简单应用程序设计时可采用这种方法。
例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“OK ”响应。
查询方式的进行可用计时器Timer 或Do…Loop 程序实现。
查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。
2.MSComm 控件的引用开始一个项目的设计时,、VC++.NET 、C#.NET 的工具箱中会有许多默认的控件让设计者选用,这些原本就出现在工具箱中的控件是内置控件,它提供了一些基本的系统设计组件给设计者,不过,功能比较特别的控件就不会出现在其中,而用来设计通信功能的控件MSComm 就不在其中。
由于、VC++.NET 、C#.NET 的串行通信组件MSComm 并不会主动出现在工具箱里中,当我们需要MSComm 控件时,首先要把它加入到工具箱中。
让MSComm 控件出现在工具箱中的步骤如下:执行“工具”菜单下的“选择工具箱…”子菜单,在弹出的对话框中,选择“COM 组件”选项卡,选中“MicrosoftCommunicationControlversion6.0”复选框,如图A-1所示,单击“确定”按钮后,在工具箱“组件”栏中就出现了一个形似“电话”的图标,它就是MSComm 控件,如图A-2所示。
工具箱中有了MSComm 控件,就可以选择MSComm 控件的图标后将其加到程序窗体上,利用该控件PC 机就可以通过、VC++.NET 、C#.NET实现与串口设备的串口通信了。
如果打开的是以前的项目,项目中含有MSComm 控件的引用记录,则项目会自动去搜寻MSComm 控件,并将它载入,不需要以上的步骤。
每个使用的MSComm 控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须使用多个MSComm 控件。
3.MSComm 控件的常用属性 MSComm 控件的属性很多,这里介绍串口编程中经常用到的几个重要属性。
1)CommPort 属性语法:[=Value]作用:设置或返回通信端口号。
CommPort 属性值value 可以设置为1到16之间的任何整数值(缺省值为1)表示串口COM1,COM2...。
如果用PortOpen 属性打开一个并不存在的端口,MSComm 控件会产生错误68(设备无效)。
图A-1添加MSComm 控件 图A-2工具箱中的MSComm 控件注意:必须在打开端口之前设置CommPort属性。
例如:COM2上连接有一个调制解调器:=22)Input属性语法:作用:返回并删除接收缓冲区中的数据流。
InputLen属性确定被Input属性读取的字符数。
设置InputLen为0,则Input属性读取缓冲区中全部的内容。
例如:如果希望从接收缓冲区获取数据,并将其显示在一个文本框中,可以使用下面的代码:=该属性在设计时无效,在运行时为只读。
3)InputLen属性语法:[=value]作用:设置并返回Input属性从接收缓冲区读取的字符数。
Value是整型表达式,说明Input属性从接收缓冲区中读取的字符数。
说明:InputLen属性的缺省值是0。
设置InputLen为0时,使用Input将使MSComm 控件读取接收缓冲区中全部的内容。
若接收缓冲区中InputLen字符无效,Input属性返回一个零长度字符串("")。
在使用Input前,用户可以选择检查InBufferCount属性来确定缓冲区中是否已有需要数目的字符。
该属性在从输出格式为定长数据的机器读取数据时非常有用。
如果读取以定长的数据块的形式格式化了的数据时,则需要将该属性设置为合适的值。
例如:=10'当程序执行该指令时,只会读取10个字符。
4)InputMode属性语法:[=Value]作用:设置或返回接收数据的数据类型。
InputMode属性的Value值可以设置为如下常数:0-通过Input属性以文本方式取回传入的数据。
1-通过Input属性以二进制方式取回传入的数据。
例如:=1表示以二进制方式读取数据。
5)OutPut属性语法:[=Value]作用:向传输缓冲区写数据流。
Output属性可以传输文本数据或二进制数据。
用Output属性传输文本数据,必须定义一个包含一个字符串的Variant;发送二进制数据,必须传递一个包含字节数组的Variant到Output属性。
正常情况下,如果发送一个ANSI字符串到应用程序,可以以文本数据的形式发送;如果发送包含嵌入控制字符、Null字符等数据,要以二进制形式发送。
可用Output属性发送命令、文字字符串或Byte数组数据。
例如:="ATDT551-5555"'发送AT命令串="Thisisatextstring"'发送文本字符串该属性在设计时无效,在运行时为只读。
6)PortOpen属性语法:[=Value]作用:设置或返回通信端口的状态。
设置PortOpen属性为True即打开端口,设置为False则关闭端口,并清除接收和传输缓冲区。
当应用程序终止时,MSComm控件自动关闭串行端口。
在打开端口之前,确定CommPort属性设置为一个合法的端口。
如果CommPort属性设置为一个非法的端口,则当打开该端口时,MSComm控件产生错误68(设备无效)。
串行端口设备必须支持Settings属性当前的设置值。
如果Settings属性包含硬件不支持的通信设置值,硬件可能不会正常工作。
7)Settings属性语法:[=Value]作用:设置并返回通信参数。
值Value为String型,说明通信端口的设置值。
Settings属性可以用来指定波特率、奇偶校验、数据位数和停止位数。
奇偶校验设置为了进行数据校验,通常是不用的,并设置为“N”。
数据位数指定了代表一个数据块的比特数。
停止位指出了何时接收到一个完整数据块。
例如:="9600,N,8,1"'表示传输速率为9600bps,没有奇偶校验位,8位数据位,1位停止位。
注:1)起始位:在通信线上,没有数据传送时处于逻辑“1”状态。
当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号,这个逻辑低电平就是起始位。
起始位通过通信线传向接收设备,当接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。
因此,起始位所起的作用就是表示字符传送的开始。
2)数据位:当接收设备收到起始位后,紧接着就会收到数据位,数据位的个数可以是5、6、7或8位数据。
在字符数据传送的过程中,数据位从最低有效位开始传送。
3)奇偶校验位:数据位发送完之后,就可以发送奇偶校验位。
奇偶校验用于有限差错检验,通信双方在通信时约定一致的奇偶校验方式。
就数据传送而言,奇偶校验位是冗余位,但它表示数据的一种性质,这种性质用于检错,虽然有限但很容易实现。
4)停止位:在奇偶校验位或者数据位(无奇偶校验位时)之后是停止位。
它可以是1位、位或2位,停止位是一个字符数据的结束标志。
8)RThreshold属性语法:[=value]作用:OnComm事件发生之前,设置并返回接收缓冲区可接收的字符数。
Value是整型表达式,说明在产生OnComm事件之前要接收的字符数。
当接收字符后,若Rthreshold属性设置为0(缺省值)则不产生OnComm 事件;设置Rthreshold为1,接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件。
9)SThreshold属性语法:[=value]作用:OnComm事件发生之前,设置并返回发送缓冲区中允许的最小字符数。
Value是整形表达式,代表在OnComm事件产生之前在传输缓冲区中的最小字符数。
若设置SThreshold属性为0(缺省值),数据传输事件不会产生OnComm 事件;若设置Sthreshold属性为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。