Что будет если время цикла 150мс, программа вызывается раз в 200мс, в настройках Codesys минимальное время цикла 0 идет обмен по modbus rs-485 и modbus TCP.
Вид для печати
Что будет если время цикла 150мс, программа вызывается раз в 200мс, в настройках Codesys минимальное время цикла 0 идет обмен по modbus rs-485 и modbus TCP.
не понял что Вы хотели спросить...
Хотел узнать зачем нужен параметр минимальное время цикла, если есть возможность вызывать программу например раз в 1с, причем программа непрерывно выполняется в течении 150мс. И как при этом будет осуществлен сетевой опрос плк?ПЛК будет прерываться для сетевого обмена, или сетевой обмен будет идти каждую сек или после 150мс?Да и вообще с этим минимальным временем цикла какая-то беда, при его увеличении время пинга увеличивается, а при установке в 0 вполне приемлемо, причем независимо от того сколько времени выполняется программа.Можно по подробнее где нибудь узнать об этом магическом параметре, в инструкции о нем пару строчек?
Вообще это все описано в руководстве пользователя...
Кратко:
Минимальное время цикла - выставляется пользователем и настраивается им же.
0 - без установки, по факту...
дальше в зависимости от задачи можно увеличивать (большой проект или большая очередь обмена по сети).
Цикл:
Опрос области входов
Выполнение программы пользователя
запись результатов в область выходов
Проведение сетевого обмена в оставшееся время.
Проведение функций самодиагностики и сервиса в оставшееся время.
И потом сначала.
Приоритетность всегда у выполнения программы. А приоритетность обмена и сервиса настраивается разработчиком.
Ну это в кратце. Не считая прерываний, и случаев с псевдомногозадачностью :)
Вполне рабочее время 1 - 5 мс.
На большом проекте видел до 30 мс. Если программа не выполняется за это время - надо еще раз внимательно смотреть на программу.
Если у Вас процессы вялотекущие можно и больше ставить в принципе.
Фиксировать время цикла стоит только в том случае, если ваша прога этого требует, задачи разные бывают.
ну не стоит этого делать, т.к.
Не совсем верно, тут и богу неизвестно какой кусочек эта операция в кодесисе откусывает и как это стыкуется с фиксированным циклом.
Можно ли считать,что правильнее выставлять автоматическое время цикла,т.е. 0 для нормальной работы контроллера? Не совсем понятно для чего нужно выставление определённого времени цикла.Оно всё равно не будет точно калиброванным и не поможет ни ускорить,ни прооптимизировать программу.
Ну почему же только богу. Еще нашему программисту :)
Не время цикла оптимизирует программу. А в зависимости от программы выставляется время цикла. Хотя программу бы лучше предварительно оптимизировать.
Я рекомендую выставлять время цикла. Но естественно опыт каждому подскажет как лучше.
Если выставить время цикла 50мс, то пинг и время загрузки программы увеличивается. А если поставить время цикла 0 и просто вызывать программу , которая выполняется в течении 150мс раз в 200мс все работает быстро, ping 4мс.Зачем тогда нужен этот параметр(минимальное время цикла)?Да и что сделает контроллер если программа выполняется долго(больше установленного минимального времени цикла но меньше максимального) будет ждать выполнения программы , а потом проведет сетевой обмен?
Почему ограничение минимального времени цикла 50мс?И почему работать с программой приятнее если минимальное время цикла стоит 1мс, программа выполняется в течении 20мс, программа вызывается раз в 24мс(через задачи), чем время минимального цикла 24мс, программа выполняется за 20мс(но в последнем варианте тупит сетевой обмен).
"И опыт, сын ошибок трудных..."
Хорошо бы не изобретать велосипед, если уж хоть вашему программисту что-то известно.
Меня тоже заинтересовала тема, т.к. мой ПЛК100, несколько неожиданно для меня, вышел на реальное время цикла 13-14 мс - и приходится подумать, что там и как.
И хотелось бы понять, как можно грамотно использовать конфигурацию ПЛК, в т.ч. вот этот самый параметр, минимальное время цикла. Пока не очень понятно. Позвольте я предположу, для начала:
1) Минимальное время цикла можно использовать в случае, если по количеству циклов мы отмеряем временнЫе параметры работы пользовательской программы. То есть, поставили, скажем, 20 мс и рассчитываем, что "через 5 циклов" = "примерно через 100 мс". Или "на следующем цикле работы" = "через 20 мс".
Я так не делаю, но, ИМХО, так можно. Или нельзя? Вот вопрос № 1.
2) А если этот метод задания времени не использовать, то для чего и как еще нужно минимальное время цикла? Каковы Ваши рекомендации, Андрей?
3) Будет ли объяснение от вашего программиста фактам, изложенным в сообщении коллеги sink3d? Вопрос был 23-го, там, ясен перец, не до наших глупостёв, Россия празднует коммунистические мифы. Но тут уж близится днюха "клары люксембург"...
drvlas как всегда с юмором. Где-то с иронией.
Ответы на вопросы sink3d были в посте выше.
Цикл 0 мс. Контроллер забивает на все, и делает просто: выполняет программу, например 500 мс, ведет сетевой обмен, делает диагностику. И он плевать хотел, нужно ли Вам через 100 мс проверить триггер или таймер или данные с дискретного входа. А там концевичек станка по резке металла сработал о вылете плиты в это время...
Если программа выполняется дольше - времени на сетевой обмен и на сервис у ПЛК не останется, и ПЛК все бросит и начнет все сначала.
Если Вы увеличили цикл ПЛК до 100 мс - время сетевого обмена ЕСТЕСТВЕННО увеличится. По тому как в принципе браться за сетевой обмен контроллер будет не чаще, чем раз в 100 мс. А если проект у Вас большой, то записывая по кусочку раз в 100 мс можно записывать долго.
Все определяется знаниями о принципах работы устройств такого типа, и здравым смыслом. Рецепта на все случаи я при желании дать не смогу.
Если очень хочется активно изучить вопрос и подискутировать - рекомендую начать с книги Петрова Игоря. Он все очень хорошо описывает.
Принцип работы ПЛК В КОРНЕ отличается от принципов работы ПК. Это надо понять и начать этим пользоваться.
Ну и готовимся к празднованию дня заслуг Розы Цеткель.
Мы же не изменяемся по сути. Только шлифуем старые недостатки.
Наверное, он не все понял, потому и продолжал спрашивать. Так и я вот сейчас.
Давайте я уточню.
Книгу Петрова изучил, что такое цикл работы ПЛК - знаю. Но и знаю также, что нормальным способом организации временных задержек является использование таймеров. В частности, системный таймер, дающий системное время, вполне себе годное решение.
Поэтому мне лично и в голову не придет надеятся на определенную скорость работы процессора, прохождения его программных циклов. И таймаут на сработку концевичка я организую без привязки к параметру "минимальное время цикла" (МинВЦ) - тем более, что этот параметр я так и не понимаю в полной мере. Даже после Ваших терпеливых разъяснений.
Ведь Вы пишете о том, как работает ПЛК при МинВЦ = 0 - а это не интересно, это самый обычный режим работы большинства процессоров. А я спрашивал, для чего может понадобиься МинВЦ, если не пробовать опираться на него для организации временных пауз.
Мое предположение: не нужен тогда МинВЦ. Вообще не нужен. Прав я или нет?
А дальше я, честно, совсем запутался.
Минуточку! Я почему-то думал, что свой цикл ПЛК оттарабанит в любом случае! Будет ли МинВЦ = 0, будет ли будет ли реальное время цикла больше или меньше МинВЦ - разве может быть такое, что ПЛК недоработает запрограммированные действия?
Пожалуйста, давайте просто рассмотрим следующие случаи:
1) МинВЦ = 0. РеалВЦ < МаксВЦ = 1000 мс
Кагбэ самый обычный цикл. Реальное время цикла болтается в пределах 1...10...100...999 мс, никого не волнует его значение (в смысле, точное его значение). Если нужно работать быстрее - программист ломает голову. Но ПЛК "играет, как может", в него не стрелять.
Можно ли считать, что это и есть самый быстрый режим - и что так следует делать всегда, если все (асболютно все) временные задержки отрабатываются кашерно, через системное время и функциональные блоки таймеров?
2) РеалВЦ > МаксВЦ
Вроде бы, судя по описанию, произойдет программный рестарт ПЛК. Верно?
3) МинВЦ > 0
РеалВЦ > МинВЦ
Читаем:
Вложение 8103
Как именно реже? Кратно? Или нет?
Что еще плохого произойдет? Будет ли что-то не выполнено?
Я к чему все веду: хочу верить, что установка МинВЦ = 0 ничего мне не напортит, а также надеюсь, что и при ненулевом МинВЦ ничего страшнее задержки программы на целый МинВЦ не произойдет. Я-то нашлепал устройств, в которых было МинВЦ = 10 мс, а РеалВЦ = 13...14 мс, теперь думаю, рвать ли волосенки или пусть себе работают...
1:1 :)
не зря у немцев делающих симатик расписаны какая инструкция сколько времени занимает. Обсчитали весь проект и точно знают сколько времени он будет крутиться в плк между минимальным и максимальным временем
На самом деле, если добавить к значению цикла ПЛК из модуля статистики функцию сохранения максимального значения, то при наличии коммуникаций и вычислительной загрузки процессора обнаружите время цикла, которое очень сильно отличается от того, которое можно разглядеть визуально.
Иногда в 2-3 раза.
Если подсчитанная граница не устраивает, у них есть возможность сделать прореживание через цикл, через два через четыре. В нашей среде этого можно добиться задачами,к примеру знаем что на какой то кусок кода достаточно десяти мс, а ставим ему двадцать, он выполнится и будет ждать, получится что выполнятся он будет через раз образно
ну сделаю я безумно большое время, а таймер взведу на меньшее. Теряется разрешение. Вот один из примеров, дальше не могу продолжать, зарядку забыл в спецовке, боюсь завтра будильник не сработает :)
По всей видимости, о магическом минимальном времени цикла не знает никто).По всей видимости этот параметр, кроме того что можно делать таймеры k:=k+1; if k>10 then ... , оно влияет на сетевой обмен(замедляет его)))). Т.е как я понял если я ставлю минимально время цикла 50мс, время цикла программы 30ми(допустим а не 20%...) остается 20мс для сетевого обмена. А вот если задачей вызывать программу раз в 50мс то сетевой обмен будет идти раз в 1мс если минимальное время цикла стоит 1мс. Если я не прав поправьте. Или это какой то особый вид работы плк). Кстати если поставить мин. время 50мс то можно ждать пока программа загрузится в плк вечно.Лучше уж тогда задачами вызывать раз в 50мс и мин время задать 0, хоть плк не тупит во время наладки(долгой загрузкой). Вот не знаю как правильно, может кто нибудь подскажет.
да разве в измерениях не борются за точность, чем меньше деление тем выше точность и меньше погрешность. Так же и здесь, манипулятор перекладывающий яйца, во первых может промахнутся беря предмет, во вторых во время не остановившись может сломать захваченый объект это при условии что задали большое время цикла
Уважаемый, я подчеркиваю, что использование столь грубого инструмента, как МинВЦ, для формирования каких-либо задержек, управляющих поведением ПЛК, - считаю плохим тоном.
Тем более, что инструмент этот работает непонятно как, документирован куцо, поясняется немногословно.
Если бы я делал манипулятор, работающий с яйцами (о, ужос!), то все временнЫе промежутки формировал бы с использованием системного времени и всяких там TON-ов и TOF-ов.
Поэтому подвожу итог на сегодня: не вижу смысла в каких-либо значениях МинВЦ, кроме нулевого. Был бы рад ошибаться.
ненулевое время нужно, чтоб выполнилась сама программа, после окончания минимального выполнение будет идти в перемежку с прерываниями на коммутации связи, как то так
"Не верю" :)
Раньше об этом как-то и не думал, поэтому сейчас лишь догадки, не подтвержденные никакими экспериментами. Но я все более склоняюсь к мысли, что МинВЦ придумано именно для вот таких незамысловатых способов организации "размеренной поступи Командора": поставил 100 мс, знаешь наверное, что РеалВЦ составляет единицы миллисекунд, а потом проц просто стоит, насвистывая. И тогда да, удобно знать, что через 100 мс выполнится следующий цикл, в котором ПЛК оживет.
То есть, это для систем, в которых ПЛК, даже со своим МинВЦ в сотню миллисекунд, является самым шустрым в системе. Все остальные процессы относительно вялотекущие. Тогда барабанная дробь по 100 мс является хорошим метрономом.
Резюме для меня: МинВЦ = 0. Это мой случай. Баста.
:) слишком уверены. А предположим когда наступает форс-мажорное событие и включается обработчик который по времени выйдет за рамки ста миллисекунд, Ваша стройная система будет нарушена
Ха. И еще раз "ха" :)
Да я просто олицетворяю скромность, неужто не видно?
Возражу двукратно:
1) Моя система не будет нарушена, ибо я решил, до реабилитации МинВЦ его забить на ноль. Так что речь может идти лишь о некоей условной системе, для которой я тщусь придумать использзование столь нашумевшего МинВЦ.
2) Если бы я реализовывал вот эту самую систему с метрономом из МинВЦ, то я бы, конечно же, поставил такое время, которое заведомо больше любого РеалВЦ. Что такое отработчик события? Всего лишь кусок кода. Он не может длиться вечность :)
Кроме того, какое-то "форс-мажорное" событие наверное заставит нас забыть о спокойной и размеренной жизни под звуки метронома. Тут уж пролет одного-двух циклов и не заметит никто.
Так что система стройная и логичная, по-своему. Дайте же, наконец, МинВЦ шанс остаться в деле! :)
ОВЕН же не скажет, мол, да, ребята, заложили на всяк случ. Видели где-то у кого-то, толком сами не знаем, что с ним делать, но выглядит солидно: МинВЦ, МаксВЦ, все дела...
предположим наваяли прогу с минимумом оптимизации, ну никак по другому.
прога плавает допустим от 15 до 18 мс. а основную её часть нужно выполнять каждые 20 мс, внешние условия требуют, бывает такое.
Может проще зафиксировать минимальный цикл на 20 и не париться? или есть более простое и надёжное решение?
Не знаю почему на форуме Овена столько рекомендаций как время цикла выставлять. У других эта тема не поднимается, ноль всех устраивает, если конечно задача не специфическая.
Предположительно это из-за частых плясок с бубном начали временем цикла играть.
Не надоели разговоры в духе: "лучше быть богатым и здоровым, чем бедным и больным..."???
Что не понятно описано:
http://www.owen.ru/uploads/rp_plk110.160.pdf Стр.68
To drvlas: ну Вас то я учить не в коем случае не стану. Для Вас мы сделали возможность цикла 0 поддержали Task Configuration. Чего возмущаемся - за державу обидно? :)
Не все, к сожалению обладают Вашей квалификацией, надо помнить об этом.
To ВЕТЕР: Так у нас все обсуждается. Свободно, практически без модерации. Да и количество обсуждений и обсуждающих гораздо больше, чем на любом другом форуме. В том числе много специалистов, которые только начинают знакомиться с устройствами такого типа. И мы их не "посылаем" к документации, кроме совсем уж случаев редких, когда все описано.
Холивар закрываем. Будет что по существу сказать или спросить, а не самоутверждаться - велкам. Остальное будет удаляться, как не по существу и засоряющее тему (3 страницы уже).
Вопрос важен. Ответ достаточно прост. Спасибо за ссылку, я бы ее сам не накопал, ибо при чем же тут мой ПЛК100, когда (неплохое) объяснение содержится в документе по ПЛК110-ПЛК160? Документ поизучаю, интересный. Еще раз мерси.
Лично я получил ответ. Он ужасен! Немедленно убираю МинВЦ в ноль. Ибо черными пикселями по белым написано:
Вложение 8108
То есть, ребята, речь идет не о пропуске шага метронома, а о невыполнении предписанной программы! Андрей, не модерируйте мое сообщение, пожалуйста! Это важный вывод:
Если для выполнения заданных программных функций нет специальной необходимости в установлении определенного МинВЦ, то следует установить его в ноль. Это гарантирует, что при любых реальных длительностях цикла процессора будут выполнены все операции (ввод, обработка, вывод, сетевые обмены, работа с файлами и т.д.)
Установка же ненулевого МинВЦ предполпгает обязательный контроль соотношения между МинВЦ и РеалВЦ (см. модуль Статистики).
ну чего за панические выводы. если Вы адекватный человек, то и время поставите соответствующее, к тому же в модуле статистики есть специально для этого переменная, сигнализирующая что время надо увеличить. Это я по картинке. А на вопрос зачем нужно минвц Вы из документа выяснили? По документации я только нашел что при нуле будет не стабилизированное равное 250мкс, а в остальных случаях стабилизированно. И кстати поставив ноль, а программа Ваша всяко будет выполнятся больше, то следуя Вашим выводам у Вас то и будут проблемы с инф.обменом
Андрей. Вы позволите продолжить? Товарищ не понимает :)
Уважаемый capzap, Вы много раз мне подсказывали полезные вещи и я внимательно прислушиваюсь. В данном случае не соглашусь в корне.
Из моего проекта выводов по теме ясно следует, что да, если контролировать соотношение между МинВЦ и РеалВЦ, то можно использовать этот параметр ненулевой. Но! Только в случае, если разработчику нужно для нормального функционирования программы, чтобы ПЛК выполнял все, приостанавливался и ждал удара метронома. Во всех остальных случаях - ответьте мне на вопрос: зачем? Зачем ставить МинВЦ, если потом нужно контролировать, не получилась ли кака? Если есть вероятность, что ПЛК начнет сбоить на голом месте. Зачем Вы лично хотели бы использовать МинВЦ <> 0 в программе, которая работает с временными интервалами через сислибтайм?
Не из приведенной цитаты. Но я выше предположил, что в простых программах, заведя МинВЦ много больше РеалВЦ, вполне можно отрабатывать поведение реального времени - отмерять паузы, проверять таймауты и прочее. Для меня стиль неприемлим, но - возможен.
Другого применения не вижу - и Андрей его не называет. Значит - нет его, другого применения. Так я себе взял на заметку.
Нет-нет, уважаемый! Там сказано, что отключается контроль времени цикла. И никто не заставляет ПЛК "недорабатывать" - он спокойно выполнит все, что ему записано - и тут же начнет новый цикл. Как по мне - очень правильное поведение. Мои контроллеры (не ОВЕН), работающие, конечно, по циклической программе, всегда так и ведут себя.
Да и про 250 мкс - откуда? Никакой цифры при МинВЦ=0 не оговаривается, насколько мне известно. СКОКА выйдет, СТОКА и будет. Или?
Не за что, для ПЛК100 есть такой же документ.
Суть правильная, подача не та.
Время цикла НУЖНО анализировать, и изменять минимальное время цикла, ну или оптимизировать программу и сетевой обмен, чтобы работа была оптимальной.
Вы сможете построить оптимально работу при нулевом цикле. Кто-то нет.
И у тех и у других есть возможность работать как им нравится.
О чем спорить то?
Так вот и прикол в том, что если бы время цикла по умолчанию было в контроллере "0" У пользователей не было бы многих проблем, и вопросов на этом форуме было бы меньше. Я тут и высказываюсь что фиксирование времени цикла пагубная привычка, но и не отрицаю что фиксация времени нужна, но если полез в эти цифры, нужно хорошо понимать как твоя прога работает на этом конкретном контроллере.
Андрей, Вы твёрдо уверены что нужно выставлять время цикла, Вы можите привести в качестве примера другие бренды? В которых по умолчанию цикл зафиксирован на каком либо значении.
Это вообще то аксиома, основное правило для тех кто с контроллерами работает.
А уже в программе добиваешься того, чтобы в нужные моменты цикл был минимальным, а когда скорость не важна, выполняешь времязатратные вычисления или раскидываешь их по разным циклам.
У оптимизированной проги время цикла никогда не будет постоянным, изменяться очень заметно может. Задание времени цикла только навредит.
Коллеги! Андрей, тему рано закрывать! Надо узнать все-таки истину: 1.зачем у Овна ПЛК нужен МинВЦ. 2.Какие последствия будут, если я на большом проекте поставлю МинВЦ в ноль? 3.Будут ли у меня проблемы с пропуском в опросе по интерфейсам при МинВЦ=0.Руководство на ПЛК противоречиво здравому смыслу это толкует.Тема, кстати, очень интересная и важная не только для начинающих. Я как-то раньше не задумывался, следовал рекомендациям руководства на ПЛК. А благодаря этому вопросу начал подумывать, что может drvlas и другие форумчане правы. Мне часто приходится на больших проектах размазывать всю программу по циклам, типа оптимизировать, но это гемор еще тот. Так может правильнее все-таки мин. время цикла поставить в ноль и отключить его контроль. И если я размазал по циклам всю программу и отключу контроль цикла, по идее тогда оптимизированная программа должна быстрее выполнятся(в смысле каждая ее часть в соответствующем цикле), не будет ожидания этого мин. времени цикла(ну если эта часть программы укладывается в МинВЦ. На больших проектах к Siemens-у возвращаться не хочу, полюбились мне очень Codesys и Овен ПЛК. А у Овна контроллеров по-мощнее пока нет, очень очень ждемс вот и приходится адски извращаться, программы под S-300 и S-400 оптимизировать под ПЛК Овен.
Полностью согласен с высказываниями выше. Вопрос и появился по той причине , что по умолчанию стоит время цикла не 0.Измерив время цикла, я увеличил мин. время. Это привело к отрицательному результату, общение с контроллером превратилось в сущий ад. Если что поменять в программе надо , так с этим временем ждать приходилось долго.Причем что с временем программа работала нормально, что без. А временные интервалы если хочется выдерживать почему бы просто не ориентироваться на конфигуратор задач.Выставил вызывать программу раз в 60мс и сиди кури..отмеряй временные интервалы без минимального времени цикла.Главное не вызывать ее чаще чем задача выполняется..Да и еще, в инструкции написано, что задавать минимальное время цикла надо с таким расчетом что бы оставалось ~20% свободного времени, а как понять хватит ли 20% для сетевого обмена?
Ну типа там в модуле Statistic загорится бит (CPU is overloaded). Но у меня при размазанной программе по циклам, один цикл выполняется 5 мс, второй 10мс, третий 25 мс(ну нельзя было равномерно распределить задачи,например). Я ставлю 20 мс(не 25, надо было по уму ставит >25). И...тут бит перегрузки не загорается и даже свободное процессорное время пишет, что есть. Так чего тогда плохого будет, если я уберу мазню по циклам и поставлю МинВЦ в ноль, я пробовал сделать, но не понял хуже стало или лучше,надо сидеть долго... экспериментировать и результаты потом ананизировать:D Внимательно посмотрите на картинку во вложении, там для S-400 первых три строчки(по умолчанию идет МинВЦ=0, но все можно изменять, конечно). Что нам сделать в Овне с МинВЦ, как лучше?
Я так раньше делал, ну что бы типо уложиться в 50мс, т.к. цикл длился 100мс. Я разбил программу по 20мс. Поставил мин. время цикла 25мс. Все работало нормально, но в процессе наладки программа долго загружаться стала , мучился... мучился убрал мазню, выставил время цикла в 0, вызов программы раз в 100мс и стал счастлив).Наладка пошла как по маслу...