PDA

Просмотр полной версии : ПЛК110 [M02] -> Бит PowerStatus всегда TRUE



Cbug
24.08.2017, 12:34
Добрый день, коллеги!

Есть задачка: пропадание питания на короткое время (например до 1с) что приводит к сбросу всего периферийного оборудования, но не ПЛК!
Он как ни в чем не бывало продолжает работать не обнуляя никакие переменные в своей памяти, что приводит к рассогласованию и кривой работе.
Раньше я пользовался битом Power status и при его обнулении после возобновления питания отправлял ПЛК в ребут чтобы начать работу заново.
Но вот в ПЛК110(М02) с прошивкой 0.3.67 этот бит всегда ON и понять была ли просадка по питанию невозможно!

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

Rednaxel
11.09.2020, 09:25
Есть задачка: пропадание питания на короткое время.....

Похожая задача, только немного наоборот: нужно при ПОЯВЛЕНИИ питания выполнить определенные действия (проверки) в программе.
При этом пропало оно на несколько сек, или его не было неделю - без разницы.
На худой конец меня устроит и событие пропадания питания, или загрузка и начало исполнения программы.
Бит Power status в статистике что-то не помогает :(

Короче присоединяюсь к вопросу: как подобные события отследить?

ПЛК 110-30 [M2]
Binary VERSION 1.0.04

Sergey666
11.09.2020, 12:49
Реле контроля питания на 220 VAC и сигнал на дискретный вход вам в помощ.

Rednaxel
11.09.2020, 13:44
Реле контроля питания на 220 VAC и сигнал на дискретный вход вам в помощ.

Все гениальное просто ;) Вариант вполне рабочий, благодарю!

Хотя программно сделать конечно несколько проще - не нужно искать реле и переделывать схему... Может еще какие есть идеи?

Ollema
11.09.2020, 20:12
Слать в ребут при пропадании датчиков.

Rednaxel
11.09.2020, 20:51
Слать в ребут при пропадании датчиков.

Датчики могут пропасть по причине кончины БП, например, или сам датчик вышел из строя. Так себе идея, ИМХО.

Ollema
12.09.2020, 07:34
Можно считать количество ребутов и после, скажем двух, выводить аварию.

Филоненко Владислав
12.09.2020, 17:21
Бит Power оставлен в модуле статистики по соображениям совместимости, но в линейке M02 нет физической возможности ему становится false, т.к. нет батареи для питания ПЛК при отсутствии внешнего питания...

Rednaxel
12.09.2020, 18:26
Бит Power оставлен в модуле статистики по соображениям совместимости, но в линейке M02 нет физической возможности...
Благодарю за разъяснение. Стало окончательно понятно, что те пару секунд, которые контроллер работает после отключения фазы вызваны инерцией БП и отловить событие исчезновения питания не получится, но... Это ведь не самоцели и задача в общем-то была в том, что нужно при включении после отключения выполнить определенные действия. Решение Sergey666 просто и гениально, но неплохо бы также иметь в арсенале чисто программный вариант, поэтому позвольте перефразировать вопрос следующим образом:

Как отловить событие запуска (начала выполнения) программы?

capzap
12.09.2020, 18:53
Решение Sergey666 просто и гениально, но неплохо бы также иметь в арсенале чисто программный вариант, поэтому позвольте перефразировать вопрос следующим образом:

Как отловить событие запуска (начала выполнения) программы?
От банального
IF NOT flag THEN
flag := TRUE;
(* некие действия при запуске *)
END_IF;


до прочтения документации https://ftp.owen.ru/CoDeSys23/06_Documentation/Cds23_Manual_v2.8.pdf#%5B%7B%22num%22%3A1346%2C%22 gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C0%2 C227.27138%2C0%5D

Rednaxel
13.09.2020, 00:03
От банального
IF NOT flag THEN
flag := TRUE;
(* некие действия при запуске *)
END_IF;

Действительно банально, и даже обидно: "Почему я сам этого не увидел?". Вот только судя по тому, что только никто здесь до сих пор этого не предложил, самые простые и эффективные решения требуют прокачанного мышления профи ;)

В итоге создал и протестировал следующий ФБ:
FUNCTION_BLOCK FD (*Проверка условия и обнаружение сбоя*)
VAR_INPUT
In_cond:BOOL; (*Входящее условие (должно быть RETAIN)*)
Rst:BOOL; (*Если нужно сбросить ошибку*)
END_VAR
VAR_OUTPUT
Ouch:BOOL; (*Ой, обнаружен сбой!*)
Start_fl:BOOL; (*Флаг запуска программы*)
END_VAR
VAR
END_VAR
=======================================
IF NOT Start_fl THEN Start_fl:=TRUE;
IF In_cond THEN Ouch:=TRUE; (*Сигнал об ошибке*)
END_IF;
END_IF;

IF Ouch AND Rst THEN Ouch:=FALSE; (*Сброс ошибки*)
END_IF;

Правда, получается что задачу ТС это все равно не решает, т.к. при кратковременном (меньше 2 сек.) пропадании фазы ПЛК реально не выключается. Ему остается только решение Sergey666.

Тема закрыта, благодарю за помощь!

Sergey666
16.09.2020, 08:24
Вспомнил для чего это (подача на дискретный вход сигнала от реле контроля напряжения) понадобилось на ПЛК110-30М02.
Получается при отключении питания связка ПЛК110-32М02 и панель Weintek еще несколько секунд работают, НО !!! дискретные входы у ПЛК обрубаются сразу :confused: , а там сигналы Н.З типа кнопка Аварийный стоп, аварийные доп контакты автоматов и пр. по которым формируются аварии (битовые флаги, упакованные в WORD) и панель успевала их зафиксировать.
В результате при каждом выключении питания формируется куча ложных аварийных сообщений.
Мелкие косяки в схемотехнике однако...

Sergey666
17.09.2020, 08:08
Почему косяки ? Я вот всё в логи сливаю, с метками времени после легче выводы сделать.
"Лишних" аварий не бывает. Именно масса практически одновременных аварий является дополнительным подтверждающим признаком что помогает когда объясняешь что произошло.

Косяк потому-что часть устройства работает еще, а часть нет, в принципе можно сказать -типо оно так и должно быть, но у сименс 1200, у модикон М240 такого эффекта нет, при аналогичной схеме подключения ПЛК.
А ложные аварии именно ложные, а не "лишние", т.к не было нажатия кн. аварийный стоп и прочих, было просто штатное отключение питания.