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中找不到闪烁选项;是否有我需要下载的地方,或者我找错地方了?谢谢