首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PLC结构文本中的倒计时器

PLC结构文本中的倒计时器
EN

Stack Overflow用户
提问于 2020-03-02 09:07:32
回答 1查看 1.2K关注 0票数 0

作为PLC程序设计中的新技术,我一直在为PLC中倒计时程序的编程而奋斗。我想添加一个90天的倒计时计时器,一旦按下人机界面上的按钮,它将被重置为90天。倒计时时间应显示在人机界面显示器上。没有IO连接,只有倒数计时器。

EN

回答 1

Stack Overflow用户

发布于 2020-03-02 11:40:06

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

也许这里有什么可以开始的?

当按下

  1. 按钮时,将当前时间戳保存到一个变量中,并清除
  2. 每一个PLC周期的重置请求:计算与保存的变量和当前时间戳的差异。将差异保存为变量并显示在HMI.
  3. 中,如果差异> 90天,设置重置请求并转到步骤1

编辑:这里是Infoteam OpenPCS的工作程序。我以前从未使用过它,但出于好奇,我不得不测试它。我设法获得了当前的日期时间,但不可能转换为DWORD进行计算,所以我使用了这种方法(Sergey,您知道怎么做吗?)我试着用POINTER转换它,但是不能取消它的引用。)我没有测试它的更长的延迟,所以请注意,它可能不是100%的工作。

它计算60秒间隔(=分钟),当足够多的分钟被传递时,计时器停止。注意,如果断电等不应影响内存,则应将分钟保存到持久内存中。

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60485520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档