VB串口接收

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-29
vb 串口 接收 程序

Private Sub Form_Load() MSComm1.CommPort = 1 MSComm1.Settings = " 9600,n,8,1" MSComm1.InputMode = comInputModeBinary MSComm1.InputLen = 0 MSComm1.SThreshold = 1 MSComm1.RThreshold = 1 MSComm1.PortOpen = True Text5 = ""End SubPrivate Sub MSComm1_OnComm() Dim buffer As Variant Dim arr() As Byte Dim i As Long Select Case MSComm1.CommEvent Case comEvReceive buffer = MSComm1.Input arr = buffer For i = 0 To UBound(arr) Text5.Text = Text5.Text + "||" + Right("0" & Hex(arr(i)), 2) Next i MSComm1.InBufferCount = 0 End SelectEnd Sub

LZ的代码错在:
Dim send(4) As Byte
它定义的Byte数组有5个元素,所以单片机不返回数据。应该改为:
Private Sub Command1_Click() '发送HEX数据93 93 93 93
Dim send(3) As Byte
send(0) = "&H93"
send(1) = "&H93"
send(2) = "&H93"
send(3) = "&H93"
MSComm1.Output = send
End Sub
这样才发送4字节指令,此外从MSComm1.RThreshold = 34看是设置接收字节长度为34字节。

以下修改了LZde1代码,供参考:
Option Explicit Dim strdataPrivate Sub Command1_Click() '发送HEX数据93 93 93 93 Dim send(3) As Byte send(0) = "&H93" send(1) = "&H93" send(2) = "&H93" send(3) = "&H93" MSComm1.Output = sendEnd SubPrivate Sub Form_Load() '串口初始化 MSComm1.Settings = "9600,n,8,1" MSComm1.InputLen = 0 MSComm1.InputMode = comInputModeBinary MSComm1.InBufferSize = 1024 MSComm1.OutBufferSize = 512 MSComm1.RThreshold = 34 '设置接收字节长度 MSComm1.InBufferCount = 0 MSComm1.OutBufferCount = 0 MSComm1.CommPort = 1 '串口号 MSComm1.PortOpen = True Timer1.Interval = 0End SubPrivate Sub MSComm1_OnComm() Dim i As Long Dim strBuff As String Dim strdata As String Dim str() As Byte Select Case MSComm1.CommEvent Case comEvReceive strBuff = MSComm1.Input str() = strBuff For i = 0 To UBound(str) '接收16进制数据 If Len(Hex(str(i))) = 1 Then strdata = strdata & "0" & Hex(str(i)) Else strdata = strdata & Hex(str(i)) End If Next Text1.Text = strdata Call Timer1_Timer End SelectEnd SubPrivate Sub Timer1_Timer() strdata = "" MSComm1.InBufferCount = 0End Sub

Private Sub MSComm1_OnComm()
Rec = StrReverse(MSComm1.Input)

i = InStr(Rec, "G")
If i <> 0 Then Resp = Mid(Rec, i + 1, 6): GoTo aaa

j = InStr(Rec, "M")
If j <> 0 Then Resp = Mid(Rec, j + 1, 6)

aaa:
Label1.Caption = Val(StrReverse(Resp))
end sub

PC机侧可使用MSCOMM控件通过串口与模块通信,确定通信格式,采集数据。对号入座进行处理.
建议你参考“人民邮电出版社”的“VISUAL BASIC 串口通讯实例导航”一书的第一章“串口调试精灵”代码及其它几章.那些都是相当好的代码,可修改用于收发串口通信。
其它请参阅如下网址本人的答复:
http://zhidao.baidu.com/question/12535506.html
http://zhidao.baidu.com/question/12522809.html
http://zhidao.baidu.com/question/11725744.html
http://zhidao.baidu.com/question/11040704.html
http://zhidao.baidu.com/question/10941227.html

http://www.yesky.com/485/1728985_1.shtml
看一下这个,你就知道了,就是串口通讯
我做过pb的,vb的没弄过,但通讯协议都一样

  • vb串口通信中怎么实现16进制的接收?
    答:实现16进制接收实质就是按2进制接收 设置MSComm控件的属性InputMode = comInputModeBinary '二进制接收 接收后由HEX函数转为16进制字符串形式显示 Option Explicit Dim strData As String Dim bytInput() As Byte Private Sub MsComm1_OnComm()Dim intInputLen As Integer Select Case Me.MSComm2.CommEve...
  • VB怎么通过串口收发数据,谢谢,我是新手,希望能附上代码,感激
    答:RThreshold 属性:在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。语法:object.Rthreshold [ = value ](value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )说明:当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 O...
  • VB串口发送接收
    答:这样才发送4字节指令,此外从MSComm1.RThreshold = 34看是设置接收字节长度为34字节。以下修改了LZde1代码,供参考:Option Explicit Dim strdataPrivate Sub Command1_Click() '发送HEX数据93 93 93 93 Dim send(3) As Byte send(0) = "&H93" send(1) = "&H93" send(2)...
  • 怎么设置com口让VB制作的软件界面能接收到串口调试助手发来的数据...
    答:1)硬件实现 a.电脑必须有两个COM口 b.将两串口用串口通信数据线连接。c.运行VB制作的软件打开一个COM口,另一个运行串口调试助手。进行通信调试。下图是一个VB制作的应用软件与它配对的下位机串口调试软件的运行状态图。2)软件实现 a.下载安装VSPD XP 5.1软件,运行VSPD XP 5.1软件。b.点Add...
  • 求助:vb串口通信接收字符串
    答:在VB6中,用MSCOMM控件进行串口通讯,定义一个变量strIn,打开串口后,用语句 strIn=Mscomm1.Instring 读取串口缓冲区内容即可。strIn应该是一个数组,每个数组的内容即为接收到的字符的ASCII码。strIn就是接收到的字符串。
  • 求VB高手,需要VB通过串口接收51单片机采集到的温度,并在VB上显示出来...
    答:.InputLen = 1 '设置Input一次从接收缓冲读取字节数为1 .RThreshold = 1 '设置接收一个字节就产生OnComm事件 .OutBufferCount = 0 '清空发送缓冲区 .InBufferCount = 0 '滑空接收缓冲区 If Not .PortOpen Then .PortOpen = True '打开通信端口 End If End With ...
  • 用VBA可以进行串口通讯吗?如果可以的话,该怎么实现,多谢大侠赐教!!_百...
    答:一.将两台PC机串行口的连接(如图)二.建立VB工程1.在VB窗体添加控件(如图)2.VB编程:'PC机串行口用命令按钮启动接收/发送VB程序 Private Sub Form_Load() MSComm1.PortOpen = True '开启通信控件的端口End Sub '点击“发送”命令按钮发送数据Private Sub Command1_Click() MSComm1.Output ...
  • vb串口通信如何接收单片机发过来的两字节数据
    答:VB6.0可设置MsComm控件的RThreshold 属性为2,通过OnComm 事件接收来自单片机的两字节数据。如果两字节数据是二进制数据需要设置InputMode 属性为comInputModeBinary。如果两字节数据是字符数据需要设置InputMode 属性为comInputModeText。RThreshold 属性,在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生...
  • 关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几...
    答:这是因为VB使用的是Unicode编码,在这种编码模式下,任何字符都是占用两个字节的(换句话说不但汉字占用两个字节,连半角的英文字母、数字、符号等也是两个字节的),比如 "abc1"这个字符串的ASCII码(16进制)在ANSI编码下为“61 62 63 31”,但在Unicode中则变为“61 00 62 00 63 00 31 00”...
  • vb 串口接受ascii
    答:Static strRec As String Dim inData As String Select Case commMain.CommEvent '选择事件 Case comEvReceive '接收到字符 Dim InByte() As Byte '定义一个二进制指针放接收到的数据 InByte = commMain.Input '数据转移到指针 Dim j As Long For j = 0 To UBound(InByte) '循环到指针上标...