使用定时器指令可创建编程的时间延时。 用户程序中可以使用的定时器数仅受CPU存储器容量限制。 每个定时器均使用 16 字节的 IEC_Timer 数据类型的DB结构来存储功能框或线圈指令顶部指定的定时器数据。 STEP 7会在插入指令时自动创建该 DB。
表格 8- 18 定时器指令
1 STEP 7 会在插入指令时自动创建 DB。
2 在 SCL 示例中,“IEC_Timer_0_DB”是背景 DB 的名称。
表格 8- 19 参数的数据类型
参数 | 数据类型 | 说明 |
功能框: IN | Bool | TP、TON 和 TONR: |
线圈: 能流 | 功能框: 0=禁用定时器,1=启用定时器 | |
线圈: 无能流=禁用定时器,能流=启用定时器 | ||
TOF: | ||
功能框: 0=启用定时器,1=禁用定时器 | ||
线圈: 无能流=启用定时器,能流=禁用定时器 | ||
R | Bool | 仅 TONR 功能框:
0=不重置 1= 将经过的时间和 Q 位重置为 0 |
功能框: PT
线圈: "PRESET_Tag" |
Time | 定时器功能框或线圈: 预设的时间输入 |
功能框: Q | Bool | 定时器功能框: Q 功能框输出或定时器 DB 数据中的 Q 位 |
线圈: DBdata.Q | 定时器线圈: 仅可寻址定时器 DB 数据中的 Q 位 | |
功能框: ET | Time | 定时器功能框: ET(经历的时间)功能框输出或定时器 DB |
线圈: DBdata.ET | 数据中的 ET 时间值 | |
定时器线圈: 仅可寻址定时器 DB 数据中的 ET 时间值。 |
定时器 | PT 和 IN 功能框参数和相应线圈参数的变化 | |
TP | 定时器运行期间,更改 PT 没有任何影响。 | |
定时器运行期间,更改 IN 没有任何影响。 | ||
TON | 定时器运行期间,更改 PT 没有任何影响。 | |
定时器运行期间,将 IN 更改为 FALSE 会复位并停止定时器。 | ||
TOF | 定时器运行期间,更改 PT 没有任何影响。 | |
定时器运行期间,将 IN 更改为 TRUE 会复位并停止定时器。 | ||
TONR | 定时器运行期间更改 PT 没有任何影响,但对定时器中断后继续运行会有影响。 | |
定时器运行期间将 IN 更改为 FALSE 会停止定时器但不会复位定时器。 将 IN 改回 | ||
TRUE 将使定时器从累积的时间值开始定时。 |
PT(预设时间)和 ET(经过的时间)值以表示毫秒时间的有符号双精度整数形式存储在指定的IEC_TIMER DB数据中。 TIME 数据使用T#标识符,可以简单时间单元(T#200ms或200)和复合时间单元(如T#2s_200ms的形式输入。
表格 8- 21 TIME 数据类型的大小和范围
数据类型 | 大小 | 有效数值范围 1 |
TIME | 32 位,以 DInt 数据的形式存 储 | T#-24d_20h_31m_23s_648ms 到 T#24d_20h_31m_23s_647ms
以 -2,147,483,648 ms 到 +2,147,483,647 ms 的形式存储 |
1 在定时器指令中,无法使用上面所示 TIME 数据类型的负数范围。 负的PT(预设时间)值在定时器指令执行时被设置为 0。 ET(经过的时间)始终为正值。
定时器线圈示例
-(TP)-、-(TON)-、-(TOF)- 和 -(TONR)- 定时器线圈必须是 LAD 网络中的后一个指令。 如定时器示例中所示,后面网络中的触点指令会求出定时器线圈 IEC_Timer DB 数据中的 Q 位值。 同样,如果要在程序中使用经过的时间值,必须访问 IEC_timer DB 数据中的 ELAPSED 元素。
当 Tag_Input 位的值由 0 转换为 1 时,脉冲定时器启动。 定时器开始运行并持续Tag_Time 时间值指定的时间。
只要定时器运行,就存在 DB1.MyIEC_Timer.Q 状态=1 且 Tag_Output 值=1。当经过Tag_Time 值后,DB1.MyIEC_Timer.Q=0 且 Tag_Output 值=0。
重置定时器 -(RT)- 和预设定时器 -(PT)- 线圈
这些线圈指令可与功能框或线圈定时器一起使用并可放置在中间位置。 线圈输出能流状态始终与线圈输入状态相同。 若 -(RT)- 线圈激活,指定 IEC_Timer DB 数据中的 ELAPSED 时间元素将重置为 0。若 -(PT)- 线圈激活,使用所分配的时间间隔值加载指定 IEC_Timer DB 数据中的 PRESET 时间元素。
说明
在 FB 中放置定时器指令时,可以选择“多重背景数据块”(Multi-instance data block) 选项。 各定时器结构名称可以对应不同的数据结构,但定时器数据包含在同一个数据块中,无需 为每个定时器都使用一个独立的数据块。 这样可减少处理定时器所需的处理时间和数据存储空间。 在共享的多重背景数据块中的定时器数据结构之间不存在交互作用。
定时器的运行
表格 8- 22 IEC 定时器的类型
说明
在 CPU 中,没有给任何特定的定时器指令分配专门的资源。 每个定时器使用 DB存储器中其自身的结构和一个连续运行的内部 CPU 定时器来执行定时。
当由于 TP、TON、TOF 或 TONR 指令的输入上出现沿跳变而启动定时器时,连续运行的内部 CPU 定时器的值将被复制到为该定时器指令分配的 DB 结构的 START 成员中。 该起始值在定时器继续运行期间将保持不变,随后将在每次更新定时器时使用。 每次启动定时器时,都会从内部 CPU 定时器将一个新的起始值加载到定时器结构中。
更新定时器时,将从内部 CPU 定时器的当前值中减去上述起始值以确定经过的时间。 再将经过的时间与预设值进行比较以确定定时器 Q 位的状态。 然后在为该定时器分配的 DB 结构中,更新ELAPSED和Q成员。 注意,经过的时间将停留在预设值上(达到预设值后定时器便不会继续累加经过的时间)
当且仅当满足以下条件时才会执行定时器更新:
- 已执行定时器指令(TP、TON、TOF 或TONR)
- 某个指令直接引用DB中定时器结构的“ELAPSED”成员
- 某个指令直接引用DB中定时器结构的“Q”成员
定时器编程
规划和创建用户程序时应考虑以下定时器运行说明:
- 可在同一个扫描周期内多次更新定时器。 每次执行定时器指令(TP、TON、TOF、TONR)和每次将定时器结构的ELAPSED或 Q 成员用作其它已执行指令的参数时,都会更新定时器。 这在需要新时间数据(本质上是立即读取定时器)时会是一项优点。 但是,如果希望在整个程序扫描周期内保持一致的值,则请将定时器指令放置在需要 这些值的其它所有指令之前,并使用定时器指令的 Q 和 ET 输出中的变量而不是定时器 DB 结构的 ELAPSED 和 Q 成员。
- 扫描期间可以不执行定时器更新。 可以在函数中启动定时器,然后在一个或多个扫描周期内不再调用该函数。 如果没有执行引用定时器结构中ELAPSED或 Q 成员的其它指令,则不会更新定时器。 直到再次执行定时器指令或执行将定时器结构的 ELAPSED 或 Q 用作参数的其它指令时,才会再次更新定时器。
- 尽管并不常见,但可以将同一个DB定时器结构分配给多个定时器指令。 通常,为避免意外交互作用,应当使每个 DB 定时器结构仅对应一个定时器指令(TP、TON、TOF、TONR)。
- 自复位定时器适合用于触发需要周期性发生的动作。 通常,将引用定时器位的常闭触点放置在定时器指令前面可创建自复位定时器。 该定时器网络通常位于使用该定时器位来触发动作的一个或多个依赖型网络上面。 当定时器时间已到(经过的时间达到预设值)时,定时器位将在一个扫描周期内为 ON,因而可执行由该定时器位控制的依赖型网络逻辑。 下次执行定时器网络时,常闭触点将为OFF,从而复位定时器并清除定时器位。 下次扫描期间,常闭触点将为ON,因此将重启定时器。 创建此类自复位定时器时,请勿将定时器 DB 结构的“Q”成员用作该定时器指令前面常闭触点的参数。 而是要使用与该定时器指令的“Q”输出相连的变量。 如果访问定时器 DB 结构的 Q 成员,将导致定时器更新,且如果因常闭触点而更新定时器,该触点将立即复位该定 时器。 定时器指令的 Q 输出将在一个扫描周期内不为 ON,并且依赖型网络不会执行。
RUN-STOP-RUN 切换或 CPU 循环上电后保留时间数据
如果从运行模式阶段切换到停止模式或 CPU 循环上电并启动了新运行模式阶段,则存储在之前运行模式阶段中的定时器数据将丢失, 除非将定时器数据结构指定为具有保持性(TP、TON、TOF 和 TONR 定时器)。
将定时器指令放到程序编辑器中后,如果接受调用选项对话框中的默认设置,则将自动分 配一个无法实现具有保持性的背景数据块。 要使定时器数据具有保持性,必须使用全局数据块或多重背景数据块。
指定全局数据块将定时器数据存储为保持性数据
无论将定时器放在什么位置(OB、FC 或 FB),该选项都有效。 1. 创建一个全局数据块:
– 在项目树中双击“添加新块”(Add new block)。
– 单击数据块 (DB) 图标
– 对于“类型”(Type),选择“全局数据块”(global DB)。
– 如果希望能够将该数据块中各数据元素选择为具有保持性,则确保选中数据块类型“ 优化”(Optimized) 框。 另一个数据块类型选项“标准 - 与 S7-300/400 兼容”(Standard - compatible with S7-300/400) 仅允许将所有 DB 数据元素都设置为具有保持性或没有保持性。
– 单击“确定”(OK)
- 向该数据块中添加定时器结构:
– 在新的全局数据块中,添加 IEC_Timer 数据类型的静态变量。
– 在“保持性”(Retain) 列中,选中相应框以使该结构具有保持性。
– 重复此过程为要存储在该数据块中的所有定时器创建结构。 可以将每个定时器结构放置在独立的全局数据块中,也可以将多个定时器结构放置 在同一个全局数据块中。 除定时器外,还可以将其它静态变量放置在该全局数据块中。 将多个定时器结构放置在同一个全局数据块中可减少总的块数。
– 可根据需要重命名定时器结构。
- 打开程序块来选择保持性定时器的放置位置(OB、FC 或FB)。
- 将定时器指令放置在所需位置。
- 在调用选项对话框出现后,单击“取消”按钮。
- 在新的定时器指令上方,输入上面所创建全局数据块和定时器结构的名称(请勿使用助手浏览)(例如: “Data_block_3.Static_1”)。
指定多重背景数据块以将定时器数据存储为保持性数据
该选项仅对于将定时器放置在 FB 中有效。
该选项取决于 FB 属性是否指定“优化块访问”(Optimized block access)(仅允许符号访问)。 要检查现有 FB 访问属性的组态情况,请在项目树中右键单击该 FB,选择“属性”(Properties),然后选择“特性”(Attributes)。
如果 FB 指定“优化块访问”(Optimized block access)(仅允许符号访问): 1. 打开 FB 进行编辑。
- 将定时器指令放在 FB中的所需位置。
- “调用选项”(Call options) 对话框出现后,单击“多重背景”(Multi instance)图标。 仅在将该指令放置于FB 中后,“多重背景”(Multi instance) 选项才可用。
- 如有需要,请在“调用选项”(Call options)对话框中重命名定时器。
- 单击“确定”(OK)。定时器指令将出现在编辑器中,而 IEC_TIMER 结构将出现在“FB 接口”(FB Interface) 的“静态”(Static) 下。
- 如有必要,打开 FB接口编辑器(可能需要单击小箭头以展开视图)。
- 在“静态”(Static)下,找到刚刚创建的定时器结构。
- 在此定时器结构的“保持性”(Retain)列中,改为选择“保持性”(Retain)。 此后只要从另一程序块调用此 FB,都将利用此接口定义(包含标有保持性的定时器结构)创建背景数据块。
如果 FB 未指定“优化块访问”(Optimized block access),则块访问类型为标准访问,标准访问与 S7-300/400 传统组态兼容,且允许符号访问和直接访问。 要将多重背景分配给标准块访问 FB,请按以下步骤操作:
- 打开 FB进行编辑。
- 将定时器指令放在 FB中的所需位置。
- “调用选项”(Call options) 对话框出现后,单击“多重背景”(Multi instance)图标。 仅在将该指令放置于FB 中后,“多重背景”(Multi instance) 选项才可用。
- 如有需要,请在“调用选项”(Call options)对话框中重命名定时器。
- 单击“确定”(OK)。定时器指令将出现在编辑器中,而 IEC_TIMER 结构将出现在“FB 接口”(FB Interface) 的“静态”(Static) 下。
- 打开将使用此 FB的块。
- 将此FB 置于所需的位置。 如此将为该 FB 创建一个背景数据块。
- 打开将 FB放入编辑器时创建的背景数据块。
- 在“静态”(Static) 下,找到所需的定时器结构。在此定时器结构的“保持性”(Retain)列中,选中相应框使该结构具有保持性。

评论