如何在IICS中捕获子Taskflow挂起状态并将其置为失败
子Taskflow挂起状态捕获与置为失败的实现方案
一、解读VIM_RAW_fail字段参数
启用Fault Handling后,VIM_RAW_fail字段通常以数组形式返回3个核心参数(不同系统细节略有差异,建议手动触发一次子Taskflow挂起,查看实际值确认):
- 第1个参数:触发故障的对象类型(比如
TASKFLOW表示故障来自子Taskflow) - 第2个参数:对象的状态码/状态标识(比如数值
3或字符串'SUSPENDED'对应挂起状态) - 第3个参数:故障的详细描述信息
二、决策环节实现状态判断与置失败操作
- 提取状态参数:在决策环节的公式中,通过索引提取
VIM_RAW_fail的第二个参数,示例公式(以支持数组索引的系统为例):
若系统仅支持字符串分割,可使用分割函数(比如GET_ELEMENT(VIM_RAW_fail, 2)SPLIT(VIM_RAW_fail, ',')[2],注意处理引号或空格) - 判断挂起状态:将提取的参数与挂起状态的标识匹配,比如:
GET_ELEMENT(VIM_RAW_fail, 2) == 'SUSPENDED' - 执行置失败动作:若判断结果为真,调用系统内置的状态修改函数或控制任务,将目标子Taskflow的状态置为失败,比如:
SET_TASKFLOW_STATUS('子Taskflow名称', 'FAILED')
三、替代方案
1. 子Taskflow层面修改错误处理规则
直接给每个子Taskflow的警告事件配置错误处理,将警告触发的动作从「挂起父Taskflow」改为「置当前子Taskflow为失败」:
- 进入子Taskflow的Fault Handling设置界面
- 找到警告触发的条件项,修改处理动作为
Fail the Taskflow - 保存后,子Taskflow触发警告时会直接标记为失败,无需父Taskflow额外处理
2. 父Taskflow全局故障处理配置
在父Taskflow的Fault Handling中添加全局规则,针对子Taskflow挂起状态直接处理:
- 触发条件设置为:
子Taskflow状态 = 挂起 - 处理动作设置为:
Set Taskflow Status to Failed(选择对应的子Taskflow对象)
3. 脚本任务主动查询与修改状态
在父Taskflow中添加脚本任务,在每个子Taskflow执行完成后执行:
- 脚本中调用系统状态查询函数,获取子Taskflow的当前状态,比如:
sub_tf_status = get_taskflow_status('sub_taskflow_01') - 若状态为挂起,调用状态修改函数置为失败:
if sub_tf_status == 'SUSPENDED': set_taskflow_status('sub_taskflow_01', 'FAILED')
内容的提问来源于stack exchange,提问作者Alex Dragut
相关产品推荐
相关产品推荐

