SiemensPPI协议分析.docx

上传人:b****5 文档编号:4421612 上传时间:2022-12-01 格式:DOCX 页数:9 大小:23.65KB
下载 相关 举报
SiemensPPI协议分析.docx_第1页
第1页 / 共9页
SiemensPPI协议分析.docx_第2页
第2页 / 共9页
SiemensPPI协议分析.docx_第3页
第3页 / 共9页
SiemensPPI协议分析.docx_第4页
第4页 / 共9页
SiemensPPI协议分析.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

SiemensPPI协议分析.docx

《SiemensPPI协议分析.docx》由会员分享,可在线阅读,更多相关《SiemensPPI协议分析.docx(9页珍藏版)》请在冰豆网上搜索。

SiemensPPI协议分析.docx

SiemensPPI协议分析

编号:

_______________

 

本资料为word版本,可以直接编辑和打印,感谢您的下载

 

SiemensPPI协议分析

 

甲方:

___________________

乙方:

___________________

日期:

___________________

 

说明:

本合同资料适用于约定双方经过谈判、协商而共同承认、共同遵守的责任与义务,同时阐述确定的时间内达成约定的承诺结果。

文档可直接下载或修改,使用时请详细阅读内容。

大家好:

我是山东临沂的郝金红,由丁前段时间的疯狂的研究西门子ppi协

议解密之故,所以无心插柳的研究出了较实用的西门子S7-200PPI协议,今天奉献大家。

我们经常要用丁上位机、现场设备与S7-200CP比问的通讯,但是西门子公司没有公布PPI协议的格式,用户如果想使用PPI协议监控,必须购买其监控产品或第三方厂家的组态软件。

大家要知道国内的组态王、紫金桥、力控等等组态公司是花了多少钱才得到的PPI的深层协议吗?

其实西门子工控产品的超高价垄断掠夺行为已经引起了我们国家及业内人士的抵制和抗议,他们的什么软件都

需要授权且对丁系统的霸道性是有目共睹的。

这样给用户自主开发就带来了一定的困难,特别是想用VBVCC?

语言自行开

发,根本没办法接入PLC要么你大把掏钱给他们。

洋为中用,最近在国外网站得到一个申口监视软件,带协议分析的相当不错,你'下裁吧!

我就是通过此软件的数据监视、分析方法,找出了PPI协议的关键报文格式所在。

其实西门子S7-200PLC之间或者PL必P&问通信有很多种方式:

自由口,

PPI方式,MP方式,Profibus方式。

使用自由口方式进行编程时,在上位机和PLC中都要编写数据通信程序。

使用PPI协议进行通信时,PLW以不用编程,而且可读写所有数据区,快捷方便。

这也是我们之所以要研究、找出PPI协议的源动力!

卜面我们就要说说分析的方法了!

西门子的STEP7MicroWIN是用丁S7-200系列PLC勺开发工具,它使用PCL上的COI^通过一条PC/PPI编程电缆连到PLC勺编程口上。

这说明,PCS际上是可以通过申口同S7-200CPIffl讯。

只是我们不知道通讯协议而已。

通过截获PO申口上的收发数据,对照Step7软件发出的指令,我们就有可能分析出有关指令的报文和通讯方式;然后,直接通过申口向PLCCc送报文,以验证这些指令报文是否正确。

本着这一思想,我们采用以下步骤获得这些报文。

你首先下载上面那个英文的申口监控软件,英文不好的网友可以使用我们为你汉化的汉化包,替换原文件即可,你必须使用这个软件,因为我先前使用过很多的监控软件,在收发数据很多的情况下都有死机现象,造成数据丢失,容易给

我们错误分析。

接下来你先打开这个软件,新建、选择端口COM1B后再将PC/PPI编程电缆接在COM1,这样,Step7Micro/Win发给PLC勺报文就可以在监视软件上完全裸露的展现在你的面前了。

我们按S7-200系统手册设置好申口参数:

9600,8,E偶校验,1位停止位。

然后设置好Step7软件,使之能与S7-200CPUE常通讯。

从Step7软件中发出一个明确指令,监视软件就能显示这条报文了(用16进制显

示,ASCII码的只能看到几个版本号之类的,其他都没有意义)。

我们的破解策略就是通过软件监视的方法,分析PLCW部固有的PPI通讯协议,然后上位机采用V骊程,遵循PPI通讯协议,读写PL微据,实现人机操作任务。

这种通讯方法,与一般的自由通讯协议相比,省略了PLC勺通讯程序编写,

只需编写上位机的通讯程序资源。

S7-200的编程口物理层为RS-485吉构,SIEMENS提供MicroWin软件,采用的是PPI(PointtoPoint)协议,关丁232申口转485你

可以采用我们网站开发研制的自制PPI电缆,效果倍好哦!

击下我还是自

己动手,丰衣足食啊!

不能光说不练啊!

下面我们就说说西门子PLdU底是怎么通讯的。

PC与PL以用主从方式通讯,P俄如下文的格式发读写指令,PLC乍出接收正确的响应(返回应答数据E5H£F9也下文分析),上位机接到此响应则发出确认命令(10025C5E16),PLCM返回给上位机相应数据。

一般上位机要连接PLC就要先发送如下寻呼数据100200494B16同志们呐!

我们可都是有血、有肉、有思想、有灵感的高级动物啊,面对这么多枯燥、无味、复杂、混乱的机器数字你怎么记呢?

反正我是记不住啊!

(八_八开始洗脑)这时你可以闭上眼睛,安静、静、再静。

想一想战争时期的战地对讲机通话模式,那么这个初始的寻呼指令(100200494B16)就可以理解为:

“洞两洞两(02),我是洞洞(00),听到请回答,听到请回答!

over!

”。

现在我们来简单的分析一下这个指令的具体含义:

10起始符,咳嗽一声要开始

讲话的意思。

02是上位机要联系的下位机PLCW地址站号,就是要找的人。

00

就是上位机电脑本身自己的站号。

49寻呼指令,呼叫寻找的意思。

16终止符,over、完毕、结束的意思。

其中4B为校验码,防止数据传输出错而设计的,它是这样

得来的:

02+00+4济日的最后两位就是校验码,这就是所说的偶校验或称和校验也称余校验,因为取的是除以100后的余数。

计算器在16进制计算时公式(02+00+49)mod100W出的数就是校验码,你计算一下是不是等于4印阿!

其他的所有PPI协议校验都是如此。

假如02站号的PL做到寻呼信号那么会回答:

100002000216

意思是:

“报告洞洞(00),洞两(02)收到,请指示,over!

”这样的解释是不是很好理解啊!

你有更好的解释吗?

既然找到了要找的人,接下来PCt位

机电脑,就是司令啦!

就可以发号施令了。

这时上位机发出一条指令,这个指令下面详细解说,发号施令后如果PL前确接收就会返回E5字符,意思是:

“明白!

”。

其实啊,说到这里PL5说他明白,他已经明白了上位机PC勺指示,但并没有执行命令,那么要怎么他才执行命令呢?

就是上位机PCg出确认命令后才执行。

这时上位机会发出确认指令(10025C5E16),这里的5馄执行指令,意思是:

“请洞两立即执行,over!

”。

然后PLCM十他该十的工作了!

原来PLC也不容易啊,怪不得叫下位机呢!

就是下人的意思!

说了这么多乱不乱呐?

目的就是要理活上下级关系、主从关系,指令的顺序,用一个好的记忆方法记住枯燥无味的机器码。

下面我们列表分析读取PL曲码的指令:

681B1B6802006C320100000000000E00000401120A100200080000030005E0D216

读命令分析:

一次读一条数据

0.开始定界符(68H)

1报文数据长度

2.重复数据长度

3.开始定界符(68H)

4.目标地址,指该地址的值,就是PLC勺地址

5.本地地址,指该地址的指针,就是上位机自己的地址

6.功能码,5C曲交替周期触发,6C的首次信息周期触发,7CHfc交替周期触发。

7-16.目的服务存取点

17-21.源服务存取点18位分析:

01:

位排列02:

字节排列04:

字排列06:

双字排列

22-30.数据单元

31.校验码

32.结束分界符(16H)

报文数据长度和重复数据长度为自D知DM勺数据长度,校验码为D知DIM据的和校验,只取其中的末字节值关丁这个校验码的计算方法同上面说明。

在读写PLC勺变量数据中,读数据的功能码为6CH,写数据的功能码为7CH。

对丁一次读取一个数据,读命令都是33个字节。

前面的0—21字节是相同的,为

0

1

2

3

4

5

6

7

8

9

10

11

12

13

4,

5

16

17

18

19

20:

1

开始

开始

源地

功能

协议

远程

冗余

协议

单元

参数

数据

04读

长度

排列格式

识别

控制

识别

数据

参考

长度

长度

05写

68

1B

1B

68

02

00

6C

32

01

00

00

00

00

00

)E

0

00

04

01

12

0A

0

读取PLC密码的指令:

681B1B6802006C320100000000000E00000401120A10020008

0000030005E0D216

22

23

24

25

26

27

28

29

30

31

32

读取长度

数据个数

存储器类型

偏移量

校验码

结束符

02

00

08

00

00

03

00

05

E0

D2

16

因为是PC上发的读PLC数据的命令,SA=00DA=02如果有多个站,DA要改成相应的站号。

读命令中从DA到DU的长度为1B即27个字节。

从22字节开始根据读取数据的类型、位置不同而不同。

上表是读不同存储器命令的Byte22—32。

字节

22

23

24

25

26

27

28

29

30

31

32

功能

读取长度

数据个数

存储器类型

偏移量

校验

结束

读Q0.1

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

读SMB34

02

00

01

00

00

05

00

00

01

F9

16

读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从表中我们可以得出以下结果:

Byte22读取数据的长度

01:

1Bit02:

1Byte

04:

1Word06:

DoubleWord

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

Byte26存储器类型,01:

V存储器00:

其它

Byte27存储器类型

04:

S05:

SM06:

AI07:

AQ1E:

C

81:

I82:

Q83:

M84:

V1F:

T

Byte28,29,30存储器偏移量指针(存储器地址*8),如:

VB100存储器地址为100,偏移量指针为800,转换成16进制就是320H,则Byte28—29这三个字节就是:

000320。

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

一次读多条数据

对丁一次读多个数据的情况,前21Byte与上面相似只是长度LD,LDr及Byte14不同:

Byte14数据块占位字节,它指明数据块占用的字节数。

与数据块数量有关,长

度=4或据块数*10,如:

一条数据时为4+10=0E(H);同时读M,V,Q三个不同的数

据块时为4+3*10=22(H)。

Byte22总是02即以Byte为单位。

Byte24以字节为单位,连续读取的字节数。

如读2个VD则Byte24=8

Byte19---30按上述一次读一个数据的格式依次列出,

Byte31---42另一类型的数据,也是按上述格式给出。

以此类推,一次最多读取222个字节的数据。

写命令分析:

一次写一个DoubleWord类型的数据,写命令是40个字节,其余为38个字节写一个DoubleWord类型的数据,前面的0—21字节为:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

开始符

长度

开始符

站号

源地址

功能码

68

21

21

68

02

00

7C

32

01

00

00

00

00

00

0E

00

00

04

01

12

0A

10

6823236802006C320100000000000E00000401120A10

写一个其它类型的数据,前面的0—21字节为:

(与上面比较,只是长度字节

发生变化)

6821216802006C320100000000000E00000401120A10

22

23

24

25

26

I27!

28

29

30

31

32

33

34

35

36

37

数据长度

数据个数

存储类型

偏移量

数据形式

数据位数

写入值

校验码

终止

01

00

01

00

00

82

00

00

00

00

03

00

01

01

79

16

从22字节开始根据写入数据的值和位置不同而变化。

上表是几个写命令的

Byte22—40。

字节22232425262728293031323334353637383940

写入位置及值长度个数类型偏移量位数值、校验码、结束符

M0.0=10100010000820000000003000101007116

M0.0=00100010000830000000003000100007016

M0.1=10100010000830000010003000101007216

vb100=10020001000184000320000400081000AE16

vb100=FF02000100018400032000040008FF009D16

VW100=FFFF04000100018400032000040010FFFFA616

VD100=FFFFFFFF06000100018400032000040020FFFFFFFFB81

写命令的Byte22—最后,经分析我们可以得出以下结果:

Byte22--Byte30写入数据的长度、存储器类型、存储器偏移量与读命令相同。

T,C等不能用写命令写入。

Byte32如果写入的是位数据这一字节为03,其它则为04

Byte34写入数据的位数

01:

1Bit08:

1Byte10H:

1Word20H:

1DoubleWord

Byte35--40值、校验码、结束符

如果写入的是位、字节数据,Byte35就是写入的值,Byte36=00,Byte37=检验

码,Byte38=16H,结束。

如果写个的是字数据(双字节),Byte35,Byte36就是写入的值,Byte37=检验码,Byte38=16H,结束。

如果写个的是双字数据(四字节),Byte35—38就是写入的值,Byte39=检验码,Byte40=16H,结束。

看完上面的指令分析我们现在就举例几个常用的PPI协议来分析一下:

PC寻呼:

100200494B16

PLC返回:

100002020416

PC发送:

1002005C5E16

PLC返回:

E5

我们先来看看西「[子S7—200PLC的读取密码指令:

请用申口软件以16进制发送,端口设置9600;e;8;1

发送:

681B1B6802006C320100000000000E00000401120A10

0200080000030005E0D216意思:

要求传送(03区)系统存储区05E0位开始的8个字符(这就是8个密码数值)。

如果通讯无误,PLC会返回E5,意思:

已经收到

那么这时上位机再次发送确认执行指令1002005C5E16意思:

请执行命令。

(说到这里打住一下,PLC返回E5指令后上位机PC要在很短的时间内发送确认指令,晚了刚才的指令就无效了具体多长时间我也没测准,反正1、2秒时间是

没有问题的。

这也是很多网友问我通讯失败的原因所在)那么这时PLC还就真的

乖乖的执行命令,返回如下字符:

681D1D6800020832030000000000

02000C00000401FF0400409B9802069D9A00767D16

好了,说到这里就此停止,大家看看密码是多少啊!

你如果真正明白了PPI协议就不难找出出密码了,但是这个密码是经过二次加密的,并不是真正的密码,还需要破译,至于密码算法在此不便公开,不过你多做实验一定能得出结果的。

下面再看一个读取PLC版本号的指令:

我们在解密中首先要确定的是PLC的版本号。

就是要看看是老版本还是02版的,也好做出加解密方案。

他的通讯源码是这样的:

681B1B6802007C320100000000000E00000401120A100200

140000030000000916

发送完上面数据PLC返回E5.

再次发送确认指令:

1002005C5E16

这时plc的版本号就返回来了。

看下面:

682929680002083203000000000002001800000401FF0400

A04350552032323620434E20202020202030323031D716

你看这一段:

4350552032323620434E20202020202030323031

就是plc版本号的ASCII码。

用ASC方式显示就会看的更明白上面数据是:

CPU

SP226SPCN0201(sp就是空格)0201是版本号。

再一个就是读TD200密码指令:

681B1B6802006C320100000000000E00000401120A100200

02000184000050B916(VW10

写M0指令:

6820206802007C320100000000000E00050501120A100100

0100008300000000030001018016

读222位3区(系统区)数据指令:

681B1B6802006C320100000000000E00000401120A100200

DE000003000000C316

读取密码保护位指令:

681B1B6802006C320100000000000E00000401120A100200

010000030005D8C316

改写密码保护位指令:

(你来验证是否可行)

6820206802007C320100000000000E00050501120A100800

010000030005D80004000804EF16

6820206802007C320100000000000E00050501120A100200

010000030005D80003000804E816

全部活除指令:

6821216802007C3207000000240008000C00011204114501

00FF0900081619060D0108181EEE16

最后再说一点,通讯中还有关于读取某一块的块代码:

08代表程序块;0A代

表数据块;0B代表系统块

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1