PDA

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



sink3d
22.02.2013, 18:58
Что будет если время цикла 150мс, программа вызывается раз в 200мс, в настройках Codesys минимальное время цикла 0 идет обмен по modbus rs-485 и modbus TCP.

Николаев Андрей
22.02.2013, 19:48
не понял что Вы хотели спросить...

sink3d
22.02.2013, 20:59
Хотел узнать зачем нужен параметр минимальное время цикла, если есть возможность вызывать программу например раз в 1с, причем программа непрерывно выполняется в течении 150мс. И как при этом будет осуществлен сетевой опрос плк?ПЛК будет прерываться для сетевого обмена, или сетевой обмен будет идти каждую сек или после 150мс?Да и вообще с этим минимальным временем цикла какая-то беда, при его увеличении время пинга увеличивается, а при установке в 0 вполне приемлемо, причем независимо от того сколько времени выполняется программа.Можно по подробнее где нибудь узнать об этом магическом параметре, в инструкции о нем пару строчек?

Николаев Андрей
23.02.2013, 10:44
Вообще это все описано в руководстве пользователя...
Кратко:
Минимальное время цикла - выставляется пользователем и настраивается им же.
0 - без установки, по факту...
дальше в зависимости от задачи можно увеличивать (большой проект или большая очередь обмена по сети).
Цикл:
Опрос области входов
Выполнение программы пользователя
запись результатов в область выходов
Проведение сетевого обмена в оставшееся время.
Проведение функций самодиагностики и сервиса в оставшееся время.

И потом сначала.
Приоритетность всегда у выполнения программы. А приоритетность обмена и сервиса настраивается разработчиком.

Ну это в кратце. Не считая прерываний, и случаев с псевдомногозадачностью :)

Вполне рабочее время 1 - 5 мс.
На большом проекте видел до 30 мс. Если программа не выполняется за это время - надо еще раз внимательно смотреть на программу.

Если у Вас процессы вялотекущие можно и больше ставить в принципе.

BETEP
23.02.2013, 18:55
Фиксировать время цикла стоит только в том случае, если ваша прога этого требует, задачи разные бывают.

Если у Вас процессы вялотекущие можно и больше ставить в принципе.
ну не стоит этого делать, т.к.

Проведение сетевого обмена в оставшееся время.
Не совсем верно, тут и богу неизвестно какой кусочек эта операция в кодесисе откусывает и как это стыкуется с фиксированным циклом.

Евгений_Томск
23.02.2013, 19:26
Можно ли считать,что правильнее выставлять автоматическое время цикла,т.е. 0 для нормальной работы контроллера? Не совсем понятно для чего нужно выставление определённого времени цикла.Оно всё равно не будет точно калиброванным и не поможет ни ускорить,ни прооптимизировать программу.

Николаев Андрей
23.02.2013, 19:37
Фиксировать время цикла стоит только в том случае, если ваша прога этого требует, задачи разные бывают.

ну не стоит этого делать, т.к.

Не совсем верно, тут и богу неизвестно какой кусочек эта операция в кодесисе откусывает и как это стыкуется с фиксированным циклом.
Ну почему же только богу. Еще нашему программисту :)


Можно ли считать,что правильнее выставлять автоматическое время цикла,т.е. 0 для нормальной работы контроллера? Не совсем понятно для чего нужно выставление определённого времени цикла.Оно всё равно не будет точно калиброванным и не поможет ни ускорить,ни прооптимизировать программу.
Не время цикла оптимизирует программу. А в зависимости от программы выставляется время цикла. Хотя программу бы лучше предварительно оптимизировать.
Я рекомендую выставлять время цикла. Но естественно опыт каждому подскажет как лучше.

sink3d
23.02.2013, 22:01
Если выставить время цикла 50мс, то пинг и время загрузки программы увеличивается. А если поставить время цикла 0 и просто вызывать программу , которая выполняется в течении 150мс раз в 200мс все работает быстро, ping 4мс.Зачем тогда нужен этот параметр(минимальное время цикла)?Да и что сделает контроллер если программа выполняется долго(больше установленного минимального времени цикла но меньше максимального) будет ждать выполнения программы , а потом проведет сетевой обмен?
Почему ограничение минимального времени цикла 50мс?И почему работать с программой приятнее если минимальное время цикла стоит 1мс, программа выполняется в течении 20мс, программа вызывается раз в 24мс(через задачи), чем время минимального цикла 24мс, программа выполняется за 20мс(но в последнем варианте тупит сетевой обмен).

drvlas
25.02.2013, 10:45
Я рекомендую выставлять время цикла. Но естественно опыт каждому подскажет как лучше."И опыт, сын ошибок трудных..."
Хорошо бы не изобретать велосипед, если уж хоть вашему программисту что-то известно.

Меня тоже заинтересовала тема, т.к. мой ПЛК100, несколько неожиданно для меня, вышел на реальное время цикла 13-14 мс - и приходится подумать, что там и как.
И хотелось бы понять, как можно грамотно использовать конфигурацию ПЛК, в т.ч. вот этот самый параметр, минимальное время цикла. Пока не очень понятно. Позвольте я предположу, для начала:

1) Минимальное время цикла можно использовать в случае, если по количеству циклов мы отмеряем временнЫе параметры работы пользовательской программы. То есть, поставили, скажем, 20 мс и рассчитываем, что "через 5 циклов" = "примерно через 100 мс". Или "на следующем цикле работы" = "через 20 мс".
Я так не делаю, но, ИМХО, так можно. Или нельзя? Вот вопрос № 1.

2) А если этот метод задания времени не использовать, то для чего и как еще нужно минимальное время цикла? Каковы Ваши рекомендации, Андрей?

3) Будет ли объяснение от вашего программиста фактам, изложенным в сообщении коллеги sink3d? Вопрос был 23-го, там, ясен перец, не до наших глупостёв, Россия празднует коммунистические мифы. Но тут уж близится днюха "клары люксембург"...

Николаев Андрей
25.02.2013, 13:46
drvlas как всегда с юмором. Где-то с иронией.
Ответы на вопросы sink3d были в посте выше.
Цикл 0 мс. Контроллер забивает на все, и делает просто: выполняет программу, например 500 мс, ведет сетевой обмен, делает диагностику. И он плевать хотел, нужно ли Вам через 100 мс проверить триггер или таймер или данные с дискретного входа. А там концевичек станка по резке металла сработал о вылете плиты в это время...
Если программа выполняется дольше - времени на сетевой обмен и на сервис у ПЛК не останется, и ПЛК все бросит и начнет все сначала.
Если Вы увеличили цикл ПЛК до 100 мс - время сетевого обмена ЕСТЕСТВЕННО увеличится. По тому как в принципе браться за сетевой обмен контроллер будет не чаще, чем раз в 100 мс. А если проект у Вас большой, то записывая по кусочку раз в 100 мс можно записывать долго.
Все определяется знаниями о принципах работы устройств такого типа, и здравым смыслом. Рецепта на все случаи я при желании дать не смогу.
Если очень хочется активно изучить вопрос и подискутировать - рекомендую начать с книги Петрова Игоря. Он все очень хорошо описывает.
Принцип работы ПЛК В КОРНЕ отличается от принципов работы ПК. Это надо понять и начать этим пользоваться.

Ну и готовимся к празднованию дня заслуг Розы Цеткель.

drvlas
25.02.2013, 16:28
drvlas как всегда с юморомМы же не изменяемся по сути. Только шлифуем старые недостатки.


Ответы на вопросы sink3d были в посте вышеНаверное, он не все понял, потому и продолжал спрашивать. Так и я вот сейчас.
Давайте я уточню.
Книгу Петрова изучил, что такое цикл работы ПЛК - знаю. Но и знаю также, что нормальным способом организации временных задержек является использование таймеров. В частности, системный таймер, дающий системное время, вполне себе годное решение.
Поэтому мне лично и в голову не придет надеятся на определенную скорость работы процессора, прохождения его программных циклов. И таймаут на сработку концевичка я организую без привязки к параметру "минимальное время цикла" (МинВЦ) - тем более, что этот параметр я так и не понимаю в полной мере. Даже после Ваших терпеливых разъяснений.
Ведь Вы пишете о том, как работает ПЛК при МинВЦ = 0 - а это не интересно, это самый обычный режим работы большинства процессоров. А я спрашивал, для чего может понадобиься МинВЦ, если не пробовать опираться на него для организации временных пауз.
Мое предположение: не нужен тогда МинВЦ. Вообще не нужен. Прав я или нет?

А дальше я, честно, совсем запутался.

Если программа выполняется дольше - времени на сетевой обмен и на сервис у ПЛК не останется, и ПЛК все бросит и начнет все сначалаМинуточку! Я почему-то думал, что свой цикл ПЛК оттарабанит в любом случае! Будет ли МинВЦ = 0, будет ли будет ли реальное время цикла больше или меньше МинВЦ - разве может быть такое, что ПЛК недоработает запрограммированные действия?
Пожалуйста, давайте просто рассмотрим следующие случаи:

1) МинВЦ = 0. РеалВЦ < МаксВЦ = 1000 мс
Кагбэ самый обычный цикл. Реальное время цикла болтается в пределах 1...10...100...999 мс, никого не волнует его значение (в смысле, точное его значение). Если нужно работать быстрее - программист ломает голову. Но ПЛК "играет, как может", в него не стрелять.
Можно ли считать, что это и есть самый быстрый режим - и что так следует делать всегда, если все (асболютно все) временные задержки отрабатываются кашерно, через системное время и функциональные блоки таймеров?

2) РеалВЦ > МаксВЦ
Вроде бы, судя по описанию, произойдет программный рестарт ПЛК. Верно?

3) МинВЦ > 0
РеалВЦ > МинВЦ
Читаем:
8103
Как именно реже? Кратно? Или нет?
Что еще плохого произойдет? Будет ли что-то не выполнено?

Я к чему все веду: хочу верить, что установка МинВЦ = 0 ничего мне не напортит, а также надеюсь, что и при ненулевом МинВЦ ничего страшнее задержки программы на целый МинВЦ не произойдет. Я-то нашлепал устройств, в которых было МинВЦ = 10 мс, а РеалВЦ = 13...14 мс, теперь думаю, рвать ли волосенки или пусть себе работают...


Ну и готовимся к празднованию дня заслуг Розы Цеткель.1:1 :)

capzap
25.02.2013, 16:38
не зря у немцев делающих симатик расписаны какая инструкция сколько времени занимает. Обсчитали весь проект и точно знают сколько времени он будет крутиться в плк между минимальным и максимальным временем

drvlas
25.02.2013, 16:42
не зря у немцев делающих симатик расписаны какая инструкция сколько времени занимаетА может и зря. Ну как можно точно знать (да и зачем?), сколько пройдет времени при выполнении 100500 команд с ветвтелниями и переходами? Самое главное: зачем? Кроме верхней границы реального времени цикла - что может волновать разработчика?
Я не понимаю.

lara197a
25.02.2013, 16:46
На самом деле, если добавить к значению цикла ПЛК из модуля статистики функцию сохранения максимального значения, то при наличии коммуникаций и вычислительной загрузки процессора обнаружите время цикла, которое очень сильно отличается от того, которое можно разглядеть визуально.
Иногда в 2-3 раза.

drvlas
25.02.2013, 17:20
На самом деле, если добавить к значению цикла ПЛК из модуля статистики функцию сохранения максимального значенияЯ именно такой метод и использовал. То есть, я знал пиковое значение, а в онлайне наблюдал обычные (часто повторяющиеся) значения.

Но это не отвечает на мои вопросы :)

capzap
25.02.2013, 17:25
А может и зря. Ну как можно точно знать (да и зачем?), сколько пройдет времени при выполнении 100500 команд с ветвтелниями и переходами? Самое главное: зачем? Кроме верхней границы реального времени цикла - что может волновать разработчика?
Я не понимаю.

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

drvlas
25.02.2013, 17:53
Если подсчитанная граница не устраиваетСмысл, брат, назови смысл?
зачем иметь вообще параметр МинВЦ?

capzap
25.02.2013, 18:07
ну сделаю я безумно большое время, а таймер взведу на меньшее. Теряется разрешение. Вот один из примеров, дальше не могу продолжать, зарядку забыл в спецовке, боюсь завтра будильник не сработает :)

drvlas
25.02.2013, 18:21
дальше не могу продолжать, зарядку забыл в спецовке, боюсь завтра будильник не сработает :)Ну, тогда и продолжим. Повторюсь: я не рассматриваю вариант, когда время цикла служит таймерным целям. Ищу ответ, зачем нужен МинВЦ кроме того

sink3d
25.02.2013, 22:19
По всей видимости, о магическом минимальном времени цикла не знает никто).По всей видимости этот параметр, кроме того что можно делать таймеры k:=k+1; if k>10 then ... , оно влияет на сетевой обмен(замедляет его)))). Т.е как я понял если я ставлю минимально время цикла 50мс, время цикла программы 30ми(допустим а не 20%...) остается 20мс для сетевого обмена. А вот если задачей вызывать программу раз в 50мс то сетевой обмен будет идти раз в 1мс если минимальное время цикла стоит 1мс. Если я не прав поправьте. Или это какой то особый вид работы плк). Кстати если поставить мин. время 50мс то можно ждать пока программа загрузится в плк вечно.Лучше уж тогда задачами вызывать раз в 50мс и мин время задать 0, хоть плк не тупит во время наладки(долгой загрузкой). Вот не знаю как правильно, может кто нибудь подскажет.

capzap
26.02.2013, 07:35
да разве в измерениях не борются за точность, чем меньше деление тем выше точность и меньше погрешность. Так же и здесь, манипулятор перекладывающий яйца, во первых может промахнутся беря предмет, во вторых во время не остановившись может сломать захваченый объект это при условии что задали большое время цикла

drvlas
26.02.2013, 09:31
Уважаемый, я подчеркиваю, что использование столь грубого инструмента, как МинВЦ, для формирования каких-либо задержек, управляющих поведением ПЛК, - считаю плохим тоном.
Тем более, что инструмент этот работает непонятно как, документирован куцо, поясняется немногословно.

Если бы я делал манипулятор, работающий с яйцами (о, ужос!), то все временнЫе промежутки формировал бы с использованием системного времени и всяких там TON-ов и TOF-ов.

Поэтому подвожу итог на сегодня: не вижу смысла в каких-либо значениях МинВЦ, кроме нулевого. Был бы рад ошибаться.

capzap
26.02.2013, 10:12
Уважаемый, я подчеркиваю, что использование столь грубого инструмента, как МинВЦ, для формирования каких-либо задержек, управляющих поведением ПЛК, - считаю плохим тоном.
Тем более, что инструмент этот работает непонятно как, документирован куцо, поясняется немногословно.

Если бы я делал манипулятор, работающий с яйцами (о, ужос!), то все временнЫе промежутки формировал бы с использованием системного времени и всяких там TON-ов и TOF-ов.

Поэтому подвожу итог на сегодня: не вижу смысла в каких-либо значениях МинВЦ, кроме нулевого. Был бы рад ошибаться.

Я уже не говорю про времена, я говорю о дискретных сигналов, пример с яйцами о переднем фронте. Наступило реальное событие, а плк увидит (может увидеть а может и все хорошо сложится) в следующем цикле, а если время большое то это приведет к ошибкам

drvlas
26.02.2013, 10:29
пример с яйцами о переднем фронтеНу, доктор, у Вас же тоже примерчики...


Наступило реальное событие, а плк увидит (может увидеть а может и все хорошо сложится) в следующем цикле, а если время большое то это приведет к ошибкамТак нулевое время, коллега! Нулевое. И ПЛК крутится максимально быстро. И вопрос: а зачем тогда ненулевое? Вот ведь над чем бьется мИсль прогрессивного человечества.

capzap
26.02.2013, 11:35
ненулевое время нужно, чтоб выполнилась сама программа, после окончания минимального выполнение будет идти в перемежку с прерываниями на коммутации связи, как то так

drvlas
26.02.2013, 11:43
"Не верю" :)

Раньше об этом как-то и не думал, поэтому сейчас лишь догадки, не подтвержденные никакими экспериментами. Но я все более склоняюсь к мысли, что МинВЦ придумано именно для вот таких незамысловатых способов организации "размеренной поступи Командора": поставил 100 мс, знаешь наверное, что РеалВЦ составляет единицы миллисекунд, а потом проц просто стоит, насвистывая. И тогда да, удобно знать, что через 100 мс выполнится следующий цикл, в котором ПЛК оживет.
То есть, это для систем, в которых ПЛК, даже со своим МинВЦ в сотню миллисекунд, является самым шустрым в системе. Все остальные процессы относительно вялотекущие. Тогда барабанная дробь по 100 мс является хорошим метрономом.

Резюме для меня: МинВЦ = 0. Это мой случай. Баста.

capzap
26.02.2013, 11:49
:) слишком уверены. А предположим когда наступает форс-мажорное событие и включается обработчик который по времени выйдет за рамки ста миллисекунд, Ваша стройная система будет нарушена

drvlas
26.02.2013, 12:00
:) слишком увереныХа. И еще раз "ха" :)
Да я просто олицетворяю скромность, неужто не видно?


А предположим когда наступает форс-мажорное событие и включается обработчик который по времени выйдет за рамки ста миллисекунд, Ваша стройная система будет нарушенаВозражу двукратно:

1) Моя система не будет нарушена, ибо я решил, до реабилитации МинВЦ его забить на ноль. Так что речь может идти лишь о некоей условной системе, для которой я тщусь придумать использзование столь нашумевшего МинВЦ.

2) Если бы я реализовывал вот эту самую систему с метрономом из МинВЦ, то я бы, конечно же, поставил такое время, которое заведомо больше любого РеалВЦ. Что такое отработчик события? Всего лишь кусок кода. Он не может длиться вечность :)
Кроме того, какое-то "форс-мажорное" событие наверное заставит нас забыть о спокойной и размеренной жизни под звуки метронома. Тут уж пролет одного-двух циклов и не заметит никто.
Так что система стройная и логичная, по-своему. Дайте же, наконец, МинВЦ шанс остаться в деле! :)
ОВЕН же не скажет, мол, да, ребята, заложили на всяк случ. Видели где-то у кого-то, толком сами не знаем, что с ним делать, но выглядит солидно: МинВЦ, МаксВЦ, все дела...

sink3d
26.02.2013, 16:18
ОВЕН же не скажет, мол, да, ребята, заложили на всяк случ. Видели где-то у кого-то, толком сами не знаем, что с ним делать, но выглядит солидно: МинВЦ, МаксВЦ, все дела...
Прямо в точку, поэтому ОВЕН и молчит и в инструкциях вскользь этот параметр упоминает.Ладно ждем комментариев официальных представителей овен...

BETEP
26.02.2013, 23:29
предположим наваяли прогу с минимумом оптимизации, ну никак по другому.
прога плавает допустим от 15 до 18 мс. а основную её часть нужно выполнять каждые 20 мс, внешние условия требуют, бывает такое.
Может проще зафиксировать минимальный цикл на 20 и не париться? или есть более простое и надёжное решение?
Не знаю почему на форуме Овена столько рекомендаций как время цикла выставлять. У других эта тема не поднимается, ноль всех устраивает, если конечно задача не специфическая.
Предположительно это из-за частых плясок с бубном начали временем цикла играть.

Николаев Андрей
27.02.2013, 08:57
Не надоели разговоры в духе: "лучше быть богатым и здоровым, чем бедным и больным..."???

Что не понятно описано:
http://www.owen.ru/uploads/rp_plk110.160.pdf Стр.68

To drvlas: ну Вас то я учить не в коем случае не стану. Для Вас мы сделали возможность цикла 0 поддержали Task Configuration. Чего возмущаемся - за державу обидно? :)
Не все, к сожалению обладают Вашей квалификацией, надо помнить об этом.

To ВЕТЕР: Так у нас все обсуждается. Свободно, практически без модерации. Да и количество обсуждений и обсуждающих гораздо больше, чем на любом другом форуме. В том числе много специалистов, которые только начинают знакомиться с устройствами такого типа. И мы их не "посылаем" к документации, кроме совсем уж случаев редких, когда все описано.

Холивар закрываем. Будет что по существу сказать или спросить, а не самоутверждаться - велкам. Остальное будет удаляться, как не по существу и засоряющее тему (3 страницы уже).

drvlas
27.02.2013, 09:52
Вопрос важен. Ответ достаточно прост. Спасибо за ссылку, я бы ее сам не накопал, ибо при чем же тут мой ПЛК100, когда (неплохое) объяснение содержится в документе по ПЛК110-ПЛК160? Документ поизучаю, интересный. Еще раз мерси.

Лично я получил ответ. Он ужасен! Немедленно убираю МинВЦ в ноль. Ибо черными пикселями по белым написано:
8108
То есть, ребята, речь идет не о пропуске шага метронома, а о невыполнении предписанной программы! Андрей, не модерируйте мое сообщение, пожалуйста! Это важный вывод:

Если для выполнения заданных программных функций нет специальной необходимости в установлении определенного МинВЦ, то следует установить его в ноль. Это гарантирует, что при любых реальных длительностях цикла процессора будут выполнены все операции (ввод, обработка, вывод, сетевые обмены, работа с файлами и т.д.)
Установка же ненулевого МинВЦ предполпгает обязательный контроль соотношения между МинВЦ и РеалВЦ (см. модуль Статистики).

capzap
27.02.2013, 10:24
ну чего за панические выводы. если Вы адекватный человек, то и время поставите соответствующее, к тому же в модуле статистики есть специально для этого переменная, сигнализирующая что время надо увеличить. Это я по картинке. А на вопрос зачем нужно минвц Вы из документа выяснили? По документации я только нашел что при нуле будет не стабилизированное равное 250мкс, а в остальных случаях стабилизированно. И кстати поставив ноль, а программа Ваша всяко будет выполнятся больше, то следуя Вашим выводам у Вас то и будут проблемы с инф.обменом

drvlas
27.02.2013, 11:04
Андрей. Вы позволите продолжить? Товарищ не понимает :)

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


если Вы адекватный человек, то и время поставите соответствующее, к тому же в модуле статистики есть специально для этого переменная, сигнализирующая что время надо увеличитьИз моего проекта выводов по теме ясно следует, что да, если контролировать соотношение между МинВЦ и РеалВЦ, то можно использовать этот параметр ненулевой. Но! Только в случае, если разработчику нужно для нормального функционирования программы, чтобы ПЛК выполнял все, приостанавливался и ждал удара метронома. Во всех остальных случаях - ответьте мне на вопрос: зачем? Зачем ставить МинВЦ, если потом нужно контролировать, не получилась ли кака? Если есть вероятность, что ПЛК начнет сбоить на голом месте. Зачем Вы лично хотели бы использовать МинВЦ <> 0 в программе, которая работает с временными интервалами через сислибтайм?


А на вопрос зачем нужно минвц Вы из документа выяснили?Не из приведенной цитаты. Но я выше предположил, что в простых программах, заведя МинВЦ много больше РеалВЦ, вполне можно отрабатывать поведение реального времени - отмерять паузы, проверять таймауты и прочее. Для меня стиль неприемлим, но - возможен.
Другого применения не вижу - и Андрей его не называет. Значит - нет его, другого применения. Так я себе взял на заметку.


я только нашел что при нуле будет не стабилизированное равное 250мкс, а в остальных случаях стабилизированно. И кстати поставив ноль, а программа Ваша всяко будет выполнятся больше, то следуя Вашим выводам у Вас то и будут проблемы с инф.обменомНет-нет, уважаемый! Там сказано, что отключается контроль времени цикла. И никто не заставляет ПЛК "недорабатывать" - он спокойно выполнит все, что ему записано - и тут же начнет новый цикл. Как по мне - очень правильное поведение. Мои контроллеры (не ОВЕН), работающие, конечно, по циклической программе, всегда так и ведут себя.
Да и про 250 мкс - откуда? Никакой цифры при МинВЦ=0 не оговаривается, насколько мне известно. СКОКА выйдет, СТОКА и будет. Или?

Николаев Андрей
27.02.2013, 11:10
Вопрос важен. Ответ достаточно прост. Спасибо за ссылку, я бы ее сам не накопал, ибо при чем же тут мой ПЛК100, когда (неплохое) объяснение содержится в документе по ПЛК110-ПЛК160? Документ поизучаю, интересный. Еще раз мерси.

Не за что, для ПЛК100 есть такой же документ.



Лично я получил ответ. Он ужасен! Немедленно убираю МинВЦ в ноль. Ибо черными пикселями по белым написано:
8108
То есть, ребята, речь идет не о пропуске шага метронома, а о невыполнении предписанной программы! Андрей, не модерируйте мое сообщение, пожалуйста! Это важный вывод:

Если для выполнения заданных программных функций нет специальной необходимости в установлении определенного МинВЦ, то следует установить его в ноль. Это гарантирует, что при любых реальных длительностях цикла процессора будут выполнены все операции (ввод, обработка, вывод, сетевые обмены, работа с файлами и т.д.)
Установка же ненулевого МинВЦ предполпгает обязательный контроль соотношения между МинВЦ и РеалВЦ (см. модуль Статистики).
Суть правильная, подача не та.
Время цикла НУЖНО анализировать, и изменять минимальное время цикла, ну или оптимизировать программу и сетевой обмен, чтобы работа была оптимальной.

Вы сможете построить оптимально работу при нулевом цикле. Кто-то нет.
И у тех и у других есть возможность работать как им нравится.
О чем спорить то?

BETEP
27.02.2013, 12:53
Так вот и прикол в том, что если бы время цикла по умолчанию было в контроллере "0" У пользователей не было бы многих проблем, и вопросов на этом форуме было бы меньше. Я тут и высказываюсь что фиксирование времени цикла пагубная привычка, но и не отрицаю что фиксация времени нужна, но если полез в эти цифры, нужно хорошо понимать как твоя прога работает на этом конкретном контроллере.
Андрей, Вы твёрдо уверены что нужно выставлять время цикла, Вы можите привести в качестве примера другие бренды? В которых по умолчанию цикл зафиксирован на каком либо значении.


Если для выполнения заданных программных функций нет специальной необходимости в установлении определенного МинВЦ, то следует установить его в ноль.
Это вообще то аксиома, основное правило для тех кто с контроллерами работает.
А уже в программе добиваешься того, чтобы в нужные моменты цикл был минимальным, а когда скорость не важна, выполняешь времязатратные вычисления или раскидываешь их по разным циклам.
У оптимизированной проги время цикла никогда не будет постоянным, изменяться очень заметно может. Задание времени цикла только навредит.

Olegis
27.02.2013, 14:27
Коллеги! Андрей, тему рано закрывать! Надо узнать все-таки истину: 1.зачем у Овна ПЛК нужен МинВЦ. 2.Какие последствия будут, если я на большом проекте поставлю МинВЦ в ноль? 3.Будут ли у меня проблемы с пропуском в опросе по интерфейсам при МинВЦ=0.Руководство на ПЛК противоречиво здравому смыслу это толкует.Тема, кстати, очень интересная и важная не только для начинающих. Я как-то раньше не задумывался, следовал рекомендациям руководства на ПЛК. А благодаря этому вопросу начал подумывать, что может drvlas и другие форумчане правы. Мне часто приходится на больших проектах размазывать всю программу по циклам, типа оптимизировать, но это гемор еще тот. Так может правильнее все-таки мин. время цикла поставить в ноль и отключить его контроль. И если я размазал по циклам всю программу и отключу контроль цикла, по идее тогда оптимизированная программа должна быстрее выполнятся(в смысле каждая ее часть в соответствующем цикле), не будет ожидания этого мин. времени цикла(ну если эта часть программы укладывается в МинВЦ. На больших проектах к Siemens-у возвращаться не хочу, полюбились мне очень Codesys и Овен ПЛК. А у Овна контроллеров по-мощнее пока нет, очень очень ждемс вот и приходится адски извращаться, программы под S-300 и S-400 оптимизировать под ПЛК Овен.

sink3d
27.02.2013, 14:28
Полностью согласен с высказываниями выше. Вопрос и появился по той причине , что по умолчанию стоит время цикла не 0.Измерив время цикла, я увеличил мин. время. Это привело к отрицательному результату, общение с контроллером превратилось в сущий ад. Если что поменять в программе надо , так с этим временем ждать приходилось долго.Причем что с временем программа работала нормально, что без. А временные интервалы если хочется выдерживать почему бы просто не ориентироваться на конфигуратор задач.Выставил вызывать программу раз в 60мс и сиди кури..отмеряй временные интервалы без минимального времени цикла.Главное не вызывать ее чаще чем задача выполняется..Да и еще, в инструкции написано, что задавать минимальное время цикла надо с таким расчетом что бы оставалось ~20% свободного времени, а как понять хватит ли 20% для сетевого обмена?

Olegis
27.02.2013, 14:53
а и еще, в инструкции написано, что задавать минимальное время цикла надо с таким расчетом что бы оставалось ~20% свободного времени, а как понять хватит ли 20% для сетевого обмена?

Ну типа там в модуле Statistic загорится бит (CPU is overloaded). Но у меня при размазанной программе по циклам, один цикл выполняется 5 мс, второй 10мс, третий 25 мс(ну нельзя было равномерно распределить задачи,например). Я ставлю 20 мс(не 25, надо было по уму ставит >25). И...тут бит перегрузки не загорается и даже свободное процессорное время пишет, что есть. Так чего тогда плохого будет, если я уберу мазню по циклам и поставлю МинВЦ в ноль, я пробовал сделать, но не понял хуже стало или лучше,надо сидеть долго... экспериментировать и результаты потом ананизировать:D Внимательно посмотрите на картинку во вложении, там для S-400 первых три строчки(по умолчанию идет МинВЦ=0, но все можно изменять, конечно). Что нам сделать в Овне с МинВЦ, как лучше?

sink3d
27.02.2013, 15:36
Я так раньше делал, ну что бы типо уложиться в 50мс, т.к. цикл длился 100мс. Я разбил программу по 20мс. Поставил мин. время цикла 25мс. Все работало нормально, но в процессе наладки программа долго загружаться стала , мучился... мучился убрал мазню, выставил время цикла в 0, вызов программы раз в 100мс и стал счастлив).Наладка пошла как по маслу...

smk1635
27.02.2013, 16:56
Да и еще, в инструкции написано, что задавать минимальное время цикла надо с таким расчетом что бы оставалось ~20% свободного времени, а как понять хватит ли 20% для сетевого обмена?

Правильно, ни как. Только методом тыка.
Той зимой монтировали оборудование. Все отладили. Все прекрасно работало. Летом, в цехе температура зашкалила за +45 градусов, пошли периодические отваливания по обмену. Пока не увеличил время с 30 мс до 50 проблема не решилась. И как тут просчитаешь?

Olegis
27.02.2013, 17:08
Явыставил время цикла в 0, вызов программы раз в 100мс и стал счастлив)

Сделал как sink3d на большом проекте, визуализация Codesys HMI стала летать! :eek: До этого еле ползала, переходы между экранами ждал по 3 секунды. Может это конечно будет в ушерб обмену по сети, но я его проверить толком не могу сейчас, надо время. У меня время цикла без оптимизации получалось 51мс. Никому нельзя доверять!?:D (в смысле мануалу на ПЛК).

BETEP
27.02.2013, 19:48
:) А мне доверять можно?

Фиксировать время цикла стоит только в том случае, если ваша прога этого требует, задачи разные бывают.

Евгений_Томск
27.02.2013, 20:07
Поддерживаю мнение коллег о том, что значение времени цикла на ПЛК в существующих условиях надо ставить в "условный" 0, а оптимизацию программы каждый выполнит уже самостоятельно контролируя реальное время цикла через модуль статистики или через встроенные часы.

Не совсем понятна позиция Андрея в стремлении закрыть обсуждение.

Ваша компания в дополнение к хорошим продуктам,создала и поддерживает живой , интересный форум. Как разработчики и производители, Вы можете черпать огромное количество идей и предложений из дискуссий. Ведь чувствуется, что большинство постоянных участников форума - это инициативные и знающие люди с большим опытом работы в сфере автоматизации и бизнеса. Мы все нужну друг другу в широком смысле слова. И возможно в первую очередь из-за того ,что нам это интересно.

По-существу,обобщая мнения, наверно можно предложить коллегам из компании Овен:

1. Заменить в конфигурации ПЛК значение "0" на "AUTO" .Так будет всем понятнее,что речь не о мифическом нулевом времени цикла,а об автонастраивающемся режиме.

2.По умолчанию в ПЛК установить режим "AUTO". Т.к. из имеющейся изначально 1мс проект выходит очень быстро.Как правило 3...5мс или 10...15 мс ,если есть кучка MODBUS регистров именно в ПЛК конфигурации. Считаю эти цифры вполне нормальными.

Информация и обмен ею важны и нужны.Посмотрел рост оборотов компании "Mail.ru" в этом году : около 40процентов при сумме около 7млрд.Основной прирост из принадлежащих им соцсетей "однок...и" и частично" в к...", а не от рекламы.
Представляю какие обороты у "Goog.."

Поэтому считаю что лучше открывать , чем закрывать.И готовиться к работе с гигатоннами информации:) Мы все "в одной лодке"... современной и автоматизированной.И догонять есть кого...

drvlas
27.02.2013, 20:29
Не совсем понятна позиция Андрея в стремлении закрыть обсуждениеНу, здесь уже некая реакция на мои едкие высказывания. Готов извиниться, если это задевает представителей компании ОВЕН. Как-то мне казалось (и кажется), что с юмором легче и интереснее обсуждать даже сУрйозные вопросы :)

Рад, что коллеги поддержали. Не очень надеюсь, что ОВЕН бросится исправлять Руководства и дефолтное значение МинВЦ - у них там тоже хватает работы и на старые ПЛК уже внимание не то (хотя и очень жаль, что так получается).
Но как-то дать разработчикам понять, что по умолчанию следует поставить МинВЦ = 0, и лишь при специальной потребности играться с ненулевым - поможет даннная тема. Внимательный найдет.

Титаренко Михаил
22.08.2013, 16:32
Я бы так описал логику работы:
Если задано минимальное время цикла: 1. Выполняется программа пользователя. 2. Оставшееся время идёт на сетевой обмен. Если все посылки ушли - это замечательно. Если ушли не все посылки, то выполняем пункт "1", а при случае (в конце следующего цикла) доотправим оставшиеся. Подводный камень - буфер между основным процессором и процессором переферии имеет ограниченный объём. Увеличив в 10 раз время цикла - имеем падение в 10 раз скорости передачи. Т.е. если раньше мы упирались в потерю данных из-за того, что часто передавали от центрального процессора к переферийному процессору, то теперь упрёмся в то что переферийный процессор не успевает отсылать данные.
Т.е. - берега узкие, куда ни кинь - всюду клин.

Я вижу только одно применение минимального время цикла, которое уже упоминали в этой ветке: Не давать процессору бесполезно греть воздух (заставить простаивать большую часть времени). Не рационально? Зато не требует ни анализа исходников, ни редактирования программы.

Андрей007
11.10.2013, 15:41
Подскажите, а как вы смотрите реальное время цикла программы?

petera
11.10.2013, 16:05
Подскажите, а как вы смотрите реальное время цикла программы?

VAR
delta: TIME;
prevScanTime: TIME;
END_VAR

(*Время цикла*)
delta := TIME() - prevScanTime;
prevScanTime := TIME();

sink3d
14.10.2013, 17:15
Время прогона программы больше 50мс, пусть будет 60мс. Меня устраивает время реакции системы 240мс.Какой тогда выход из ситуации?
У меня есть несколько вариантов:

1. Поставить время минимального цикла 50мс.Разбить программу с помощью case, скажем по 48мс(2мс на сетевой обмен опрос входов/выходов и.т.д.),
2. Поставить время минимального цикла 2мс(на сетевой обмен опрос входов/выходов и.т.д.), основную программу вызывать раз в 120мс(через конфигуратор задач),
3. Использовать более быстрый плк.

2й вариант меня смущает, но работает.Причем флаг перегрузки CPU не горит. Кто сталкивался, хотелось бы комментариев.

capzap
14.10.2013, 19:41
Кто сталкивался, хотелось бы комментариев.

Мое мнение, Вам вредно читать эту тему

Sergey666
14.10.2013, 21:36
Шо вы там написали на 50мс ????
Спутники контролируете ???? Может метеоритов траекторию подсчитываете ???? Или может операторами цикла по детски заигрались????

sink3d
15.10.2013, 21:03
После тестирования на реальном плк была опровергнута идея работы на плк овен с временем цикла больше >50(второй пункт #49) - глючит сетевой обмен. Поэтому если программа большая, то остается размазывать ее на более мелкие циклы по 15-20мс(если больше , то тормозит сетевой обмен),например используя оператор "case".

capzap
15.10.2013, 21:12
После тестирования на реальном плк была опровергнута идея работы на плк овен с временем цикла больше >50(второй пункт #49) - глючит сетевой обмен. Поэтому если программа большая, то остается размазывать ее на более мелкие циклы по 15-20мс(если больше , то тормозит сетевой обмен),например используя оператор "case".

если в конфигурацию добавить модуль статистики, он показывает количество свободных в цикле сотен микросекунд (незанятых выполнением программы). У Вас сколько такого свободного времени при мин.цикле 15-20мс?

lara197a
15.10.2013, 21:29
Боюсь да же спросить, чего там понаписано?
Каким объектом управляете?

В модуле статистик время не в мс, а в сотнях мс. У Вас точно цикл 50мс?

sink3d
16.10.2013, 07:50
Модуль статистики при цикле 15ms показывает 400(в сотнях) свободного времени(по инструкции 20% должно быть). Тормозит и глючит - это разные вещи.Тормозит - это когда долго ждешь загрузки программы в плк(во время наладки).
60 механизмов опиши, уже время цикла 10мс, это без использования for...(300входов/выходов) Да, точно 51мс получилась(на маленьких объектах не возникало таких проблем).

Sergey666
16.10.2013, 09:31
Жуткие цифры ... 51мс .

Прям как в рекламе :- "Ты че делаешь ? -Ни че , а мог-бы "

capzap
16.10.2013, 09:58
Да че жуткого, если не критично, писалось же что нужно укладываться в 240мс, если за пятьдесят опрашивает все датчики и всем выходам раздает команды, как минимум три раза это сделать можно, это ни как не повлияет на работу, можно не заморачиваться

Sergey666
16.10.2013, 10:41
Да , в принципе все нормально , как-бы .
Некоторое время назад работал с итальянскими ПЛК Carel , там проц 16 бит и время цикла "типовое" 250 мс .
С некоторыми счетчиками воды проблеммы были - импульсы пропускал.

sink3d
16.10.2013, 11:22
Я и говорю, что все нормально.У меня время реакции 2с не критично. Вот только Ehernet начинает пропускать пакеты, если не принять меры по уменьшению времени прогона программы.Разработчики плк говорят, что все будет нормально, если уложитесь в 15-20мс. Поэтому и поднял вопрос на обсуждение.Может быть как-то обойти это ограничение можно(разбивать программу муторно).(

capzap
16.10.2013, 11:43
Я и говорю, что все нормально.У меня время реакции 2с не критично. Вот только Ehernet начинает пропускать пакеты, если не принять меры по уменьшению времени прогона программы.Разработчики плк говорят, что все будет нормально, если уложитесь в 15-20мс. Поэтому и поднял вопрос на обсуждение.Может быть как-то обойти это ограничение можно(разбивать программу муторно).(

по езернет что передается ? Пробовали через открытие сокета в самом проекте принимать и передавать пакеты ТСР

sink3d
16.10.2013, 19:04
Как обычно: SCADA->OPC(Lectus)->PLC. Lectus перестает отвечать(когда захочет) на время ожидания пакета(если время цикла большое).Кстати вроде как с com портом все ок, т.к. он работает по прерыванию и имеет высочайший приоритет(пока еще не пробовал). На счет применения SysLibSockets, я пока слабо представляю, как это может упростить задачу(.

SuP
02.02.2015, 02:32
Почитал на ночь веточку :) Просто подтвержу, что на ПЛК110 я также использую настройку минимального времени цикла "0", использую модуль статистики и смотрю там на параметр "Cycle time in 100 mks (Значение цикла работы ПЛК в сотнях мкс)", который у меня в среднем 2-3 мс, а максимально - до 25 мс.

Когда-то тоже бился с этим минимальным временем цикла (и в конце концов остановился на отключённом контроле, то есть 0), но зато оптимизировал ход выполнения программ таким образом, что за каждый цикл выполняется минимум необходимого. Таким образом, мне удалось сократить максимальное время выполнения примерно с 60 мс до теперешних 25. Мне важен оперативный отклик на изменение переменных через ModbusTCP, и пока удаётся обеспечить приемлемую реакцию.

Zecher
06.09.2015, 20:24
Прочитал тему и, дабы не создавать новую, есть вопрос:
Следующая ситуёвина, минвр цикла =0. В конфигураторе задач крутится две программы: 1) период=100мс, выполнение 1-2мс. 2) период=свободная, выполнение несколько десяток мксек.
Вопрос в том, когда ПЛК обрабатывает входы\выходы? Вокруг 1-ой или 2-ой программы?

Николаев Андрей
07.09.2015, 20:14
Прочитал тему и, дабы не создавать новую, есть вопрос:
Следующая ситуёвина, минвр цикла =0. В конфигураторе задач крутится две программы: 1) период=100мс, выполнение 1-2мс. 2) период=свободная, выполнение несколько десяток мксек.
Вопрос в том, когда ПЛК обрабатывает входы\выходы? Вокруг 1-ой или 2-ой программы?

Вам стоит немного подробнее разобраться с этим вопросом.
Если Вы определяете условия вызова программы в конфигураторе задач - совершенно не важно что у Вас в параметре минвремцикл. Так как этот параметр важен только для программы PLC_PRG, вызываемой по умолчанию...
Входы выходы обрабатываются ни вокруг, а как бы между :)

Zecher
09.09.2015, 07:26
То есть процесс выполнения выглядит примерно так:
IO-1-IO-2-IO-2-IO-2-IO-1-IO-2...
,где:
1 - первая программа
2 - вторая программа
IO - обработчик входов\выходов
Правильно?

Николаев Андрей
09.09.2015, 09:45
Я не склонен посылать людей к документации, но здесь вопрос не простой, и таки стоит потратить немного времени.
Программа,вызываемая "свободно" выполняется тогда и только тогда, когда у процессора есть свободное время.
То есть он освободился от ЛЮБЫХ задач, включая запись в область памяти входов-выходов и самодиагностики...