第7章西门子PLC通信技术本章结合具体实例,详细介绍MPI网络的组建方法、如何用全局数据包通信方式实现PLC之间的MPI网络通信、如何实现无组态连接的PLC之间的MPI通信、如何实现有组态连接的PLC之间的MPI通信、如何实现PLC之间的PROFIBUS-DP主从通信、如何组态远程I/O站,最后介绍了CP342-5分别作为主站和从站的PROFIBUS-DP组态应用。§7.1西门子PLC网络§7.2MPI网络通信§7.3PROFIBUS现场总线通信技术§7.4思考与练习返回首页西门子PLC网络返回本章§7.2MPI网络通信MPI是多点通信接口(MultiPointInterface)的简称。MPI物理接口符合ProfibusRS485(EN50170)接口标准。MPI网络的通信速率为19.2kbit/s~12Mbit/s,S7-200只能选择19.2kbit/s的通信速率,S7-300通常默认设置为187.5kbit/s,只有能够设置为Profibus接口的MPI网络才支持12Mbit/s的通信速率。§7.2.1MPI网络组建§7.2.2全局数据包通信方式§7.2.3无组态连接的MPI通讯方式§7.2.4有组态连接的MPI通讯方式返回本章§7.2.1MPI网络组建用STEP7软件包中的Configuration功能为每个网络节点分配一个MPI地址和最高地址,最好标在节点外壳上;然后对PG、OP、CPU、CP、FM等包括的所有节点进行地址排序,连接时需在MPI网的第一个及最后一个节点接入通信终端匹配电阻。往MPI网添加一个新节点时,应该切断MPI网的电源。MPI网络示意图返回上级MPI网络连接器为了保证网络通信质量,总线连接器或中继器上都设计了终端匹配电阻。组建通信网络时,在网络拓扑分支的末端节点需要接入浪涌匹配电阻。返回上级采用中继器延长网络连接距离返回上级§7.2.2全局数据包通信方式全局数据(GD)通信方式以MPI分支网为基础而设计的。在S7中,利用全局数据可以建立分布式PLC间的通讯联系,不需要在用户程序中编写任何语句。S7程序中的FB、FC、OB都能用绝对地址或符号地址来访问全局数据。最多可以在一个项目中的15个CPU之间建立全局数据通讯。GD通信原理GD通信的数据结构全局数据环GD通信应用利用SFC60和SFC61传递全局数据返回本节1.GD通信原理在MPI分支网上实现全局数据共享的两个或多个CPU中,至少有一个是数据的发送方,有一个或多个是数据的接收方。发送或接收的数据称为全局数据,或称为全局数。具有相同Sender/Receiver(发送者/接受者)的全局数据,可以集合成一个全局数据包(GDPacket)一起发送。每个数据包用数据包号码(GDPacketNumber)来标识,其中的变量用变量号码(VariableNumber)来标识。参与全局数据包交换的CPU构成了全局数据环(GDCircle)。每个全局数据环用数据环号码来标识(GDCircleNumber)。例如,GD2.1.3表示2号全局数据环,1号全局数据包中的3号数据。返回上级在PLC操作系统的作用下,发送CPU在它的一个扫描循环结束时发送全局数据,接收CPU在它的一个扫描循环开始时接收GD。这样,发送全局数据包中的数据,对于接收方来说是“透明的”。也就是说,发送全局数据包中的信号状态会自动影响接收数据包;接收方对接收数据包的访问,相当于对发送数据包的访问。返回上级2.GD通信的数据结构全局数据可以由位、字节、字、双字或相关数组组成,它们被称为全局数据的元素。一个全局数据包由一个或几个GD元素组成,最多不能超过24B。返回上级3.全局数据环全局数据环中的每个CPU可以发送数据到另一个CPU或从另一个CPU接收。全局数据环有以下2种:①环内包含2个以上的CPU,其中一个发送数据包,其它的CPU接收数据;②环内只有2个CPU,每个CPU可既发送数据又接受数据。S7-300的每个CPU可以参与最多4个不同的数据环,在一个MPI网上最多可以有15个CPU通过全局通讯来交换数据。其实,MPI网络进行GD通信的内在方式有两种:一种是一对一方式,当GD环中仅有两个CPU时,可以采用类全双工点对点方式,不能有其它CPU参与,只有两者独享;另一种为一对多(最多4个)广播方式,一个点播,其它接收。返回上级4.GD通信应用(1/2)应用GD通信,就要在CPU中定义全局数据块,这一过程也称为全局数据通信组态。在对全局数据进行组态前,需要先执行下列任务:①定义项目和CPU程序名;②用PG单独配置项目中的每个CPU,确定其分支网络号、MPI地址、最大MPI地址等参数。返回上级4.GD通信应用(2/2)在用STEP7开发软件包进行GD通信组态时,由系统菜单【Options】中的【DefineGlobalData】程序进行GD表组态。具体组态步骤如下:③在GD空表中输入参与GD通信的CPU代号;④为每个CPU定义并输入全局数据,指定发送GD;⑤第一次存储并编译全局数据表,检查输入信息语法是否为正确数据类型,是否一致;⑥设定扫描速率,定义GD通信状态双字;⑦第二次存储并编译全局数据表。返回上级【例7-2-1】S7-300之间全局数据通信。要求通过MPI网络配置,实现2个CPU315-2DP之间的全局数据通信。生成MPI硬件工作站打开STEP7,首先执行菜单命令【File】→【New...】创建一个S7项目,并命名为“全局数据”。选中“全局数据”项目名,然后执行菜单命令【Insert】→【Station】→【SIMATIC300Station】,在此项目下插入两个S7-300的PLC站,分别重命名为MPI_Station_1和MPI_Station_2。返回上级①插入2个MPI站②单击进入硬件配置③双击CPU315-2DP④修改CPU属性⑤设置MPI地址⑥修改通信速率设置MPI网络地址返回上级设置MPI地址按上图完成2个PLC站的硬件组态,配置MPI地址和通信速率,在本例中MPI地址分别设置为2号和4号,通信速率为187.5kbit/s。完成后点击按钮,保存并编译硬件组态。最后将硬件组态数据下载到CPU。连接网络用Profibus电缆连接MPI节点。接着就可以与所有CPU建立在线连接。可以用SIMATIC管理器中“AccessibleNodes”功能来测试它。返回上级生成全局数据表用NetPro组态MPI网络返回上级①双击灰色区域选择CPU②填写发送区和接收区③编译建立数据环全局数据环组态返回上级GDID的意义1号GD环包有2个数据包2号GD环1号数据包的数据数返回上级定义扫描速率和状态信息返回上级5.利用SFC60和SFC61传递全局数据利用SFC60GD_SND和SFC61GD_RCV可以以事件驱动方式来实现全局通讯。为了实现纯程序控制的数据交换,在全局数据表中必须将扫描速率定义为0。可单独使用循环驱动或程序控制方式,也可组合起来使用。SFC60用来按设定的方式采集并发送全局数据包。SFC61用来接收发送来的全局数据包并存入设定区域中。为了保证数据交换的连贯性,在调用SFC60或SFC61之前所有中断都应被禁止。可以使用SFC39禁止中断,SFC40开放中断;使用SFC41延时处理中断,SFC42开放延时。返回上级【例7-2-2】用SFC60发送全局数据GD2.1,用SFC61接收全局数据GD2.2。使用系统功能(SFC)或系统功能块(SFB)时,需切换到在线视窗,查看当前CPU是否具备所需要的系统功能或系统功能块,然后将它们拷贝到项目的“Blocks”文件夹内。接下来可切换到离线视窗调用系统功能或系统功能块。使用SFC60和SFC61实现全局数据的发送与接收,必须进行全局数据包的组态,参照【例7-2-1】。现假设已经在全局数据表中完成了GD组态,以MPI_Station_1为例,设预发送数据包为GD2.1,预接收数据包为GD2.2。要求当M1.0为“1”时发送全局数据GD2.1;当M1.2为“1”时接收全局数据GD2.2。返回上级用SFC60发送全局数据GD2.1,用SFC61接收全局数据GD2.2返回上级§7.2.3无组态连接的MPI通讯方式——调用系统功能SFC用系统功能SFC65~69,可以在无组态情况下实现PLC之间的MPI的通讯,这种通讯方式适合于S7-300、S7-400和S7-200之间的通讯。无组态通讯又可分为两种方式:双向通讯方式和单向通讯方式。无组态通讯方式不能和全局数据通讯方式混合使用。双向通讯方式单向通讯返回本节1.双向通讯方式双向通讯方式要求通讯双方都需要调用通讯块,一方调用发送块发送数据,另一方就要调用接收块来接收数据。适用S7-300/400之间通讯,发送块是SFC65(X_SEND),接收块是SFC66(X_RCV)。下面举例说明如何实现无组态双向通讯。【例7-2-3】无组态双向通讯。设2个MPI站分别为MPI_Station_1(MPI地址为设为2)和MPI_Station_2(MPI地址设为4),要求MPI_Station_1站发送一个数据包到MPI_Station_2站。返回上级生成MPI硬件工作站打开STEP7,创建一个S7项目,并命名为“双向通讯”。在此项目下插入两个S7-300的PLC站,分别重命名为MPI_Station_1和MPI_Station_2。MPI_Station_1包含一个CPU315-2DP;MPI_Station_2包含一个CPU313C-2DP。设置MPI地址完成2个PLC站的硬件组态,配置MPI地址和通信速率,在本例中CPU315-2DP和CPU313C-2DP的MPI地址分别设置为2号和4号,通信速率为187.5kbit/s。完成后点击按钮,保存并编译硬件组态。最后将硬件组态数据下载到CPU。返回上级编写发送站的通讯程序在MPI_Station_1站的循环中断组织块OB35中调用SFC65,将I0.0~I1.7发送到MPI_Station_2站。MPI_Station_1站OB35中的通讯程序如图所示。返回上级编写接收站的通讯程序在MPI_Station_2站的主循环组织块OB1中调用SFC66,接收MPI_Station_1站发送的数据,并保存在MB10和MB11中。MPI_Station_2站OB1中的通讯程序如图所示。返回上级2.单向通讯单向通讯只在一方编写通讯程序,也就是客户机与服务器的访问模式。编写程序一方的CPU作为客户机,无需编写程序一方的CPU作为服务器,客户机调用SFC通讯块对服务器进行访问。SFC67(X_GET)用来读取服务器指定数据区中的数据并存放到本地的数据区中,SFC68(X_PUT)用来将本地数据区中的数据写到服务器中指定的数据区。【例7-2-4】无组态单向通讯。建立两个S7-300站:MPI_Station_1(CPU315-2DP,MPI地址设置为2)和MPI_Station_2(CPU313C-2DP,MPI地址设置为3)。CPU315-2DP作为客户机,CPU313C-2DP作为服务器。返回上级生成MPI硬件工作站打开STEP7编程软件,创建一个S7项目,并命名为“单向通讯”。在此项目下插入两个S7-300的PLC站,分别重命名为MPI_Station_1和MPI_Station_2。设置MPI地址在本例中将CPU315-2DP和CPU313C-2DP的MPI地址分别设置为2号和3号,通信速率为187.5kbit/s。完成后点击按钮,保存并编译硬件组态。最后将硬件组态数据下载到CPU。返回上级生成MPI硬件工作站打开STEP7编程软件,创建一个S7项目,并命名为“单向通讯”。在此项目下插入两个S7-300的PLC站,分别重命名为MPI_Station_1和MPI_Station_2。设置MPI地址在本例中将CPU315-2DP和CPU313C-2DP的MPI地址分别设置为2号和3号,通信速率为187.5kbit/s