Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web...

23
Siemens PPI 协协协协 龙龙龙龙 龙龙龙龙龙龙龙龙 200036协协龙龙龙 ,, PPI龙 龙 龙 ,、 S7-200 CPU龙龙龙龙 龙龙龙 PLC PPI 1 协协 西 S7-200 PLC 龙龙龙龙 PLC 龙 PC 龙龙龙龙龙龙龙龙龙龙:龙龙龙 PPI 龙龙MPI 龙龙Profibus龙龙龙龙龙龙龙龙龙龙 。, PLC 龙龙龙龙龙龙龙龙 PPI 龙龙龙龙龙龙龙PLC 龙龙龙龙龙龙龙龙龙龙龙龙龙龙龙龙龙龙龙 ,,。西 PPI龙龙龙龙龙 龙龙龙 PPI龙龙龙龙 龙龙龙龙龙龙龙龙龙龙龙龙龙龙 ,。一, 龙龙 龙龙龙龙龙龙龙龙龙龙龙龙 PPI 龙龙龙龙 PLC 龙龙 。,(1) 龙龙龙 。、, PPI龙 龙 龙 ,、 S7-200 CPU 龙 2 协协协协 西 Step 7 Micro/Win32 龙龙龙S7-200龙龙PLC龙龙龙龙龙龙龙龙 PC 龙龙龙 COM龙龙龙龙 PC/PPI 龙龙龙龙龙龙 PLC 龙龙龙龙龙 龙龙龙龙 。, PC 龙龙龙龙龙龙龙龙龙龙龙 S7-200 CPU 龙龙 龙龙龙龙龙龙龙龙 。。 PC 龙 龙龙 Step 7 龙龙龙龙龙龙龙龙龙龙龙龙龙龙龙龙 ,;,PLC龙龙龙龙 龙龙龙龙龙龙龙龙龙龙龙龙龙龙龙 ,。一,。 龙龙龙龙 龙龙龙龙龙龙龙龙 一, COM1 龙 RXTX 龙龙龙龙 COM2 龙 TXRX 龙龙 ,, COM1 龙龙龙龙 COM2 PC/PPI 龙龙龙龙龙龙 COM1 龙 龙 ,,Step7 Micro/Win32 龙龙 PLC 龙龙龙龙龙龙龙 COM2 龙 龙龙龙龙 龙龙龙 S7-200龙龙龙龙 龙 龙 龙龙 96008 ,,1龙龙龙龙 龙龙龙龙 Step7 龙 龙 S7- 200 CPU龙龙龙龙龙 Step7 龙 龙 一,COM2 龙 龙 16 龙龙龙龙 龙龙龙 )。 Profibus 龙龙龙龙龙(2)龙龙龙龙龙龙龙 龙龙龙 龙龙龙龙龙龙龙龙龙龙龙龙 PLC 龙 NETRNETW 龙 龙 (3)龙 3 PPI 协协协协

Transcript of Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web...

Page 1: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

Siemens PPI 协议分析龙永辉 孙中生(天津大学电信学院 200036)

摘 要:通过数据监视,分析的方法,找出了 PPI 协议的关键报文格式,可用于上位机、现场设备与 S7-200 CPU 之间通讯。关键字:PLC ,PPI ,协议1 前言

西门子 S7-200 PLC 之间或者 PLC 与 PC 之间通信有很多种方式:自由口,PPI 方式,MPI 方式,Profibus 方式。使用自由口方式进行编程时,在上位机和PLC 中都要编写数据通信程序。使用 PPI 协议进行通信时,PLC 可以不用编程,而且可读写所有数据区,快捷方便。但是西门子公司没有公布 PPI 协议的格式。用户如果想使用 PPI 协议监控,必须购买其监控产品或第三方厂家的组态软件。这样给用户自主开发带来一定困难,特别是自行开发的现场设备就不能通过PPI 协议接入 PLC。其它通讯方式编程也存在编程复杂,需要购买软件和授权等局限性(1)。通过数据监视、分析的方法,我们找出了 PPI 协议的关键报文格式,可用于上位机、现场设备与 S7-200 CPU 之间通讯。2 分析方法

西门子的 Step 7 Micro/Win32 是用于 S7-200 系列 PLC 的开发工具,它使用 PC 机上的 COM 口通过一条 PC/PPI 编程电缆连到 PLC 的编程口上。这说明,PC 实际上是可以通过串口同 S7-200 CPU 通讯。只是我们不知道通讯协议而已。通过截获 PC 机串口上的收发数据,对照 Step 7 软件发出的指令,我们就有可能分析出有关指令的报文和通讯方式;然后,直接通过串口向 PLC 发送

Page 2: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

报文,以验证这些指令报文是否正确。本着这一思想,我们采用以下步骤获得这些报文。首先制作一个串口的分支器,COM1 的 RX、TX 分别接到 COM2 的 TX、RX,即交叉接线,使得 COM1 发的数据 COM2 能收到。PC/PPI 编程电缆接在COM1 上,这样,Step7 Micro/Win32 发给 PLC 的报文就可以在 COM2 上接收了。我们按 S7-200 系统手册设置好两个串口,参数要一样,均为9600,8,偶校验,1 位停止位。然后设置好 Step7 软件,使之能与 S7-200

CPU 正常通讯。从 Step7 软件中发出一个明确指令,COM2 上的监视软件就能显示这条报文了(用 16 进制显示)。通过与 Profibus 标准的类比(2)我们就可以得到一些关键的报文了。这种方法比分析 PLC 中 NETR,NETW 指令要直接、全面(3)。3 PPI 协议分析

PC 与 PLC 采用主从方式通讯,PC 按如下的格式发读写指令,PLC 作出接收正确的响应(返回应答数据 E5H 或 F9H 见下文分析),上位机接到此响应则发出确认命令(10 02 5C 5E 16),PLC 再返回给上位机相应数据。

SD LE LEr SD DA SA FC DSAP SSAP DU FCS EDSD:开始符(68H) LE、Ler:长度(从 DA 到 DU)DA:目的地址 SA:源地址FC:功能码 (6CH) DSAP:目的服务存取点

Page 3: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

SSAP:源服务存取点 DU:数据单元FCS:校验和 ED:结束符(16H)

3.1 读命令分析

一次读一条数据

对于一次读取一个数据,读命令都是 33 个字节。前面的 0—21 字节是相同的,为 :68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10因为是 PC 上发的读 PLC 数据的命令,SA=00,DA=02,如果有多个站,DA

要改成相应的站号。读命令中从 DA 到 DU 的长度为 1B 即 27 个字节。从 22 字节开始根据读取数据的类型、位置不同而不同。表一是读不同存储器命令的Byte22—32。字节 22 23 24 25 26 27 28 29 30 31 32

功能 读取长度

数据个数

存储器类型

存储器偏移量指针

校验和

结束

读 q0.0 01 00 01 00 00 82 00 00 00 64 16

读m0.0

01 00 01 00 00 83 00 00 00 65 16

读 M0.1 01 00 01 00 00 83 00 00 01 66 16

读 02 00 01 00 00 05 00 01 10 F9 16

Page 4: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

SMB34读VB100

02 00 01 00 01 84 00 03 20 8B 16

读VW100

04 00 01 00 01 84 00 03 20 8D 16

读vd100

06 00 01 00 01 84 00 03 20 8F 16

读 i0.5 01 00 01 00 00 81 00 00 05 68 16

读 i0.7 01 00 01 00 00 81 00 00 07 6A 16

表一 读命令的 Byte22-32

从表中我们可以得出以下结果:Byte 22 读取数据的长度

01:1 Bit 02:1 Byte 04:1 Word 06:Double Word

Byte 24 数据个数这里是 01 ,一次读多个数据时见下面的说明。

Byte 26 存储器类型01:V 存储器 00:其它

Byte 27 存储器类型04:S 05:SM 06:AI 07:AQ 1E: C 81:I 82:Q

83:M 84:V 1F: T

Byte 28,29,30 存储器偏移量指针(存储器地址*8),如:VB100,存储器地址为 100,偏移量指针为 800,转换成 16 进制就是 320H,则 Byte 28—

29 这三个字节就是:00 03 20。

Page 5: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

Byte 31 校验和,前面已说到这是从(DA+SA+DSAP+SSAP+DU) Mod

256 。一次读多条数据

对于一次读多个数据的情况,前 21Byte 与上面相似只是长度 LD,LDr及Byte 14 不同:Byte 14 数据块占位字节,它指明数据块占用的字节数。与数据块数量有关,长度=4+数据块数*10,如:一条数据时为 4+10=0E(H);同时读 M,V,Q 三个不同的数据块时为 4+3*10=22(H)。Byte 22 总是 02 即以 Byte 为单位。Byte 24 以字节为单位,连续读取的字节数。如读 2 个 VD 则 Byte24=8

Byte 19---30 按上述一次读一个数据的格式依次列出,Byte 31---42 另一类型的数据,也是按上述格式给出。以此类推,一次最多读取 222 个字节的数据。

3.2 写命令分析一次写一个 Double Word 类型的数据,写命令是 40 个字节,其余为 38 个字节。写一个 Double Word 类型的数据,前面的 0—21 字节为 :68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10写一个其它类型的数据,前面的 0—21 字节为 :(与上面比较,只是长度字节发生变化)68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10

Page 6: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

从 22 字节开始根据写入数据的值和位置不同而变化。表二是几个写命令的Byte22—40。

Page 7: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

置 及 值

长 度

数 据 个数存 储 器类 型

存 储 器偏 移 量指 针

位 数值 、 校验 码 、结 束 符

01

00

01

00

00

83

00

00

00

00

03

00

01

01

00

71

16

01

00

01

00

00

83

00

00

00

00

03

00

01

00

00

70

16

01

00

01

00

00

83

00

00

01

00

03

00

01

01

00

72

16

10

02

00

01

00

01

84

00

03

20

00

04

00

08

10

00

AE

16

FF

02

00

01

00

01

84

00

03

20

00

04

00

08

FF

00

9D

16

FFFF

04

00

01

00

01

84

00

03

20

00

04

00

10

FF

FF

A6

16

FFFFFFFF

06

00

01

00

01

84

00

03

20

00

04

00

20

FF

FF

FF

FF

B8

令的Byte22—40

Page 8: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

经分析我们可以得出以下结果:Byte 22-- Byte 30 写入数据的长度、存储器类型、存储器偏移量与读命令相同T,C 等不能用写命令写入。 Byte 32 如果写入的是位数据这一字节为 03,其它则为 04

Byte 34 写入数据的位数01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word Byte 35--40值、校验码、结束符如果写入的是位、字节数据,Byte35 就是写入的值,Byte36=00,Byte37=

检验码,Byte38=16H,结束。如果写个的是字数据(双字节),Byte35,Byte36 就是写入的值, Byte37=检验码,Byte38=16H,结束。如果写个的是双字数据(四字节),Byte35—38 就是写入的值, Byte39=检验码,Byte40=16H,结束。3.3 其它命令分析强制写入I、Q、S 等不能使用上述的写命令写入数据,只能用强制写入的方式。前 0—35 字节值如下(长度字段要根据实际情况而定),需要注意的是Byte8=07,68 2B 2B 68 02 00 6C 32 07 00 00 00 00 00 0C 00 12 00 01 12 08 12 48 0B 00 00 00 00 00 FF 09 00 0E 00 01 10 后面的内容如下:Byte 32 占位字节,从下一字节开始到校验和前的字节数。说明同读数据的Byte 14.Byte 36 强制写入数据的长度01:1 Bit 02:1 Byte

Page 9: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

04:1 Word 06:Double Word

Byte 38 数据个数,这里是 01 ,一次强制写多个数据时见下面的说明。Byte 40 存储器类型Byte 41 存储器类型,见读命令的说明。Byte 42、43、44 存储器偏移量指针(存储器地址*8)Byte 45、46、47、48 值、校验码、结束符取消强制写强制写入 I、Q 等后,这些值就不能被程序改变,除非使用”取消强制命令”。 取消强制命令的格式与强制写入相似,变化的有以下几点:(1)是没有”值”这一段,即没有 Byte45—48。这影响到长度字节 LE,LEr;占位字节Byte 32.(2)Byte16=10H, (3) Byte32=0CH,也就是第一条,没有”值”这一段,数据块长度变短了。对于一次强制写入或取消多个数据的情况可以参照写入命令写出相应的报文,这里不再给出。STOP 命令

STOP 命令使得 S7-200 CPU 从 RUN状态转换到 STOP状态(此时 CPU模块上的模式开关开应打在 RUN 或 TERM 位置)。PC 发出如下命令,PLC 返回F9,此时 PLC 已进入等待状态,PC 再发确认报文(10 02 5C 5E 16),完成一个命令过程。68 1D 1D 68 02 00 6C 32 01 00 00 00 00 00 10 00 00 29 00 00 00 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16RUN 命令

Page 10: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

RUN 命令使得 S7-200 CPU 从 STOP状态转换到 RUN状态(此时 CPU模块上的模式开关开应打在 RUN 或 TERM 位置)。PC 发出下命令,PLC 返回 F9,此时 PLC 已进入运行状态,PC 再发确认报文(10 02 5C 5E 16),完成一个命令过程。68 21 21 68 02 00 6C 32 01 00 00 00 00 00 14 00 00 28 00 00 00 00 00 00 FD 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16 3.4 读出数据分析一次读出一条数据PLC 响应的数据也是用 PPI封装的。如果用一次读一条数据命令,响应的报文中就只包含一条数据,此响应报文的 Byte16<=8。 Byte 04:DA=00 Byte 05:SA=02 即从 02 PLC站发往 PC。Byte 16:数据块占位字节,从 Byte21 到校验和前的字节数。一条数据时:Word=06 Double Word=08 其它为 05。Byte 22:数据类型,位=3,其它=4。Byte 24:数据宽度,Bit=01,Byte=08,Word=10H,Double Word=20H

Byte 25—28:值。如果网络上只可能有一个站会发回响应报文,那么可以简单的根据 LE 长度字节判断返回值的位置:LE=16H,返回值是字节,或位类型的值,响应报文的Byte 25 即是返回值;LE=17H,返回值是字(双字节)类型的值,响应报文的 Byte 25,26 即是返回值;LE=19H,返回值是双字(四字节)类型的值,响应报文的 Byte 25—28 即是返回值。更准确的方式是要根据返回报文的SA,DA,及存储器位置等信息识别目标地址和源地址,确认是这次申请的返回数据,然后经过校验检查,得到正确的数据。

Page 11: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

一次读出多条数据如果用的是一次读多条数据的命令,响应的报文中就包含有多条数据。这些数据只有类型参数,没有偏移量参数,所以要注意根据读命令的顺序将其一一对应起来。Byte 16:数据块占位字节,从 Byte21 到校验和前的字节数,与数据块数量和类型有关。Byte 20:数据块的个数。Byte 21 开始为数据块,每一个数据块都以 FF 04 开始,接下来的两个字节表示这一数据块的长度,以位计算,然后依次是连续的数据。下一个数据块也是以FF 04 开始,重复上述格式,直到结束。4 应用PC 与与 PLC 通讯在采用 PC 机与 PLC 通讯时,计算机采用 PPI 电缆或普通的 485 串口卡与 PLC

的编程口连接, PC 机采用 VB 编程,遵循 PPI 协议,主从式的通讯方式,一次读写操作的步骤包括:首先上位机发出读写命令,PLC 作出接收正确的响应(返回应答数据 E5H),上位机接到此响应则发出确认命令(10 02 5C 5E

16),PLC完成正确的读写响应,返回给上位机相应数据。这样收发两次数据,完成一次数据的读写。那么我们就可以利用上述 PPI 协议,读写 S7-200PLC 中的各种类型数据,包括 I、Q、SM、M、V、T、C、S 等数据类型,能够直接读出以上变量中的位、字节、字、双字等,(其中读位变量时,实际是读取该位所在的字节值)。可以改变 PLC 的运行状态(RUN/STOP)。 在编程时,最好将读取的检测值、输出值等数据,存放在 PLC 的一个连续的变量区中,当上位机读取

Page 12: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

PLC 的数据时,就可以一次读出这组连续的数据,减少数据的分次频繁读取。当修改设定值等数据时,进行写数据的通讯操作。现场设备与 PLC 通讯 利用 PPI 协议除了能与上位机(PC)通讯外,更重要的是为现场设备与 S7-

200CPU 之间的通讯提供了捷径。自行开发的设备可以方便的利用 PPI 协议通过485/232 接口接入 S7-200CPU,联入 PLC 的网络,包括控制面板,采集器等。5 总结通过分析 STEP7 Micro/win32 软件与 S7-200CPU 的通讯数据,我们得到了西门子 PPI 协议的关键报文格式,这一结果对工程实践具有较高的参考价值。在不使用西门子或其它组态软件的情况下,利用分析得到的 PPI 协议实现了上位机对 PLC 的监控。现场设备与 PLC 通讯方面的工作正在进行中。另外这种对通讯端口进行监测、分析的方法也对一些未知协议的测定和通讯错误的检查具有指导意义。

参考资料1. 周晓平, 姜建芳, 苏少钰, 陈迅. S7-200 系列 PLC 与监控计算机通信实现的研究. 微计算机信息 2004;1.

2. SIEMENS. SIMATIC S7-200 可编程序控制器 系统手册. 02 ed, 2000.

3. 郝莉, 王东兴. PROFIBUS 从站与 S7-200PLC 的通讯研究. 北京机械工业学院学报(综合版) 2000;15

Page 13: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

PPI 通讯 VB 程序例rivate Declare Sub Sleep Lib "kernel32" (ByVal dwseconds As Long)Private Sub Label3_Click()End Sub

Private Sub Label9_Click()

End Sub

Private Sub Command1_Click()Dim leixing As StringDim xx As StringDim ha As StringDim dizhi As StringDim str_read(0 To 32) As ByteDim i As IntegerDim Temp_FCS As VariantDim str_val(0 To 5) As Byte

dizhi = Text2.Textleixing = Text1.TextIf leixing = "s" Or leixing = "sm" Or leixing = "i" Or leixing = "q" Or leixing = "v" Or leixing = "vb" Or leixing = "vw" Or leixing = "vd"

Page 14: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

Then  If leixing = "s" Then xx = &H4 ha = &H1End If If leixing = "sm" Then  xx = &H5  ha = &H1 End If   If leixing = "i" Then    xx = &H81    ha = &H1   End If    If leixing = "q" Then     xx = &H82     ha = &H1    End If      If leixing = "m" Then       xx = &H83       ha = &H1      End If        If leixing = "v" Then         xx = &H84         ha = &H1        End If       If leixing = "vb" Then        xx = &H84        ha = &H1       End If    If leixing = "vw" Then     xx = &H84     ha = &H2    End If  If leixing = "vd" Then   xx = &H84   ha = &H4   End Ifstr_read(0) = &H68str_read(1) = &H1Bstr_read(2) = &H1Bstr_read(3) = &H68str_read(4) = &H2str_read(5) = &H0

Page 15: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

str_read(6) = &H6Cstr_read(7) = &H32str_read(8) = &H1str_read(9) = &H0str_read(10) = &H0str_read(11) = &H0str_read(12) = &H0str_read(13) = &H0str_read(14) = &HEstr_read(15) = &H0str_read(16) = &H0str_read(17) = &H4str_read(18) = &H1str_read(19) = &H12str_read(20) = &HAstr_read(21) = &H10str_read(22) = &H2str_read(23) = &H0str_read(24) = hastr_read(25) = &H0str_read(26) = &H1str_read(27) = xxstr_read(28) = &H0str_read(29) = (Str(dizhi) * 8) \\ 256str_read(30) = (Str(dizhi) * 8) Mod 256For i = 4 To 30   Temp_FCS = Temp_FCS + str_read(i)Next istr_read(31) = Temp_FCS Mod 256str_read(32) = &H16MSComm1.Output = str_readText4.Text = ""Sleep (50)str_val(0) = &H10str_val(1) = &H2str_val(2) = &H0str_val(3) = &H5Cstr_val(4) = &H5Estr_val(5) = &H16MSComm1.Output = str_val

 Else:       If MsgBox("数据类型输入错误,正确类型为 S SM I Q  M V VB VW VD",

Page 16: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

1 + 32 + 0, "关闭") = 1 Then             End If     End IfEnd Sub

Private Sub Command2_Click()Unload Form4End Sub

Private Sub Form_Load()MSComm1.CommPort = 1MSComm1.Settings = "9600,e,8,1"MSComm1.InputLen = 0MSComm1.RThreshold = 28MSComm1.InputMode = comInputModeBinaryMSComm1.PortOpen = TrueEnd Sub

Private Sub MSComm1_OnComm()Dim rcv_array() As ByteDim dis_array As StringDim rcv_len As LongDim yy As StringDim haha As Stringrcv_array = MSComm1.Inputrcv_len = UBound(rcv_array)ReDim temP(0 To UBound(rcv_array))For i = 0 To rcv_lendis_array = dis_array & Hex(rcv_array(i)) & ""Next iIf Len(dis_array) = 38 Thenyy = Mid(dis_array, 34, 1)End IfIf Len(dis_array) = 39 Thenyy = Mid(dis_array, 34, 2)End IfIf Len(dis_array) = 42 Thenyy = Mid(dis_array, 35, 4)End IfIf Len(dis_array) = 45 Thenyy = Mid(dis_array, 35, 5)End If

Page 17: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

Text3.Text = Val("&H" & yy)Text4.Text = dis_arrayEnd Sub

西门子 PPI 通讯协议

S7-200 PLC 之 PPI 协议

    通过硬件和软件侦听的方法,分析 PLC内部固有的 PPI 通讯协议,然后上位机采用 VB 编程,遵循 PPI 通讯协议,读写 PLC 数据,实现人机操作任务。这种通讯方法,与一般的自由通讯协议相比,省略了 PLC 的通讯程序编写,只需编写上位机的通讯程序资源

S7-226 的编程口物理层为 RS-485结构,SIEMENS提供MicroWin 软件,采用的是 PPI(Point to Point)协议,可以用来传输、调试 PLC 程序。在现场应用中

Page 18: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

当需要 PLC 与上位机通讯时,较多的使用自定义协议与上位机通讯。在这种通讯方式中,需要编程者首先定义自己的自由通讯格式,在 PLC 中编写代码,利用中断方式控制通讯端口的数据收发。采用这种方式,PLC 编程调试较为烦琐,占用 PLC 的软件中断和代码资源,而且当 PLC 的通讯口定义为自由通讯口时,PLC 的编程软件无法对 PLC 进行监控,给 PLC 程序调试带来不便。SIEMENS S7-200PLC 的编程通讯接口,内部固化的通讯协议为 PPI 协议,如果上位机遵循 PPI 协议来读写 PLC,就可以省略编写 PLC 的通讯代码。如何获得 PPI 协议?可以在 PLC 的编程软件读写 PLC 数据时,利用第三个串口侦听PLC 的通讯数据,或者利用软件方法,截取已经打开且正在通讯的端口的数据,然后归纳总结,解析出 PPI 协议的数据读写报文。这样,上位机遵循 PPI 协议,就可以便利的读写 PLC内部的数据,实现上位机的人机操作功能。软件设计 系统中测控任务由 SIEMENS S7-226PLC完成,PLC 采用循环扫描方式工作,当定时时间到时,执行数据采集或 PID 控制任务,完成现场的信号控制。计算机的监控软件采用 VB 编制,利用 MSComm 控件完成串口数据通讯,通讯遵循的协议为 PPI 协议。 PPI 协议西门子的 PPI(Point to Point)通讯协议采用主从式的通讯方式,一次读写操作的步骤包括:首先上位机发出读写命令,PLC 作出接收正确的响应,上位机接到此响应则发出确认申请命令,PLC 则完成正确的读写响应,回应给上位机数据。这样收发两次数据,完成一次数据的读写[5]。其通讯数据报文格式大致有以下几类:

Page 19: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

1、读写申请的数据格式如下: SD LE LER SD DA SA FC DASP SSAP DU FCS ED  SD:(Start Delimiter)开始定界符(68H)

LE:(Length)报文数据长度LER:(Repeated Length)重复数据长度SD: (Start Delimiter)开始定界符(68H)

SA:(Source Address)源地址,指该地址的指针,为地址值乘以 8

DA:(Destination Address)目标地址,指该地址的指针,为地址值乘以 8

FC:(Function Code)功能码DSAP:(Destination Service Access Point)目的服务存取点SSAP:(Source Service Access Point)源服务存取点DU:(Data Unit)数据单元FCS:(Frame Check Sequence)校验码ED:(End Delimiter)结束分界符(16H)报文数据长度和重复数据长度为自 DA至DU 的数据长度,校验码为 DA至DU

数据的和校验,只取其中的末字节值。在读写 PLC 的变量数据中,读数据的功能码为 6CH,写数据的功能码为 7CH。2、PLC 接收到读写命令,校验后正确,返回的数据格式为 E5H

3、确认读写命令的数据格式为: SD SA DA FC FCS ED  其中 SD 为起始符,为 10H

SA 为数据源地址

Page 20: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

DA 为目的地址FC 为功能码,取 5CH

FCS 为 SA+DA+FC 的和的末字节ED 为结束符,取 16H

PPI 协议的软件编制 在采用上位机与 PLC 通讯时,上位机采用 VB 编程,计算机采用 PPI 电缆或普通的 485 串口卡与 PLC 的编程口连接,通讯系统采用主从结构,上位机遵循PPI 协议格式,发出读写申请,PLC 返回相应的数据。程序实现如下: 1、串口初始化程序:    MSComm1.CommPort = 1    MSComm1.Settings = "9600,e,8,1"    MSComm1.InputLen = 0    MSComm1.RThreshold = 1MSComm1.InputMode = comInputModeBinaryPPI 协议定义串口为以二进制形式收发数据,这样报文的通讯效率比 ASCII 码高。2、串口读取数据程序,以读取 VB100 数据单元为例:Dim Str_Read(0 To 32) ‘定义发送的数据为字节为元素的数组。Str_ Read (32) = &H16 ‘相应的数组元素赋值,按照以下格式:Str_ Read (29) = (100*8) \ 256  ‘地址为指针值,先取高位地址指针Str_ Read (30) = (100*8) Mod 256 ‘取低位地址指针Str_ Read (24) = 1     ‘读取的数据长度(Byte 的个数)For I=4 to 30   Temp_FCS = Temp_FCS + Str_Read(i)Next IStr_Read(31)= Temp_FCS Mod 256 ‘计算 FCS 校验码,其它数组元素赋值

Page 21: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

省略。68 1B 1B 68 2 0 6C 32 1 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0 1 0 1 84 0 3 20 8B 16 PLC 返回数据 E5 后,确认读取命令,发送以下数据:10 2 0 5C 5E 16然后上位机 VB 程序接受到以下数据:68 16 16 68 0 2 8 32 3 0 0 0 0 0 2 0 5 0 0 4 1 FF 4 0 8 22 78 16首先识别目标地址和源地址,确认是这次申请的返回数据,然后经过校验检查,正确后解析出第 26号数据(&H22)即为 VB100 字节的数据。 3、串口写入数据程序,以写 VB100 数据单元为例:Dim Str_Write(0 To 37) ‘定义发送的数据为字节为元素的数组。Str_Write (37) = &H16  ‘相应的数组元素赋值,按照以下格式Str_Write (35) = &H10  ‘要写入的数据值68 20 20 68 2 0 7C 32 1 0 0 0 0 0 E 0 5 5 1 12 A 10 2 0 1 0 1 84 0 3 20 0 4 0 8 C B9 16 PLC 返回数据 E5 后,确认写入命令,发送以下数据:10 2 0 5C 5E 16然后上位机 VB 程序接受到以下数据:68 12 12 68 0 2 8 32 3 0 0 0 0 0 2 0 1 0 0 5 1 FF 47 16这是 PLC 正确接收并写入信息的返回数据。4、串口接收程序:在数据接收程序中,利用 VB 中 MSComm 控件,一次接收缓冲区中的全部数据,存放到数组形式的暂存单元中,然后分析每个元素的值,得到读写的数据。Dim RCV_Array() As ByteDim Dis_Array As StringDim RCV_Len As LongRCV_Array = MSComm1.Input ‘取出串口接收缓冲器的数据。RCV_Len = UBound(RCV_Array)

Page 22: Siemens PPI协议分析read.pudn.com/downloads89/doc/comm/339720/Siemens PPI... · Web view龙永辉 孙中生(天津大学电信学院 200036) 摘 要: 通过数据监视,分析的方法,找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200

ReDim Temp(0 To UBound(RCV_Array))For i = 0 To RCV_LenDis_Array = Dis_Array & Hex(RCV_Array (i)) & " "Next iText1.Text = Dis_Array ‘接收到的数据送显示。 在程序的读写过程中,一次最大可以读写 222 个字节,目前给出的数据读写为整数格式。 数据类型 Str_ Read(27) S 04H    SM 05H    I 81H    Q 82H    M 83H    V 84H  以上程序,是以读写 PLC 的 V变量区为例,利用 PPI 协议还可以读写 S7-

200PLC 中的各种类型数据,包括 I、Q、SM、M、V、T、C、S 等数据类型,能够直接读出以上变量中的位、字节、字、双字等,其中读位变量时,是读取该位所在的字节值,然后上位机自动识别出该位的值。按照读写的数据类型,其中 Str_ 

Read(27)的值各不同: 在控制系统中,PLC 与上位计算机的通讯,采用了 PPI 通讯协议,上位机每0.5秒循环读写一次 PLC。PLC 编程时,将要读取的检测值、输出值等数据,存放在 PLC 的一个连续的变量区中,当上位机读取 PLC 的数据时,就可以一次读出这组连续的数据,减少数据的分次频繁读取。当修改设定值等数据时,进行写数据的通讯操作。