IEC 定时器和计数器的优势
IEC 定时器和计数器的统一应用,可显著提高程序代码的运行效率。
采用这种方式具有以下优势:
通过新生成的背景数据块,可对块进行多次调用。
IEC 计数器的计数范围更大。
与 S5 定时器相比,IEC 定时器性能更佳,且计时更为准确。
STEP 7 V5.x 中的编程方式
在 STEP 7 V5.x 中,S5 定时器和计数器通过一个数字进行juedui寻址。由于这种寻址方式与具体数字相关,因此 S5 定时器和计数器无法对程序块进行重用。
定时器值的范围限制为 9990 秒,而计数器的最大编号限值为 999。
STEP 7 TIA Portal 中的操作步骤
在调用或需使用时,需要在程序块中对该 IEC 定时器和计数器进行声明。IEC 定时器是一种数据类型为 IEC_TIMER、IEC_LTIMER 或 TON_TIME 和 TON_LTIME 的结构,也可声明为块中的局部变量。IEC 计数器是一种数据类型为 IEC_SCOUNTER、IEC_USCOUNTER 之类的结构。
TIA Portal 中的编程示例
以下示例说明了如何将 IEC 定时器和 IEC 计数器声明为局部变量:
TON IEC 定时器和 CTU IEC 计数器的数据将作为局部变量(多重实例)存储在块接口中。
也可将结构化的 IEC 定时器和 IEC 计数器创建为多重实例,并用于程序代码中。
为此,需创建一个 ARRAY of TON 类型的全局数据块。数据类型 TON 不会显示在下拉列表中,但可手动输入: 创建函数块并将指令“TON:接通延时”拖放到程序段中。调用 IEC 定时器 TON 的实例,如下所示: |
以多重实例方式调用定时器
如果要使用 IN 参数以多重实例方式启动一个定时器,则在程序代码中不得提前对其进行初始化。在这种情况下,在 IN 参数处调用的定时器无法再识别信号的上升沿,并且定时器不会启动:
1.在块接口的“Static”部分,将定时器“Time_1”创建为数据类型为“TP_TIME”的多重实例。
2.编写以下程序代码:
A "Tag_Output" | // 当“Tag_Output”输出接收到信号状态 1 时, |
= #Time_1.IN | // 在信号的上升沿处,初始化多重实例定时器 #Timer_1 的 IN 参数。 |
CALL #Time_1 | // 调用多重实例定时器并再次查询 IN 参数时,该定时器会因未查询到新的信号上升沿而不启动。 // 输入 TIME 作为该指令的数据类型。 |
time_type := Time | |
IN := "Tag_Output" | |
PT := T#30s | |
Q := "Tag_4" | |
ET := "Tag_ElapsedTime" |
这也正是必需在调用中编程多重实例定时器的初始化的原因所在。
CALL #Time_1 | // 定时器被调用并启动。 // 输入 TIME 作为该指令的数据类型。 |
time_type := Time | |
IN := "Tag_Output" | |
PT := T#30s | |
Q := "Tag_4" | |
ET := "Tag_ElapsedTime" |