Счетчик времени и числа в одном?

Я хочу проверить , как долго двигатель работает с момента последней проверки и сколько раз он запускался с тех пор.

      #xSekundenzaehler := "Clock_1Hz";


REGION Allgemein
  #Betriebszeit_Anlage(CU:="eHauptschuetz" AND #xSekundenzaehler,
                       R:="Lebensdauer".Allgemein.xResetBetriebszeit,
                       PV:=0,
                       CV=>#rSecondsAnlage);
  
  "Lebensdauer".Allgemein.rLaufzeitAnlage := #rSecondsAnlage / 3600;
END_REGION

Это код, который я использовал. Нужно ли мне снова использовать другой «CTU» или есть более разумный способ сделать это в уже существующем, о котором я не знаю?

1 ответ

Обычно хранение важных значений в CTU не рекомендуется, поскольку вы не можете контролировать, может ли TiaPortal восстановить экземпляр CTU.

Предпочтительно создать счетчик самостоятельно, чтобы его значение хранилось в энергонезависимой переменной базы данных:

      "R_TRIG_1Hz"(CLK := "Clock_1Hz");
// Condition to count up running time
IF "eHauptschuetz" THEN
    // Only at rising edges of seconds
    IF "R_TRIG_1Hz".Q THEN
        "DBZeit".LebensdauerSeconds := "DBZeit".LebensdauerSeconds + 1;
    END_IF;
END_IF;

// Reset prevails over increment
IF #xReset THEN
    #xReset := false;
    "DBZeit".LebensdauerSeconds := 0;
END_IF;

// Hour total
"DBZeit".LebensdauerHours := "DBZeit".LebensdauerSeconds / 3600;

// Hour total with a decimal place
"DBZeit".LebensdauerDeciHours := "DBZeit".LebensdauerSeconds / 360;

Это определение БД

Обратите внимание, что остаточными являются только секунды, так как часы и децичасы рассчитываются для каждого цикла.

Было бы лучше хранить часы и децичасы в другой БД, поэтому эта посвящена остаточным значениям. Когда вы изменяете переменные БД, их значения сбрасываются до начальных значений. Пожалуйста, не забудьте сделать снимок и скопировать их в начальные значения перед любыми изменениями.

Другие вопросы по тегам