以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  请LXL版主指教,有关串口接收的数据包格式  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=7495)

--  作者:baoxyang
--  发布时间:2010/7/1 16:28:00
--  请LXL版主指教,有关串口接收的数据包格式

电子吊称中的仪表串口发送微机的到数据包是十六制的。但接收的一串串“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

 

请教下,是代码有问题吗?

[此贴子已经被作者于2010-7-8 10:10:35编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/7/1 16:40:00
--  

我没用过,估计发送端是将10进制的数据转换为16进制,然后以Ascii码的形式发送,你在接收端反过来操作。

 

实在不行,用笨办法,看看每个数字在接收端对应的byte值是什么。

为便于分析隔开一下:

 

For Each t As Byte In Val
       v = v & "|" &  t
Next

 

然后与实际的值比对。

 

 

 


 


--  作者:baoxyang
--  发布时间:2010/7/1 16:40:00
--  
因为至少十六制数据包必包含FF AA。但“25517013481272311660041760016226”是否任何字母的,肯定于厂家说的十六制不相符,请各位帮帮忙。不知错在哪里?
--  作者:baoxyang
--  发布时间:2010/7/1 16:44:00
--  
 

七、附数据包分析:

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时,当前重量稳定,仪表上显示稳定标志;

 

 

看说明,应当不是十进制转换成十六制的。因为需要根据数据包进行分析的。


--  作者:狐狸爸爸
--  发布时间:2010/7/1 16:46:00
--  

byte是整数,不会有FFAA这样的字符,你收到的应该对应的ASCII码。

 


--  作者:baoxyang
--  发布时间:2010/7/1 16:51:00
--  
如果要完整取出数据包,用一个字符串变量显示出来,如“

ff aa 0d 30 0d da e1 a6 00 0f 01 cc 10 00 01 03 98" 十六制的形式的。

 

请各位,指点!本人拆腾了半天也弄不出来。


--  作者:狐狸爸爸
--  发布时间:2010/7/1 16:58:00
--  

加一行测试看看:

Messagebox.show(System.Text.Encoding.ASCII.GetString(val))

 

 

[此贴子已经被作者于2010-7-1 16:57:59编辑过]

--  作者:lxl
--  发布时间:2010/7/1 17:09:00
--  
没错的 255 正好是FF 170 正好是 AA
--  作者:baoxyang
--  发布时间:2010/7/1 17:18:00
--  
以下是引用lxl在2010-7-1 17:09:00的发言:
没错的 255 正好是FF 170 正好是 AA

请问,使用这个System.Text.Encoding.ASCII.GetString(val)就可以了吗?


--  作者:lxl
--  发布时间:2010/7/1 17:19:00
--  
BitConverter.ToString(val) 就是你想要的字符串