Поиск центра отверстия в заготовке под управлением KFLOP

Система управления станками с ЧПУ на основе контроллера KFLOP
Аватара пользователя
AlexNikov
Вникающий
Сообщения: 153
Зарегистрирован: 23 окт 2015, 21:54
Репутация: 309
Настоящее имя: Алексей
Город: Томск
Страна: Россия
Контактная информация:

Поиск центра отверстия в заготовке под управлением KFLOP

#1 

Сообщение AlexNikov » 08 апр 2016, 19:42

Доброго дня уважаемые! Сделал простенький скрипт для поиска центра отверстия в заготовке (в принципе без разницы круглого, прямоугольного или квадратного) по 4 точкам. Может пригодиться кому-то в пользовании.

https://youtu.be/4Ecy9yVFY8Q

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

#include "KMotionDef.h"

int DoPC(int cmd);
int DoPCInt(int cmd, int i);
//------USER_DATE------------
#define GATH_OFF 0  		// define the offset into the Gather buffer where strings are passed
#define SENS 4 				//Номер бита центроискателя
#define II 32574 			//Количество импульсов на дюйм
#define AJS 5000	                //Скорость перемещения осей при холостых перебегах	
#define ASS 600		                //Скорость перемещения осей для касания стилуса
//------USER_DATE------------

//--------ОБЯЗАТЕЛЬНО К ПРОЧТЕНИЮ-----------
//Для верного выполнения скрипта необходимо:
//1. Расположить шарик стилуса центроискателя ниже плоскости заготовки в произвольном месте внутри отверстия
//--------ОБЯЗАТЕЛЬНО К ПРОЧТЕНИЮ-----------

main()
{     	
	double *pD = (double *)persist.UserData;
	double PX0,PX1,PX2,PX3,PX4,PX5,PX6,PY0,PY1,PY2,PY3,PY4,PY5,PY6,AUP,IMP;
	
//Расчеты
	IMP = II;
	AUP = (IMP*0.5)/25.4;
	Delay_sec(0.2);

//Перемещаем ось Х в положительном и отрицательном направлениях до касания заготовки с уточнением положения
	Jog(0,-AJS);
	while (ReadBit(SENS));
	Jog(0,0);
	PX0 = chan[0].Dest;
	PX1 = PX0+AUP;
	Delay_sec(0.2);
	MoveAtVel(0,PX1,AJS);
	while (!CheckDone(0));
	Delay_sec(0.2);
	Jog(0,-ASS);
	while (ReadBit(SENS));
	Jog(0,0);
	PX2 = chan[0].Dest;
	Delay_sec(0.2);
	MoveAtVel(0,PX1,AJS);
	while (!CheckDone(0));
	Delay_sec(0.2);
	Jog(0,AJS);
	while (ReadBit(SENS));
	Jog(0,0);
	PX3 = chan[0].Dest;
	PX4 = PX3-AUP;
	Delay_sec(0.2);
	MoveAtVel(0,PX4,AJS);
	while (!CheckDone(0));
	Delay_sec(0.2);
	Jog(0,ASS);
	while (ReadBit(SENS));
	Jog(0,0);
	PX5 = chan[0].Dest;
	Delay_sec(0.2);
	MoveAtVel(0,PX4,AJS);
	while (!CheckDone(0));
	Delay_sec(0.2);
	PX6 = (PX5+PX2)/2;
	Delay_sec(0.2);
	MoveAtVel(0,PX6,AJS);
	while (!CheckDone(0));
	Delay_sec(0.2);
	
//Перемещаем ось Y в положительном и отрицательном направлениях до касания заготовки с уточнением положения
	Jog(1,-AJS);
	while (ReadBit(SENS));
	Jog(1,0);
	PY0 = chan[1].Dest;
	PY1 = PY0+AUP;
	Delay_sec(0.2);
	MoveAtVel(1,PY1,AJS);
	while (!CheckDone(1));
	Delay_sec(0.2);
	Jog(1,-ASS);
	while (ReadBit(SENS));
	Jog(1,0);
	PY2 = chan[1].Dest;
	Delay_sec(0.2);
	MoveAtVel(1,PY1,AJS);
	while (!CheckDone(1));
	Delay_sec(0.2);
	Jog(1,AJS);
	while (ReadBit(SENS));
	Jog(1,0);
	PY3 = chan[1].Dest;
	PY4 = PY3-AUP;
	Delay_sec(0.2);
	MoveAtVel(1,PY4,AJS);
	while (!CheckDone(1));
	Delay_sec(0.2);
	Jog(1,ASS);
	while (ReadBit(SENS));
	Jog(1,0);
	PY5 = chan[1].Dest;
	Delay_sec(0.2);
	MoveAtVel(1,PY4,AJS);
	while (!CheckDone(1));
	Delay_sec(0.2);
	PY6 = (PY5+PY2)/2;
	Delay_sec(0.2);
	MoveAtVel(1,PY6,AJS);
	while (!CheckDone(1));
	Delay_sec(0.2);

		
//Присваиваем положению осей в углу заготовки X=0 и Y=0
	DoPCFloat(PC_COMM_SET_X,0);
	DoPCFloat(PC_COMM_SET_Y,0);
	Delay_sec(0.2);

//Перемещем ось Z в положительном направлении в координату Z=0 (в машинный ноль)	
	MoveAtVel(2,0,AJS);		
	while (!CheckDone(2));			
	Jog(2,0);				
}

//Далее код для ввода данных от DoPCFloat

int SetVars(int varoff, int n, int poff)
{
   persist.UserData[PC_COMM_PERSIST+2] = n;       // number of elements
   persist.UserData[PC_COMM_PERSIST+3] = poff;    // persist offset (doubles)
   return DoPCInt(PC_COMM_SET_VARS,varoff);       // Var index and Cmd
}
int GetVars(int varoff, int n, int poff)
{
   persist.UserData[PC_COMM_PERSIST+2] = n;       // number of elements
   persist.UserData[PC_COMM_PERSIST+3] = poff;    // persist offset (doubles)
   return DoPCInt(PC_COMM_GET_VARS,varoff);       // Var index and Cmd
}

#define GATH_OFF 0  // define the offset into the Gather buffer where strings are passed
// Trigger a message box on the PC to be displayed
// defines for MS Windows message box styles and Operator
// response IDs are defined in the KMotionDef.h file 
int MsgBox(char *s, int Flags)
{
   char *p=(char *)gather_buffer+GATH_OFF*sizeof(int);
   int i;
   
   do // copy to gather buffer w offset 0
   {
      *p++ = *s++;
   }while (s[-1]);
   
   persist.UserData[PC_COMM_PERSIST+2] = Flags;  // set options
   DoPCInt(PC_COMM_MSG,GATH_OFF);
   return persist.UserData[PC_COMM_PERSIST+3];
}
// 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 a Float as a parameter and pass the command to the App
int DoPCFloat(int cmd, float f)
{
   int result;
   persist.UserData[PC_COMM_PERSIST+1] = *(int*)&f;
   return DoPC(cmd);
}
// 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);
   
   //printf("Result = %d\n",result);
   return result;
}

Аватара пользователя
Predator
Мастер
Сообщения: 2885
Зарегистрирован: 30 авг 2014, 20:14
Репутация: 1611
Настоящее имя: Александр
Страна: Россия

Re: Поиск центра отверстия в заготовке под управлением KFLOP

#2 

Сообщение Predator » 26 апр 2016, 21:12

Лёха, а какой командой вызывается скрипт и куда записывает координаты?

Например, когда я обмеряю Renishaw, ввожу в командную строку следующую команду M500 D50. S54; в этой команде указываются параметры для работы скрипта и она же его вызывает.
D50 предпологаемый диаметр отверстия;
S54 Заносит смещение рабочей системы координат детали относительно системы координат станка, для дальнейшего использования по G54. Естественно параметр S54 можно изменять на нужный S54 - S59 для использования G54 - G59.
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант

Аватара пользователя
AlexNikov
Вникающий
Сообщения: 153
Зарегистрирован: 23 окт 2015, 21:54
Репутация: 309
Настоящее имя: Алексей
Город: Томск
Страна: Россия
Контактная информация:

Re: Поиск центра отверстия в заготовке под управлением KFLOP

#3 

Сообщение AlexNikov » 26 апр 2016, 21:50

У меня проще много. Функционал профи станков мне не знаком. Мой ищет центр и обнуляет координаты X и Y в центре отверстия (в принципе можно сделать все что угодно от простого отображения координат найденного центра до записи их куда либо). У меня скрипт запускается по нажатию кнопки в KMotionCNC.

G51-G59 для к-флопа это офф-сеты. С ними практически не работаю - нет необходимости, поэтому и скрипт простой.

Аватара пользователя
Predator
Мастер
Сообщения: 2885
Зарегистрирован: 30 авг 2014, 20:14
Репутация: 1611
Настоящее имя: Александр
Страна: Россия

Re: Поиск центра отверстия в заготовке под управлением KFLOP

#4 

Сообщение Predator » 26 апр 2016, 21:54

Эвано как значит :hmm:

Отправлено спустя 1 минуту 3 секунды:
Надо будет исполнительный скрипт со стойки скачать на флэшку, поглядеть, что там и как...
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант

Аватара пользователя
BenAflek
Мастер
Сообщения: 882
Зарегистрирован: 29 окт 2014, 10:16
Репутация: 342
Настоящее имя: Владислав
Страна: Россия

Re: Поиск центра отверстия в заготовке под управлением KFLOP

#5 

Сообщение BenAflek » 28 апр 2016, 20:04

Predator писал(а):Источник цитаты Надо будет исполнительный скрипт со стойки скачать

Скачай, интересно посмотреть, что там за скрипты у реника :confirm:
Здесь должно что-то быть?...


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

Сейчас на форумах

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей