Написание плагинов движения для mach3

Mach, популярные и не очень CAD, CAM. Обсуждение и разработка программ для управления станками.
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Написание плагинов движения для mach3

Сообщение ipr »

Пытаюсь сделать внешний контроллер (что-то вроде SmoothStepper) для работы с мачем. Соответственно, для общения с ним нужно написать плагин. Вроде и есть вся документация и примеры с их официального сайта, но не все, оказывается, так просто...
Собственно, в плагине нужно реализовать несколько функций, и на данном этапе мне нужны только две: InitControl и Update. Пишу в InitControl следующее:

Код: Выделить всё

MachView->m_PrinterOn = false; //отключаем драйвер параллельного порта
MainPlanner->ExternalType = EX_VMS; //расчет траектории с изменяющимся временем
MainPlanner->ExBufferHi	= 250; //размер буфера
MainPlanner->ExTime = 0.004; //базовый период времени для движения с постоянной скоростью
for(int i = 0; i < 7; i++)
{
	MainPlanner->ExternalPulseRates[i] = 7200.0; //максимальная частота сигнала step для каждой оси
}
При запуске Mach3 находит этот плугин, но в форме "Motors tuning" не удается настроить скорость - она сразу же сбрасывается в ноль. Установить не нулевую скорость можно только если поставить количество шагов/мм равным нулю. Если же закомментировать строку

Код: Выделить всё

MainPlanner->ExternalPulseRates[i] = 7200.0; //максимальная частота сигнала step для каждой оси
, то скорость настраивается, но массив с траекториями MainPlanner->Movements заполняется очень большими значениями, не соответствующими необходимому перемещению (что логично - если частота шагов равна нулю, то их количество стремится к бесконечности :hehehe: ).

Есть ли на форуме те, кто писал плугины для мача? Что можете посоветовать, что я делаю не так?
Последний раз редактировалось ipr 31 янв 2013, 19:09, всего редактировалось 1 раз.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение aftaev »

ipr писал(а):роде и есть вся документация
ссылку на документацию?
ipr писал(а): этот плугин
мож все таки плАгин ?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

Наверное, я неправильно выразился, назвав это документацией, но разобраться, что к чему, все-таки по ним можно (я так самонадеянно посчитал)...
Например, вот: http://www.machsupport.com/MachCustomiz ... ce_control
В SDK есть примеры для контроллера Galil. На форуме у них также есть проект Step2Mach от пользователя jarek, с открытыми исходниками.

плАгин - может быть и так, я просто привык писать плУгин :-)
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение aftaev »

когда пытался разобраться с плагинами документации по описанию функций так и не нашел.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение aftaev »

твоя плата что должна принимать? Плагин ей что сбрасывает?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

Документации, как таковой, нет, но по примерам из SDK вроде все понятно. Но вот такие же проблемы как и у меня, уже спрашивали на их форуме (безрезультатно). Впрочем, я тоже сегодня им задал такой вопрос, вдруг мне ответят :-)

Касаемо протокола: планирую сбрасывать количество импульсов step по оси и количество промежутков (равных по времени импульсу step). По 1 байту на каждую переменную, то есть для 3х осей (а мне больше и не надо) требуется 6+1 байт (1 байт содержит 4 бита кода команды и 4 бита кодов направлений по осям). Если что-то не помещается в 1 байт, то разбиваем команду на несколько. Если принять, что отрезок траектории с равными скоростями по осям рассчитывается на не менее чем 1 миллисекунду, то для обмена данными должно хватить даже скорости COM порта компьютера. Но это надо проверять, поэтому я и начал с плАгина. Впрочем, железку на базе ATMega32 я тоже собрал, и с HyperTerminal-а она уже управляется - но частота шагов пока маленькая (7200 Гц) и хвастть тут нечем...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение Nick »

ipr писал(а):При запуске Mach3 находит этот плугин, но в форме "Motors tuning" не удается настроить скорость - она сразу же сбрасывается в ноль.
А может скорость надо настраивать там же где и указываешь максимальную частоту шагов? Или настраивать надо совсем не скорость, а к-во шагов на мм. Т.к. максимальная скорость и так уже есть, она равна 7200 шагов в сек. Нет только коэффициента шагов на мм....
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

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

Re: Пишу плугин для mach3, нужна помощь

Сообщение Nick »

Кстати, там по ссылке пишут:
after setting a max speed with Engine->Axis[n].MaxVelocity = 8334400, the jog would be automatic and will ramp up to speed and hold until told to stop. The 8334400 is the number of steps/second * 2^12 in order to give the integer based engine code a divisable integer to get many points of precision.
Может и тут надо ставить шагов/секунду * 212?
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

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

Re: Пишу плугин для mach3, нужна помощь

Сообщение Nick »

А что вообще значит эта переменная, зачем ее задавать? Есть хоть какой-то ман по ней?
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

К сожалению, о ней нет почти никакой информации, кроме комментариев в примерах. Ее обязательно нужно задавать, если используем не стандартный для мача драйвер параллельного порта, а внешний контроллер. Зная ее, Мач не позволит задать в настройках моторов недостижимую скорость. А стабильную рабочую скорость передвижений по осям задавать нужно обязательно, без них мач не сможет рассчитать траекторию.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение aftaev »

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

Re: Пишу плугин для mach3, нужна помощь

Сообщение Nick »

ipr писал(а):Зная ее, Мач не позволит задать в настройках моторов недостижимую скорость. А стабильную рабочую скорость передвижений по осям задавать нужно обязательно, без них мач не сможет рассчитать траекторию.
может начать с малого и просто для начала запомнить, что не надо выставлять в маче скорость больше такой-то. А это оставить на потом.
И для начала сделать работающий генератор, и уже потом его дорабатывать?
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

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

Re: Пишу плугин для mach3, нужна помощь

Сообщение Nick »

Хмм... а можешь целиком исходник скинуть, и примерную инструкцию как все это запускать. Чтоб попробовать протестировать
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение aftaev »

ipr писал(а): Но, сейчас я не могу понять, буду ли успевать передать данные запланированного вида быстрее, чем mach их формирует (конечно же, с их буферизацией), и обрабатывать,
по какому порту гнать будешь?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

Nick писал(а):а можешь целиком исходник скинуть
Вечером скину, сейчас я на работе...
aftaev писал(а):по какому порту
Для начала хочу попробовать по RS232, но подозреваю, что скорости не хватит (у меня на компьютере максимально возможно 115200 бит/сек). А в будущем планировал переходить на Ethernet на базе ENC28J60.
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

Ура! Прогресс пошел!
ВНИМАТЕЛЬНО почитав официальный форум, а также связавшись с одним из тех, кто сталкивался с этой проблемой, выяснилось: для создания плагинов нужна VisualStudio2003, а если использовать более новую - то с опубликованным SDK ничего хорошего не выйдет, нужен переработанный. И он есть на их форуме вот в этой теме: http://www.machsupport.com/forum/index. ... 733.0.html
Как только я заменил папку MachIncludes на появившуюся после установки MachPlugunWizard-а, практически сразу удалось собрать пример плагина mach_vmotion (http://www.machsupport.com/forum/index. ... 612.0.html). И настройка моторов заработала!
Вечером буду переделывать свой плагин под новый SDK.
Исходники опубликую, это будет open-source проект :-)
ipr
Кандидат
Сообщения: 65
Зарегистрирован: 13 ноя 2012, 17:03
Репутация: 1
Откуда: Екатеринбург
Контактная информация:

Re: Пишу плугин для mach3, нужна помощь

Сообщение ipr »

Первые результаты (надеюсь, что не последние :hehehe: ): плагин сохраняет в файл "C:\gmoves.txt" данные, с помощью которых можно сформировать импульсы step и dir. Каждая строка содержит в себе количество шагов по осям (с одинаковой частотой их следования для каждой оси) за период времени, равный 32 миллисекунды (расчетное время задается в плагине).

Во вложении сам скомпилированный плагин и исходники. Также архив содержит заголовочные файлы, с которыми может работать VisualStudio 2010 Express.
Вложения
Pulse_20121114.zip
(8.64 МБ) 2699 скачиваний
Ответить

Вернуться в «Windows / Mach»