S7-300的软冗余要求从站必须通过有源底板连接。从站的所有模块需要确保没有故障,即SF灯不亮尤其是通讯模块。S7-300的软冗余分为三种方式:MPI,DP,以太网。三种冗余方式的通讯速度不同,以太网通讯速度最快,DP通讯速度次之,MPI通讯速度最慢。不同的通讯方式选择的功能块不相同,具体功能块的选择如图1所示:图1下面以以太网冗余为例,简述冗余过程:(一)插入两个S7-300的站,SIMATIC300(A)和SIMATIC300(B)。(二)设置A站的IP地址为192.168.0.10,B站的地址为192.168.0.20。(三)在A站的块中插入OB100、OB35、OB86组织块,并对其中的OB100、OB35、OB86进行编程。(四)在组态网络中新建ISO-ON-TCP链接。要求ID号要大于2且主从站的ID号一致。上图为最终效果图,下图为过程(五)在OB100中我们调用FC100’SWR_START’进行软冗余的初始化。FC100’SWR_START的各个引脚的注释请参照最后的附录调用FC100的位置如图主站设置如左图所示步骤,从站不需要再次设定但需要在从站中给该从站的通讯ID号与主站相同且大于2。,图例设置为0007图中1表示为当前CPU的站号,A站写A,B站写B。图中2填写对方的地址,MPI_ADR表示对方的MPI地址,LADDR表示CP通讯处理器组态的硬件地址,采用PROFIBUS或Ethernet网络进行数据同步时12345才有意义,默认值为256不需要更改。VERB_ID表示网络链接的ID号,在NETPRO窗口中组态的链接的ID值,如FDLConnection、ISOConnection或S7Connection。数值要大于2。DP_MASTER_SYS_ID表示DP主站网络的ID号,你可以在硬件组态中双击链接ET200M从站紫色的PROFIBUS主从网络,获取该ID值。图中3填写输出模块(DO..AO)总的起始地址和最终地址。地址必须是连续的,中间不能含有没有定义的地址。图中4填写冗余的M、计时器背景数据块、DB数据块的起始地址和长度。数据必须是连续的,且冗余的DB块的数据不得小于2个字节。图中5填写ET200从站的起始地址和个数。表中需要注意的事项;i.冗余的DB块中数据必须大于2个字节,否则冗余会报错。ii.模块的输出DO,AO必须为连续的地址,冗余初始化中的输出中不能有无效地址。双击iii.上表中的DB1,DB2,DB3数据块不需要人工创建,下载程序时CPU会自动创建数据块。iv.更改OB100中的FC100程序时,需要清空CPU内的所有程序。清空的方式为在线删除块内的所有数据。v.非冗余的DB块需要手动创建,数据必须大于2个字节。(六)一般我们建议您将您的非冗余程序段编写在OB1当中,而将冗余程序段编写在OB35当中,我们这里使用的是OB35的默认属性,即每100ms中断触发一次,您可以根据实际的需要在CPU属性中修改中断的时间间隔。在OB35里调用FB101‘SWR_ZYK’功能块,FB101块中封装了冗余功能的程序段,实现冗余功能。调用FB101时,你可以在线地读出RETURN_VAL参数的数值,如果为0,说明冗余链接正常。如果为8015说明数据同步的连接不成功,这是一个常见的错误,原因可能是CP342-5之间的FDL链接建立的不正确或物理链路不通,或者是FC100的VERB_ID参数与NETPRO中的链接ID号不一致。当执行”SWR_START”程序块时,系统分配这些数据区,不能用S7的定时器和计数器,只能使用IEC标准的定时器和计数器。你可以在软冗余手册的第三章第9节找到对应的诊断信息。OB35中的程序可以分为4个部分。(七)在OB86中调用诊断功能块FC102‘SWR_DIAG’,当系统出现PROFIBUS总线错误时,该功能块返回诊断信息,供FB101使用。(八)插入FB101内部调用的FB104,FC5、FC6等功能块,将所有的程序块下载到PLC当中。备注A.在使用MPI进行冗余通讯时不需要建立任何通讯连接,只需将通讯线接好即可。B.在使用以太网进行通讯时需要建立通讯连接。注意,图中的ID号不能小于2且主站和备站的ID号相同。通讯时选择的通讯方式如图中的Type。组态完成后需要将主动连接的CPU进行下载。C.在使用DP进行冗余通讯时需要建立通讯连接,连接类型选择FDL。通讯连接建立后需要将主动连接的站的CPU进行下载。S7-300软冗余时的wincc连接设置(以太网通讯)1.建立变量,按照正常非冗余的方式建立。2.建立冗余连接。打开任意一个编辑画面,在动态向导中的系统函数中选择创建冗余连接如图,选择主用的连接如图,选择的是SXYC。设置备用的连接如图3.在全局脚本中添加脚本MSRTCreateMsg(ServiceID,&MsgCreate,&Error);}}}if(ServiceID!=0){MSRTStopMsgService(ServiceID,&Error);}if(GetTagDWordWait(@SXYC@ConnectionState)==0){SetTagDWord(@SXYC@ForceConnectionState,1);}else{if(GetTagBitWait(SWR_wincc.Standby)==TRUE){SetTagDWord(@SXYC@ForceConnectionState,0);}}return1;只需要紫色的C语言这其中的几个变量@SXYC@ConnectionState,@SXYC@ForceConnectionState这两个变量在前边说到的@SW变量组里边有。其中的SW是连接的名字,需要对应上自己前边建的连接的名字。SWR_wincc.Standby这个变量就是FB101冗余程序块的背景数据块中的变量DB***.DBX9.1,这个变量是手动建立的,名称也可以自己设定,***是在PLC冗余程序中调用冗余程序时自己设定的背景数据块号,我用的是DB5,所以我这里变量就连接DB5.DBX9.1这个数据位。附录FC100各引脚的含义参数名数据类型描述例子AG_KENNUNG字符型SIMATIC300(A)站应当填‘A’SIMATIC300(B)站应当填‘B’‘A’DB_WORK_NO数据块名称软冗余功能实现所需要使用的内部数据块,用户不用生成该块,也无需读写其中的数据DB1DB_SEND_NO数据块名称存放发送数据所使用的内部数据块,A→B或B→A,用户不用生成该块,也无需读写其中的数据DB2DB_RCV_NO数据块名称存放接收数据所使用的内部数据块,AB或BA,用户不用生成该块,也无需读写其中的数据DB3MPI_ADR整型对方站的MPI站地址,进行MPI网络数据同步时才有意义4LADDR整型CP通讯处理器组态的硬件地址,采用PROFIBUS或Ethernet网络进行数据同步时才有意义256VERB_ID整型网络链接的ID号,在NETPRO窗口中组态的链接的ID值,如FDLConnection、ISOConnection或S7Connection。7DP_MASTER_SYS_ID整型DP主站网络的ID号,你可以在硬件组态中双击链接ET200M从站紫色的PROFIBUS主从网络,获取该ID值(MasterSystemNo)。1DB_COM_NO数据块名称FB101所用使用的背景数据块,需用户手动生成该块,并可以读取状态字DBW8和控制字DBW10,获取系统信息或手动切换主备系统DB5DP-KOMMUN整型确定链接ET200从站的DP通讯口类型:1.使用CPU上集成DP通讯口链接ET200从站;2.使用CP通讯卡上的DP通讯口链接ET200从站1ADR_MODUS整型CPU分配I/O地址的矩阵的增量,不同CPU的地址矩阵不同:1,对于基本地址0,1,2,3...4,对于基本地址0,4,8,12...1PAA_FIRST整数冗余的ET200M站第一个输出字节的地址88PAA_LAST整型ET200M站最后一个输出字节的地址,PAA_FIRST到PAA_LAST的字节范围必须是连续定义的。107MB_NO整型冗余的M数据区的起始字节地址0MB_LEN整型冗余的M数据区的字节个数,如MB_NO为20,MB_LEN为30,则MB20-MB49这个数据段为冗余数据区;4IEC_NO整型冗余的IEC定时器、IEC计数器所使用的起始背景数据块111IEC_LEN整型冗余的IEC定时器、IEC计数器所使用的背景数据块的个数,如IEC_NO设为111,IEC_LEN设为7,则DB111-DB117为存放冗余同步定时器、计数器的0背景数据去DB_NO整型冗余的起始数据8DB_NO_LEN整型冗余的数据块个数,如DB_NO为8,DB_NO_LEN为2,则DB8-DB9为冗余的数据块2SLAVE_NO整型ET200从站的最低站地址3SLAVE_LEN整型ET200从站的个数,如SLAVE_NO为3,SLAVE_LEN为2,则该软冗余系统连接了站号为3,4的两个ET200从站,站号必须连续。2SLAVE_DISTANCE整型确定所链接ET200从站上IM153-2模块的PROFIBUSDP站地址:1.2块IM153-2模块的DP口使用相同的站地址;2.2块IM153-2模块的DP口的站地址为n和n+1;1DB_A_B_NO数据块名称通过数据同步链路(RedundencyLink),A、B站之间还能进行一些非冗余数据通讯,即2个PLC之间的普通数据交换,该参数即定义从A站到B站,交换的非冗余数据块。DB11DB_A_B_NO_LENWORDA站到B站,非冗余数据块中交换的字节数,如DB_A_B_NO设为DB11,DB_A_B_NO_LEN设为.W#16#64,则A站的DB11.DBB0-DB11.DBB99被复制到B站的DB11.DBB0-DB11.DBB99,因为W#16#64代表16进制64,即一共复制100个字节数据。W#16#64DB_B_A_NO数据块名称该参数即定义从B站到A站,交换的非冗余数据块。DB12DB_B_A_NO_LENWORDB站到A站,非冗余数据块中交换的字节数,如DB_B_A_NO设为DB12,DB_B_A_NO_LEN设为.W#16#64,则B站的DB12.DBB0-DB12.DBB99被复制到A站的DB12.DBB0-DB12.DBB99,因为W#16#64代表16进制64,即一共复制100个字节数据。W#16#64RETURN_VALWORD调用FC100的返回值,为0代表正常,其他返回值您可以在错误代码表中找到对应的错误原因。MW2EXT_INFOWORDFC100中内部调用的一些功能块所返回的错误代码MW4