如何将IEC定时器和IEC计数器声明为局部变量?

描述

IEC 定时器和计数器的优势

IEC 定时器和计数器的统一应用,可显著提高程序代码的运行效率。

采用这种方式具有以下优势:

通过新生成的背景数据块,可对块进行多次调用。

IEC 计数器的计数范围更大。

与 S5 定时器相比,IEC 定时器性能更佳,且计时更为准确。

STEP 7 V5.x 中的编程方式

在 STEP 7 V5.x 中,S5 定时器和计数器通过一个数字进行绝对寻址。由于这种寻址方式与具体数字相关,因此 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.编写以下程序代码:

STL 说明
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"

这也正是必需在调用中编程多重实例定时器的初始化的原因所在。

STL 说明
CALL #Time_1 // 定时器被调用并启动。
// 输入 TIME 作为该指令的数据类型。
time_type := Time
IN := "Tag_Output"
PT := T#30s
Q := "Tag_4"
ET := "Tag_ElapsedTime"

 







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分