PDA

Просмотр полной версии : новичок



mma@zit21.ru
27.01.2025, 14:35
Здравствуйте! Я пытаюсь реализовать ротацию двух кондиционеров. На данный момент схема настроена так, что кондиционеры включаются и выключаются поочередно.

Однако мне нужно сделать так, чтобы после отключения обоих кондиционеров первым включался тот, который до этого был неактивным.

Могли бы вы подсказать, как лучше реализовать такую логику? Буду благодарен за помощь!81596

melky
27.01.2025, 15:03
у вас там есть переменная, определяющая текущий? вот сделайте такую энергонезависимой, а при включении просто меняйте.
з.ы. не смотрел прогу, ставить очередные версии ОЛ просто задолбало.

У меня в программе ротации была переменная, позволяющая переключать по команде вне времени. Если у вас есть что-то похожее, ее так же можно активировать при включении ПР.

mma@zit21.ru
27.01.2025, 15:08
У меня есть цикл, выполняющий 9 итераций. В течение первых четырёх (или равных четырём) итераций работает один кондиционер, после чего включается второй. Счётчик итераций хранится в переменной кон.

Можете, пожалуйста, объяснить, как её правильно использовать энергонезависимую переменную?

melky
27.01.2025, 15:10
Ну вот вместо вашей константы 4 сделайте переменную и при старте ее делайте или больше 4 или =1 (0), чтобы ваши болше-меньше сработали, и после смены Активного устройства возвращайте опять к =4
Это надо сделать один раз при включении ПР

Что у вас там делает BLINK с 1секундой? 1 сек для теста? должны быть часы или что?
Примените счетчик универсальный, в который можно по импульсу записывать значение. и ваша переменная кон при старте поменяется.

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

А похоже что у вас программа всегда будет начинать с какого-то одного, а не с того, который работал.

mma@zit21.ru
27.01.2025, 15:18
1 сек для теста, нужно переделать программу полностью?

kondor3000
27.01.2025, 15:43
У меня есть цикл, выполняющий 9 итераций. В течение первых четырёх (или равных четырём) итераций работает один кондиционер, после чего включается второй. Счётчик итераций хранится в переменной кон.

Можете, пожалуйста, объяснить, как её правильно использовать энергонезависимую переменную?

На счетчике надо поставить сохранение состояния -Да, Вот скрин 81598
а чтобы не было жёлтых линий, можно заменить на Линию задержки сверху.

Для энергонезависимой переменной ставится галка - энергонезависимость, только программа при включении не должна её перезаписывать.

mma@zit21.ru
27.01.2025, 15:55
На счетчике надо поставить сохранение состояния -Да, Вот скрин 81598
а чтобы не было жёлтых линий, можно заменить на Линию задержки сверху.

Для энергонезависимой переменной ставится галка - энергонезависимость, только программа при включении не должна её перезаписывать.

Спасибо, сделал линию задержки. Моя задача сделать так, чтобы после выключения обоих кондиционеров, а затем их включения срабатывал тот, который до этого был неактивным. Как это можно реализовать?..

melky
27.01.2025, 15:57
mma@zit21.ru ну зачем полностью. Для начала внимательно поискать место небольших изменений для получения желаемого результата.
Вот когда не найдете, тогда зная, что хотите уже переписывать.


Спасибо, сделал линию задержки. Моя задача сделать так, чтобы после выключения обоих кондиционеров, а затем их включения срабатывал тот, который до этого был неактивным. Как это можно реализовать?..

1. первым делом сохранять активное устройство, чтобы при включении именно оно срабатывало.
Сейчас у вас скорее всего будет начинаться с 1-ого всегда. Ну как в эмуляции у вас же всегда с одного начинается.

2. Ну и без железки на чистой эмуляции наверное не проверить, что если будет активным второе, то запускать второе устройство. Или перед нажатием "Старт" в какой-то переменной вводить, что активное 2-ое и потом стартовать программу в эмуляции.
Вот, когда добьетесь что запускается всегда активное устройство. То найти место как при старте сразу сделать переключение.

kondor3000
27.01.2025, 15:58
Спасибо, сделал линию задержки. Моя задача сделать так, чтобы после выключения обоих кондиционеров, а затем их включения срабатывал тот, который до этого был неактивным. Как это можно реализовать?..

Запомнить состояние счётчика например 3 , и при включении записать в счётчик 5. Не забудьте, что у вас всего 9 или 10 максимум.

mma@zit21.ru
27.01.2025, 16:01
Запомнить состояние счётчика например 4 , и при включении записать в счётчик 5. Не забудьте, что у вас всего 9 или 10 максимум.

Получается переменную кон нужно запомнить? И как сделать так чтобы при включении записывалось. Я вообще пытался сделать так: запускаешь программу и переменная кон всегда делалась +5, но у меня не вышло(

melky
27.01.2025, 16:04
Как инициализировать переменные при старте масса примеров была.

mma@zit21.ru
27.01.2025, 16:04
mma@zit21.ru ну зачем полностью. Для начала внимательно поискать место небольших изменений для получения желаемого результата.
Вот когда не найдете, тогда зная, что хотите уже переписывать.



1. первым делом сохранять активное устройство, чтобы при включении именно оно срабатывало.
Сейчас у вас скорее всего будет начинаться с 1-ого всегда. Ну как в эмуляции у вас же всегда с одного начинается.

2. Ну и без железки на чистой эмуляции наверное не проверить, что если будет активным второе, то запускать второе устройство. Или перед нажатием "Старт" в какой-то переменной вводить, что активное 2-ое и потом стартовать программу в эмуляции.
Вот, когда добьетесь что запускается всегда активное устройство. То найти место как при старте сразу сделать переключение.

У меня в эмуляции начинается с того устройства на котором остановился счётчик

melky
27.01.2025, 16:07
ну дык при включение запишите в него значение + 1, вроде даже не важно, что счетчик считает до N числа, так как при N+1 он пересбросится и пойдет по кругу.
Вам нужен счетчик, в который можно писать через WriteFB. Не помню, тот что у вас на картинке позволяет или нет.

mma@zit21.ru
27.01.2025, 16:12
ну дык при включение запишите в него значение + 1, вроде даже не важно, что счетчик считает до N числа, так как при N+1 он пересбросится и пойдет по кругу.
Вам нужен счетчик, в который можно писать через WriteFB. Не помню, тот что у вас на картинке позволяет или нет.

Позволяет, только, что с ним делать? Очень сильно, извиняюсь, что туплю... Целый день уже голову ломаю как это можно реализовать.81599

mma@zit21.ru
27.01.2025, 16:15
ну дык при включение запишите в него значение + 1, вроде даже не важно, что счетчик считает до N числа, так как при N+1 он пересбросится и пойдет по кругу.
Вам нужен счетчик, в который можно писать через WriteFB. Не помню, тот что у вас на картинке позволяет или нет.

И куда нужно записать +1?

kondor3000
27.01.2025, 16:23
Получается переменную кон нужно запомнить? И как сделать так чтобы при включении записывалось. Я вообще пытался сделать так: запускаешь программу и переменная кон всегда делалась +5, но у меня не вышло(

Вот скрин, инициализация переменной, в зависимости от переменной Кон, запись в счётчик через WraiteToFb 81600
Чтобы записать в счётчик при включении, надо подать импульс на вход сброса при пуске.

melky
27.01.2025, 16:28
я правда тут не понял, что есть константы 4 и 9 ? :)
Эти значения тоже тестовые ? типа если были бы часы то 12 и 24 или как?

mma@zit21.ru
27.01.2025, 16:29
Вот скрин, инициализация переменной, в зависимости от переменной Кон, запись в счётчик через WraiteToFb 81600
Чтобы записать в счётчик при включении, надо подать импульс на вход сброса при пуске.

То есть сейчас должно работать как в моем задании? Через симуляцию невозможно проверить? Заранее спасибо!

Dimensy
27.01.2025, 16:33
Как вариант, переменная кон - энергонезависимая
81601

melky
27.01.2025, 16:38
mma@zit21.ru если вы константы зададите как переменные, то перед запуском эмуляции вы можете их ввести.

kondor3000
27.01.2025, 17:40
То есть сейчас должно работать как в моем задании? Через симуляцию невозможно проверить? Заранее спасибо!

Можете в эмуляции проверить, Кон- энергонезависимая, записать в неё можно от 0 до 4, как вы хотели при включении будет 581603

Сергей0308
28.01.2025, 04:50
Здравствуйте! Я пытаюсь реализовать ротацию двух кондиционеров. На данный момент схема настроена так, что кондиционеры включаются и выключаются поочередно.

Однако мне нужно сделать так, чтобы после отключения обоих кондиционеров первым включался тот, который до этого был неактивным.

Могли бы вы подсказать, как лучше реализовать такую логику? Буду благодарен за помощь!81596

Вам нужна ротация при сбое питания(кратковременном обесточивании ПР)? Или ротация происходит только по времени(назначенного периода ротации) и при передёргивании соответствующего входа активации автоматической ротации кондиционеров, насколько смог понять ТЗ и назначение вашего входа, в смысле, если я не правильно что-то понял - поясните!

Здесь ротацию обсуждали: https://owen.ru/forum/showthread.php?t=36564
В смысле, вам этого хватит, даже перехватит, в смысле, с большими перспективами дальнейшего развития!

mma@zit21.ru
28.01.2025, 08:01
я правда тут не понял, что есть константы 4 и 9 ? :)
Эти значения тоже тестовые ? типа если были бы часы то 12 и 24 или как?

Да, все значения тестовые

mma@zit21.ru
28.01.2025, 08:11
При первом нажатии кнопки "Авто" включается второй кондиционер.
Если кнопку "Авто" нажимают повторно (второе нажатие), то всё выключается.
Если кнопку нажимают в третий раз, то включается первый кондиционер.
Таким образом, с каждым нажатием кнопки "Авто" происходит переключение между этими состояниями:

Первое нажатие: Включить второй кондиционер.
Второе нажатие: Всё выключить.
Третье нажатие: Включить первый кондиционер.
Четвёртое нажатие: Снова включить второй кондиционер.

mma@zit21.ru
28.01.2025, 08:13
Вам нужна ротация при сбое питания(кратковременном обесточивании ПР)? Или ротация происходит только по времени(назначенного периода ротации) и при передёргивании соответствующего входа активации автоматической ротации кондиционеров, насколько смог понять ТЗ и назначение вашего входа, в смысле, если я не правильно что-то понял - поясните!

Здесь ротацию обсуждали: https://owen.ru/forum/showthread.php?t=36564
В смысле, вам этого хватит, даже перехватит, в смысле, с большими перспективами дальнейшего развития!

У нас ротация кондиционеров происходит только по заданному времени, а так же
о нажатию кнопки "Авто":

Первое нажатие — включается второй кондиционер.
Второе нажатие — всё выключается.
Третье нажатие — включается первый кондиционер.
И так далее по кругу.

mma@zit21.ru
28.01.2025, 08:34
Как вариант, переменная кон - энергонезависимая
81601

Вы просто гений! Огромное вам спасибо! ❤️ Не могли бы вы объяснить, почему это всё так работает? Очень интересно узнать

melky
28.01.2025, 08:45
mma@zit21.ru ну так энергонезависимые переменные для того, чтобы сохранить их состояние при выключении. И если в программе предусмотрено логикой стартовать сперва вычитав в логику нужные переменные, она и стартанет с того места, которое было при выключении.

Dimensy
28.01.2025, 09:19
Вы просто гений! Огромное вам спасибо! ❤️ Не могли бы вы объяснить, почему это всё так работает? Очень интересно узнать

Вот, добавил комментарии
81606

mma@zit21.ru
29.01.2025, 09:12
Вот, добавил комментарии
81606

Здравствуйте, я попробовал сделать между 3 теперь. Сейчас при включении и выключении у меня на 1 итерации меняется 1 и 2, затем только 2 и 3. Подскажите, пожалуйста, как можно это исправить?81622

kondor3000
29.01.2025, 09:18
Здравствуйте, я попробовал сделать между 3 теперь. Сейчас при включении и выключении у меня на 1 итерации меняется 1 и 2, затем только 2 и 3. Подскажите, пожалуйста, как можно это исправить?
Для 3 и более, схему надо полностью переделывать. Эта не прокатит, у булевых есть только 2 состояния.
Ссылки на 3- 4 и более вам уже давали 2 человека.

mma@zit21.ru
29.01.2025, 09:21
Для 3 и более, схему надо полностью переделывать. Эта не прокатит, у булевых есть только 2 состояния.
Ссылки на 3- 4 и более вам уже давали 2 человека.

понял, спасибо

Dimensy
29.01.2025, 21:25
Здравствуйте, я попробовал сделать между 3 теперь. Сейчас при включении и выключении у меня на 1 итерации меняется 1 и 2, затем только 2 и 3. Подскажите, пожалуйста, как можно это исправить?
Можно и три
81638
А можно так
81639
Вот только вопрос, вы ошибки кондиционеров собираетесь ловить и реагировать?

mma@zit21.ru
31.01.2025, 11:04
Можно и три
81638
А можно так
81639
Вот только вопрос, вы ошибки кондиционеров собираетесь ловить и реагировать?

Здравствуйте, спасибо большое! Нет, ошибки кондиционеров ловить не собираюсь. А как можно добавить кнопку "Мод", которая при каждом нажатии будет переключать режимы работы кондиционеров?

Режим 1 – включается только один кондиционер.
Режим 2 – работают два кондиционера.
Режим 3 – включаются все кондиционеры.

При каждом нажатии на кнопку режим будет меняться по кругу (1 → 2 → 3 → 1 и так далее). ��

Dimensy
31.01.2025, 13:58
Здравствуйте, спасибо большое! Нет, ошибки кондиционеров ловить не собираюсь. А как можно добавить кнопку "Мод", которая при каждом нажатии будет переключать режимы работы кондиционеров?

Режим 1 – включается только один кондиционер.
Режим 2 – работают два кондиционера.
Режим 3 – включаются все кондиционеры.

При каждом нажатии на кнопку режим будет меняться по кругу (1 → 2 → 3 → 1 и так далее). ��

Ну, для начала так

mma@zit21.ru
31.01.2025, 14:28
Ну, для начала так
Я сейчас сделал так, но у меня неравномерный износ кондиционеров получается. Мне нужно сделать задержку перед включением 2 и 3 кондиционера. Спасибо вам большое, я понял как работает логика. Как можно сделать задержку когда меняешь режимы, чтобы был равномерный износ кондиционеров? Подскажите, пожалуйста.

capzap
31.01.2025, 14:40
чтобы был равномерный износ кондиционеров
наверное для того чтоб они одновременно выработали свой ресурс и менять так сразу оба пришлось, для этого решаете такую задачу?

melky
31.01.2025, 14:51
Ну вообще это нормально, делать близкий износ. И причин тому несколько.
1. срок службы оборудования одинаков.
2. режим работы N+1 (N+2) и если для работы N представляется числом 15, то менять 15 а один(два) не менять после срока эксплуатации абсолютно глупо.

з.ы. есть программа ротации до 8-ми кондиционеров с настройкой N+X на ПЛК EKF с управлением по Modbus
есть старая программа для ПЛК63 - 6 кондеев так же N+X просто вкл/выкл.

Dimensy
31.01.2025, 15:12
Я сейчас сделал так, но у меня неравномерный износ кондиционеров получается. Мне нужно сделать задержку перед включением 2 и 3 кондиционера. Спасибо вам большое, я понял как работает логика. Как можно сделать задержку когда меняешь режимы, чтобы был равномерный износ кондиционеров? Подскажите, пожалуйста.

Не понял, чем вам задержка поможет. Но, вот
81678
З.Ы. Вмеcто TOF, лучше TP поставить

mma@zit21.ru
31.01.2025, 15:17
Не понял, чем вам задержка поможет. Но, вот
81678

Спасибо большое, просто узнаю, что как работает

Сергей0308
31.01.2025, 15:34
Уж очень это анекдот напоминает:

- Товарищ прапорщик, разрешите посмотреть телевизор!

- Конечно смотрите, только не включайте.

kondor3000
31.01.2025, 18:23
Спасибо большое, просто узнаю, что как работает

Вот готовые на 4 выхода (можно менять от 2 до 16), с переключением количества выходов, наработкой, переключением, ротацией по времени и по минимальной наработке.
4 насоса_Нараб_Ротация по времени_4 Уровня_7
4 насоса_Нараб_Ротация по времени_Память_7
https://owen.ru/forum/showthread.php?t=38920&page=2#13

omenemo30
02.02.2025, 13:00
Вопрос новичка
Есть проект из 1шт ПР 200 и 4 шт МВ110-хА. К МВ110-хА подключены датчики Pt 1000 и газоанализаторы 4…20 мА через резистор. ПР стоит мастером на 1 слоте 485, скорость 115200
МВ110 подключены последовательно им назначены адреса 9,17,25,33.
При подключении Овен сервера к сети из этих МВ все каналы отображают корректные данные.
В ПР 200 прописаны сетевые переменные от МВ с указанием адресов регистров и всех настроек как в МВ.
Проблема в том что в режиме отладки данные получаются некорректные.
Помогите разобраться.

1exan
02.02.2025, 13:11
...
Проблема в том что в режиме отладки данные получаются некорректные.
Помогите разобраться.

Отладка - это же подключение онлайн к работающей ПР?
Некорректные - это какие?

Сергей0308
02.02.2025, 13:20
И, как бы изначально надо понимать, что ПР не поддерживает знаковые целочисленные типы данных!
INT(DINT) у Овена, это не такой тип данных, как у всех остальных, у них свой INT, в смысле, беззнаковый!

FPavel
02.02.2025, 13:26
Вопрос новичка
Есть проект из 1шт ПР 200 и 4 шт МВ110-хА. К МВ110-хА подключены датчики Pt 1000 и газоанализаторы 4…20 мА через резистор. ПР стоит мастером на 1 слоте 485, скорость 115200
Ваш вопрос не связан с вопросом автора темы, в дальнейшем эта тема, замусоренная подобными включениями, не сможет никому помочь, хотя будет индексироваться поисковиками.

Правильнее, было бы создать новую тему и коротко но ёмко её назвать: "Некорректные данные в ПР200 от приёма из МВ110".
Сразу же в самом низу веб-страницы были бы темы с похожими названиями - прочитав которые, возможно, Вы нашли бы ответ на собственный вопрос.
Да и поиск в интернете тоже, помог бы с решением - выдав ответы из этого же форума.

Далее, нужно привести сведения о настройке связи, номерах регистров, типа данных регистров, выборе настройки порядка байт в принятых данных и характере этих принятых и эталонных данных.

Без этого, Вы предполагаете начать игру "угадай ошибку с меньшего количества слов".

kondor3000
02.02.2025, 13:43
Проблема в том что в режиме отладки данные получаются некорректные.
Помогите разобраться.
Если читаете Float, то важно правильно расставить регистры (байты). Начните в установки (снятия) галки, Старшим регистром вперёд.
А вообще, надо выкладывать скрины, что у вас некорректно показывает. Иконка вставить изображение.

mma@zit21.ru
04.02.2025, 12:35
Не понял, чем вам задержка поможет. Но, вот
81678
З.Ы. Вмеcто TOF, лучше TP поставить

Здравствуйте, я сделал так, чтобы переключались после выполнения цикла. Сейчас когда с 3 кондиционеров переключаешься на 1, то все сразу выключаются. Какую можно придумать логику, чтобы они все не выключилась...

Dimensy
04.02.2025, 14:32
Здравствуйте, я сделал так, чтобы переключались после выполнения цикла. Сейчас когда с 3 кондиционеров переключаешься на 1, то все сразу выключаются. Какую можно придумать логику, чтобы они все не выключилась...

Что-то вы тут намудрили.
Вот тут чутка поэкспериментировал

EFrol
04.02.2025, 15:32
Пытался составить внятное ТЗ. Получилось?
Итак, кнопка "Режим" переключает кол-во одновременно работающих кондиционеров, т.е. 1, 2 или 3.
По кнопке "Авто", "Режим" или по истечении паузы система должна как бы включить кондиционеры в соответствии с текущим режимом,
приоритет должен быть за кондиционерами с наименьшей наработкой.
Осталось понять как сбрасывать наработку? И в какой единице времени её накапливать?

Dimensy
04.02.2025, 19:27
Странное какое-то решение. Вот у нас работает один кондиционер, решили запустить два, так второй включится только когда придет время ротации - что это нам даст?
Я бы повесил переключение режимов на дискретные входы: если все нормально, то работает один кондиционер, не справляется - добавляем еще один, вообще плохо - запускаем все три.
Но, фиг знает, что там за ситуация у автора

Dancho
07.02.2025, 18:45
Здравствуйте, второй день в owen logic подскажите как собрать этот алгоритм " Светильник EL3 освещает территорию входа. В будни (пн-пт) EL3 включается автоматически с 20-00 до 06-00. В выходные дни работает по сигналу от датчика BK. Также светильник EL3 может быть включен и выключен вручную с помощью кнопки SB5. При отсутствии нажатия на кнопку SB5 более 5 секунд EL3 возвращается к выполнению основного алгоритма.
"

EFrol
07.02.2025, 20:10
Если я правильно понял, то.. SB5 выключает, если горел на 5 секунд и включает на 5 сек если не горел?
А ПР у Вас какой? Надеюсь с часами?

Dimensy
08.02.2025, 09:19
Здравствуйте, второй день в owen logic подскажите как собрать этот алгоритм " Светильник EL3 освещает территорию входа. В будни (пн-пт) EL3 включается автоматически с 20-00 до 06-00. В выходные дни работает по сигналу от датчика BK. Также светильник EL3 может быть включен и выключен вручную с помощью кнопки SB5. При отсутствии нажатия на кнопку SB5 более 5 секунд EL3 возвращается к выполнению основного алгоритма.
"

А пятница у нас заканчивается когда? В субботу 6:00 или в полночь?
Да, и понедельник когда начинается? В 20:00 или в полночь?

81855

Сергей0308
08.02.2025, 12:01
Здравствуйте, второй день в owen logic подскажите как собрать этот алгоритм " Светильник EL3 освещает территорию входа. В будни (пн-пт) EL3 включается автоматически с 20-00 до 06-00. В выходные дни работает по сигналу от датчика BK. Также светильник EL3 может быть включен и выключен вручную с помощью кнопки SB5. При отсутствии нажатия на кнопку SB5 более 5 секунд EL3 возвращается к выполнению основного алгоритма.
"

Совсем недавно в одной из тем выкладывал командоаппарат реального времени с маской недели:

81854

mma@zit21.ru
10.02.2025, 11:36
Что-то вы тут намудрили.
Вот тут чутка поэкспериментировал

Алгоритм работы кондиционеров устроен так, что каждый новый кондиционер можно включить только после завершения полного 10-минутного цикла работы уже запущенных. Например, если работает один кондиционер (К1) и прошло 7 минут, то при попытке включить второй (К2) они оба запустятся только через 3 минуты, когда К1 достигнет 10 минут. После этого, если К1 и К2 работают и прошло, например, 3 минуты, то для включения третьего (К3) нужно дождаться, когда К1 и К2 проработают полные 10 минут. Включение нового кондиционера всегда происходит только после завершения полного цикла всех ранее включенных устройств. А сейчас включается сразу(

Вот в моей программе было так сделано, только там всё коряво и когда хочешь с 3 перейти сразу на 2, условие для выключения не срабатывает и, короче, ничего не работает. Ну и еще там не по времени у меня..

Dimensy
10.02.2025, 12:26
Алгоритм работы кондиционеров устроен так, что каждый новый кондиционер можно включить только после завершения полного 10-минутного цикла работы уже запущенных. Например, если работает один кондиционер (К1) и прошло 7 минут, то при попытке включить второй (К2) они оба запустятся только через 3 минуты, когда К1 достигнет 10 минут. После этого, если К1 и К2 работают и прошло, например, 3 минуты, то для включения третьего (К3) нужно дождаться, когда К1 и К2 проработают полные 10 минут. Включение нового кондиционера всегда происходит только после завершения полного цикла всех ранее включенных устройств. А сейчас включается сразу(

Вот в моей программе было так сделано, только там всё коряво и когда хочешь с 3 перейти сразу на 2, условие для выключения не срабатывает и, короче, ничего не работает. Ну и еще там не по времени у меня..

Ну, вам, вроде, уже сделали такой пример. Но, вот мой

Сергей0308
10.02.2025, 12:42
Алгоритм работы кондиционеров устроен так, что каждый новый кондиционер можно включить только после завершения полного 10-минутного цикла работы уже запущенных. Например, если работает один кондиционер (К1) и прошло 7 минут, то при попытке включить второй (К2) они оба запустятся только через 3 минуты, когда К1 достигнет 10 минут. После этого, если К1 и К2 работают и прошло, например, 3 минуты, то для включения третьего (К3) нужно дождаться, когда К1 и К2 проработают полные 10 минут. Включение нового кондиционера всегда происходит только после завершения полного цикла всех ранее включенных устройств. А сейчас включается сразу(

Вот в моей программе было так сделано, только там всё коряво и когда хочешь с 3 перейти сразу на 2, условие для выключения не срабатывает и, короче, ничего не работает. Ну и еще там не по времени у меня..

Здесь не так давно выкладывал проект с макросом разруливания одновременного запуска: https://owen.ru/forum/showthread.php?t=26216&page=353
А ранее, в одной из тем это подробно обсуждали!

81898

Просто любопытно, чем вас не устроил предложенный мною в посте #22 вариант? Вы его смотрели?

mma@zit21.ru
12.02.2025, 14:26
Ну, вам, вроде, уже сделали такой пример. Но, вот мой

Я вам очень благодарен. Уже начал всё понимать, что как устроено. Как можно это реализовать?
Нужно разработать систему управления тремя кондиционерами с двумя режимами работы:

Режим "Включен" – кондиционер работает постоянно, без ротации.
Режим "Авто" – кондиционер участвует в ротации с другими, чтобы равномерно распределять нагрузку.
Правила работы системы:

Если два кондиционера в "авто"-режиме, они работают поочередно.
Если три кондиционера в "авто"-режиме, всегда работают два из них, чередуясь, чтобы нагрузка распределялась равномерно.
Если кондиционер включен вручную, он не участвует в ротации.
На одном кондиционере нельзя одновременно включить оба режима.
Условия включения и выключения:

Кондиционеры включаются при температуре 30°C.
Отключаются при температуре 20°C.
Техническая реализация:

Нужно создать макрос для управления логикой ротации.
На основной схеме должны быть 3 выхода (по одному на каждый кондиционер) и 3 входа (для получения состояния каждого кондиционера).

EFrol
12.02.2025, 14:38
Как можно это реализовать?
На основной схеме должны быть 3 выхода (по одному на каждый кондиционер) и 3 входа (для получения состояния каждого кондиционера).

Может Вы уже определитесь с ТЗ окончательно?
- 3 кондиционера
- каждый работает в одном из режимов: Выкл, Вкл, Авто
- если кондиционер вкл. то его работа измеряется в циклах по 10 минут
- кондиционер не должен переходить на новый режим пока не закончится предыдущий цикл
- те кондиционеры, которые находятся в режиме авто в конце каждого цикла должны меняться местами
- если одновременно 3 кондиционера в режиме "Авто", работают 2 - не работает 1
- если только 1 в режима "Авто", то считается, что он в режиме "Вкл"

Всё?

mma@zit21.ru
12.02.2025, 15:03
Зачем входы состояния, когда нет входов задания режимов?

входы
К1 вкл i5, авто i6
К2 вкл i7, авто i8
К3 вкл i9, авто i10
выходы
К1 q4
К2 q5
К3 q6

EFrol
12.02.2025, 15:15
входы
К1 вкл i5, авто i6
К2 вкл i7, авто i8
К3 вкл i9, авто i10
выходы
К1 q4
К2 q5
К3 q6

А ПР какая?

mma@zit21.ru
12.02.2025, 15:57
А ПР какая?

ПР102-24.2416.03

EFrol
12.02.2025, 19:23
81947


function_block Rot

var_input
Air1Auto, Air1On, Air2Auto, Air2On, Air3Auto, Air3On : bool;
end_var

var_output
Q1, Q2, Q3 : bool;
end_var

var
TMR1, TMR2, TMR3 : SYS.TON; // Таймер для каждого кондиционера
AutoCount : udint; // Кол-во кондиционеров в режиме авто
end_var

// Если кондей включен, его таймер должен работать и наоборот
TMR1(I:=Q1, T:=T#10m); TMR2(I:=Q2, T:=T#10m); TMR3(I:=Q3, T:=T#10m);

// Если кондей был включен и надо его выключить и его таймер это позволяет, то - выключаем
if Q1 and Not Air1Auto and Not Air1On and TMR1.Q then Q1:=false; end_if
if Q2 and Not Air2Auto and Not Air2On and TMR2.Q then Q2:=false; end_if
if Q3 and Not Air2Auto and Not Air2On and TMR3.Q then Q3:=false; end_if

// Если кондей был выключен и его надо включить безусловно, то - включаем
if Not Q1 and Air1On then Q1:=true; end_if
if Not Q2 and Air2On then Q2:=true; end_if
if Not Q3 and Air3On then Q3:=true; end_if

// Определяем кол-во кондеев в режиме Auto
AutoCount := 0;
if Air1Auto then AutoCount := AutoCount + 1; end_if
if Air2Auto then AutoCount := AutoCount + 1; end_if
if Air3Auto then AutoCount := AutoCount + 1; end_if

case AutoCount of
1: // Найти кондей с режимом Auto и включить его безусловно
if Air1Auto then Q1:=true; end_if
if Air2Auto then Q2:=true; end_if
if Air3Auto then Q3:=true; end_if

2: // Найти кондей с режимом Auto и если он накопил 10мин - выключить, а другой - включить
// Если нет накопленных - включаем первого какой попадется
if Air1Auto and TMR1.Q then
Q1:=false;
if Air2Auto then Q2:=true; end_if
if Air3Auto then Q3:=true; end_if
elsif Air2Auto and TMR2.Q then
Q2:=false;
if Air3Auto then Q3:=true; end_if
if Air1Auto then Q1:=true; end_if
elsif Air3Auto and TMR3.Q then
Q3:=false;
if Air1Auto then Q1:=true; end_if
if Air2Auto then Q2:=true; end_if
elsif (Not Q1 and Not Q2 and Not Q3) then
if Air1Auto then Q1:=true;
elsif Air2Auto then Q2:=true;
elsif Air3Auto then Q3:=true;
end_if
end_if

3: // Найти кондей, который накопил 10мин - выключить, а 2 других - включить
// Если нет такого, то включаем одного из выключенных
if TMR1.Q then
Q1:=false; Q2:=true; Q3:=true;
elsif TMR2.Q then
Q2:=false; Q1:=true; Q3:=true;
elsif TMR3.Q then
Q3:=false; Q1:=true; Q2:=true;
elsif (Not Q1 and Not Q2) then
Q1:=true;
elsif (Not Q1 and Not Q3) then
Q3:=true;
elsif (Not Q2 and Not Q3) then
Q2:=true;
end_if

end_case

end_function_block

Dimensy
13.02.2025, 11:30
Я вам очень благодарен. Уже начал всё понимать, что как устроено. Как можно это реализовать?
Нужно разработать систему управления тремя кондиционерами с двумя режимами работы:

Режим "Включен" – кондиционер работает постоянно, без ротации.
Режим "Авто" – кондиционер участвует в ротации с другими, чтобы равномерно распределять нагрузку.
Правила работы системы:

Если два кондиционера в "авто"-режиме, они работают поочередно.
Если три кондиционера в "авто"-режиме, всегда работают два из них, чередуясь, чтобы нагрузка распределялась равномерно.
Если кондиционер включен вручную, он не участвует в ротации.
На одном кондиционере нельзя одновременно включить оба режима.
Условия включения и выключения:

Кондиционеры включаются при температуре 30°C.
Отключаются при температуре 20°C.
Техническая реализация:

Нужно создать макрос для управления логикой ротации.
На основной схеме должны быть 3 выхода (по одному на каждый кондиционер) и 3 входа (для получения состояния каждого кондиционера).

Пробуйте
-----------------

Dimensy
14.02.2025, 10:19
Пробуйте


Чуть поправил
https://disk.yandex.ru/d/wJD3lSpoXalXJg