Предлагаю в этой теме задавать полезные задачи для новичков и не только.
Смысл первой задачи заключается в том, что выходной сигнал полностью повторяет входной сигнал, но с отставанием на заданный промежуток времени. Сигнал дискретный.
Вид для печати
Предлагаю в этой теме задавать полезные задачи для новичков и не только.
Смысл первой задачи заключается в том, что выходной сигнал полностью повторяет входной сигнал, но с отставанием на заданный промежуток времени. Сигнал дискретный.
А на каком железе решать хотите задачи ????
Хотелось бы на ПЛК, но можно и на ПР, раз Вы первым отреагировали :). В Кодесис ведь можно перевести. Главное, что бы польза была для всех. Можно даже уточнять кому на чем надо.
Если на ПР ,то такая тема есть и там решаются любые задачи ,в том числе и такие .А то как то в курилке не фонтан ....
Вы правы, не подумал, надо было в разделе ПЛК тему создавать. Может модераторы перенесут, если будет у народа интерес.
Вот я согласен
zendo057, молодец, только Ваш вариант не будет работать правильно. Задачка не такая простая, как кажется. Например, на вход пришел сигнал длительностью 3 сек. Надо, чтобы на выходе появился сигнал через 5 сек также длительностью 3 сек. Длительность сигналов на входе может быть разная с разным интервалом.
Это реально для чего-то нужно , или так ... типа "вспышка с тылу"
Отставание от чего ? От фронта входного сигнала , или среза ????
Да, это нужно для реального объекта. Один из вариантов применения: при выходе из строя температурного датчика подачи контура использовать регулятор соседнего контура, т.е. один ПИД регулятор будет управлять двумя контурами. А решение этой задачи позволит импульсы на открытие-закрытие двух приводов делать не синхронно, а с задержкой, т.е. один начал открываться, через секунду начал открываться другой, а время открытия одинаковое и у одного и у другого.
не совсем понятна идеология темы в таком случае, Вы знаете решение и предлагаете новичкам решить её или сами нуждаетесь в оптимальном решении?
Решение по вашему варианту есть и довольно простое : 8 строк на ST . Но если ПИД(выход) аналоговый такой способ уже не пройдет .
Не проще ли использовать (программно подключить) другой датчик , вместо неисправного.Такое прокатывает в вентиляции и для ИТП , сам делал такие варианты . Напр. в ИТП можно регулировать по прямой и по обратке и далее на прямой на коллекторах датчики ставят.
Короче - мое мнение ваша задачка действительно для новичков (умственный ананизм , типа теории вероятности).
capzap, здесь все просто. Есть люди, которые хотят потренироваться, и есть те, у кого что-то не получается. Выкладываем все сюда. Совмещаем полезное с приятным. Про оптимальное решение Вы хорошо сказали, оно никогда не будет лишним. Полезно же попробовать сначала сделать самому, а потом посмотреть как это делают настоящие профессионалы. Вот Sergey666 в 8 строчек уложился. Возможно это самое оптимальное решение, которое мы увидим.
Предлагаю еще одну задачу. Многие уже знают, что таймер TP в Кодесис написан с ошибкой. Там при PT=0 есть косяк. Надо написать такой же таймер, чтобы он работал корректно при PT=0. Еще можно добавить полезное дополнение, сделать так, чтобы выход ET не сбрасывался в 0 сразу после отработки таймера, а сохранялся до следующего запуска таймера.
Давайте договоримся, задачи оформлять в виде функциональных блоков. Так намного легче разобраться где что и самим проверить работоспособность легче будет.
zendo057, попробуйте вход включить и не выключать, что будет. По условию задачи дожен быть все время включенным.
Вы бы прежде создали проект с визуализацией, где было бы два поля для логов изменения состяния дискретного входа, один ПОУ отображает входной сигнал экзаменуемых, а второе выходной сигнал. И потом всем можно было бы посмотреть что приходило и как точно по времени выходило из ПОУ решившего задачку
ЗЫ и не плохо было бы предоставить испытуемым генератор импульсов, вообщем организовать лабораторный стенд, а потом уже предлагать задачу
Уважаемый amn,ВЫ пожалуйста ставте задачи по конкретней, есть это и нужно сделать так.В первой задаче вы указали вход включен 3сек через 5сек вкл выход на 3сек,я так и сделал.Но потом вы говорите,что время должно меняться я вроде исправился.Потом говорите что вход постоянно включен и время на другом таймере.Вот я и совсем запутался и не знаю что дальше делать.ВАМ большая благодарность,за то что ВЫ придумали такую тему.Буду держаться столько сколько смогу.Спасибо.
Конечно жульничество , но никто не запрещал так писать. Получилось 6 строк , но можно уложиться в одну :p. Можете сравнить насколько СТ кроет все другие языки и что получается если воспользоваться штатным конвертатором , но это работает - повторяет (по длительности через задержку ПОСЛЕДНИЙ поданный сигнал). И на хрена TP , есть TON , больше ничего не нужно.
Вообще устройства такие есть - реле многофункциональные таймеры.
непрокатывает, задержка одна секунда: первый импульс длительный секунд пять, два вторых по полсекунды длительность и период и выход уже неадекватно работает
Тут без массивов фронтов не обойтись, заданное время задержки массивы заполняем, время закончилось удаляем первый элемент, вставляем текущее состояние входа, соответственно через тригерры фронтов. а после через РС триггер на выход, вход R подаем нулевой элемент массива задних фронтов, на S передних фронтов
Как то так у меня в мыслях, делать не собираюсь, занят
zendo057, учту Ваши пожелания. Цифры были только для примера, а задача должна быть универсальной для любых цифр, то что я говорил никак не противоречит условию задачи из 1 поста. Уточню еще раз условие задачи: делаем ФБ signal_delay. Выходной сигнал полностью повторяет входной сигнал, но с отставанием на заданный промежуток времени (переменная delay). Сигнал дискретный (типа bool). То есть включился вход (переменная in) на n сек. через время delay включился выход (переменная out) также на n сек.
capzap, Ваша идея мне понравилась.
Во вложении проект с визуализацией для более удобного тестирования. В проекте имеется ФБ signal_delay со входами и выходом. Надо заменить его на свой. В визуализации кнопка in с фиксацией соответсвует входу in. Время отставания можно изменить кликнув мышкой по его значению.
Sergey666, спасибо, за участие.
По поводу таймера TP. Я им пользуюсь иногда. Даже для решения этой задачи. Только из-за его косяка моя программа работала не правильно.
capzap прав. У меня тоже получается, что правильно работает, только если интервал между импульсами больше времени задержки. А с массивами слишком нерационально, это ж какой размер массивов должен быть, чтобы каждый цикл запоминать состояние входа даже в течении 1 сек. Хотя по другому и не получится. Надо ввести какие-нибудь ограничения, например минимальная длина импульса 0.1 сек.
Если идти по пути на каждый фронт по таймеру, вот это будет нерационально, а массивы каши просить не будут при относительно большом времени задержки,я так думаю начнет оказывать влияние где то начиная с минуты
Да куда уж проше чем массивы.И длительность сигнала любая :rolleyes:
И вообще для простых задач существует ПР ,его и используйте .А для обучения азам программирования на ПЛК изучайте Кодесис и видео уроки ,да и примеров куча.А то мы тут больше обсуждаем схемотехнику(способы реализации) ,чем реальное программирование на ПЛК.
Анатолий, имеется последовательность случайных по продолжительности потенциалов,низких и высоких, Ваша схема однозначно не даст увидеть с задержкой короткие импульсы если перед ними был продолжительный, тпшка их просто съест, тожесамое если использовать тоны с тофами, будет происходить селекция,а не точное влспроизведение по времени
Там косячек был , при следующем импульсе до окончания времени "цикла" повтора импульса (время ожидания + длительность импульса).
Во вложении подправленная версия с тем-же названием (исправлен текст на ST), смысл в том , что по фронту следующего импульса(входного) все таймера сбрасываются и выход тоже сбрасывается и начинается новый " цикл повторителя" .
Так работают подобные "железные" реле-таймеры.
Жаль не посмотреть, вагон без розеток в -купе, но пугают слова, что выход тоже будет сброшен, здесь нужно не реле-таймер,а повторитель реального времени с задержкой
Уважаемый amn,я всю жизнь работал на LAD языке.Пересесть на ваш мне дается сбольшим трудом.Я только освоил как создать POU, атут сразу FB.Конвертировав в лд,увидел var_input delay,но в fb его нет,но он,delay,есть в plc_prg,как понять?
ПРограммы я пишу на станочное оборудование,в моем понятии лд самый удобный здесь я вижу где кнопка,где концевик, видна вся цепочка как на ладоне,особенно если она сложноразветвленная.Это оборудование сам же и обслуживаю
По любому если входная последовательность будет случайная , а время выдержки фиксированное , то о точном воспроизведении входной последовательности не может быть и речи .
Я в своем примере представил , что все МЭК языки можно перевести один в другой , даже несколько туповатый штатный конвертер с этим справляется , но наглядности никакой.
В редакции КДС LD - очень похож на FBD , по сравнению с редакторами LD других производителей небо и земля (в лучшем смысле), вас никто не заставляет перескакивать на другой язык , возможности у всех одинаковые .
Я поделился мыслями как бы я это сделал,еслибы было свободное время, попробуйте представить что это ТЗ и напишите проект, даже Анатолий подтвердил что нужен регистр(ы) сдвига, единственное в ПР это нереализовать, не хватит того кодичества регистрлв, которое может понадобиться из длительности задержки и времени цикла, а в плк это легко
Какое - такое т.з :
Типа импульсы входные могут быть какой угодно длительности и следовать с каким угодно периодом и эту последовательность надо повторить с задержкой .
Если учесть , что каждый раз во время "типа паузы" на вход могут приходить разное количество импульсов с разной длительностью и периодом , то будет каша , причем если учесть условие: повторение после паузы эта каша будет иметь тенденцию арифметического накопления .
Конечно решить это можно , но можно и мозг взорвать : я хочу мощный , быстрый авто с бензиновым мотором , но чтобы топливо не жрал.
:) ну значит завтра ночером приду в гостиницу и сам напишу как я предложил в 20 посте реализацию
Это да ... Но если цикл 50мс ,то это почти 13 секунд ....:D