Страница 6 из 6

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

Добавлено: 06 дек 2012, 12:19
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. нет кз и не в последней точке - едем вперед по буферу.

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

Добавлено: 06 дек 2012, 12:56
Dmitriy
Nick писал(а): Буфер будет записываться циклично, т.е. как только доходим до конца буфера, начинаем писать в начало. И читаться он будет также. Поэтому, в самом начале в буфере могут быть вообще любые значения. В общем это нужно, чтобы потом не словить баг.
Извините не программист, но есть вопрос. А может можно буфер сделать типа "стек", т.е. значение которое вошло первым, выйдет последним, а если первое значение дошло до конца буфера, то оно просто стирается, тогда первым станет второе по очереди значение, и т.д.?
"как только доходим до конца буфера, начинаем писать в начало" - значит при переходе из конца в начало, будет минимальный правильный отъезд, а дальше старые, неправильные координаты? Или я чего-то не понял? Еще раз извините если вопросы -"дурацкие" :thinking: .

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

Добавлено: 06 дек 2012, 19:32
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: