Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
电子吊称中的仪表串口发送微机的到数据包是十六制的。但接收的一串串“25517013481272311660041760016226”这样的数字,这不是厂家说的十六制呀?
项目:代码如下
With Ports("COM1")
Dim cnt As Integer = .BytesToRead
If cnt > 0 Then '缓冲区是否有数据
Dim Val(cnt - 1) As Byte
.Read(val,0,cnt)
Dim v As String
For Each t As Byte In Val
v = v & t
Next
if forms("电子称重").opened then
forms("电子称重").controls("textbox8").value = forms("电子称重").controls("textbox8").value & v
else
forms("电子称重").open()
forms("电子称重").controls("textbox8").value = v
end if
End If
End With
请教下,是代码有问题吗?
我没用过,估计发送端是将10进制的数据转换为16进制,然后以Ascii码的形式发送,你在接收端反过来操作。
实在不行,用笨办法,看看每个数字在接收端对应的byte值是什么。
为便于分析隔开一下:
For Each t As Byte In Val
v = v & "|" & t
Next
然后与实际的值比对。
七、附数据包分析:
ff aa 0d 30 0d da e1 a6 00 0f 01 cc 10 00 01 03 98
0xFF 0xAA为帧头;
0x0D为帧长度;
0x30识别码;
0x0d 0xda 0xe1,为地址码,即AD板编号,高位在前,相当于当前AD板编号为0x0ddae1,换成十进制即为0908001;
0xa6,为状态字节,表示当前数据为实时上传重量数据;
0x00 0x0f 0x01 0xcc 为仪表上传的实时重量信息,高位在前,为实际重量的100位,实际重量为0x000f01cc/100,即983500/100;
0x10 为数据项的第五字节,即00010000b,D0D1为0,说明当前仪表显示没有小数点,微机直接显示没有小数点的数据即可,若接收的数据为983500,直接显示成9835kg即可;如果D0D1为2,若接收的数据为983500,则应显示为9835.00kg;D2D3为0,说明当前仪表称重状态为毛重;D4为1,表明当前重量还不稳定,当D4为0时,当前重量稳定,仪表上显示稳定标志;
看说明,应当不是十进制转换成十六制的。因为需要根据数据包进行分析的。
byte是整数,不会有FFAA这样的字符,你收到的应该对应的ASCII码。
ff aa 0d 30 0d da e1 a6 00 0f 01 cc 10 00 01 03 98" 十六制的形式的。
请各位,指点!本人拆腾了半天也弄不出来。
加一行测试看看:
Messagebox.show(System.Text.Encoding.ASCII.GetString(val))
请问,使用这个System.Text.Encoding.ASCII.GetString(val)就可以了吗?