Просмотр полной версии : Помощь в реализации
Всем доброго времени суток. Стоит задача: шесть емкостей-источников, шесть емкостей-приемников с насосами. Перекачка жидкости возможна из любого источника в любой приемник. Нужно реализовать выбор пары "источник-приемник" с запоминанием. Пока пришло в голову вот такое, с позаимствованным тут на форуме и обрезанным демультиплексором. 65902
Сергей0308
14.02.2023, 00:02
Всем доброго времени суток. Стоит задача: шесть емкостей-источников, шесть емкостей-приемников с насосами. Перекачка жидкости возможна из любого источника в любой приемник. Нужно реализовать выбор пары "источник-приемник" с запоминанием. Пока пришло в голову вот такое, с позаимствованным тут на форуме и обрезанным демультиплексором. 65902
Объяснения гениальные, в обратном смысле этого слова!
Насколько понял, выбор приёмной ёмкости осуществляется включением её насоса, в смысле, у каждой ёмкости свой насос! А выбор ёмкости источника как осуществляется, в смысле, может там какие клапана стоят? И сколько одновременно пар ёмкостей могут работать?
И в принципе непонятна проблема, выбрали из 6 ёмкость-источник, в смысле, нажали соответствующую кнопку, затем таким же макаром выбрали и ёмкость-приёмник, проблема в чём?
Мне так кажется, насколько понял, ПР там не пригодится!
насколько понял, ПР там не пригодится!
насколько понял в курсовой или дипломной именно ПР...
какое количество пар емкостей могут одновременно включены в работу
какое количество пар емкостей могут одновременно включены в работу
Извините за неправильные вводные, сам изначально неправильно понял задачу. На самом деле суть такая. На реле приходит шесть, скажем проводов. И есть пять выходов. Нужно произвольно передавать сигнал с любого из шести входов на любой из пяти выходов, с запоминанием пары. И с возможностью эту пару сбросить.
Сергей0308
02.03.2023, 21:16
Извините за неправильные вводные, сам изначально неправильно понял задачу. На самом деле суть такая. На реле приходит шесть, скажем проводов. И есть пять выходов. Нужно произвольно передавать сигнал с любого из шести входов на любой из пяти выходов, с запоминанием пары. И с возможностью эту пару сбросить.
Я когда-то коммутатор делал в виде макроса на 8 входов(входных дискретных сигналов) и 8 выходов, в случае необходимости легко расширяется до 32, включительно, короче, там имеется выбор для каждого выхода с какого входа будет поступать сигнал на этот выход, если Вы правильно поняли задачу и я правильно понял Вас, то должно Вам подойти! А как там далее поступать, в смысле, сохранять настройки или нет это уже дело хозяйское, при наличии экрана, можно оперативно менять в любое время дня и ночи, в смысле, когда захотите, всё!
https://owen.ru/forum/showthread.php?t=12691&page=27
В посте#264.
Извините за неправильные вводные, сам изначально неправильно понял задачу. На самом деле суть такая. На реле приходит шесть, скажем проводов. И есть пять выходов. Нужно произвольно передавать сигнал с любого из шести входов на любой из пяти выходов, с запоминанием пары. И с возможностью эту пару сбросить.
Если я правильно понял, то должно быть как-то так:
66275
В целочисленных outX указывается номер выхода от 1 до 6.
Соответственно к любому входу любой выход. Можно использовать все пары.
Если я правильно понял, то должно быть как-то так:
66275
В целочисленных outX указывается номер выхода от 1 до 6.
Соответственно к любому входу любой выход. Можно использовать все пары.
Как работает связь outX - outs? И можно ли тут будет прокидывать несколько входов на один выход?
Я когда-то коммутатор делал в виде макроса на 8 входов(входных дискретных сигналов) и 8 выходов, в случае необходимости легко расширяется до 32, включительно, короче, там имеется выбор для каждого выхода с какого входа будет поступать сигнал на этот выход, если Вы правильно поняли задачу и я правильно понял Вас, то должно Вам подойти! А как там далее поступать, в смысле, сохранять настройки или нет это уже дело хозяйское, при наличии экрана, можно оперативно менять в любое время дня и ночи, в смысле, когда захотите, всё!
https://owen.ru/forum/showthread.php?t=12691&page=27
В посте#264.
можно ли там сделать несколько связей одновременно? И прокидывать несколько входов на один выход?
Извините за неправильные вводные, сам изначально неправильно понял задачу. На самом деле суть такая. На реле приходит шесть, скажем проводов. И есть пять выходов. Нужно произвольно передавать сигнал с любого из шести входов на любой из пяти выходов, с запоминанием пары. И с возможностью эту пару сбросить.
Вы опишите свой тех. процесс используя именно те объекты, что в нём применяются (управляющие человеки, насосы, трубы, ёмкости) и ещё лучше с примерами конкретных ситуаций.
Использование терминов "провода", "входы/выходы" и "пары" только всё усложняет
Сергей0308
03.03.2023, 09:39
можно ли там сделать несколько связей одновременно? И прокидывать несколько входов на один выход?
Все связи, какие назначите, работают одновременно, другого не дано!
Во-первых надо определится с логикой, если сигналы с нескольких входов посылать на один выход, я так понимаю по "ИЛИ", но это моя гипотеза(предположение), алгоритм не должен строится на предположениях, короче, в принципе возможно, в смысле, можно расширить макрос до 32 выходов(включительно) или несколько макросов поставить(применить), уже писал об этом, и объединять несколько выходов в один по нужной Вам логике!
Я так понимаю, аппетит приходит во время еды, это нормально, в смысле, ранее Вы об этом не заявляли, но в любом случае надо будет определится с логикой, чтобы исключить всякие домыслы и спекуляции(в смысле шутки)!
Как работает связь outX - outs? И можно ли тут будет прокидывать несколько входов на один выход?
Несколько входов на один выход:
66277
где OR_PUT макрос:
66278
out1, ... (по количеству входов) выводим на экран для редактирования (диапазон значений от 0 до 6 (по количеству выходов)
0 в переменной означает нет привязки к выходу
если > 0, то будет в outs будет выставлен в 1 соответствующий бит
этот бит выдается на соответствующий выход
у Вас есть реализация такого алгоритма в какой нибудь другой среде разработки? Выложите если есть, чтоб понимать для чего это все
Есть только ТЗ: Есть 6 цистерн, у каждой свое УЗА(заземление). И есть пять насосов. Создание путей "цистерна - насос" происходит вручную задвижками, запуск насосов также происходит вручную. Задача - передать разрешение на запуск определенному насосу от одной-нескольких цистерн. То есть если УЗА на цистерне по какой-то причине пропадает - связь(разрешение на запуск) так же пропадает. В работе одновременно может быть несколько насосов. 66279
Есть только ТЗ: Есть 6 цистерн, у каждой свое УЗА(заземление). И есть пять насосов. Создание путей "цистерна - насос" происходит вручную задвижками, запуск насосов также происходит вручную. Задача - передать разрешение на запуск определенному насосу от одной-нескольких цистерн. То есть если УЗА на цистерне по какой-то причине пропадает - связь(разрешение на запуск) так же пропадает. В работе одновременно может быть несколько насосов. 66279
Т.е. человек сначала вручную задвижками определяет из какой (каких) ёмкостей какой (какие) насосы качают, потом он тыкает на ПР, задавая аналогичные связи?
Если это так - то кто-нибудь обязательно ошибётся при этом.
тыкая на ПР, он выдает РАЗРЕШЕНИЕ на запуск насоса. То есть если отцепилось УЗА, или диспетчер на щите не выдал разрешение, насос у оператора не запустится.
На экране 6 строчек, соответствующих насосам
В каждой строке отмечаются ёмкости от 1 до 6, к которым этот насос подключен, например:
Н1: 1 0 3 0 0 0
Н2: 0 2 0 4 0 0
...
...
(0 - насос не подключен к этой ёмкости)
При пропадании УЗА ёмкости качающие из неё насосы блокируются (выход отключается):
66281
(картинка для насоса 1)
Несколько входов на один выход:
66277
где OR_PUT макрос:
66278
out1, ... (по количеству входов) выводим на экран для редактирования (диапазон значений от 0 до 6 (по количеству выходов)
0 в переменной означает нет привязки к выходу
если > 0, то будет в outs будет выставлен в 1 соответствующий бит
этот бит выдается на соответствующий выход
У меня есть подобная реализация, с аналоговым вводом выбора выхода, страшная, по сравнению с вашим красивым решением, но все же. Можно ли как то реализовать выбор источника кнопками на щите? Число кнопок по числу выходов. Как заставить кнопки передавать единичку на один определенный outX, а не на все сразу?66282
Несколько входов на один выход:
66277
где OR_PUT макрос:
66278
out1, ... (по количеству входов) выводим на экран для редактирования (диапазон значений от 0 до 6 (по количеству выходов)
0 в переменной означает нет привязки к выходу
если > 0, то будет в outs будет выставлен в 1 соответствующий бит
этот бит выдается на соответствующий выход
Допустим out1 = 4, т.е. 1 на входе I1 появится на выходе Q4.
Значит задвижка 1 разрешит работу 4-му двигателю.
А если без экрана, с кнопками на щите?
ну да, получается по "ИЛИ"
А если без экрана, с кнопками на щите?
Для каждого насоса - по 6 кнопок(переключателей), 6 х 6 = 36
Еще наверное надо добавить в логику, что если для насоса ни одна ёмкость не выбрана, то он тоже блокируется
Это сейчас у меня основная проблема: Если делать для каждой уза (это в моем говнокоде) свои шесть кнопок выбора насоса - получится очень много кнопок ). Вот как бы научить шесть кнопок дружить с определенной уза... )
Еще наверное надо добавить в логику, что если для насоса ни одна ёмкость не выбрана, то он тоже блокируется
так он и не запустится без разрешения или УЗА.
Это сейчас у меня основная проблема: Если делать для каждой уза (это в моем говнокоде) свои шесть кнопок выбора насоса - получится очень много кнопок ). Вот как бы научить шесть кнопок дружить с определенной уза... )
Никак. хотите иметь все варианты подключений - получИте 36 переключателей
Вариант функции на ST
function PumpBlock: bool;
var_input
Allow : bool; // разрешить работу насоса глобально (1 - разрешено)
USA1 : bool; //состояние УЗА 1 ёмкости (1 - ок)
SEL1 : bool; //подключение насоса к 1 ёмкосни (0 - подключен)
USA2 : bool;
SEL2 : bool;
USA3 : bool;
SEL3 : bool;
USA4 : bool;
SEL4 : bool;
USA5 : bool;
SEL5 : bool;
USA6 : bool;
SEL6 : bool;
end_var
PumpBlock := Allow AND
(USA1 OR SEL1) AND
(USA2 OR SEL2) AND
(USA3 OR SEL3) AND
(USA4 OR SEL4) AND
(USA5 OR SEL5) AND
(USA6 OR SEL6) AND
NOT(SEL1 AND SEL2 AND SEL3 AND SEL4 AND SEL5 AND SEL6) ;
end_function
А если без экрана, с кнопками на щите?
Кнопками на щите - это использовать селекторные переключатели на 5 положений (если мы для емкости выбираем насос) или на 6 положений (если для насоса выбираем емкость). Но, есть ограничение - на горячую переключать будет нельзя
Ага и на фингерах собрать схемы ИЛИ чтоб объединить сигналы с разных емкостей к одному насосу и уж этот сигнал завести в ПР, а так же на релюшках собрать размыкатели от заземления, выбранная моделька ПР то на шесть входов
А на горячую почему нет то, ПР это программируемое устройство всегда можно предусмотреть парковку предыдущего насоса и запуск нового
Сигнал с переключателей завести прямиком на пускатели насосов. А сигналы на переключатели уже с ПР-ки передавать. Ну и можно модули расширения использовать
Кнопками на щите - это использовать селекторные переключатели на 5 положений (если мы для емкости выбираем насос) или на 6 положений (если для насоса выбираем емкость). Но, есть ограничение - на горячую переключать будет нельзя
Интересное решение
Сигнал с переключателей завести прямиком на пускатели насосов. А сигналы на переключатели уже с ПР-ки передавать. Ну и можно модули расширения использовать
Можно же селекторы поставить на аналоговые входы и с помощью разных сопротивлений на один вход передавать 5 разных состояний, тогда можно обойтись и без ПРМ.
А вообще - всем большое спасибо за ваше неравнодушие и помощь. Рабочая версия теперь - вот этот вариант с селекторами.66284
Сергей0308
03.03.2023, 13:31
Так, вроде ранее писали, что у каждой приёмной ёмкости свой насос!
Если всё назависимое, в смысле, не привязанное к определённой ёмкости, это только всё усложнит, наверно задача изменилась, в смысле, надо будет выбрать: исходную ёмкость(из 6, 64 варианта), затем насос(из 6, 64 варианта), затем приёмную ёмкость(из 6, 64 варианта), я так понимаю всего 262144 вариантов коммутации!
По любому хочется пожелать удачи, она Вам понадобится!
Так, вроде ранее писали, что у каждой приёмной ёмкости свой насос!
Если всё назависимое, в смысле, не привязанное к определённой ёмкости, это только всё усложнит, наверно задача изменилась, в смысле, надо будет выбрать: исходную ёмкость(из 6, 64 варианта), затем насос(из 6, 64 варианта), затем приёмную ёмкость(из 6, 64 варианта), я так понимаю всего 262144 вариантов коммутации!
По любому хочется пожелать удачи, она Вам понадобится!
не писал я, что у каждой емкости свой насос ) Спасибо вам за помощь.
П.С. приемную емкость выбирать не нужно. Тридцать вариантов: 6 емкостей-источников, 5 насосов.
Т.е. человек сначала вручную задвижками определяет из какой (каких) ёмкостей какой (какие) насосы качают, потом он тыкает на ПР, задавая аналогичные связи?
Если это так - то кто-нибудь обязательно ошибётся при этом.
Я только сейчас понял смысл этого вашего комментария. Действительно, может получится так что на насос задвижками будет выведена одна емкость, а уза будет разрешена с щита предыдущей связью "емкость-насос" и плюс еще и уза с предыдущей связи не откинут.... Тогда насос запустится без нового разрешения..
Можно же селекторы поставить на аналоговые входы и с помощью разных сопротивлений на один вход передавать 5 разных состояний, тогда можно обойтись и без ПРМ.
Вот темка, обсуждали такой вопрос https://owen.ru/forum/showthread.php?t=37127
Сергей0308
03.03.2023, 15:03
Для подобных целей можно использовать дискретные входа + диодный шифратор, в смысле, тогда входов во много раз меньше потребуется, например для 15 неодновременных(как у нас) команд потребуется всего 4 входа, для 31 неодновременной команды - 5 входов!
В принципе можно фиксировать кнопкой двигателя его номер за выбранной входной группой,
но тогда будет нужна еще одна кнопка, которая сбросит привязку двигателей к текущей группе,
в этом примере I1(1) - кнопка сброс, которая пропишет 0 на каждом активном входе:
66286
продолжение
66287
В принципе можно фиксировать кнопкой двигателя его номер за выбранной входной группой,
но тогда будет нужна еще одна кнопка, которая сбросит привязку двигателей к текущей группе,
в этом примере I1(1) - кнопка сброс, которая пропишет 0 на каждом активном входе:
66286
продолжение
66287
Что-то не догоняю, как это работает, надо скопировать и сэмулировать.
Для подобных целей можно использовать дискретные входа + диодный шифратор, в смысле, тогда входов во много раз меньше потребуется, например для 15 неодновременных(как у нас) команд потребуется всего 4 входа, для 31 неодновременной команды - 5 входов!
А можно поподробнее?
Что-то не догоняю, как это работает, надо скопировать и сэмулировать.
Допустим на входе уже есть активные сигналы, но нет привязки выхода, тогда нажатием на кнопку, например I2(1), к этим входам привяжется насос 1 и сработает Q1.
Соответственно, когда вход станет не активным, то и насос Q1 отключиться, но когда активным - Q1 включиться.
Соответственно, меняя активный вход и нажимая кнопку выбора соответствующего насоса (
I2(1) - Насоса №1, I3(1) - Насос №2 и т.д.), можно создать все пары привязок.
Чтобы отвязать насос от входа, надо подать 1 на этот вход и нажать I1(1), вход отвяжется от выхода.
kondor3000
03.03.2023, 15:51
Для подобных целей можно использовать дискретные входа + диодный шифратор, в смысле, тогда входов во много раз меньше потребуется, например для 15 неодновременных(как у нас) команд потребуется всего 4 входа, для 31 неодновременной команды - 5 входов!
А 5 входов можно легко сделать на аналоговом входе 4-20 (0-20 mA) 66291
Пример на 6 входов
Питание 24 В, первый резистор 0,5 Вт ( лучше 1 Вт), 1,3 КОм будет 18 mA
Далее 5 резисторов, 300 Ом, 420 Ом, 1 КОм, 1,5 КОм, 1,8 КОм ( все 0,25 Вт)
после 5 резистора 3,8 mA
Сергей0308
03.03.2023, 17:33
А можно поподробнее?
Примерно как-то так:
66292
Если не ошибаюсь, кажется, Алексей Геннадьевич в какой-то из тем выкладывал!
И, ещё, я Вам ссылку давал на макрос коммутатора(пост#264), так вот, там чуть дальше в посте#267 имеется расширенная версия этого макроса, в смысле, там ещё имеется выбор для каждого входа, в смысле, в какой бит писать значение с каждого из входов, значения всех входов должны писаться в разные биты(не повторятся), при совпадении бита в который пишется значение с одного из входов и бита из которого читается значение для одного из выходов, вход будет скоммутирован с выходом, в смысле, может это Вам подойдёт?
https://owen.ru/forum/showthread.php?t=12691&page=27
66296
Допустим на входе уже есть активные сигналы, но нет привязки выхода, тогда нажатием на кнопку, например I2(1), к этим входам привяжется насос 1 и сработает Q1.
Соответственно, когда вход станет не активным, то и насос Q1 отключиться, но когда активным - Q1 включиться.
Соответственно, меняя активный вход и нажимая кнопку выбора соответствующего насоса (
I2(1) - Насоса №1, I3(1) - Насос №2 и т.д.), можно создать все пары привязок.
Чтобы отвязать насос от входа, надо подать 1 на этот вход и нажать I1(1), вход отвяжется от выхода.
Вот как вам такие схемы вообще в голову приходят? )
А 5 входов можно легко сделать на аналоговом входе 4-20 (0-20 mA) 66291
Пример на 6 входов
Питание 24 В, первый резистор 0,5 Вт ( лучше 1 Вт), 1,3 КОм будет 18 mA
Далее 5 резисторов, 300 Ом, 420 Ом, 1 КОм, 1,5 КОм, 1,8 КОм ( все 0,25 Вт)
после 5 резистора 3,8 mA
И прикрутить на этот вход селектор?
Примерно как-то так:
66292
Если не ошибаюсь, кажется, Алексей Геннадьевич в какой-то из тем выкладывал!
И, ещё, я Вам ссылку давал на макрос коммутатора(пост#264), так вот, там чуть дальше в посте#267 имеется расширенная версия этого макроса, в смысле, там ещё имеется выбор для каждого входа, в смысле, в какой бит писать значение с каждого из входов, значения всех входов должны писаться в разные биты(не повторятся), при совпадении бита в который пишется значение с одного из входов и бита из которого читается значение для одного из выходов, вход будет скоммутирован с выходом, в смысле, может это Вам подойдёт?
https://owen.ru/forum/showthread.php?t=12691&page=27
66296
Нужно попробовать покрутить этот ваш вариант..
kondor3000
05.03.2023, 19:47
И прикрутить на этот вход селектор?
Всё зависит от вашей реализации проекта.
Если вам не хватает входов на реле, то можно этот вход использовать как кнопки входов.
Или например для определения, что уже включена одна или несколько цистерн. Будет как защита от неправильных включений.
В принципе можно фиксировать кнопкой двигателя его номер за выбранной входной группой,
но тогда будет нужна еще одна кнопка, которая сбросит привязку двигателей к текущей группе,
в этом примере I1(1) - кнопка сброс, которая пропишет 0 на каждом активном входе:
66286
Если не хватает входов, то схему:
66287
можно модифицировать с использованием диодного шифратора, который предложили коллеги:
66340
Переключателем SW1 выставляем режим "Выбор входа", нажимаем кнопку номера входа (выбранный вход фиксируется).
Переключателем SW1 выставляем режим "Выбор выхода", нажимаем кнопку номера выхода или "Сброс".
Все AI - дискретные. R4, R5, R6 - 100 Ом - конечно.
И снова добрый вечер, товарищи. Вот такая схема с вашей неоценимой помощью у меня получилась. Добавил сброс связи по остановке насоса, который просто обрывает связь, но номер бита для этого насоса в битовой маске все равно остается единичкой. Как бы хитро и его сбрасывать по останову насоса?
И снова добрый вечер, товарищи. Вот такая схема с вашей неоценимой помощью у меня получилась. Добавил сброс связи по остановке насоса, который просто обрывает связь, но номер бита для этого насоса в битовой маске все равно остается единичкой. Как бы хитро и его сбрасывать по останову насоса?
Если расскажете то-же самое, используя названия переменных и выходов в вашей программе, будет гораздо проще понять, что нужно сделать
Если расскажете то-же самое, используя названия переменных и выходов в вашей программе, будет гораздо проще понять, что нужно сделать
Первые шесть пар входов - это сигналы безопасности (разрешения на запуск, они же УЗА), которые нужно прокинуть к насосам и кнопки их выбора (in1-in6) с задержкой выключения. Эти сигналы не запускают насосы, а лишь дают разрешение на их запуск. Нажимаем кнопку нужной нам УЗА, затем в течении пяти секунд успеваем нажать кнопку нужного нам насоса(I13-A12). Все, разрешение уходит на выбраный насос (K1-K5). Какой-то другой человек "в поле" запускает насос. Сигнал с запущенного насоса приходит на один из входов (A13-A17). Когда насос останавливается - сигнал, соответственно пропадает, и импульсом заднего фронта выключает триггер разрешения этого насоса. Но единичка то в битовой маске в бите этого насоса остается. Она, в принципе, легко сбрасывается, если еще раз нажать кнопку УЗА, который мы прокидывали, и нажать на кнопку "сброс" (она подписана на схеме). Но вдруг ее тоже можно как-то хитро сбросить, когда насос останавливается.
Первые шесть пар входов - это сигналы безопасности (разрешения на запуск, они же УЗА), которые нужно прокинуть к насосам и кнопки их выбора (in1-in6) с задержкой выключения. Эти сигналы не запускают насосы, а лишь дают разрешение на их запуск. Нажимаем кнопку нужной нам УЗА, затем в течении пяти секунд успеваем нажать кнопку нужного нам насоса(I13-A12). Все, разрешение уходит на выбраный насос (K1-K5). Какой-то другой человек "в поле" запускает насос. Сигнал с запущенного насоса приходит на один из входов (A13-A17). Когда насос останавливается - сигнал, соответственно пропадает, и импульсом заднего фронта выключает триггер разрешения этого насоса. Но единичка то в битовой маске в бите этого насоса остается. Она, в принципе, легко сбрасывается, если еще раз нажать кнопку УЗА, который мы прокидывали, и нажать на кнопку "сброс" (она подписана на схеме). Но вдруг ее тоже можно как-то хитро сбросить, когда насос останавливается.
Если я правильно понял, то надо такое добавить в каждый насос:
66951
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot