[00000001] - Write Size: 1
05
[00000002] - Read Size: 1
06
[00000002] - Write Size: 11
02 30 30 45 30 32 30 32 03 36 43 00E02026C
02是报文开始
30转为ascci为0
30453032转为ASCII为读的地址0E02
3032为长度,转为ASCII为02
3643转为ASCII为校验和6C
读plc的类型
0E02究竟是啥
D8001 0E02 5EF6 PLC型号和系统版本号 24310 8001 F65E
[00000003] - Read Size: 8
02 46 36 35 45 03 46 39 F65EF9
回复F65E为FX2N
[00000005] - Write Size: 11
02 30 30 45 43 41 30 32 03 38 45 00ECA028E
读序列机名称
D8101 0ECA 5EF6 序列器机种名/版本 24310 8101 F65E
[00000006] - Read Size: 8
02 46 36 35 45 03 46 39 F65EF9
还是回复F65E
重复两遍
[00000007] - Write Size: 11
02 30 30 45 30 32 30 32 03 36 43 00E02026C
[00000008] - Read Size: 8
02 46 36 35 45 03 46 39 F65EF9
[00000009] - Write Size: 11
02 30 30 45 43 41 30 32 03 38 45 00ECA028E
[00000010] - Read Size: 8
02 46 36 35 45 03 46 39 F65EF9
//------------------------------------------------------------------------------//
// 读程序参数区,92字节,分2次读入,一次64字节,一次28字节:
// E01 8000 40 / E01 840 1C
//------------------------------------------------------------------------------//
[00000007] - Write Size: 13
02 45 30 31 38 30 30 30 34 30 03 44 35 E01800040D5
这是从起始地址8000读64个字节
8000开始的信息如下
参数 地址 十六进制值 十进制值 意义
0 0x8000 0008 8 程序总步数
1 0x8002 B658 46680
2 0x8004 0000 0
3 0x8006 0000 0
4 0x8008 2020 PLC密码
5 0x800A 2020
6 0x800C 2020
7 0x800E 2020
8 0x8010 2020 PLC名-标题
9 0x8012 2020
10 0x8014 2020
11 0x8016 2020
12 0x8018 2020
13 0x801A 2020
14 0x801C 2020
15 0x801E 2020
16 0x8020 2020
17 0x8022 2020
18 0x8024 2020
19 0x8026 2020
20 0x8028 2020
21 0x802A 2020
22 0x802C 2020
23 0x802E 2020
24 0x8030 09F4 2548 M锁存起始:M500
25 0x8032 0BFF 3071 M锁存结束:M1023
26 0x8034 01F4 500 S锁存起始:M500
27 0x8036 03E7 999 S锁存结束:M999
28 0x8038 0E64 3684 C锁存起始:C100
29 0x803A 0EC7 3783 C锁存结束:C199
30 0x803C 0EDC 3804 C锁存起始:C220
31 0x803E 0EFF 3839 C锁存结束:C255
应该是读到这里结束
[00000010] - Read Size: 132
02 30 32 30 30 32 45 43 45 30 30 30 30 30 30 30 02002ECE0000000
30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 0202020202020202
30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 0202020202020202
30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 0202020202020202
30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 0202020202020202
30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 0202020202020202
30 46 34 30 39 46 46 30 42 46 34 30 31 45 37 30 0F409FF0BF401E70
33 36 34 30 45 43 37 30 45 44 43 30 45 46 46 30 3640EC70EDC0EFF0
45 03 46 41 EFA
上面的报文可以看出0x8002是2E2E不是B685
[00000051] - Write Size: 13
02 45 30 31 38 30 34 30 31 43 03 45 39 E0180401CE9
再读剩下的 28字节
[00000053] - Read Size: 60
02 39 30 30 31 46 45 30 33 30 30 30 30 30 30 30 9001FE030000000
30 33 30 30 38 30 31 30 30 31 38 30 43 30 31 30 030080100180C010
30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
30 30 30 30 30 30 30 30 30 03 45 34 000000000E4
32 0x8040 0190 400 D锁存起始:D200
33 0x8042 03FE 1022 D锁存结束:D511
34 0x8044 0000 0
35 0x8046 0000 0
36 0x8048 0000 0 文件寄存器起始地址:1096/2096/3096…
37 0x804A 0000 0 文件寄存器容量块数:一块=500点=1000字节
38 0x804C 0000 0 注释起始地址:1096/2096/3096...
39 0x804E 0000 0 注释容量块数:一块=50点=1000字节
40 0x8050 0000 0
41 0x8052 0000 0
42 0x8054 0000 0
43 0x8056 0000 0
44 0x8058 0000 0
45 0x805A 0000 0
就是这些
[00000075] - Write Size: 13
02 34 38 30 30 30 30 46 30 30 03 44 35 480000F00D5
如何判断校验和
02 30 30 45 30 32 30 32 03 36 43
30 30 45 30 32 30 32 03 相加等于16C,取低位为6C
获取高字节6,低字节C
6作为ASCII对应的16进制为36,C作为ASCII对应的16进制为43
最后判断和最后的两个字节是否一样即可
这里ADC0对应的是D5868