S7-300软冗余调试总结
我用的软硬件配置:
序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 订货号 6ES7 307-1EA01-0AA0 6ES7 390-1AF30-0AA0 6ES7 315-2AH14-0AB0 6GK7 343-1EX30-0XE0 6ES7 972-0BA52-0XA0 6GK5 005-0BA00-1AA3 6ES7 307-1EA01-0AA0 6ES7 195-1GG30-0XA0 6ES7 153-2AR03-0XA5 6ES7 972-0BA52-0XA0 6ES7 195-7HB00-0XA0 6ES7 321-1BH02-0AA0 6ES7 331-7KF02-0AB0 6ES7 332-5HD01-0AB0 6ES7 392-1AJ00-0AA0 6GK1 161-2AA00 6ES7 862-0AC01-0YA0 电源模块(5A) 导轨530mm CPU315-2DP, 256K内存 CP343-1 以太网通讯模 描述 6ES7 953-8LG11-0AA0 SIMATIC Micro内存卡128KByte(MMC) 快速连线网络接头(不带编程口) 以太网交换机X005(五个RJ45口) 电源模块(5A) 有源总线模块的DIN导轨(620mm) IM153冗余套件高性能型2个153-2和1个IM/IM总线模板与快速连线网络接头(不带编程口)组合件 快速连线网络接头(不带编程口) 有源总线模块BM 2 X 40 开入模块(16点,24VDC) 模拟量输入模块(8路) 模拟输出模块(4路) 20针前连接器 工控机(含LCD显示器) CP1612网卡(以太网10M/100M自适应,PCI总线) 冗余软件 STEP7 编程软 WINCC
概述:本系统2个315-2DP CPU通过CP343-1连接到以太网互换机实现冗余链路,用DP通信的IM153-2 冗余套件实现ET200M的冗余通信,CP1612SIEMENS以太网卡连接到互换机实现WINCC与冗余系统的通信(听说能够直接用运算机网卡实现)。
下面介绍我整理后的实现进程:
硬件配置:先添加两个站A站和B站,每一个站单独进行配置,硬件配置完后,需要增加一个冗余连接,这需要打开“网络配置”(configure network),在里边右击A站CPU(B站也行)会显现菜单,选择“添加新连接”(insert new connection),假设是两个站都配置过,这是就会显现B站的信息,而且默许已经选在了B站CPU上,你需要做的确实是在下边选择“连接类型”(connection type),我用以太网ISO-TCP协议实现冗余的,那个地址依照自己需要的类型选择就行,点OK,就显现下面那个画面,那个地址边的ID:7 和LADDR十六进制100,也确实是十进制256,后边设置FC100要用到。注意ID(hex)0007 A050 那个地址是能够选择的,原先是0001 A050,被我改成了0007 A050,这时的ID就成了7。因为资料上说以太网实现冗余一样Local ID 不能小于2(其他方式实现没说),因此要改一下,两个CPU的都要改一致,那个在后边设置FC100参数要用到,
如此就成立了一个新的连接,在界
面
的下方能看到一个
连接显现,另外需要注意的是假设是用DP冗余I/O那么ET200M必需两个站里都要做,而且要一模一样,DP地址也一样。另一个需要注意的是输出地址必需持续,那个一样的时候假设是有模拟量数字量混合的话,容易不持续,需要修改一下,改成持续的,比如我那个地址Q改成0~9,那个在后边FC100设置也要用。 硬件配置需要注意的就这些。
软件实现:
要实现软冗余,需要在OB100中挪用FC100“SWR_START”,用于初始化冗余,再在OB35中挪用FB101
“SWR_ZYK”来实现冗余程序和数据的同步,然后再OB86中挪用FC102“SWR_DIAG”进行诊断,那个诊断挪用必需得做。
第一打开冗余程序库,里边有所需要的数据块:
这其中SWR_AGSEND_300是300以太网和DP软冗余用的,SWR_XSEND_300,是MPI软冗余用的。后缀是400的固然确实是400软冗余用的啦。这其中有个SFB3 TP ,那个是IEC按时器块,在软冗余程序中假设是用到按时器,是不能用原先的Time按时器的,只能用IEC按时器,而且要提早算好你要用的按时器计数器的个数,后边设置FC100要用。IEC按时器别离有SFB3 TP,SFB4 TON,SFB5 TOF等,具体功能看帮忙吧。把那个地址边的块都复制到你的项目里,然后还要添加两个FC,别离是
这两个FC在Libraries-->SIMATIC_NET_CP-->CP 300里边能够找到。在随意一个位置挪用这两个块,然后再删除它们,只要项目的Blocks里边显现这两个块就行啦!这两个
块要下载到CPU的,只是不用咱们手动挪用,听说是FB101内部挪用它们和上边的FB104。需要用的功能块和功能就这些啦。
下一步确实是要挪用这些块,来实现软冗余啦。
建议,在做冗余同步程序前,把需要冗余的程序块,数据块,都先做好,那个固然是按照设计要求来做啦,做这些程序的时候,把需要用到的DB块,DB号按持续的方式排列,比如DB40,DB41,DB42,DB43,DB44。所有需要冗余的DB块号必需为持续的。还有需要冗余的M内存变量地址如MB0~MB5,和前边配置硬件时打算好的输出地址0~9。都必需是持续的。
第一在项目中加入系统组织块OB100“complete restart”,在OB100中挪用FC100“SWR_START”。FC100的参数设置相当复杂,而且大体上显现问题都出在那个地址,希望大伙儿必然要认真看这一段。 参数设置:
AG_KENNUNG:那个参数是确信A、B站的,假设是是A站程序,就写入“A”,B站的程序就写入“B”。 DB_WORK_NO:那个地址需要填入一个DB号,比如填入“DB1”,而那个DB1以后不需要手动生成,FC100
会自动生成。那个DB是实现冗余进程内部需要的数据块。
DB_SEND_NO:同上填入一个DB号,如“DB2”,一样是FC100自动生成,不需要手动生成。可能是和下边那
个DB_RCV_NO一路,都是完成数据同步作历时用的数据块吧。
DB_RCV_NO:同上填入一个DB号,如“DB3”,一样是FC100自动生成,不需要手动生成。
MPI_ADR:那个参数是对方站的MPI地址,只有效MPI方式同步的时候才故意义。我仍是依如实际CPU上边
的MPI地址写上了,尽管没用,怕少了会出问题。
LADDR:CP通信处置器组态时的硬件地址,采纳DP或以太网通信时才用。那个地址确实是前边硬件配置中插
入冗余连接的时候显现的地址LADDR 十六进制0100,或是十进制256。
VERB_ID:那个确实是咱们组态硬件是,插入的冗余连接的那个ID号,被我从0001 A050改成了0007 A050,
因此ID变成了7,那个地址就填7。
DP_MASTER_SYS_ID:那个是DP主站网络的ID号,不是DP地址号,只要在硬件组态中,双击DP线,就能
够够够显现那个号码,如以下图,那个地址填1。
DB_COM_NO:那个是挪用FB101的时候利用的FB101的背景数据块,一样默许是DB5,我利用的是DB101,
为了和FB101对应。必然要记住,等挪用FB101的时候只能用那个地址填写的那个DB啦!
DB_KOMMUN:那个参数是连接ET200M的DP通信口类型,假设是是CPU集成的DP通信口连接ET200M就
填“1”,假设是是CP通信卡上的DP口连接ET200M填“2”。
ADR_MODUS:CPU分派I/O地址的矩阵的增量,不同CPU的地址矩阵不同。选项是两个1:关于大体地址
0,1,2,3,4……4:关于大体地址0,4,8,12….我是没看懂,填了“1”。
PAA_FIRST:冗余ET200M的第一个输出字节地址,按前边硬件配置,我填“0”。 PAA_LAST:冗余ET200M的最后一个输出字节地址,按前边硬件配置,我填“9”。 MB_NO:冗余程序需要的内存变量地址区的起始地址,按前边提到的,我填“0”。 MB_LEN:需要的内存变量区长度,以BYTE为单位,我填“6”。 IEC_NO:冗余的IEC按时器、IEC计数器,所利用的背景数据块的起始地址。我用5个按时器,起始地址用DB200,
那个地址只要填“200”就能够够够。
IEC_LEN:冗余的IEC按时器、IEC计数器的背景数据块的个数,我用5个,因此填“5”。那个地址的5个背景
数据块,会在挪用IEC按时器时需要填写,不要忘记那个地址已经记录过了,不能乱写的。另外听说这些DB 的大小不能小于2个字。需要自己好好明白得一下。我没太明白,开始的时候犯错了,我就直接在每一个DB里加了个INT型变量,使它不小于2个字,终归最后没犯错,能用。也不明白是不是那个地址的问题。(那时是现场调试,不求甚解,解决就行,呵呵,诸位见谅,哪位试出具体情形,还请赐教)
DB_NO:冗余数据块的起始数据块,按前边说明,我填“40”,只填数字。 DB_NO_LEN:那个地址是填一共用了几个数据块,我用了5个,于是填“5”。
SLAVE_NO:冗余部份IM153的最低DP地址号,我的IM153设置为2,且只有一个,因此填“2”。 SLAVE_LEN:只有一个冗余DP从站,填“1”。(那个地址冗余的DP从站假设是不是一个,那个地址DP地址
号要持续起来,比如2,3,4,5)。
SLAVE_DISTANCE:IM153-2的PROFIBUS地址设置的标识符,假设是两个PROFIBUS接 口地址一样,那
么填“1”,假设是不同(即别离为n和n+1)那么填“2”。
DB_A_B_NO:将非冗余数据从A站传送到B站,所用的发送数据DB。将那些需要传输的数据都直接或间接存
到那个DB里,系统会自己传送。
DB_A_B_NO_LEN:上边选择的非冗余数据互换DB的数据量,确实是字节数,A,B站那个参数必需一样,不
然CPU停机。
DB_B_A_NO:同上,那个是从B站传到A站的DB(见过例程里边有A->B,和B->A用同一个DB的,我也用
了一个,没出问题。主若是我没有彼此传送的数据,不明白有数据的时候是什么样,估量只要两个站一样应该没问题。)
DB_B_A_NO_LEN:同上
RETURN_VAL:挪用FC100的返回值。(一样都用MW2,假设是返回值为16#0,无端障,其他参照故障代码说
明。)
EXT_INFO:FC100内部挪用其他子块的返回值(一样用MW4,意义同上)
下一步,在OB35中挪用FB101“SWR_ZYK”,先插入OB35,然后打开OB35,用STL语言方式打开,第一次挪用FB101代码如下(代码中标点为了看清楚,我改成中文标点了,可能不能复制直接利用,自己抄一遍吧):
CALL \"SWR_ZYK\" , DB101 DB_WORK_NO :=DB1 CALL_POSITION :=TRUE
RETURN_VAL :=\"FB101_ON_RETURN_VAL\" MW6
EXT_INFO :=\"FB101_ON_EXT_INF\" MW8
DB101,是挪用FB101的背景数据块,你能够自己设定,可是那个DB必需跟FC100的参数DB_COM_NO设置
的一样。那个DB是自动生成的。而且,那个DB的大小是依照不同的冗余同步方式而转变的,MPI同步时为194字节;假设是是DP或以太网同步时,DB的大小为358字节。
假设是显现如上图错误,那么能够检查此DB大小,或将CPU停机,然后在线删除此DB,再从头生成,并下载
一次。
DB_WORK_NO :DB 1, 那个是FC100中挪用的冗余工作DB ,必需和FC100中挪用的一致。
CALL_POSITION :=TRUE, 那个地址必需是TRUE,我用LAD挪用怎么也写不上去那个TRUE,因此没方
法用了STL语言挪用,呵呵,比较笨!
RETURN_VAL := 那个是挪用FB101的返回值,一样用的是MW8 EXT_INFO := 那个是FB101挪用子块的返回值,一样用的是MW10
启动挪用完成,下边确实是需要冗余的程序了。。。。。
先判定本站是不是是主站,假设是是主站,执行冗余程序,假设是是从站,跳过冗余程序,直接执行FB101的
终止挪用。
用来判定,那个能够看背景数据块DB101的详细说明。(我的背景数据块为DB101,你需要依照自己的背景数据块定。比如)
上边的OVER子程序,是自己命名的FB101 终止挪用程序。下边确实是需要冗余的程序举例。。。。
这些冗余程序的后边,确实是FB101的挪用终止程序。如下: OVER: CALL \"SWR_ZYK\" , DB101 DB_WORK_NO :=DB1 CALL_POSITION:=FALSE
RETURN_VAL :=\"FB101_OFF_RETURN_VAL\" MW10
EXT_INFO :=\"FB101_OFF_EXT_INF\" MW12
第三行CALL_POSITION:=FALSE,那个地址挪用位置为FALSE终止。背景数据块仍是上边那个,DB_WORK_NO
也同上。下边两个返回值自己定。。。我用的是照例程上写的。
到此,冗余程序块FB101的挪用完成了。
接下来是FC102 “SWR_DIAG”诊断块的挪用,诊断块FC102必需在中断块OB86中挪用。参数如以下图:
DB_WORK,其实仍是FC100的那个工作数据块DB1,因此填“1”。
OB86_EV_CLASS 和OB86_FLT_ID这两个参数填的是OB86本身概念的临时变量,在OB86的参数概念部份能够看到,变量名和形参名相同,如以下图:
RETURN_VAL返回值:那个一样填的是一个INT型内存变量,我用了MW14,因为例程是用那个的。 到那个地址冗余就做完了。。。做完以后最好做个数据一致性检查。在项目阅读器中,鼠标点到BLOCKS文件夹上,然后点下拉菜单EDITCheck Block Consistency…如以下图:
检查完后有几个背景块应该是不存在的,因为得系统运行的时候自己生成。其他都没问题就行啦。然后能够下载,运行试试啦。
假设是下载后运行仍是有问题,那么请记住最关键的:每次从头修改完程序想再下载试试的话,最好降
CPU停机,在线删除所有CPU中的块,然后复位CPU再从头下载,如此能够减少没必要要的问题。
假设是还有问题,请参照西门子技术支持网站上的文档:上边详细说明了各大多数错误的现象和问题的缘
故,对调试软冗余很有帮忙。