Доброе утро, уважаемые знатоки!
Помогите с работой 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 работает в симуляции?
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Эмуляция ошибок измерения. Для 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, то ошибок нет и функция не влияет на нормальную работу ПЛК.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Мне эмуляция ошибок не нужна, просто смотрю, что на выходе 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
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg