作为 PLC 编程的新手,我正在为 PLC 中的倒数计时器编程而苦苦挣扎。我想添加一个 90 天的倒数计时器,一旦按下 HMI 上的按钮,它将再次重置为 90 天。倒计时时间应显示在 HMI 显示屏上。没有连接 IO,只有倒数计时器。
问问题
852 次
1 回答
1
你的问题在我看来太宽泛了。你试过自己解决吗?您使用的 PLC 环境是什么?
这是开始的东西,也许?
- 按下按钮时,将当前时间戳保存到变量并清除重置请求
- 每个 PLC 周期:计算与保存的变量和当前时间戳的差异。将差值保存到变量并显示在 HMI 中。
- 如果差异 > 90 天,设置重置请求并转到步骤 1
编辑:这是 Infoteam OpenPCS 的工作程序。我以前从未使用过它,但出于好奇不得不对其进行测试。我设法获得了当前的日期时间,但无法转换DWORD
为计算,所以我使用了这种方法(谢尔盖,你知道怎么做吗?我尝试使用转换它POINTER
但无法取消引用它.. ) 我没有测试过更长的延迟,所以请注意它可能不是 100% 工作的。
它计算 60 秒的间隔(=分钟),当经过足够的分钟时,计时器停止。请注意,如果断电等不影响分钟数,则应将其保存到永久内存中。
VAR
RunTimer : BOOL;
MinutesElapsed : UDINT;
StartTime : TIME;
TimeDifference : TIME;
END_VAR
IF RunTimer THEN
IF StartTime = t#0s THEN
StartTime := GetTime(StartTime);
END_IF;
TimeDifference := GetTime(StartTime);
(*IF one minute has elapsed*)
IF TimeDifference >= t#1m THEN
MinutesElapsed := MinutesElapsed + 1;
(*Reset StartTime to start minute over*)
StartTime := t#0s;
END_IF;
(*IF enough minutes has passed, stop (90*24*60 = 90 days)*)
IF MinutesElapsed >= (90 * 24 * 60) THEN
RunTimer := false;
StartTime := t#0s;
TimeDifference := t#0s;
MinutesElapsed := 0;
END_IF;
else
(*Time is not running*)
StartTime := t#0s;
TimeDifference := t#0s;
MinutesElapsed := 0;
(*Here we would set RunTimer to TRUE when button is pressed to start time again*)
END_IF;
于 2020-03-02T11:40:06.900 回答