使用S7-400H上的I/O
8.5 连接冗余I/O的其它选项
用户层上的冗余I/O
如果由于相关冗余模块不在所支持组件的目录中而不能使用系统所支持的任何一个冗 余I/O (第8.4节),则应该在用户层上实现冗余I/O。
组态
支持下列冗余I/O组态(图8-13):
1. 包含单向中央和/或分布式I/O的冗余组态。
分别在CPU 0和CPU 1单元中插入一个I/O模块。
2. 包含双向I/O的冗余组态
将两个I/O模块插入到带有源背板总线的两个ET 200M分布式I/O设备中。
冗余单向I/O
冗余双向I/O
图 8-13 冗余单向和双向I/O
注意
使用冗余I/O时,可能必须给已计算得到的监视时间加上一个保险时间;参见第
长沙工控帮教育科技有限公司整理
冗余I/O的硬件安装和组态
使用冗余I/O的建议策略:
1. 按如下使用I/O:
-- 在单向组态中,每个CPU单元使用一个I/O模块
-- 在双向组态中,每个分布式I/O设备ET 200M使用一个I/O模块。
2. I/O的接线应该确保可以由两个单元寻址。
3. 给I/O模块分配不同的逻辑地址。
注意
建议不要将相同的逻辑地址分配给输入和输出模块。但如果到底还是这样做了,则 除了查询逻辑地址外,还必须在OB 122中查询故障组的类型(输入或输出)。
当系统处于单机模式(例如,直接访问)时,用户程序还必须更新冗余、单向输出模块 的过程映像。OB72中的用户程序(恢复冗余)必须更新所有过程映像分区(SFC27
“UPDAT_PO”),否则,在系统转换到冗余状态后,系统将使用原值初始化备用站 CPU的单通道单向输出模块。
用户程序中的冗余I/O
下面所示的实例程序显示两个冗余数字量输入模块的用法:
• 模块A位于机架0,逻辑基址为8,
• 模块B位于机架1,逻辑基址为12。
通过直接访问在OB1中读取两个模块之一。通常假设模块A为相关,因为变量BGA的 值为TRUE。如果没有发生错误,则以所读取的数值继续处理。
在发生I/O访问错误后,将通过直接访问读取模块B (OB1中的“重试”)。否则,以 模块B所读取的数值进行处理。但如果已经在该情况下发生了一个类似错误,则两个 模块都被认为处于故障状态,以替换值继续执行操作。
实例程序基于的事实是:在模块A发生故障或替换模块A之后,通常首先在OB1中处 理模块B。不会在OB1中重新处理模块A,除非在模块B上发生访问错误。
长沙工控帮教育科技有限公司整理
注意
表 8-7 冗余I/O实例,OB1部分
STL 注释
NOP 0;
SET;
R VERSUCH2; //初始化
A BGA; //首先读取模块A?
JCN WBGB; //如果否,则继续模块B WBGA: SET;
R PZF_BIT; //清除过程访问错误(PAE)位 L PED 8; //读取CPU 0
U PZF_BIT; //在OB 122中检测到PAE吗?
SPBN PZOK; //如果否,则I/O访问正常 U VERSUCH2; //重试该访问吗?
SPB WBG0; //如果是,则使用替换值
R PZF_BIT; //清除PAE位 L PED 12; //读取CPU 1
U PZF_BIT; //在OB 122中检测到PAE吗?
SPBN PZOK; //如果否,则过程访问正常 U VERSUCH2; //重试该访问吗?
SPB WBG0; //如果是,则使用替换值
表 8-8 冗余I/O实例,OB1部分
STL 描述
// 模块A引起PAE吗?
L OB122_MEM_ADDR; //相关的逻辑基址 L W#16#8;
==I ; //模块A?
SPBN M01; //如果否,继续M01 //访问模块A期间的PAE SET;
= PZF_BIT; //置位PAE位 SPA CONT;
// 模块B引起PAE吗?
M01: NOP 0;
L OB122_MEM_ADDR; //相关的逻辑基址 L W#16#C;
==I ; //模块B?
SPBN CONT; //如果否,继续CONT //访问模块B期间的PAE SET;
= PZF_BIT; //置位PAE位 CONT: NOP 0;