Siemens_PPI_串口通讯协议分析
西门子S7-200PPI通信协议
西门子S7-200PPI通信协议PPI通信协议是一种主从式的通信协议,上位机即PC机为主,PLC为从。
通信开始由计算机发起,PLC予以响应。
1)、计算机按通信任务,用一定格式,向PLC发送通信命令。
2)、PLC收到命令后,进行命令校验,如无误,则向计算机发送数据E5H或F9H,作出初步应答。
3)、计算机收到初步应答后,再向PLC发送SD DA SA FCFCS ED确认命令。
这里,SD为起始字符,为10H;DA为目的,即PLC地址02H;SA为数据源,即计算机地址00H;FC为功能码,取5CH;FCS为SA、DA、FC和的256余数,为5EH;末字节ED为结束符,也是16H。
如按以上设定的计算机及PLC地址,则发送10、02、00、5C、5E、及16,6个字节的十六进制数据,以确认所发命令。
4)、PLC收到此确认后,执行计算机所发送的通信命令,并向计算机返回相应数据。
它的通信过程要往复两次才完成一次的通信,比较麻烦,但较严谨,不易出错。
SD LE LER SD DA SA FC DASP SSAP DU FCS EDSD:(Start Delimiter)开始定界符,占1字节,为68HLE:(Length)报文数据长度,占1字节,标明报文以字节计,从DA到DU的长度;LER:(Repeated Length)重复数据长度,同LESD: (Start Delimiter)开始定界符(68H)DA:(DestinationAddress)目标地址,占1字节,指PLC在PPI 上地址,一台PLC时,一般为02,多台PLC时,则各有各的地址;SA:(Source Address)源地址,占1字节,指计算机在PPI上地址,一般为00;FC:(Function Code)功能码,占1字节,6CH一般为读数据,7CH一般为写数据DSAP:(Destination Service Access Point)目的服务存取点,占多个字节SSAP:(Source Service Access Point)源服务存取点,占多个字节DU:(Data Unit)数据单元,占多个字节FCS:(Frame CheckSequence)占1字节,从DA到DU之间的校验和的256余数;ED:(End Delimiter)结束分界符,占1字节,为16H命令类型1)读命令读命令长度都是33个字节。
西门子USB-PPI,USB-PPI使用指南
西门子USB-PPI+,USB-PPI电缆通信说明
1、打开你电脑的设备管理器,正常情况下安装好驱动,会生成一个新的串口,请记下生成的串口,如下图所示:
2、打开西门子编程软件,如果你的200系列PLC是带CN的请将软件改成中文版的,并且软件的版本需要在V4.0 SP3以上,以上两条件缺一不可。
如果不是CN,这两点除外。
3、点击软件里的
,出现以下窗口。
4、点击
,出现以下窗口,
5、选择“PC/PPI cable(PPI)”后。
点属性,
6、这一步非常重要,这里的端口一定要选择电缆安装好驱动生成的串口一至(端口在设备管理器里看到)切记!否则无法通信。
7、切换到”PPI”选项夹,“地址”默认的是0,“网络参数”里两个选项请不要打钩。
否则无法通信的。
“传输率”可根据PLC的实际情况来选择。
8、设定好这些后。
一路确定下去。
然后回到通信界面,双击“刷新”即可找到PLC的型号,即可上下载程序。
双击这里就可以找到PLC的型号,确认即可上下载程序。
9. 点连接成功。
SiemensPLC的PPI通信协议的解析与应用
+, 引言
’()*)+, 提供的 5(6789(+ 软件, 采用的是 --0 ( -8(+: :8 -8(+: ) 协 议, 仅 仅 可 以 用 来 传 输、 调试 -./ 程序, 不知是出于保密还是其它原因, 并不向 外界公布源代码。在现场应用中, 当需要 -./ 与 上位机通信时, 普遍使用自定义协议与上位机通 信。在这种通信方式中, 需要编程者首先定义自 己的自由通信格式, 在 -./ 中编写代码, 利用中断 方式控制通信端口的数据收发。采用这种方式, -./ 编程调试较为烦琐, 占用 -./ 的软件中断和 代码资源, 而且当 -./ 的通信口定义为自由通信 口时, -./ 的 编 程 软 件 无 法 对 -./ 进 行 监 控, 给 -./ 程序调试带来不便。 利用 --0 协议实现通信, 可以大大简化控制 程序的编写难度。’()*)+, ’;<"&&-./ 的编程通信 接口, 内部固化 --0 通信协议, 如果上位机利用编 程通信口遵循 --0 协议来读写 -./ , 就可以省略编 写自定义模式下的 -./ 的通信代码, 可通过读写 的方式实现数据和控制命令的通信。
格式发读写指令, -./ 作出接收正确的响应返回 应答数据 =%? 或 @!?, 上位机接到此响应则发出 确认命令 ( $& &" %/ %= $3 ) , -./ 再返回给上位机 相应数据。 数据的组成格式是: ’A .= .=7 ’A AB ’B @/ A’B- ’’B- AC @/’ =A。 其 中: ’A 为 开 始 符 ( 3D?) ; .= , .=7 为数据长度 ( 从 AB 到 AC ) ; AB 为目的地址; ’B 为源地址; @/ 为功能码 ( 3/? ) ; A’B- 为目的服务存取点; ’’B- 为源服务存取点; AC 为 数 据 单 元; @/’ 为 校 验 和; =A 为 结 束 符 ( $3?) 。 -. -, 读命令分析 $4 $4 $E 一次读一条数据 对于一次读取一个数据, 读命令都是 >> 个字 节。前面的 & F "$ 字节是相同的, 为 :3D $2 $2 3D &" && 3/ >" &$ && && && && && &= && && &# &$ $" &B $& 。因为是 -/ 上发的读 -./ 数据的命令, 所以 ’B G && , AB G &" , 如果有多个站, AB 要改成 相应的站号。读命令中从 AB 到 AC 的长度为 $2 即 "; 个字节。 从 "" 字节开始根据读取数据的类型、 位置不 同而不同, 如表 $ 所示。 表中 2H:) "" 为读取数据 的 长 度: &$ 表 示 $ 2(:, &" 表示 $ 2H:), &# 表示 $ 987I , &3 表示 A8JKL) 987I ; 表中 2H:) "# 为数据个数: 这里是 &$ , 一次 读一个数据; 表中 2H:) "3 为存储器类别: &$ 表示 1 存储器, && 表示其它;表中 2H:) "; 为存储器型 号: &# 表示 ’,&% 表示 ’5,&3 表示 B0,&; 表示 BM, $= 表示 / , D$ 表示 0 , D" 表示 M, D> 表示 5,
Siemens MPI协议解析
Siemens MPI协议解析nono95599nono@摘要:在使用上位机和西门子s7300系列PLC实现自动化过程控制当中,选择MPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。
但是西门子公司没有公布MPI协议的格式,用户如果想使用MPI协议监控,就必须购买其监控产品或第三方厂家的组态软件。
这样给用户自主开发带来一定困难,特别是自行开发的现场设备就不能通过MPI协议接入PLC。
而采用其它通讯方式也存在编程复杂,需要购买软件和授权等局限性。
本文通过数据监视、采集、分析的方法,解析出了MPI协议的关键报文格式,可用于实现上位机、现场设备与支持MPI协议的CPU之间通讯,从而提供了一种高效率低成本的通信方式。
关键字:MPI协议前言工业的现代化,很大程度体现在工业生产过程的自动化,其中信息的传输,数据的交换也成为评价工业自动化水平高低的标准。
网络通迅方式的多样化和通迅速率的高速化,使信息交换领域从设备控制层延伸到企业管理层。
信息技术的飞速发展,促进了自动化系统结构的变革,以网络为主干的分布式控制系统已成为当今自动化系统的主流趋势。
因此,网络通迅的实时性和可靠性,以及网络故障的诊断和排除都成为工业网络通信关注的焦点。
MPI网络是西门子工业控制系统中经常用到的一种通迅方式,使用RS485物理接口进行数据传输。
下面主要阐述西门子MPI协议的解析方法以及关键报文格式。
MPI协议概述MPI协议,其英文全名为Multi-point-Interface。
在PLC之间可组态为主/主协议或主/从协议.如何操作依赖于设备类型:如果控制站都是s7—300/400系列PLC,那么就建立主/主连接关系,因为MPI协议支持多主站通讯,所有的s7—300 CPU都可配置为网络主站,通过主/主协议可以实现PLC之间的数据交换。
如果某些控制站是s7—200系列PLC,则可以建立主/从连接关系,因为s7—200 CPU是从站,用户可以通过网络指令实现s7—300 CPU对s7200 CPU的数据读写操作。
Siemens PPI协议分析
Siemens PPI协议分析大家好:我是山东临沂的郝金红,由于前段时间的疯狂的研究西门子PPI协议解密之故,所以无心插柳的研究出了较实用的西门子S7-200 PPI协议,今天奉献大家。
我们经常要用于上位机、现场设备与S7-200CPU之间的通讯,但是西门子公司没有公布PPI协议的格式,用户如果想使用PPI协议监控,必须购买其监控产品或第三方厂家的组态软件。
大家要知道国内的组态王、紫金桥、力控等等组态公司是花了多少钱才得到的PPI的深层协议吗?其实西门子工控产品的超高价垄断掠夺行为已经引起了我们国家及业内人士的抵制和抗议,他们的什么软件都需要授权且对于系统的霸道性是有目共睹的。
这样给用户自主开发就带来了一定的困难,特别是想用VB、VC等语言自行开发,根本没办法接入PLC,要么你大把掏钱给他们。
洋为中用,最近在国外网站得到一个串口监视软件,带协议分析的相当不错,你吧!我就是通过此软件的数据监视、分析方法,找出了PPI协议的关键报文格式所在。
其实西门子S7-200 PLC之间或者PLC与PC之间通信有很多种方式:自由口,PPI方式,MPI方式,Profibus方式。
使用自由口方式进行编程时,在上位机和PLC 中都要编写数据通信程序。
使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。
这也是我们之所以要研究、找出PPI协议的源动力!下面我们就要说说分析的方法了!西门子的STEP 7 MicroWIN 是用于S7-200系列PLC的开发工具,它使用PC机上的COM口通过一条PC/PPI编程电缆连到PLC的编程口上。
这说明,PC实际上是可以通过串口同S7-200 CPU通讯。
只是我们不知道通讯协议而已。
通过截获PC机串口上的收发数据,对照Step 7软件发出的指令,我们就有可能分析出有关指令的报文和通讯方式;然后,直接通过串口向PLC发送报文,以验证这些指令报文是否正确。
本着这一思想,我们采用以下步骤获得这些报文。
PPI协议详解 ppi通讯协议 ppi通信协议 vb与ppi协议通讯
PPI协议详解 ppi通讯协议 ppi通信协议vb与ppi协议通讯PPI协议详解一、引言PPI(Point-to-Point Interface)是一种用于工业自动化领域的通信协议,用于实现PLC(Programmable Logic Controller)与外部设备之间的数据交换。
本文将详细介绍PPI协议的基本原理、通信方式以及相关参数设置。
二、协议概述1. PPI协议是一种点对点的通信协议,即一台PC机与一台PLC之间建立一对一的通信连接。
2. PPI协议采用串行通信方式,使用RS485物理层接口进行数据传输。
3. PPI协议支持数据的读取和写入操作,可以实现PLC与PC机之间的双向数据交换。
三、通信协议1. 物理层接口:PPI协议使用RS485物理层接口,通过两根数据线(D+和D-)进行数据传输。
2. 通信速率:PPI协议支持多种通信速率,常见的有9.6Kbps、19.2Kbps、187.5Kbps等。
3. 数据帧格式:PPI协议的数据帧由起始位、数据位、校验位和停止位组成,其中校验位可以选择奇校验、偶校验或无校验。
4. 通信模式:PPI协议支持主从模式和从从模式两种通信模式。
在主从模式下,PC机作为主站发送指令,PLC作为从站接收指令并返回响应;在从从模式下,PC机和PLC都可以发送指令和接收响应。
四、通信过程1. 主站发送指令:PC机作为主站发送指令到PLC。
指令包括命令码、数据和校验位等信息。
2. 从站接收指令:PLC作为从站接收主站发送的指令,并进行校验。
3. 从站执行指令:PLC根据接收到的指令进行相应的操作,如读取数据、写入数据等。
4. 从站返回响应:PLC将执行结果返回给主站,包括数据、状态信息等。
5. 主站接收响应:PC机作为主站接收从站返回的响应,并进行校验。
6. 数据处理:PC机对接收到的数据进行解析和处理,如显示在界面上、保存到文件中等。
五、参数设置1. 通信地址:PLC和PC机之间需要设置通信地址,确保能够正确建立通信连接。
PPI协议详解 ppi通讯协议 ppi通信协议 vb与ppi协议通讯
PPI协议详解 ppi通讯协议 ppi通信协议vb与ppi协议通讯PPI协议详解1. 介绍PPI(Point-to-Point Interface)是一种用于工业自动化系统的通信协议,用于连接编程设备(如PC)与可编程逻辑控制器(PLC)之间的通信。
本协议旨在提供高效可靠的数据传输,使得编程设备能够与PLC进行数据交换和远程控制。
2. 协议结构PPI协议采用点对点的通信方式,分为物理层和数据链路层两部分。
2.1 物理层PPI协议使用RS485总线作为物理层传输介质,具有抗干扰能力强、传输距离远等特点。
编程设备和PLC通过RS485接口进行连接,其中编程设备作为主站,PLC作为从站。
2.2 数据链路层数据链路层负责数据的传输和错误检测。
PPI协议将数据分为帧进行传输,每帧由起始符、地址、数据、校验和等字段组成。
2.2.1 帧结构PPI协议的帧结构如下:起始符 | 地址 | 数据 | 校验和起始符:用于标识一帧数据的开始,通常为0x68。
地址:指定PLC的地址,用于区分不同的PLC。
数据:包含要发送或接收的数据。
校验和:用于检测数据传输过程中是否出现错误。
2.2.2 数据传输编程设备通过发送帧给PLC来传输数据,PLC接收到帧后进行处理,并可以返回响应帧给编程设备。
数据传输的过程中,编程设备和PLC通过交替发送和接收帧的方式进行通信。
3. PPI通讯协议PPI通讯协议定义了编程设备与PLC之间的通信规则和消息格式,包括数据读写、寄存器访问、程序控制等功能。
3.1 数据读写编程设备可以通过PPI通讯协议向PLC写入数据或读取数据。
写入数据时,编程设备发送写入命令帧给PLC,并携带要写入的数据。
读取数据时,编程设备发送读取命令帧给PLC,并等待PLC返回响应帧,响应帧中包含要读取的数据。
3.2 寄存器访问PPI通讯协议定义了一系列寄存器,用于存储和访问PLC的状态信息、输入输出信号等。
编程设备可以通过读写命令访问这些寄存器,实现对PLC的状态监测和控制。
西门子PPI通讯协议
?西门子PPI通讯协议!看看吧!S7-200?PLC之PPI协议?????通过硬件和软件侦听的方法,分析PLC内部固有的PPI通讯协议,然后上位机采用VB 编程,遵循PPI通讯协议,读写PLC数据,实现人机操作任务。
这种通讯方法,与一般的自由通讯协议相比,省略了PLC的通讯程序编写,只需编写上位机的通讯程序资源S7-226的编程口物理层为RS-485结构,SIEMENS提供MicroWin软件,采用的是PPI(Point?to?Point)协议,可以用来传输、调试PLC程序。
在现场应用中,当需要PLC与上位机通讯时,较多的使用自定义协议与上位机通讯。
在这种通讯方式中,需要编程者首先定义自己的自由通讯格式,在PLC中编写代码,利用中断方式控制通讯端口的数据收发。
采用这种方式,PLC编程调试较为烦琐,占用PLC的软件中断和代码资源,而且当PLC的通讯口定义为自由通讯口时,PLC的编程软件无法对PLC进行监控,给PLC程序调试带来不便。
SIEMENS?S7-200PLC的编程通讯接口,内部固化的通讯协议为PPI协议,如果上位机遵循PPI 协议来读写PLC,就可以省略编写PLC的通讯代码。
如何获得PPI协议?可以在PLC的编程软件读写PLC数据时,利用第三个串口侦听PLC的通讯数据,或者利用软件方法,截取已经打开且正在通讯的端口的数据,然后归纳总结,解析出PPI协议的数据读写报文。
这样,上位机遵循PPI协议,就可以便利的读写PLC内部的数据,实现上位机的人机操作功能。
软件设计?系统中测控任务由SIEMENS?S7-226PLC完成,PLC采用循环扫描方式工作,当定时时间到时,执行数据采集或PID控制任务,完成现场的信号控制。
计算机的监控软件采用VB编制,利用MSComm控件完成串口数据通讯,通讯遵循的协议为PPI协议。
?PPI协议西门子的PPI(Point?to?Point)通讯协议采用主从式的通讯方式,一次读写操作的步骤包括:首先上位机发出读写命令,PLC作出接收正确的响应,上位机接到此响应则发出确认申请命令,PLC则完成正确的读写响应,回应给上位机数据。
S型PLC之间的PPI协议通信
易于配置和管理: PPI协议的参数 配置相对简单, 方便用户进行通 信设置和管理, 降低了使用门槛 和维护成本。
S型PLC之间的PPI协议通信的不足
通信速度较慢 通信距离有限 容易受到干扰 兼容性较差
S型PLC之间的PPI协议通信的发展方向
优化通信协议:提高通信效率 和稳定性
增强安全性:确保数据传输的 安全性和完整性
系统设计:根据需求分析,设计S 型PLC控制系统,包括硬件配置、 软件编程等
添加标题
添加标题
添加标题
添加标题
需求分析:需要实现水处理工艺流 程的自动化控制,包括水泵、阀门、 液位等设备的控制
实施效果:通过实际运行,该水处 理厂的S型PLC控制系统实现了自 动化控制,提高了生产效率和水质
案例三:某电力系统的S型PLC控制系统
拓展通信接口:支持更多种类 的通信接口和协议
智能化发展:结合人工智能和 大数据技术,实现更高级的自 动化控制和数据分析功能
05 实际应用案例分析
案例一:某工厂的S型PLC控制系统
案例背景:某工厂的S型PLC控制系统,用于控制生产线的自动化运行。
案例描述:该系统通过PPI协议实现PLC之间的通信,实现了对生产线设备的远程监控 和控制。
通信方式:S型PLC之间的PPI协议通信采用轮询方式,即主站按照一定的时间间隔依 次向各个从站发送数据请求,从站接收到数据请求后,将数据发送回主站。
通信过程:主站通过以太网向从站发送数据请求,从站接收到数据请求后,将数据发 送回主站。主站对接收到的数据进行处理,实现PLC之间的数据交换和控制。
S型PLC之间的PPI协议通信配置
注意事项:确保硬 件连接正确、参数 设置合理、程序编 写无误、测试结果 准确
西门子串口引脚定义及协议使用
西门子串口引脚定义及协议使用串口通讯,又经常被称为点对点通讯或者PtP通讯,是工业设备中的一种非常通用的通讯方式,常用于获取相对远程采集设备的数据。
串行通信,通常利用RS232C或者RS485电气接口,实现ASCII码或者Modbus通讯;其特点是通信线路简单,成本较低,用于解决不同厂商产品之间节点少、数据量小、通讯速率低、实时性要求不高的场合,如过程仪表、变频器、连接扫描仪、条码阅读器等带有串行通讯接口的设备,CP卡加载通讯协议后,还可以和支持Modbus协议的现场仪表通讯。
为了实现设备相互通讯,通讯双方的通讯接口和通讯协议要一致,最基本的串行通讯的数据帧格式和波特率也要匹配。
西门子串行通讯支持的数据帧格式:·起始位:1位;·数据位:7/8位;·校验位:1位奇/偶校验位,或者没有校验位;·停止位:1/2位。
常用的串行数据接口有:RS232C 和RS485/422。
RS-232C、RS-422/485 标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。
一、RS232C接口RS-232C 是低速率的单端串行通讯,RS-232C 采取不平衡传输方式,即所谓单端通讯。
1.RS232C 通讯接口特点·RS-232采取不平衡传输方式,其收、发端的数据信号是相对于信号地,抗共模干扰能力差;·近距离通讯,最大通信距离15m;·只能用于点对点(即一对收/发设备)通讯。
2. RS232C 接口定义RS232C并未定义连接器的物理特性,不同类型的连接器引脚定义也各不相同,其中9针和25针的引脚定义对照,所示。
最为简单且常用的是三线制接法,即Txd,Rxd和地线三根,如上图中红色(2,3)和紫色(5)三个针脚。
二、RS422/485 接口RS-422/485 改进RS-232 通信距离短、速率低的缺点。
PPI协议
PPI协议
PPI通讯协议SIEMENS专为s7-200plc开发的通信协议。
是一种主从协议,主站发送要求到从站,从站响应。
默认情况下,s7-200cpu工作在PPI从站模式,要执行网络读写指令,必须用程序吧CPU设置为PPI主站模式,此时可以利用网络读写指令读写其他的PLC,也可以响应其他主站的申请。
网络读指令NETR、网络写指令NETW格式为:
NETR TBL,PORT //TBL;VB,MB
NETW TBL,PORT //PORT;0,1
PPI协议可以运行在多种类型的串口网络上,包括COM、USB、以太网等。
而“PPI接口”只是一种习惯称谓,不规范,但是业内都能理解。
严格的讲应该是“执行PPI协议的通讯接口”。
在S7-200中,PPI接口多指PLC上的PORT(RS485标准),其默认状态下是执行PPI 协议的;如果将其设置为自由口模式,则成为普通的RS485接口,可以执行用户指定的通讯协议。
PPI协议解密
Siemens PPI协议分析大家好:我是山东临沂的郝金红,PLC解密网是我的个人网站。
由于前段时间的疯狂的研究西门子PPI协议解密之故,所以无心插柳的研究出了较实用的西门子S7-200 PPI协议,今天奉献大家。
我们经常要用于上位机、现场设备与S7-200CPU之间的通讯,但是西门子公司没有公布PPI协议的格式,用户如果想使用PPI协议监控,必须购买其监控产品或第三方厂家的组态软件。
大家要知道国内的组态王、紫金桥、力控等等组态公司是花了多少钱才得到的PPI的深层协议吗?其实西门子工控产品的超高价垄断掠夺行为已经引起了我们国家及业内人士的抵制和抗议,他们的什么软件都需要授权且对于系统的霸道性是有目共睹的,而且我是深受其害的。
^_^我最近弄了个WINCC,装了一个星期还没装上,网友告诉我要重做系统才可以,悲哀啊。
这样给用户自主开发就带来了一定的困难,特别是想用VB、VC等语言自行开发,根本没办法接入PLC,要么你大把掏钱给他们。
洋为中用,最近在国外网站得到一个串口监视软件,带协议分析的相当不错,你吧!我就是通过此软件的数据监视、分析方法,找出了PPI协议的关键报文格式所在。
其实西门子S7-200 PLC之间或者PLC与PC之间通信有很多种方式:自由口,PPI方式,MPI方式,Profibus方式。
使用自由口方式进行编程时,在上位机和PLC中都要编写数据通信程序。
使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。
这也是我们之所以要研究、找出PPI协议的源动力!下面我们就要说说分析的方法了!西门子的STEP 7 MicroWIN 是用于S7-200系列PLC的开发工具,它使用PC 机上的COM口通过一条PC/PPI编程电缆连到PLC的编程口上。
这说明,PC实际上是可以通过串口同S7-200 CPU通讯。
只是我们不知道通讯协议而已。
通过截获PC机串口上的收发数据,对照Step 7软件发出的指令,我们就有可能分析出有关指令的报文和通讯方式;然后,直接通过串口向PLC发送报文,以验证这些指令报文是否正确。
Siemens MPI协议解析
Siemens MPI协议解析协议名称:Siemens MPI协议解析一、引言Siemens MPI协议是一种用于工业自动化领域的通信协议,主要用于实现Siemens系列PLC(可编程逻辑控制器)与其他外部设备之间的数据传输和通信。
本协议解析旨在详细描述Siemens MPI协议的结构、功能和使用方法,以便用户能够准确理解和应用该协议。
二、协议结构1. 物理层Siemens MPI协议使用RS485串行通信接口进行数据传输,通信速率可调节,常见的速率有9600bps、19200bps、38400bps等。
通信线路采用双绞线连接,其中一根线为数据线,另一根线为地线。
2. 数据链路层Siemens MPI协议采用了自定义的数据链路层协议,用于实现数据的可靠传输和错误检测。
数据链路层协议的格式如下:- 帧起始符:占1个字节,固定为0x68。
- 帧长度:占1个字节,表示数据帧的长度,不包括帧起始符和帧长度本身。
- 帧类型:占1个字节,表示数据帧的类型,如读取数据帧、写入数据帧等。
- 地址域:占1个字节,表示PLC的地址。
- 控制字段:占1个字节,用于控制数据帧的传输。
- 数据域:占n个字节,存储实际的数据内容。
- 帧校验:占1个字节,用于检测数据帧的完整性。
- 帧结束符:占1个字节,固定为0x16。
3. 功能层Siemens MPI协议定义了一系列功能码,用于实现不同类型的数据传输和操作。
常见的功能码包括:- 读取数据:用于从PLC中读取指定地址的数据。
- 写入数据:用于向PLC中写入指定地址的数据。
- 批量读取数据:用于一次性读取多个地址的数据。
- 批量写入数据:用于一次性写入多个地址的数据。
- 执行控制命令:用于执行PLC中的控制命令,如启动、停止等。
4. 应用层Siemens MPI协议的应用层定义了具体的数据格式和传输规则,用于实现不同类型的数据交互。
根据实际需求,可以定义不同的应用层协议,如数据采集协议、报警处理协议等。
改进的西门子PPI通讯协议程序,支持主和从!做主时,PLC不用写一行通讯程序
改进的西门子PPI通讯协议程序,支持主和从!做主时,PLC不用写一行通讯程序//*******************本程序实现两个串行口可以同时异步通讯,在MEGA162,MEGA64上成功实现//**Purpose: 当PPI本机为从时,接受到了主的命令,命令有两种,申请和确认//** uc_rec_len是长度,不是下标。
先效验返回为发送串长(下标),返回0xff为不发送UCHAR ppi_reqframe_anlys_slaver(UCHAR uc_ch,UCHAR *puc_rec_buf,UCHARuc_rec_len,UCHAR *puc_send_buf,uchar me_address){static uchar st_uc_ppi_var_type[MCU_UART_NUM] = {2,2};//传输的数据类型static uchar st_uc_ppi_var_num[MCU_UART_NUM];//传输的数据个数static uint st_ui_ppi_me_var_add[MCU_UART_NUM];static uchar st_uc_ppi_connect_type[MCU_UART_NUM]={0,0};UCHAR ucp_send_count,uc_count;UINT u16;UCHAR uc_mid1,uc_mid2,uc_mid3;if((*puc_rec_buf) == 0x10)//确认命令{if((uc_rec_len != 6) || (*(puc_rec_buf+5)!=0x16))//长度不对,或者结束符号不对 {return(0xfe);}if(*(puc_rec_buf + 1) != me_address){return(0xfe);}if(uc_ppi_addtest(puc_rec_buf+1, uc_rec_len-3) != *(puc_rec_buf + uc_rec_len - 2))//效验{return(0xfe);}//10 03 02 5c 61 16//if(st_uc_ppi_connect_type[uc_ch] == 0)//还没连接//{// return(0xfe);//}//以上是2008.6.24修改,因为如果上电或其他因素//首发DC命令,再发49命令,以上导致对49命令无响应(因为无连接),而PLC死循环ucp_send_count = 0;if(*(puc_rec_buf + 3) != 0x49) //最多出现的是5C,而7C也见过{uc_count = st_uc_ppi_var_num[uc_ch]; //此后的计算结果,uc_count将成为字节数uc_mid1 = st_uc_ppi_var_type[uc_ch];if(uc_mid1 == 4)//如果是字{uc_count *=2;}else if(uc_mid1 == 6)//如果是双字{uc_count *=4;}else if(uc_mid1 == 1)//位{return(0xfe);}if((uc_count+26) >= comm_array_max_xb){return(0xfe);}if(st_uc_ppi_connect_type[uc_ch] == 1)//连接的性质,主PLC读本机{uc_mid1 = 0x15 + uc_count;uc_mid2 = 4 + uc_count;uc_mid3 = 0x04;}else{uc_mid1 = 0x12;uc_mid2 = 0x01;uc_mid3 = 0x05;}*(puc_send_buf + ucp_send_count++) = 0x68;*(puc_send_buf + ucp_send_count++) = uc_mid1;*(puc_send_buf + ucp_send_count++) = uc_mid1;*(puc_send_buf + ucp_send_count++) = 0x68;*(puc_send_buf + ucp_send_count++) = *(puc_rec_buf + 2);//对方地址*(puc_send_buf + ucp_send_count++) = *(puc_rec_buf + 1);//本机地址*(puc_send_buf + ucp_send_count++) = 0x08;*(puc_send_buf + ucp_send_count++) = 0x32;*(puc_send_buf + ucp_send_count++) = 0x03;*(puc_send_buf + ucp_send_count++) = 0x00;*(puc_send_buf + ucp_send_count++) = 0x00;*(puc_send_buf + ucp_send_count++) = uc_ppi_comm_count[uc_ch]; //通讯次数*(puc_send_buf + ucp_send_count++) = uc_ppi_comm_count[uc_ch]; //主机来是多少,返回就是多少*(puc_send_buf + ucp_send_count++) = 0x00;*(puc_send_buf + ucp_send_count++) = 0x02; //不管是字还是字节,固定为2 *(puc_send_buf + ucp_send_count++) = 0x00;*(puc_send_buf + ucp_send_count++) = uc_mid2;*(puc_send_buf + ucp_send_count++) = 0x00;*(puc_send_buf + ucp_send_count++) = 0x00;*(puc_send_buf + ucp_send_count++) = uc_mid3;*(puc_send_buf + ucp_send_count++) = 0x01;*(puc_send_buf + ucp_send_count++) = 0xff;if(st_uc_ppi_connect_type[uc_ch] == 1)//连接的性质,主PLC读本机{*(puc_send_buf + ucp_send_count++) = 0x04;u16 = uc_count;u16 *= 8;*(puc_send_buf + ucp_send_count++) = HI_UINT(u16);*(puc_send_buf + ucp_send_count++) = LO_UINT(u16);for(uc_mid1 = 0;uc_mid1<uc_count;uc_mid1++){*(puc_send_buf + ucp_send_count++) =uc_PPI_ret_Word(st_ui_ppi_me_var_add[uc_ch] + uc_mid1);}}//从4开始,就是从地址开始,-4是个数uc_mid1 = uc_ppi_addtest(puc_send_buf + 4,ucp_send_count-4);*(puc_send_buf + ucp_send_count++) = uc_mid1;*(puc_send_buf + ucp_send_count) = 0x16;return(ucp_send_count); //返回的是下标}else //if((*puc_rec_buf + 3) == 0x49) )似乎主机在问本机是不是也是主机,回答不是{*(puc_send_buf + ucp_send_count++) = 0x10;*(puc_send_buf + ucp_send_count++) = *(puc_rec_buf + 2);//对方地址*(puc_send_buf + ucp_send_count++) = *(puc_rec_buf + 1);//本机地址*(puc_send_buf + ucp_send_count++) = 0; //告诉主机*(puc_send_buf + ucp_send_count++) = uc_ppi_addtest(puc_send_buf+1,3);*(puc_send_buf + ucp_send_count) = 0x16;return(5); //返回的是下标}//if((*puc_rec_buf + 3) == 0x5c))}//确认命令至此完成了/////////////////////////////////////////////////////////////////////////////// ////////////////////////热烈祝贺确认类型命令完成了,下面是申请命令,地址和效验都要重新做/////////////////////////////////////////////////////////////////////////////// //////////////////////else if(((*puc_rec_buf) == 0xdc) || ((*puc_rec_buf) == 0x68)) //可能是呼叫申请,也可能是其他PPI的数据{if((uc_rec_len < 33) || (*(puc_rec_buf + uc_rec_len - 1) != 0x16))//长度不对,或者结束符号不对{return(0xfe);}if((*puc_rec_buf) == 0xdc){puc_rec_buf += 3;uc_rec_len -= 3;if((*puc_rec_buf) != 0x68){return(0xfe);}}if(*(puc_rec_buf + 4) != me_address){return(0xfe);} //地址效验puc_rec_buf += 3; //从第二个68开始uc_rec_len -= 3; //长度跟着调整if(uc_ppi_addtest(puc_rec_buf+1,uc_rec_len-3) != *(puc_rec_buf + uc_rec_len - 2)) //和效验{//st_uc_ppi_connect_type[uc_ch] = 0;//地址对了,但是效验错了,取消连接?//2008.6.24 不取消连接return(0xfe);}//以下效验也对了st_uc_ppi_var_type[uc_ch] = *(puc_rec_buf + 19);st_uc_ppi_var_num[uc_ch] = *(puc_rec_buf + 21);uc_ppi_comm_count[uc_ch] = *(puc_rec_buf + 8);st_ui_ppi_me_var_add[uc_ch] = MAKE_UINT(*(puc_rec_buf + 26),*(puc_rec_buf + 27)) / 8;if(*(puc_rec_buf - 1) == 0x1b)//st_uc_ppi_connect_type[uc_ch]=1是读,2是写{st_uc_ppi_connect_type[uc_ch] = 1; //主PLC要从本机读数据*(puc_send_buf) =0xe5;return(0); //返回的是下标,却只发一个字节}//PLC写入功能不用包含在只读的采集模块仪表中else if(*(puc_rec_buf - 1) >= 0x20)//是写入命令,主PLC写入信息{st_uc_ppi_connect_type[uc_ch] = 2;uc_count = st_uc_ppi_var_num[uc_ch]; //此后的计算结果,uc_count将成为字节数uc_mid1 = st_uc_ppi_var_type[uc_ch];if(uc_mid1 == 4)//如果是字{uc_count *=2;}else if(uc_mid1 == 6)//如果是双字{uc_count *=4;}else if(uc_mid1 == 1)//位{return(0xfe);}for(uc_mid1 = 0;uc_mid1<uc_count;uc_mid1++){PPI_write_singleReg(st_ui_ppi_me_var_add[uc_ch] + uc_mid1, *(puc_rec_buf + 32 + uc_mid1));//开始地址+字节指针从32(35从第一个68开始)}*(puc_send_buf) =0xe5;//发E5return(0); //返回的是下标,却只发一个字节}else //不是读,也不是写,不认识{//st_uc_ppi_connect_type[uc_ch] = 0;//2008.6.24不取消连接return(0xfe);}}//else if(((*puc_rec_buf) == 0xdc) || ((*puc_rec_buf) == 0x68))return(0xfe);}//***************************************************************************** ************//***************************************************************************** ************UCHAR ppi_send_command_10(UCHAR *puc_send_buf,UCHAR me_address,UCHARuc_plc_address,UCHAR uc_command){UCHAR uc_mid,uc_loop;UCHAR ucp_send_count = 0;*(puc_send_buf + ucp_send_count++) = 0x10;*(puc_send_buf + ucp_send_count++) = uc_plc_address;*(puc_send_buf + ucp_send_count++) = me_address;*(puc_send_buf + ucp_send_count++) = uc_command;uc_mid = 0;for(uc_loop =1; uc_loop < ucp_send_count;uc_loop++){uc_mid += *(puc_send_buf + uc_loop);}*(puc_send_buf + ucp_send_count++) = uc_mid;*(puc_send_buf + ucp_send_count) = 0x16;return(ucp_send_count);}//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//*****************************************************************************************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//***************************************************************************** ************//业务流程有必要写一下//主发写命令,从返回E5(准备就绪命令),主收到后发确认命令(10SLAVER,MASTER,5C,ADD,16),从发(68 12 12 68 。
c#与西门子PLC串口通讯PPI协议破解
c#与西门子PLC串口通讯PPI协议破解波特率:9600校验位:EVEN数据位:8停止位:1发送读M0.0:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 01 00 01 00 00 83 00 00 00 65 16返回:E5发送执行命令:10 02 00 5C 5E 16返回0:68 16 16 68 00 02 08 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 03 00 01 00 4E 16返回1:68 16 16 68 00 02 08 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 03 00 01 01 4F 16发送读M0.1:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 01 00 01 00 00 83 00 00 01 66 16返回:E5发送执行命令:10 02 00 5C 5E 16返回0: 68 16 16 68 00 02 08 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 03 00 01 00 4E 16发送读Q0.1:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 01 00 01 00 00 82 00 00 01 65 16返回:E5发送执行命令:10 02 00 5C 5E 16返回0:68 16 16 68 00 02 08 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 03 00 01 00 4E 16发送读Q0.2:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 01 00 01 00 00 82 00 00 02 66 16返回:E5发送执行命令:10 02 00 5C 5E 16返回1:68 16 16 68 00 02 08 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 03 00 01 01 4F 16发送读I0.1:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 01 00 01 00 00 81 00 00 01 64 16返回:E5发送执行命令:10 02 00 5C 5E 16返回0: 68 16 16 68 00 02 08 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 03 00 01 00 4E 16返回1: 68 16 16 68 00 02 08 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 03 00 01 01 4F 16写M0.0=1:先发10 02 00 5C 5E 16 收到E5后发68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 01 00 01 00 00 8300 00 00 00 03 00 01 01 80 16收到E5 说明写入完成(只要报文长度,跟校验码对了,就会回复E5)写M0.1=1:先发10 02 00 5C 5E 16 收到E5后发:68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 01 00 01 00 00 8300 00 01 00 03 00 01 01 81 16收到E5 说明写入完成(只要报文长度,跟校验码对了,就会回复E5)写M0.1=0:先发10 02 00 5C 5E 16 收到E5后发:68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 01 00 01 00 00 8300 00 01 00 03 00 01 00 80 16收到E5 说明写入完成(只要报文长度,跟校验码对了,就会回复E5)发送完读指令后,要发写指令前先发10 00 02 00 02 16 呼叫指令,再发10 02 00 5C 5E 16~~~。
西门子PLC几种常见的连接口和通讯协议
西门子PLC几种常见的连接口和通讯协议第一个大问题:RS232接口与RS485接口的区别一、接口的物理结构1、RS232接口:计算机通讯接口之一,通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1 和 COM2。
2、RS485RS485无具体的物理形状,根据工程的实际情况而采用的接口。
二、接口的电子特性1、RS232:传输电平信号接口的信号电平值较高(信号“1”为“-3V至-15V”,信号“0”为“3至15V”),易损坏接口电路的芯片,又因为与TTL电平(0~“<0.8v”,1~“>2.0V”)不兼容故需使用电平转换电路方能与TTL电路连接。
另外抗干扰能力差。
2、RS485:传输差分信号逻辑“1”以两线间的电压差为+(2—6)V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。
接口信号电平比RS-232降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。
三、通讯距离长短1、RS232:RS232传输距离有限,最大传输距离标准值为15米,且只能点对点通讯,最大传输速率最大为20kB/s。
2、RS485:RS485最大无线传输距离为1200米。
最大传输速率为10Mbps,在100Kb/S的传输速率下,才可以达到最大的通信距离。
采用阻抗匹配、低衰减的专用电缆可以达到1800米!超过1200米,可加中继器(最多8只),这样传输距离接近10Km。
四、能否支持多点通讯RS232:RS232接口在总线上只允许连接1个收发器,不能支持多站收发能力,所以只能点对点通信,不支持多点通讯。
RS485:RS485接口在总线上是允许连接多达128个收发器。
即具有多站通讯能力,这样用户可以利用单一的RS485接口方便地建立起设备网络。
五、通讯线的差别RS232:可以采用三芯双绞线、三芯屏蔽线等。
简述西门子PLC常用通讯协议及其特点
简述西门子PLC常用通讯协议及其特点1、引言随着烟厂生产工艺信息化的逐渐健全,不同生产工艺控制单元之间的信息交换变得越来越必不可少。
信息交换使各个控制单元与其控制细胞之间以及不同控制单元之间建立信息联系,克服控制单元的“孤岛”效应,增加了控制系统的安全可靠性、经济性,同时也加速了自动化的发展。
本文重点介绍了在烟厂中应用的西门子的几种控制网络通信协议以及各自具有的特点,最后进行总结。
2、在烟厂中应用的西门子工业控制网络通信协议简介在烟厂中应用的西门子工业控制网络通信协议包括以下几种:2.1PPI网络通信协议PPI网络通信协议用于S7—200PLC、上位机与TD200之间的串行通信协议,也是S7—200系列基本的通信方式,不需要格外的扩展模块,可以通过PPI口来实现。
PPI网络通信协议使用双绞电缆联网,通信接口即为S7—200系列上CPU集成编程接口。
在烟厂中应用的PPI网络通信协议信号传递简单易行,不使用额外的软硬件,经济实惠。
2.2PtP网络通信协议PtP网络通信协议与S7—300/400系统为点对点通信。
点对点通信即为两点之间的信息交流,仅支持两台硬件设备进行通信。
在烟厂中应用的$7300/400与另外的串行通信设备之间的数据交换可用S7—300/400的网络通信模块来实现。
PtP网络通信协议既可用于西门子产品也兼容第三方产品,前提是必须满足通信模块与相应的通信方使用双方支持的一种通信方式。
在烟厂中应用的PtP通信与PPI通信的区别在于S7—300,S7—400的PtP网络通信接口不支持PPI网络通信协议,PtP通信接口一般使用SFB60(SEND)/SFB6 1(RCV)具体编程来实现RS485/422通信(串行通信)。
2.3MPI网络通信协议在烟厂中应用的MPI网络通信协议即多点串行通信协议,也是多点通信接口的简称,其通信速率为19.2 Kbit/s-12 Mbit/s,适用于烟厂中相距距离小、站点数目不多的站点之间的通信。
PPI协议详解 ppi通讯协议 ppi通信协议 vb与ppi协议通讯
PPI协议详解 ppi通讯协议 ppi通信协议vb与ppi协议通讯PPI协议详解1. 引言PPI(Point-to-Point Interface)协议是一种用于工业自动化领域的通信协议,用于实现PLC(可编程逻辑控制器)与外部设备之间的通信。
本文将详细介绍PPI协议的定义、特点、通信方式以及与VB语言的通信。
2. 定义PPI协议是西门子公司开发的一种串行通信协议,用于PLC与外部设备之间的数据交换。
它基于RS485物理层通信标准,通过串行通信方式实现点对点的数据传输。
3. 特点3.1 高可靠性:PPI协议采用差分信号传输,具有抗干扰能力强的特点,适用于工业环境中的长距离通信。
3.2 简单易用:PPI协议的通信格式简单明了,易于实现和调试。
3.3 数据传输速率可调:PPI协议支持不同的数据传输速率,可根据实际需求进行调整。
4. 通信方式4.1 物理连接:PPI协议使用RS485接口进行通信,需要通过串行通信线缆将PLC与外部设备连接起来。
通信线缆一般采用双绞线,长度可根据具体情况而定。
4.2 通信协议:PPI协议定义了数据帧的格式,包括起始位、数据位、校验位和停止位等。
数据帧的结构清晰,便于数据的解析和处理。
4.3 通信流程:PPI协议的通信流程包括握手、数据传输和确认等步骤。
通信的发起方发送请求帧,接收方接收请求帧并发送响应帧进行确认。
通信双方通过协商确定数据的传输方式和速率。
5. VB与PPI协议通信5.1 VB语言支持:VB语言是一种常用的编程语言,可以通过串口通信模块与PLC进行通信。
VB语言提供了丰富的API接口,可以方便地实现与PPI协议的数据交互。
5.2 通信流程:在VB程序中,首先需要建立与PLC的串口连接,然后按照PPI协议的通信方式进行数据的发送和接收。
VB程序可以通过调用相应的API函数实现数据的封装和解析。
5.3 数据处理:VB程序可以对接收到的数据进行处理和分析,根据实际需求进行相应的业务逻辑操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Siemens PPI协议分析大家好:我是山东临沂的郝金红,PLC解密网是我的个人网站。
由于前段时间的疯狂的研究西门子PPI协议解密之故,所以无心插柳的研究出了较实用的西门子S7-200 PPI协议,今天奉献大家。
我们经常要用于上位机、现场设备与S7-200CPU之间的通讯,但是西门子公司没有公布PPI协议的格式,用户如果想使用PPI协议监控,必须购买其监控产品或第三方厂家的组态软件。
大家要知道国内的组态王、紫金桥、力控等等组态公司是花了多少钱才得到的PPI的深层协议吗?其实西门子工控产品的超高价垄断掠夺行为已经引起了我们国家及业内人士的抵制和抗议,他们的什么软件都需要授权且对于系统的霸道性是有目共睹的,而且我是深受其害的。
^_^我最近弄了个WINCC,装了一个星期还没装上,网友告诉我要重做系统才可以,悲哀啊。
这样给用户自主开发就带来了一定的困难,特别是想用VB、VC等语言自行开发,根本没办法接入PLC,要么你大把掏钱给他们。
洋为中用,最近在国外网站得到一个串口监视软件,带协议分析的相当不错,你吧!我就是通过此软件的数据监视、分析方法,找出了PPI协议的关键报文格式所在。
其实西门子S7-200 PLC之间或者PLC与PC之间通信有很多种方式:自由口,PPI方式,MPI方式,Profibus方式。
使用自由口方式进行编程时,在上位机和PLC中都要编写数据通信程序。
使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。
这也是我们之所以要研究、找出PPI协议的源动力!下面我们就要说说分析的方法了!西门子的STEP 7 MicroWIN 是用于S7-200系列PLC的开发工具,它使用PC 机上的COM口通过一条PC/PPI编程电缆连到PLC的编程口上。
这说明,PC实际上是可以通过串口同S7-200 CPU通讯。
只是我们不知道通讯协议而已。
通过截获PC机串口上的收发数据,对照Step 7软件发出的指令,我们就有可能分析出有关指令的报文和通讯方式;然后,直接通过串口向PLC发送报文,以验证这些指令报文是否正确。
本着这一思想,我们采用以下步骤获得这些报文。
首先你这个英文的串口监控软件,英文不好的网友可以用金山快译翻译一下,你必须使用这个软件,因为我先前使用过很多的监控软件,在收发数据很多的情况下都有死机现象,造成数据丢失,容易给我们错误分析。
接下来你先打开这个软件,新建、选择端口COM1,然后再将PC/PPI编程电缆接在COM1上,这样,Step7 Micro/Win发给PLC的报文就可以在监视软件上完全裸露的展现在你的面前了。
我们按S7-200系统手册设置好串口参数:9600,8,E偶校验,1位停止位。
然后设置好Step7软件,使之能与S7-200 CPU正常通讯。
从Step7软件中发出一个明确指令,监视软件就能显示这条报文了(用16进制显示,ASCII 码的只能看到几个版本号之类的,其他都没有意义)。
我们的破解策略就是通过软件监视的方法,分析PLC内部固有的PPI通讯协议,然后上位机采用VB编程,遵循PPI通讯协议,读写PLC数据,实现人机操作任务。
这种通讯方法,与一般的自由通讯协议相比,省略了PLC的通讯程序编写,只需编写上位机的通讯程序资源。
S7-200的编程口物理层为RS-485结构,SIEMENS提供MicroWin软件,采用的是PPI(Point to Point)协议,关于232串口转485你可以采用我们网站开发研制的自制PPI电缆,效果倍好哦!还是自己动手,丰衣足食啊!不能光说不练啊!下面我们就说说西门子PLC到底是怎么通讯的。
PC与PLC采用主从方式通讯,PC按如下文的格式发读写指令,PLC作出接收正确的响应(返回应答数据E5H或F9H见下文分析),上位机接到此响应则发出确认命令(10 02 5C 5E 16),PLC再返回给上位机相应数据。
一般上位机要连接PLC就要先发送如下寻呼数据 10 02 00 49 4B 16 同志们呐!我们可都是有血、有肉、有思想、有灵感的高级动物啊,面对这么多枯燥、无味、复杂、混乱的机器数字你怎么记呢?反正我是记不住啊!(^_^开始洗脑)这时你可以闭上眼睛,安静、静、再静。
想一想战争时期的战地对讲机通话模式,那么这个指令(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收到,请指示这样的解释是不是很好理解啊!你有更好的解释吗?接下来呢,找到了要寻呼的人PC上位机,就是司令啦!就可以发号施令了,发号施令后PLC正确接收后就会发送 E5 字符,意思是:“02洞两明白”。
其实啊,说到这里PLC只说他明白,他已经明白了上位机PC的指示,但并没有执行命令,那么要怎么他才执行命令呢?就是上位机PC发出确认命令后才执行。
这时上位机会发出确认指令(10 02 5C 5E 16),意思是:“请立即执行”。
然后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 EDSD:(Start Delimiter)开始定界符(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 Service Access Point)源服务存取点DU:(Data Unit)数据单元FCS:(Frame Check Sequence)校验码ED:(End Delimiter)结束分界符(16H)报文数据长度和重复数据长度为自DA至DU的数据长度,校验码为DA至DU数据的和校验,只取其中的末字节值关于这个校验码的计算方法同上面说明。
在读写PLC的变量数据中,读数据的功能码为 6CH,写数据的功能码为 7CH。
对于一次读取一个数据,读命令都是33个字节。
前面的0—21字节是相同的,为读取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因为是PC上发的读PLC数据的命令,SA=00,DA=02,如果有多个站,DA要改成相应的站号。
读命令中从DA到DU的长度为1B即27个字节。
从22字节开始根据读取数据的类型、位置不同而不同。
上表是读不同存储器命令的Byte22—32。
上表读命令的Byte22-32从表中我们可以得出以下结果:Byte 22 读取数据的长度01:1 Bit 02:1 Byte04:1 Word 06:Double WordByte 24数据个数,这里是01 ,一次读多个数据时见下面的说明。
Byte 26 存储器类型,01:V存储器 00:其它Byte 27 存储器类型04:S 05:SM 06:AI 07:AQ 1E: C81:I 82:Q 83:M 84:V 1F: TByte 28,29,30存储器偏移量指针(存储器地址*8),如:VB100,存储器地址为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=8Byte 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写入位置及值长度个数类型偏移量位数值、校验码、结束符M0.0=1 01 00 01 00 00 82 00 00 00 00 03 00 01 01 00 71 16M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16VD100=FFFFFFFF 06 0001 0001 8400 03 2000 0400 20 FF FF FF FF B8 16写命令的Byte22—最后,经分析我们可以得出以下结果:Byte 22-- Byte 30 写入数据的长度、存储器类型、存储器偏移量与读命令相同。