0

作为 PLC 编程的新手,我正在为 PLC 中的倒数计时器编程而苦苦挣扎。我想添加一个 90 天的倒数计时器,一旦按下 HMI 上的按钮,它将再次重置为 90 天。倒计时时间应显示在 HMI 显示屏上。没有连接 IO,只有倒数计时器。

4

1 回答 1

1

你的问题在我看来太宽泛了。你试过自己解决吗?您使用的 PLC 环境是什么?

这是开始的东西,也许?

  1. 按下按钮时,将当前时间戳保存到变量并清除重置请求
  2. 每个 PLC 周期:计算与保存的变量和当前时间戳的差异。将差值保存到变量并显示在 HMI 中。
  3. 如果差异 > 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 回答