以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 请LXL版主指教,有关串口接收的数据包格式 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=7495) |
-- 作者:baoxyang -- 发布时间:2010/7/1 16:28:00 -- 请LXL版主指教,有关串口接收的数据包格式 电子吊称中的仪表串口发送微机的到数据包是十六制的。但接收的一串串“25517013481272311660041760016226”这样的数字,这不是厂家说的十六制呀?
项目:代码如下 With Ports("COM1") end if
请教下,是代码有问题吗? [此贴子已经被作者于2010-7-8 10:10:35编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2010/7/1 16:40:00 -- 我没用过,估计发送端是将10进制的数据转换为16进制,然后以Ascii码的形式发送,你在接收端反过来操作。
实在不行,用笨办法,看看每个数字在接收端对应的byte值是什么。 为便于分析隔开一下:
For Each t As Byte In Val
然后与实际的值比对。
|
-- 作者: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) 就是你想要的字符串 |