А если задавать кол-во работаюших насосов в целочисленном формате -
0-не один не включается
1- ротация по одному
2- ротация по два
3-включены все.
то как будет выглядеть макрос?
Вид для печати
А если задавать кол-во работаюших насосов в целочисленном формате -
0-не один не включается
1- ротация по одному
2- ротация по два
3-включены все.
то как будет выглядеть макрос?
Пойду дальше (в размышлениях) .А почему бы ,если делать на целочисленной логике такой автомат ,то задавать на входе макроса код неисправности насосов и код количества насосов ,участвующих в ротации ,а также и код на выходе в целочисленном формате .А все преобразования из BOOL to INT и наоборот ,делать снаружи макроса.Тогда можно реализовать граф для N насосов (<8) .ТО есть получим макрос 3 входа( такт еще) и один выход.Можно даже без входа "такт-цикл" обойтись -сделав "моргание" по входу "неисправность" (на все единицы(255) ,если нет неисправностей или на ноль если есть любая неисправность ,снаружи макроса.Тогда будет вообще 2 входа и 1 выход у макроса.
А у меня точно пишет -обращение к пустому стеку.
я ж говорю - "надоело бороться со стеком"
замените связь между MOD и SEL на обычную, вроде почти правильно работает...
Уже предлагали делать ротацию по принципу ФИФО ,но я так и не понял ,что складывать в очередь ,ведь если возникла не исправность ,то очередь нужно менять ,а тогда зачем очередь ?Это как в ППЗУ счетчик перебирает адреса ячеек ПЗУ ,а не исправность переключает область адресов .Просто для большого количества входов выход ,нужно большое ПЗУ .:rolleyes:Да и очередь надо делать энергонезависимую ,что для ПР110 не возможно.Поэтому лучше обходится без памяти,чисто комбинационно .
К стати ,задавая количество насосов в ротации целочисленным числом ,можно на таком макросе делать повысительную станцию ,добавляя во времени количество работающих насосов ,с учетом давления и неисправностей насосов,да еще с ротацией их при каждом включении.
Жаль ,что не владею данным способом составления схем,тут одной схемотехникой не обойтись.Пора заводить новую тему -Большие хитрости ПР от AI
а смысл? если пропало эл-во, то скорее всего оно пропало и у насосов, так что всё равно их включать заново.
т.е. можно новую очередь строить...
ну и про наработку - либо пусть UPS ставят, либо считаем, что схема ротации стремиться выравнять наработку насосов,
так что после перезагрузки просто будем считать, что наработка насосов равна.
Вопрос в догонку ,как реализовать проще функцию 2 в степени N ?PITBUT?
N -> DC32 -> 2^N
Вот вариантик ротации ,чисто на вычислениях (без ОС,почти) ,без учета неисправности ,М-включенных из общего числа N насосов(<8). Осталось вычислить (исключить) неисправные насосы:confused: .
выкладываю ещё одну версию ротации 3х насосов, ничем не отличается от последней, только ошибку не выдаёт.
"Задача такая:
Двигатель вращается с частотой 1000 об/мин.
В случае выхода за пределы +-10% необходимо замкнуть выход на непродолжительное время (секунда, например). После чего, двигатель останавливается. В дальнейшем, возможно, проводят осмотр двигателя, а возможно, он автоматически стартует (сейчас не столь важно). И важно, чтобы двигатель опять набрал частоту 1000. После чего опять бы начал осуществляться контроль выхода за пределы.
Возможно ли осуществить такое на ПР?"
Можно ,но точность буден не большая ,т.к. период тактирования внутреннего генератора 2мс(мин).Для повышения точности ,считаем период за 10 оборотов движка .
Вот вариант тахометра такого :rolleyes:
Предлагаю готовый проект на основе макроса от AI! предложения по улучшению пректа принимаются.
http://yadi.sk/d/PWqgSQJy0uvqS
надо к двигателю прикрутить пару шестерёнок, понизив обороты
ну и задачу, надо решать другим способом:
1) по сигналу с двигателя делаем два блока с задержкой на выключение (включения), с верхней и нижней границей допустимых значений, соответственно.
2) если след. сигнал пришел когда XOR выходов от этих блоков = 1 - то всё хорошо, если XOR=0, то плохо.
Тогда вопрос на засыпку - как оборот отмерять будем? (технически)
если цикл программы будет медленнее оборота диска (6мс)
на валу стоит "Флажок" ,а рядом индуктивный датчик .Указан же диапазон частоты вращения движка -1000об\мин .это 60мс -оборот,а не 6.
Потому и поставил редуктор-счетчик ,что бы мерить период за 10 оборотов ,что бы было точнее.А вы -тон ,тоф.....,да еще столь категорично .
а ну да, мс = 1/1000c, а я почему то подумал, что 1/100c..
а сколько работает один цикл программы? успеет за 60мс выполниться 2раза?
Цикл ПР ,для простых задач в пределах 3мс-10мс.
Для начала ,как программист сделайте как в задании -сформировать одиночный импульс ,длительностью 1сек ,при уходе частоты за пределы ,а не формируйте последовательность импульсов на выходе .А остальное дело вкуса .Делал и не раз на тонах и тофах частотные фильтры ,сегодня захотел так -на счетчике .
Много раз задавал вопрос разработчикам -как будет вести себя счетчики от блинка ,если время цикла ПР больще ,чем задание-частота генератора (ФБ) ,учитывая ,что таймер отрабатывается по прерываниям .Но в ответ тишина ,а ведь это принципиальная особенность при проектировании схемы ,не описанная ни где.
Дело в том ,что время отсчитывается аппаратным таймером ,но запуск самого таймера (тон,тоф) идет от счетчика .Если импульсы на входе будут чаще чем сможет обработать ПР в цикле,то такие входные сигналы потеряются ,даже если вы их заведете напрямую на таймер ,без счетчика .Если же период входных импульсов больше чем цикл ПР ,то все равно как реализовать данную задачу.:rolleyes: :cool:
Кроме того для запуска Таймера вы используете Ф триггер ,а он как известно формирует импульс длиной цикла ПР ,тогда в проекте возникает погрешность ,которая будет зависеть от длительности цикла ПР и в разных проектах ,погрешность будет разная ,что то же не гуд .
Вывод- для таких "скоростных" задач (тахометр ,частотомер) нужен 3 вариант ;) :) или Пр114,все же в раз пять быстрей
.
не факт, что начало и конец программы будут ближе по времени.
представьте что код программы это Земля, его выполняет ПР - это Солнце в зените
т.е. Солнце двигается (ПР исполняет код) от Японии (входов) до Аляски (выходов)
когда вы мне говорите, что нужно что бы всё выполнилось за один цикл ПР,
вы думаете что блоки расположены как Британские острова и Гренландия.
а я сделал по-другому потому что думал, что блоки во времени исполнения расположены как Япония и Аляска, и что их разделяет только линия перемен дат.
(именно эта граница, на моих последних схемах обозначена пунктиром, т.н. "обратная связь")
PS выкладываю схему, где всё делается за один цикл ПР
Согласен :rolleyes: ;)Наследие аппаратной реализации -верить написанному(паспортным данным) .В ПР нужно осторожней с генераторами и таймерами -Не ставить уставки меньше чем цикл ПР ,хоть и установите 2мс в генераторе ,а генерить будет с периодом в 2 раза больше чем цикл ПР ,который заранее неизвестен для данного проекта .-вот такая особенность программной реализации ,которую нужно большими буквами прописать во всех инструкциях ,а не считать ,очевидным
Вот один из многих вариантов реализацииЦитата:
Сообщение от koresh
обратные связи починили...
(хотя они тут и не нужны оказались... но всё же вставил одну, для надёжности....)
сделал не 32 насоса, а 8, т.к. у ПР ща только 8 выходов.
(до 32 можно легко нарастить, нужно только желание :rolleyes: )
понял, что FIFO тут бесполезно, надо включать насос с наименьшей наработкой из "отдыхающих",
а выключать с наибольшим моторесурсом из работающих.
(моторесурс считается с точностью до сек., до 2^31 сек, или 68 лет)
первый вход задаёт маску разрешенных насосов
(у тех насосов что в ремонте, или если их реально меньше - надо просто сбросить соответствующие биты)
второй вход "Next" - команда ПЕРЕключиться на следующий насос
(выключить с наибольшим моторесурсом и включить с наименьшим)
ну а третий - сколько насосов нужно в данный момент
(например по датчику давления можно менять кол-во насосов в зависимости от кол-ва потребителей)
PS пожелания по улучшению принимаются
(есть одна идея - запретить включение сразу несколько насосов,
т.е делать паузу хотя бы в 5сек, что бы снизить нагрузку на сеть
вопрос - насколько это актуально?)
----------- update ----------
обновил немного:
- в борьбе с "подмигиванием", обратная связь стала важна.
- если при подаче сигнала "Next" работающие насосы имеют минимальный моторесурс, из разрешенных, то ничего не происходит.
(зачем менять относительно новый насос на более изношенный?)
Вот вариант управления реактором закисления .Есть возможность со входов выбирать уставки генератора (при наладке) .Цитата:
Сообщение от Igor777
Сумматоры времени лучше сделать на счетчиках ,тогда если использовать ПР114 ,будет возможность сохранять наработку ,при отключении питания .
При работе насосов в группе (например ,3из 8),в нее включаются насосы с минимальной наработкой или по другому ?;)
на счет 32 насосов -это вы хватанули .Ни переменных ,ни стека не хватит ,да и такого количества насосов мало кому нужно,ИМХО
у вас уже переменных 67% ,а ФБ только 9% ;)
Кроме того в счетчике есть сброс ,а у вас нет .А он должен быть ,что бы наработка сбрасывалась при включении нового насоса в работу ,на место старого .:rolleyes: :p
сделайте лучше 4 насоса ,но добавьте целочисленные выходы для контроля времени наработки насосов (для сетевых переменных)
ну и при смене маски ,тот бит что стал 1 из нуля (включился) должен сбросить наработку соответствующего насоса.