Codesys 中是否有像 arduino millis() 中那样的计时器函数或变量?
Is there a timer function or variable in Codesys as in arduino millis()?
Codesys 中是否有像 arduino millis() 中那样的计时器函数或变量?
如果没有,我该如何创建计时器?
谢谢!
你可以自己建一个。
举个例子:
声明部分:
FUNCTION_BLOCK FB_Millis
VAR_INPUT
timer : TON := (IN:=TRUE,PT:=maxTime);
END_VAR
VAR_OUTPUT
tElapsedTime : TIME;
END_VAR
VAR
maxTime : TIME := UDINT_TO_TIME(4294967295);
//timer : TON := (IN:=TRUE,PT:=maxTime);
END_VAR
实现部分:
timer();
tElapsedTime := timer.ET;
你这样循环调用它:
fbMillis();
并像这样检索结果:
tElapasedTime := fbMillis.tElapsedTime;
FB_Millis 在 49 天 17 小时 2 分 47 秒 295 毫秒后溢出。
如果您想将 fbMillis.tElapsedTime 的经过时间与另一个变量进行比较,您可以这样做:
IF fbMillis.tElapsedTime < tAnotherTimeVar
THEN
; //Do something
ELSE
; //Do something else
END_IF
如果您只是想要一个简单的计时器,则需要 TON 功能块:
声明部分:
//2 seconds timer
mySimpleTimer : TON := (PT:=T#2s);
实现部分:
mySimpleTimer();
// your code here
//Start timer
mySimpleTimer.IN := TRUE;
//Check if timer has reached desired time
IF mySimpleTime.Q
THEN
//Do something here
mySimpleTimer.IN := FALSE;
END_IF
在 CoDeSys 函数中 TIME()
return 从 PLC 启动开始的时间(以毫秒为单位)。如果您想在事件上开始计数,您可以使用触发器来创建时间点。
VAR
tStarted, tElapsed : TIME;
END_VAR
fbR_TRIG(CLK := xStart);
IF (fbR_TRIG.Q) THEN
tStarted := TIME();
END_IF;
tElapsed := TIME() - tStarted;
接下来是重置计时器、暂停计数等休息
Codesys 中是否有像 arduino millis() 中那样的计时器函数或变量?
如果没有,我该如何创建计时器?
谢谢!
你可以自己建一个。 举个例子:
声明部分:
FUNCTION_BLOCK FB_Millis
VAR_INPUT
timer : TON := (IN:=TRUE,PT:=maxTime);
END_VAR
VAR_OUTPUT
tElapsedTime : TIME;
END_VAR
VAR
maxTime : TIME := UDINT_TO_TIME(4294967295);
//timer : TON := (IN:=TRUE,PT:=maxTime);
END_VAR
实现部分:
timer();
tElapsedTime := timer.ET;
你这样循环调用它:
fbMillis();
并像这样检索结果:
tElapasedTime := fbMillis.tElapsedTime;
FB_Millis 在 49 天 17 小时 2 分 47 秒 295 毫秒后溢出。
如果您想将 fbMillis.tElapsedTime 的经过时间与另一个变量进行比较,您可以这样做:
IF fbMillis.tElapsedTime < tAnotherTimeVar
THEN
; //Do something
ELSE
; //Do something else
END_IF
如果您只是想要一个简单的计时器,则需要 TON 功能块:
声明部分:
//2 seconds timer
mySimpleTimer : TON := (PT:=T#2s);
实现部分:
mySimpleTimer();
// your code here
//Start timer
mySimpleTimer.IN := TRUE;
//Check if timer has reached desired time
IF mySimpleTime.Q
THEN
//Do something here
mySimpleTimer.IN := FALSE;
END_IF
在 CoDeSys 函数中 TIME()
return 从 PLC 启动开始的时间(以毫秒为单位)。如果您想在事件上开始计数,您可以使用触发器来创建时间点。
VAR
tStarted, tElapsed : TIME;
END_VAR
fbR_TRIG(CLK := xStart);
IF (fbR_TRIG.Q) THEN
tStarted := TIME();
END_IF;
tElapsed := TIME() - tStarted;
接下来是重置计时器、暂停计数等休息