Электроэрозионная обработка на ЕМС2

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

Re: Электроэрозионная обработка на ЕМС2

Сообщение Nick »

vmarkiv писал(а):Nick , А может по сигналу КЗ менять значение , к примеру net Xvel-cmd pid.0.output на противоположное , типа net Xvel + cmd pid.0.output ?
Об этом уже думали - в случае дуги или угла упремся в край реза. Надо отходить именно по траектории.
Dmitriy писал(а):Не понял, что значит универсальнее, на шаговых двигателях работать будет?
Да, внутри LinuxCNC есть компонент motion который выдает задания другим компонентам в том числе и stepgen (который генерирует шаги для ШД). Так вот, если мы подменим это задание, то это будет более универсально, т.к. таким образом мы записываем траекторию на более высоком уровне и сможем использовать алгоритм не только с шаговиками, но и с любыми другими двигателями.
Dmitriy писал(а):Так если буфер(траектории), то какая разница что было до КЗ. Что программа, что подпрограмма, все равно отъезд по записанной в буфер траектории?
Буфер будет записываться циклично, т.е. как только доходим до конца буфера, начинаем писать в начало. И читаться он будет также. Поэтому, в самом начале в буфере могут быть вообще любые значения. В общем это нужно, чтобы потом не словить баг.
Dmitriy писал(а):Наверное так - как только пропало КЗ проигрываем буфер вперед до сохраненного pointer. И если нет КЗ врубаем подачу, а если снова КЗ, то снова проигрываем буфер назад.
Точно. Просто будет 3 состояния:
1. нет кз, и буфер на последней точке - записываем новую точку.
2. есть кз - едем назад по буферу
3. нет кз и не в последней точке - едем вперед по буферу.
Dmitriy
Кандидат
Сообщения: 41
Зарегистрирован: 28 ноя 2012, 14:13
Репутация: 0
Контактная информация:

Re: Электроэрозионная обработка на ЕМС2

Сообщение Dmitriy »

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

Re: Электроэрозионная обработка на ЕМС2

Сообщение Nick »

Все типо того и будет. Просто нам надо сделать быстрый модуль, который будет надежно работать. В Си все это делается через pointers (указатели) на адрес памяти.
Т.е. есть переменная X, на нее можно найти указатель X*, Так вот, чтобы получить значение в памяти рядом с X достаточно взять указатель X*+1.
Таким образом можем организовать буфер в памяти. Пример на 5 точек:

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

1  2  3  4  5  6  7  8  9  0 
x  y  x  y  x  y  x  y  x  y
Каждый раз храним указатель на первую точку p1=1*, последнюю точку pn=9*, и текущую p.
Для записи пишем точку в указатель p, смотрим, если он равен 9*, то делаем p=1*, иначе p=p+2
Таким образом буфер будет записываться кругами с перескоком назад.
Читать можно таким же образом.

ЗЫ в си не силен, поэтому синтаксис указателей наверняка не правильный, но вроде идея должна быть такой :freak:
Ответить

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