在400H冗余系统中可以实现IO模块冗余。在配置冗余IO时需要注意以下事项:
1. CPU参数中设置冗余管理数据块块块不能和用户数据块冲突;
2. 对于能够提供诊断中断功能的模块需要使能诊断功能;
3. 在OB72,、OB80、OB100中调用FC450;在OB72,OB82,OB83,OB85中调用FB452;在OB82,OB83,OB86中调用FC451
4. 需要在程序中调用冗余管理功能块FB450,FB451;
5. IO模块的映像缓冲区设置和程序是否匹配。

图 1:IO模块的PIP和redundant IO DB 设置
PIP和冗余数据块设置如图1所示。在使用中常会遇到模块不能正常钝化和去钝化的现象。大部分都是没有注意以上问题。
有一客户反映他在做冗余IO时DI、DO模块钝化和去钝化功能测试正常;AI模块有这样的现象:对同一个模块拔出后再插入HMI数值显示正常,但是拔出一块模块后再拔出对应的冗余模块时则HMI数值不对。可能是系统在模块恢复后没有对模块进行去钝化处理。让客户检查FC451的编程情况和硬件配置,发现时没有使能中断功能。如果没有使能中断功能,则硬件改动时不会触发相关OB的执行,因此不会对模块去钝化处理。在硬件组态中使能AI模块的中断功能后AI模块正常。
一个小时后客户又打电话进来,这次是AO卡件不被钝化。现象描述如下:在拔出前连接器后单个AO模块的输出值还是设定值的一半。逐项检查:AO卡件的PIP设置;程序中冗余功能块调用;中断功能。功能块编程和硬件设置都没有问题,让用户用FB453 查看冗余模块的状态,发现在拔出前连接器和模块后FB453的状态没有变化。这是什么原因呢?
在实验室简单配置一个冗余IO的项目进行测试,AI,AO模块的钝化和去钝化都正常,会不会是用户的PLC中的程序问题,让用户进行存储器复位后再重新下载,现象依旧如此。实在没办法了只能让用户将硬件配置发过来进行测试。
……
2个小时后硬件配置发过来了,逐个参数检查都没有发现异常。将配置下载到PLC后测试,发现拔前连接器和拔出模块后系统确实没有对模块钝化处理。查看CPU的诊断日志发现系统记录了16#3576事件,如图2所示:

图 2:CPU诊断信息
日志显示Local Data分配错误。查看CPU的参数发现优先级为25的Local Data 设置为256;再查看OB中调用的功能块,发现FB452需要Local Data为416 bytes,如图3所示。显然CPU分配的Local Data过小,将参数修改为768后AO模块的钝化和去钝化都正常。

分析产生的原因。程序中OB83调用了FB452和FC451,插拔模块时调用了OB83,但系统分配的localdata不足以执行功能块FB452,导致模块不钝化。Local Data为系统自动分配,一般情况下用户不会修改,也不会引起用户的注意。但一般情况下CPU都会记录系统的异常现象,在项目调试过程中遇到问题找不到原因是可以看看CPU的诊断日志。
好了!故事先写到这里。欢迎您关注更多的西门子热线故事!