CAN_DINT: 取消延时中断 (S7-1200, S7-1500) 说明 该指令可用于取消启动的延时中断,因此也可在组态的延时时间后取消延时中断 OB 的调用。 在 OB_NR 参数中,可以指定将取消调用的组织块编号。QRY_DINT: 查询延时中断状态 (S7-1200, S7-1500) 说明 指令“QRY_DINT”用于查询延时中断的状态。时间中断函数的编程示例 (S7-1200, S7-1500) 简介 在以下示例中,将读取延时中断 OB (OB20) 的状态,设置新的延时并启动或禁用 OB20。 要求 在全局数据块中,创建有 10 个变量和一个结构进行数据存储。互连参数:“SLI_itemiseStatus_DINT”函数 要评该估状态信息,需创建一个函数“SLI_itemiseStatus_DINT”。 在该函数中创建以下局部变量。互连参数:“SLI_FB_SRT_DINT”函数块 要调用指令,可创建函数块(“SLI_FB_SRT_DINT”)。在函数块“SLI_FB_SRT_DINT”中,创建 以下局部变量。“QRY_DINT”的结果 这些指令通过输入参数 OB_NR(“obNbr”)接收待调用 OB 的编号 (OB20)。 程序段 1: 当常开触点(“executeQry”)的信号状态为“TRUE”时,执行“QRY_DINT”指令并读取 OB20 的 数据。输出参数 STATUS(“#statWord”)中将显示 OB20 的状态。输出参数 RET_VAL (“returnValueQry”)可用于指示该过程是否存在错误。“SRT_DINT”的结果 程序段 2:当常开触点(“executeSrt”)的信号状态为“TRUE”时,执行“SRT_DINT”指令。通过 输入参数 DTIME(“delayTime”),将延时时间 (6 s) 传送到 OB20 中,并启用 OB20。 说明 在时间点 OB20 处,启动延时时间运行,然后再调用 OB20,除非在 CPU 的新循环周期内中 再次预先接收到延时时间。 执行 OB20 后,待输出的选定标识符(值“16#0001”)将存储在输入参数 SIGN(“sign”)中。 该标识符将显示在 OB20 的启动事件信息中。输出参数 RET_VAL(“returnValueSrt”)用于指 示处理无错误。 SRT_DINT 成功执行后,常开触点(“executeSrt”)将返回信号状态“FALSE”,延时时间不再传 送到 OB20 中。延时时间结束后,将立即再次执行 OB20。 说明 仅当当前所用的 CPU 循环时间小于 OB20 的延时时间,才能根据参数 EN 确定 OB20 中指定 的响应操作。
OB20 的结果 每次调用 OB20 时,都将执行指令“ADD”,且变量“testCurrCount”的值递增“1”。SRT_DINT 中 定义的延时时间结束后,仅调用 OB20 一次。OB20 调用后,将再次“禁用”。 “CAN_DINT”的结果 程序段 3:设置和启用了 OB20(“#statWord”的值为“16#0014”)时,比较器将返回信号状态 “TRUE”,同时 CAN_DINT 可以执行。 当常开触点(“executeCan”)的信号状态为“TRUE”时,执行“CAN_DINT”指令。该指令将禁用 OB20 并删除所设置的 OB20 调用数据。 输出参数 RET_VAL(“returnValueCan”)用于指示处理无错误。 CAN_DINT 执行后,线圈(“#statMem”)将置位为“TRUE”,并执行程序段 4。复位操作的结果 程序段 4:当常开触点(“#statMem”)的信号状态为“TRUE”时,通过指令“MOVE”可将变量 “testCurrCount”的值复位为“0”。信号状态为“TRUE”时,复位操作(“executeCan”)将自动结 束指令“CAN_DINT”的运行。 状态信息“#statWord”的结果 在程序段 7 中,调用函数“SLI_itemiseStatus_DINT”。将评估变量“#statWord”的有效位,并输 出为带有纯文本名称的布尔型变量。当结构为“itemiseStatus”的变量信号状态为“TRUE”时, 则语句正确。 程序代码 有关上述示例的更多信息和程序代码,请参见“指令的示例库 (页 713)”。 同步错误 (S7-1500) 屏蔽同步错误事件 (S7-1500) 简介 同步错误是编程和访问错误。使用不正确的操作数区域或编号,或不正确的地址进行编程时, 就会发生这种错误。屏蔽这些同步错误意味着: • 经过屏蔽的同步错误不会触发错误 OB 调用,不会导致已编程的备用响应。 • CPU 在一个错误状态寄存器中记录已发生的屏蔽错误。 可通过指令“MSK_FLT (页 3095)”来执行屏蔽。 对错误取消屏蔽就是取消此前已设置的屏蔽,并清除当前优先级的事件状态寄存器中的相应 位。可通过以下方法来取消屏蔽: • 通过调用指令“DMSK_FLT (页 3096)”。 • 当前优先级已完成后。 取消屏蔽后如果发生错误事件,则操作系统将启动相应的错误 OB。可使用指令“READ_ERR (页 3097)”来读取已发生且被屏蔽的错误。 说明 在 S7-1500 中,无论是否屏蔽错误时间,该错误事件都将输入到诊断缓冲区中,同时点亮 CPU 上的组错误 LED 指示灯。 错误的常规处理方式 在用户程序中,发生编程错误和 I/O 区域访问错误时的处理方式可能会有所不同: • 可以编程一个错误 OB,发生相应错误时,将会调用此错误 OB。 • 可分别针对每个优先级来禁用错误 OB。如果发生该优先级的此类错误,则 CPU 不会切换 为 STOP 模式。CPU 将错误输入到一个错误寄存器中。但无法通过该条目识别错误发送的 时间和频率。将同步错误指定为称为错误过滤器的特定位模式。可在指令“MSK_FLT (页 3095)”、 “DMSK_FLT (页 3096)”和“READ_ERR (页 3097)”的输入和输出参数中找到此错误过滤器。 同步错误可分为编程错误和访问错误,可通过两个错误屏蔽对这些错误进行屏蔽。下面的图 对错误过滤器进行了说明。MSK_FLT: 屏蔽同步错误事件 (S7-1500) 说明 可使用此指令来控制 CPU 对同步错误的响应。为此,可屏蔽相应的同步错误(有关错误过 滤器,请参见 屏蔽同步错误事件 (页 3089))。在调用“MSK_FLT”时,可对当前优先级中的 同步错误进行屏蔽。 如果在输入参数中将同步错误过滤器的各个位设置为“1”,则之前设置的其它位将保持值为 “1”。可获得新错误过滤器并使用输出参数进行读取。已屏蔽的同步错误不会调用 OB,而只 是输入到一个错误寄存器中。通过指令“READ_ERR (页3097)”,可读取该事件状态寄存器。DMSK_FLT: 不屏蔽同步错误事件 (S7-1500) 说明 可使用此指令来取消通过“MSK_FLT (页 3095)”屏蔽的错误。为此,必须在输入参数中将错 误过滤器的相应位设置为“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 或常 量 要取消屏蔽的访问错误READ_ERR: 读出事件状态寄存器 (S7-1500) 说明 可使用此指令来读取错误寄存器。错误寄存器的结构与编程和访问错误屏蔽的结构相对应, 可编程为“MSK_FLT (页 3095)”和“DMSK_FLT (页 3096)”的输入参数。 在输入参数中,输入要从错误寄存器读取的同步错误。在调用“READ_ERR”时,可从错误寄存 器读取所需条目,同时将这些条目清除。同步错误事件的程序示例 (S7-1500) 简介 在以下示例中,将使用指令“MSK_FLT”,屏蔽同步错误事件(程序错误);使用指令 “DMSK_FLT”取消屏蔽部分同步错误事件;使用指令“READ_ERR”读取事件状态寄存器。如果 程序错误未屏蔽,则调用程序错误 OB。 数据的存储 创建以下结构和变量,将数据存储在全局数据块中。互连参数:“SLI_itemiseDW_SyncErrEv”函数 创建函数“SLI_itemiseDW_SyncErrEv”,以 DWORD 大小传送位序列。 在该函数中创建以下局部变(输入和输出,从 1 到 31)。 • 输入部分: • 输出部分: 根据程序段 1 的示例,在函数中为输入和输出创建以下互连。互连参数:“SLI_FC_MSK_FLT”函数 创建函数“SLI_FC_MSK_FLT”,调用该程序部分。 程序段 1: 互连函数“SLI_mask_SyncErrEv”的参数,以及变量“peOB_unmased_active”、 “MSK_FLT.execute”和“maskedProgErrs”,如下所示。OB“SLI_peOB_SyncErrEv”的结果 如果触发程序错误且未使用过滤器进行屏蔽,则执行程序错误 OB“SLI_peOB_SyncErrEv”。 之后,在 OB 的程序段 1 中,将变量“READ_ERR.peOB_unmasked_active”将置位为“TRUE”。 函数“SLI_FC_MSK_FLT”的结果 程序段 1(函数“SLI_mask_SyncErrEv”): 通过调用函数“SLI_mask_SyncErrEv”,将程序错误和访问错误的结构转换为数据类型 DWORD (“progErrSetMask”和“accessErrSetMask”)。