Ввод в эксплуатацию ЧПУ системы на основе контроллера Kflop.

KFlop, KStep, KAnalog, KMotion...

Имеете ли вы контроллер Kflop? :-)

Можно выбрать до 1 варианта ответа

 
 
Результаты голосования

Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

Задача разбирается вот тут
http://mir-cnc.ru/topic/15802-%D1%88%D1 ... %BE%D0%B5/
Есть функция CheckDone<N> определяющая, что ось выполнила задание:
Вчера тестил её в консоле. Вне зависимости, двигается ось или нет. Значение "1". Да и вообще, манипуляции с осями не дадут результата, так как не будет события запуска оси без включенного драйвера. Смогу только останавливать.
Smouk
Кандидат
Сообщения: 76
Зарегистрирован: 08 ноя 2016, 16:36
Репутация: 32
Настоящее имя: Алексей
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Smouk »

Al4nse писал(а):Вчера тестил её в консоле. Вне зависимости, двигается ось или нет. Значение "1". Да и вообще, манипуляции с осями не дадут результата, так как не будет события запуска оси без включенного драйвера.
Функция работает четко, проверьте в коде. Как вы проверяете это из консоли не ясно - команды идут через буфер и команда на проверку состояния оси в этом случае выполняется только после остановки - другого результата быть не могло.

В теме не увидел были ли настроены фильтры. Скиньте сюда файл инициализации.
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

Я про эти нюансы работы консоли не знал. попробую использовать в C коде.
Вы про IIR фильтры? я вообще понятия не имею как их настраивать.
вот код:

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

#include "KMotionDef.h"
void main()
{
	int BitA,Change1=0,Change2=0, DiffX2;
	int PosNoWrap, NewPos, Pos=0, wraps;
	double Factor=0;
	

	ch0->InputMode=ENCODER_MODE;
	ch0->OutputMode=DAC_SERVO_MODE;
	ch0->Vel=99471.8394324346;
	ch0->Accel=198943.6788648692;
	ch0->Jerk=1e+09;
	ch0->P=1.07;
	ch0->I=0;
	ch0->D=0;
	ch0->FFAccel=0;
	ch0->FFVel=0;
	ch0->MaxI=2047;
	ch0->MaxErr=10000;
	ch0->MaxOutput=2047;
	ch0->DeadBandGain=1;
	ch0->DeadBandRange=0;
	ch0->InputChan0=0;
	ch0->InputChan1=0;
	ch0->OutputChan0=0;
	ch0->OutputChan1=0;
	ch0->MasterAxis=-1;
	ch0->LimitSwitchOptions=0x100;
	ch0->LimitSwitchNegBit=0;
	ch0->LimitSwitchPosBit=0;
	ch0->SoftLimitPos=1e+09;
	ch0->SoftLimitNeg=-1e+09;
	ch0->InputGain0=1;
	ch0->InputGain1=1;
	ch0->InputOffset0=0;
	ch0->InputOffset1=0;
	ch0->OutputGain=1;
	ch0->OutputOffset=0;
	ch0->SlaveGain=1;
	ch0->BacklashMode=BACKLASH_OFF;
	ch0->BacklashAmount=0;
	ch0->BacklashRate=0;
	ch0->invDistPerCycle=0.00025;
	ch0->Lead=0;
	ch0->MaxFollowingError=100000;
	ch0->StepperAmplitude=100;

	ch0->iir[0].B0=1;
	ch0->iir[0].B1=0;
	ch0->iir[0].B2=0;
	ch0->iir[0].A1=0;
	ch0->iir[0].A2=0;

	ch0->iir[1].B0=1;
	ch0->iir[1].B1=0;
	ch0->iir[1].B2=0;
	ch0->iir[1].A1=0;
	ch0->iir[1].A2=0;

	ch0->iir[2].B0=1;
	ch0->iir[2].B1=0;
	ch0->iir[2].B2=0;
	ch0->iir[2].A1=0;
	ch0->iir[2].A2=0;
	    
	ch1->InputMode=ENCODER_MODE;
	ch1->OutputMode=DAC_SERVO_MODE;
	ch1->Vel=99471.8394324346;
	ch1->Accel=198943.6788648692;
	ch1->Jerk=1e+09;
	ch1->P=1.07;
	ch1->I=0;
	ch1->D=0;
	ch1->FFAccel=0;
	ch1->FFVel=0;
	ch1->MaxI=2047;
	ch1->MaxErr=10000;
	ch1->MaxOutput=2047;
	ch1->DeadBandGain=1;
	ch1->DeadBandRange=0;
	ch1->InputChan0=1;
	ch1->InputChan1=1;
	ch1->OutputChan0=1;
	ch1->OutputChan1=1;
	ch1->MasterAxis=0;
	ch1->LimitSwitchOptions=0x100;
	ch1->LimitSwitchNegBit=0;
	ch1->LimitSwitchPosBit=0;
	ch1->SoftLimitPos=1e+09;
	ch1->SoftLimitNeg=-1e+09;
	ch1->InputGain0=1;
	ch1->InputGain1=1;
	ch1->InputOffset0=0;
	ch1->InputOffset1=0;
	ch1->OutputGain=1;
	ch1->OutputOffset=0;
	ch1->SlaveGain=-1;
	ch1->BacklashMode=BACKLASH_OFF;
	ch1->BacklashAmount=0;
	ch1->BacklashRate=0;
	ch1->invDistPerCycle=0.00025;
	ch1->Lead=0;
	ch1->MaxFollowingError=100000;
	ch1->StepperAmplitude=100;

	ch1->iir[0].B0=1;
	ch1->iir[0].B1=0;
	ch1->iir[0].B2=0;
	ch1->iir[0].A1=0;
	ch1->iir[0].A2=0;

	ch1->iir[1].B0=1;
	ch1->iir[1].B1=0;
	ch1->iir[1].B2=0;
	ch1->iir[1].A1=0;
	ch1->iir[1].A2=0;

	ch1->iir[2].B0=1;
	ch1->iir[2].B1=0;
	ch1->iir[2].B2=0;
	ch1->iir[2].A1=0;
	ch1->iir[2].A2=0;
	
	
	ch2->InputMode=ENCODER_MODE;
	ch2->OutputMode=DAC_SERVO_MODE;
	ch2->Vel=99471.8394324346;
	ch2->Accel=198943.6788648692;
	ch2->Jerk=1e+09;
	ch2->P=1.2;
	ch2->I=0.0031;
	ch2->D=0.00047;
	ch2->FFAccel=0;
	ch2->FFVel=0;
	ch2->MaxI=2047;
	ch2->MaxErr=1e+09;
	ch2->MaxOutput=2047;
	ch2->DeadBandGain=1;
	ch2->DeadBandRange=0;
	ch2->InputChan0=2;
	ch2->InputChan1=2;
	ch2->OutputChan0=2;
	ch2->OutputChan1=2;
	ch2->MasterAxis=-1;
	ch2->LimitSwitchOptions=0x100;
	ch2->LimitSwitchNegBit=0;
	ch2->LimitSwitchPosBit=0;
	ch2->SoftLimitPos=1e+09;
	ch2->SoftLimitNeg=-1e+09;
	ch2->InputGain0=1;
	ch2->InputGain1=1;
	ch2->InputOffset0=0;
	ch2->InputOffset1=0;
	ch2->OutputGain=1;
	ch2->OutputOffset=0;
	ch2->SlaveGain=1;
	ch2->BacklashMode=BACKLASH_OFF;
	ch2->BacklashAmount=0;
	ch2->BacklashRate=0;
	ch2->invDistPerCycle=0.00025;
	ch2->Lead=0;
	ch2->MaxFollowingError=100000;
	ch2->StepperAmplitude=100;

	ch2->iir[0].B0=1;
	ch2->iir[0].B1=0;
	ch2->iir[0].B2=0;
	ch2->iir[0].A1=0;
	ch2->iir[0].A2=0;

	ch2->iir[1].B0=1;
	ch2->iir[1].B1=0;
	ch2->iir[1].B2=0;
	ch2->iir[1].A1=0;
	ch2->iir[1].A2=0;

	ch2->iir[2].B0=1;
	ch2->iir[2].B1=0;
	ch2->iir[2].B2=0;
	ch2->iir[2].A1=0;
	ch2->iir[2].A2=0;
	
    
    Zero(1);
    Zero(0);
    Zero(2);
	EnableAxisDest(1,0);
	EnableAxisDest(0,0);
	EnableAxisDest(2,0);
	
	 
    DefineCoordSystem(0,2,-1,-1);
	printf("Init complete\n");
	
	/*for (;;)  //loop forever
   {
       WaitNextTimeSlice();
         if (CheckDone(0)==0 & CheckDone)         
         SetBit(144);           
         else
         ClearBit(144);
    }*/
    
	return 0;
}
UPD: Попробовал использовать CheckDone.

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

for (;;)  //loop forever
   {
       WaitNextTimeSlice();
         if (BufDoneAxis0==0 & CheckDone(0)==1)         
         { printf("Ostanov\n");
           ClearBit(144);
           ClearBit(145);
           BufDoneAxis0=CheckDone(0);
          } 
         else
           {
           BufDoneAxis0=CheckDone(0);
            } 
           
         if (BufDoneAxis2==0 & CheckDone(2)==1)         
         { printf("Zapusk(ostanov)\n");
           SetBit(144);
           SetBit(145);
           BufDoneAxis2=CheckDone(2);
          } 
          else
          { 
           BufDoneAxis2=CheckDone(2);
          }       
                  
    }
События CheckDone(0) и CheckDone(2) наступают одновременно. Вне зависимости от того какой осью двигаешься. Нулевой или второй. Наступают только при перемещении по Jog. По G1 ничего нет.
Smouk
Кандидат
Сообщения: 76
Зарегистрирован: 08 ноя 2016, 16:36
Репутация: 32
Настоящее имя: Алексей
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Smouk »

Почему у Вас нет интегрирующей составляющей в регуляторе?

На счет CheckDone из кода непонятно, как Вы определяется когда наступило событие, но это в любом случае костыльное решение и я бы все таки начал с IIR фильтров. Как раз "гудение" есть шансы ими убрать.

Попробуйте в начале фильтр нижних частот(Low Pass) первого порядка на выходе регулятора(это последний, второй фильтр в KMotion) просто для понимания решит ли это задачу. После нажатия "Compute", затем "Download" - фильтр до переинициализации применяется сразу.
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

Smouk писал(а):Почему у Вас нет интегрирующей составляющей в регуляторе?

На счет CheckDone из кода непонятно, как Вы определяется когда наступило событие, но это в любом случае костыльное решение и я бы все таки начал с IIR фильтров. Как раз "гудение" есть шансы ими убрать.

Попробуйте в начале фильтр нижних частот(Low Pass) первого порядка на выходе регулятора(это последний, второй фильтр в KMotion) просто для понимания решит ли это задачу. После нажатия "Compute", затем "Download" - фильтр до переинициализации применяется сразу.
А с какой частотой-то рассчитывать?
Новый точечный рисунок.jpg (7306 просмотров) <a class='original' href='./download/file.php?id=119339&mode=view' target=_blank>Загрузить оригинал (86.15 КБ)</a>
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

И еще вопрос. На оптовыход KAnalog заведён сигнал S-ON(активация серводрайвера). Сейчас при настройке есть ряд нештатных ситуаций. Например в состоянии покоя, снимаем S-ON и рукой передвигаем ось. После активации S-ON ось с огромным толчком возвращается в предыдущее положение. Или же во время движения опять снимаем S-ON. Ось останавливается. После активации S-ON, ось всё с тем же огромным толчком двигается в заданное положение.
Короче, почему KFLOP выдаёт 10 в на отработку ошибки??
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Duhas »

видимо потому что ошибка велика? или велико значение интегратора регулятора. зачем вам руками сдвигать ось? если это штатная необходимость - при включении серв следует приравнять задание положения оси к реальному положению..
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

Duhas писал(а):видимо потому что ошибка велика? или велико значение интегратора регулятора.
ок. ошибка велика, велико значение интегратора. но kflop на выходе выдаёт 10в. именно это я понимаю под огромным толчком. Хотя в файле инициализации скорость ограничена 99471.8394324346 имп/сек = 596,831036594608 об/мин.
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Duhas »

это скорее всего настройка планировщика, а выход 10в - это выход регулятора положения, если хотите ограничить выход регулятора - укажите это явно max output
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

Duhas писал(а):это скорее всего настройка планировщика, а выход 10в - это выход регулятора положения, если хотите ограничить выход регулятора - укажите это явно max output
Спасибо. Ограничу ошибку следования и выход регулятора.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Serg »

Al4nse писал(а):Ограничу ошибку следования и выход регулятора.
Это тупиковый путь, я это уже проходил:
Re: Плазморез со смарт-вентиляцией #40
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Smouk
Кандидат
Сообщения: 76
Зарегистрирован: 08 ноя 2016, 16:36
Репутация: 32
Настоящее имя: Алексей
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Smouk »

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

1. Вы решили проблему с гудением?
2. Разобрались и попробовали фильтры?
3. Зачем двигать ось руками?
4. В параллельной ветке был Ваш вопрос про работу двух моторов на одной оси. Мы говорим про один мотор - одна ось?
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

(для просмотра содержимого нажмите на ссылку)
Прежде всего хочу поблагодарить за проявленный интерес.
Smouk писал(а):Al4nse, я думаю Вы не боритесь с основной проблемой и пытаетесь решить ее наскоком и спорными методами.
К сожалению, источник проблемы найти не удаётся. есть шумы и набор симптомов, которые приводят к выводу о том, что проблема явно не в Kflope, а в механике + приводы. Именно поэтому основную проблему я и не стал здесь описывать.
Smouk писал(а): 1. Вы решили проблему с гудением?
Нет, не решил.
Smouk писал(а): 2. Разобрались и попробовали фильтры?
Нет, не пробовал. Не разобрался. Не понятно в какой частоте их вычислять. я писал об этом в #985.
Smouk писал(а): 3. Зачем двигать ось руками?
Отработка нештатных ситуаций.
Smouk писал(а): 4. В параллельной ветке был Ваш вопрос про работу двух моторов на одной оси. Мы говорим про один мотор - одна ось?
Гудение наблюдается в двух моторах на портале.
Smouk
Кандидат
Сообщения: 76
Зарегистрирован: 08 ноя 2016, 16:36
Репутация: 32
Настоящее имя: Алексей
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Smouk »

Фильтры такая штука, которую без системы трудно посоветовать. Попробуйте, как я уже писал фильтр на выходе регулятора (это крайний справа). Low pass и попробуйте числа порядка 30, 150. Просто понять вносит это изменения или нет.

Ось, на мой взгляд руками не двигают все таки. Если уж пришлось, то нужно нажать "STOP" и заново инициализироваться. Это сбросит текущее задание. В противном случае система и должна передвигаться к заданной точке на максимальной скорости и с ускорением из инит файла. При большой ошибки позиции станок сам должен выключать оси(MaxFollowingError) или вставать на FeedHold.

Два мотора на одной оси это по механике, конечно, не самый простой случай.

А что измеряет перемещение? Линейка или теже самые энкодеры на валу двигателей? То есть какой сигнал и сколько заведено в KFLOP?
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

Smouk писал(а): А что измеряет перемещение? Линейка или теже самые энкодеры на валу двигателей? То есть какой сигнал и сколько заведено в KFLOP?
Всё подключено согласно этой теме. С небольшой лишь поправкой на организацию работы Master-Slave двух приводов.
С двух сервоусилителей взяты сигналы A/В и подключены к каналам 0 и 1 KAnaloga.
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

Добрый вечер, уважаемые форумчане.
Появилась жизненная необходимость использовать в C Programs вот эти два параметра.
Новый точечный рисунок.jpg
Новый точечный рисунок.jpg (21.45 КБ) 7010 просмотров
Может, кто знает как к ним обращаться или вызывать?
Bes
Новичок
Сообщения: 21
Зарегистрирован: 19 июн 2017, 15:27
Репутация: 0
Настоящее имя: Андрей
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Bes »

Может, кто знает как к ним обращаться или вызывать?
Если не ошибаюсь, то вызвать можно командой Jog(0, 600); Где первый параметр номер оси, а второй величина скорости в импульсах.
Цель оправдывает средства.
Al4nse
Кандидат
Сообщения: 46
Зарегистрирован: 16 авг 2017, 09:34
Репутация: 1
Настоящее имя: Евгений
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Al4nse »

К сожалению, напрямую данными параметрами оперировать нет возможности. Том посоветовал для вычисления актуальной скорости, пользоваться формулой из VelocityToPWM.c А заданную скорость копировать в параметры G кодов M100-M119.
Аватара пользователя
donvictorio
Мастер
Сообщения: 2457
Зарегистрирован: 11 окт 2012, 16:26
Репутация: 683
Настоящее имя: Виктор
Откуда: Санкт-Петербург
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение donvictorio »

Не нашёл, может уже обсуждали: когда ось переходит через машинный ноль, движки на мгновение останавливаются и ось "стучит". это фича или баг? если баг, то как его поправить?

(станок выключается всегда в разных координатах, машинными вообще не пользуюсь, не умею)
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Duhas »

именно через ноль или через концевик ? через концевик проезжая я этого на замечал, по идее там же находится и ноль у меня )
Ответить

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