同步错误事件 (S7-300, S7-400) 屏蔽同步错误事件 (S7-300, S7-400) 简介 同步错误是编程和访问错误。使用不正确的操作数区域或编号,或不正确的地址进行编程时, 就会发生这种错误。屏蔽这些同步错误意味着: • 经过屏蔽的同步错误不会触发错误 OB 调用,不会导致已编程的备用响应。 • CPU 在一个错误状态寄存器中记录已发生的屏蔽错误。 可通过指令“MSK_FLT (页 7835)”来执行屏蔽。 对错误取消屏蔽就是取消此前已设置的屏蔽,并清除当前优先级的事件状态寄存器中的相应 位。可通过以下方法来取消屏蔽: • 通过调用指令“DMSK_FLT (页 7836)”。 • 当前优先级已完成时(jinxian S7-400)。 如果在取消屏蔽后发生错误事件,则操作系统将启动相应的错误 OB。可对 OB 121 进行编 程以对编程错误做出响应,对 OB 122 进行编程以对访问错误做出响应。 可使用指令“READ_ERR (页 7837)”来读取已发生且被屏蔽的错误。 说明 不管错误是屏蔽的错误还是未屏蔽的错误,对于 S7-300(CPU 318 除外),该错误都会输 入到诊断缓冲区中,CPU 的组错误 LED 将会亮起。CAN_DINT: 取消延时中断 (S7-300, S7-400) 说明 可使用此指令来取消已启动的延时中断(参见“SRT_DINT (页 7825)”)。 在此情况下,不 调用延时中断 OB。 参数 下表列出了指令“CAN_DINT”的参数: 参数 声明 数据类型 存储区 说明 OB_NR Input INT I、Q、M、D、L 或常 量 要取消的 OB 的编号(OB 20 至 OB 23)。 RET_VAL Return INT I、Q、M、D、L 如果在执行该指令期间发生了错误,则 RET_VAL 的实参包含一个错误代码。 有关有效数据类型的更多信息,请参见“有效数据类型概述。
QRY_DINT: 查询延时中断状态 (S7-300, S7-400) 说明 可使用此指令来查询延时中断的状态。 延时中断是通过组织块 OB 20 至 OB 23 来管理的。 参数 下表列出了指令“QRY_DINT”的参数: 参数 声明 数据类型 存储区 说明 OB_NR Input INT I、Q、M、D、L 或常 量 将查询其状态的 OB 的编号(OB 20 至 OB 23) RET_VAL Return INT I、Q、M、D、L 如果在执行该指令期间发生了错误,则 RET_VAL 的实参包含一个错误代码。 STATUS Output WORD I、Q、M、D、L 延时中断的状态,请参见下表。 有关有效数据类型的更多信息,请参见“有效数据类型概述”。 参数 STATUS 说明 如果 RET_VAL 包含的值不为 0,则可能无法评估 STATUS。处理一般错误 如果用户程序中发生编程错误和访问错误,则可以不同方式对这些错误做出响应: • 可以编程一个错误 OB,发生相应错误时,将会调用此错误 OB。 • 可分别针对每个优先级来禁用错误 OB。在此情况下,当在特定优先级中发生此类错误时, CPU 不会切换到 STOP 模式。CPU 将错误输入到一个错误寄存器中。但无法从这个输入项 来识别何时发生的错误以及发生的频率如何。错误过滤器 同步错误将分配到称为错误过滤器的特定位模式。可在指令“MSK_FLT (页 7835)”、 “DMSK_FLT (页 7836)”和“READ_ERR (页 7837)”的输入和输出参数中找到此错误过滤器。 同步错误分为编程错误和访问错误,可使用两个错误过滤器对这些错误进行屏蔽。下面的图 对错误过滤器进行了说明。编程错误过滤器 下图说明了编程错误过滤器的位模式。参数“PRGFLT_...”中提供了编程错误过滤器(参见下 面的“编程错误,低位字”或“编程错误,高位字”)。编程错误低位字 下表列出了分配给编程错误过滤器的低位字的错误。还列出了可能错误原因。 编程错误的可能原因,低位字 错误 事件 ID (W#16#...) 错误发生在 ... BCD 码转换错误 2521 ... 要转换的值不是 BCD 数时(例如,5E8)。 读取时出现区域长度错误 2522 ... 所寻址的操作数没有全部位于可能的操作数范 围内时。 示例:应读取 MW 320, 但存储区的长度仅为 256 字节。 写入时出现区域长度错误 2523 ... 所寻址的操作数没有全部位于可能的操作数范 围内时。 示例:应将值写入 MW 320, 但存储区的长度仅为 256 字节。错误 事件 ID (W#16#...) 错误发生在 ... 读取时出现范围错误 2524 ... 间接区域重叠寻址为操作数指定了不正确的区 域标识符时。 示例: 正确:LAR1 P#E 12.0 L W[AR1, P#0.0] 不正确:LAR1 P#12.0 L W[AR1, P#0.0] 在执行该操作时报告 发生范围错误。 写入时出现范围错误 2525 ... 间接区域重叠寻址为操作数指定了不正确的区 域标识符时。 示例: 正确:LAR1 P#E 12.0 T W[AR1, P#0.0] 不正确:LAR1 P#12.0 T W[AR1, P#0.0] 在执行该操作时报告 发生范围错误。 定时器编号错误 2526 ... 访问的定时器不存在时。 示例:SP T [MW 0],其中,MW 0 = 129;应启动 定时器 129, 但仅有 128 个定时器。 计数器编号错误 2527 ... 访问的计数器不存在时。 示例:CU C [MW 0],其中,MW 0 = 600;必须访 问计数器 600, 但仅提供 512 个计数器 (CPU 416-1)。错误 事件 ID (W#16#...) 错误发生在 ... 读取时出现对准错误 2528 ... 使用不等于 0 的位地址来寻址字节、字或双字 操作数时。 示例:正确:LAR1 P#M12.0 L B[AR1, P#0.0] 不正确:LAR1 P#M12.4 L B[AR1, P#0.0] 写入时出现对准错误 2529 ... 使用不等于 0 的位地址来寻址字节、字或双字 操作数时。 示例: 正确:LAR1 P#M12.0 T B[AR1, P#0.0] 不正确:LAR1 P#M12.4 T B[AR1, P#0.0] 编程错误高位字 下表列出了分配给编程错误过滤器的高位字的错误。还列出了可能错误原因。 编程错误的可能原因,高位字 错误 事件 ID (W#16#...) 错误发生在 ... 写入错误数据块 2530 ... 要写入的数据块为只读时。 写入错误实例数据块 2531 ... 要写入的背景数据块为只读时。 块编号错误 DB 2532 ... 必须打开编号大于Zui大允许编号的数据块时 。 块编号错误 DI 2533 ... 必须打开编号大于Zui大允许编号的背景数据 块时 。 块编号错误 FC 2534 ... 调用编号大于Zui大允许编号的函数时 。 块编号错误 FB 2535 ... 调用编号大于Zui大允许编号的函数块时下表列出了分配给所有 CPU 的访问错误过滤器的错误。还列出了可能错误原因。 错误 事件 ID (W#16#...) 错误发生在 ... I/O 访问错误, 读取时发生 2942 ... 未将信号模块分配给 I/O 区域中的地址时。 或 ... 在指定的模块监视时间内未确认对此 I/O 区域 的访问时 (超时)。 I/O 访问错误, 写入时发生 2943 ... 未将信号模块分配给 I/O 区域中的地址时。 或 ... 在指定的模块监视时间内未确认对此 I/O 区域 的访问时 (超时)。MSK_FLT: 屏蔽同步错误事件 (S7-300, S7-400) 说明 可使用此指令来控制 CPU 对同步错误的响应。 为此,可屏蔽相应的同步错误(有关错误过 滤器,请参见 屏蔽同步错误事件 (页 7828))。 在调用“MSK_FLT”时,可对当前优先级中的 同步错误进行屏蔽。 如果在输入参数中将同步错误过滤器的各个位设置为“1”,则先前设置的其它位保留其值“1”。 可使用输出参数来获得可读取的新错误过滤器。 已屏蔽的同步错误不会调用 OB,而只是输 入到一个错误寄存器中。 可使用指令“READ_ERR (页 7837)”来读取错误寄存器。下表列出了指令“MSK_FLT”的参数: 参数 声明 数据类型 存储区 说明 PRGFLT_SET_MASK Input DWORD I、Q、M、D、L 或常 量 要屏蔽的编程错误 ACCFLT_SET_MASK Input DWORD I、Q、M、D、L 或常 量 要屏蔽的访问错误 RET_VAL Return INT I、Q、M、D、L 错误信息 PRGFLT_MASKED Output DWORD I、Q、M、D、L 已屏蔽的编程错误 ACCFLT_MASKED Output DWORD I、Q、M、D、L 已屏蔽的访问错误 有关有效数据类型的更多信息,请参见“有效数据类型概述DMSK_FLT: 不屏蔽同步错误事件 (S7-300, S7-400) 说明 可使用此指令来取消通过“MSK_FLT (页 7835)”屏蔽的错误。 为此,必须在输入参数中将错 误过滤器的相应位设置为“1”。 在调用“DMSK_FLT”时,可对当前优先级的相应同步错误取消 屏蔽。 同时,将清除错误寄存器中的查询条目。 可以使用输出参数来读取新错误过滤器。下表列出了指令“DMSK_FLT”的参数: 参数 声明 数据类型 存储区 说明 PRGFLT_ RESET_MASK Input DWORD I、Q、M、D、L 或常 量 要取消屏蔽的编程错误 ACCFLT_ RESET_MASK Input DWORD I、Q、M、D、L 或常 量 要取消屏蔽的访问错误 RET_VAL Return INT I、Q、M、D、L 错误信息 PRGFLT_ MASKED Output DWORD I、Q、M、D、L 仍被屏蔽的编程错误 ACCFLT_ MASKED Output DWORD I、Q、M、D、L 已屏蔽的访问错误 有关有效数据类型的更多信息,请参见“有效数据类型概述READ_ERR: 读出事件状态寄存器 (S7-300, S7-400) 说明 可使用此指令来读取错误寄存器。 错误寄存器的结构相当于编程和访问错误过滤器的结构, 可使用“MSK_FLT (页 7835)”和“DMSK_FLT (页 7836)”的输入参数进行编程。 在输入参数中,输入要从错误寄存器读取的同步错误。 在调用“READ_ERR”时,可从错误寄 存器读取所需条目,同时将这些条目清除。