PDA

Просмотр полной версии : Программирование ПЛК110 [М02] для задач реального времени



Страницы : 1 2 [3]

Вольд
12.10.2016, 20:13
а что тут исследовать? Ситников прямо написал что время цикла выполнения зависит от текущей частоты выдачи шага, плюс язык высокого уровня принципиально не будет выравнивать время выполнения разных ветвей алгоритма... исследовать имеет смысл наличие случайной составляющей, а при заявленной принципиальной несовместимости - о чем речь? Поэтому использовать можно все что угодно, но не забывая что там внутри и чем это грозит в случае вроде бы применения в аналогичном случае.

Может вы объясните чем грозит наличие джиттера в ФБ для управления ШД. Этот микроскопический джиттер, если он есть, ШД вообще не заметит.

Вольд
12.10.2016, 20:17
Интереснее обсуждать как должно выглядеть "task configuration" в случае PRU. Есть идеи/предложения?

А какая связь между Task configuration и PRU ?

Владимир Ситников
12.10.2016, 20:48
Поясните о чем речь ?
У PRU ядра всего один поток команд.
Т.е. В каждый момент времени PRU берет следующую команду и выполняет. Никаких прерываний нет.

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

Но есть "незадача". Например, для управления ШД нужно мигать выходом с разной частотой. Например, на разгоне вообще частота с каждым импульсом меняется.

В результате, пока "ждём момент для очередного ШД импульса, опрашивать энкодер все равно нужно".
Напомню: прерываний нет, и единственный вариант "переключить выход ровно через 1мкс" это "выполнить 200 каких-нибудь команд" (на частоте 200МГц как раз так получается, что 200 простых команд занимают 1 мкс".
Опрос входа -- 1 команда. Проверка "менялось ли значение за последнюю микросекунду" -- это ещё штук 5-6 команд.
В итоге, 4 входа с примитивной фильтрацией займут ~ 4*7 == 30 тактов == 30/200 мкс == 3/20 = 0.15мкс.
Ещё может случиться "обмен с HOST'ом" (он, ведь, каждую миллисекунду случаться будет?) Это ещё команды непредвиденные.

В итоге, чтобы всё успеть, нужно делать фарш из опросов входов-выходов, фильтрации, и т.п.

Я вижу как минимум следующие варианты:
1) Оставить как есть и "в первой версии PRU среды" сделать режим, когда программист пишет полную программу (включая while true). Так сказать, отложить решение проблемы. При желании всё равно можно будет и ШД и энкодер в одной программе обслуживать, но придётся в правильные моменты добавлять опрос энкодера.
2) Вынести ожидание из ШД программы, и сделать так, чтобы основной цикл всегда вызывал все действия. Тогда в ШД блоке нужно будет добавить проверку "пора ли уже". Казалось бы, вот решение, но при этом точность упадёт. выход будет не "когда нужно" переключаться, а тогда, когда дойдёт управление до ШД блока. Это может оказаться 50-100 команд, т.е. 0.25...0.5 мкс.
3) При создании PRU программы указывать: "вот этот код нужно вызывать раз в 1мкс, вот этот раз в 20мкс, а у этого расписание плавает и он сам будет говорить когда надо". Вроде, подобное в КДС называется task configuration.
4) Ещё можно подумать над тем, что PRU программы будут не сразу входы изменять, а будут говорить "через какое время вход должен измениться".

В случаях 3 и 4 код "основного цикла" будет формироваться из фрагментов, предоставленных программистом и разбавляться проверками времени.

Возможно, есть ещё варианты.

Вольд
12.10.2016, 21:42
У PRU ядра всего один поток команд.
Т.е. В каждый момент времени PRU берет следующую команду и выполняет. Никаких прерываний нет.

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

Но есть "незадача". Например, для управления ШД нужно мигать выходом с разной частотой. Например, на разгоне вообще частота с каждым импульсом меняется.

В результате, пока "ждём момент для очередного ШД импульса, опрашивать энкодер все равно нужно".
Напомню: прерываний нет, и единственный вариант "переключить выход ровно через 1мкс" это "выполнить 200 каких-нибудь команд" (на частоте 200МГц как раз так получается, что 200 простых команд занимают 1 мкс".
Опрос входа -- 1 команда. Проверка "менялось ли значение за последнюю микросекунду" -- это ещё штук 5-6 команд.
В итоге, 4 входа с примитивной фильтрацией займут ~ 4*7 == 30 тактов == 30/200 мкс == 3/20 = 0.15мкс.
Ещё может случиться "обмен с HOST'ом" (он, ведь, каждую миллисекунду случаться будет?) Это ещё команды непредвиденные.

В итоге, чтобы всё успеть, нужно делать фарш из опросов входов-выходов, фильтрации, и т.п.

Я вижу как минимум следующие варианты:
1) Оставить как есть и "в первой версии PRU среды" сделать режим, когда программист пишет полную программу (включая while true). Так сказать, отложить решение проблемы. При желании всё равно можно будет и ШД и энкодер в одной программе обслуживать, но придётся в правильные моменты добавлять опрос энкодера.
2) Вынести ожидание из ШД программы, и сделать так, чтобы основной цикл всегда вызывал все действия. Тогда в ШД блоке нужно будет добавить проверку "пора ли уже". Казалось бы, вот решение, но при этом точность упадёт. выход будет не "когда нужно" переключаться, а тогда, когда дойдёт управление до ШД блока. Это может оказаться 50-100 команд, т.е. 0.25...0.5 мкс.
3) При создании PRU программы указывать: "вот этот код нужно вызывать раз в 1мкс, вот этот раз в 20мкс, а у этого расписание плавает и он сам будет говорить когда надо". Вроде, подобное в КДС называется task configuration.
4) Ещё можно подумать над тем, что PRU программы будут не сразу входы изменять, а будут говорить "через какое время вход должен измениться".

В случаях 3 и 4 код "основного цикла" будет формироваться из фрагментов, предоставленных программистом и разбавляться проверками времени.

Возможно, есть ещё варианты.

Не совсем понятно какие проблемы в варианте 1.

В варианте 2 во время генерации импульсов период постоянно будет увеличиваться на 0,25...0,5 мкс ?

Владимир Ситников
12.10.2016, 21:50
Не совсем понятно какие проблемы в варианте 1.

В варианте 2 во время генерации импульсов период постоянно будет увеличиваться на 0,25...0,5 мкс ?

Проблемы варианта 1 в том, что "ппограммировать сложнее". Грубо говоря, у многих проблемы с пониманием цикла плк, а тут основной цикл придётся вручную целиком писать. Не домохозяйки, конечно собрались, но все же.

В варианте 2 будет рваный ритм. То туда, то сюда в зависимости от того, сколько каждый блок занял. ШД на разгоне и ШД во время основного хода занимает разное время.
Как разновидность 2го, можно всегда дополнять цикл, скажем, до 1 мкс. Выполнили все блоки, обменялись данными с хостом, и, если 1мкс ещё не прошла, то крутим пустой цикл (но с фильтрацией входов). Тут минус в том, что реакция будет привязана к этой самой "длительности цикла"

Владимир Ситников
12.10.2016, 22:15
Казалось бы, вот решение. Просто указываем "длину мин цикла и радуемся". Но, нет.
На частоте 200кГц (нормальная такая частота для работы ШД) цикл нужен порядка 2.5мкс (2.5мкс единица, потом ещё столько же ноль).
Даже если умудриться сделать "минц=0.5мкс" (там сложность в том, что ШД на разгоне потребляет как раз примерно 0.5мкс), то всё равно получаемые частоты будут кратны 0.5мкс. Т.е. либо 2.5мкс (5 циклов), либо 3.0мкс (6 циклов), либо 3.5мкс, .... В частотах это:
1/(2*2.5e-6) == 200кГц, 1/(2*3.0e-6) == 167кГц, 1/(2*3.5e-6) = 143кГц, 1/(2*4.0e-6) == 125кГц.

Нехилый такой шаг. Особенно перескок 167кГц -> 200кГц. Вот если бы была возможность менять минц по ходу, то можно было гораздо точнее сделать переход.

Текущая моя ШД программа обеспечивает длительность импульса с точностью ~5-10нс (наносекунд!). И переходить от такой точности к точности "0.5мкс" как-то не по себе.

Хотя, для небольших частот, возможно, вариант с "мин ц порядка нескольких микросекунд" будет достаточным и весьма понятным для типичных инженеров (ну, тех, кто понимает что такое минц=1мс в ПЛК).

Вольд
13.10.2016, 10:23
Текущая моя ШД программа обеспечивает длительность импульса с точностью ~5-10нс (наносекунд!). И переходить от такой точности к точности "0.5мкс" как-то не по себе.

Длительность импульса с точностью 5...10 нс ни к чему. Для ШД поддерживать длительность импульса с точностью 0.5мкс вполне достаточно.

Вольд
13.10.2016, 17:37
В ФБ для ШД надо ограничиться максимальной частотой в 200 кГц. Минимальный полупериод следования импульсов будет 2,5 мкс. Этого времени должно хватить для опроса быстрых входов, к которым подключены энкодеры.

Владимир Ситников
13.10.2016, 17:53
В ФБ для ШД надо ограничиться максимальной частотой в 200 кГц. Минимальный полупериод следования импульсов будет 2,5 мкс. Этого времени должно хватить для опроса быстрых входов, к которым подключены энкодеры.

Начну с варианта, когда длина цикла фиксирована.
В конце концов, это не помешает сделать переменную длину цикла, если в пользовательском коде добавить while true...

Ещё вопрос: безопасные состояния, watchdog, вот это всё, нужно?

Если, вдруг, PRU заклинило, то в основной программе должен флаг аварии взводиться? Или перезапуск PRUграммы?

Я склоняюсь к флагу "авария", а перезапуск PRU уже не автоматический, а по запросу основной программы.

Вольд
13.10.2016, 17:58
Начну с варианта, когда длина цикла фиксирована.
В конце концов, это не помешает сделать переменную длину цикла, если в пользовательском коде добавить while true...

Ещё вопрос: безопасные состояния, watchdog, вот это всё, нужно?

Если, вдруг, PRU заклинило, то в основной программе должен флаг аварии взводиться? Или перезапуск PRUграммы?

Я склоняюсь к флагу "авария", а перезапуск PRU уже не автоматический, а по запросу основной программы.

А по какой причине может произойти останов PRU программы и как это выявить ?

Что делать при останове PRU программы надо решать в основной программе.

Владимир Ситников
13.10.2016, 18:24
А по какой причине может произойти останов PRU программы и как это выявить ?

Например, ионизирующее излучение, удар молнии, проблемы с питанием, ну и "кривой код" в конце концов.
Выявлять можно во время очередного обмена данными. Смысл в том, что для обмена информацией PRU и host в любом случае должны как-то координироваться. Если host будет ждать ответа от PRU бесконечно долго, то к нему самому придёт собака. Поэтому, логично при операциях обмена использовать таймаут. Скажем, 100ms. Если достигнут таймаут, то считаем, что обмен не состоялся, а pru, возможно, заклинило.

Аналогично, на стороне PRU можно следить за частотой обменов и переходить в безопасное состояние, если host давно не общался с PRU.

dima64
15.10.2016, 18:49
Вот описание энкодера буржуйского контроллера 27043

Newcomer
17.10.2016, 12:43
Создал пробный проект. Включил в него ФБ PRU_STEPPER, сделанный В.Ситниковым. После компиляции проекта имею такой результат. Не пойму в чем дело.

Владимир Ситников
17.10.2016, 12:52
Создал пробный проект. Включил в него ФБ PRU_STEPPER, сделанный В.Ситниковым. После компиляции проекта имею такой результат. Не пойму в чем дело.

В проект нужно было добавить pruaccesslib.lib
Эту библиотеку можно взять в каком-нибудь "писании от Владислава (http://www.owen.ru/forum/showthread.php?t=22169&p=180471&viewfull=1#post180471)".

Newcomer
17.10.2016, 13:11
Все получилось. Проект компилируется без ошибок.

Владимир Ситников
18.10.2016, 10:26
Есть прогресс в "доступном всем PRUграммировании".

Программа: 27071

Эта самая программа будет автоматически вызываться в PRU цикле. Упомянутые в @Export переменные будут передаваться из/в КДС.
Например, 3 быстрых входа будут использоваться для ABZ энкодера, а 4-ый будет подаваться в КДС напрямую (для прочих целей).

"PRU configuration": 27072
Тут говорится, что "в PRU0 будет выполняться нужная нам программа с циклом в 1мкс", "в PRU1 будет программа по умолчанию", и настраивается фильтрация в 2мс для IN4 (этот вход в энкодере не участвует)


При компиляции это добро завернётся в WHILE TRUE цикл и разбавится обменом с КДС.
Примерно так:
27073

На выходе будет готовая к употреблению КДС.exp библиотека. Т.е. импортируем её и магическим образом заработает PRU.

Вольд
18.10.2016, 10:51
Есть прогресс в "доступном всем PRUграммировании".

Программа: 27071

Эта самая программа будет автоматически вызываться в PRU цикле. Упомянутые в @Export переменные будут передаваться из/в КДС.
Например, 3 быстрых входа будут использоваться для ABZ энкодера, а 4-ый будет подаваться в КДС напрямую (для прочих целей).

"PRU configuration": 27072
Тут говорится, что "в PRU0 будет выполняться нужная нам программа с циклом в 1мкс", "в PRU1 будет программа по умолчанию", и настраивается фильтрация в 2мс для IN4 (этот вход в энкодере не участвует)


При компиляции это добро завернётся в WHILE TRUE цикл и разбавится обменом с КДС.
Примерно так:
27073

На выходе будет готовая к употреблению КДС.exp библиотека. Т.е. импортируем её и магическим образом заработает PRU.

По завершению всех работ желательно оформить пример с исходными кодами для PRU и прикладной программы для ПЛК.

Владимир Ситников
18.10.2016, 11:07
По завершению всех работ желательно оформить пример с исходными кодами для PRU и прикладной программы для ПЛК.

Я у какого-то производителя ШД (или ПЛК?) видел документацию в духе "задача-решение". "Надо двигать и считать пакеты молока? --- делай так". Что-то в таком духе.
Там совсем небольшие примеры, и на них показывались подходы.

Где видел -- не помню, но по-моему, выглядело хорошо.
Нечто похожее в документации на ОЛ, но там примеров, вроде, всего пара штук.

Собственно, вопрос в примерах. И, по-моему, лучше если примеры жизненные, а не просто "как подключить 2 энкодера".

Переведу с русского на русский: кто может -- накидывайте примеров.
Сами примеры будут доступны в самой среде. Можно будет зайти и посмотреть / скопировать и т.п.

Вольд
18.10.2016, 11:56
Достаточно одного хорошего примера, в котором будет показано как пользоваться доступным всем инструментарием для PRU программирования.

Владимир Ситников
22.10.2016, 22:34
Так, после некоторых танцев с бубном, PRU программа начала компилироваться.

В двух словах:
На эмуляторе работает, значит можно переходить к
1) Созданию кнопки, которая создаст КДС.exp
2) Созданию кнопки "новый PRU проект"
3) Сделать PRU1. Надо сначала протестировать подход с PRU0 в железе, а потом уже делать PRU1.



PRU configuration.
Ничего особенного, просто выполняем программу с циклом в 1мкс, и фильтруем 4-ый вход с временем фильтрации 5
27227

Программа для PRU0.
Напомню суть задачи: при подаче "enable=true", должен запуститься мотор и выключиться тогда, когда энкодер отсчитает заданное количество импульсов.
27221

Собственно, так и написано. Проверяем энкодер, вызываем блок "управления мотором", выход блока подаём на fast_OUT1.
Эти три действия выполняются раз в микросекунду (согласно PRU configuration выше). В оставшееся время происходит обмен данными и обработка входов.

Если думаете, что в блоке FAST_OUTPUTS будет ассемблер, то там его не найдёте:
27222

Блок FAST_INPUTS выглядит так же (тоже пустой). Для работы с входами-выходами никакого ассемблера использовать не нужно. Есть несколько "волшебных" ФБ -- их и используем.
Код внутри блоков input/output и т.п. появляется в момент компиляции. Например, для входов там добавляется вызов фильтрации (если она указана в PRU configuration).


Как и планировалось, для передачи данных из-в КДС ассемблер тоже не нужен. Достаточно подставить @Export над теми переменными, которые понадобятся в КДС.

При компиляции получается программа для PRU и КДС библиотека.
В этом примере создался следующий блок обмена данными:
27223

Для порядка, протестируем программу. Сделаем вид, что цикл ПЛК составляет 1мс, и попробуем пару запусков нашей машины.

Что тут видно:
1) При запуске махины (enable 0 -> 1), она запускает мотор, энкодер начинает крутиться, и всё это добро останавливается при достижении нужного количества импульсов. Я указал runLength = 326, оно так и останавливается

2) Первые 12 мс значение на 4-ом входе дёргается (это прямо в тестовой программе сделана подача морганий на fast in), и фильтрация это верно отрабатывает. Вспомним, что в PRU configuration указана фильтрация 5мс. Как раз после этих 5мс значение in4_filtered переходит в единицу.



1 ms, in.enable=0, in.runLength=326, out.counter=0, out.position=0, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=0, out.in4_filtered=0, fastOut4=0, encoder=0
2 ms, in.enable=0, in.runLength=326, out.counter=0, out.position=0, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=0
3 ms, in.enable=0, in.runLength=326, out.counter=0, out.position=0, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=0, out.in4_filtered=0, fastOut4=0, encoder=0
4 ms, in.enable=0, in.runLength=326, out.counter=0, out.position=0, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=0
5 ms, in.enable=0, in.runLength=326, out.counter=0, out.position=0, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=0, out.in4_filtered=0, fastOut4=0, encoder=0
6 ms, in.enable=1, in.runLength=326, out.counter=100, out.position=100, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=101
7 ms, in.enable=1, in.runLength=326, out.counter=200, out.position=200, out.zeroDetected=0, out.offset=99, out.state=MOVING, in4_raw=0, out.in4_filtered=0, fastOut4=1, encoder=201
8 ms, in.enable=1, in.runLength=326, out.counter=300, out.position=300, out.zeroDetected=0, out.offset=199, out.state=MOVING, in4_raw=1, out.in4_filtered=0, fastOut4=1, encoder=301
9 ms, in.enable=1, in.runLength=326, out.counter=400, out.position=400, out.zeroDetected=0, out.offset=299, out.state=MOVING, in4_raw=0, out.in4_filtered=0, fastOut4=1, encoder=401
10 ms, in.enable=1, in.runLength=326, out.counter=500, out.position=500, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=501
11 ms, in.enable=1, in.runLength=326, out.counter=600, out.position=600, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=0, out.in4_filtered=0, fastOut4=0, encoder=601
12 ms, in.enable=1, in.runLength=326, out.counter=700, out.position=700, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=701
13 ms, in.enable=1, in.runLength=326, out.counter=800, out.position=800, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=801
14 ms, in.enable=1, in.runLength=326, out.counter=900, out.position=900, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=901
15 ms, in.enable=1, in.runLength=326, out.counter=1000, out.position=1000, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=1001
16 ms, in.enable=1, in.runLength=326, out.counter=1100, out.position=1100, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=0, fastOut4=0, encoder=1101
17 ms, in.enable=1, in.runLength=326, out.counter=1200, out.position=1200, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=1201
18 ms, in.enable=1, in.runLength=326, out.counter=1300, out.position=1300, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=1301
19 ms, in.enable=0, in.runLength=326, out.counter=1301, out.position=1301, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=1301
20 ms, in.enable=0, in.runLength=326, out.counter=1301, out.position=1301, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=1301
21 ms, in.enable=0, in.runLength=326, out.counter=1301, out.position=1301, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=1301
22 ms, in.enable=1, in.runLength=326, out.counter=1401, out.position=1401, out.zeroDetected=0, out.offset=0, out.state=STOP, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=1402
23 ms, in.enable=1, in.runLength=326, out.counter=1501, out.position=1501, out.zeroDetected=0, out.offset=99, out.state=MOVING, in4_raw=1, out.in4_filtered=1, fastOut4=1, encoder=1502
24 ms, in.enable=1, in.runLength=326, out.counter=1601, out.position=1601, out.zeroDetected=0, out.offset=199, out.state=MOVING, in4_raw=1, out.in4_filtered=1, fastOut4=1, encoder=1602
25 ms, in.enable=1, in.runLength=326, out.counter=1701, out.position=1701, out.zeroDetected=0, out.offset=299, out.state=MOVING, in4_raw=1, out.in4_filtered=1, fastOut4=1, encoder=1702
26 ms, in.enable=1, in.runLength=326, out.counter=1801, out.position=1801, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=1802
27 ms, in.enable=1, in.runLength=326, out.counter=1901, out.position=1901, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=1902
28 ms, in.enable=1, in.runLength=326, out.counter=2001, out.position=2001, out.zeroDetected=0, out.offset=326, out.state=DONE, in4_raw=1, out.in4_filtered=1, fastOut4=0, encoder=2002



Из забавного, блок для фильтрации входов получился гораздо больше, чем я ожидал изначально:
27224
Работает, и ладно. Надо будет -- соптимизируем или сделаем другую реализацию.

Давным-давно, Yegor предложил сделать возможность использования ФБ без объявления в переменных. Например, для одноразовых RTRIG это в самый раз.
Эта штука пригодилась.

Например, ФБ для обработки входов (с фильтрацией) создаётся таким образом:
27225
PRU_DEBOUNCE не объявляется, и не захламляет "область объявления переменных".

Аналогично, в конце кода ABZ энкодера лаконично располагаем RTRIG и радуемся:
27226

Вольд
23.10.2016, 11:50
Когда все будет готово окончательно ?

Владимир Ситников
23.10.2016, 13:45
Когда все будет готово окончательно ?

"Всё" это понятие растяжимое. Если туда включать online отладку, симуляцию из самой среды, точки останова, автотесты из среды, то это "всё" одним наскоком не сделать

А тестировать Hardella -> pru0 будем недели через две.

При этом, смена программы даже перезапуск плк не потребует. Можно будет как на марсоходе программу на ходу менять.

Владимир Ситников
23.10.2016, 14:58
Чего же? Все по делу. Если честно, я не думал, что на ходу программу менять можно. Смысла, наверное, не так много (ведь, контакты кто на ходу будет переключать), но возможность сменить программу может пригодиться. Не только для вируса, а, например, для повышения точности.

Или, например, для online обновления программы.

Владимир Ситников
23.10.2016, 17:57
Так тут вопрос не в "российских компаниях", а в КДС. Указатели есть, защищенного режима нет - кто угодно может работать с какой угодно памятью.

capzap
23.10.2016, 19:29
ну КДСовский протокол при чрезмерной активности "подвешивается" так, что из вариантов только перегрузка, с пру конечно тоже есть ограничения, но и обычно первые входы/выходы у пользователей как раз и задействованы впервую очередь, соответственно нет ни каких проблем захватить их

Владимир Ситников
24.10.2016, 13:01
Возник такой вопрос: можно ли как-то из КДС кода узнать название текущего ПЛК?

Мне это нужно для того, чтобы библиотека не падала в режиме симуляции, и чтобы не приходилось комментировать-раскомментировать постоянно.
Вроде, можно через PRU_FB_GetParameter(pru_num:=0, index:=100500, value:=0) отличить симуляцию от работы, но, может, есть ещё какой-нибудь способ?

Владимир Ситников
25.10.2016, 10:32
Сделал новым подходом программу, мигающую двумя выходами, залил в ПЛК -- работает.

Надо будет проверить обмен данными, входы и можно выпускать обновление Hardella.

Вольд
25.10.2016, 10:58
Сделал новым подходом программу, мигающую двумя выходами, залил в ПЛК -- работает.

Надо будет проверить обмен данными, входы и можно выпускать обновление Hardella.

Hardella рулит. ;)

Вольд
26.10.2016, 12:31
БП можно просто нагрузить по линии 24В.

Зачем нужен этот костыль ? Сделайте нормальный источник питания.

Владимир Ситников
26.10.2016, 12:32
Смотрю тут собрался клуб самоубийц-затейников. Прямой доступ из PRU в программу нельзя так делать.
Почему же нельзя? Если что, то PRU у меня работает только со своей памятью. Т.е. local dram, которая за пару тактов доступна.

Дмитрий Артюховский
26.10.2016, 16:37
Почему же нельзя? Если что, то PRU у меня работает только со своей памятью. Т.е. local dram, которая за пару тактов доступна.

потому что выше у вас написано >>>> "PRU берёт BOOL из основной программы и записывает его в другую переменную."

но смысл поста Владислава в том, что нужно, как минимум понимать, что будет с алгоритмом, если ему из другого потока значение переменных менять, а в общем случае - проклясть и не использовать сей "метод"

Филоненко Владислав
26.10.2016, 21:17
Вот вот, данных нет, но я решил, что...
Нельзя так сделать.
Идея всей программы PRU как одного куска на С-подобном языке мне не нравилась из-за проблем с тестированием кода. Но это цветочки по сравнению с прямым доступом к ОЗУ (да ещё и "скрытым от пользователя").
И если подход с компиляцией непонятно чем программы из С-языка я ещё могу понять, то
Как разработчик системы ПЛК ответственно заявляю:
Прямой доступ из PRU к ОЗУ за пределами PRU, либо из основного цикла ПЛК к PRU по указателю является опасным и при таком доступе не гарантируется соблюдение алгоритма работы PRU, цикла PRU, либо правильность получения в PRU/из PRU данных.

Дмитрий Артюховский
26.10.2016, 22:16
Т.е. мой подход опирается на следующее:
1) Чтение/запись DWORD атомарны (всегда читается/записывается полное значение)

гм, при 16-битной шине и наличии в системе нескольких DMA контроллеров, которые использует ОС ПЛК по своим неизвестным нам приоритетам... ну - ну

а идея, под которую затачивались ПРУ ядра - это остановить ядро, загрузить блок данных, запустить ядро на обработку и по завершении - остановить вычисления и выгрузить результат

Филоненко Владислав
27.10.2016, 10:48
гм, при 16-битной шине и наличии в системе нескольких DMA контроллеров, которые использует ОС ПЛК по своим неизвестным нам приоритетам... ну - ну

а идея, под которую затачивались ПРУ ядра - это остановить ядро, загрузить блок данных, запустить ядро на обработку и по завершении - остановить вычисления и выгрузить результат

И учитывая, что у PRU только побайтное чтение/запись. Ню-ню.

rovki
27.10.2016, 11:45
Короче - без знания железа и внутренних потрахов лезть туда не безопасно чистым программистам или нужно все согласовывать и работать по ТЗ.Что бы ню-ню не превратилось в ба- бах ;)

Дмитрий Артюховский
27.10.2016, 13:32
Короче - без знания железа и внутренних потрахов лезть туда не безопасно чистым программистам или нужно все согласовывать и работать по ТЗ.Что бы ню-ню не превратилось в ба- бах ;)

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

концепция "овена" - конструкции из проверенных "атомарных" блоков с прозрачным и однозначным функционированием, и поскольку библиотеку будет распространять овен - то и нести некую ответственность за конечную работоспособность системы

господин Ситников продвигает свою среду разработки - презентуя ее в стиле - каждый станет богом программирования с этой волшебной оболочкой ))) как он ее будет поддерживать, и будет ли "диктовать бабушкам емейлы" - большой вопрос, и скорее похоже на желание продать этого "слона" овену (возможно вместе с собой!)

лично мне больше всего импонирует концепция ассемблерных модулей - все едино они там не большие получаются - отлаживать не сложно, зато свободными от окружающей шелухи - различных оберток... и собственно это натуральная среда, предполагавшаяся разработчиками чипа, позволяющая использовать все возможности ( и кстати, выйти за ограничения кодесиса, ибо ядра ПРУ имеют доступ ко всей памяти и ко всем периферийным устройствам - гы - поставить в основном цикле холостой оператор и выполнить весь функционал на "чердаке"!!! - это конечно смешно, но вполне возможно (правда 2к команд) )

Вольд
27.10.2016, 14:47
вывод не совсем правильный ))) разговор о том, что нужно хорошо понимать что именно собираешься сделать....


Значит не в среде разработки дело, а в правильном подходе к PRU - программированию.

Дмитрий Артюховский
27.10.2016, 16:34
Вся красота разбивается о суровую реальность: задержка доступа к основной памяти запросто может быть 50 тактов, т.е. тупо ждём по 0.25мкс на каждое обращение к памяти. Беда-печаль.

не обязательно... как я понял, заложенный механизм работает следующим образом: когда PRU что-нить нужно - оно генерит прерывание, сообщающее ЦП о желании пообщаться и ЦП освобождает шину, занимаясь другими проблемами - при кеше ядра в 16к вполне есть чего поделать... и это нормально, потому что одно из назначений PRU первичная обработка получаемых с интерфейсов данных..

не, конечно нас не пустят в прерывания ЦП, но суть в том что ожидание: 1. совсем необязательно будет, все таки в ПЛК нет обмена видео и аудио потоками и 2. ПРУ имеет высокий приоритет на доступ к шине

но учитывать возможность в задержках и разрыве потока байтов обязательно ))) .... буфера обмена и флаги !!!!

rovki
27.10.2016, 16:35
вывод не совсем правильный ))) разговор о том, что нужно хорошо понимать что именно собираешься сделать....

к Понимание возникает (или нет) от знания ,а не наоборот .

Филоненко Владислав
28.10.2016, 15:09
нравится Хардела - используйте её, чего тут агитировать за всё хорошее.

Scream
07.11.2016, 17:31
Как по мне не хватает простых примеров.
Взять что даёт codesys по умолчанию, что даёт ОВЕН (удобство) и вашу работу и сравнить хоть в видео, хоть в таблице, плюсы минусы и аргументы.

capzap
07.11.2016, 17:43
По моему все только начинается. Просто до большинства еще не дошло. ;)

а Вы видимо распробовали, теперь проекты пишите только там?

yulya.aniskina2010
09.11.2016, 11:55
Добрый день.
Прошу помощи в подборе контроллера.
Имеются два ШД (FL86STH65) и два драйвера (PLD441) для них (Step/DIR/Enable). Контроллеры какой линейки подойдут для их управления?
Смотрела на сайте, там указано, что и ПЛК 100 имеет ШИМ, и ПЛК 150 линейки тоже, и ПЛК 110. Но только в характеристиках последнего указано наличие быстрых выходов. А у первых двух про это ни слова.
Кроме ШД имеются: аналоговый датчик температуры, 8 клапанов НЗ, каждый управляется одним дискретным сигналом; насос, управляемый также одним дискретным сигналом; входных сигналов дискретных нет.
Заранее благодарю за помощь.

melky
09.11.2016, 12:12
Про ПЛК100, 150 точно можно забыть...

Владимир Ситников
09.11.2016, 12:24
Какая скорость (частота импульсов) и точность (через ШИМ будет погрешность) ШД нужна?

Если "управлять выходами STEP/DIR напрямую с ПЛК" И "нужна частота STEP больше 500Гц" И "нужно точное позиционирование" то ПЛК110 М02.

Управление ШД на ПЛК110 М02 обсуждается тут (http://www.owen.ru/forum/showthread.php?t=22169&page=29&p=221928&viewfull=1#post221928) и тут (http://www.owen.ru/forum/showthread.php?t=22169&p=226390&viewfull=1#post226390).

Либо нужен какой-то другой драйвер ШД (с управлением не STEP/DIR, а прямо нормальными командами).

capzap
09.11.2016, 13:26
а на 110-ом есть аналоговые входа?

Вольд
09.11.2016, 13:39
а на 110-ом есть аналоговые входа?

Аналоговый датчик придется опрашивать через последовательный порт.

yulya.aniskina2010
09.11.2016, 14:11
Если "управлять выходами STEP/DIR напрямую с ПЛК" И "нужна частота STEP больше 500Гц" И "нужно точное позиционирование" то ПЛК110 М02.


Управлять нужно напрямую с ПЛК, точного позиционирования, вроде, не нужно. Частота требуется больше 500 Гц, но не Мегагерцовая. По характеристикам ПЛК 110 (не M02, а предыдущей линейки), имеет высокочастотный таймер на 20 мкс. В этом случае можно ли использовать старую линейку 110-ых?

yulya.aniskina2010
09.11.2016, 14:14
а на 110-ом есть аналоговые входа?

В общей сложности потребуется где-то 16 DO сигналов (в том числе и для управления ШД) и 1 AI. В составе ни одного ПЛК нет требуемого кол-ва. Поэтому, думаю, придется ещё аналоговым модулем укомплектоваться.

Владимир Ситников
09.11.2016, 14:27
Управлять нужно напрямую с ПЛК, точного позиционирования, вроде, не нужно. Частота требуется больше 500 Гц, но не Мегагерцовая. По характеристикам ПЛК 110 (не M02, а предыдущей линейки), имеет высокочастотный таймер на 20 мкс. В этом случае можно ли использовать старую линейку 110-ых?

Старую линейку лучше не использовать.
Высокочастотный таймер тоже лучше не использовать (правильно его готовить могут только разработчики самого ПЛК110)
20мкс на таймере вы не получите. В лучшем случае 40 или 60мкс (иначе будут проблемы с основным циклом, сетевым обменом и тому подобным)

На М02 можно управлять быстрыми входами выходами без всяких 20мкс таймеров.

500кГц ШД (на самом деле серво) без таймеров можно вполне сделать на М02.



Если точность не нужна, то можно, конечно, попробовать управлять ШД через ШИМ, но, на мой взгляд, это стрёмный путь.

Scream
09.11.2016, 14:51
Управлять нужно напрямую с ПЛК, точного позиционирования, вроде, не нужно. Частота требуется больше 500 Гц, но не Мегагерцовая. По характеристикам ПЛК 110 (не M02, а предыдущей линейки), имеет высокочастотный таймер на 20 мкс. В этом случае можно ли использовать старую линейку 110-ых?

Прежде чем покупать старый ПЛК110, прочтите это http://www.owen.ru/forum/showthread.php?t=25463&page=19&p=226391&viewfull=1#post226391

capzap
09.11.2016, 16:50
В общей сложности потребуется где-то 16 DO сигналов (в том числе и для управления ШД) и 1 AI. В составе ни одного ПЛК нет требуемого кол-ва. Поэтому, думаю, придется ещё аналоговым модулем укомплектоваться.

плк160 имеет на борту и быстрые выхода и аналоговые входа,их же можго использовать как и дискретные

Владимир Ситников
09.11.2016, 17:17
плк160 имеет на борту и быстрые выхода и аналоговые входа,их же можго использовать как и дискретные

О, да, быстрые релейные выхода. Управление ШД через релейные выхода это передовое слово в развитии ПЛК.
Если что, то ПЛК160 с транзисторными выходами не бывает.

Scream
09.11.2016, 17:49
плк160 имеет на борту и быстрые выхода и аналоговые входа,их же можго использовать как и дискретные

хмм...
интересно что там за быстрые выхода??

capzap
09.11.2016, 17:59
ой блин поймали, я не пользуюсь ни входами ни выходами, а из доков читал только http://www.owen.ru/uploads/rp_plk110.160.pdf.

Вольд
09.11.2016, 18:56
В общей сложности потребуется где-то 16 DO сигналов (в том числе и для управления ШД) и 1 AI. В составе ни одного ПЛК нет требуемого кол-ва.

Да что вы такое пишите. Вы РЭ на ПЛК110 почитайте.

Владимир Ситников
09.11.2016, 19:05
Да что вы такое пишите. Вы РЭ на ПЛК110 почитайте.

А что не так?
AI в ПЛК110 нет.
Т.е. рабочая комбинация -- ПЛК110М02 + нужный модуль для AI.

Либо "любой ПЛК" + драйвер ШД (который умеет команды обрабатывать)
Под словами "любой ПЛК" стоит понимать ПЛК110 М02 (т.к. с ПЛК160, ПЛК110 M01 проблемы, которые описал Scream)

Вольд
09.11.2016, 19:26
А что не так?

Автор темы пишет, что ей в ПЛК не хватает выходов. Вот это и не так.

yulya.aniskina2010
10.11.2016, 10:25
Автор темы пишет, что ей в ПЛК не хватает выходов. Вот это и не так.

Вы меня неверно поняли или я непонятно выразилась. Имела ввиду, что нет контроллера, на борту которого имеются необходимое кол-во дискретных выходов, включая быстрые, и аналоговых входов. Поэтому, тоже склоняюсь к комбинации ПЛК110 М02 и модуль AI.
И хочу поблагодарить за помощь всех откликнувшихся. Спасибо вам :)

Владимир Ситников
12.12.2016, 18:55
ну это должно быть возможно делать в виде конфигуратора ШД. Что куда подключено + тут же должны добавляться и настраиваться функции PLCOpen motion, и прописываться mapping между PRU и PLC Codesys

Именно про это я и говорю: "надо подумать как это органично встроить"

murdemon
12.12.2016, 18:57
а PRU ввиде таска к Codesys прикрутить нельзя? (по типу как функции прерывания 20mks) Или там язык совсем другой? или как этот процесс заливки PRU вообще проходит ?

ilys
13.12.2016, 12:56
Добрый день! Первая моя работа с ПЛК и первое сообщение, извиняйте заранее, если не совсем по адресу выкладываю сообщение.
Оживляю прецизионный расточной станок немецкий EFCO SPM800. 2 года назад помер на нем контроллер Siemens 115U вместе с управляющей программой. Для замены выбрал ПЛК110-60 М2, количество входов и выходов впритык хватило, запустил 2 сервопривода, 2 дископривода, несколько масляных насосов, клапанов, куча пускателей, теплушек с обратной связью, управление кнопочное с панели оператора. Для визуализации процесса металлообработки использовал обычный ПК, монитор встроил в панель оператора, благо коробка не мелкая, компьютер постоянно в онлайн-режиме связь через изернет, работает стабильно на ура, через USB кабель постоянные срывы связи и драйвер слетает.
Теперь остался вопрос по энкодерам!!! Подключил 2 AB энкодера на первые 4 канала, быстрые входы, переключил в режим Fast Encoders, энкодеры - амплитуда 5 В, для увеличения до 24 В использовал модули ПДИ5-4, знаю что они предназначены для других серий плк фирмы Овен, но все в порядке, плата выполняет свои функции. Энкодеры при максимальных передвижениях шпинделя по осям выдают до 65 кГц, но контроллер стабильно справляется примерно до 30 кГц.
Вот и вопрос, заявлено заводом 100 кГц на быстрых входах, а стабильно только 30 кГц? Или для 100 кГц подключение PRU обязательно? Если так, то с какой страницы этой ветки форума начать читать, уже не знаю где начало без отступлений, или краткая инструкция для работы? В общем как быть? Спасибо если ответите.

Владимир Ситников
13.12.2016, 13:23
Спасибо, понял что малость сморозил :)
Ждем вестей от В.Ситникова. - что ждать и долго ждать?
Вообще-то, Овен заявляли, что 100 кГц энкодер они тестировали, и никаких пропусков не было.
Проверьте настройку фильтрации быстрых входов.

Некий минус в том, что я заболел (38.5) и ничего не могу делать. Из работ по 1.6.0 осталась проверка и документация (чтобы по много раз одно и то же не писать в этой теме)

dima64
13.12.2016, 14:00
Добрый день! Первая моя работа с ПЛК и первое сообщение, извиняйте заранее, если не совсем по адресу выкладываю сообщение.
Оживляю прецизионный расточной станок немецкий EFCO SPM800. 2 года назад помер на нем контроллер Siemens 115U вместе с управляющей программой. Для замены выбрал ПЛК110-60 М2, количество входов и выходов впритык хватило, запустил 2 сервопривода, 2 дископривода, несколько масляных насосов, клапанов, куча пускателей, теплушек с обратной связью, управление кнопочное с панели оператора. Для визуализации процесса металлообработки использовал обычный ПК, монитор встроил в панель оператора, благо коробка не мелкая, компьютер постоянно в онлайн-режиме связь через изернет, работает стабильно на ура, через USB кабель постоянные срывы связи и драйвер слетает.
Теперь остался вопрос по энкодерам!!! Подключил 2 AB энкодера на первые 4 канала, быстрые входы, переключил в режим Fast Encoders, энкодеры - амплитуда 5 В, для увеличения до 24 В использовал модули ПДИ5-4, знаю что они предназначены для других серий плк фирмы Овен, но все в порядке, плата выполняет свои функции. Энкодеры при максимальных передвижениях шпинделя по осям выдают до 65 кГц, но контроллер стабильно справляется примерно до 30 кГц.
Вот и вопрос, заявлено заводом 100 кГц на быстрых входах, а стабильно только 30 кГц? Или для 100 кГц подключение PRU обязательно? Если так, то с какой страницы этой ветки форума начать читать, уже не знаю где начало без отступлений, или краткая инструкция для работы? В общем как быть? Спасибо если ответите.

ПДИ5-4 могут такую частоту обработать????

ilys
13.12.2016, 14:21
ПДИ5-4 могут такую частоту обработать????
В составе платы используются оптроны PC817 (если не ошибаюсь), они до 80 кГц. Завтра по месту буду: как советовал В. Ситников по фильтрацию быстрых входов проверять, вместо ПДИ5-4 использовать самодельную плату на основе PC814, использовать генератор импульсов для имитации энкодеров. Раз Овен заявил - значит должен работать до 100 кГц, надеюсь на их честность.

Филоненко Владислав
19.12.2016, 22:20
Покажите мне шаговик на 50 кГц. Это фантастика. тут бы 2-3 кГц запустить и то хлеб.

Владимир Ситников
19.12.2016, 22:24
Покажите мне шаговик на 50 кГц. Это фантастика. тут бы 2-3 кГц запустить и то хлеб.

Так микрошаг же и серво.

Вот, например, dima64 на 200 кГц упражнялся:

Генерация идет нормально. Сегодня подключал сервопривод PRONET. Скорость задавал 200 кГц. Играл с разгоном/торможением - все работает. Заданное кол-во импульсов отрабатывает четко.

Дмитрий Артюховский
21.12.2016, 10:24
Сервопривода имеют свои мозги, им внешняя управляющая частота нужна как некий ориентир, а внутреннюю отработку они выполняют по своему разумению.

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

Вольд
21.12.2016, 12:02
Микрошаги с большим коэффициентом конечно иногда используются восторженными юношами, но по сути это рекламная замануха, ибо получается довольно неравномерное деление внутри шага. В жизни работают коэффициенты 4 - 8, а дальше - сплошной маркетинг.

Видал я таких "гуру". ;) Сильное дробление шага с одновременным увеличением частоты импульсов используют для того чтобы раскрутить ШД до больших оборотов без существенного снижения крутящего момента на валу.

Дмитрий Артюховский
21.12.2016, 12:13
для разгона нужно напряжение на драйвере и инерционная нагрузка на валу... ну конечно, если мы говорим про стандартный двигатель с шагом 1,8 градусов, а не извращения с шагом в 22 градуса - но это, на мой взгляд, уже следует считать сервоприводом

Вольд
21.12.2016, 12:22
для разгона нужно напряжение на драйвере и инерционная нагрузка на валу... ну конечно, если мы говорим про стандартный двигатель с шагом 1,8 градусов, а не извращения с шагом в 22 градуса - но это, на мой взгляд, уже следует считать сервоприводом

Слыхали вы звон ....;)

ilys
21.12.2016, 14:03
Для прецизионной точности подачи используются энкодеры ROD426, с оптическим диском - 10.000 штрихов на 1 полный оборот. Расчетно экспериментально у меня вышли - цена деления импульса: по оси Z - 7985 импульсов на 1 мм, по оси Y - 12450 импульсов на 1 мм движения резца! Вот такая точность. Станок уже работает, при быстрых движениях шпинделя (без процесса резания) координаты теряются, потому пока реализовал функцию ручной установки нуля, т.е. подвели вручную на начальную точку резец, на один дискретный вход от внешней кнопки подается сигнал, далее программа берет эту координату за нуль по всем осям и начинается процесс металлобработки, в это время скорость движения резца сравнительно не велика и уже работать можно, но до ума довести необходимо.

Владимир Ситников
21.12.2016, 14:09
при быстрых движениях шпинделя (без процесса резания) координаты теряются,
Быстрые движения это сколько мм в секунду?

ilys
21.12.2016, 14:33
Быстрые движения это сколько мм в секунду?
По оси Y - около 3,5 мм/сек, по Z - около 7 мм/сек, точное время передвижения на макисмалках не отсчитывал по таймеру. Быстрые передвижения нужны только при подводе инструмента. А точность такая при резке нужна, так как станок обтачивает кончиком резца зеркала запорных араматур диаметром до 1400 мм и конечный результат после чистовой обработки на самом деле в виде зеркала и смотрится

ilys
28.12.2016, 15:39
Недельку между дел бились с согласованием уровней сигнала энкодера, добились амплитуды 24 В и прямоугольной формы - результат такой же, пропускает контроллер сигналы, даже не при 30 кГц, а при 10 как оказалось. У меня вся управляющая программа в теле основного цикла, всего строк 200 ST кода, для 400 МГц микропроцессора это ерунда так-то, не может же это влиять на счет-то.
Видимо придется уже идти в направлении движения этой ветки, подключаться в использование PRU.

Владимир Ситников
28.12.2016, 15:47
Недельку между дел бились с согласованием уровней сигнала энкодера, добились амплитуды 24 В и прямоугольной формы - результат такой же, пропускает контроллер сигналы, даже не при 30 кГц, а при 10 как оказалось. У меня вся управляющая программа в теле основного цикла, всего строк 200 ST кода, для 400 МГц микропроцессора это ерунда так-то, не может же это влиять на счет-то.
Видимо придется уже идти в направлении движения этой ветки, подключаться в использование PRU.

Кстати, в основной программе правильно обрабатываете энкодер?
Покажете код? Ну, должно же быть преобразование из WORD'ов (которые получаются из fast encoder) в DWORD или что-то такое на стороне CoDeSys.
Может, "пропуск" из-за того, что в основной программе какая-нибудь ошибка и просто неправильно складываются показания из fast encoder'а?


В целом, попробуйте https://hardella.com/docs/pru/examples/fast-encoder/
Как-никак, будет хоть какой-то альтернативный способ посмотреть на проблему.

ilys
28.12.2016, 16:06
Кстати, в основной программе правильно обрабатываете энкодер?
Покажете код? Ну, должно же быть преобразование из WORD'ов (которые получаются из fast encoder) в DWORD или что-то такое на стороне CoDeSys.
Может, "пропуск" из-за того, что в основной программе какая-нибудь ошибка и просто неправильно складываются показания из fast encoder'а?

звиняйте за такой вид программки моей, если нарушил какие-то принципы построения кода, самоучка я. Ну вот собственно кусочек кода. Переменная Shet1: DINT - глобальная.
28448

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

Вольд
28.12.2016, 18:06
Недельку между дел бились с согласованием уровней сигнала энкодера, добились амплитуды 24 В и прямоугольной формы - результат такой же, пропускает контроллер сигналы, даже не при 30 кГц, а при 10 как оказалось.

Быть такого не может в ПЛК110[М02]. Или программа не верно написана или ПЛК неисправен.

ilys
29.12.2016, 08:40
Быть такого не может в ПЛК110[М02]. Или программа не верно написана или ПЛК неисправен.

Ну вот у меня такая ситуация. Первый опыт общения с ПЛК и не с чем сравнивать пока. И писал же, что даже если исключить управляющую программу, наблюдаю за энкодреами в глобальных переменных, т.е. не использую никакой свой код, и там видно что идут потери, при частоте свыше 25 кГц счет уже почти отсутствует. Возможно брак, при заказе на заводе не было в наличии ПЛК110-60, ждали изготовления 3 недели.
После праздников уже продолжу эксперименты с быстрыми входами, пока станок в таком режиме запущен, влияет всего лишь на оперативность работы, за целый день дополнительно 15 минут простоя, не существенно.
Далее хочу каждый канал прогнать (с 1 по 4) в режиме быстрого счетчика, посмотрю на каких частотах начнет спотыкаться.

Вольд
29.12.2016, 10:12
Уверены, что энкодер исправен ?

ilys
29.12.2016, 11:23
Уверены, что энкодер исправен ?
http://www.owen.ru/forum/showthread.php?t=25816&page=2&p=232299&posted=1#post232299
пост №13, там выкладывал фотографии, где на экране осциллографа видна стабильная работа обеих датчиков энкодера, да к тому же 2 энкодера себя одинаково ведут

Newcomer
11.01.2017, 13:30
Можно ли ПЛК110 [М02] прошивка 0.3.41, Target version >= 3.07 использовать для задач реального времени ?

Newcomer
11.01.2017, 15:09
Вопрос к В.Филоненко.

Как можно затереть PRU0.prg и PRU1.prg, залитые в ПЛК110[М02] ?

dima64
13.01.2017, 03:37
Как можно затереть PRU0.prg и PRU1.prg, залитые в ПЛК110[М02] ?
Просто удаляешь их через ПЛК-браузер.

alekshir
24.08.2020, 14:36
Добрый день Владимир можете помочь с реализацией программы для плк110м02 подключение ш.д. Программирую на cfc добавляю библиотеку и функциональный блок но в эмуляции выходы не переключаются. Можете прислать готовый проект на cfc который управляет ш.д на почту alekshir@ya.ru буду очень признателен с уважением Алексей. ps готов заплатить или пополнить тел. номер.

Bigcrash
03.11.2020, 12:51
Можно ли такой элемент как "Динамическое изображение" или обычное изображение сделать видимым/не видимым? У некоторых элементов есть бит видимости, а у этих нет.

Евгений Кислов
03.11.2020, 13:34
Можно ли такой элемент как "Динамическое изображение" или обычное изображение сделать видимым/не видимым? У некоторых элементов есть бит видимости, а у этих нет.

https://aip.com.ru/faq?book=52
Левый столбец, второй пункт.

Вячеслав@
02.08.2021, 17:34
День добрый. Есть ли на форуме люди, работавшие с Hardella? Задача у меня простая, но документация к Харделле своеобразная. Я не смог разобраться. Взял пример управления ШД и пытался скомпилировать, но что делать с ошибкой "cant find test to run" - не знаю, как и не представляю, куда копать.

Дмитрий021
26.08.2021, 13:29
Добрый день, правильно ли реализовано тестирование линии на обрыв связи? Или может быть есть еще какой-то способ тестировать обрыв связи с модулем ввода-вывода? 5674456745

Дмитрий021
28.08.2021, 13:40
Все верно, только скобки добавить, что бы порядок действий не нарушался.

Евгений агрохит
11.10.2021, 07:46
Здравствуйте, есть ПЛК 110 с файлами PRU0.prg/PRU1.prg в контроллере, как от них избавиться?

capzap
11.10.2021, 08:42
Здравствуйте, есть ПЛК 110 с файлами PRU0.prg/PRU1.prg в контроллере, как от них избавиться?

через ПЛК-браузер не получается?

Филоненко Владислав
11.10.2021, 09:05
Здравствуйте, есть ПЛК 110 с файлами PRU0.prg/PRU1.prg в контроллере, как от них избавиться?

Удалить с файловой системы.

murdemon
09.11.2021, 17:21
Может есть у кого 110 м2 с транзисторными выходами и желательно шагавиккми или сервами, для того чтобы удаленно протестировать softmotion для данного ПЛК, напишите в личку.

murdemon
12.11.2021, 00:18
https://youtu.be/G56FWvhM9d0
Прикрутил PRU проверил, повторяемость неплохая. Дальше будем копать, еще бы получать из блока актуальную скорость и ускорение.

IVM
12.11.2021, 09:54
https://youtu.be/G56FWvhM9d0
Прикрутил PRU проверил, повторяемость неплохая. Дальше будем копать, еще бы получать из блока актуальную скорость и ускорение.

Из какого блока собираетесь получать актуальную скорость и ускорение ?

murdemon
14.11.2021, 15:38
Вот прикрутил SoftMotion, https://youtu.be/UJ4B2pjUv_s если кому интересны исходники пишите в личку, поделюсь.

murdemon
15.11.2021, 07:47
Вот пример и исходники , кому надо
57924
Проект для халидеры и для ПЛК

Newcomer
15.11.2021, 11:33
Вот пример и исходники , кому надо
57924
Проект для халидеры и для ПЛК

Для управления ШД какой ФБ используется, стандартный из Харделлы или свой написали ?

murdemon
15.11.2021, 16:11
Немного доработанный из халедеры, исходники выше.

murdemon
15.11.2021, 16:56
Там еще надо дрбавить для positionloop, обратную связь по позиции, а то сейчас из за джитера позиция 0, уползает, ну и 2D круги порисовать.

IVM
15.11.2021, 19:03
Немного доработанный из халедеры, исходники выше.

А SoftMotion сам через быстрые выходы ПЛК драйвером ШД управлять не может ? В идеале нужно: разогнать ШД и далее не останавливая вращения вала менять частоту вращения. FB в Харделле выдает заданное количество импульсов, разгоняет и тормозит. Т.е. позволяет переместиться на заданное расстояние с последующим остановом. Если рассматривать токарный станок, то там 2 координаты, продольная и поперечная. По обеим координатам надо перемещаться синхронно и непрерывно. Если контур детали сложный, то у ШД, который управляет поперечным перемещением резца надо постоянно менять частоту и направление вращения вала.

murdemon
15.11.2021, 21:30
SoftMotion раз в 3мс, говорит по интерполятору скорость для каждой оси и позицию где хочу чтобы был через 3мс. Скорость ШД через ПРУ берет от интерполятора с коэффициентом винта шага и тд. И блок из ПРУ отдает его реальную координату в отсчетах ... в идеале если разница между заданной и установленной координатой за шаг не изменяется, то ПРУ успевает и тд. Если разница изменяется надо корректировать скорость от интерполятора + разница изменений помноженное на коэфф еще. чтобы догоняла или притормаживал. тем самым делаем обратную связь

IVM
16.11.2021, 10:17
SoftMotion раз в 3мс, говорит по интерполятору скорость для каждой оси и позицию где хочу чтобы был через 3мс. Скорость ШД через ПРУ берет от интерполятора с коэффициентом винта шага и тд. И блок из ПРУ отдает его реальную координату в отсчетах ... в идеале если разница между заданной и установленной координатой за шаг не изменяется, то ПРУ успевает и тд. Если разница изменяется надо корректировать скорость от интерполятора + разница изменений помноженное на коэфф еще. чтобы догоняла или притормаживал. тем самым делаем обратную связь

Валы ШД вращаются постоянно без останова ?

keysansa
17.11.2021, 15:41
Валы ШД вращаются постоянно без останова ?

Пока не достигнут точки - да.

IVM
17.11.2021, 17:40
Пока не достигнут точки - да.

Это очень плохо.

murdemon
18.11.2021, 16:15
Чем это плохо? ШД крутится, деньги мутятся

IVM
18.11.2021, 16:43
Чем это плохо? ШД крутится, деньги мутятся

Не знаю что там с деньгами, а вот вал ШД должен крутиться постоянно, но с разной скоростью. Скорость вращения должна меняться на ходу без полного останова вращения. Даже при смене направления вращения не должно быть больших пауз.

murdemon
18.11.2021, 17:25
Так оно и есть. Остановка только когда обратно по программе в 0 приезжает. Координаты абсолютные. Есть функция сброса позиции в 0 для самого PRU, и чтобы в 0 приезжал в PRU считает импулсы при dir положительном прибавляет при dir отрецательном вычитает. Если до 0 доехал, в минус дальше не едет, те кол степов при dir положительном и отрицательном одинаково, смотрит сам PRU. Но физицески с шагавиком все равно поз 0 , меняется , физически там пропуски по моменту или еще что-то. Для лоукост сойдет, а так по хорошему надо в 0 по датчику после каждого движения уезжать. Или ставить уже энкодер на ось.

IVM
18.11.2021, 17:41
Так оно и есть. Остановка только когда обратно по программе в 0 приезжает. Координаты абсолютные. Есть функция сброса позиции в 0 для самого PRU, и чтобы в 0 приезжал в PRU считает импулсы при dir положительном прибавляет при dir отрецательном вычитает. Если до 0 доехал, в минус дальше не едет, те кол степов при dir положительном и отрицательном одинаково, смотрит сам PRU. Но физицески с шагавиком все равно поз 0 , меняется , физически там пропуски по моменту или еще что-то. Для лоукост сойдет, а так по хорошему надо в 0 по датчику после каждого движения уезжать. Или ставить уже энкодер на ось.

Пропуск импульсов говорит о том, что качество управления ШД неудовлетворительное.

murdemon
18.11.2021, 19:00
сформулируй критерии в двух словах , что надо чтобы было удовлетворительное ?

murdemon
18.11.2021, 22:08
https://youtu.be/2yKViaiHl-c. Можно разгон подобрать чтобы в 0 приходил четко.

keysansa
22.11.2021, 14:13
Не знаю что там с деньгами, а вот вал ШД должен крутиться постоянно, но с разной скоростью. Скорость вращения должна меняться на ходу без полного останова вращения. Даже при смене направления вращения не должно быть больших пауз.

Вы намекаете на охлаждение?

keysansa
22.11.2021, 14:15
сформулируй критерии в двух словах , что надо чтобы было удовлетворительное ?

Что бы не было пропусков ))

Понятие размытое, чаще всего, нагрузка не совпадает с мощностью двигателя, ток драйвера не совпадает с допустимым током двигателя. Но в целом, я поддерживаю IVM

murdemon
22.11.2021, 16:57
https://youtu.be/BsjAzOGe0cI :)) должно не быть разрывов.

keysansa
22.11.2021, 17:28
https://youtu.be/BsjAzOGe0cI :)) должно не быть разрывов.

Так вам сформулировали ответ на ваш вопрос "в двух словах".
Ваш ответ - только мем? Зачем вы спрашивали тогда?

murdemon
22.11.2021, 18:51
да я понимаю что такое пропуски и момент на валу и тд. просто ШД это не совсем пром. применение.
Вот можно уже продавать https://youtu.be/MZSV7PZbrV4

IVM
23.11.2021, 10:34
SoftMotion раз в 3мс, говорит по интерполятору скорость для каждой оси и позицию где хочу чтобы был через 3мс. Скорость ШД через ПРУ берет от интерполятора с коэффициентом винта шага и тд. И блок из ПРУ отдает его реальную координату в отсчетах ... в идеале если разница между заданной и установленной координатой за шаг не изменяется, то ПРУ успевает и тд. Если разница изменяется надо корректировать скорость от интерполятора + разница изменений помноженное на коэфф еще. чтобы догоняла или притормаживал. тем самым делаем обратную связь

Для SoftMotion программа как составляется и на каком носителе хранится ?

murdemon
23.11.2021, 11:56
Программа GCODE с M ками и G01 G02 G03, В retain. Можно на флешку... можно с облака OwenCloud :)

keysansa
24.11.2021, 13:29
да я понимаю что такое пропуски и момент на валу и тд. просто ШД это не совсем пром. применение.
Вот можно уже продавать https://youtu.be/MZSV7PZbrV4

ШД вполне промышлены. Просто с "обратной связью" как у вас описано, вы не узнаете о реальном положении оси. По моему отсюда все проблемы.
Необходимо строгое ограничение момента на двигателе и его контроль (понятно, что только опосредованно, установка энкодеров экономику в 0 приведет). Но может с резольвером получится?

Sulfur
06.12.2021, 10:44
Вопрос: реально ли штатными средствами в ПЛК110М2 получить на выходе программно заданный импульс с точностью до 1мс? Например 1427мс.

kondor3000
06.12.2021, 16:23
А что, таймер TP не подходит?
Задаёте длительность 1427 ms и получаете импульс нужной длительности +/- время цикла ПЛК.
Если цикл 1 ms, то будет 1427 ms +/- 1 ms. Вход, выход можно отловить R и F триггерами.

Sulfur
06.12.2021, 18:05
ТР это слишком просто и не очень надежно в плане точности. Сочиняю четырехкомпонетный дозатор, пара компонентов с малым процентом. Из за ограничения механики точность в +-цикл будет не очень. Имею под рукой подобный рабочий девайс, там на малых процентах время открытия заслонки 200-300мс, что с учетом времени работы собственно механики довольно мало. Плюс к этому, программа может менять алгоритм работы, и время цикла может плавать.
Видимо задание импульса придется писать на Харделле.

murdemon
06.12.2021, 19:13
https://youtu.be/6Lv4qvIR1tw С джойстика выводим по позициям, сохраняем позиции, потом старт и в 2D вполне рабочее решение. Если кому интересно пишите, можно сделать резку материалов , нанесение клея и тд.

keysansa
06.12.2021, 22:45
дозируйте разбавленный компонент/зажмите выход дозатора и т. п чтоб увеличить время дозации до уровня где не будет парить время цикла плк.
Если критична 1мс для 1427 то что-то с методой не то, и никакая хардела не спасет

Согласен, что нужно разбавлять.

Sulfur
07.12.2021, 07:05
зажмите выход дозатора
Там уже зажато все что можно. Дальнейшее сжатие вызывает нестабильный поток сырья (подвисание).
Механическую переделку секции на микродозирование вряд ли получится сделать силами предприятия.
Харделла позволит вырабатывать импульс, независимый от цикла ПЛК.

murdemon
07.12.2021, 11:03
https://youtube.com/shorts/DGPrZIMRgq0?feature=share

Sergey666
09.12.2021, 22:38
Харделла позволит вырабатывать импульс, независимый от цикла ПЛК.
А вы серьезно считаете, что "механическое составляющее" вашего чудо-дозатора способно воспринять импульс менее длительности цикла ПЛК?
Длительность цикла ПЛК редко превышает 5ms, при этом полно эл-маг реле у которых впемя срабатывания больше.

З.Ы Если длительность цикла ПЛК превышает (не постоянно) 5ms, значит разработчика ПО на мыло.

Sergey666
09.12.2021, 23:22
Даже если время цикла рандомно плавает 1...10, нет проблем выдерживать точные 834, 449, 1427мс без хардел

Как?(Тут сайт сказал что в ответе должно быть более 10 символов:confused:) аааааааааааааааа! Как!
У овена нет прерываний и непосредственной записи выхода.

Sergey666
10.12.2021, 00:04
Нужно немного расширить TP. А есть реальные задачи ?
ТР это "Техническое решение"???
Задач нет, точнее есть, но они не для Овена точно.

A.Simonov
10.12.2021, 12:39
У овена нет прерываний и непосредственной записи выхода.

Как это нет?
Для быстрых входов/выходов доступна работа по прерыванию, через библиотеку timer.lib (https://docs.owen.ru/product/plk160m02/759/34179#topic-34179)
Можно раз в 20 мкс выполнять некоторый простой код.

Sergey666
10.12.2021, 13:56
Как это нет?
Для быстрых входов/выходов доступна работа по прерыванию, через библиотеку timer.lib (https://docs.owen.ru/product/plk160m02/759/34179#topic-34179)
Можно раз в 20 мкс выполнять некоторый простой код.

Ну, хорошо, хай буде тек...

murdemon
11.12.2021, 17:47
https://youtu.be/SSorbbhfYOA

Newcomer
11.12.2021, 19:38
https://youtu.be/SSorbbhfYOA

Ты бы пояснил что ты там изображаешь.

IVM
11.12.2021, 20:58
Предположу, что это медленный танец с клавиатурой. ;)

murdemon
11.12.2021, 21:32
Это ПЛК110 М02, управление STEP DIR , 2 шаговика. Управления по HID USB, с беспроводной клавиатуры. Сначала выводим в точки запоминаем, после чего отрабатывает программу в GCODE автоматически. Постпроцессор можно сглаживание в конечных точках и учет радиуса инструмента. Так демонстрация работы SoftMotion "импортированном" на ПЛК Овен, можно сделать синхронное движение , до 4х осей, энкодер, движение по "электронному кулачку" Cam и тд. Время реакции 3мкс. Выходы до 100кГц.

Newcomer
12.12.2021, 12:27
Это ПЛК110 М02, управление STEP DIR , 2 шаговика. Управления по HID USB, с беспроводной клавиатуры. Сначала выводим в точки запоминаем, после чего отрабатывает программу в GCODE автоматически. Постпроцессор можно сглаживание в конечных точках и учет радиуса инструмента. Так демонстрация работы SoftMotion "импортированном" на ПЛК Овен, можно сделать синхронное движение , до 4х осей, энкодер, движение по "электронному кулачку" Cam и тд. Время реакции 3мкс. Выходы до 100кГц.

Нарисованную окружность крупным планом покажи. С какой погрешностью отрабатываются линейные перемещения ?

murdemon
12.12.2021, 15:39
https://youtu.be/kzxYW7zl0NE
58308
58309

вал с ремнем , диаметр 1 см. 200 шагов на оборот и 1/32 микрошаг. 0.004859375 мм на отсчет, точность такая.

IVM
12.12.2021, 16:03
https://youtu.be/kzxYW7zl0NE
58308
58309

Фрезерный или токарный станок потянет ?

murdemon
12.12.2021, 17:46
Должен, если есть на чем попробовать, можно скооперироваться.

keysansa
12.12.2021, 18:00
https://youtu.be/kzxYW7zl0NE
58308
58309

вал с ремнем , диаметр 1 см. 200 шагов на оборот и 1/32 микрошаг. 0.004859375 мм на отсчет, точность такая.

Хорошо. А если взять ТТ карандаш, и 3-5 заходов сделать? И с несколькими заходами.

Андрей 28
15.12.2021, 19:10
Здравствуйте! подскажите пожалуйста купили новый ПЛК110/60 не могу разобраться не определяется не по сети не по usb (usb) определяется как диск пустой и в Com порт не отображается таргеты все установил . Может подскажите что может не так?

kondor3000
15.12.2021, 19:31
Здравствуйте! подскажите пожалуйста купили новый ПЛК110/60 не могу разобраться не определяется не по сети не по usb (usb) определяется как диск пустой и в Com порт не отображается таргеты все установил . Может подскажите что может не так?

Так он и есть пустой, вы новый ПЛК подключили. Только смысла в этом. Стучаться надо из Codesis 2.3, в настройках подключения выбирайте нужный Com порт, а лучше подключитесь по изернету. В настройках Codesis выбираете TCP_IP/Level2, прописываете заводской IP, а у компа в настройках похожий, но с другой последней цифрой, в шлюзе последняя цифра 1.

Андрей 28
15.12.2021, 19:34
всё это я уже делал! COM порт не определяется

kondor3000
15.12.2021, 19:36
всё это я уже делал! COM порт не определяется

Зачем его определять, вам надо программу залить в него. Прога заливается из Codesis.

Андрей 28
15.12.2021, 19:36
Так он и есть пустой, вы новый ПЛК подключили. Только смысла в этом. Стучаться надо из Codesis 2.3, в настройках подключения выбирайте нужный Com порт, а лучше подключитесь по изернету. В настройках Codesis прописываете заводской IP, а у компа в настройках похожий, но с другой последней цифрой, в шлюзе последняя цифра 1.

и по изернету тоже не получилось при подключении даже IP адрес не отображается

Андрей 28
15.12.2021, 19:38
Зачем его определять, вам надо программу залить в него.

извините я просто только учусь можно подробнее

kondor3000
15.12.2021, 19:42
извините я просто только учусь можно подробнее

Вы лучше с прочтения инструкции бы начали. Это не флешка и определять не надо, надо подключиться и залить хоть простенькую программку. Всё делается из Codesis. У Овена на ютубе полно обучающих видео, просмотрите хоть несколько первых.

Андрей 28
15.12.2021, 19:49
Вы лучше с прочтения инструкции бы начали. Это не флешка и определять не надо, надо подключиться и залить хоть простенькую программку. Всё делается из Codesis. У Овена на ютубе полно обучающих видео, просмотрите хоть несколько первых.

Дело в том что я делал все как на видео! создал простую программу и на этапе заливки случилось у меня недопонимания

kondor3000
15.12.2021, 19:56
Дело в том что я делал все как на видео! создал простую программу и на этапе заливки случилось у меня недопонимания

С этого и начинать надо было, если вы уже подключались, а сейчас не можете, нажмите сброс на ПЛК, проверьте настройки и подключайтесь пока не получится, программа скорее всего кривая. Программу, прежде чем заливать в ПЛК, всегда компилируйте и проверяйте в эмуляции.

Снимите питание, перезагрузите ПЛК, проверьте настройки, сделайте сброс и подключайтесь. Поначалу я тоже так парился несколько раз).
Программу лучше создать новую.

Aleks032
10.06.2022, 20:13
Всем доброго времени суток. Подскажите, пожалуйста, куда копать, не работает управление сервоприводом с ПЛК110-60_02.
А именно не работают быстрые выходы. Не пинайте сильно, я в кодесисе новичок).
Достался по наследству от КИПовца проект управления плоскошлифовальным станком. Стол и бабка по осям Х и У перемещается электродвигателями на ПЧВ управление RS-485-1 и RS-485-2.
Сервопривод оси Z управляется по step-dir, сигнал выдается на быстрый вывод.
После заливки проекта на новый контроллер ПЛК110-24.60.К-М работает все кроме сервопривода. Переставлял контроллер с рабочего станка на новый станок, все заработало. А новый контроллер не работает. В сервисной службе подсказали, в новый контроллер залить старую прошивку контроллера. Это тоже не сработало…
Надеюсь на Вашу помощь.

Aleks032
10.06.2022, 23:05
У меня во владении первого сообщения этот проект. Разве это вложение не открывается?

Aleks032
10.06.2022, 23:08
Я его в ПЛК загружал. Всё работало кроме быстрых выходов. Которые управляют драйвером.

kondor3000
10.06.2022, 23:13
У меня во владении первого сообщения этот проект. Разве это вложение не открывается?

В проекте нет таргета контроллера и конфигурации ПЛК. Наверно вы пытались поменять на новый ПЛК и не смогли правильно это сделать.
Вот что в выложенном проекте 61170
Кроме того если задействованы быстрые входы, то надо в ПЛК-браузере считать файлы из ПЛК.
Короче нужен человек, компетентный в этих вопросах.

Aleks032
15.06.2022, 08:32
Доброго дня. Проблему свою решил.
Помимо загрузки проекта в ПЛК также нужно было загрузить файл PRU1.prg
Спасибо что натолкнули меня на эту мысль.

КБСОЮЗ
23.09.2022, 09:30
Добрый день. Пробую подключить к ПЛК110 60M2 срводравер.
Понял что необходимо активизировать быстрые входы/выходы для окрытого праграммирования. Пытался создать файлы PRU0.prg и PRU1.prg в Hardelle, но не получается создать файл *.exp. Hardella при компиляции выдает ошибки:
java.lang.ClassNotFoundException: pru.BlinkningLeds_Pru0Program_CodeGenerator
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.github.vlsi.iec61131.st2ti1808.runtime.compile r.CreateLibrary.main(CreateLibrary.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknow n Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Un known Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at jetbrains.mps.execution.lib.startup.ClassRunner.ma in(ClassRunner.java:93)
Сделал apdate Java 8 не помогает.
По этому не могу в плной мере использовать данное решение.
И по этому возникают несколько вопросов.
1. Есть решение данной проблемы.
2. Есть ли альтернативные варианты кроме Hardelli.
3. Если найдется решение перврго вопроса, то какие инструменты (библиотеки) нужны для работы с быстрыми входами в Codesys.
Сама задача состоит в подключении Энкодера-моховичка на выносном пульте ЧПУ к входам и вывода сигналов Step и Dir на дравер сервопривода.
Необходимо использовать переключатель массштаба перемещений на пульте.

КБСОЮЗ
19.10.2022, 12:14
Всем доброго времени суток!
Мой вопрос остался без внимания.
Может есть еще разделы на форуме где можно узнать больше по существу моей проблемки?

ПавелП
24.04.2023, 13:10
Привет всем.

Есть ПЛК160.
Долго и нудно настраивали на облако OwenCloud.

Что упроститься, если перепрошить:
Install_Target_v2.12_for_PLC110_PLC160 (с поддержкой OwenCloud)

ПавелП
22.05.2023, 14:23
Привет всем.
Есть ПЛК160.
Долго и нудно настраивали на облако OwenCloud.
Что упроститься, если перепрошить:
Install_Target_v2.12_for_PLC110_PLC160 (с поддержкой OwenCloud)
В ПЛК160 эта фитча уже прописана в БИОС-е.

Millyvolt2
24.05.2023, 13:16
Здравствуйте!

Перестал вдруг работать кусок кода элементарный, при соблюдения условия IF не проваливается в тело IF.
Сижу ломаю голову почему такое может быть и из-за чего)
Заводской сброс имеет смысл в такой ситуации? При нем удаляется пользовательская программа, но я заливаю и работаю пока в режиме отладки всё равно.
Пользовательская программа также зашита и в ПЛК, не самой актуальной версии.

67960

Отладчик всё время попадает на строчки 105 и 111, но никогда в тело IF.
До сегодняшнего дня это работало как и должно, сегодня код или настройки проекта не менял.

capzap
24.05.2023, 13:25
Здравствуйте!

Перестал вдруг работать кусок кода элементарный, при соблюдения условия IF не проваливается в тело IF.
Сижу ломаю голову почему такое может быть и из-за чего)
Заводской сброс имеет смысл в такой ситуации? При нем удаляется пользовательская программа, но я заливаю и работаю пока в режиме отладки всё равно.
Пользовательская программа также зашита и в ПЛК, не самой актуальной версии.

67960

Отладчик всё время попадает на строчки 105 и 111, но никогда в тело IF.
До сегодняшнего дня это работало как и должно, сегодня код или настройки проекта не менял.
и Вы прямо внутри условия счетчик ставили и он не "движется" или чисто визуально по переменной UL_stopped определяете?

Millyvolt2
24.05.2023, 13:44
и Вы прямо внутри условия счетчик ставили и он не "движется" или чисто визуально по переменной UL_stopped определяете?

Попробовал сейчас 2 счётчика - в теле каждого IF, не инкрементируются
По-любому не заходит туда

capzap
24.05.2023, 13:50
Проект >> Очистить всё сделайте

Millyvolt2
24.05.2023, 16:38
Проект >> Очистить всё сделайте

Большое спасибо, помогло.
Да, пересобирать проект иногда стоит)

Виталий Светашов
02.09.2023, 09:54
Добрый день.
Есть задача управления сервоприводом с помощью ПЛК110 М2 через STEP/DIR. Конкретней: движение с заданной скоростью в заданную позицию. По пути ни скорость, ни заданная позиция не меняются, не считая разгона/торможения. В программировании ПЛК ОВЕН практически новичок, но вопрос не в этом.
Вопрос в том, возможно ли это?
Я прочитал более-менее внимательно всю эту ветку и не только и, честно сказать, четкий ответ на этот вопрос не сложился. С одной стороны, ФБ Ситникова, вроде бы эти задачи решает. С другой, довольно много негатива, в том числе от представителей ОВЕН. С третьей, у меня сложилось впечатление, что сам ОВЕН ничего внятного по управлению серво не предлагает. Чтобы не влезать в дискуссии в стиле "приведи номер поста, где такое сказано", скажу сразу: возможно, я что-то неверно понял и поэтому прошу тех, кто в теме:
1. Растолковать, возможно ли реально, а не теоретически, решить поставленную задачу?
2. Если можно, то коротко путь: взять то-то, загрузить то-то, с помощью этого написать ФБ под свою задачу.
Предваряя стандартные ответы, замечу: я не прошу бесплатно написать программу за меня, я не прошу научить меня программированию в CodeSys. Только: возможно ли это и вкратце путь. Я бы с удовольствием поэкспериментировал сам, тем более, что все железо в наличии, но, к сожалению, ситуация такая, что я не могу потратить пару недель и прийти к выводу, что надо покупать другой контроллер и начинать все заново.
Был бы очень благодарен за ответы.
И да, не сочтите за наглость. :)

krollcbas
02.09.2023, 11:45
Конечно возможно!

Решал подобную задачу на ПЛК110(М02) через быстрые выходы и тайминги.
Двухкоординатный станок.

Если бы в системе присутствовали энкодеры (позиционеры), то вышло бы и быстрее и точнее.


https://youtu.be/Jhv-TyVqWGg?si=5NGL5UD23fmeOdzU

Виталий Светашов
02.09.2023, 12:08
Конечно возможно!
Решал подобную задачу на ПЛК110(М02) через быстрые выходы и тайминги.

Большое спасибо за ответ. Если не трудно:
1. Пользовались ли наработками Ситникова или, может, какими-то еще? Может, у Овна появились средства управления серво, которых я не обнаружил?
2. Тут видно изменение скорости. А точное позиционирование не реализовывали?
3. Дерганья на видео - это механические резонансы?
Еще раз спасибо.

krollcbas
02.09.2023, 12:28
1. Нет не пользовался. Все писал самостоятельно. У ОВЕН есть документация по работе с быстрыми выходами и входами.

16_Timer.Lib (https://disk.yandex.ru/d/1FHQq5uv_rRrqw)


Но как по мне, так не сразу во все въехал, потребовались эксперименты.
Чего не вышло: вести в онлайн подсчет выдаваемых импульсов
Готовых решений не ищите, проще купить драйвер со встроенным Modbus и управлять по интерфейсу. Наверное так проще выйдет
2. Задача касалась именно позиционирования. Достигали сложно, таймерами. Ведь если известна скорость и время, то расстояние тоже известно.
Вопросы лишь в точности. Нам хватало +/- 1мм, были установлены концевые выключатели. Коэффициенты перерасчета в панели, так как рампа постоянно меняла расстояние (разные длины заготовок)
3. Да там встретились проблемы, на определенных скоростях встречали явление резонанса. Обошли это настройками самих драйверов

Тут описан сам проект:
https://fast-project.ru/projects/stanki/stanok-po-napayke-koltsevykh-uplotneniy.html

Виталий Светашов
02.09.2023, 13:00
krollcbas, еще раз огромное спасибо за подробный ответ и информацию, которой Вы поделились.
Modbus пока, к сожалению, отпадает, имеющийся драйвер без коммуникационных портов. Поэтому и STEP/DIR. Есть, правда, еще аналоговый вход и соблазн попробовать задавать скорость через него, а позицию отслеживать по энкодеру, своевременно притормаживая и останавливая. В общем, пока постараюсь исполнить песню "Я его слепила из того, что было" (железо подбирал не я).

capzap
02.09.2023, 13:22
Большое спасибо за ответ. Если не трудно:
1. Пользовались ли наработками Ситникова.

Здесь смотрели?https://owen.ru/forum/showthread.php?t=23013

Виталий Светашов
02.09.2023, 14:14
Здесь смотрели?https://owen.ru/forum/showthread.php?t=23013
Спасибо, смотрел. Может, недостаточно скурпулезно. Собственно, я об этом писал в исходном посте. Наработки Ситникова меня заинтересовали, но, повторюсь, мнения я читал разные. И спрашивал у тех, кто в теме: что таки в сухом остатке на сегодня, спустя 8 лет от начала обсуждения - можно на этом решать описанную задачу или нет. И есть ли на сегодня инструменты самих Овен для управления серво.

Филоненко Владислав
04.09.2023, 07:49
И да и нет.
Да - можно подавать сигналы STEP с заданной частотой и DIR по программе.
И нет - если речь идёт о сколь нибудь сложном движении с разгонами, переменными ускорениями и т.д., то силами одних PRU такие сложные матрасчёты реализовать невозможно, нужно иметь часть кода на ST, который будет готовить набор простых команд по шагам.
Готового решения никто не выкладывал.

Виталий Светашов
04.09.2023, 10:59
И да и нет.
Спасибо за ответ.

umikr
27.03.2024, 11:55
Добра всем, делаю первые шаги по освоению в Программирование ПЛК110 [М02] для задач реального времени,
есть проблема с переключением питания, после загрузки программы PRU, контроллер не запускается, помогает только сброс с борта ПЛК.
Программировал с помощью Hardella IDE 1.7.2
PLCInfo
PLC model MODEL PLC 110-60
Версия ПО метр: 2.0
Binary VERSION 1.2.42
Need Target version >= 3.12
Compiled: 14:38:47 Feb 8 2021
STM32 binary version 115

1exan
27.03.2024, 12:20
Добра всем, делаю первые шаги по освоению в Программирование ПЛК110 [М02] для задач реального времени,
есть проблема с переключением питания, после загрузки программы PRU, контроллер не запускается, помогает только сброс с борта ПЛК.
Программировал с помощью Hardella IDE 1.7.2
PLCInfo
PLC model MODEL PLC 110-60
Версия ПО метр: 2.0
Binary VERSION 1.2.42
Need Target version >= 3.12
Compiled: 14:38:47 Feb 8 2021
STM32 binary version 115

Какое питание у ПЛК?
Попробуйте залить в ПЛК пустую программу (на ST - ";"), без Hardella и воспроизвести проблему

umikr
27.03.2024, 13:58
Питание 24 DC
Без Hardella работает.

1exan
27.03.2024, 15:05
Питание 24 DC
Без Hardella работает.

Может конечно и в харделле дело, но вот именно при питании 24В видел такое. Лечится отключением питания на подольше (секунд 30 например)

umikr
31.03.2024, 09:31
Вот ... не задача, удалил из контроллера PRU0.prg, загрузил программу "a:=a+1;" с загрузочным проектом, теперь при переключении питания (контроллер без программы, Загрузить программу?).
Может быть его надо как то по особому перезагрузить?

umikr
31.03.2024, 09:42
Создал новый проект, импортировал блок программ из харделла, которые использовал до этокго в проекте с харделла, и вижу как работает моя программа PRU0, созданная ранее.
кто то с таким встречался? И как мне вернуть контроллер в заводское состояние.

kondor3000
31.03.2024, 10:16
Создал новый проект, импортировал блок программ из харделла, которые использовал до этокго в проекте с харделла, и вижу как работает моя программа PRU0, созданная ранее.
кто то с таким встречался? И как мне вернуть контроллер в заводское состояние.

Откройте ПЛК -браузер, кнопка с 3 точками, выберете просмотр файлов команда filedir.
Файлы можно удалять - filedelete, копировать - filecopy, переименовывать - filerename.
Через меню Онлайн можно читать и записывать файлы в память ПЛК, надо только скопировать имя файла.

In_Da_Cher_A
31.03.2024, 15:33
удалил из контроллера PRU0.prgи как это было сделано?

umikr
01.04.2024, 09:15
Решилась проблема перепрошивкой ПЛК, прошивал через "UpdateCore" в браузере. Всем большое спасибо.

umikr
01.04.2024, 09:23
Может быть кто-то подскажет в чем проблема пустого контроллера после переключения питания с программой от Hardella. 74880

umikr
01.04.2024, 09:28
в проекте на in1 и in2 энкодер, на in4 счетчик, а на in3 измерение частоты импульсов. Подскажите какие ошибки я допустил.

umikr
01.04.2024, 09:30
и как это было сделано?

Через Браузер "filedelete" и перезагрузка контроллера.

In_Da_Cher_A
01.04.2024, 11:41
Через Браузер "filedelete" и перезагрузка контроллера.а зачем так сложно?чем простая загрузка нового проекта не устраивает?

capzap
01.04.2024, 11:47
а зачем так сложно?чем простая загрузка нового проекта не устраивает?

Вы перепутали, речь не о проекте а о программах PRU которые запускаются в самой ОС контроллера, а не в реалтайме КДС

In_Da_Cher_A
01.04.2024, 13:43
Вы перепутали, речь не о проекте а о программах PRU которые запускаются в самой ОС контроллера, а не в реалтайме КДС
теперь сообразил, он там что-то писал ещё про загрузочный, я и запутался