西门子S高级编程培训教材内部教材处理同步和异步错误.ppt
处理同步和异步错误,处理异步错误,异步错误并未对应到程序的某个特定位置,例如,它们可同程序的处理过程异步出现。,1)仅适用于 S7-400,2)非Stopw/o Error OB,举例,错误类型,时间错误,超出最大扫描时间,电源错误,后备电源故障,诊断中断,可诊断模块的输入断线,删除/插入模块中断,在运行模式下将一个 S7-400 信号模块移除,CPU 硬件错误,在MPI 接口出现故障信号电平,程序顺序错误,更新过程映像出现错误(模块有故障),机架错误,分布式机架上电源故障,通信错误,不正确的消息代码,错误 OB,OB 80,OB 81 2),OB 82,OB 83 1),OB 84 1),OB 85,OB 86 1),OB 87,处理故障组织块,为了在发生错误时抑制 CPU STOP,传送一个空的故障组织块您可以在Error OB中编写预期的响应,并根据需要在执行 Error OB之后使用系统功能 SFC 46 请求系统处于 Stop 状态在故障组织块的启动信息中存有一个附加错误标识符,可在程序中检验。在线帮助或者系统和标准功能手册中详细介绍了故障组织块将OB传送到一个不支持该OB的CPU时,将被该CPU拒绝并伴随一个错误消息。,异步错误 OB 举例,OB81:Error OB:电源故障Network 1:电池故障,到来的事件L#OB81_FLT_ID/加载错误标识符LB#16#22/标识符:CR 中的电池故障=I=M81.1/设置存储器标志位L#OB81_EV_CLASS/标识符:到来,离去LB#16#39/标识符:到来事件=I=M81.2/存储器标志位到来事件AM81.1/电池故障和AM81.2/到来事件SM81.0/将存储器标志位设为错误显示/Network 2:当电池恢复正常后,复位辅助存储器标志位L#OB81_EV_CLASS/标识符:到来,离去LB#16#38/标识符:离去=IRM81.0/复位存储器标志位,处理同步错误,同步错误直接定位到用户程序中的一个位置算术指令中的错误(溢出、无效的实数数据)设置状态位处理 STL语句时的错误(同步错误)调用同步错误 OB,举例,错误类型,编程错误,调用 CPU 中不存在的块,访问错误,直接访问一个有缺陷的或者不存在的模块,错误 OB,OB 121,OB 122,编程错误 OB121 的启动信息,数据类型,变量名,OB121_EV_CLASS,BYTE,OB121_SW_FLT,BYTE,解释,赋值,B#16#25=调用编程错误 OB121,错误代码(参见文本),OB121_PRIORITY,BYTE,OB121_OB_NUMBR,BYTE,其中发生错误的优先级,OB 编号(B#16#79),OB121_BLK_TYPE,BYTE,OB121_RESERVED_1,BYTE,中断块的类型(仅适用S7-400)OB:B#16#88,DB:B#16#8A,FB:B#16#8E,FC:B#16#8C,错误码的补充(参见文本),OB121_FLT_REG,WORD,OB121_BLK_NUM,WORD,OB121:错误源,发生错误的块的号码,OB121_PRG_ADDR,WORD,OB121_DATE_TIME,DT,引发错误的块中的错误地址(仅适用 S7-400),发生编程错误时的时间,访问错误 OB122 的启动信息,数据类型,变量名称,OB122_EV_CLASS,BYTE,OB122_SW_FLT,BYTE,解释,赋值,B#16#29=调用访问错误,错误代码(可能的取值:B#16#42、B#16#43、B#16#44、B#16#45),OB122_PRIORITY,BYTE,OB122_OB_NUMBR,BYTE,其中发生错误的优先级,OB 编号(B#16#80),OB122_BLK_TYPE,BYTE,OB122_MEM_AREA,BYTE,中断块的类型(仅适用于 S7-400)OB:B#16#88,DB:B#16#8A,FB:B#16#8E,FC:B#16#8C,错误码的补充(参见文本),OB122_FLT_REG,WORD,OB122_BLK_NUM,WORD,OB122:发生错误处的地址标识符,其中发生错误的块的号码,OB122_PRG_ADDR,WORD,OB122_DATE_TIME,DT,引发错误的块中的错误地址(仅适用 S7-400),发生编程错误时的时间,屏蔽同步错误,同步错误 OB 的缺点:用于过程管理和错误处理的代码分布在至少两个块中后续更改或维护方面的问题较理想的情况:用于过程管理和错误处理的代码位于同一个块中屏蔽同步错误:在“紧急”指令之前:SFC 36 MSK_FLT:屏蔽同步错误(OB12x 禁止调用)执行“紧急”指令检查是否有错误发生SFC 38 READ_ERR:读 Error Register(错误寄存器)OB12x 再次开放调用:SFC 37 DMSK_FLT:解除屏蔽同步错误,SFC 36 屏蔽同步错误,MSK_FLT,EN,ENO,PRGFLT_SET_MASK,ACCFLT_SET_MASK,RET_VAL,?.?,PRGFLT_MASKED,?.?,ACCFLT_MASKED,?.?,?.?,?.?,参数声明数据类型内存区域解释PRGFLT_SET_MASKINPUTDWORD I,Q,M,D,L,Const.新(附加的)编程错误过滤器 ACCFLT_SET_MASKINPUTBYTE I,Q,M,D,L,Const.新附加访问故障过滤器RET_VALOUTPUTINT I,Q,M,D,LSFC 返回值,001:新过滤器同已有的过器滤重叠PRGFLT_MASKEDOUTPUTDWORD I,Q,M,D,L完成编程错误过滤ACCFLT_MASKEDOUTPUTDWORD I,Q,M,D,L完成访问错误过滤,编程错误过滤器的结构,BCD 转换错误,范围长度错误,读,范围长度错误,写,范围错误,读,范围错误,写,计时器号错误,计数器号错误,未对齐,读,未对齐,写,未定义,写错误 DB,写错误实例 DB,块编号错误 DB,块编号错误 DI,块编号错误 FC,块编号错误 FB,DB 未加载,FC 未加载,FB 未加载,注:输出参数 RGFLT_MASKED 的相应位的设置如下:Value(值)=1:屏蔽错误。Value(值)=0:不屏蔽错误。,访问错误过滤器的结构,31 30 29.7 6 5 4 3 2 1 0,I/O 读访问错误,仅对于 S7-400:I/O 访问错误,指读取不存在的模块或者重复访问,未定义,I/O 写访问错误,仅对于S7-400:向不存在的模块写入或者重复访问而引发I/O访问错误,.,注:输出参数 ACCFLT_MASKED 的相应位设置如下:Value=1:屏蔽错误。Value=0:不屏蔽错误。未定义的位的值为“1”。,SFC 37 解除同步错误屏蔽,DMSK_FLT,EN,ENO,PRGFLT_RESET_MASK,ACCFLT_RESET_MASK,RET_VAL,?.?,PRGFLT_MASKED,?.?,ACCFLT_MASKED,?.?,?.?,?.?,参数声明数据类型内存区域解释PRGFLT_RESET_MASKINPUTDWORD I,Q,M,D,L,Const.编程错误过滤器复位ACCFLT_RESET_MASKINPUTBYTE I,Q,M,D,L,Const.访问错误过滤器复位RET_VALOUTPUTINT I,Q,M,D,LSFC返回值,W#16#0001:新的过滤器中包含已存贮的 过滤未设置的位PRGFLT_MASKEDOUTPUTDWORD I,Q,M,D,L仍被屏蔽的编程错误ACCFLT_MASKEDOUTPUTDWORD I,Q,M,D,L仍被屏蔽的访问错误,SFC 38 读错误寄存器,READ_ERR,EN,ENO,PRGFLT_QUERRY,ACCFLT_QUERRY,RET_VAL,?.?,PRGFLT_CLR,?.?,ACCFLT_CLR,?.?,?.?,?.?,参数声明数据类型内存区域 解释PRGFLT_QUERRYINPUTDWORD I,Q,M,D,L,Const.编程错误过滤检查ACCFLT_QUERRYINPUTBYTE I,Q,M,D,L,Const.访问错误过滤检查RET_VALOUTPUTINT I,Q,M,D,LSFC返回值,W#16#0001:检查过滤结果中包含了未设置的 位(在存贮的过滤器中)PRGFLT_CLROUTPUTDWORD I,Q,M,D,L编程错误过滤及错误信息 ACCFLT_CLROUTPUTDWORD I,Q,M,D,L访问错误过滤及错误信息,示例:数据块测试,Network 1:Masking,Testing,Demasking/Mask DB does not existCALLSFC36(PRGFLT_SET_MASK:=DW#16#4000000,/标识符:DB 不存在 ACCFLT_SET_MASK:=DW#16#0,/未屏蔽访问错误 RET_VAL:=#SFC36Error,PRGFLT_MASKED:=#Prog36Mask,ACCFLT_MASKED:=#Acc36Mask);/Test callOPN DBDB_NO;/Check programming errorCALLSFC38(PRGFLT_QUERRY:=DW#16#4000000,/标识符:DB 不存在 ACCFLT_QUERRY:=DW#16#0,/未屏蔽访问错误 RET_VAL:=#SFC38Error,PRGFLT_MASKED:=#Prog38Mask,ACCFLT_MASKED:=#Acc38Mask);/Evaluate resultL#Prog38MaskLDW#16#4000000=D=#DB_NOT_THERE/设置辅助变量 DB not there/Demask DB does not existCALLSFC37(PRGFLT_RESET_MASK:=DW#16#4000000,/标识符:DB 不存在 ACCFLT_RESET_MASK:=DW#16#0,/未屏蔽访问错误 RET_VAL:=#SFC37Error,PRGFLT_MASKED:=#Prog37Mask,ACCFLT_MASKED:=#Acc37Mask);,练习 8.1:FC81中的错误处理,FC 81,EN,ENO,Meas_values,Sum,Mean_value,声明名称类型inMeas_valuesANYoutRET_VALINToutSumREALoutMean_valueREAL,RET_VAL,错误代码,错误原因错误代码无错误0数据类型REAL-1DB 不存在-2范围长度错误-4,