例如:0 7c 先合并成一个数07c 然后转换成十进制温度值为 12.4°C
Private Sub MSComm1_OnComm()
Dim i As Long
Dim inData() As Byte
MSComm1.InputMode = comInputModeBinary
If MSComm1.InBufferCount > 0 Then
inData = MSComm1.Input
For i = 0 To UBound(inData)
*************** 此处转化不会了,该怎么写,请各位帮帮忙。
Next i
End If
End Sub
19 个解决方案
#1
给你个例子,参考一下:
Option Explicit
'建议你改成这个样子
Dim ReadByte(0 To 99) As Byte '接收字节数组
Private Sub Form_Load()
With MSComm1
.CommPort = 1
.InputLen = 1
.Settings = "9600,N,8,1"
.RThreshold = 1
.InputMode = comInputModeBinary
End With
End Sub
Private Sub MSComm1_OnComm()
Dim intP As Integer
Dim varP As Variant
MSComm1.RThreshold = 0 '屏蔽OnComm事件的发生
intP = 0
Do
varP = MSComm1.Input
If Not IsNull(varP) Then ReadByte(intP) = varP(0)
Loop Until MSComm1.InBufferCount = 0
'完成通信,处理数据
'取出ReadByte的第3、4个元素即可(起始是第0个)
End Sub
#2
先谢谢你。
If Not IsNull(varP) Then ReadByte(intP) = varP(0)
Loop Until MSComm1.InBufferCount = 0
这段代码是什么意思,我有点看不懂,能解释一下吗? 就是我上面说得,解析成我要的那种格式后,每个温度值要放入一个textbox中。。 就是这个地方,我不会了。不知道该怎么解析,我解析过,但是出来的数据都和以前的不对应了。。。
If Not IsNull(varP) Then ReadByte(intP) = varP(0)
Loop Until MSComm1.InBufferCount = 0
这段代码是什么意思,我有点看不懂,能解释一下吗? 就是我上面说得,解析成我要的那种格式后,每个温度值要放入一个textbox中。。 就是这个地方,我不会了。不知道该怎么解析,我解析过,但是出来的数据都和以前的不对应了。。。
#3
0 :应该是正负的表达,0 表示正
7C:十六进制数据,转换成十进制是:124 也就是 12.4的一个表示
07C转换过来应该就是:+12.4℃
7C:十六进制数据,转换成十进制是:124 也就是 12.4的一个表示
07C转换过来应该就是:+12.4℃
#4
你可以变化一个温度,看看和我的解释是否相符合,我是分析加猜测哈,呵呵
#5
嗯对的,现在还没接电阻,如果接上得话测温范围比这个高。。一般都是 2E 7A 这类型的数据,比如2E 7A 转换成十进制11898 万位1代表正 0代表负 就是正189.8
#6
前辈,我遇到的问题就是不知道该如何解析这里。。。 不知道该怎么把这个数据解析成我想要的,我解析了好久了,都不对,帮帮我好吗?感激不尽啊!!!呜呜呜·~·
#7
你的数据到底是:
53 A0 7C....
还是:
5 3 A 0 7C 0 75
也就是说5到底是05 还是53?
53 A0 7C....
还是:
5 3 A 0 7C 0 75
也就是说5到底是05 还是53?
#8
5 3 A 0 7c 0 75 不是53 。。5是05 3是03 A 是 A
#9
就你提供的信息,我能分析的就这么多了。你使用串口调试器试一试嘛
我就纳闷儿了,调试串口通信,没有通信协议吗?看看通信协议不就OK了吗?
我就纳闷儿了,调试串口通信,没有通信协议吗?看看通信协议不就OK了吗?
#10
前辈,你还没明白我的意思呀。。嘿嘿 通信没问题呀,收到的数据也是对的。跟下位机要求的格式一样。
比如说我上面代码中* 号处的 Text1.Text = Text1.Text & Hex(inData(i)) & " " 出来的数据就是
5 3 A 0 7C 0 75 0 76 0 77 0 79 86 4 但是不能把这个数据放入文本框叫用户看吧?人家看不懂呀? 咱们要解析成我说的那种格式 比如 12.4°C 用户才能看懂啊。 我现在就是这里不会,我不知道该如何把这一串数据解析成我要的格式。。
比如说我上面代码中* 号处的 Text1.Text = Text1.Text & Hex(inData(i)) & " " 出来的数据就是
5 3 A 0 7C 0 75 0 76 0 77 0 79 86 4 但是不能把这个数据放入文本框叫用户看吧?人家看不懂呀? 咱们要解析成我说的那种格式 比如 12.4°C 用户才能看懂啊。 我现在就是这里不会,我不知道该如何把这一串数据解析成我要的格式。。
#11
前辈,通信已经成功了,格式也对的。比如上面我代码中*号处 我的Text1.Text = Text1.Text & Hex(inData(i)) & " " 出来的数据就是5 3 A 0 7C 0 75 0 76 0 77 0 79 86 4 但是咱不能把这串数据放入文本框给用户看吧,咱们要解析成我说得那种格式,用户才可以看懂啊。我就是这里不会啦,解析不出来。。。 不知道怎么做才能解析成我说的那种格式。。比如0 7c 解析成 12.4
#12
这烂路由器,老是连接不上,还得我发了两遍
#13
我狂晕
不就是怎么讲00 7C转换?
就拿7C来说吧,Val("&H" & "7C")
转换出来是124 你自己再变换一下就OK了
不就是怎么讲00 7C转换?
就拿7C来说吧,Val("&H" & "7C")
转换出来是124 你自己再变换一下就OK了
#14
前辈我也狂晕啊, 你知道吗,我按照你说得那样解析过。。但是出来的数据错了。那一串数字存在数组里面的,一个字节为一个元素,我从下标0开始取元素,取出来就不对,我郁闷了两天了。如果今天在不弄好,我都想卷铺盖回家放牛去了。
#15
得先将接收的字节流数据转换成16进制字符串,然后按协议用Mid函数取数据进行数据处理.
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
lenInput = Len(strData)
Text2 = lenInput \ 2
'数据处理代码
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
txtReceive = strData
End Function
详细可参阅: http://www.vbgood.com/thread-83700-1-1.html
#16
有没有通信协议?
#17
有 主站请求:
[img=C:\Documents and Settings\Administrator\桌面][/img]
从站响应:
[img=C:\Documents and Settings\Administrator\桌面][/img]
[img=C:\Documents and Settings\Administrator\桌面][/img]
从站响应:
[img=C:\Documents and Settings\Administrator\桌面][/img]
#18
麻烦你了。估计是我程序的问题吧,结贴了。谢谢你。 如果你有空,可以加我QQ吗,指导我一下。我的QQ360115572
#19
问题的关键在于理解透彻通信协议
#1
给你个例子,参考一下:
Option Explicit
'建议你改成这个样子
Dim ReadByte(0 To 99) As Byte '接收字节数组
Private Sub Form_Load()
With MSComm1
.CommPort = 1
.InputLen = 1
.Settings = "9600,N,8,1"
.RThreshold = 1
.InputMode = comInputModeBinary
End With
End Sub
Private Sub MSComm1_OnComm()
Dim intP As Integer
Dim varP As Variant
MSComm1.RThreshold = 0 '屏蔽OnComm事件的发生
intP = 0
Do
varP = MSComm1.Input
If Not IsNull(varP) Then ReadByte(intP) = varP(0)
Loop Until MSComm1.InBufferCount = 0
'完成通信,处理数据
'取出ReadByte的第3、4个元素即可(起始是第0个)
End Sub
#2
先谢谢你。
If Not IsNull(varP) Then ReadByte(intP) = varP(0)
Loop Until MSComm1.InBufferCount = 0
这段代码是什么意思,我有点看不懂,能解释一下吗? 就是我上面说得,解析成我要的那种格式后,每个温度值要放入一个textbox中。。 就是这个地方,我不会了。不知道该怎么解析,我解析过,但是出来的数据都和以前的不对应了。。。
If Not IsNull(varP) Then ReadByte(intP) = varP(0)
Loop Until MSComm1.InBufferCount = 0
这段代码是什么意思,我有点看不懂,能解释一下吗? 就是我上面说得,解析成我要的那种格式后,每个温度值要放入一个textbox中。。 就是这个地方,我不会了。不知道该怎么解析,我解析过,但是出来的数据都和以前的不对应了。。。
#3
0 :应该是正负的表达,0 表示正
7C:十六进制数据,转换成十进制是:124 也就是 12.4的一个表示
07C转换过来应该就是:+12.4℃
7C:十六进制数据,转换成十进制是:124 也就是 12.4的一个表示
07C转换过来应该就是:+12.4℃
#4
你可以变化一个温度,看看和我的解释是否相符合,我是分析加猜测哈,呵呵
#5
嗯对的,现在还没接电阻,如果接上得话测温范围比这个高。。一般都是 2E 7A 这类型的数据,比如2E 7A 转换成十进制11898 万位1代表正 0代表负 就是正189.8
#6
前辈,我遇到的问题就是不知道该如何解析这里。。。 不知道该怎么把这个数据解析成我想要的,我解析了好久了,都不对,帮帮我好吗?感激不尽啊!!!呜呜呜·~·
#7
你的数据到底是:
53 A0 7C....
还是:
5 3 A 0 7C 0 75
也就是说5到底是05 还是53?
53 A0 7C....
还是:
5 3 A 0 7C 0 75
也就是说5到底是05 还是53?
#8
5 3 A 0 7c 0 75 不是53 。。5是05 3是03 A 是 A
#9
就你提供的信息,我能分析的就这么多了。你使用串口调试器试一试嘛
我就纳闷儿了,调试串口通信,没有通信协议吗?看看通信协议不就OK了吗?
我就纳闷儿了,调试串口通信,没有通信协议吗?看看通信协议不就OK了吗?
#10
前辈,你还没明白我的意思呀。。嘿嘿 通信没问题呀,收到的数据也是对的。跟下位机要求的格式一样。
比如说我上面代码中* 号处的 Text1.Text = Text1.Text & Hex(inData(i)) & " " 出来的数据就是
5 3 A 0 7C 0 75 0 76 0 77 0 79 86 4 但是不能把这个数据放入文本框叫用户看吧?人家看不懂呀? 咱们要解析成我说的那种格式 比如 12.4°C 用户才能看懂啊。 我现在就是这里不会,我不知道该如何把这一串数据解析成我要的格式。。
比如说我上面代码中* 号处的 Text1.Text = Text1.Text & Hex(inData(i)) & " " 出来的数据就是
5 3 A 0 7C 0 75 0 76 0 77 0 79 86 4 但是不能把这个数据放入文本框叫用户看吧?人家看不懂呀? 咱们要解析成我说的那种格式 比如 12.4°C 用户才能看懂啊。 我现在就是这里不会,我不知道该如何把这一串数据解析成我要的格式。。
#11
前辈,通信已经成功了,格式也对的。比如上面我代码中*号处 我的Text1.Text = Text1.Text & Hex(inData(i)) & " " 出来的数据就是5 3 A 0 7C 0 75 0 76 0 77 0 79 86 4 但是咱不能把这串数据放入文本框给用户看吧,咱们要解析成我说得那种格式,用户才可以看懂啊。我就是这里不会啦,解析不出来。。。 不知道怎么做才能解析成我说的那种格式。。比如0 7c 解析成 12.4
#12
这烂路由器,老是连接不上,还得我发了两遍
#13
我狂晕
不就是怎么讲00 7C转换?
就拿7C来说吧,Val("&H" & "7C")
转换出来是124 你自己再变换一下就OK了
不就是怎么讲00 7C转换?
就拿7C来说吧,Val("&H" & "7C")
转换出来是124 你自己再变换一下就OK了
#14
前辈我也狂晕啊, 你知道吗,我按照你说得那样解析过。。但是出来的数据错了。那一串数字存在数组里面的,一个字节为一个元素,我从下标0开始取元素,取出来就不对,我郁闷了两天了。如果今天在不弄好,我都想卷铺盖回家放牛去了。
#15
得先将接收的字节流数据转换成16进制字符串,然后按协议用Mid函数取数据进行数据处理.
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
lenInput = Len(strData)
Text2 = lenInput \ 2
'数据处理代码
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
txtReceive = strData
End Function
详细可参阅: http://www.vbgood.com/thread-83700-1-1.html
#16
有没有通信协议?
#17
有 主站请求:
[img=C:\Documents and Settings\Administrator\桌面][/img]
从站响应:
[img=C:\Documents and Settings\Administrator\桌面][/img]
[img=C:\Documents and Settings\Administrator\桌面][/img]
从站响应:
[img=C:\Documents and Settings\Administrator\桌面][/img]
#18
麻烦你了。估计是我程序的问题吧,结贴了。谢谢你。 如果你有空,可以加我QQ吗,指导我一下。我的QQ360115572
#19
问题的关键在于理解透彻通信协议