VB串口通信mscomm中传输和接收缓冲区怎么理解

供稿:hz-xin.com     日期:2025-01-21
VB中MSCOMM控件怎样实现接收到缓冲区中的数据就后先清空缓冲区再接下一次的数据

VB可通过设置MsComm控件的属性InputLen 属性为 0,并使用 Input属性将使MSComm 控件读取接收缓冲区中全部的内容。
A)InputLen 属性,设置并返回 Input 属性从接收缓冲区读取的字符数。
说明

InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使
MSComm 控件读取接收缓冲区中全部的内容。
B)Input 属性,返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。
说明

InputLen 属性确定被 Input 属性读取的字符数。设置 InputLen 为 0,则 Input
属性读取缓冲区中全部的内容。

Option Explicit
Dim sj As String
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeText
MSComm1.RThreshold = 1 '当接收缓冲区到达1-8字节产生1次OnComm事件
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case 2
sj = sj & MSComm1.Input
If Left(sj, 1) = "A" And Right(sj, 1) = "Z" Then
Text1 = Mid(sj, 2, Len(sj) - 2)
sj = ""
Else
MSComm1.PortOpen = False
sj = ""
MSComm1.PortOpen = True
End If
End Select
End Sub
回复LZ:"还有,真的别让我再用MSComm1_OnComm() 来触发啦,连续快速接收的时候真的会程序假死的!"
这种情况是存在的,就是有线连接串口通信也存在通信假四现象.但也不是不可解决的.
请参阅:
http://topic.csdn.net/u/20080220/23/f8b5fc30-7fd3-4db9-8eb0-0262b87e8089.html
http://topic.csdn.net/u/20071220/21/2dd86b50-2f5d-47b0-b4a9-3b232b493396.html

要把某个数字或者一段文字通过串行接口发送出去是一个很复杂的事。
要在铜线上严格按照通讯协议,以微秒级别的间隔发送高低电平是软件系统难以做到的。
所以,人们在串行接口芯片中预留了一些存储空间作为缓冲区。软件系统只负责将要发送的内容放进缓冲区,硬件系统只要发现缓冲区中有数据,就按照时钟晶振提供的精确时间间隔将数据转换为高低电平送到铜线上。
后来,由于硬件缓冲区很小(一般只有8个或16个字节),人们又通过软件方式在硬件缓冲区的上层再加一层软件缓冲区,其大小可以扩展至1024字节,甚至更高。这个就是MSComm控件里面的缓冲区了。
当你要发送一串数据时(比如200个),你可以直接送到MSComm里面,后面的操作全都不用管了。而实际上,MSComm会从其中按次序将16个字节送入硬件缓冲区,等硬件系统将数据发走后,再送16个…… 如此循环,直至全部发送完毕。接收缓冲区的作用与之类似。

要发送的数据先放在发送缓冲区中,然后由系统发送。
接受也是同样的道理,收下来放在缓冲区里,然后再处理

VB中MSComm控件来发送接收16进制数怎样解决?
If sNewStr = "FD" Then bFrameOver = True '接收到帧尾FD '''收集收到的串口数据 RecievesInstruction = RecievesInstruction & sNewStr If bFrameOver = True Then Text1.Text = RecievesInstruction RecievesInstruction = ""End If Next_For:Next i byteInBytes = MSComm1.Input If UBo...

VB三种读取串口数据的方式
在实际应用中,选择硬件流控制时,要求串口之间和电平之间具备硬件支持。这种方式可以确保数据传输的准确性。第二种方式是使用SerialPort类。这是一种更为底层的实现方式,适用于需要精确控制串口通信的场景。SerialPort类提供了丰富的属性和方法,可以实现更为复杂的串口通信功能。第三种方式是使用自定义的...

VB中mscomm控件的作用 请帮忙解释一下下面的代码 详细点
mscomm1.inputmode=1 '以字节方式传输 dim store()as byte '定义字节数组 dim a as variant select case mscomm1.commevent '获取串口事件 case comevreceive '接收完成 a=mscomm1.input store=a '将接收字节赋值给数组 end select

vb中MSCOMM接受和发送十六进制数据
请确认你的通讯协议是否写对了。还有设置是否符合机床,比如通讯比特率、数据位等等

求助:vb串口通信接收字符串
在VB6中,用MSCOMM控件进行串口通讯,定义一个变量strIn,打开串口后,用语句 strIn=Mscomm1.Instring 读取串口缓冲区内容即可。strIn应该是一个数组,每个数组的内容即为接收到的字符的ASCII码。strIn就是接收到的字符串。

MFC中MSComm控件的oncomm在发送数据和接收数据的时候都不触发
m_ctrlComm.SetRThreshold(1);\/\/参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据n的OComm事件 这一句是不是没有设置?

用VB怎么做COM口通讯`
建立工程文件,在菜单工程(P)下拉菜单中选部件(O),在其属性页中找MICROSOFT COMM CONTROL6.0,对选钩方框打钩,就能在工具箱中出现电话机样的MSCOMM控件.将其添加到窗体上.MSComm 控件 MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。语法 MSComm 说明 MSComm 控件提供下列两种处理通讯...

如果用VB编写一个上位机界面,如何与下位机进行通信,即数据的传输
MSComm1.CommPort = 1 '选用com1串行口 MSComm1.Settings = "9600,N,8,1" '波特率9600,无奇偶校验位,8位数据位1位停止位 MSComm1.InputLen = 0 'input将读取接收缓冲区的全部内容 MSComm1.InBufferSize = 1024 '设置接收缓冲区的字节长度 'MSComm1.PortOpen = True '打开通信口 MSComm1....

在VB中,如何用MScomm取得数据?
1、设置波特率600\/900\/1200\/2400\/4800,可以使用combox控件; 2、初始化串口,串口名称MSComm1; With MSComm1 .Settings = "波特率1200(自己设置,从1中选择),n,8,1" .CommPort = 1 '通讯端口号,请根据实际调整 .NullDiscard = False .RThreshold = 1 .InputMode = comInputModeBinary .Port...

vb问题oncomm
建立工程文件,在菜单工程(P)下拉菜单中选部件(O),在其属性页中找MICROSOFT COMM CONTROL6.0,对选钩方框打钩,就能在工具箱中出现电话机样的MSCOMM控件.将其添加到窗体上.MSComm 控件 MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。语法 MSComm 说明 MSComm 控件提供下列两种处理通讯...