Siemens_PPI_串口通讯协议分析

上传人:飞*** 文档编号:47807013 上传时间:2018-07-05 格式:PDF 页数:9 大小:101.60KB
返回 下载 相关 举报
Siemens_PPI_串口通讯协议分析_第1页
第1页 / 共9页
Siemens_PPI_串口通讯协议分析_第2页
第2页 / 共9页
Siemens_PPI_串口通讯协议分析_第3页
第3页 / 共9页
Siemens_PPI_串口通讯协议分析_第4页
第4页 / 共9页
Siemens_PPI_串口通讯协议分析_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《Siemens_PPI_串口通讯协议分析》由会员分享,可在线阅读,更多相关《Siemens_PPI_串口通讯协议分析(9页珍藏版)》请在金锄头文库上搜索。

1、Siemens PPI协议分析大家好:我是山东临沂的郝金红,PLC解密网是我的个人网站。由于前段时间的疯狂的研究西门子PPI 协议解密之故,所以无心插柳的研究出了较实用的西门子 S7-200 PPI 协议,今天奉献大家。我们经常要用于上位机、现场设备与S7-200CPU 之间的通讯,但是西门子公司没有公布PPI 协议的格式,用户如果想使用 PPI 协议监控,必须购买其监控产品或第三方厂家的组态软件。大家要知道国内的组态王、 紫金桥、力控等等组态公司是花了多少钱才得到的PPI 的深层协议吗?其实西门子工控产品的超高价垄断掠夺行为已经引起了我们国家及业内人士的抵制和抗议, 他们的什么软件都需要授权

2、且对于系统的霸道性是有目共睹的,而且我是深受其害的。_我最近弄了个 WINCC ,装了一个星期还没装上,网友告诉我要重做系统才可以,悲哀啊。这样给用户自主开发就带来了一定的困难,特别是想用VB 、VC等语言自行开发,根本没办法接入PLC ,要么你大把掏钱给他们。洋为中用,最近在国外网站得到一个串口监视软件,带协议分析的相当不错,你吧!我就是通过此软件的数据监视、分析方法,找出了PPI 协议的关键报文格式所在。其实西门子 S7-200 PLC之间或者 PLC与 PC之间通信有很多种方式 : 自由口,PPI 方式,MPI方式,Profibus方式。使用自由口方式进行编程时,在上位机和PLC中都要编

3、写数据通信程序。使用PPI 协议进行通信时, PLC可以不用编程,而且可读写所有数据区, 快捷方便。 这也是我们之所以要研究、 找出 PPI 协议的源动力!下面我们就要说说分析的方法了!西门子的 STEP 7 MicroWIN 是用于 S7-200 系列 PLC的开发工具,它使用PC机上的 COM 口通过一条 PC/PPI 编程电缆连到 PLC的编程口上。这说明, PC实际上是可以通过串口同S7-200 CPU通讯。只是我们不知道通讯协议而已。通过截获 PC机串口上的收发数据,对照Step 7 软件发出的指令,我们就有可能分析出有关指令的报文和通讯方式; 然后,直接通过串口向 PLC发送报文,

4、 以验证这些指令报文是否正确。本着这一思想,我们采用以下步骤获得这些报文。首先你这个英文的串口监控软件,英文不好的网友可以用金山快译翻译一下, 你必须使用这个软件, 因为我先前使用过很多的监控软件,在收发数据很多的情况下都有死机现象,造成数据丢失, 容易给我们错误分析。 接下来你先打开这个软件, 新建、 选择端口 COM1, 然后再将 PC/PPI 编程电缆接在 COM1上,这样, Step7 Micro/Win 发给 PLC的报文就可以在监视软件上完全裸露的展现在你的面前了。 我们按 S7-200 系统手册设置好串口参数: 9600,8,E偶校验,1 位停止位。然后设置好Step7 软件,使

5、之能与 S7-200 CPU 正常通讯。从 Step7软件中发出一个明确指令, 监视软件就能显示这条报文了 (用 16进制显示,ASCII码的只能看到几个版本号之类的,其他都没有意义)。我们的破解策略就是通过软件监视的方法,分析 PLC内部固有的 PPI 通讯协议,然后上位机采用VB编程,遵循 PPI 通讯协议,读写 PLC数据,实现人机操作任务。这种通讯方法, 与一般的自由通讯协议相比,省略了 PLC的通讯程序编写,只需编写上位机的通讯程序资源。S7-200 的编程口物理层为RS-485结构,SIEMENS 提供 MicroWin 软件,采用的是 PPI(Point to Point)协议,

6、关于 232串口转 485 你可以采用我们网站开发研制的自制PPI 电缆,效果倍好哦!还是自己动手,丰衣足食啊!不能光说不练啊!下面我们就说说西门子PLC到底是怎么通讯的。PC 与 PLC采用主从方式通讯, PC按如下文的格式发读写指令,PLC作出接收正确的响应 (返回应答数据 E5H或 F9H见下文分析) ,上位机接到此响应则发出确认命令( 10 02 5C 5E 16 ),PLC再返回给上位机相应数据。一般上位机要连接 PLC就要先发送如下寻呼数据 10 02 00 49 4B 16 同志们呐!我们可都是有血、有肉、有思想、有灵感的高级动物啊,面对这么多枯燥、无味、复杂、混乱的机器数字你怎

7、么记呢?反正我是记不住啊!(_开始洗脑)这时你可以闭上眼睛,安静、静、再静。想一想战争时期的战地对讲机通话模式,那么这个指令( 10 02 00 49 4B 16)就可以理解为: 00呼叫 02,听到请回答 。现在我们来简单的分析一下这个指令的具体含义: 10 起始符 02 是上位机要联系的下位机的地址站号,就是要找的人 00 就是上位级本身自己的站号 49 寻呼指令 16 终止符 其中 4B为校验码,是这样得来的: 02+00+49的最后两位就是校验码,这就是所说的偶校验或称和校验也称余校验,因为取的是余数。 计算器在16 进制计算时公式( 02+00+49)mod 100得出的数就是校验码

8、,你计算一下是不是等于 4B啊!其他的所有 PPI 协议校验都是如此。 假如 02 站号的 PLC收到寻呼信号那么会回答: 10 00 02 00 02 16 意思是:报告 00 ,02收到,请指示这样的解释是不是很好理解啊! 你有更好的解释吗?接下来呢, 找到了要寻呼的人PC上位机,就是司令啦!就可以发号施令了,发号施令后PLC正确接收后就会发送 E5 字符,意思是:“ 02 洞两明白”。其实啊,说到这里PLC只说他明白,他已经明白了上位机PC的指示,但并没有执行命令,那么要怎么他才执行命令呢?就是上位机 PC发出确认命令后才执行。这时上位机会发出确认指令(10 02 5C 5E 16),意

9、思是:“请立即执行”。然后PLC就干他应当干的工作了!原来PLC也不容易啊,怪不得叫下位机呢!说了这么多乱不乱呐 ?目的就是要理清上下级关系、主从关系,指令的顺序,用一个好的记忆方法记住枯燥无味的机器码。下面我们列表分析读取PLC密码的指令: 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读命令分析: 一次读一条数据SD LE LER SD DA SA FC DASP SSAP DU FCS ED SD:(Start Delimiter)开始定界

10、符 (68H) LE:(Length)报文数据长度LER:(Repeated Length )重复数据长度SD: (Start Delimiter)开始定界符 (68H) SA:(Source Address )目标地址,指该地址的值,就是PLC的地址DA:(Destination Address)本地地址,指该地址的指针,就是上位机自己的地址FC:(Function Code )功能码, 5CH为交替周期触发, 6CH为首次信息周期触发,7CH为交替周期触发。DSAP: (Destination Service Access Point)目的服务存取点SSAP: (Source Servic

11、e Access Point)源服务存取点DU:(Data Unit )数据单元FCS:(Frame Check Sequence)校验码ED:(End Delimiter)结束分界符( 16H )报文数据长度和重复数据长度为自DA至 DU的数据长度,校验码为 DA至 DU数据的和校验,只取其中的末字节值关于这个校验码的计算方法同上面说明。在读写 PLC的变量数据中,读数据的功能码为 6CH,写数据的功能码为 7CH。对于一次读取一个数据,读命令都是33 个字节。前面的 021 字节是相同的,为0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

12、20 21 SD LE LER SD DA SA FC 开始符长度长度开始符站号源地址功能码协议识别远程控制冗余识别冗余识别协议数据单元参考参数长度参数长度数据长度数据长度04读05写变量地址数68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 读取 PLC 密码的指令: 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 22 23 24 25 26 27 28 29

13、30 31 32 DU FCS DE 读取长度数据个数存储器类型偏移量校验码结束符02 00 08 00 00 03 00 05 E0 D2 16 因为是 PC上发的读 PLC数据的命令, SA=00 ,DA=02 ,如果有多个站, DA要改成相应的站号。读命令中从DA到 DU的长度为 1B即 27 个字节。从 22 字节开始根据读取数据的类型、位置不同而不同。上表是读不同存储器命令的Byte2232。字节22 23 24 25 26 27 28 29 30 31 32 功能读取长度数据个数存储器类型偏移量校验码结束符读 Q0.1 01 00 01 00 00 82 00 00 00 64 1

14、6 读 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 0

15、1 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: TByte 28,29,30存储器偏移量指针(存储器地址*8),如: VB100 ,存储器地址

16、为 100,偏移量指针为 800, 转换成 16 进制就是 320H,则 Byte 28 29 这三个字节就是: 00 03 20 。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 个字节的数据。写命令分析:一次写一个 Double Word 类型的数据,写命令是40 个字节,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号