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

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

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

#1 

Сообщение AlexNikov » 25 окт 2015, 15:09

Доброго здравия всем.

Еще одна задачка, которую я осилил в KFLOP это поиск угла заготовки по средствам проводного сканера (не сочтите за рекламу, сканер покупал тут - Проводной ЧПУ сканер от товарища с CNC-CLUB).

Полезная штука для поиска нуля (угол по идее чаще всего и есть ноль заготовки, или же точка привязки) при первоначальной установке, но для меня это стало спасением при повторной установке деталей с поворотом/переворотом.

Алгоритм выполнения в общих чертах такой:
1. Опускаемся по Z до касания заготовки,
2. Поднимаемся над заготовкой, отъезжаем назад на 10мм по X и опускаемся на 5мм.,
3. Касаемся края заготовки,
4. Уезжаем начальную точку измерения,
5. То же самое проделываем по оси Y,
6. Делаем компенсацию диаметра шарика сенсора и едем точно в угол заготовки.

Вот видео самого процесса:
http://www.youtube.com/watch?v=W5GEOwiUeR0

А вот код, под управлением которого работает данный алгоритм (прошу прощения за коменты в коде на транслите, но компилятор k-flop не умеет печатать русские буквы, а писать коменты в отдельном редакторе не очень удобно):

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

#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 IMP_INCH 32574 			//Колличество импульсов на дюйм
#define DIAM_SENS 2.03 			//Диаметр шарика стилуса центроискателя в мм
#define AXIS_JOG_SPEED 25000		//Скорость перемещения осей при холостых перебегах
#define AXIS_SENS_SPEED 800		//Скорость перемещения осей для касания стилуса
//------USER_DATE------------

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

main()
{     	
	int Answer;
	double *pD = (double *)persist.UserData;
	double PZ0,PZ1,PZ2,PX0,PX1,PX2,PX3,PY0,PY1,PY2,PY3,DIAM,IMP,SEN_D,Z_UP,AXIS_UP1,AXIS_UP2;

// Вопрос о правильности расположения сканера и выбора угла
	Answer = MsgBox("Сканер установлен не дальше 5мм от краев заготовки?",MB_YESNO|MB_ICONEXCLAMATION);
	if (Answer == IDYES)

//Рассчеты
	DIAM = DIAM_SENS;
	IMP = IMP_INCH;
	SEN_D = (IMP*(DIAM/2))/25.4;
	Z_UP = (IMP*2)/25.4;
	AXIS_UP1 = (IMP*10)/25.4;
	AXIS_UP2 = (IMP*5)/25.4;
	
//Опускаем сканер по оси Z до касания заготовки, поднимаем сканер на 2мм над заготовкой, записываем координаты начальной точки процедуры замера в переменные PX0, PY0
	Jog(2,-AXIS_SENS_SPEED); 		// двигаем ось Z в отрецательном направлении (вниз)
	while (ReadBit(SENS));		 	// ждем изменения стостяния бита №4 (касание сканера плоскости заготовки)
	Jog(2,0);				// останавливаем ось Z
	Delay_sec(0.2);			 	// ждем 0.2 сек
	PZ0 = chan[2].Dest;      		// записываем координату оси Z в переменную PZ0
	PZ1=PZ0+Z_UP;       			// переменной PZ1 присваиваем значение PZ0+2мм
	MoveAtVel(2,PZ1,AXIS_JOG_SPEED);  	// поднимаем ось Z на 2мм над заготовкой (в координату PZ1)
	while (!CheckDone(2));   		// ждем окончания перемещения оси Z
	PX0 = chan[0].Dest;			// записываем координату оси X (начальная точка процедуры замера) в переменную PX0
	PY0 = chan[1].Dest;			// записываем координату оси Y (начальная точка процедуры замера) в переменную PY0
		
//Перемещаем ось X на 10мм в отицательном направлении, перемещаем ось Z в отрицательном направлении на 5мм, перемещаем ось X вположительном направлении до касания заготовки, записываем координаты точки касания
	PX1=PX0-AXIS_UP1;			// от переменной PX0 отнимаем 10мм и присваеваем новое значение переменной PX1
	MoveAtVel(0,PX1,AXIS_JOG_SPEED);	// ось X перемещаем в координату PX1 (на 10мм в отрицательном направлении)
	while (!CheckDone(0));   		// ждем окончания перемещения оси X
	PZ2=PZ1-AXIS_UP2;			// от переменной PZ1 отнимаем 5мм и присваиваем новое значение переменной PZ2
	MoveAtVel(2,PZ2,AXIS_JOG_SPEED);  	// ось Z перемещаем в координату PZ2 (на 5мм ниже точки PZ1 и на 3мм ниже верхней плоскости заготовки)
	while (!CheckDone(2));   		// ждем окончания перемещения оси Z
	Jog(0,AXIS_SENS_SPEED);			// перемещаем ось X в положительном направлении
	while (ReadBit(SENS));		 	// ждем изменения состояния бита №4 (касание сканера края заготовки по оси X)
	Jog(0,0);				// останавливаем ось X
	Delay_sec(0.2);				// ждем 0.2 сек
	PX2 = chan[0].Dest;			// записываем координату касания сканером заготовки в переменную PX2
		
//Перемещаем ось X назад от края заготовки, поднимаем ось Z на 2мм над верхней плоскостью заготовки и перемещаем ось X в начальную точку процедуры замера

	MoveAtVel(0,PX1,AXIS_JOG_SPEED);	// перемещаем ось X в координату PX1
	while (!CheckDone(0));   		// ждем окончания перемещения оси X
	MoveAtVel(2,PZ1,AXIS_JOG_SPEED);  	// перемещаем ось Z в координату PZ1
	while (!CheckDone(2));   		// ждем окончания перемещения оси Z
	MoveAtVel(0,PX0,AXIS_JOG_SPEED);  	// перемещаем ось X в координату PX0
	while (!CheckDone(0));   		// ждем окончания перемещения оси X
		
//Перемещаем ось Y на 10мм в отицательном направлении, перемещаем ось Z в отрицательном направлении на 5мм, перемещаем ось Y вположительном направлении до касания заготовки, записываем координаты точки касания
	PY1=PY0-AXIS_UP1;			// от переменной PY0 отнимаем 10мм и присваеваем новое значение переменной PY1
	MoveAtVel(1,PY1,AXIS_JOG_SPEED);	// ось Y перемещаем в координату PY1 (на 10мм в отрицательном направлении)
	while (!CheckDone(1));   		// ждем окончания перемещения оси Y
	MoveAtVel(2,PZ2,AXIS_JOG_SPEED);  	// ось Z перемещаем в координату PZ2 (на 5мм ниже точки PZ1 и на 3мм ниже верхней плоскости заготовки)
	while (!CheckDone(2));   		// ждем окончания перемещения оси Z
	Jog(1,AXIS_SENS_SPEED);			// перемещаем ось Y в положительном направлении
	while (ReadBit(SENS));		 	// ждем изменения состояния бита №4 (касание сканера края заготовки по оси X)
	Jog(1,0);				// останавливаем ось Y
	Delay_sec(0.2);				// ждем 0.2 сек
	PY2 = chan[1].Dest;			// записываем координату касания сканером заготовки в переменную PY2
		
//Перемещаем ось Y назад от края заготовки, поднимаем ось Z на 2мм над верхней плоскостью заготовки и перемещаем ось Y в начальную точку процедуры замера
	MoveAtVel(1,PY1,AXIS_JOG_SPEED);	// перемещаем ось Y в координату PY1
	while (!CheckDone(1));   		// ждем окончания перемещения оси Y
	MoveAtVel(2,PZ1,AXIS_JOG_SPEED);  	// перемещаем ось Z в координату PZ1
	while (!CheckDone(2));   		// ждем окончания перемещения оси Z
	MoveAtVel(1,PY0,AXIS_JOG_SPEED);  	// перемещаем ось X в координату PX0
	while (!CheckDone(1));   		// ждем окончания перемещения оси X
		
//Компенсируем диаметр шарика сканера
	PX3=PX2+SEN_D;				// к координате касания заготовки по оси X PX2 прибавляем и присваиваем новое значение переменной PX3
	PY3=PY2+SEN_D;				// к координате касания заготовки по оси Y PY2 прибавляем и присваиваем новое значение переменной PY3
		
//Перемещаем оси X и Y в координаты угла заготовки PX3 и PY3
	MoveAtVel(0,PX3,AXIS_JOG_SPEED);	// перемещаем ось X в координату PX3
	while (!CheckDone(0));   		// ждем окончания перемещения оси X
	MoveAtVel(1,PY3,AXIS_JOG_SPEED);	// перемещаем ось Y в координату PY3
	while (!CheckDone(1));   		// ждем окончания перемещения оси Y
		
		
//Присваиваем положению осей в углу заготовки X=0 и Y=0
	DoPCFloat(PC_COMM_SET_X,0);
	DoPCFloat(PC_COMM_SET_Y,0);
			
//Перемещем ось Z в положительном направлении в координату Z=0 (в машинный ноль)	
	MoveAtVel(2,0,AXIS_JOG_SPEED);		// перемещаем ось Z машинный ноль
	while (!CheckDone(2));			// ждем окончания перемещения оси Z
	Jog(2,0);				// останавливаем ось Z
	
}

//Далее код для ввода данных от 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
Мастер
Сообщения: 2801
Зарегистрирован: 30 авг 2014, 20:14
Репутация: 1560
Настоящее имя: Александр
Страна: Россия
Контактная информация:

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

#2 

Сообщение Predator » 25 окт 2015, 15:22

Датчик знакомый какой-то, случайно не cнc-клуб кто-то делает? :hmm:
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант

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

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

#3 

Сообщение AlexNikov » 25 окт 2015, 15:32

Predator писал(а):Источник цитаты Датчик знакомый какой-то, случайно не cнc-клуб кто-то делает? :hmm:


А в начале моего поста даже ссылка на сайт товарища есть, Шерлок Холмс он на cnc-club :D

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

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

#4 

Сообщение Predator » 25 окт 2015, 16:04

А ну знаю такого, на него и подумал :)
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант

Аватара пользователя
ukr-sasha
Вникающий
Сообщения: 191
Зарегистрирован: 10 окт 2014, 12:08
Репутация: 391
Настоящее имя: Александр
Город: Киев
Страна: Украина

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

#5 

Сообщение ukr-sasha » 31 дек 2015, 10:26

Работа отличная, но скрипт несколько узкоспециализированн.
Я бы добавил диалог выбора типа заготовки вначале: квадрат, цилиндр, угол левый верхний и т.д.
Тогда можно центрироваться, например по отверстию. :D
Заходите в гости: YouTube-ukr-sasha

Аватара пользователя
Electric
Ученик
Сообщения: 742
Зарегистрирован: 02 сен 2014, 03:30
Репутация: 381
Настоящее имя: Андрей
Страна: Россия

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

#6 

Сообщение Electric » 02 янв 2016, 14:04

ukr-sasha, Как всегда подопнул в нужном направлении :excellent:
Будем ждать обновлённой версии скрипта :hiding:
Что такое шаговое напряжение? Это напряжение, которое возникает между ногами при приближении к оголенному концу...

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

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

#7 

Сообщение Predator » 02 янв 2016, 20:15

Electric писал(а):Источник цитаты ukr-sasha, Как всегда подопнул в нужном направлении
Это он умеет делать ;)
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант

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

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

#8 

Сообщение BenAflek » 03 янв 2016, 10:59

ukr-sasha писал(а):Источник цитаты Я бы добавил диалог выбора типа заготовки вначале: квадрат, цилиндр, угол левый верхний и т.д.

Было бы не плохо :confirm:
Здесь должно что-то быть?...

Аватара пользователя
Electric
Ученик
Сообщения: 742
Зарегистрирован: 02 сен 2014, 03:30
Репутация: 381
Настоящее имя: Андрей
Страна: Россия

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

#9 

Сообщение Electric » 03 янв 2016, 23:34

Было бы просто отлично, но что-то автор молчит :unknown:
Что такое шаговое напряжение? Это напряжение, которое возникает между ногами при приближении к оголенному концу...

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

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

#10 

Сообщение AlexNikov » 04 янв 2016, 15:02

Доброго всем дня! С наступившем вас всех Новым Годом! Саша дело говорит и примерно это я сейчас и делаю. Скриптов планирую сделать несколько:

1. Поиск угла заготовки с диалогом выбора - левый/правый угол.
2. Поиск центра окружности с диалогом выбора - центр отверстия/центр круглой заготовки.
3. Обмер прямоугольной детали.

Сейчас как раз и сижу допиливаю скрипты.

Планирую три отдельных чтоб сократить время так сказать логических цепочек выбора. Хотя объединить в один и первым диалогом сделать запрос дальнейшего алгоритма вполне себе можно сделать.

Диалоги выбора думаю делать на базе этого кода (на данный момент диалоги смог реализовать только с запросами "примерно диаметра круглой заготовки" для поиска центра круглой заготовки и "примерные размеры по X и Y" для обмера прямоугольной заготовки, то-есть с размерными данными):

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

main()
{
	int Answer;
	float value;

	Answer = InputBox("Enter Distance",&value);
	if (Answer)
		printf("Operator Canceled\n");
	else
		printf("Operator Entered Value of %.3f\n",value);
	
}


По другому как сделать пока не знаю. Нужно поплотнее почитать. Можно попробовать и на базе такого кода:

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

main()
{
	int Answer;

	Answer = MsgBox("Hello World",MB_YESNO|MB_ICONEXCLAMATION);
	if (Answer == IDYES)
		printf("Answer is Yes\n");
	else
		printf("Answer is No\n");
	
}

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

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

#11 

Сообщение BenAflek » 04 янв 2016, 16:35

AlexNikov, На каком языке пишется код?
Здесь должно что-то быть?...

Аватара пользователя
ukr-sasha
Вникающий
Сообщения: 191
Зарегистрирован: 10 окт 2014, 12:08
Репутация: 391
Настоящее имя: Александр
Город: Киев
Страна: Украина

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

#12 

Сообщение ukr-sasha » 04 янв 2016, 16:56

BenAflek писал(а):Источник цитаты На каком языке пишется код?

Си
Заходите в гости: YouTube-ukr-sasha

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

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

#13 

Сообщение AlexNikov » 06 янв 2016, 17:52

Столкнулся с проблемой нахождения модуля числа :( Кто мб подскажет чего...

В качестве пробы простейший скрипт:

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

#include "KMotionDef.h"
#include "math.h"

int main(void)
{
printf("%1.1f %1.1", fabs(1.0), fabs(-1.0));
return 0;
}


Библиотеку math.h положил в папку с файлом скрипта.

При компиляции выпадает ошибка:
eror.jpg
4909 просмотров
eror.jpg 75.11 КБ


Прогаммист из меня как из коровы балерина и получается сделать больше по примеру да по памяти с универа по синтаксису дельфи.

Куда чего копать мб знает кто?

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

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

#14 

Сообщение Predator » 06 янв 2016, 18:25

А это просто язык «С»? Или может-быть «С#» или «С++»? :hmm:

Отправлено спустя 5 минут 58 секунд:
AlexNikov писал(а):Источник цитаты Прогаммист из меня как из коровы балерина и получается сделать больше по примеру да по памяти с универа по синтаксису дельфи
Я с языком «С» тоже мало знаком, так для себя, когда-то пролистал пару книг, но это было еще в пору компьтеров ZX-Spectrum, а несколько последних лет программирую в основном для вэб, т.е. PHP, HTML, CSS и иже с ними. Все языки программирования конечно чем-то похожи друг на друга, но всё же разница существенная.
AlexNikov, Попробуй тут поискать, если есть время.

Отправлено спустя 5 минут 47 секунд:
AlexNikov: Лёха, это не оно?
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант

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

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

#15 

Сообщение AlexNikov » 06 янв 2016, 19:04

Predator писал(а):Источник цитаты AlexNikov: Лёха, это не оно?


Саш оно, но проблема в том что компилятор ругается на то что fabs не определен, хотя math.h он проглотил вроде. Есть ощущение что лишние движения делаю...нужно поглядеть как записывается в переменные данные с chan[2].Dest, мб оно в импульсах и всегда имеет положительное значение.

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

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

#16 

Сообщение Predator » 06 янв 2016, 19:19

AlexNikov писал(а):Источник цитаты компилятор ругается на то что fabs не определен
А, где файл, в котором этот fabs?
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант

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

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

#17 

Сообщение AlexNikov » 06 янв 2016, 19:24

Predator писал(а):Источник цитаты
AlexNikov писал(а):Источник цитаты компилятор ругается на то что fabs не определен
А, где файл, в котором этот fabs?


Да собственно вот он (во вложении), это стандартная библиотека math.h

Прикреплённые файлы
[2.21 КБ] 48 скачиваний


Отправлено спустя 1 минуту 29 секунд:
Как супруга проснется, запущу станок - поглядеть надо в каком формате получаются значения при chan[2].Dest - ооооочень большое ощущение что в импульсах и относительно машинного нуля :hmm:

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

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

#18 

Сообщение Predator » 06 янв 2016, 19:51

Так вроде в самом файле math.h косяков нет, да и ошибка при компиляции «Неопределённый символ» :hmm:
Как язык «С» относится к ненужным пробелам, игнорирует или матерится? Вот в этой строчке есть пробел (я заменю его землей для понятности), нужен ли он там? :unknown:
Оригинал: printf("%1.1f %1.1", fabs(1.0), fabs(-1.0));
С землёй: printf("%1.1f_%1.1", fabs(1.0), fabs(-1.0));
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант

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

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

#19 

Сообщение AlexNikov » 06 янв 2016, 20:10

Predator писал(а):Источник цитаты Так вроде в самом файле math.h косяков нет, да и ошибка при компиляции «Неопределённый символ» :hmm:
Как язык «С» относится к ненужным пробелам, игнорирует или матерится? Вот в этой строчке есть пробел (я заменю его землей для понятности), нужен ли он там? :unknown:
Оригинал: printf("%1.1f %1.1", fabs(1.0), fabs(-1.0));
С землёй: printf("%1.1f_%1.1", fabs(1.0), fabs(-1.0));


Саш это дело тут не при делах - пробелы не сыграли никакой роли....
Актуальность проблемы перешла на второй план, данные получаемые по chan[0].Dest в импульсах относительно машинного нуля:

PX0 в машинном нуле
X0.jpg
4898 просмотров
X0.jpg 139.73 КБ


PX0 в координате 25,4мм (в настройках KmotionCNC 32754 импульса на дюйм)
X25.4.jpg
4898 просмотров
X25.4.jpg 140.08 КБ


Если обнулить текущую координату и снова уехать на 25,4мм то PX0 больше в два раза соответственно.

Так что проблемы с расчетами в моей задумке больше нет, но на досуге надо будет повозиться с функцией модуля числа...да и кроме модуля можно много чего интересного сделать с math.h :hmm:

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

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

#20 

Сообщение Predator » 06 янв 2016, 21:10

AlexNikov писал(а):Источник цитатыСаш это дело тут не при делах - пробелы не сыграли никакой роли...
Хорошо, если разобрался в чём дело. Просто я на самом деле не в курсе, как интерпритатор С реагирует на пробелы, табуляцию и прочее, в общем в синтаксис не вникал, потому-что пока незачем :happens:
AlexNikov писал(а):Источник цитаты на досуге надо будет повозиться с функцией модуля числа...
Ждём-с ;)
Великую цивилизацию не покорить извне — пока она не разрушит себя изнутри! © Уильям Дюрант


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

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

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