我正在尝试通过串口与硬件设备连接。当我使用像Portmon这样的软件来查看它们看起来像这样的消息时:
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
当我通过hex到ascii转换器运行它们时,命令没有意义。这些消息实际上是不同于十六进制的吗?我希望看到设备传递的消息并使用c#模拟它们。我该怎么做才能准确找出消息是什么?
答案 0 :(得分:5)
硬件设备是否指定了协议?仅仅因为它是串行端口连接,并不意味着它必须是ASCII /可读英文文本。它也可以只是一个字节序列,例如42是命令,21212121是该命令的数据。可能是初始化序列或其他什么。
在一天结束时,你所有的工作都是一系列字节。它们的含义可以在协议规范中找到,或者如果没有协议规范,则需要手动查看每个命令。向设备发出命令,捕获输入,发出另一个命令。
寻找模式。共同初始化?可能是什么命令?什么数据通过?
是的,这很乏味,但逆向工程很难。
Hex的ASCII是这样的:
!乙!!!! AE&安培;!)及!!! Y_A0 +'
乙!!!! AG!!(!'Y] A2!*!(
这对我来说看起来像某种协议,有一些初始化序列(B !!!!)和命令(AE和AG),但这只是猜测。
答案 1 :(得分:0)
决定是将数据发送到计算机。所有数字数据都具有1和0的形式,例如10101001010110010 ....大多数情况下,一组将八个这样的位(二进制数字)组合成字节,因此所有数据都由字节组成。因此,一个字节可以表示0 ^ 2 ^ 8 - 1 = 255中的任何2 ^ 8个值,或者以十六进制表示,表示任何数字0x00到0xFF。
有时,字节表示一串字母数字(和其他)字符,通常是ASCII编码的。此数据格式为0到127之间的每个值分配一个字符。但所有数据都不是ASCII编码字符。
例如,如果设备是光强度传感器,则每个字节可以将光强度设置为0(投影 - 黑色)和255(尽可能明亮)之间的数字。或者,数据可以是位图图像。然后数据将从几个明确定义的结构(即this和this)开始,指定颜色深度(每个像素的位数,即或多或少的颜色数),宽度,位图的高度和压缩。然后像素数据将开始。通常,字节将是BBGGRRBBGGRRBBGGRR,其中第一个BB是第一个像素的蓝色强度,第一个GG是第一个像素的绿色强度,第一个RR是第一个像素的红色强度,第二个BB是蓝色强度第二个像素,等等。
事实上,数据可能意味着什么。有什么设备吗?它有开放的规格吗?