Похоже проблема была в потере знака больше, в строке сброса таймера, было так ET=PT1, а должно быть так ET>=PT1
В третьей строке снизу, где сброс таймера и переключение Main:=Main+1;
В реальном ПР, переменная ЕТ может проскочить равенство на несколько единиц и сброс не сработает.Код:if Q and ET>=PT1 or Res then PT1:=0; In:=false; ET:=0; Main:=Main+1; end_if
Вам надо исправить в обоих проектах. Или вообще удалить кусок and ET>=PT1
И ещё, вы зачем то создали дубликаты всех функций по 2 раза, надо удалить все лишние функции.
Проект выше Запасной 3 редактируемый_2 .owle исправил.
Последний раз редактировалось kondor3000; 10.11.2025 в 18:49.
Цитата: <И ещё, вы зачем то создали дубликаты всех функций по 2 раза, надо удалить все лишние функции>. Я так понимаю, дубликаты функций создаются при копировании функционального блока ST? Как правильно переносить функциональный блок на ST из существующего проекта в новый проект, я делал все копированием функциональных блоков, или надо создавать новый функциональный блок на ST и писать в нем код, такой же как в исходном проекте? В исправленном Вами проекте куда то исчезла ротация по заданному времени работы, то есть при изменении уровня давления по входу AI насосы переключаются с ротацией, но ротационный включенный насос будет включен до тех пор, пока уровень давления не упадет до порога выключения насоса, то есть, насос будет работать и не переключается на следующий насос по заданному времени работы, равному 1 минуте. Но при снижении давления до порога выключения насоса следующим уже включиться тот насос у которого минимальная наработка. В принципе и так хорошо, что работает, но что с ротацией пока не пойму. Может быть все же действительно в реальном ПР переменная ЕТ каким то образом проскакивает равенство на несколько единиц и и ротация не сработает по заданной уставке времени ротации?
Что значит "может быть"? Однозначно проскакивает!!! К гадалке не ходи!
Поменяли насос, сбросили наработку в 0. Он работает скажем 12 часов и должен 2 часа отдохнуть и потом снова кого-то подменить.
И так до тех пор пока его наработка не сравняется со средней наработкой всей группы.
Или как?
Последний раз редактировалось EFrol; 11.11.2025 в 12:20.
Я тоже подобное всегда пытаюсь спросить, в смысле, обычно, люди "теряются" не понимая как они хотят! Короче, если это такую логику товарищ хочет, то это и есть работа с выравнивание наработки! Если не так товарищ хочет, то это не работа с выравниванием наработки и не надо морочить мозги ни себе ни людям, короче, тогда в своей голове пусть для начала разберётся!
Для чего выравнивать наработку - это отдельный вопрос, наверно его лучше и не затрагивать!
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Что то вы понаписали, не понятное.
Время задачи осталось 1 мин (можно менять),
Включение по минимальной наработки сделал только 1 раз (main=0) , потом +1 при ротации. У вас же сброс наработки при включении, какая минимальная наработка вообще может быть, если все наработки по 0.
Вот строка выбора по минимальной наработке. Допишите Q or в начале строки, будет по минимальной работать всегда.
Только при работе по 1 минуте, так не стоит делать.
Про строку сброса таймера и ротацию +1 уже написал выше.Код:if Q or main=0 and ET<=PT1 and not Q then Main:=Min3(T1_,T2_,T3_);end_if // Выбор насоса по мин. наработке через 1 мин
Последний раз редактировалось kondor3000; 11.11.2025 в 21:41.