comport控件的使用
- 格式:doc
- 大小:22.00 KB
- 文档页数:2
Delphi中ComPort通信中的数据处理1.串口通信的基本原理:一般计算机与外部设备通讯有两种方式:并行传送(Parallel ):一次的传输量为8个位(1字节),通过并行端口,如打印机串行传送(Serial ):一次只传输1个位,通过串行端口,如RS-232位与字节的概念:二进制中的每一位0和1,被叫做一个位,每8个位构成一个字节一个字节中最右面的位被称为第0位,最左面的位被称为第7位。
传输过程中的字节类型:一般有两种。
1.文本(字符字母、标点符号等)在计算机中存储时,每个不同的字符都用不同的数值来表示。
这些数值的范围通常在0-127或0-255范围。
7位:ASCII码,每个字节留一个备用位8位:前128个遵循ASCII码规则,其余的128个用来做扩展字符、数字符号、图形字符等编码。
2.二进制数据:某些可执行指令文件和图形图像文件就是以二进制形式而不是ASCII码形式存储的。
一个数据可用二进制形式存储,可以占多个字节。
在通信领域,常常把这种类型的资料叫做二进制数据。
今天要讲的就是有关二进制数据的处理方法。
几个概念:波特率:每秒所能产生的最大电压状态改变率(一秒钟可以振荡的次数)bps 通信双方必须要取得一样的通信速度。
原始信号经过不一样的波特率取样后,所得的结果完全不一样,如取样速度只有原来一半时,信号被跳着取样,数据因此错误。
数据位:有5,6,7,8四种停止位:在奇偶位(选择有奇偶校验)或数据位(选择无奇偶校验)之后发送或接收的停止位。
停止位的长度可在1、1.5或2位三者中选择)。
奇偶校验位:数据传输之后是可供选择的奇偶校验位发送和接收。
奇偶位的状态取决于选择的奇偶校验类型。
如果选择奇校验,则该字符数据中为1的位数与校验位相加,结果应为奇数。
可选奇,偶或无。
如果要保证通讯畅通。
通讯双方以上4项设置必须一致。
一个字节是8位,数据位可以7位,然后一位校验位就8位了。
这些参数可以自己设置。
但是如果要保证通讯畅通。
MSComm控件提供了两种处理通信的方式:一种为事件驱动方式,该方式相当于一般程序设计中的中断方式。
当串口发生事件或错误时,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中怎样用mscomm控件实现串口通信本问分两部分均来自第一部分jessezappy(晶晶)================================================================================== If MSComm1.PortOpen Then MSComm1.PortOpen = FalsemPort = 1 '假定是用COM1口' 设定传输速率等,可依照您的需求更改MSComm1.Settings = "9600,N,8,1"MSComm1.PortOpen = True'---------初始化Modem-------------MSComm1.Output = "ATZ"MSComm1.Output = "AT&F"MSComm1.Output = "ATE0"MSComm1.Output = "ATM1"MSComm1.Output = "ATQ0"MSComm1.Output = "ATV0"'--------------------------拨号-------------MSComm1.Output ="ATDT163" '拨163'---------------------------接通后MSComm1.Output ="SDFJDKSJLKFA" '发送字符串'---------------------Private Sub MSComm1_OnComm() '用串口事件捕捉数据..If MSComm1.InBufferCount Then' 通讯埠中假如有资料的话, 则读取进来InStringB = InStringB & MSComm1.Input' 如果资料中有Chr(13) 和Chr(10) 的话, 则显示出来If InStr(InStringB, vbCrLf) Theninstring = instring & InStringBAddText Text3, InStringB, FalseInStringB = ""End IfEnd IfEND SUB'-------------------------挂断--------MSComm1.PortOpen = False '这个挂断方法不能适用所有MODEM,我正在研究...通用办法================================================================================================第二部分:===========================================================================最后借你一篇文章看,作者不是我,里面的不一定都对..'-----------------------------------------------------------VB Mscomm控件应用江苏戚墅堰机车车辆厂设计处(213011) 李秉璋--------------------------------------------------------------------------------Visual Basic 6.0(以下简称VB) 是一种功能强大、简单易学的程序设计语言。
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控件使用详解目次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控件属性与事件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事件。
Winform串⼝编程---接收数据demo(VSPD虚拟串⼝)参考地址:https:///memgxingfeixiang/article/details/52513970 https:///kevin_iot/article/details/53926599⼀、需求概述 应⽤场景:winform中能接收到串⼝发送的数据。
所需软件: Configure Virtual Serial Port Driver(虚拟串⼝模拟软件)、串⼝调试助⼿。
⼆、效果展⽰(很简陋,捂脸中......)说明:cmbPort是电脑上所有串⼝的列表,txtReciveData是每次该串⼝接收的数据,btnOpenOrClose按钮是控制打开/关闭串⼝。
三、具体实现:(1)先在Load事件⾥将comPort控件绑定电脑串⼝列表,代码如下:1#region初始化电脑上的串⼝列表2foreach (string sPort in SerialPort.GetPortNames())3 {4 cmbPort.Items.Add(sPort);5 }67//串⼝设置默认选项8if (cmbPort.Items.Count>0)9 {10 cmbPort.SelectedIndex = 0;11 }12#endregion(2)编写btnOpenOrClose点击事件1///<summary>2///打开/关闭串⼝3///</summary>4///<param name="sender"></param>5///<param name="e"></param>6private void btnOpenOrClose_Click(object sender, EventArgs e)7 {8try9 {10if (btnOpenOrClose.Text == "打开串⼝")11 {12 btnOpenOrClose.Text = "关闭串⼝";13//设置串⼝的基本属性14 serialPort.PortName = cmbPort.SelectedItem.ToString();15 serialPort.BaudRate = 9600;16 serialPort.Parity = Parity.None;17 serialPort.DataBits = 8;18 serialPort.StopBits = StopBits.One;19 serialPort.Open();20 }21else22 {23 btnOpenOrClose.Text = "打开串⼝";24 serialPort.Close();25 }26 }27catch (Exception ex)28 {29 MessageBox.Show(ex.Message, "错误提⽰", MessageBoxButtons.OK, MessageBoxIcon.Error);30return;31 }32 }(3)编写接收串⼝数据⽅法1void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e)2 {3try4 {5 Byte[] InputBuf = new Byte[128];6 serialPort.Read(InputBuf, 0, serialPort.BytesToRead);78 ASCIIEncoding encoding = new ASCIIEncoding();9 data = encoding.GetString(InputBuf);10new Thread(SetReceiveData).Start();11//直接调⽤会报错-------从不是创建控件”txtContent”的线程访问它12//SetReceiveData();13 }14catch (Exception ex)15 {16 MessageBox.Show(ex.Message, "错误提⽰", MessageBoxButtons.OK, MessageBoxIcon.Error);17return;18 }19 }接收数据成功,调⽤下⾯的⽅法,将发送的数据显⽰到⽂本框中。
---- 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位通讯程序)可方便实现串口通讯。
Delphi中ComPort通信中的数据处理一、概述在Delphi中使用ComPort组件进行串口通信时,数据处理是非常重要的一部分。
本文将详细介绍如何在Delphi中进行ComPort通信中的数据处理,包括数据的接收和发送,以及数据的解析和处理。
二、数据接收1. 打开串口在进行数据接收之前,首先需要打开串口。
可以使用ComPort组件的Open方法来打开串口,例如:ComPort1.Open;其中,ComPort1是已经在Delphi窗体上放置的ComPort组件的名称。
2. 接收数据接收数据的方式有两种:同步方式和异步方式。
- 同步方式:使用ComPort组件的Read方法来进行数据的同步接收。
例如:varData: AnsiString;beginComPort1.Read(Data, ComPort1.InputCount);end其中,Data是一个AnsiString类型的变量,用于存储接收到的数据。
ComPort1.InputCount表示当前串口缓冲区中的数据字节数。
- 异步方式:使用ComPort组件的OnRxChar事件来进行数据的异步接收。
例如:procedure Port1RxChar(Sender: TObject; Count: Integer);varData: AnsiString;beginSetLength(Data, Count);ComPort1.Read(Data[1], Count);end其中,Count表示本次接收到的数据字节数。
3. 关闭串口在数据接收完成后,需要关闭串口。
可以使用ComPort组件的Close方法来关闭串口,例如:ComPort1.Close;三、数据发送1. 打开串口在进行数据发送之前,同样需要先打开串口。
2. 发送数据发送数据可以使用ComPort组件的Write方法来实现。
例如:varData: AnsiString;beginData := 'Hello, World!';ComPort1.Write(Data[1], Length(Data));end其中,Data是一个AnsiString类型的变量,存储需要发送的数据。