Счетчик времени и числа в одном?
Я хочу проверить , как долго двигатель работает с момента последней проверки и сколько раз он запускался с тех пор.
#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;
Это определение БД
Обратите внимание, что остаточными являются только секунды, так как часы и децичасы рассчитываются для каждого цикла.
Было бы лучше хранить часы и децичасы в другой БД, поэтому эта посвящена остаточным значениям. Когда вы изменяете переменные БД, их значения сбрасываются до начальных значений. Пожалуйста, не забудьте сделать снимок и скопировать их в начальные значения перед любыми изменениями.