PDA

Просмотр полной версии : Выполнить действия перед выполнением основной задачи.



maskiFest
12.11.2023, 18:23
Доброго времени суток.

Есть задача: при включение ПЛК провести проверку работоспособность устройства (дождаться пока на определенных входах появятся нули) это занимает примерно 12 сек.

И тут возникает вопрос как это правильно сделать.
1. Я пытался разместить в начале основной программы TON с соответствующей задержкой, предполагая, что основная программа продолжит выполнение после отработки таймера, но это не так.

2. Я пробовал разместить TON в отдельной программе и запускать по системном событию OnStart. Но там другие проблемы возникли.

3. Запустить TON как и в первом случае и в SCADA запретить пользователю, что-либо делать, пока не прошла проверка.

Есть определенные не понимания работы ПЛК (хотя просмотрел много разной информации в том числе Петрова).

Посоветуйте как правильно решить эту проблему.

Для понимания работы ПЛК:
1. Системные события "start - Called when program start". При запуске основной программы запускается еще та,
которая указана в настройках (Допустим START_POU).
Какой механизм выполнения? Основная программа ждет пока выполниться Start_POU?

Спасибо большое!

EFrol
12.11.2023, 18:36
Лучше, конечно, задействовать вход, на котором Ваше устройство сообщит о готовности. Но если по времени, то ...


tmrStart: TON := (PT := T#12s);


tmrStart(IN := TRUE);
IF tmrStart.Q THEN
// Выполнение основной программы (ее можно вызывать как отдельное POU)
END_IF

МихаилГл
12.11.2023, 18:40
If bit=0 then
Bit:=1;
End_if
А теперь запускай таймер... По этому биту.

kondor3000
12.11.2023, 19:42
В ПЛК программа выполняется циклами, каждый цикл 1-10 мс. И не надо мешать ему работать.
Если вам надо, делается просто, ставятся условия в дополнительных программах и ФБ. Из программы PLC_PRG каждый цикл, идёт обращение к этим программам ( условие ставится в начале кода каждой программы или ФБ, где вам надо). Пока условие не выполняется, программы не работают целиком.
Кроме того в программе можно добавить действие, где будут инициализироваться нужные уставки.
Или если надо сравнивать уставки с 0 и после прочтения уставок, запускать остальные программы.

In_Da_Cher_A
13.11.2023, 07:43
при включение ПЛК провести проверку работоспособность устройства (дождаться пока на определенных входах появятся нули)и эту проверку выполняет тот же ПЛК? :D

при включение ПЛКа зачем его выключать?

(дождаться пока на определенных входах появятся нули)а каким образом при "выключенном" ПЛК на этих выходах будет 1?
хорошо, наконец-то не дождались? и что дальше?

maskiFest
13.11.2023, 22:40
Всем большое спасибо, за ответы, многое стало понятно.

maskiFest
13.11.2023, 22:43
Вы в курсе, что даже если плк находится в стопе, конфигурация с модбас слейвом уже будет работать и со скады можно что либо записать в неё

изучите как работает RETURN если еще не знаете и пока Ваш таймер в фальш, вставив ретурн остальной код ниже не будет выполняться

В том и дело, что я хочу запретить (сделать не активными кнопки в SCADA) пользователю любые действия пока не прошла проверка. Будет висеть сообщение о том, что идет проверка.

maskiFest
13.11.2023, 22:52
и эту проверку выполняет тот же ПЛК? :D
а зачем его выключать?
а каким образом при "выключенном" ПЛК на этих выходах будет 1?
хорошо, наконец-то не дождались? и что дальше?

Устройство приезжает на объект, падают питание, запускается ПЛК, и нужно в первую очередь проверить работоспособность механического прибора (привод, который включает концевики). Если прибор не исправен, вывести сообщение в SCADA, дальнейшая работа с устройством невозможна.

maskiFest
13.11.2023, 22:55
В ПЛК программа выполняется циклами, каждый цикл 1-10 мс. И не надо мешать ему работать.
Если вам надо, делается просто, ставятся условия в дополнительных программах и ФБ. Из программы PLC_PRG каждый цикл, идёт обращение к этим программам ( условие ставится в начале кода каждой программы или ФБ, где вам надо). Пока условие не выполняется, программы не работают целиком.
Кроме того в программе можно добавить действие, где будут инициализироваться нужные уставки.
Или если надо сравнивать уставки с 0 и после прочтения уставок, запускать остальные программы.

Т.е. правильнее будет, всю программу разбить на отдельные модули, а в основной делать вызов подпрограмм в зависимости от условий

kondor3000
13.11.2023, 23:31
Т.е. правильнее будет, всю программу разбить на отдельные модули, а в основной делать вызов подпрограмм в зависимости от условий

Да, так и надо, вызовы подпрограмм и ФБ. В некоторых случаях ФБ даже удобней, особенно если они однотипные
(условно написали работу 1 насоса и вызвали ФБ сколько надо раз, по условию, включаете и выключаете)
Часть программы, где нет условий или условия TRUE выполняется, часть программы где условия FALSE, пропускается.