Настройка EMC2 на работу с COM(RS-232) портом

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Impartial »

root писал(а):2. Ни в windows ни тем более в python EMC не встроить.
А нельзя подробнее почему. Ведь указанный выше исходник работает под виндой, а это практически вся ЕМС только без графической оболочки.
Встроить это значит добавить графическую оболочку пользователя. И использовать для тестирования полученного кода, да и управлять станком можно.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

EMC2 использует специально модифицированное ядро Linux для поддержки процессов с приоритетом реального времени. Под windows это реализовать не возможно. Процессы с таким приоритетом выполняют все основные функции EMC2.

Все то, что работает под windows не может обеспечить такую же скорость отклика. Да, оно может управлять станками, но хуже, чем EMC2.

Честно говоря, не запускал твою программу, т.к. нет win. А у нее нет своего GUI? Вообще, такие программы просто выполняют Gкод, который генерируется внешними приложениями. Т.е. есть два класса программ:
  • CAM - которые создают Gкод на основе моделей, рисунков или других описаний.
  • Контроллеры или управляющие программы - которые интерпретируют Gкод.
И нет особого смысла их объединять.

Теоретически, можно сделать, чтобы созданный Gкод сразу открывался в gcodecompiler, но это сэкономит только один клик.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

Мне кажется, что на PID контроллер подается именно положение (в рамках управления станками с линейными осями). Иначе, что он вычисляет? Из скорости - скорость?
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Impartial »

РеалТайм нужен только для того, чтобы дергать пинами более менее равномерно и с внешним контроллером даже MSDOS не сравнится.
В нашем случае есть только одно ограничение - время отклика системы не должно превышать периода сервоцикла .

PID регулятор предназначен не для вычисления а для удержания заданного параметра в заданной трубке погрешности.
Поэтому он не вычисляет из скорости скорость, а по заданной скорости удерживает скорость двигателя с заданной погрешностью. :)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

А, ну да. Хотя, даже еще хитрее. Он может и так и так. На PID можно подавать как скорость, так и положение.

Вот выдержка из руководства ЕМС2:
Три наиболее важных пина это:
  • (FLOAT) pid.<loopnum>.command – Желаемое положение, устанавливаемое другим системным компонентом.
  • (FLOAT) pid.<loopnum>.feedback – Текущее положение, измеряемое устройством обратной связи таким, как энкодер.
  • (FLOAT) pid.<loopnum>.output – Команда скорости, которая пытается переместиться из текущего положения в желаемое положение.
Для цикла положения, "command" и "feedback", в единицах измерения положения. Для линейных осей, это могут быть дюймы, мм, метры, или любая уместная единица.Также для поворотных осей, это могут быть градусы, радианы и т.д. Единицы пина "output" являются необходимым изменением чтобы feedback соответствовал command. По существу, для цикла положения "output" это скорость, в дюймах/с, мм/с, градусах/с и т.д. Единицы времени всегда секунды, а единицы скорости совпадают с единицами измерения положения. Если command и feedback в метрах, то output будет в метрах в секунду.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Impartial »

root писал(а):А, ну да. Хотя, даже еще хитрее. Он может и так и так. На PID можно подавать как скорость, так и положение.
Добавлю еще момент.

Все абсолютно верно. Вот именно пин скорости и выдаем в контроллер, а получаем состояние енкодеров или количество шагов.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

Это можно :).
Andradio
Новичок
Сообщения: 21
Зарегистрирован: 05 ноя 2010, 22:02
Репутация: 0
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Andradio »

Решил все таки попробовать на LPT микросхему L297(присмотрел в мануале что у нее есть режим для униполярных двигателей, плюс потом еще нашел схемку http://www.cnczone.ru/forums/index.php? ... st&id=2365 ).
Брат купил мне три L297 и плюс пару ULN2003 у меня было и я спаял их вместе монтажом типа "воронячее гнездо". Все работает, двигатель крутится от дотрагивания пальцем к выводу Clock 297ой. Прицепил на не совсем еще спаляный ЛПТ - все работает с програмкой Мак3. Но есть проблемка, двигатель крутится равномерно, а потом как бы пропускает один шаг и дальше начинает крутится. Думал может програмно что то но пока не смог запустить ЕМЦ2 так как РВшка чуть поцарапалась и не читается. Не знаете с чем это может быть связано? Может это нормально ?
Andradio
Новичок
Сообщения: 21
Зарегистрирован: 05 ноя 2010, 22:02
Репутация: 0
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Andradio »

Проблема пропала сама. Собрал схему на плату (один канал) крутиться стабильно, наверное где то были наводки или контакта не было ну или что то еще.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

С программами обычно такого не бывает, обычно если двигатель крутится, то все ок. Просто так один шаг пропускать не должен. Обычно, все как у тебя - проблема в железе. Из-за программы может пропускать шаги только если выставлены предельные максимальные скорости, ускорения или тайминги контроллера.

ЗЫ советую попробовать поставить с флешки, тем более что это стало чуть ли не проще чем с сидюка, и установочный образ/Live USB можно будет изменить. Сидюки в последнее время все чаще разочаровывают...
SergeyK

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение SergeyK »

Уважаемые коллеги! Перечитал эту ветку, но так и не понял как настроить EMC2 для работы с COM портом. Суть проблемы, имеется промышленный контролер с MODBUS скорость до 115200. В контролере имеются 4 синтезатора частоты до 200 кГц с разрешением 1 Гц. У меня серводвигатели и им маловато 50 кГц, которые выдаёт LPT порт. Мысль такая, постоянно передавать по MODBUS сразу одной пачкой скорости для всех синтезаторов и выходов, контролер по прерыванию записывает полученные значения скоростей в синтезаторы. В ответ контролер передает в EMC2 состояния своих входов. EMC2 легко работает с входами и выходами контролера по MODBUS, а вот как настроить EMC2, чтобы он передавал по MODBUS рассчитанные им скорости для осей.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

Все должно быть просто, тупо подключаем нужные пины (pid output и pid feedback) к пинам modbus.
Modbus у тебя уже настроен?

ЗЫ ничего, что "на ты"?
SergeyK

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение SergeyK »

Конечно ничего, что "на ты", сколько угодно. MODBUS пока не настраивал, просто теоретизирую. Пока руки не дошли, но скоро буду пробовать пока только с концевиками и кнопками. А вот на счёт пинов тут непонятно. Если передавать по MODBUS состояния пинов, то скорости СОМ порта не хватит точно. Хотелось бы, чтобы EMC2 передавал по MODBUS рассчитанную им скорость для каждой оси в настоящий период времени одним пакетом. Иначе говоря я вижу это таким образом, EMC2 передаёт значения скоростей осей не в свой Stepgen, а постоянно обновлял значения четырёх 32-х разрядных регистров в моём PLC через MODBUS. Ещё можно добавить один 16-ти разрядный регистр для выходов на включения охлаждение и т.п. + чтение одного 16-ти разрядного регистра для входов - концевики и т.п. В любом случае в EMC2 имеются переменные, где отражается значения частот, которые генерирует Stepgen в настоящий момент времени. Вот как раз значения этих переменных хотелось бы видить в регистрах PLC. PLC в свою очередь, с помощью своих синтезаторов частоты будет генерировать нужные частоты для каждой оси. Обратную связь пока не рассматриваю.
SergeyK

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение SergeyK »

Nick огромное спасибо за перевод мануала от EMC2. Перечитал ещё раз и похоже начинаю разбираться. Меня запутало определение "ПИНЫ" которое в данном случае являются переменными EMC2. Теперь всё становится на свои места. Спасибо за помощь.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

В EMC2 есть пины (переменные) переменные содержащие положения осей. Что-то вроде axis.N.motor-pos-cmd. Если мы хотим получить из положения скорость нужно просто взять производную от положения по времени. Для этого в EMC2 есть специальный компонент ddt - присоединяем к нему пин положения и на выходе имеем скорость.

Все просто :)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

В EMC2 есть пины (переменные) переменные содержащие положения осей. Что-то вроде axis.N.motor-pos-cmd. Если мы хотим получить из положения скорость нужно просто взять производную от положения по времени. Для этого в EMC2 есть специальный компонент ddt - присоединяем к нему пин положения и на выходе имеем скорость.

Все просто :)

PS ели ты зарегистрируешься, то ответы будут более быстрыми, я частенько забываю просматривать сообщения ожидающие модерации ;)
SergeyK
Новичок
Сообщения: 4
Зарегистрирован: 17 янв 2012, 15:41
Репутация: 0
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение SergeyK »

Настроил у себя MODBUS.
3.JPG (3065 просмотров) <a class='original' href='./download/file.php?id=3770&mode=view' target=_blank>Загрузить оригинал (49.43 КБ)</a>
4.JPG (3065 просмотров) <a class='original' href='./download/file.php?id=3771&mode=view' target=_blank>Загрузить оригинал (103.91 КБ)</a>
набросал две строчки в ладе
1.JPG (3065 просмотров) <a class='original' href='./download/file.php?id=3772&mode=view' target=_blank>Загрузить оригинал (31.16 КБ)</a>
Подавая напряжение на вход контроллера, посмотрел как будет реагировать выход. Да печально, задержка видна невооружённым глазом. Попробовал ещё вот так
5.JPG (3065 просмотров) <a class='original' href='./download/file.php?id=3773&mode=view' target=_blank>Загрузить оригинал (100.2 КБ)</a>
и задержка между включением входа и включением выхода не изменилась (на глаз). Конечно в мануале написано что работает MODBUS слабовато, но чтоб на столько. И похоже здесь дело не в скорости передачи, а в скорости обработки лад программы. Попробовал запустить выполнение G-кода, задержка между включением входа и включением выхода не изменилась опять.
Как я понял, доступ к MODBUS у EMC есть долько через ладер, для управления скоростью шпинделя по RS232 используется отдельный компонент GS2, или есть ещё какие то возможности передать например pid output и pid feedback по MODBUS.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Impartial »

SergeyK писал(а):есть ещё какие то возможности передать например pid output и pid feedback по MODBUS.
Через протокол MODBUS не получится.
Для этого нужна скорость не менее 921600 , полный дуплекс, специальный контроллер последовательного порта и специализированный драйвер для ЕМС.
Слишком жесткие ограничения по времени (1 мс). Мне удалось это запустить, но все равно остается открытым вопрос о привязке с сервоциклу.
SergeyK
Новичок
Сообщения: 4
Зарегистрирован: 17 янв 2012, 15:41
Репутация: 0
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение SergeyK »

В таком случае можно было бы и через Ethernet законектится. В EMC он похоже тоже поддерживается. Но видимо овчинка не стоит выделки, просто мне хотелось имеющийся контролер приспособить. А что собственно за драйвер такой специальный для EMC и с чем его едят, если не секрет? И ещё, будьте любезны, растолкуите, я пока ещё не в курсе, что в данном случае значит "сервоцикл"?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка EMC2 на работу с COM(RS-232) портом

Сообщение Nick »

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

Вообще через LinuxCNC можно управлять всем, чем угодно. Для этого пишется отдельный компонент на Cи, который экспортирует свои пины и функции. Функции можем добавлять к любому потоку (циклу). Т.е. пишем функцию, которая запихивает все в буфер отправки и по-возможности отправляем на устройство.
Также если не хочется сильно морочится можно написать модуль на Python, который будет работать с пинами hal и сам общаться с внешним устройством, но этот модуль будет работать не в realtime и, соответственно, при больших вычислительных нагрузках на компьютер может начать сильно тормозить.

Серво цикл или поток, или servo-thread это один из стандартных потоков в emc2 (хотя в принципе это просто название, которое меняется в .hal). По умолчанию он выполняется раз в 1 мс, к нему обычно привязаны функции планировщика траектории и расчет управляющих сигналов. Управление серво приводами происходит тоже в этом цикле. А вот например шаги stepgen генерируются в цикле base-thread который обычно в 30-50 раз быстрее.
Ответить

Вернуться в «LinuxCNC»