Спасибо, буду еще раз внимательно смотреть!
Вид для печати
Доброе утро, уважаемые знатоки!
Помогите с работой SysLibTime. не могу понять как с ней работать (3 дня читаю форум и не могу допереть) как мне сделать чтоб насос включался в 9.00 и выключался в 18.00.
Если несложно напишите простейший пример (ранее выложенные примеры не могу понять). как дальше работать с SysTime64??
Код:PROGRAM PLC_PRG
VAR
uptime: SysTime64;
datetime: SystemTimeDate;
clock: CurTimeEx;
out: BOOL;
END_VAR
VAR CONSTANT
nulldt: SystemTimeDate;
END_VAR
datetime := nulldt;
clock(SystemTime := uptime, TimeDate := datetime);
out := datetime.Hour >= 9 AND datetime.Hour < 18;
оказывается все гениально и просто а я голову ломал.
огромное спасибо!
DECODE_FLOAT из Owen_FB работает в симуляции?
Эмуляция ошибок измерения. Для DECODE_FLOAT
Я себе сделал так
Вложение 10086
Для эмуляции ошибок измерения сделал функцию, вот ее код
Мне нужны не все коды ошибок, как видно из кода эмулируются толькоКод:FUNCTION Em_Err : REAL
VAR_INPUT
ai: REAL;
n_ERR: WORD:=0;
END_VAR
VAR
pt:POINTER TO DWORD;
END_VAR
pt:=ADR(ai);
CASE n_ERR OF
1: pt^:=pt^ OR 16#F1000000;
2: pt^:=(pt^ AND 16#00FFFFFF) OR 16#F6000000;
3: pt^:=(pt^ AND 16#00FFFFFF) OR 16#F7000000;
4: pt^:=(pt^ AND 16#00FFFFFF) OR 16#FA000000;
5: pt^:=(pt^ AND 16#00FFFFFF) OR 16#FB000000;
6: pt^:=(pt^ AND 16#00FFFFFF) OR 16#FC000000;
7: pt^:=(pt^ AND 16#00FFFFFF) OR 16#FD000000;
END_CASE
Em_Err:=ai;
16#F1 (*Результаты измерения не верны*)
16#F6 (*Результаты измерения не готовы*)
16#F7 (*Канал отключен в конфигурации*)
16#FA (*Сигнал на входе больше возможного*)
16#FB (*Сигнал на входе меньше возможного*)
16#FC (*Перегрузка в канале измерения тока*)
16#FD (*Обрыв датчика*)
Можно добавить и остальные.
ЗЫ. Ошибки измерения можно эмулировать как при оффлайн(эмуляция работы ПЛК) так и при онлайн подключении к ПЛК.
Т.е. даже если с физическими датчиками все в порядке. Для этого на окне визуализации сделал ввод в переменные v_Err_AI чисел, от 0 до 7.
Если v_Err_AI:=0, то ошибок нет и функция не влияет на нормальную работу ПЛК.
Мне эмуляция ошибок не нужна, просто смотрю, что на выходе DECODE_FLOAT.OUT_VALUE не меняется
Вложение 10092
Да, Вы правы!
Действительно DECODE_FLOAT не работает в эмуляции.
Давно ее не использую и уже забыл. Когда-то, и скорей всего именно по тому, что DECODE_FLOAT не работает в эмуляции сделал свой аналог.
С тех пор только этим и пользуюсь.Код:FUNCTION_BLOCK DECODE_AI
VAR_INPUT
ai: REAL; (*Датчик*)
END_VAR
VAR_OUTPUT
Rezultat: REAL; (*Результат*)
Cod_Err: BYTE; (*Код ошибки измерения*)
Err: BOOL; (*Наличее ошибки измерения*)
END_VAR
VAR
pt:POINTER TO DWORD;
bar:BYTE;
TMP:REAL:=4.0; (*Значение до ошибки*)
END_VAR
Err:=TRUE; (*Установить ошибку измерений*)
pt:=ADR(ai);
bar:=DWORD_TO_BYTE(SHR(pt^,24));
CASE bar OF
16#F1: Cod_Err:=bar-240; (*Результаты измерения не верны*)
16#F6: Cod_Err:=bar-240; (*Результаты измерения не готовы*)
16#F7: Cod_Err:=bar-240; (*Канал отключен в конфигурации*)
16#FA: Cod_Err:=bar-240; (*Сигнал на входе больше возможного*)
16#FB: Cod_Err:=bar-240; (*Сигнал на входе меньше возможного*)
16#FC: Cod_Err:=bar-240; (*Перегрузка в канале измерения тока*)
16#FD: Cod_Err:=bar-240; (*Обрыв датчика*)
ELSE
Err:=FALSE;
Cod_Err:=0; (*Нет ошибок измерений*)
END_CASE
IF NOT Err THEN TMP:=ai;
END_IF
Rezultat:=TMP;
ЗЫ. В отличии от DECODE_FLOAT, здесь нет "Значения по умолчанию". При наличии ошибок измерения на выходе Rezultat будет последнее значение полученное, до отказа датчика.
В остальном работает точно так же как и DECODE_FLOAT