Просмотр полной версии : Добавление выходных переменных в коде ST
Здравствуйте! Мне очень необходимо использовать VAR_OUTPUT в ST
Cуть: У меня четыре насоса,если рабочий насос ушел в аварию то включить резервный насос. Блоками я пока не могу сделать или получится паутина из блоков
Кодом написать оказывается легче, а блоками надо сидеть долго, если это вообще возможно, слишком много будет ИЛИ И НЕ и т.п.
Как мне реализовать эту функцию пока не понимаю.
ТЗ:
4 входа
авария насоса
включение насоса
выключение насоса
резервирование насоса
и таких пачек входов на четыре насоса
4 выхода
насос 1 вкл/выкл
насос 2 вкл/выкл
насос 3 вкл/выкл
насос 4 вкл/выкл
вкл/выкл - это кнопки Старт/Стоп?
резервирование - это "не использовать"?
Возьмите этот пример и доработайте под себя.
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
И, проще сделать на том языке, который знаешь!
Для квадратикофилов.
Ну, внезапно, т.з чуть поменяется :
1.Завтра станция может увеличится на X насосов.
2.Работать должно свободно задаваемое оператором кол-во насосов. Например - 2.
3.Каждый насос может отвалится в любой момент по своей аварии.
4.Оператор может захотеть остановить/запустить любой насос в любой момент, но п.2 должен соблюдатся.
Валенок в этом плане был прекрасный макрос от AI! на 8 насосов или чего угодно. Количество задавалось маской на одном входе. Так же маской можно было вывести из работы устройство на обслуживании и т.д.
Все давно придумано. Правда есть там нюанс с автоматическим расчетом времени наработки, и он не всегда нужен.
был прекрасный макрос
А что с ним стало ?
Валенок да ничего, наверняка где-то в темах о макросах остался, единственное, из-за наличия линий обратной связи в нем, его поведение в текущих версиях ОЛ под вопросом, правильно будет работать или нет, неизвестно.
Я на ОЛ уже положил давно, использую какую-то старую версию, потому что все новое, спасибо Овену постоянно глючит. Устал эти инсталлы скачивать... Программеры кривопопые....
хотел далее подтянуть что этому макросу видимо нужно еще внешний обвес пилить, не всякий оператор знает смысл местного слова "маска" (да и ненужно) а с учетом этого и слов про наработки получается каша из топора.
Еще и искать этот макрос нужно.
А пара циклов в st снимает ограничения на количество в принципе, и их не парят версии/таржеты/глюки и вообще ничего.
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
Админы. Наведите порядок. ST начинает расползаться по форумам. Сделайте им свою "песочницу" пусть там играю
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot