描述
FC 100‘SWR_START’
初始化程序块,定义系统运行的参数。
FB 101‘SWR_ZYK’
循环调用的数据同步功能块,将主系统中的冗余数据复制到备用系统当中
FC 102‘SWR_DIAG’
诊断功能块,在OB86中调用,将得到的诊断数据提供给FB101使用。
FB 103‘SWR_SFCCOM’
在该块内部调用 SFC65 ‘X_SEND’ 和SFC 66‘X_RCV’功能块,实现采用MPI网络的数据同步。
FB 104‘SWR_AG_COM’
在该块内部调用FC5 ‘AG_SEND’, FC 6 ‘AG_RCV’,实现采用PROFIBUS或Ethernet网络的数据同步。
FB 105‘SWR_SFBCOM’
在该块内部调用SFB12 ‘BSEND’ and SFB 13 ‘BRCV’功能块,实现MPI或PROFIBUS或Ethernet网络的数据同步,只能在S7-400 中调用。
DB_WORK_NO
冗余软件块使用的数据区,用户不需要生成该数据块,也不使用该数据块中的数据;
DB_SEND_NO
用于主系统发送同步数据到备用系统的发送数据区(包括了主系统的M、T、C、DB等区域的数据),用户不需要生成该数据块,也不使用该数据块中的数据;
DB_RCV_NO
用于备用系统接收来自主系统的同步数据的接收数据区,用户不需要生成该数据块,也不使用该数据块中的数据;
DB_A_B_NO
从A站到B站,非冗余同步的数据的收发区;
DB_B_A_NO
从B站到A站,非冗余同步的数据的收发区;
DB_COM_NO
FB101的背景数据块,包括了数据同步链路的状态,控制等信息,用户需要生成该数据块,DBW8为状态字,DBW10为控制字,;
FC 5‘AG_SEND’
PROFIBUS网络中,实现FDL链接,在FB104内部调用的发送块,用户需要生成该程序块,并下载到PLC当中。
FC 6‘AG_RCV’
PROFIBUS网络中,实现FDL链接,在FB104内部调用的接收块,用户需要生成该程序块,并下载到PLC当中。
表4
注:
1。采用PROFIBUS或Ethernet方式进行数据同步时,需要在OB100当中调用FB101,而FB101内部调用了FB104、
FC5、FC6,您必须手动地将FB104、FC5、FC6插入到项目当中,插入的方法是:在程序中调用一次,再将这条语句删掉。
2.在OB100中调用FC100功能块时,PLC会自动创建一些与FC100参数相关的程序段和数据块,当你更改了
FC100的参数时,应该对PLC进行Reset操作,再重新下载项目的软硬件到PLC当中。
II.创建一个应用实例:
附件中我们给出了一个例子项目,由两套315-2DP和一个ET200M从站组成,系统结构如下:
图7
除了实现冗余功能的3条PROFIBUS网络外,还有一条MPI网络用于上位机监视和控制程序的调试。
以下是生成该例子程序的步骤,您可以根据您系统的配置情况进行参照:
1. 插入两个S7-300的站,A和 B ,在A站和B站的硬件组态窗口中,插入315-2DP时,要分别创建相互独立的PROFIBUS
网络(如 A站为Master_Line、B站为Reserve_Line),使用网络的默认参数,速率为1.5M,并都将站地址设定为2,A站
和B站的PROFIBUSDP集成通讯口设定为主站模式(MasterMode)。
2. 分别在A、B站中插入CP342-5模块,连接到同一个PROFIBUS网络上(Sychronization_Line),地址分别为4、5,将
CP342-5设定为NoDP方式,并记录CP342-5的硬件地址256。
3. 分别在A、B站的硬件组态窗口中插入一个ET200从站(一个IM153-2模块和一个16入/16出的数字量模板),DP的地址为3。
4. 进入STEP7的网络组态窗口NETPRO中,选中A站的CPU点击鼠标右键,插入一个新的链接,选择FDLConnection,
点击Apply,弹出链接属性窗口,记录链接的ID,设定LSAP为17,18,存盘编译网络组态。系统的网络结构网络组态。系统的网络结构如下:
图8
以上网络结构中包括了4条链路:
§ 用于上位机编程和监控的MPI链路;
§ A站与ET200从站MasterLine PROFIBUS链路;
§ B站与ET200从站ReserveLine PROFIBUS链路;
§ A站和B站之间进行数据同步的SynchronizationLine PROFIBUS链路。
您可以通过点击图中的状态读取按钮,获取当前FDL链接的状态,上图的左下角显示当前在线读取FDL的状态为OK。
5. 在A站的Block中插入OB1(主循环程序块)、OB35(定时中断组织块)、OB100(暖启动调用程序块)、OB80(在
主系统与备用系统切换时间超时时,调用该块)、OB82 (DP-SlaveET200站上的IM153-2模块出错报警,调用该功能块)、
OB83 (DP从站的接口模块与主站链接断开或链接重新建立时调用该块)、OB85(程序运行出错或DP从站连接失败调用
该块)、OB86(主从站通讯出错调用该块)、OB87(通讯失败调用该块)、OB122(外围设备访问出错调用该块)、
OB121等组织块,并对其中的OB100、OB35、OB86进行编程。
6. 在OB100中我们调用FC 100‘SWR_START’进行软冗余的初始化,有几个参数需要特别注意,LADDR应当和CP342-5
的硬件地址相一致,例子程序为256,VERB_ID必须和你在NETPRO中创建的FDL链路的ID号一致,例子程序为1,
DB_COM_NO为系统中未使用的数据块,建议仍采用DB5。
如下表格给出了FC100功能块参数的说明和例子,供您编程参考:
参数名 | 数据类型 | 描述 | 例子 |
AG_KENNUNG | 字符型 | A站应当填 ‘A’ B站应当填 ‘B’ | ‘A’ |
DB_WORK_NO | 数据块名称 | 软冗余功能实现所需要使用的内部数据块,用户不用生成该块,也无需读写其中的数据 | DB1 |
DB_SEND_NO | 数据块名称 | 存放发送数据所使用的内部数据块,AàB或BàA,用户不用生成该块,也无需读写其中的数据 | DB2 |
DB_RCV_NO | 数据块名称 | 存放接收数据所使用的内部数据块,AßB或BßA,用户不用生成该块,也无需读写其中的数据 | DB3 |
MPI_ADR | 整型 | 对方站的MPI站地址,进行MPI网络数据同步时才有意义 | 2 |
LADDR | 整型 | CP通讯处理器组态的硬件地址,采用PROFIBUS或Ethernet网络进行数据同步时才有意义 | 256 |
VERB_ID | 整型 | 网络链接的ID号,在NETPRO窗口中组态的链接的ID值,如FDL Connection、ISO Connection或S7Connection。 | 1 |
DP_MASTER_SYS_ID | 整型 | DP主站网络的ID号,你可以在NETPRO窗口中双击链接ET200M从站紫色的PROFIBUS主从网络,获取该ID值。 | 1 |
DB_COM_NO | 数据块名称 | FB101所用使用的背景数据块,需用户生成该块,并可以读取状态字DBW8和控制字DBW10,获取系统信息或手动切换主备系统 | DB5 |
DP-KOMMUN | 整型 | 确定链接ET200从站的DP通讯口类型: 1. 使用CPU上集成DP通讯口链接ET200从站; 2. 使用CP通讯卡上的DP通讯口链接ET200从站; | 1 |
ADR_MODUS | 整型 | CPU分配I/O地址的矩阵的增量,不同CPU的地址矩阵不同: 1, if base addresses 0, 1, 2, 3 ... 4, if base addresses 0, 4, 8, 12 ... | 1 |
PAA_FIRST | 整数 | ET200M站个输出字节的地址
| 0 |
PAA_LAST | 整型 | ET200M站后一个输出字节的地址,PAA_FIRST 到 PAA_LAST的字节范围必须是ET200M站上连续定义的。
| 4 |
MB_NO | 整型 | 冗余的M数据区的起始字节地址 | 20 |
MB_LEN | 整型 | 冗余的M数据区的字节个数,如MB_NO为20,MB_LEN为30,则MB20-MB49这个数据段为冗余数据区; | 30 |
IEC_NO | 整型 | 冗余的IEC定时器、IEC计数器所使用的起始背景数据块 | 111 |
IEC_LEN | 整型 | 冗余的IEC定时器、IEC计数器所使用的背景数据块的个数,如IEC_NO设为111,IEC_LEN设为7,则DB111-DB117为存放冗余同步定时器、计数器的背景数据去 | 7 |
DB_NO | 整型 | 冗余的起始数据块 | 8 |
DB_NO_LEN | 整型 | 冗余的数据块个数,如DB_NO为8,DB_NO_LEN为2,则DB8-DB9为冗余的数据块 | 2 |
SLAVE_NO | 整型 | ET200从站的低站地址 | 3 |
SLAVE_LEN | 整型 | ET200从站的个数,如SLAVE_NO为3,SLAVE_LEN为2,则该软冗余系统连接了站号为3,4的两个ET200从站,站号必须连续。 | |
SLAVE_DISTANCE | 整型 | 确定所链接ET200从站上IM153-2模块的PROFIBUS DP站地址: 1. 2块IM153-2模块的DP口使用相同的站地址; 2. 2块IM153-2模块的DP口的站地址为n和n+1; | 1 |
DB_A_B_NO | 数据块名称 | 通过数据同步链路(Redundencybbbb),A、B站之间还能进行一些非冗余数据通讯,即2个PLC之间的普通数据交换,该参数即定义从A站到B站,交换的非冗余数据块。 | DB11 |
DB_A_B_NO_LEN | WORD | A站到B站,非冗余数据块中交换的Word字数,如DB_A_B_NO设为DB11,DB_A_B_NO_LEN设为.W#16#64,则A站的DB11.DBW0-DB11.DBW198被复制到B站的DB11.DBW0-DB11.DBW198,因为W#16#64代表16进制64,即一共复制100个数据字。 | W#16#64 |
DB_B_A_NO | 数据块名称 | 该参数即定义从B站到A站,交换的非冗余数据块。 | DB12 |
DB_B_A_NO_LEN | WORD | B站到A站,非冗余数据块中交换的Word字数,如DB_B_A_NO设为DB12,DB_B_A_NO_LEN设为.W#16#64,则B站的DB12.DBW0-DB12.DBW198被复制到A站的DB12.DBW0-DB12.DBW198,因为W#16#64代表16进制64,即一共复制100个数据字。 | W#16#64 |
RETURN_VAL | WORD | 调用FC100的返回值,为0代表正常,其他返回值您可以在错误代码表中找到对应的错误原因。 | MW2 |
EXT_INFO | WORD | FC100中内部调用的一些功能块所返回的错误代码 | MW4 |
表5
7.一般我们建议您将您的非冗余程序段编写在OB1当中,而将冗余程序段编写在OB35当中,我们这里使用的是OB35的
默认属性,即每100ms中断触发一次,您可以根据实际的需要在CPU属性中修改中断的时间间隔。在OB35里调用
FB 101‘SWR_ZYK’ 功能块,FB101块中封装了冗余功能的程序段,实现冗余功能。调用FB101时,你可以在线地读出
RETURN_VAL参数的数值,如果为0,说明冗余链接正常。如果为8015说明数据同步的连接不成功,这是一个常见的错误,
原因可能是CP342-5之间的FDL链接建立的不正确或物理链路不通,或者是FC100的VERB_ID参数与NETPRO中的链接
ID号不一致。当执行”SWR_START”程序块时,系统分配这些数据区,不能用S7的定时器和计数器,只能使用IEC标准
的定时器和计数器。你可以在软冗余手册的第三章第9节找到对应的诊断信息。OB35中的程序可以分为4个部分,如下图所示:
图12
系统与备用系统之间的手动切换 通过设定DB5.DBX10.0为1,实现主系统与备用系统的手动切换。
8.在OB86中调用诊断功能块FC102 ‘SWR_DIAG’,当系统出现PROFIBUS总线错误时,该功能块返回诊断信息,
供FB101使用。
9.插入FB101内部调用的FB104,FC5、FC6等功能块,将所有的程序块下载到PLC当中。
10.在组态软件WinCC中创建两个MPI链接,分别与主系统和备用系统进行链接,并生成对应的Tag变量,如下:
图13
编辑监控画面,分别读取A站和B站的状态字、控制字和冗余同步的数据,如下:
图14
从图14中的状态字可以看出,当前8号(A)站为主系统,7号(B)站为备用系统,它们与所有DP从站的通讯正常,冗余同步
链接正常,我们在一个20ms触发的定时中断块OB35中编写了一个数据累加程序段,可以看出备用系统的同步数据比主系统的
实时数据慢80ms(4个周期),其中控制字为0,您可以修改对应的位,激活或取消冗余功能。
这里我们给您提供一个通过以太网实现数据同步的例子程序,系统的实物图如下:
图15
程序块的内容与上面的例子相同,只是将OB100中FC100的VERB_ID参数的数值改为7,因为采用ISO方式时,ISO
ConnectionID号要大于2,
我们这里则STEP7的NETPRO中组态了一个ID号为7的ISO链接,如下图:
图16
可以在WinCC软件中创建TCP/IP链接,分别读取主系统和备用系统中的数据,如下图:
图17
与图14比较,我们可以发现在以太网方式下,数据同步的速度比PROFIBUSDP方式下快,备用系统的同步数据比主系统的实时
数据慢40ms(2个周期)。