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

KFlop, KStep, KAnalog, KMotion...

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

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

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

Robston
Новичок
Сообщения: 20
Зарегистрирован: 04 апр 2016, 17:37
Репутация: 7
Настоящее имя: Роберт
Откуда: Москва
Контактная информация:

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

Сообщение Robston »

bzb писал(а):http://www.cnc-club.ru/forum/viewtopic. ... 43#p345843

не кфлоп, но может чем поможет
Спасибо! Но не поможет.
Это сервы. А у меня шаговики.
Robston
Новичок
Сообщения: 20
Зарегистрирован: 04 апр 2016, 17:37
Репутация: 7
Настоящее имя: Роберт
Откуда: Москва
Контактная информация:

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

Сообщение Robston »

Лимиты и хоумы на Z и Y настроил. Взял данные из листинга - Пост №10. Но там по одному мотору на ось. У меня 2 на ось. Есть специалисты по Хоуму подчиненных осей???? :thinking:
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

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

Сообщение mycnc »

Robston писал(а):
bzb писал(а):http://www.cnc-club.ru/forum/viewtopic. ... 43#p345843

не кфлоп, но может чем поможет
Спасибо! Но не поможет.
Это сервы. А у меня шаговики.
С шаговиками там тоже можно, если что. Но для макрос и PLC ориентированы под контроллер и c kflop не помогут.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

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

Сообщение ukr-sasha »

Robston писал(а):Лимиты и хоумы на Z и Y настроил. Взял данные из листинга - Пост №10. Но там по одному мотору на ось. У меня 2 на ось. Есть специалисты по Хоуму подчиненных осей????
В этом листинге каждая команда имеет комментарий о ее назначении.
По аналогии разве тяжело сделать? :thinking:
Robston
Новичок
Сообщения: 20
Зарегистрирован: 04 апр 2016, 17:37
Репутация: 7
Настоящее имя: Роберт
Откуда: Москва
Контактная информация:

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

Сообщение Robston »

ukr-sasha писал(а):
Robston писал(а):Лимиты и хоумы на Z и Y настроил. Взял данные из листинга - Пост №10. Но там по одному мотору на ось. У меня 2 на ось. Есть специалисты по Хоуму подчиненных осей????
В этом листинге каждая команда имеет комментарий о ее назначении.
По аналогии разве тяжело сделать? :thinking:
Александр, Добрый день!
Много получил полезной информации на разных форумах от Вас.
Очень помогают Ваши советы.

По хоуму на 2 мотора - алгоритм.

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

// поиск НОМЕ по X0 - X1 (подчиненные)

ch0->LimitSwitchOptions=0x100;    // отключение обработки концевого датчика на оси X, чтобы не блокировалась ось
ch4->LimitSwitchOptions=0x100;    // отключение обработки концевого датчика на оси B, чтобы не блокировалась ось
ch0->MasterAxis = -1;                    // Расподчинить обе оси
ch4->MasterAxis = -1;
Jog(0,-12000);                              // перемещение оси X в отрицательном направлении
Jog(4,-12000);                              // перемещение оси B в отрицательном направлении
//ЗДЕСЬ НЕ ЗНАЮ КАК создать конструкцию, что бы останавливалась та ось к у которой сработал датчик
//а вторая продолжала ехать до сработки ее датчика
while (ReadBit(38)) ;                    // ожидание срабатывания датчика по X- пин 38
Jog(0,0);                                     // остановка оси X
Zero(0);                                      // обнуление координаты оси X
MoveAtVel(0,819, 3000);              // перемещение оси X с датчика в позицию 819 имп 
while (!CheckDone(0)) ;               // ожидание окончания движения оси X
Zero(0);                                      // обнуление координаты оси X
while (ReadBit(41)) ;                   // ожидание срабатывания датчика по B- пин 41
Jog(4,0);                                    // остановка оси B
Zero(4);                                     // обнуление координаты оси B
MoveAtVel(4,819, 3000);            // перемещение оси B с датчика в позицию 819 имп 
while (!CheckDone(4)) ;             // ожидание окончания движения оси B
Zero(4);                                         // обнуление координаты оси B
ch0->MasterAxis = 0;                     //  Активировать обе оси
ch4->MasterAxis = 0;
ch0->LimitSwitchOptions=0x103;    // включение обработки концевого датчика на оси X, блокировать ось
ch4->LimitSwitchOptions=0x103;    // включение обработки концевого датчика на оси B, блокировать ось
Последний раз редактировалось Robston 19 мар 2017, 18:44, всего редактировалось 1 раз.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

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

Сообщение ukr-sasha »

Роберт. Опишите словами что вы хотите получить?
Чтобы по двум датчиками портал выравнивался?
Robston
Новичок
Сообщения: 20
Зарегистрирован: 04 апр 2016, 17:37
Репутация: 7
Настоящее имя: Роберт
Откуда: Москва
Контактная информация:

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

Сообщение Robston »

ukr-sasha писал(а):Роберт. Опишите словами что вы хотите получить?
Чтобы по двум датчиками портал выравнивался?
Да. Именно это.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

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

Сообщение ukr-sasha »

Я реализовывал такой алгоритм:
- ось едет до первого датчика, обнуляется
- снимается подчинение второго мотора
- второй мотор вращается до сработки второго датчика
- второй мотор вращается на величину смещения, которая состоит из двух слагаемых - расстояние между датчиками и величина деформации портала
- восстанавливается подчинение мотора

При таком алгоритме не нужно точно выставлять датчики.
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

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

Сообщение mycnc »

ukr-sasha писал(а):Я реализовывал такой алгоритм:
- ось едет до первого датчика, обнуляется
- снимается подчинение второго мотора
- второй мотор вращается до сработки второго датчика
- второй мотор вращается на величину смещения, которая состоит из двух слагаемых - расстояние между датчиками и величина деформации портала
- восстанавливается подчинение мотора

При таком алгоритме не нужно точно выставлять датчики.
У меня было так, но знающие люди сказали, что так плохо, крутя долго одним мотором можно попортить механику. А надо как-бы "проще".

- ось едет до обоих датчиков, снимается подчинение нужного мотора
- второй мотор вращается на величину смещения, которая состоит из двух слагаемых - расстояние между датчиками и величина деформации портала
- восстанавливается подчинение мотора
Это и показано на видео. Наверное, на kflope тоже должно получиться.
Robston
Новичок
Сообщения: 20
Зарегистрирован: 04 апр 2016, 17:37
Репутация: 7
Настоящее имя: Роберт
Откуда: Москва
Контактная информация:

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

Сообщение Robston »

Home 3 axis with Slave Axis X for KFlop
Большое спасибо, что не отказали в помощи!
Хотя, сухим остатком, пустые советы.
Я и сам могу придумать множество алгоритмов.
Я просил листинг.

Выкладываю полностью рабочий листинг хомления осей с подчиненными X для портального станка.
Портал движется по оси X двумя двигателями.
Концевики на каждой стороне оси запаралелены - X0-- и X0++ с одной стороны. X1(B)-- и X1(B)++ с другой стороны.
HomeX0=X0-- , HomeX1(B)=X1(B)--

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

#include "KMotionDef.h"

int DoPC(int cmd);
int DoPCInt(int cmd, int i);
#define GATH_OFF 0  // define the offset into the Gather buffer where strings are passed

main()
{
      // поиск НОМЕ по Z
            ch2->LimitSwitchOptions=0x100;   // отключение обработки концевого датчика на оси Z, чтобы не блокировалась ось
            Jog(2,6000);                     // перемещение оси Z в отрицательном направлении
            while (ReadBit(40)) ;            // ожидание срабатывания датчика по Z- пин 40
            Zero(2);                         // обнуление координаты оси Z
            Jog(2,0);                        // остановка оси Z
            MoveAtVel(2,-819,6000);          // перемещение оси Z с датчика в позицию 819 имп 
            while (!CheckDone(2)) ;          // ожидание окончания движения оси Z
            Jog(2,3000);                     // повторное перемещение оси Z в отрицательном направлении
            while (ReadBit(40)) ;            // ожидание срабатывания датчика по Z- пин 40
            Zero(2);                         // обнуление координаты оси Z
            Jog(2,0);                        // остановка оси Z
            MoveAtVel(2,-819,3000);          // перемещение оси Z с датчика в позицию 819 имп 
            while (!CheckDone(2)) ;          // ожидание окончания движения оси Z
            Zero(2);                         // обнуление координаты оси Z
            ch2->LimitSwitchOptions=0x103;// включение обработки концевого датчика на оси Z,
                                
                                
     // поиск НОМЕ по Y      
            ch1->LimitSwitchOptions=0x100;    // отключение обработки концевого датчика на оси Y, чтобы не блокировалась ось
            Jog(1,-12000);                    // перемещение оси Y в отрицательном направлении
            while (ReadBit(39)) ;             // ожидание срабатывания датчика по Y- пин 139
            Zero(1);                          // обнуление координаты оси Y
            Jog(1,0);                         // остановка оси Y
            MoveAtVel(1,819, 12000);          // перемещение оси Y с датчика в позицию 819 имп 
            while (!CheckDone(1)) ;           // ожидание окончания движения оси Y
            Jog(1,-3000);                     // повторное перемещение оси Y в отрицательном направлении
            while (ReadBit(39)) ;             // ожидание срабатывания датчика по Y- пин 139
            Zero(1);                          // обнуление координаты оси Y
            Jog(1,0);                         // остановка оси Y
            MoveAtVel(1,819, 3000);           // перемещение оси Y с датчика в позицию 819 имп 
            while (!CheckDone(1)) ;           // ожидание окончания движения оси Y
            Zero(1);                          // обнуление координаты оси Y
            ch1->LimitSwitchOptions=0x103;    // включение обработки концевого датчика на оси Y,


      // поиск НОМЕ по X0 - X1 (подчиненные)
			int axis_x, axis_b; // Флаг остановки оси.
            axis_x = 0;
			axis_b = 0;

            ch0->LimitSwitchOptions=0x100;    // отключение обработки концевого датчика на оси X, чтобы не блокировалась ось
			ch4->LimitSwitchOptions=0x100;    // отключение обработки концевого датчика на оси B, чтобы не блокировалась ось
            ch0->MasterAxis = -1;             // Расподчинить обе оси
	        ch4->MasterAxis = -1;

			// ReadBit(38) или ReadBit(38) == 1 --- Концевик не замкнут 
			// ReadBit(38) == 0 --- Концевик замкнут, конечное положение

			if (ReadBit(38)) { //  если концевик не замкнут, то 
              Jog(0,-1000);                    // перемещение оси X в отрицательном направлении
			}

            if (ReadBit(41)) { //  если концевик не замкнут, то 			
			  Jog(4,-1000);                    // перемещение оси B в отрицательном направлениик
			}
            
			//  Проверка цикла постусловием обязательна, т.к. необходимо один раз войти в цикл, чтобы остановить двигатели.
			do {
			  if ((ReadBit(38)==0) && (axis_x == 0)){  /// 1 или 0
                Jog(0,0.0);                         // остановка оси X
			    Zero(0);                          // обнуление координаты оси X		    
			    axis_x = 1;                       //  Признак концевика
			  }

			  if ((ReadBit(41)==0) && (axis_b == 0)){
			    Jog(4,0.0);                         // остановка оси B
                Zero(4);                          // обнуление координаты оси B
			    axis_b = 1;                       //  Признак концевика
			  }
			}
			while ((ReadBit(38)) || (ReadBit(41)));     

			//  Отъедут оба по очереди на 819 тактов = 1мм
			MoveAtVel(0,819, 3000);           // перемещение оси X с датчика в позицию 819 имп 
            while (!CheckDone(0)) ;           // ожидание окончания движения оси X
            Zero(0);                          // обнуление координаты оси X

			//  Второй
            MoveAtVel(4,819, 3000);           // перемещение оси B с датчика в позицию 819 имп
			while (!CheckDone(4)) ;           // ожидание окончания движения оси B  
            Zero(4);

			ch0->LimitSwitchOptions=0x103;    // включение обработки концевого датчика на оси X, блокировать ось
			ch4->LimitSwitchOptions=0x103;    // включение обработки концевого датчика на оси B, блокировать ось
			ch0->MasterAxis = 0;              //  Активировать обе оси
	        ch4->MasterAxis = 0;					
			
			MDI("G92.1");  // очистка всех действующих оффсетов
}

//далее код обеспечивающий ввод команды в MDI

// put the MDI string (Manual Data Input - GCode) in the 
// gather buffer and tell the App where it is
int MDI(char *s)
{
   char *p=(char *)gather_buffer+GATH_OFF*sizeof(int);
   int i;
   
   do // copy to gather buffer w offset 0
   {
      *p++ = *s++;
   }while (s[-1]);
   
   // issue the command an wait till it is complete
   // (or an error - such as busy)
   return DoPCInt(PC_COMM_MDI,GATH_OFF);
}


// Put an integer as a parameter and pass the command to the App
int DoPCInt(int cmd, int i)
{
   int result;
   persist.UserData[PC_COMM_PERSIST+1] = i;
   return DoPC(cmd);
}

// Pass a command to the PC and wait for it to handshake
// that it was received by either clearing the command
// or changing it to a negative error code
int DoPC(int cmd)
{
   int result;
   
   persist.UserData[PC_COMM_PERSIST]=cmd;
   
   do
   {
      WaitNextTimeSlice();   
   }while (result=persist.UserData[PC_COMM_PERSIST]>0);
   
   return result;
   }
Пришлось изучить основы C++
Robston
Новичок
Сообщения: 20
Зарегистрирован: 04 апр 2016, 17:37
Репутация: 7
Настоящее имя: Роберт
Откуда: Москва
Контактная информация:

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

Сообщение Robston »

Александр! Я сразу смекнул. Вы абсолютно правы! И я Вам очень благодарен. СПАСИБО. Нужно дать удочку, а не рыбу.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

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

Сообщение ukr-sasha »

Зато теперь перед вами открываются большие возможности в наращивании функционала станка.
Принцип организации вы я вижу поняли.
Искренне рад, что у вас все получается.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

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

Сообщение ukr-sasha »

Вижу в вашем алгоритме потенциальную сложность. Надо будет очень точно выставлять датчики.
Поделитесь, как вы планируете это сделать.
Robston
Новичок
Сообщения: 20
Зарегистрирован: 04 апр 2016, 17:37
Репутация: 7
Настоящее имя: Роберт
Откуда: Москва
Контактная информация:

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

Сообщение Robston »

ukr-sasha писал(а):Вижу в вашем алгоритме потенциальную сложность. Надо будет очень точно выставлять датчики.
Поделитесь, как вы планируете это сделать.
Станочек у меня маленький на 4 оси. X*2 Y Z и A
Рабочее поле 550х350мм
Датчики индуктивные цилиндрические 8мм (Китай).
Поскольку прецизионных операций не выполняю, то выставил портал по диагоналям станка, а потом подогнал датчики на включение поворотом в резьбовых соединении. Вот, собственно, и все. Мне для хобби вполне хватает. Мерял штангелем неравномерность после выполнения программ. Разнос осей X не превышает 0,08 мм. Программа примерно на 11 мегабайт. 6 часов работы.

Раньше пользовался Mach3. Но до того достала непредсказуемость выше упомянутого софта, что решил попробовать KFlop.
Сейчас ОЧ доволен. Особенно возможностью програмирования различных "пряников" и тонкой настройки.
Последний раз редактировалось Robston 19 мар 2017, 21:51, всего редактировалось 1 раз.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

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

Сообщение ukr-sasha »

Эти датчики очень неточные, и значительно зависят как от температуры, так и от скорости движения оси.
Делайте обнуление координаты не при наезде, а при последующем съезде с датчика на очень маленькой скорости, порядка 1-5 мм/мин.
Учитывая, что дистанция съезда небольшая, то времени это много не займет.
Robston
Новичок
Сообщения: 20
Зарегистрирован: 04 апр 2016, 17:37
Репутация: 7
Настоящее имя: Роберт
Откуда: Москва
Контактная информация:

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

Сообщение Robston »

ukr-sasha писал(а):Эти датчики очень неточные, и значительно зависят как от температуры, так и от скорости движения оси.
Делайте обнуление координаты не при наезде, а при последующем съезде с датчика на очень маленькой скорости, порядка 1-5 мм/мин.
Учитывая, что дистанция съезда небольшая, то времени это много не займет.
Благодарю Вас! Учту. Так и поступлю.
Александр_
Мастер
Сообщения: 1743
Зарегистрирован: 24 дек 2013, 17:47
Репутация: 122
Контактная информация:

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

Сообщение Александр_ »

Кто-нибудь знает как поставить в кмоушн задержку отработки программы чтобы шпиндель успел раскрутиться? хорошо что тестовый проход делал - мог бы лучиться неприятный конфуз.

И вторая большая проблема - тормоза при одновременных перемещениях по программе в координатах XYZ. В плоскости XY прямые и кривые отрабатывает на ура - аж станок качает. Если кто делал клише для тиснения в арткаме и знает что такое процедура "подрезка углов" - то вот такого типа траектории. капец - скорость падает раз в 10-20. то есть выходит что планировщик вроде настроен а все равно какие-то запинки при перемещениях
Заходите в гости: www.pandicon.net www.graver36.ru
Smouk
Кандидат
Сообщения: 76
Зарегистрирован: 08 ноя 2016, 16:36
Репутация: 32
Настоящее имя: Алексей
Контактная информация:

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

Сообщение Smouk »

Александр_ писал(а):Кто-нибудь знает как поставить в кмоушн задержку отработки программы чтобы шпиндель успел раскрутиться? хорошо что тестовый проход делал - мог бы лучиться неприятный конфуз.
Сейчас включение шпинделя идет одним битом? Простой вариант - создайте программу, примерно такую:

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

main ()
 {
SetBit(ХХХ);
Delay_sec(N);
}
XXX - номер вывода включения шпинделя, N - количество секунд.
В настройках установите выполнение и ожидание этой программы (Exec/wait) по M3, на вкладке "Tool Setup Screen" в KMotionCNC. Используйте поток, который не используется при работе с УП (обычно со 2 по 6, 7 - продолжает работу при E-stop).
Для экономии времени и надежности можно ждать набора оборотов до заданных с некоторой дельтой, но это если есть энкодер на шпинделе.
Александр_ писал(а):И вторая большая проблема - тормоза при одновременных перемещениях по программе в координатах XYZ. В плоскости XY прямые и кривые отрабатывает на ура - аж станок качает. Если кто делал клише для тиснения в арткаме и знает что такое процедура "подрезка углов" - то вот такого типа траектории. капец - скорость падает раз в 10-20. то есть выходит что планировщик вроде настроен а все равно какие-то запинки при перемещениях
Скопируйте настройки осей, скорей всего по Z сильно зарезано ускорение и толчок - отсюда остальные оси обязаны ждать ее.
Александр_
Мастер
Сообщения: 1743
Зарегистрирован: 24 дек 2013, 17:47
Репутация: 122
Контактная информация:

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

Сообщение Александр_ »

спасибо за ответ!
первую половину пока не понял - вчитаюсь еще раз.
а по оси Z - да, возможно. Она тяжелая и инерционная. Нужно свести все оси к одному знаменателю по ускорению и толчку или просто общую скорость обработки снизить?
Заходите в гости: www.pandicon.net www.graver36.ru
Ответить

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