Не получаеться выделить из библиотеки OSCATBasic блок "ONTIME", ругается на переменную. Подскажите, что делать?
Вид для печати
Не получаеться выделить из библиотеки OSCATBasic блок "ONTIME", ругается на переменную. Подскажите, что делать?
Добавить эту переменную.
Для работы блока ONTIME нужна функция T_PLC_MS из этой же библиотеки. Или исправить одну сточку в коде ФБ
Код:FUNCTION_BLOCK ONTIME
VAR_INPUT
IN : BOOL;
RST : BOOL;
END_VAR
VAR_IN_OUT
SECONDS : UDINT;
CYCLES : UDINT;
END_VAR
VAR
tx: DWORD;
last : DWORD;
edge : BOOL;
init: BOOL;
ms: DWORD;
END_VAR
(* read system time *)
tx := TIME_TO_DWORD(TIME());
(* make sure the first cycle works correctly *)
IF NOT init THEN
init := TRUE;
last := tx;
ms := 0;
END_IF;
IF RST THEN
SECONDS := 0;
CYCLES := 0;
last := tx;
ms := 0;
ELSIF IN THEN
(* add the current milliseconds *)
ms := (tx - last) + ms;
IF ms >= 1000 THEN
seconds := seconds + 1;
ms := ms - 1000;
END_IF;
cycles := cycles + BOOL_TO_UINT(NOT edge);
END_IF;
last := tx;
edge := in;
Спасибо, понял.
Нужна помощь: необходимо отследить время с момента выключения ПЛК160 до его включения. (* Не выключать ПЛК по ряду причин нельзя *).
Время простоя ПЛК (Diff: TIME) будет с дискретностью 1 секундаКод:PROGRAM PLC_PRG
VAR
Init: BOOL;
Diff: TIME; (*Время простоя ПЛК*)
now: DT; (*Текущие дата и время*)
END_VAR
VAR RETAIN
old: DT; (*Дата и время в момент откл ПЛК*)
END_VAR
now:=curDT();
IF NOT Init THEN (*Если первый цикл ПЛК*)
Diff:=now-old; (*Время простоя ПЛК*)
Init:=TRUE;
END_IF
old:=now;
Функцию curDT()
"слепил" из OSCAT-овских SET_DT() и SET_DATE() http://www.owen.ru/forum/showthread....l=1#post161139Код:
Используется стандартная SysLibTime.
Только часы ПЛК160 в выключенном состоянии сбрасываются через 5 суток и по истечение этого периода, время простоя ПЛК будет не корректным.