PDA

Просмотр полной версии : Добавление выходных переменных в коде ST



Илья563
05.06.2022, 21:12
Здравствуйте! Мне очень необходимо использовать VAR_OUTPUT в ST
Cуть: У меня четыре насоса,если рабочий насос ушел в аварию то включить резервный насос. Блоками я пока не могу сделать или получится паутина из блоков
Кодом написать оказывается легче, а блоками надо сидеть долго, если это вообще возможно, слишком много будет ИЛИ И НЕ и т.п.
Как мне реализовать эту функцию пока не понимаю.

ТЗ:
4 входа

авария насоса
включение насоса
выключение насоса
резервирование насоса

и таких пачек входов на четыре насоса

4 выхода
насос 1 вкл/выкл
насос 2 вкл/выкл
насос 3 вкл/выкл
насос 4 вкл/выкл

EFrol
05.06.2022, 22:17
вкл/выкл - это кнопки Старт/Стоп?
резервирование - это "не использовать"?

Возьмите этот пример и доработайте под себя.
61085



function Pump: udint;
var_input
Fault1 : bool;
Enable1: bool;

Fault2 : bool;
Enable2: bool;

Fault3 : bool;
Enable3: bool;

Fault4 : bool;
Enable4: bool;
end_var

var

end_var

Pump := 0;
if Pump = 0 and Enable1 and Fault1 = false then
Pump := 1;
end_if
if Pump = 0 and Enable2 and Fault2 = false then
Pump := 2;
end_if
if Pump = 0 and Enable3 and Fault3 = false then
Pump := 3;
end_if
if Pump = 0 and Enable4 and Fault4 = false then
Pump := 4;
end_if

end_function


Хотя можно и без ST.

kondor3000
05.06.2022, 23:53
Здравствуйте! Мне очень необходимо использовать VAR_OUTPUT в ST
Cуть: У меня четыре насоса,

Когда пишите автомат состояний на ST, надо выход подавать на вход, через задержку. Тогда функция каждый цикл знает на каком этапе вы находитесь.
А выход раскладывать для управления насосами. 61088

Сергей0308
06.06.2022, 00:11
Здравствуйте! Мне очень необходимо использовать VAR_OUTPUT в ST
Cуть: У меня четыре насоса,если рабочий насос ушел в аварию то включить резервный насос. Блоками я пока не могу сделать или получится паутина из блоков
Кодом написать оказывается легче, а блоками надо сидеть долго, если это вообще возможно, слишком много будет ИЛИ И НЕ и т.п.
Как мне реализовать эту функцию пока не понимаю.

ТЗ:
4 входа

авария насоса
включение насоса
выключение насоса
резервирование насоса

и таких пачек входов на четыре насоса

4 выхода
насос 1 вкл/выкл
насос 2 вкл/выкл
насос 3 вкл/выкл
насос 4 вкл/выкл

Может вам и ротация не помешает, короче здесь подобное обсуждали:

https://owen.ru/forum/showthread.php?t=12691&page=41

И, проще сделать на том языке, который знаешь!

Валенок
06.06.2022, 01:08
Для квадратикофилов.
Ну, внезапно, т.з чуть поменяется :
1.Завтра станция может увеличится на X насосов.
2.Работать должно свободно задаваемое оператором кол-во насосов. Например - 2.
3.Каждый насос может отвалится в любой момент по своей аварии.
4.Оператор может захотеть остановить/запустить любой насос в любой момент, но п.2 должен соблюдатся.

melky
06.06.2022, 08:58
Валенок в этом плане был прекрасный макрос от AI! на 8 насосов или чего угодно. Количество задавалось маской на одном входе. Так же маской можно было вывести из работы устройство на обслуживании и т.д.
Все давно придумано. Правда есть там нюанс с автоматическим расчетом времени наработки, и он не всегда нужен.

Валенок
06.06.2022, 23:21
был прекрасный макрос
А что с ним стало ?

melky
07.06.2022, 08:28
Валенок да ничего, наверняка где-то в темах о макросах остался, единственное, из-за наличия линий обратной связи в нем, его поведение в текущих версиях ОЛ под вопросом, правильно будет работать или нет, неизвестно.
Я на ОЛ уже положил давно, использую какую-то старую версию, потому что все новое, спасибо Овену постоянно глючит. Устал эти инсталлы скачивать... Программеры кривопопые....

Валенок
07.06.2022, 17:15
хотел далее подтянуть что этому макросу видимо нужно еще внешний обвес пилить, не всякий оператор знает смысл местного слова "маска" (да и ненужно) а с учетом этого и слов про наработки получается каша из топора.
Еще и искать этот макрос нужно.
А пара циклов в st снимает ограничения на количество в принципе, и их не парят версии/таржеты/глюки и вообще ничего.

Илья563
10.06.2022, 15:00
ERROR_COUNT := 0;
IF pump_run THEN
IF pump1mode AND NOT pump1err THEN
(*Запуск насоса 1*)
END_IF

IF pump1mode AND pump1err THEN
ERROR_COUNT := ERROR_COUNT + 1
(*Остановка насоса 1*)
END_IF

IF pump2mode AND NOT pump2err THEN
(*Запуск насоса 2*)
END_IF

IF pump2mode AND pump2err THEN
ERROR_COUNT := ERROR_COUNT + 1
(*Остановка насоса 2*)
END_IF


(*Описание проверок других насосов*)


IF NOT pump1mode AND NOT pump1err AND ERROR_COUNT > 0 THEN
(*Запуск насоса 1 из резерва*)

ERROR_COUNT := ERROR_COUNT - 1;
END_IF

IF NOT pump2mode AND NOT pump2err AND ERROR_COUNT > 0 THEN
(*Запуск насоса 2 из резерва*)

ERROR_COUNT := ERROR_COUNT - 1;
END_IF

IF NOT pump3mode AND NOT pump3err AND ERROR_COUNT > 0 THEN
(*Запуск насоса 3 из резерва*)

ERROR_COUNT := ERROR_COUNT - 1;
END_IF

IF NOT pump4mode AND NOT pump4err AND ERROR_COUNT > 0 THEN
(*Запуск насоса 4 из резерва*)

ERROR_COUNT := ERROR_COUNT - 1;
END_IF




END_IF

игорь68
10.06.2022, 16:25
Админы. Наведите порядок. ST начинает расползаться по форумам. Сделайте им свою "песочницу" пусть там играю