我现在从串口接收16进制数据,当所有数据发送完毕后有三字节的16进制结束字符 5A 03 A5
我是用VB的MSComm控件,当有数据接收到时,存进一个变量中直到接收到结束字符
我的程序如下:Dim n As Variant
n = Trim(Chr(Val("&H" & "5A")) + Chr(Val("&H" & "03")) + Chr(Val("&H" & "A5")))
Do Until (Right(s, 3) = n)
ReceiveStr = ReceiveStr + MSComm1.Input
s = ReceiveStr
Loop现在的问题是我的程序有问题,当接收到结束字符的时候,无法识别,然后进入死循环
请有经验的指教下
我是用VB的MSComm控件,当有数据接收到时,存进一个变量中直到接收到结束字符
我的程序如下:Dim n As Variant
n = Trim(Chr(Val("&H" & "5A")) + Chr(Val("&H" & "03")) + Chr(Val("&H" & "A5")))
Do Until (Right(s, 3) = n)
ReceiveStr = ReceiveStr + MSComm1.Input
s = ReceiveStr
Loop现在的问题是我的程序有问题,当接收到结束字符的时候,无法识别,然后进入死循环
请有经验的指教下
解决方案 »
- 急!求助一自启动问题,分不是问题,满意马上结贴
- omron v500-r521b2扫描枪与vb通讯
- 求助:第一个VB6项目..关于数据库连接,TREE和GRID
- 大家知道哪有那种图形操作方面的源码或例子呀,100分奉上求之。
- 散尽所有可用分,为亲人祈福....
- vb是不是没有任何编程基础的人的最佳选择?毫无任何编程基础的几个问题
- 【求助咯】VB点击按钮的问题,没有ID,也没有name,getElementByID无效。。。
- listbox如何把选中的向上移动和向下移动
- 我要做一个 打飞机的游戏,请问,怎样实面,用上下左右键来控件飞机图片的移动?
- 请问是否能在数据环境设计器中使用sql语句?
- vb中读取TXT文件时,能否把文件名改为变量名?以后按照变量名读取
- ******************图标选中变色使用哪个API***********????
Do Until (instr(s, n)<>0)
doevents
ReceiveStr = ReceiveStr + MSComm1.Input
s = ReceiveStr
Loop
Dim n As Variant
n = Trim(Chr(Val("&H" & "5A")) + Chr(Val("&H" & "03")) + Chr(Val("&H" & "A5")))
debug.print n
Do Until (instr(s, n)<>0)
doevents
debug.print s
ReceiveStr = ReceiveStr + MSComm1.Input
s = ReceiveStr+s
Loop看看s是不是你预期的结果
正确转换成string格式进行比较
'为输出准备文本
'保存在全局变量
'strText
'strHex
'strAddress
'总行数保存在
'intLine
'***********************************Public Sub GetDisplayText() Dim n As Integer
Dim intValue As Integer
Dim intHighHex As Integer
Dim intLowHex As Integer
Dim strSingleChr As String * 1
Dim intAddress As Integer
Dim intAddressArray(8) As Integer
Dim intHighAddress As Integer
strAscii = "" '设置初值
strHex = ""
strAddress = ""
'*****************************************
'获得16进制码和ASCII码的字符串
'*****************************************
For n = 1 To intReceiveLen
intValue = bytReceiveByte(n - 1)
If intValue < 32 Or intValue > 128 Then '处理非法字符
strSingleChr = Chr(46) '对于不能显示的ASCII码,
Else '用"."表示
strSingleChr = Chr(intValue)
End If
strAscii = strAscii + strSingleChr
intHighHex = intValue \ 16
intLowHex = intValue - intHighHex * 16
If intHighHex < 10 Then
intHighHex = intHighHex + 48
Else
intHighHex = intHighHex + 55
End If
If intLowHex < 10 Then
intLowHex = intLowHex + 48
Else
intLowHex = intLowHex + 55
End If
'strHex = strHex + " " + Chr$(intHighHex) + Chr$(intLowHex) + " "
strHex = strHex + Chr$(intHighHex) + Chr$(intLowHex)
'If (n Mod intHexWidth) = 0 Then '设置换行
' strAscii = strAscii + Chr$(13) + Chr$(10)
' strHex = strHex + Chr$(13) + Chr$(10)
'Else
'
'End If
Next n
你这是 5a 00 03 00 a5 00
你的s 是5A 03 A5当然不会相同。
你用 n = Trim(Chrb(Val("&H" & "5A")) + Chrb(Val("&H" & "03")) + Chrb(Val("&H" & "A5")))
do until rightb(s,3)=n
试试记得do until 循环里面加上doevents
否则永远不可能收到数据。
我的代码我试过了,不行,我测试下来觉的问题: 字符大于127就会碰上错误,只要小于127就不会有错.郁闷啊!不知道为什么会这样
还有, 你应该用binary模式。 如果大于127的话