如何使用结构化文本等待1秒钟?

问题描述 投票:0回答:1

我目前正在编写一个程序,当变量达到某个点时,连接的指示灯将每秒闪烁一次。我知道灯已正确连接,并且我知道该程序可以在开和关之间交替工作,因为它每秒执行多次。我尝试添加一个等待计时器以减慢闪烁速度。

这是我要添加的代码块:

VAR
    delay : TON;
    Count : INT := 0;
END_VAR

delay(IN := TRUE, PT:= T#5S);
    IF NOT (delay.Q) THEN
        RETURN;
    END_IF;

delay(IN := FALSE);

当将其添加到代码中时,出现错误无效时间常数。

我不确定这是否太大,但是我正在使用Schneider Electric的EcoStruxure Machine Expert编写和执行我的代码。

对于那些希望查看整个程序的人,如果有帮助,这里是:


IF (change < 70) THEN
    Light13 := FALSE;
END_IF;

IF (change >= 70) AND (change <= 90) THEN
    Light13 := TRUE;
END_IF;

IF (change > 90) THEN
    WHILE change > 90 DO
        IF (index MOD 2 = 0) THEN
            Light13 := TRUE;

        END_IF;

        IF (index MOD 2 <> 0) THEN
            Light13 := FALSE;

        END_IF;

        delay(IN := TRUE, PT:= T#5s);
            IF NOT (delay.Q) THEN
                RETURN;
            END_IF;

        delay(IN := FALSE);

        index := index + 1;

    END_WHILE;

END_IF;

为了避免对此问题再次提出问题,Timers in PLC - Structured Text,我再次重申,使用此方法时遇到错误。只是想事先澄清一下。

如果有更好的选择,我完全不会使用这种方式。感谢您的帮助!

timer plc st
1个回答
0
投票

如果您想每秒钟闪烁一次,可以使用此代码:

声明部分:

FUNCTION_BLOCK FB_Flash
VAR_INPUT
    tFlashTime : TIME;
END_VAR
VAR_OUTPUT
    bSignal : BOOL;
END_VAR
VAR
    fbTonDelay : TON;
END_VAR

实施部分:

fbTonDelay(IN := NOT fbTonDelay.q, PT:= tFlashTime);
IF fbTonDelay.Q
THEN
    bSignal := NOT bSignal;
END_IF

您可以这样称呼它:

fbFlash(tFlashTime := T#1S, bSignal => bFlashLight);

bFlashLight是您的硬件输出。现在,如果您希望在特殊条件满足时指示灯闪烁,可以执行以下操作:

IF bSpecialCondition
THEN
    fbFlash(tFlashTime := T#1S, bSignal => bFlashLight);
ELSE
    bFlashLight := FALSE;
END_IF

尝试以最大的简洁性和清晰性来实现您的目标。

© www.soinside.com 2019 - 2024. All rights reserved.