Siemens PPI协议分析Word文件下载.docx
- 文档编号:19895461
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:8
- 大小:23.92KB
Siemens PPI协议分析Word文件下载.docx
《Siemens PPI协议分析Word文件下载.docx》由会员分享,可在线阅读,更多相关《Siemens PPI协议分析Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
不能光说不练啊!
下面我们就说说西门子PLC到底是怎么通讯的。
PC与PLC采用主从方式通讯,PC按如下文的格式发读写指令,PLC作出接收正确的响应(返回应答数据E5H或F9H见下文分析),上位机接到此响应则发出确认命令(10025C5E16),PLC再返回给上位机相应数据。
一般上位机要连接PLC就要先发送如下寻呼数据100200494B16同志们呐!
我们可都是有血、有肉、有思想、有灵感的高级动物啊,面对这么多枯燥、无味、复杂、混乱的机器数字你怎么记呢?
反正我是记不住啊!
(^_^开始洗脑)这时你可以闭上眼睛,安静、静、再静。
。
想一想战争时期的战地对讲机通话模式,那么这个初始的寻呼指令(100200494B16)就可以理解为:
“洞两洞两(02),我是洞洞(00),听到请回答,听到请回答!
over!
”。
现在我们来简单的分析一下这个指令的具体含义:
10起始符,咳嗽一声要开始讲话的意思。
02是上位机要联系的下位机PLC的地址站号,就是要找的人。
00就是上位机电脑本身自己的站号。
49寻呼指令,呼叫寻找的意思。
16终止符,over、完毕、结束的意思。
其中4B为校验码,防止数据传输出错而设计的,它是这样得来的:
02+00+49和的最后两位就是校验码,这就是所说的偶校验或称和校验也称余校验,因为取的是除以100后的余数。
计算器在16进制计算时公式(02+00+49)mod100得出的数就是校验码,你计算一下是不是等于4B啊!
其他的所有PPI协议校验都是如此。
假如02站号的PLC收到寻呼信号那么会回答:
100002000216意思是:
“报告洞洞(00),洞两(02)收到,请指示,over!
”这样的解释是不是很好理解啊!
你有更好的解释吗?
既然找到了要找的人,接下来PC上位机电脑,就是司令啦!
就可以发号施令了。
这时上位机发出一条指令,这个指令下面详细解说,发号施令后如果PLC正确接收就会返回E5字符,意思是:
“明白!
其实啊,说到这里PLC只说他明白,他已经明白了上位机PC的指示,但并没有执行命令,那么要怎么他才执行命令呢?
就是上位机PC发出确认命令后才执行。
这时上位机会发出确认指令(10025C5E16),这里的5C是执行指令,意思是:
“请洞两立即执行,over!
然后PLC就干他该干的工作了!
原来PLC也不容易啊,怪不得叫下位机呢!
就是下人的意思!
说了这么多乱不乱呐?
目的就是要理清上下级关系、主从关系,指令的顺序,用一个好的记忆方法记住枯燥无味的机器码。
下面我们列表分析读取PLC密码的指令:
681B1B6802006C320100000000000E00000401120A100200080000030005E0D216
读命令分析:
一次读一条数据
0.开始定界符(68H)
1报文数据长度
2.重复数据长度
3.开始定界符(68H)
4.目标地址,指该地址的值,就是PLC的地址
5.本地地址,指该地址的指针,就是上位机自己的地址
6.功能码,5CH为交替周期触发,6CH为首次信息周期触发,7CH为交替周期触发。
7-16.目的服务存取点
17-21.源服务存取点18位分析:
01:
位排列02:
字节排列04:
字排列06:
双字排列
22-30.数据单元
31.校验码
32.结束分界符(16H)
报文数据长度和重复数据长度为自DA至DU的数据长度,校验码为DA至DU数据的和校验,只取其中的末字节值关于这个校验码的计算方法同上面说明。
在读写PLC的变量数据中,读数据的功能码为6CH,写数据的功能码为7CH。
对于一次读取一个数据,读命令都是33个字节。
前面的0—21字节是相同的,为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
开始符
长度
站号
源地址
功能码
协议识别
远程控制
冗余识别
协议数据
单元参考
参数长度
数据长度
04读05写
排列格式
68
1B
02
00
6C
32
01
0E
04
0A
读取PLC密码的指令:
22
23
24
25
26
27
28
29
30
31
读取长度
数据个数
存储器类型
偏移量
校验码
结束符
08
03
05
E0
D2
因为是PC上发的读PLC数据的命令,SA=00,DA=02,如果有多个站,DA要改成相应的站号。
读命令中从DA到DU的长度为1B即27个字节。
从22字节开始根据读取数据的类型、位置不同而不同。
上表是读不同存储器命令的Byte22—32。
字节
功能
读
82
64
83
65
66
读SMB34
F9
读VB100
84
8B
读VW100
8D
读VD100
06
8F
00
81
07
6A
上表读命令的Byte22-32从表中我们可以得出以下结果:
Byte22读取数据的长度
01:
1Bit02:
1Byte
04:
1Word06:
DoubleWord
Byte24数据个数,这里是01,一次读多个数据时见下面的说明。
Byte26存储器类型,01:
V存储器00:
其它
Byte27存储器类型
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字节为:
7C
6823236802006C320100000000000E00000401120A10
写一个其它类型的数据,前面的0—21字节为:
(与上面比较,只是长度字节发生变化)
6821216802006C320100000000000E00000401120A10
33
34
35
36
37
存储类型
数据形式
数据位数
写入值
终止符
79
从22字节开始根据写入数据的值和位置不同而变化。
上表是几个写命令的Byte22—40。
字节22232425262728293031323334353637383940
写入位置及值长度个数类型偏移量位数值、校验码、结束符
=10100010000820000000003000101007116
=00100010000830000000003000100007016
=10100010000830000010003000101007216
vb100=10020001000184000320000400081000AE16
vb100=FF02000100018400032000040008FF009D16
VW100=FFFF04000100018400032000040010FFFFA616
VD100=FFFFFFFF06000100018400032000040020FFFFFFFFB81
写命令的Byte22—最后,经分析我们可以得出以下结果:
Byte22--Byte30写入数据的长度、存储器类型、存储器偏移量与读命令相同。
T,C等不能用写命令写入。
Byte32如果写入的是位数据这一字节为03,其它则为04
Byte34写入数据的位数
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
发送:
681B1B6802006C320100000000000E00000401120A100200080000030005E0D216意思:
要求传送(03区)系统存储区05E0位开始的8个字符(这就是8个密码数值)。
如果通讯无误,PLC会返回E5,意思:
已经收到
那么这时上位机再次发送确认执行指令1002005C5E16意思:
请执行命令。
(说到这里打住一下,PLC返回E5指令后上位机PC要在很短的时间内发送确认指令,晚了刚才的指令就无效了具体多长时间我也没测准,反正1、2秒时间是没有问题的。
这也是很多网友问我通讯失败的原因所在)那么这时PLC还就真的乖乖的执行命令,返回如下字符:
681D1D680002083203000000000002000C00000401FF0400409B9802069D9A00767D16
好了,说到这里就此停止,大家看看密码是多少啊!
你如果真正明白了PPI协议就不难找出出密码了,但是这个密码是经过二次加密的,并不是真正的密码,还需要破译,至于密码算法在此不便公开,不过你多做实验一定能得出结果的。
下面再看一个读取PLC版本号的指令:
我们在解密中首先要确定的是PLC的版本号。
就是要看看是老版本还是02版的,也好做出加解密方案。
他的通讯源码是这样的:
681B1B6802007C320100000000000E00000401120A100200140000030000000916
发送完上面数据PLC返回E5.
再次发送确认指令:
这时plc的版本号就返回来了。
看下面:
682929680002083203000000000002001800000401FF0400A04350552032323620434E20202020202030323031D716
你看这一段:
4350552032323620434E20202020202030323031就是plc版本号的ASCII码。
用ASC方式显示就会看的更明白上面数据是:
CPUSP226SPCN0201(sp就是空格)0201是版本号。
再一个就是读TD200密码指令:
681B1B6802006C320100000000000E00000401120A10020002000184000050B916(VW10)
写M0指令:
6820206802007C320100000000000E00050501120A1001000100008300000000030001018016
读222位3区(系统区)数据指令:
681B1B6802006C320100000000000E00000401120A100200DE000003000000C316
读取密码保护位指令:
681B1B6802006C320100000000000E00000401120A100200010000030005D8C316
改写密码保护位指令:
(你来验证是否可行)
6820206802007C320100000000000E00050501120A100800010000030005D80004000804EF16
6820206802007C320100000000000E00050501120A100200010000030005D80003000804E816
全部清除指令:
6821216802007C3207000000240008000C0001120411450100FF0900081619060D0108181EEE16
最后再说一点,通讯中还有关于读取某一块的块代码:
08代表程序块;
0A代表数据块;
0B代表系统块
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Siemens PPI协议分析 PPI 协议 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)