第四章 PLC的通信及其通信模块的应用

第二节 PPI通信

4.2.1  PPI协议

1.初识PPI协议

    西门子的S7-200 PLC可以支持PPI通信、MPI通信(从站)、Modbus通信(从站)、USS通信、自由口协议通信、PROFIBUS-DP现场总线通信(从站)、AS-I通信和以太网通信。
    PPI是一个主从协议,主站向从站发出请求,从站作出应答。从站不主动发出信息,而是等候主站向其发出请求或查询,要求应答。主站通过由PPI协议管理的共享连接与从站通信。PPI不限制能够与任何一台从站通信的主站数目,但是无法在网络中安装32台以上的主站。
    PPI高级协议允许网络设备在设备之间建立逻辑连接。若使用PPI高级协议,每台设备可提供的连接数目有限。表4-2显示了S7-200提供的连接数目。PPI协议目前还没有公开。

表4-2  S7-200提供的连接数目

模    块 端   口 波  特  率 连    接
S7-200 CPU 端口0 9.6 kbaud、19.2 kbaud或187.5 kbaud 4个
  端口1 9.6 kbaud、19.2 kbaud或187.5 kbaud 4个
EM 277模块   9.6 kbaud至12 Mbaud 每个模块6个
 
    如果在用户程序中启用PPI主站模式,S7-200 CPU可在处于RUN(运行)模式时用作主站。启用PPI主站模式后,可以使用“网络读取”(NETR)或“网络写入”(NETW)指令从其他S7-200 CPU读取数据或向S7-200 CPU写入数据。S7-200用作PPI主站时,作为从站应答来自其他主站的请求。可以使用PPI协议与所有的S7-200 CPU通信。如果与EM 277通信,必须启用“PPI高级协议”。

2.网络读写指令的格式

    网络读取(NETR)指令,通过指定的端口(PORT)根据表格(TBL)定义从远程设备收集数据。NETR指令可从远程站最多读取16字节信息。网络写入(NETW)指令通过指定的端口(PORT)根据表格(TBL)定义向远程设备写入数据。NETW指令可向远程站最多写入16字节信息。可在程序中保持任意数目的NETR/NETW指令,但在任何时间最多只能有8条NETR和NETW指令被激活。例如,在特定S7-200中的同一时间可以有4条NETR和4条NETW指令(或者2条NETR和6条NETW指令)处于现用状态。网络读写指令格式见表4-3。

    如果功能返回出错信息,状态字中的E位位置。要启动“网络读取/网络写入指令向导”,选择“工具”→“指令向导”菜单命令,然后从“指令向导”对话框中选择“网络读取/网络写入”。
    网络读写指令具有相似的数据缓冲区,缓冲区以一个状态字起始。主站的数据缓冲区如图4-3所示。远程站的数据缓冲区如图4-4所示。
 

3.PPI主站的定义

    PLC用特殊寄存器的字节SMB30(对PORT0,端口0)和SMB130(对PORT1,端口1)定义通信口。控制位的定义如图4-5所示。

    ① 通信模式由控制字的最低的两位“mm”决定。

    ·mm=00:PPI从站模式(默认这个数值)。
    ·mm=01:自由口模式。
    ·mm=10:PPI主站模式。
    所以,只要将SMB30或SMB130赋值为2#10,即可将通信口设置为PPI主站模式。
    ②控制位的“pp”是奇偶校验选择。
    ·pp=00:无校验。
    ·pp=01:偶校验。
    ·pp=10:无校验。
    ·pp=10:奇校验。
    ③控制位的“d”是奇偶校验选择。
    ·d=0:每个字符8位。
    ·d=1:每个字符7位。
    ④ 控制位的“bbb”是奇偶校验选择。
    ·bbb=000: 38400bit/s。
    · bbb=001: 19200bit/s。
    ·bbb=010: 9600bit/s。
    ·bbb=011: 4800bit/s。
    ·bbb=100: 2400bit/s。
    ·bbb=101: 1200bit/s。
    ·bbb=110: 600bit/s。
    ·bbb=111: 300bit/s。
 

4.相关指令

    这里主要介绍时钟指令。
   读实时时钟(TODR)指令从硬件时钟中读取当前时间和日期,并把它装载到一个起始地址为T的8字节时间缓冲区中。写实时时钟(TODW)指令将当前时间和日期写入硬件时钟,将当前时钟存储在以地址T开始的8字节时间缓冲区中。必须按照BCD码的格式编码所有的日期和时间值(例如,用16#97表示1997年)。图4-6给出了时间缓冲区(T)的格式,如果现在的时间是2008年4月8日8时58分38秒,星期六,则运行的结果如图4-7所示。年份存入VB0存储单元,月份存入VB1单元,日存入VB2单元,小时存入VB3单元,分钟存入VB4单元,秒钟存入VB5单元,VB6单元为0,星期存入VB7单元,可见共占用8个存储单元。
 

分页


4.2.2  两台S7-200 PLC之间的PPI通信

    以下用一个实例介绍两台PLC通信的方法。
    【例4-1】某设备的第一站和第二站上的控制器是CPU 226CN,两个站组成一个PPI网络,其中,第一站的PLC为主站,第二站的PLC为从站。其工作任务是:当按下主站上的按钮SB1时,从站上的灯亮。请编写程序。
 

    【解】

    1.主要软硬件配置

    ①1套STEP7-Micro/WIN V4.0。
    ②2台CPU 226CN。
    ③1根PROFIBUS网络电缆(含两个网络总线连接器),如图4-8所示。
    其硬件配置如图4-9所示。

    2)指定需要的网络操作数目。在图4-11所示的界面中设置需要进行多少网络读写操作,由于本例比较简单,设为“1”即可,单击“下一步”按钮。

    3)指定端口号和子程序名称。由于CPU22601两个通信口,网络连接器插在哪个端口,配置时就选择哪个端口,子程序的名称可以不作更改,因此在图4-12所示的界面中直接单击“下一步”按钮。

    4)指定网络操作。图4-13所示的界面相对比较复杂,需要设置5项参数。在图中的位置选择“NETW”(网络写),因为本例中只要求主站把信息送到从站;在位置2输入1,因为只有1个开关量信息;在位置3输入3,因为第三站的地址为“3”;位置4和位置5保持默认值,然后单击“下一步”按钮。

    5)分配V存储区。接下来在图4-14所示的界面中分配系统要使用的存储区,通常使用默认值,然后单击“下一步”按钮。
 

    6)生成程序代码。最后单击“完成”按钮,如图4-15所示。至此通信子程序“NET_EXE”已经生成,在后面的程序中可以方便地进行调用。
 

    编写主站和从站的程序,如图4-16所示。

    【关键点】本例的主站站地址为“2”,在运行程序前,必须将从站的站地址设置成“3”(与图4-12中设置一致),此外,本例实际是将主站的VB0中数据传送到从站的VB0中。此外,要注意站地址和站内地址的区别。主站和从站的波特率必须相等。一般而言,其他的通信方式也遵循这个原则,这点初学者很容易忽略。
 

分页

    【例4-2】 某设备的第一站和第二站上的控制器是CPU 226CN,两个站组成一个PPI网络,其中,第一站的PLC为主站,第二站的PLC为从站。其工作任务是:将主站内保存的时钟信息用网络写指令写入从站的V存储区,把从站的存储区的时钟信息用网络读指令读到主站的V存储区,主站和从站分别把时间信息的“秒”用BCD格式传送到QB0字节上显示。请编写程序。
    【解】首先列出主站发送数据缓冲区和从站接收数据缓冲区,见表4-4和表4-5。

    然后再列出主站接收数据缓冲区和从站发送数据缓冲区,见表4-6和表4-7。

    最后编写程序,如图4-17和图4-18所示。
 


    由此可见,用指令向导生成子程序进行PPI通信,比使用网络读写指令(NETR/NETW)要容易得多。
 

分页

4.2.3  多台S7-200 PLC之间的PPI通信

    多台S7-200 PLC之间的PPI通信与两台PLC之间的PPI通信很相似的,学会了后者,理解前者就不难了。两台PLC通信时,一台PLC为主站,另一台为从站,而多台PLC通信时,一台为主站,其余的PLC为从站,从站之间不直接通信,从站之间的信息沟通都通过主站进行,以下用一个例子说明多台S7-200系列PLC之间的PPI通信是如何进行的。
    【例4-3】某设备有三台CPU 226CN,组成一个PPI网络,其中,第一站的PLC为主站,其余的PLC为从站。其工作任务是:当按下主站上的按钮SB1时,第二站上的电动机启动,一旦第二站上的电动机启动后停机,则第三站上的报警灯报警。请编写程序。
 

    【解】

    本例使用指令向导。
 

1.主要软硬件配置

①1套STEP7-Micro/WIN V4.0。
②3台CPU 226CN。
③1根PROFIBUS网络电缆(含3个网络总线连接器)。
其硬件配置如图4-19所示。

    2)指定需要的网络操作数目。在图4-21所示的界面中设置需要进行多少网络读写操作,由于本要进行三次读写操作,向站3读写各1次,向站4写1次,因此设为“3”即可,单击“下一步”按钮。
    3)指定端口号和子程序名称。由于CPU22601两个通信口,网络连接器插在哪个端口,配置时就选择哪个端口,子程序的名称可以不作更改,因此在图4-22所示的界面中直接单击“下一步”按钮。 

    4)指定网络操作。对3站的网络写操作如图4-23所示,这个界面相对比较复杂,需要设置5项参数。在图中的位置选择“NETW”(网络写),因为本例中只要求主站把信息送到从站;在位置2输入1,因为只有1个开关量信息;在位置3输入3,因为第三站的地址为“3”;位置4和位置5保持默认值,然后单击“下一项操作”按钮。
    对3站的网络读操作如图4-24所示,在图中的位置选择“NETR”(网络读),因为本例中只要求从站3把信息送到主站;在位置2输入1,因为只有1个开关量信息;在位置3输入3,因为第三站的地址为“3”;位置4和位置5输入VB1,然后单击“下一项操作”按钮。
    对4站的网络写操作如图4-25所示,在图中的位置选择“NETW”(网络写),因为本例中只要求主站把信息送到从站4;在位置2输入1,因为只有1个开关量信息;在位置3输入4,因为第三站的地址为“4”;位置4和位置5输入VB2,然后单击“下一项操作”按钮。 

    【关键点】位置4和位置5输入VB2,不能是VB0和VB1,因为VB0是主站接收从站3的传送数据的存储区,而VB1主站向从站3发送数据的存储区,若将位置4和位置5输入VB0将出现错误。
    5)分配V存储区。接下来在图4-26所示的界面中分配系统要使用的存储区,通常使用默认值,然后单击“下一步”按钮。
 

    6)生成程序代码。最后单击“完成”按钮,如图4-27所示。至此通信子程序“NET_EXE”已经生成,在后面的程序中可以方便地进行调用。
 

    编写主站程序,如图4-28所示。

    编写从站程序,如图4-29和图4-30所示。