简述;
我需要能够反向工程串行命令,以便我可以弄清楚人类可读的值或二进制值是如何被序列化为原始串行命令的。
例如:
if
66 = 'A1' or '0110 1'
6e = 'A2' or '0110 2'
e6 = 'B1' or '1110 1'
ee = 'B2' or '1110 2'
then
what is A3 or B3, etc.
我正在为一个开源自动化项目编写包装器。
有一种方法可以发送原始
命令,并理论上将多个命令字符串连接在一起。
我嗅探了一些串行命令,这就是它们的样子。
[init] [HouseCode | DeviceCode] [ready] [HouseCode | FunctionCode]
04 66 06 62 // A1 ON
04 6e 06 62 // A2 ON
04 62 06 62 // A3 ON
04 6a 06 62 // A4 ON
04 61 06 62 // A5 ON
04 69 06 62 // A6 ON
04 65 06 62 // A7 ON
04 6d 06 62 // A8 ON
04 67 06 62 // A9 ON
04 6f 06 62 // A10 ON
04 63 06 62 // A11 ON
04 6b 06 62 // A12 ON
04 60 06 62 // A13 ON
04 68 06 62 // A14 ON
04 64 06 62 // A15 ON
04 6c 06 62 // A16 ON
04 e6 06 e2 // B1 ON
04 ee 06 e2 // B2 ON
04 e2 06 e2 // B3 ON
04 ea 06 e2 // B4 ON
....
04 ec 06 e2 // B16 ON
04 66 06 63 // A1 Off
04 e6 06 e3 // B1 Off
04 66 06 61 // All A lights On (using A1 as the starting point)
04 e6 06 e1 // All B lights On (using B1 as the starting point)
04 66 06 66 // All A lights Off (using A1 as the starting point)
04 e6 06 66 // All B lights Off (using A1 as the starting point)
04 66 06 64 2a // A1 Dim 20
04 66 06 64 2c // A1 Dim 21
04 66 06 64 2e // A1 Dim 22
04 66 06 65 2a // A1 Bright 20
04 66 06 65 69 // A1 Bright 50
我需要做的是逆向工程,以便我可以通过程序制作串行调用,或者更好地找出人类可读的值或二进制值如何被序列化为原始串行命令。
是的,我可以嗅探所有命令并单独存储每个值,但我想知道是如何实现的。
这是我目前的观察结果。
1. 调用被分成两部分。 - "04"被启动并告诉设备要查找什么 - "**"告诉系统正在控制哪个设备 [HouseCode和DeviceCode] - 十六进制数"55"返回给你,表示它已准备就绪 - "06"被启动并告诉设备要期望什么 - "**"告诉系统房屋代码和命令[HouseCode和FunctionCode] - "**"可选发送,是0到100之间的值,用于引用亮度级别 - 十六进制数"55"再次发送回来告诉你它已准备就绪
2. 第二对使用第一个字符作为字母代码(HouseCode = A、B、C等),第二个字符是地址(DeviceCode = 1、2、3等) - 根据这些信息,我个人的猜测是... - "6"必须直接对应于"A" - "e"必须直接对应于"B"
3. 第四对以第二对的HouseCode开头 4. 第四对以FunctionCode结尾 - 1 = 全部打开 - 2 = 打开 - 3 = 关闭 - 4 = 调暗 - 5 = 调亮 - 6 = 全部关闭 - 等等...
5. 第五对仅在明/暗命令上显示,并表示0到100之间的数字。
最后,在文档中,每个命令都与二进制数据相关,因此它可能不是将"A1"转换为"hex"的问题,而是将二进制转换为"hex"的问题。
HouseCode DeviceCode Binary Value
A 1 0110
B 2 1110
C 3 0010
D 4 1010
E 5 0001
F 6 1001
G 7 0101
H 8 1101
I 9 0111
J 10 1111
K 11 0011
L 12 1011
M 13 0000
N 14 1000
O 15 0100
P 16 1100
FunctionCode Binary Value
All Units Off 0000
All Lights On 0001
On 0010
Off 0011
Dim 0100
Bright 0101
All Lights Off 0110
Extended Code 0111
Hail Request 1000
Hail Acknowledge 1001
Pre-set Dim (1) 1010
Pre-set Dim (2) 1011
Extended Data Transfer 1100
Status On 1101
Status Off 1110
Status Request 1111
有人知道我如何实现这一点吗?
sendplc
和sendrawplc
的来源。不幸的是,它们的文档没有告诉我们如何生成这些十六进制调用。 - Chase Florell