1 / 10
文档名称:

Siemens-PPI协议分析.docx

格式:docx   大小:2,956KB   页数:10页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Siemens-PPI协议分析.docx

上传人:才艺人生 2024/5/10 文件大小:2.89 MB

下载得到文件列表

Siemens-PPI协议分析.docx

相关文档

文档介绍

文档介绍:该【Siemens-PPI协议分析 】是由【才艺人生】上传分享,文档一共【10】页,该文档可以免费在线阅读,需要了解更多关于【Siemens-PPI协议分析 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。Siemens-PPI协议分析SiemensPPI协议分析大家好:我是山东临沂的郝金红,由于前段时间的疯狂的研究西门子PPI协议解密之故,所以无心插柳的研究出了较实用的西门子S-PPI协议,今天奉献大家。我们经常要用于上位机、现场设备与S-CPU之间的通讯,但是西门子公司没有公布PPI协议的格式,用户如果想使用PPI协议监控,必须购买其监控产品或第三方厂家的组态软件。大家要知道国内的组态王、紫金桥、力控等等组态公司是花了多少钱才得到的PPI的深层协议吗?其实西门子工控产品的超高价垄断掠夺行为已经引起了我们国家及业内人士的抵制和抗议,他们的什么软件都需要授权且对于系统的霸道性是有目共睹的。这样给用户自主开发就带来了一定的困难,特别是想用VB、VC等语言自行开发,根本没办法接入PLC,要么你大把掏钱给他们。洋为中用,最近在国外网站得到一个串口监视软件,带协议分析的相当不错,你吧!我就是通过此软件的数据监视、分析方法,找出了PPI协议的关键报文格式所在。其实西门子S-PLC之间或者PLC与PC之间通信有很多种方式:自由口,PPI方式,MPI方式,Profibus方式。使用自由口方式进行编程时,在上位机和PLC中都要编写数据通信程序。使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。这也是我们之所以要研究、找出PPI协议的源动力!下面我们就要说说分析的方法了!???西门子的STEPMicroWIN是用于S-系列PLC的开发工具,口通过一条PC/PPI编程电缆连到PLC的编程口上。这说明,PC实际上是可以通过串口同S-CPU通讯。只是我们不知道通讯协议而已。通过截获PC机串口上的收发数据,对照Step软件发出的指令,我们就有可能分析出有关指令的报文和通讯方式;然后,直接通过串口向PLC发送报文,以验证这些指令报文是否正确。本着这一思想,我们采用以下步骤获得这些报文。现在我们来简单的分析一下这个指令的具体含义:起始符,咳嗽一声要开始讲话的意思。是上位机要联系的下位机PLC的地址站号,就是要找的人。就是上位机电脑本身自己的站号。寻呼指令,呼叫寻找的意思。终止符,over、完毕、结束的意思。其中B为校验码,防止数据传输出错而设计的,它是这样得来的:++和的最后两位就是校验码,这就是所说的偶校验或称和校验也称余校验,因为取的是除以后的余数。计算器在进制计算时公式(++)mod得出的数就是校验码,你计算一下是不是等于B啊!其他的所有PPI协议校验都是如此。假如站号的PLC收到寻呼信号那么会回答:意思是:“报告洞洞(),洞两()收到,请指示,over!”这样的解释是不是很好理解啊!你有更好的解释吗?既然找到了要找的人,接下来PC上位机电脑,就是司令啦!就可以发号施令了。这时上位机发出一条指令,这个指令下面详细解说,发号施令后如果PLC正确接收就会返回E字符,意思是:“明白!”。其实啊,说到这里PLC只说他明白,他已经明白了上位机PC的指示,但并没有执行命令,那么要怎么他才执行命令呢?就是上位机PC发出确认命令后才执行。这时上位机会发出确认指令(CE),这里的C是执行指令,意思是:“请洞两立即执行,over!”。然后PLC就干他该干的工作了!原来PLC也不容易啊,怪不得叫下位机呢!就是下人的意思!说了这么多乱不乱呐?目的就是要理清上下级关系、主从关系,指令的顺序,用一个好的记忆方法记住枯燥无味的机器码。下面我们列表分析读取PLC密码的指令:BBCEAED读命令分析:(H)(H).目标地址,指该地址的值,,指该地址的指针,,CH为交替周期触发,CH为首次信息周期触发,CH为交替周期触发。-.目的服务存取点-.源服务存取点位分析::位排列:字节排列:字排列:双字排列-.(H)报文数据长度和重复数据长度为自DA至DU的数据长度,校验码为DA至DU数据的和校验,只取其中的末字节值关于这个校验码的计算方法同上面说明。在读写PLC的变量数据中,读数据的功能码为CH,写数据的功能码为CH。对于一次读取一个数据,读命令都是个字节。前面的—字节是相同的,为开始符长度开始符站号源地址功能码协议识别远程控制冗余识别协议数据单元参考参数长度数据长度读写排列格式BBCEA读取PLC密码的指令:BBCEAED读取长度数据个数存储器类型偏移量校验码结束符ED因为是PC上发的读PLC数据的命令,SA=,DA=,如果有多个站,DA要改成相应的站号。读命令中从DA到DU的长度为B即个字节。从字节开始根据读取数据的类型、位置不同而不同。上表是读不同存储器命令的Byte—。-从表中我们可以得出以下结果:Byte读取数据的长度:Bit:Byte:Word:DoubleWordByte数据个数,这里是,一次读多个数据时见下面的说明。Byte存储器类型,:V存储器:其它Byte存储器类型:S:SM:AI:AQE:C:I:Q:M:VF:TByte,,存储器偏移量指针(存储器地址*),如:VB,存储器地址为,偏移量指针为,转换成进制就是H,则Byte—这三个字节就是:。Byte校验和,前面已说到这是从(DA+SA+DSAP+SSAP+DU)Mod。一次读多条数据对于一次读多个数据的情况,前Byte与上面相似只是长度LD,LDr及Byte不同:Byte数据块占位字节,它指明数据块占用的字节数。与数据块数量有关,长度=+数据块数*,如:一条数据时为+=E(H);同时读M,V,Q三个不同的数据块时为+*=(H)。Byte总是即以Byte为单位。Byte以字节为单位,连续读取的字节数。如读个VD则Byte=Byte---按上述一次读一个数据的格式依次列出,Byte---另一类型的数据,也是按上述格式给出。以此类推,一次最多读取个字节的数据。写命令分析:一次写一个DoubleWord类型的数据,写命令是个字节,其余为个字节。写一个DoubleWord类型的数据,前面的—字节为:开始符长度开始符站号源地址功能码CEACEA写一个其它类型的数据,前面的—字节为:(与上面比较,只是长度字节发生变化)CEA数据长度数据个数存储类型偏移量数据形式数据位数写入值校验码终止符从字节开始根据写入数据的值和位置不同而变化。上表是几个写命令的Byte—。字节写入位置及值长度个数类型偏移量位数值、校验码、结束符M.=M.=M.=vb=AEvb=FFFFDVW=FFFFFFFFAVD=FFFFFFFFFFFFFFFFB写命令的Byte—最后,经分析我们可以得出以下结果:Byte--Byte写入数据的长度、存储器类型、存储器偏移量与读命令相同。T,C等不能用写命令写入。Byte如果写入的是位数据这一字节为,其它则为Byte写入数据的位数:Bit:ByteH:WordH:DoubleWordByte--值、校验码、结束符如果写入的是位、字节数据,Byte就是写入的值,Byte=,Byte=检验码,Byte=H,结束。如果写个的是字数据(双字节),Byte,Byte就是写入的值,Byte=检验码,Byte=H,结束。如果写个的是双字数据(四字节),Byte—就是写入的值,Byte=检验码,Byte=H,结束。看完上面的指令分析我们现在就举例几个常用的PPI协议来分析一下:PC寻呼:BPLC返回:PC发送:CEPLC返回:E我们先来看看西门子S-PLC的读取密码指令:请用串口软件以进制发送,端口设置;e;;发送:BBCEAED意思:要求传送(区)系统存储区E位开始的个字符(这就是个密码数值)。如果通讯无误,PLC会返回E,意思:已经收到那么这时上位机再次发送确认执行指令CE意思:请执行命令。(说到这里打住一下,PLC返回E指令后上位机PC要在很短的时间内发送确认指令,晚了刚才的指令就无效了具体多长时间我也没测准,反正、秒时间是没有问题的。这也是很多网友问我通讯失败的原因所在)那么这时PLC还就真的乖乖的执行命令,返回如下字符:DDCFFBDAD好了,说到这里就此停止,大家看看密码是多少啊!你如果真正明白了PPI协议就不难找出出密码了,但是这个密码是经过二次加密的,并不是真正的密码,还需要破译,至于密码算法在此不便公开,不过你多做实验一定能得出结果的。下面再看一个读取PLC版本号的指令:我们在解密中首先要确定的是PLC的版本号。就是要看看是老版本还是版的,也好做出加解密方案。他的通讯源码是这样的::CE这时plc的版本号就返回来了。看下面:FFAED你看这一段:E就是plc版本号的ASCII码。用ASC方式显示就会看的更明白上面数据是:(sp就是空格)是版本号。再一个就是读TD密码指令:BBCEAB(VW)写M指令:CEA读位区(系统区)数据指令:BBCEADEC读取密码保护位指令:BBCEADC改写密码保护位指令:(你来验证是否可行)CEADEFCEADE全部清除指令:CCFFDEEE最后再说一点,通讯中还有关于读取某一块的块代码:代表程序块;A代表数据块;B代表系统块