如arduino millis()一样,Codesys中是否存在计时器函数或变量?

时间:2019-12-19 09:03:51

标签: codesys

如arduino millis()一样,Codesys中是否存在计时器函数或变量?

如果没有,如何创建计时器?

谢谢!

2 个答案:

答案 0 :(得分:1)

在CoDeSys函数TIME()中,返回自PLC启动以来的时间(以毫秒为单位)。如果要开始对事件进行计数,则可以使用触发器来创建时间点。

VAR
   tStarted, tElapsed : TIME;
END_VAR

fbR_TRIG(CLK := xStart);
IF (fbR_TRIG.Q) THEN
    tStarted := TIME();
END_IF;

tElapsed := TIME() - tStarted;

然后休息,例如重置计时器,暂停计数等。

答案 1 :(得分:0)

您可以自己建立一个。 这里是一个例子:

声明部分:

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