西门子PLC的PPI协议

[复制链接]
查看1034 | 回复0 | 2011-10-12 19:46:44 | 显示全部楼层 |阅读模式
<
  西门子S7-200 PLC之间或者PLC与PC之间通信有很多种方式:自由口,PPI方式,MPI方式,Profibus方式。使用自由口方式进行编程时,在上位机和PLC中都要编写数据通信程序。使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。但是西门子公司没有公布PPI协议的格式。用户如果想使用PPI协议监控,必须购买其监控产品或第三方厂家的组态软件。这样给用户自主开发带来一定困难,特别是自行开发的现场设备就不能通过PPI协议接入PLC。其它通讯方式编程也存在编程复杂,需要购买软件和授权等局限性(1)。通过数据监视、分析的方法,我们找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200 CPU之间通讯。
PC与PLC采用主从方式通讯,PC按如下的格式发读写指令,PLC作出接收正确的响应(返回应答数据E5H或F9H见下文分析),上位机接到此响应则发出确认命令(10 02 5C 5E 16),PLC再返回给上位机相应数据。
一般上位机要连接PLC就要先发送如下数据 10 02 00 49 4B 16 你可以理解为我们常用的对讲机通话模式:00呼叫02,听到请回答 10起始符 02是之上位机要联系的下位级的地址站号 00就是上位级本本身自己的站号 49寻呼指令 16终止符 其中4B为校验码,是这样得来的:02+00+49的最后两位就是校验码,这就是所说的偶校验或称和校验。计算器在16进制计算时公式(02+00+49)mod 100得出的数就是校验码,你计算一下是不是等于4B啊!其他的所有ppi协议校验都是如此。假如02站号的PLC收到寻呼信号那么会回答: 10 00 02 00 02 16  意思是:报告00 ,02收到,请指示  这样的解释是不是有意思啊!你有更好的解释吗?   

我们先来看看西门子老型号的PLC的读密码指令:
PLC
请用串口软件以16进制发送,端口设置9600;e;8;1   
发送:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16  意思:要求传送系统存储区05E0位开始的8个字符。
如果通讯无误,PLC会返回 E5,意思:已经收到
那么这时上位机再次发送指令 10 02 00 5C 5E 16 意思:请执行命令。那么这时PLC就真的执行命令了返回如下字符:68 1D 1D 68 00 02 08 32 03 00 00 00 00 00 02 00 0C 00 00 04 01 FF 04 00 40 9B 98 02 06 9D 9A 00 76 7D 16
好了,说到这里就此停止,大家看看密码是多少啊!你多做实验一定能得出结果的。

CN plc中鲜为人知的二次加密:
上面是plc所返回的密码,但是已经加密了,你如果不懂解码,还是算不出密码来。其实新版的plc不光cn一种,所有02版的plc在加密的时候都改动了密码,密码在传输的过程中进行了再加密!这就是鲜为人知的二次加密!看下面我做的通过串口监视截获的数据:
我下载程序,当软件要求我输入下载密码的时候,我输入密码:22222222,可是截获的竟然是一组这样的数据:68 21 21 68 02 00 7C 32 07 00 00 00 19 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 67 67 00 00 67 67 00 00 FE 16   
PLC
提示: 67 67 00 00 67 67 00 00 其实就是我刚才输入的8个2的密码,在这里加密了。。。。
下面呢我公布一下二次加密的代码。大家来算一下,这个数据是怎么得来的。
密码代码:无大小写区分
0=65   1=64  2=67   3=66   4=61   5=60   6=63   7=62  8=6D   9=6C   A=14   B=17   C=16   D=11   E=10   F=13   G=12   H=1D   I=1C   J=1F   K=1E   L=19  M=18  N=1B  O=1A  P=05  Q=04  R=07   S=06   T=01   X=0D   Y=0C   Z=0F
怎样读取PLC的版本号:
我们在***中首先要确定的是PLC的版本号。就是要看看是老版本还是02版的,也好做出加***方案。他的通讯源码是这样的:68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 09 16
发送完上面数据PLC返回E5.再次发送确认指令:10 02 00 5C 5E 16 这时plc的版本号就返回来了。看下面: PLC资料
68 29 29 68 00 02 08 32 03 00 00 00 00 00 02 00 18 00 00 04 01 FF 04 00 A0 43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 D7 16
你看这一段:43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 就是plc版本号的ascii码。用asc方式显示就会看的更明白上面数据是:C  P  U SP  2  2  6  SP C  N 0  2  0  1 (sp就是空格)
读取密码保护位(保护等级)指令
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 01 00 00 03 00 05 D8 C3 16
全部清空plc指令:
68 21 21 68 02 00 7C 32 07 00 00 00 24 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 16 19 06 0D 01 08 18 1E EE 16  
读命令分析
一次读一条数据
对于一次读取一个数据,读命令都是33个字节。前面的0—21字节是相同的,为 :
0    1    2    3    4    5    6    7    8    9    10    11    12    13    14    15    16    17    18    19    20    21      
PLC资料网
开始符    长度    长度    开始符    站号    源地址    功能码                                                                  
SD    LE    Ler    SD    DA    SA    FC                                                                  
PLC资料网
68    1B    1B    68    02    00    6C    32    01    00    00    00    00    00    0E    00    00    04    01    12    0A    10     
0  1  2   3  4  5  6  7  8  9  10
SD LE LER SD DA SA FC DSAP
68 1B 1B  68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
22    23    24    25    26    27    28    29    30    31    32       PLC
读取长度    数据个数    存储器类型    偏移量    校验    结束      
                                DU    FCS    ED      
02    00    08    00    00    03    00    05    E0    D2    16     
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16
68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 09 16
因为是PC上发的读PLC数据的命令,SA=00,DA=02,如果有b多个站,DA要改成相应的站号。读命令中从DA到DU的长度为1B即27个字节。从22字节开始根据读取数据的类型、位置不同而不同。表一是读不同存储器命令的Byte22—32。
PLC资料网
字节     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
读SMB34  02 00   01 00    00 05    00 01 10  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 PLC
读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。
Byte 31 校验和,前面已说到这是从(DA+SA+DSAP+SSAP+DU) Mod 256 。
一次读多条数据 PLC
对于一次读多个数据的情况,前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个字节的数据。
写命令分析
一次写一个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
从22字节开始根据写入数据的值和位置不同而变化。表二是几个写命令的Byte22—40。
字 节 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 PLC资料网
写入位置及值长度 个数  类型  偏移量   位数 值、校验码、   结束符
M0.0=1 01 00 01 00 00 82 00 00 00 00 03 00 01 01 00 71 16
M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16
M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16
vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16
vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16
VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16
VD100=FFFFFFFF 06 00 01 00 01 84 00 03 20 00 04 00 20 FF FF FF FF B8 16
0    1    2    3    4    5    6    7    8    9    10    11    12    13    14    15    16    17    18    19    20    21      
PLC
开始符    长度    长度    开始符    站号    源地址    功能码                                                                  
                                                            00    05    05    01    12    0A    10      
PLC资料网
68    21    21    68    02    00    7C    32    01    00    00    00    00    00    0E    00    00    04    01    12    0A    10     
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  32  00  4   0  8    C  B9  16 PLC资料网
22    23    24    25    26    27    28    29    30    31    32    33    34    35    36    37                  
数据长度    数据个数    存储类型    偏移量    数据形式    数据位数    写入值    校验码    结束符                  
02    00    01    00    01    84    00    03    20    00    04    00    08    0C    B9    16                  
PLC
01    00    01    00    00    82    00    00    00    00    03    00    01    01    79    16                 
表二 写命令的Byte22—40
经分析我们可以得出以下结果:
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,结束。
PLC资料网
1、      报文数据长度和重复数据长度为自DA至DU的数据长度,校验码为DA至DU数据的和校验,只取其中的末字节值。其中蓝色的DA应为SA,即从第二个其始符68H后一个字节到校验码前一个字节。
2“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字节的数据。”用这个格式可以读S7-200中V变量的连续字节,从1个到222个(未验证,采用原文数据)。
对于上位机发出第一次指令中红色数据在读数时会改变,意义如下:
红色1表示的是读的字节数,可从1到222。
红色84为数据类型,参见上文。
红色03 20表示读的字节数的起始地址指针,从该地址开始连续读1到222个字节。
红色8B是校验码。
上位机接收到E5后发出的确认命令在读V变量是不会改变,一直是该几个字符。 PLC资料网
下位机最后发送的字符串中红色数据的意义如下:
红色16是报文长度,在这里也有规律,即读一个字节为16,读两个字节为17,N个字节为16+N—1。
红色0 8表示读的字节数,以8为单位,一个字节为8,两个字节为10,采用16进制,8个字节为40,依此类推。
红色22的这个位置在读N个字节时可以有N个数据,数据从起始字节地址开始依次排列。
红色78为校验码。
热帖推荐
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则