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

Timer 如何使用结构化文本等待1秒?,timer,plc,st,Timer,Plc,St,我目前正在编写一个程序,当一个变量到达某个点时,连接的灯将每秒闪烁一次。我知道灯是正确连接的,我知道在开和关之间交替的程序是有效的,因为它一秒钟做了多次。我尝试添加一个等待计时器来减缓闪烁 下面是我试图添加的代码块: VAR delay : TON; Count : INT := 0; END_VAR delay(IN := TRUE, PT:= T#5S); IF NOT (delay.Q) THEN RETURN; END_IF; dela

我目前正在编写一个程序,当一个变量到达某个点时,连接的灯将每秒闪烁一次。我知道灯是正确连接的,我知道在开和关之间交替的程序是有效的,因为它一秒钟做了多次。我尝试添加一个等待计时器来减缓闪烁

下面是我试图添加的代码块:

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);
当我把它添加到我的代码中时,我得到了错误无效的时间常数

我不确定这是否太重要,但我正在使用施耐德电气的EcoStruxure机器专家来编写和执行我的代码

对于那些希望看到整个计划的人,如果有帮助的话,这里是:


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;
为了避免在这个问题上出现重复的问题,我将再次重申,我使用这个方法时遇到了一个错误。只是想事先澄清一下


如果有更好的选择,我一点也不打算用这种方式。谢谢你的帮助

如果您想每秒打开或关闭闪光灯,可以使用以下代码:

声明部分:

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
实施部分:

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);
IF bSpecialCondition
THEN
    fbFlash(tFlashTime := T#1S, bSignal => bFlashLight);
ELSE
    bFlashLight := FALSE;
END_IF
其中bFlashLight是您的硬件输出。 现在,如果您希望在特殊条件完全满足时灯光闪烁,可以执行以下操作:

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

尽量简单明了地达到你的目标。

如果你想每秒打开或关闭闪光灯,你可以使用以下代码:

声明部分:

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
实施部分:

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);
IF bSpecialCondition
THEN
    fbFlash(tFlashTime := T#1S, bSignal => bFlashLight);
ELSE
    bFlashLight := FALSE;
END_IF
其中bFlashLight是您的硬件输出。 现在,如果您希望在特殊条件完全满足时灯光闪烁,可以执行以下操作:

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

尽量简单明了地实现您的目标。

施耐德电气的EcoStruxure机器专家基于CoDeSys。所以你有几个选择

在Util库中使用BLINK 打开库管理器,搜索闪烁并双击它。现在您有了可用的闪烁块。像这样使用它

VAR
   fbBlink: BLINK;
END_VAR

fbBlink(ENABLE := TRUE, TIMELOW := T#1s, TIMEHIGH := T#300ms, OUT => bSignal);
这种方法的优点是,您可以为lite的高低状态设置不同的时间,并使用不同的信号。例如,每2秒短闪烁一次错误1,每半秒短闪烁一次错误2

按照@Filippo的建议创建自己的闪烁功能。
施耐德电气的EcoStruxure机器专家基于CoDeSys。所以你有几个选择

在Util库中使用BLINK 打开库管理器,搜索闪烁并双击它。现在您有了可用的闪烁块。像这样使用它

VAR
   fbBlink: BLINK;
END_VAR

fbBlink(ENABLE := TRUE, TIMELOW := T#1s, TIMEHIGH := T#300ms, OUT => bSignal);
这种方法的优点是,您可以为lite的高低状态设置不同的时间,并使用不同的信号。例如,每2秒短闪烁一次错误1,每半秒短闪烁一次错误2

按照@Filippo的建议创建自己的闪烁功能。
谢谢你的帮助!我正在尝试这个,在我看来一切都应该正常,但我在声明部分遇到了错误。当我试图编译它时,它出现了:MAINH:3-错误C16389:Unexpected token'FUNCTION_BLOCK=>Syntax error我查找了错误代码,它说这是一个空数组init值,对我来说没有意义。我理解你的代码应该如何工作,所以我没有改变任何一个。你知道为什么这会引起问题吗?谢谢功能块FB\U闪存。。。是一个新功能块的声明部分。你必须用我给你的声明和实现部分的代码创建一个新的功能块。然后,你可以像下面这样声明它:FB_Flash;并在MAIN的实现部分调用它,如上所示。感谢您的帮助!我正在尝试这个,在我看来一切都应该正常,但我在声明部分遇到了错误。当我试图编译它时,它出现了:MAINH:3-错误C16389:Unexpected token'FUNCTION_BLOCK=>Syntax error我查找了错误代码,它说这是一个空数组init值,对我来说没有意义。我理解你的代码应该如何工作,所以我没有改变任何一个。你知道为什么这会引起问题吗?谢谢功能块FB\U闪存。。。是一个新功能块的声明部分。你必须用我给你的声明和实现部分的代码创建一个新的功能块。然后,你可以像下面这样声明它:FB_Flash;并在MAIN的实现部分调用它,如上所示;是否有我需要下载的地方,或者我找错地方了?谢谢我在library manager中找不到闪烁选项;是否有我需要下载的地方,或者我找错地方了?谢谢