2010-05-17 72 views
0

我试图通过串口与硬件设备连接。当我使用的软件,如Portmon,看看他们看起来像这样的信息:Ascii的二进制文件,并返回

42 21 21 21 21 41 45 21 26 21 29 21 26 59 5F 41 30 21 2B 21 27 
42 21 21 21 21 41 47 21 27 21 28 21 27 59 5D 41 32 21 2A 21 28 

当我运行它们直通十六进制ASCII到转换器的命令没有意义。这些消息实际上是否与十六进制不同?我希望看到设备传递的消息并使用c#模拟它们。我能做些什么来准确找出信息是什么?

+1

你为什么认为这些消息是ASCII编码的字符串?这实际上可以是任何*数据,例如32位无符号整数,后面是16位有符号整数,后面跟着一个字节,然后是... – 2010-05-17 20:09:23

+1

您是否也配置了端口读取器,BuadRate,Stop Bits ,数据位f有时会丢失设备的非用户结果 – adopilot 2010-05-17 20:21:33

回答

5

硬件设备是否指定协议?仅仅因为它是一个串口连接,并不意味着它必须是ASCII /可读的英文文本。它可能只是一个字节序列,例如42是一个命令,21212121是该命令的数据。可能是初始化序列或其他。

在这一天结束时,所有你一起工作的是一系列的字节数。它们的含义可以在协议规范中找到,或者如果没有,您需要手动查看每条命令。向设备发出命令,捕获输入,发出另一个命令。

寻找模式。通用初始化?什么可能是命令?什么数据通过了?

是的,乏味的,但逆向工程是很少容易。

为十六进制ASCII码是这样的:

乙!!!! AE! &!)! & Y_A0!+!'
乙!!!! AG! '!(!' Y] A2!*!(

这看起来像某种协议给我,有一些初始化序列(B !!!!)和命令(AE和AG),但这只是猜测

0

决定性的是发送数据到计算机,所有的数字数据都有一个和零的形式,如10101001010110010 ...。这样的位(二进制数字)插入字节,因此,所有的数据由一个字节从而一个字节可以代表任何的2^8个值0至2^8 - 1 = 255,或者,在十六进制表示法中,任何号码0x00至0xFF。

有时字节表示字母数字(和其他)个字符的字符串,ASCII常常编码。该数据格式为每个值从0到127分配一个字符。但是所有数据都不是ASCII编码的字符。

例如,如果该装置是光强度传感器,然后每个字节可以给的光强度为介于0(漆黑)和255(亮,因为它得到)。或者,数据可以是位图图像。然后数据将从一些明确定义的结构(即thisthis)开始,指定颜色深度(每像素的位数,即或多或少的颜色数量),宽度,高度和压缩位图。然后像素数据将开始。通常情况下,字节会变为BBGGRRBBGGRRBBGGRR,其中第一个BB是第一个像素的蓝色强度,第一个GG是第一个像素的绿色强度,第一个RR是第一个像素的红色强度,第二个BB是蓝色强度第二个像素,等等。

事实上,数据可能意味着什么。这种设备是什么?它有一个开放的规范吗?

相关问题