【问题标题】:Delay Timer in Structured Text结构化文本中的延迟计时器
【发布时间】:2019-10-19 11:42:18
【问题描述】:

我刚刚开始使用结构化文本处理 PLC,我必须在每次延迟 1 分钟后将值存储在温度变量数组中,但我无法这样做。

FOR i := 0 TO 5 DO
    Temp[i] := tempsensor;
END_FOR;

这是一种伪代码。 我只需要在循环中引入延迟,它可以在每 1 分钟后读取值并将其存储在数组位置。
即使有任何其他方式,我也会非常感激。

【问题讨论】:

标签: plc structured-text


【解决方案1】:

试试这个

VAR 
   i:INT;
   Temp: ARRAY[0..10000] OF LREAL; 
   delayTimer: TON;
END_VAR

delayTimer(IN := not delayTimer.Q, PT := T#1m);

IF delayTimer.Q THEN
   Temp[i] := tempsensor;
   i := i + 1;

   IF i > 10000 THEN
       i := 0;
   END_IF;
END_IF;

1 分钟后,它将记录 1 个温度值并索引数组。如果它到达数组的末尾,它将从开头开始写。

【讨论】:

    【解决方案2】:

    您每分钟循环一次数组并设置值。

    VAR
        i: INT := 1; (* Cycle number *)
        temp: ARRAY[1..5] OF REAL; (* Array of temperatures *)
        ton1: TON; (* Timer *)
    END_VAR
    
    ton1(IN := NOT ton1.Q, PT := T#1m);
    
    IF ton1.Q THEN
        temp[i] := tempsensor;
        IF i >= 5 THEN i := 1 ELSE i := i + 1 END_IF;
    END_IF;
    

    【讨论】:

    • 它不起作用,它等待一分钟,但一分钟延迟后它会立即填充所有数组位置。在我的情况下,我需要做的任务是在一分钟延迟后将值存储在不同的数组位置 [0 到 5]。因此,一分钟后,它应该将值存储在位置“0”,然后在一分钟后存储在位置“1”,依此类推。
    • 我已经更正了代码。你在做某种过滤器吗?如果是,则必须先初始化数组。
    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多