f aa 0d 30 0d da e1 a6 00 0f 01 cc 10 00 01 03 98 (接收的字节数为17即代码中If cnt >= 17 Then为判断接收的字节数是否完整)
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时,当前重量稳定,仪表上显示稳定标志;
以后是我电子枰的接口说明.
With Ports("COM1")
Dim cnt As Integer = .BytesToRead
If cnt >= 17 Then '缓冲区是否有数据
Dim Val(cnt - 1) As Byte
.Read(val,0,cnt)
Dim ss As String = BitConverter.ToString(val) ''BitConverter.ToString()的用法,这个就是把字节或字节数组转换为十六进制或十六进制的字符串形式,中间用“-”连接
ss = ss.Replace("-","") '去掉转换成带-的十六进制的字符串中'-''
ss = ss.Trim("")
Dim k As Integer
Dim s(cnt - 1) As String '定义字节数组'
For j As Integer = 0 To cnt - 1 '提取字节,保存到数组中去'
k = j * 2
s(j) = ss.substring(k,2) '因为十六制是两位的数'(不含Ox)
Next
For i As Integer = 0 To cnt -2
Dim st As String = s(i) & s(i+1)
If st = "FFAA" Then (0xFF 0xAA为帧头;判断接收字节开始部分)
If (12+i) <= cnt -1 Then (这段判断输出字节包含重量信息在内,因为接收字节可能是连续重复的数据在,保证在连续的有效17个字节内)
If s(12+i) = "00" Then (判断重量信息位置,为什么要用12,因为字节数有两个00,判断最后一个00的位置)
forms("电子称重").controls("textbox1").value = HexToDec(s(i+8) & s(i+9) & s(i+10) & s(i+11))/100
's(i+8) & s(i+9) & s(i+10) & s(i+11) 是对应到 0x00 0x0f 0x01 0xcc 为仪表上传的实时重量信息,最后把十六制转换成十进制(HexToDec)'
'为实际重量的100位,所以需要除100'
End If
End If
End If
Next
End If
End With
请楼主自己分析吧,我不清楚此设备输出,也不好测试哦.