在某位高手的帮助下我这个初学者自己编写了这个程序,但是调试时发现接收不到数据,请各位看看,哪儿出问题了?(估计问题挺多~)发送数据1A,60,04 需接收到数据 1B,61,4x,04(x=1或2)
发送数据1A,64,04 需接收到数据1B,64,31,31,31,04以下是我的程序(因为每次发送和接收的字节数不固定,所以就下不了手了)'初始化
Private Sub Form_Load()
MSComm1.CommPort = 1 '选择通道1
MSComm1.Settings = "4800,n,8,1"
MSComm1.InputMode = CommInputModeText 'ASCII接收
MSComm1.RThreshold = 2 '接受缓冲区每收到2个字符产生oncomm事件
MSComm1.SThreshold = 1 '传输缓冲区为空时产生oncomm事件
MSComm1.PortOpen = True '打开端口
End SubPrivate Sub selfcheck_Click()
Dim selfcheck As String
selfcheck = "1A" & "60" & "04"
MSComm1.Output = selfcheck
End Sub'发送校准请求
Private Sub 校准请求_Click()
Dim Calibration As String
Calibration = "1A" & "64" & "04"
MSComm1.Output = Calibration
End SubPrivate Sub MSComm1_OnComm()
Dim inbuff As String
Select Case MSComm1.CommEvent
Case comEvReceive
inbuff = MSComm1.Input
'读取自检信号
If Mid(inbuff, 1, 2) = "1B" And Right(inbuff, 2) = "04" Then '数据判断处理
Text1 = inbuff
If Mid(inbuff, 5, 2) = "41" Then
自检结果显示.Caption = "normal"
ElseIf Mid(inbuff, 5, 2) = "42" Then
自检结果显示.Caption = "RAM Error"
ElseIf Mid(inbuff, 5, 3) = "43" Then
自检结果显示.Caption = "ROM Error"
End If
End If
'接收校准信号
If Mid(inbuff, 1, 2) = "1B" And Mid(inbuff, 3, 2) = "64" And Right(inbuff, 2) = "04" Then
Text1 = inbuff
Text4.Text = Mid(inbuff, 5, 6)
End If
End Select
End Sub
发送数据1A,64,04 需接收到数据1B,64,31,31,31,04以下是我的程序(因为每次发送和接收的字节数不固定,所以就下不了手了)'初始化
Private Sub Form_Load()
MSComm1.CommPort = 1 '选择通道1
MSComm1.Settings = "4800,n,8,1"
MSComm1.InputMode = CommInputModeText 'ASCII接收
MSComm1.RThreshold = 2 '接受缓冲区每收到2个字符产生oncomm事件
MSComm1.SThreshold = 1 '传输缓冲区为空时产生oncomm事件
MSComm1.PortOpen = True '打开端口
End SubPrivate Sub selfcheck_Click()
Dim selfcheck As String
selfcheck = "1A" & "60" & "04"
MSComm1.Output = selfcheck
End Sub'发送校准请求
Private Sub 校准请求_Click()
Dim Calibration As String
Calibration = "1A" & "64" & "04"
MSComm1.Output = Calibration
End SubPrivate Sub MSComm1_OnComm()
Dim inbuff As String
Select Case MSComm1.CommEvent
Case comEvReceive
inbuff = MSComm1.Input
'读取自检信号
If Mid(inbuff, 1, 2) = "1B" And Right(inbuff, 2) = "04" Then '数据判断处理
Text1 = inbuff
If Mid(inbuff, 5, 2) = "41" Then
自检结果显示.Caption = "normal"
ElseIf Mid(inbuff, 5, 2) = "42" Then
自检结果显示.Caption = "RAM Error"
ElseIf Mid(inbuff, 5, 3) = "43" Then
自检结果显示.Caption = "ROM Error"
End If
End If
'接收校准信号
If Mid(inbuff, 1, 2) = "1B" And Mid(inbuff, 3, 2) = "64" And Right(inbuff, 2) = "04" Then
Text1 = inbuff
Text4.Text = Mid(inbuff, 5, 6)
End If
End Select
End Sub
解决方案 »
- win7 vb6.0 directx请高手解答
- 关于WINSOCK与SQL的问题
- 求助包含IniFileName ,ReadString属性的cKey用什么来表示
- 做chm或者hlp的帮助文件用什么软件??
- vb中有没有类似这样的控件?在线等……
- 看一下,兄弟门
- 如何读文件?(在线等待!!)
- 我想做一个足球彩票分析软件,用什么语言好呀!!给点建议!!
- 各位大哥,最近我常从网上收到一些*.swf文件请问这是什么文件,如何打开?
- 紧急求解;ListView中不同行有不同颜色如何实现?(不用消息处理,只用SetBKColor或其他方法,300分!!!!!
- 哪位兄弟有mscomm对像的实例
- vb串行通信
Option Explicit
Dim strHex As String
Private Sub Form_Load()
'MSComm1初始化
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,2"
MSComm1.InputMode = comInputModeBinary '2进制接收
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm()
Dim inbuff() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
inbuff = MSComm1.Input
For i = 0 To UBound(inbuff) '将接收的Byte字节流转换为16进制字符串
strHex = strHex & Right("0" & Hex(inbuff(i)), 2)
Next
If Mid(strHex, 1, 2) = "1B" And Len(strHex) = 8 Then '数据判断及处理
Text1 = strHex
If Mid(strHex, 5, 2) = "41" Then
Label1.Caption = "normal"
ElseIf Mid(strHex, 5, 2) = "42" Then
Label1.Caption = "RAM Error"
ElseIf Mid(strHex, 5, 2) = "43" Then
Label1.Caption = "ROM Error"
End If
strHex = ""
End If
End Select
End SubPrivate Sub Command1_Click() '发送自检请求命令
Dim sendsj(2) As Byte
sendsj(0) = &H1A
sendsj(1) = &H60
sendsj(2) = &H4
MSComm1.Output = sendsj
End SubPrivate Sub Command2_Click()
End
End Sub
Dim strSj As String
Dim bj As String * 2
Private Sub Form_Load()
'MSComm1初始化
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,2"
MSComm1.InputMode = comInputModeText 'ASCII接收
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm()
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
strSj = strSj & MSComm1.Input
Text1 = strSj
If Mid(strSj, 1, 4) = "1B61" And Mid(strSj, 7, 2) = "04" Then '数据判断及处理
If Mid(strSj, 5, 2) = "41" Then
Label1.Caption = "normal"
ElseIf Mid(strSj, 5, 2) = "42" Then
Label1.Caption = "RAM Error"
ElseIf Mid(strSj, 5, 2) = "43" Then
Label1.Caption = "ROM Error"
End If
strSj = ""
ElseIf Mid(strSj, 1, 4) = "1B64" And Mid(strSj, 11, 2) = "04" Then
Text2 = strSj
strSj = ""
End If
End Select
End SubPrivate Sub Command1_Click() '发送自检请求命令
Dim sendsj As String
sendsj = "1A6004"
'bj = Mid(sendsj, 3, 2)
MSComm1.Output = sendsj
End SubPrivate Sub Command2_Click()
Dim sendsj As String
sendsj = "1A6404"
'bj = Mid(sendsj, 3, 2)
MSComm1.Output = sendsj
End Sub
发送数据1A,60,04 需接收到数据 1B,61,4x,04(x=1或2),发60 回61
原来发送数据1A,60,04 需接收到数据 1B,60,4x,04(x=1或2),发60 回60Dim bj As string * 2
这是定义1个2字节的string变量,节省内存占用.
见
数据类型概述
String
(变长) 10 字节加字符串长度 0 到大约 20 亿
String
(定长) 字符串长度 1 到大约 65,400
不是很确定语句那是无法写的。
实际你把oncomm下面写的内容,放一个过程,就是注意变量的作用域。
这句错误,改为二进制方式