S7-200型PLC之间的PPI协议通信.ppt
S7-200型PLC之间的PPI协议通信之一,每个控制器管理一个生产工段,有时候各个工段间需要协同工作,这就要求在控制器之间传递信息。,PPI协议是西门子S7-200型PLC之间交换信息的专用协议,PPI协议是一种点对点协议,它只定义了一次通信中的主从问题,在不同时刻,节点的主从是可以变化的。,A机主,B机从,第一次通信,,A机从,B机主,第二次通信,,实际的工程中,为了便于网络管理和扩展,通常会指定一台S7-200为主机,其余为从机。,,,,,,主机,从机,从机,从机,S7-200型PLC组网通信时,从机不需要编写程序,读写数据的程序是放在主机上的,从机收到主机的读写请求后会自动响应回送数据。S7-200主机使用NETR和NETW指令来读写从机的数据。,主机,从机,读数NETR写数NETW,,,,,,,NETR/W指令读写指令只有一条,而一段完整的程序包含以下三个步骤1、通信口初始化强制通信口工作在PPI主站下,设定通信速率,数据位长度和校验2、装载从站信息指定对方的地址,数据区,读写的数据长度3、读数/写数,一段完整程序如下,通信口初始化,从机PPI地址3,读从机IB0开始的数据,读1个字节的数据,执行读指令,指令执行完后将读到的数据反映到QB0上,清空读写区域,下面通过分析一个例子来详细说明读写指令的使用。例1两台S7-200,一台PPI地址2,另一台PPI地址3,要求2号机的QB0与3号机的IB0同步变化(比如I0.0闭合,Q0.0吸合)。分析将地址为3的PLC上IB0的状态传送到地址为2的PLC上。,,,,AD2,AD3,IB0,QB0,,两种方法第一种,2号机读3号机,2号机为主机,3号机为从机。在2号机上编程,使用读指令(NETR)。,,,,AD2NETR,AD3无通信程序,IB0,QB0,,两种方法第二种,3号机向2号机写入数据,3号机为主机,2号机为从机。在3号机上编程,使用写指令(NETW)。,,,,AD2无通信程序,AD3NETW,IB0,QB0,,方法一2号机读3号机任务分解第一步从机(3号机)的编程和配置从机不需要编程,只需要在通信开始之前配置好从机的地址即可。第二步主机(2号机)的编程和配置(1)配置与从机类似,主机在通信开始之前也要配置地址(2)编程。注意在默认配置下S7-200的PPI地址是2。,第一步配置从机的PPI地址将从机的PPI地址设为3,编译下载。注意,CPU226有两个通信口P0和P1,,,,第二步配置主机的PPI地址将主机的PPI地址设为2,,,,问题这里的波特率配置对通信有没有影响,,,第三步编程1、通信口初始化,设定P0通信口的参数,SMB30210的含义如下PPI主站模式,速率为38400bit/S,数据位有8个位无奇偶校验,特殊功能寄存器SMB30和SMB130分别用来控制P0口和P1口的工作模式。想想看,要P0工作模式为PPI主站,速率115200bit/S,数据8位,偶校验,SMB30,10,110,0,01,SMB30201011010,第三步编程2、装载从站信息,清空读写区域将要读取的从机地址是3读从机IB0开始的连续数据区数据量是一个字节,每次最多读写16个字节的数据,第三步编程3、读指令,上面这行程序的意思是如果通信口空闲,执行读数指令,否则放弃等待下一个扫描周期。数据的收发与程序执行是异步的,如果扫描周期很短,则一条读/写数指令可能要经过几个周期才能执行完毕。如果上一条读数指令未执行完,又触发一个新的读指令,新的读指令将被乎略。,周期一,周期一,周期二,周期三,周期四,周期二,程序,通信,读写指令区读写指令并没有详细描述通信的具体细节,这些细节是由读写指令区域中的内容来指定的。读写指令区由五部份组成,是一个长度为823字节的区域,由定长和变长两个区域组成。,1、指令执行状态(1字节),2、从机地址(1字节),3、从机数据区起始地址(4字节),4、读写的数据量(1字节),5、主机的读写缓存(116字节),,定长区域,,变长区域,读写指令区读写指令区是一个长度为823字节的区域,具体内容如下,第一部份指令执行状态,指令执行状态字节位于读写指令区的最前面,用来表示指令执行的状态。D完成位D0,指令未触发,或己触发但未完成;D1,指令完成。A执行位A0,指令未触发;A1,指令正在执行。E错误位E0,指令未触发,或指令执行完且无通信错误发生;E1,执令执行完毕,但有通信错误发生,注意指令执行状态字节的内容在下一条读写指令执行前将保持不变,这一特点被用来触发新的一条读写指令。,D,A,E,0,错误代码,指令执行状态可以用状态字节来判断指令的执行情况,0,1,0,0,错误代码,1,0,0,0,错误代码,1,0,1,0,错误代码,指令正在执行,指令执行完毕,无错误,指令执行完毕,有错误,通信错误和错误代码主要用于通信故障分析,,完成,执行,错误,,,,,,第二部份远程站地址,从机的站地址,长度1个字节,有效取值1126。注意这里的设定值要与真实的从站地址一致,,,第三部份从站的数据区起始地址,数据区指针,长度4个字节。对于读指令,这里是读数的起始地址。对于写指令,这里是从机接收数据的起始地址。有效区域四种I、Q、M、V举例IB0,VB100,MB5,,第四部份读写的数据量,数据量读写的数据量,有效取值116。就是说每条读写指令最多读写16个字节的信息。,,第五部份主站的数据缓存区,数据缓存。对于读指令,从站读上来的信息,放到这里。对于写指令,往从站写入的信息放到这里。,,,,读指令(NETR),把上面指定的从站里的内容放到下面的区域里,,写指令(NETW),,把下面数据区里的内容写到上面指定的从站里,完整程序如下,通信口初始化,从机PPI地址3,读从机IB0开始的数据,读1个字节的数据,执行读指令,指令执行完后将读到的数据反映到QB0上,清空读写区域,上面演示的是第一种方法,2号机读3号机,2主3从想想看第二种方法,3号机向二号机写数据,3主2从,程序应该怎么写下节课的任务两台S7-200,要求其中一台的QB0与另一台的IB0同步变化,用两种方法实现。注意带上通信线,