版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

解决:查看日志提示的槽号和实际设备槽号是否一致,不一致需要修改。槽号不对会导致数据发送不了。

...


协议分析

西门子S7 TCP(西门子S7 300)

  • 建立连接后获取pdu大小

连接建立之后,会发送MPI(这里为2)、机架号(这里为0)、槽号(第一个2,第二个1)获得PDU大小。

如果槽号给错误了,会收不到数据且会被PLC断开连接:

代码块
languagetext
发送请求:
[022] 03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 02 C0 01 09 (槽号2,错误导致被PLC断开连接)

...


[022] 03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 01 C0 01 09 (槽号1)

...


对于上面槽号为1的请求,接受22个字节应答:

...


[022] 03 00 00 16 11 D0 00 01 00 01 00 C0 01 09 C1 02 01 00 C2 02 01 01


  • 读取数值

数据:DB101:W305-W309的读取请求

【31】03 00 00 1f 02 f0 80 32 01 00 00 03 54 00 0e 00 00 04 01 12 0a 10 02 00 06 00 65 84 00 09 88

解释:

B1 B2:03 00 00 未知

...

代码块
languagetext
发送请求:【31】03 00 00 1f 02 f0 80 32 01 00 00 03 54 00 0e 00 00 04 01 12 0a 10 02 00 06 00 65 84 00 09 88
解释:
B1 B2:03 00 00 未知
B3 B4: 00 1F = 0x1F=31,读取报文总长度,从第一个字节到最后1个字节

...


B12 B13:03 54,序列号

...


B24 B25:00 06 = 06,读取的寄存器个数(??)

...


B26 B27:00 65=0x0065=101=DB101

...


B28:84 = 0x84,读取的数据块类型为DB块

...


B29~B31:=00 09 88=0x0000988=2440,2440/8=305*8 读取的偏移量offset(bit为单位)

...



PLC回复报文:

...


【31】03 00 00 1f 02 f0 80 32 03 00 00 03 54 00 02 00 0a 00 00 04 01 ff 04 00 30 00 03 ff 03 eb 00

...


解释:

...


B1 B2:03 00 00 未知

...


B3 B4: 00 1F = 0x1F=31,读取报文总长度,从第一个字节到最后1个字节

...


B12 B13:03 54,序列号,应该等于请求的序列号

...


B16 B17:00 0a = 0x000A=10,读取请求寄存器个数(6)+4

...


B24 B25:00 30 = 0x0030=48=6*8,读取的位长度(字节长度6)

...


B26 ~最后:6个字节,数据值

...



【31】03 00 00 1f 02 f0 80 32 03 00 00 03 56 00 02 00 0a 00 00 04 01 ff 04 00 30 00 04 00 03 ec 00





西门子PLC S7-200/S7-200 Smart两种PLC的PPI协议(S7-300不适用)

串口设置:串口转换线+USB转串口

缺省为:9600,数据位:8,停止位:1,偶校验(无校验是不行的!)

代码块
languagetext
发送:68 1B 1B 68 02 00 7C 32 01 00 00 00 02 00 0E 00 00 04 01 12 0A 10 02 00 01 00 00 81 00 00 08 7E 16

...


或者68 1B 1B 68 02 00 6C 32 01 00 00 FF FF 00 0E 00 00 04 01 12 0A 10 02 00 02 00 01 84 00 00 08 6F 16

...


接收到:E5

...


立即发送:10 02 00 5C 5E 16

...


接收到数据:68 17 17 68 00 02 08 32 03 00 00 FF FF 00 02 00 06 00 00 04 01 FF 04 00 10 00 00 5D 16


西门子PLC-200发送读取数据的请求数据(eview驱动)

代码块
languagetext
发送:68 1b 1b 68 02 00 6c 32 01 00 00 00 00 00 0e 00 00 04 01 12 0a 10 02 00 10 00 00 83 00 00 00 6f 16

...


如果收到长度为0,继续发送:68 1B 1B 68  02 00 6c 32 01 00 00 00 00 00 0e 00 00 04 01 12 0a 10 02 00 10 00 00 83 00 00 00 75 16

...


如果收到长度为0,继续发送:68 1B 1B 68  02 00 6c 32 01 00 00 00 00 00 0e 00 00 04 01 12 0a 10 02 00 10 00 00 83 00 00 00 75 16