Смена инструмента на токарнике

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
rage
Мастер
Сообщения: 1014
Зарегистрирован: 13 окт 2014, 09:14
Репутация: 621
Настоящее имя: Константин
Откуда: МО
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение rage »

Misha74 писал(а): Спасибо, но для моих задач должно быть достаточно LPT и ладдера.
это вам только кажется.
Misha74
Новичок
Сообщения: 5
Зарегистрирован: 02 апр 2024, 15:50
Репутация: 2
Настоящее имя: Михаил
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение Misha74 »

rage писал(а): это вам только кажется.
Я уже сделал. У Вас свои задачи, у других людей свои. Откуда Вам известно достаточно будет или нет? Я задавал вопрос по ладдеру, а не то, что достаточно мне будет ладдера и порта или нет. Сделал как эту

https://www.youtube.com/watch?v=CPi-kQ9jjJY

На видео заводская голова. И реализация управления заводская. Задействован всего лишь один пин порта LPT. Зажимает обратным ходом червячной передачей большого диаметра (диаметр колеса 115мм). Зажимает намертво. Нагрузку принимает на себя храповой механизм. Работает четко, никаких сбоев. Никаких концевиков, ни датчиков, ни пневматики. Меня полностью устраивает. Работа станка всегда под моим контролем.
alex_sar
Мастер
Сообщения: 1863
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 315
Настоящее имя: Алексей
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение alex_sar »

Misha74 писал(а): Нагрузку принимает на себя храповой механизм.
Раз разобрались, вопрос к вам не по теме.

Посмотрел видео этого же автора с разборкой. За счет чего фиксация происходит? Что прижимает движущуюся часть к храповику? Или она чисто на трении в червячной паре держится?
Misha74
Новичок
Сообщения: 5
Зарегистрирован: 02 апр 2024, 15:50
Репутация: 2
Настоящее имя: Михаил
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение Misha74 »

alex_sar писал(а): 10 апр 2024, 17:46 Раз разобрались, вопрос к вам не по теме.

Посмотрел видео этого же автора с разборкой. За счет чего фиксация происходит? Что прижимает движущуюся часть к храповику? Или она чисто на трении в червячной паре держится?
Там же все просто. Обратный ход мотора включается через реле, когда доходит до нужного инструмента через ограничивающий резистор. У меня вместо резистора медная обмотка на 25 Ом. Греется до 40-50 градусов при длительной работе. Мотор при этом вообще холодный. Механизм на червячной паре. Мотор все время прижимает. Я выше это написал. Червяк обратным ходом прижимает голову к храповику намертво. На удивление очень простая конструкция. Для небольшого токарного под присмотром самое то. И всего один пин порта используется.
voltmarin
Новичок
Сообщения: 14
Зарегистрирован: 24 авг 2023, 23:22
Репутация: 2
Настоящее имя: Юрий
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение voltmarin »

tokarka63 писал(а): 09 ноя 2022, 14:22
xenon-alien писал(а): Это типа абсолютного энкодера, если верно понимаю...
Даже и не думал так), но, да, получается так)
Изготовил кодирующий диск по вашему чертежу.
Верхним этажом расположил индуктивные датчики с расстановкой по дуге через 40°,
Получаю код 000.
Далее не все коды удается получить.
Не удается получить код 111, лепестки диска не полностью перекрывают датчики.

1. вопрос: у Вас датчики с расстановкой по дуге через 40° или 45° ?
Вырезы на диске через 20°, 40°, 40°, 60°, 100°, 20°, 80°
- это так и задумано?
2. вопрос: У Вас датчики PNP NO, PNP NC, NPN NO, NPN NC?
3. вопрос: у Вас датчики расставлены с маркировкой 1...3...2
Чтобы получить правильный двоичный код или код Грея?
4. вопрос: для чего сделаны отметки на диске через 60° ?

У меня револьверка на 8 инструментов.
Штатный датчик положения:
кольцо с 8-ю датчиками Холла и диск с 1-м магнитом
Пока не удается получить двоичный код, используя 3 рядом расположенных через 45° датчика Холла и добавлением магнитов.
Сломал мозг, не хватает понимания.
Констуруктивно мне проще использовать штатный датчик положения.
Вложения
IMG_20240519_122821_718.jpg (1538 просмотров) <a class='original' href='./download/file.php?id=211772&mode=view' target=_blank>Загрузить оригинал (176.37 КБ)</a>
8avsLZj3Frk.jpg (1524 просмотра) <a class='original' href='./download/file.php?id=211774&mode=view' target=_blank>Загрузить оригинал (1.26 МБ)</a>
OAwGXBP9550.jpg (1523 просмотра) <a class='original' href='./download/file.php?id=211775&mode=view' target=_blank>Загрузить оригинал (1.53 МБ)</a>
20240519_124217.jpg (1523 просмотра) <a class='original' href='./download/file.php?id=211776&mode=view' target=_blank>Загрузить оригинал (1.41 МБ)</a>
tokarka63
Мастер
Сообщения: 398
Зарегистрирован: 10 фев 2020, 18:39
Репутация: 13
Настоящее имя: Виталий
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение tokarka63 »

voltmarin писал(а): 19 май 2024, 12:59
tokarka63 писал(а): 09 ноя 2022, 14:22
xenon-alien писал(а): Это типа абсолютного энкодера, если верно понимаю...
Даже и не думал так), но, да, получается так)
Изготовил кодирующий диск по вашему чертежу.
Верхним этажом расположил индуктивные датчики с расстановкой по дуге через 40°,
Получаю код 000.
Далее не все коды удается получить.
Не удается получить код 111, лепестки диска не полностью перекрывают датчики.

1. вопрос: у Вас датчики с расстановкой по дуге через 40° или 45° ?
Вырезы на диске через 20°, 40°, 40°, 60°, 100°, 20°, 80°
- это так и задумано?
2. вопрос: У Вас датчики PNP NO, PNP NC, NPN NO, NPN NC?
3. вопрос: у Вас датчики расставлены с маркировкой 1...3...2
Чтобы получить правильный двоичный код или код Грея?
4. вопрос: для чего сделаны отметки на диске через 60° ?

У меня револьверка на 8 инструментов.
Штатный датчик положения:
кольцо с 8-ю датчиками Холла и диск с 1-м магнитом
Пока не удается получить двоичный код, используя 3 рядом расположенных через 45° датчика Холла и добавлением магнитов.
Сломал мозг, не хватает понимания.
Констуруктивно мне проще использовать штатный датчик положения.
Спустя 2 года.....уже не помню, что и как рассчитывалось.....у меня револьверка на 6 инструментов, соответственно под нее и считалось)
Код Грея.....после расчетов, и сборки, просто считал коды в разных положениях револьверки и внес в управляющую программу
Датчики.....в моей конфигурации - без разницы, все правится в HAL_е (+ установлены резисторы подтяжки на минус )
Интереса ради, нашел проект - посмотрел, датчики через 40гр стоят
4. вопрос: для чего сделаны отметки на диске через 60° ? ----выставить положение писка относительно инструмента, хватает и одной метки)
voltmarin
Новичок
Сообщения: 14
Зарегистрирован: 24 авг 2023, 23:22
Репутация: 2
Настоящее имя: Юрий
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение voltmarin »

tokarka63 писал(а): 09 ноя 2022, 14:21
tokarka63 писал(а): 14 окт 2020, 12:32 Можно считать, что револьверку победил!)
Тест в несколько часов, не выявил глюков!)

СИ_шный код
(для просмотра содержимого нажмите на ссылку)

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

component revolverka;

pin out bit delaystart = 0; //0,15сек
pin in bit delaydone = 0;
pin out bit delaystart2 = 0; //1сек
pin in bit delaydone2 = 0;
pin out bit delaystart3 = 0; //2сек
pin in bit delaydone3 = 0;

pin in bit toolchange ;       // смена инструмент tool-change команда на смену инстркмента 1 или 0 >> от чпу
pin in s32 toolnumber ;   	  // установленный инструмент tool-number >> от чпу
pin out bit toolchanged ;  	  // окончание смены инструмента tool-changed << в чпу
pin in s32 old;   	  		  // установленный инструмент tool-oldnumber >> от чпу
pin out s32 position = 0;     // инструмент по датчикам 
pin out s32 tool = 0;
pin out float e = 0;
pin out float a = 0;



pin out bit moto=0; 		//out02 крутим назад, если 1 крутим вперед

pin in bit opto1 = 0;     // датчик1     in10      
pin in bit opto2 = 0;     // датчик2     in11      
pin in bit opto3 = 0;     // датчик3     in12
pin in bit metka = 0;     // датчик4     in13  


option singleton yes;                  
function _;
author "WV";
license "GPL";
;;

// rtapi_print_msg(RTAPI_MSG_ERR, "Error - opto inputs do not match truth table");

FUNCTION(_)
{

	
		
		        if(!opto1 && !opto2 && opto3 && metka==0)
                    position = 1; 
                else if(!opto1 && opto2 && !opto3 && metka==0)
                    position =  2;
                else if(!opto1 && opto2 && opto3 && metka==0)
                    position =  3;
                else if(opto1 && !opto2 && !opto3 && metka==0)
                    position =  4;
                else if(opto1 && !opto2 && opto3 && metka==0)
                    position =  5;
                else if(opto1 && opto2 && !opto3 && metka==0)
                    position =  6;              
                
				
	if (toolchange)
	{tool=toolnumber;}
		
switch ( tool )
{
	
case 1:

	if(position !=1 )
		{
			moto = 1;  toolchanged = 0; //вперед
		}				
	
	
	if (position==1 && metka==1 && e==0)	//реверс
	{
	    delaystart = 1; 		//0,15 sec антидребезг
		if(delaydone==1)                    
		{
			delaystart = 0;
				if (position==1 && metka==1)
						{ moto = 0; e=1; }
		
		}		
	}
	
	if (e==1)
	{
		if (position==1 && metka==0 ) //проверка после реверса
	 {
		 if (a==0)
		 {
		 delaystart2 = 1; //1sec
			a=1;
		 }
		if(delaydone2)                     
        {
        	delaystart2 = 0;
        }
		if (position==1 && metka==0 && delaydone2==0 ) 
	    {
		delaystart3 = 1; 		//2sec
	
		if(delaydone3)                     
        {
        delaystart3 = 0;
		toolchanged = 1;  //инструмент готов на чпу
		e=0; 
		a=0;
		}
	   }
	  }
	 }
	
	
	break;

case 2:

	if(position !=2 )
		{
			moto = 1;  toolchanged = 0; //вперед
		}				
	
	
	if (position==2 && metka==1 && e==0)	//реверс
	{
	    delaystart = 1; 		//0,15 sec антидребезг
		if(delaydone==1)                    
		{
			delaystart = 0;
				if (position==2 && metka==1)
						{ moto = 0; e=1; }
		
		}		
	}
	
	if (e==1)
	{
		if (position==2 && metka==0 ) //проверка после реверса
	 {
		 if (a==0)
		 {
		 delaystart2 = 1; //1sec
			a=1;
		 }
		if(delaydone2)                     
        {
        	delaystart2 = 0;
        }
		if (position==2 && metka==0 && delaydone2==0 ) 
	    {
		delaystart3 = 1; 		//2sec
	
		if(delaydone3)                     
        {
        delaystart3 = 0;
		toolchanged = 1;  //инструмент готов на чпу
		e=0; 
		a=0;
		}
	   }
	  }
	 }
	
	
	break;
	
	case 3:

	if(position !=3 )
		{
			moto = 1;  toolchanged = 0; //вперед
		}				
	
	
	if (position==3 && metka==1 && e==0)	//реверс
	{
	    delaystart = 1; 		//0,15 sec антидребезг
		if(delaydone==1)                    
		{
			delaystart = 0;
				if (position==3 && metka==1)
						{ moto = 0; e=1; }
		
		}		
	}
	
	if (e==1)
	{
		if (position==3 && metka==0 ) //проверка после реверса
	 {
		 if (a==0)
		 {
		 delaystart2 = 1; //1sec
			a=1;
		 }
		if(delaydone2)                     
        {
        	delaystart2 = 0;
        }
		if (position==3 && metka==0 && delaydone2==0 ) 
	    {
		delaystart3 = 1; 		//2sec
	
		if(delaydone3)                     
        {
        delaystart3 = 0;
		toolchanged = 1;  //инструмент готов на чпу
		e=0; 
		a=0;
		}
	   }
	  }
	 }
	
	
	break;
	
	case 4:

	if(position !=4 )
		{
			moto = 1;  toolchanged = 0; //вперед
		}				
	
	
	if (position==4 && metka==1 && e==0)	//реверс
	{
	    delaystart = 1; 		//0,15 sec антидребезг
		if(delaydone==1)                    
		{
			delaystart = 0;
				if (position==4 && metka==1)
						{ moto = 0; e=1; }
		
		}		
	}
	
	if (e==1)
	{
		if (position==4 && metka==0 ) //проверка после реверса
	 {
		 if (a==0)
		 {
		 delaystart2 = 1; //1sec
			a=1;
		 }
		if(delaydone2)                     
        {
        	delaystart2 = 0;
        }
		if (position==4 && metka==0 && delaydone2==0 ) 
	    {
		delaystart3 = 1; 		//2sec
	
		if(delaydone3)                     
        {
        delaystart3 = 0;
		toolchanged = 1;  //инструмент готов на чпу
		e=0; 
		a=0;
		}
	   }
	  }
	 }
	
	
	break;
	
	case 5:

	if(position !=5 )
		{
			moto = 1;  toolchanged = 0; //вперед
		}				
	
	
	if (position==5 && metka==1 && e==0)	//реверс
	{
	    delaystart = 1; 		//0,15 sec антидребезг
		if(delaydone==1)                    
		{
			delaystart = 0;
				if (position==5 && metka==1)
						{ moto = 0; e=1; }
		
		}		
	}
	
	if (e==1)
	{
		if (position==5 && metka==0 ) //проверка после реверса
	 {
		 if (a==0)
		 {
		 delaystart2 = 1; //1sec
			a=1;
		 }
		if(delaydone2)                     
        {
        	delaystart2 = 0;
        }
		if (position==5 && metka==0 && delaydone2==0 ) 
	    {
		delaystart3 = 1; 		//2sec
	
		if(delaydone3)                     
        {
        delaystart3 = 0;
		toolchanged = 1;  //инструмент готов на чпу
		e=0; 
		a=0;
		}
	   }
	  }
	 }
	
	
	break;
	
	case 6:

	if(position !=6 )
		{
			moto = 1;  toolchanged = 0; //вперед
		}				
	
	
	if (position==6 && metka==1 && e==0)	//реверс
	{
	    delaystart = 1; 		//0,15 sec антидребезг
		if(delaydone==1)                    
		{
			delaystart = 0;
				if (position==6 && metka==1)
						{ moto = 0; e=1; }
		
		}		
	}
	
	if (e==1)
	{
		if (position==6 && metka==0 ) //проверка после реверса
	 {
		 if (a==0)
		 {
		 delaystart2 = 1; //1sec
			a=1;
		 }
		if(delaydone2)                     
        {
        	delaystart2 = 0;
        }
		if (position==6 && metka==0 && delaydone2==0 ) 
	    {
		delaystart3 = 1; 		//2sec
	
		if(delaydone3)                     
        {
        delaystart3 = 0;
		toolchanged = 1;  //инструмент готов на чпу
		e=0; 
		a=0;
		}
	   }
	  }
	 }
	
	
	break;

}
}
custom.hal
(для просмотра содержимого нажмите на ссылку)

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

loadrt revolverka
addf revolverka servo-thread 

loadrt timedelay count=4
addf timedelay.0 servo-thread
setp timedelay.0.on-delay 0.15

net delaystart timedelay.0.in <= revolverka.delaystart
net delaydone timedelay.0.out => revolverka.delaydone


addf timedelay.2 servo-thread
setp timedelay.2.on-delay 1 

net delaystart2 timedelay.2.in <= revolverka.delaystart2
net delaydone2 timedelay.2.out => revolverka.delaydone2

addf timedelay.3 servo-thread
setp timedelay.3.on-delay 2 

net delaystart3 timedelay.3.in <= revolverka.delaystart3
net delaydone3 timedelay.3.out => revolverka.delaydone3

net tool-change iocontrol.0.tool-change => revolverka.toolchange
net tool-changed iocontrol.0.tool-changed <= revolverka.toolchanged
net tool-number iocontrol.0.tool-prep-number => revolverka.toolnumber
net tool-oldnumber iocontrol.0.tool-number => revolverka.old 
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

net moto  revolverka.moto =>  parport.0.pin-06-out

net opto1 revolverka.opto1 <= parport.0.pin-11-in
net opto2 revolverka.opto2 <= parport.0.pin-12-in
net opto3 revolverka.opto3 <= parport.0.pin-13-in
net metka revolverka.metka <= parport.0.pin-15-in

Ели нашел)
Скомпилировал компонент.
Дополнил custom.hal

При запуске управляющей программы ошибки:
(для просмотра содержимого нажмите на ссылку)
Print file information:
RUN_IN_PLACE=no
LINUXCNC_DIR=
LINUXCNC_BIN_DIR=/usr/bin
LINUXCNC_TCL_DIR=/usr/lib/tcltk/linuxcnc
LINUXCNC_SCRIPT_DIR=
LINUXCNC_RTLIB_DIR=/usr/lib/linuxcnc/modules
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/lib/tcltk/linuxcnc/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.6
LINUXCNC - 2.9.3
Machine configuration directory is '/home/cnc/linuxcnc/configs/revolverka'
Machine configuration file is 'revolverka.ini'
INIFILE=/home/cnc/linuxcnc/configs/revolverka/revolverka.ini
VERSION=1.1
PARAMETER_FILE=linuxcnc.var
TPMOD=
HOMEMOD=
TASK=milltask
HALUI=
DISPLAY=axis
COORDINATES=X Z
KINEMATICS=trivkins coordinates=XZ
Starting LinuxCNC...
Starting LinuxCNC server program: linuxcncsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting LinuxCNC IO program: io
libnml/buffer/shmem.cc 320: Shared memory buffers toolCmd and toolCmd may conflict. (key=1004(0x3EC))
libnml/buffer/shmem.cc 320: Shared memory buffers toolSts and toolSts may conflict. (key=1005(0x3ED))
libnml/buffer/shmem.cc 320: Shared memory buffers emcError and emcError may conflict. (key=1003(0x3EB))
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Found file(REL): ./revolverka.hal
Found file(REL): ./custom.hal
Shutting down and cleaning up LinuxCNC...
config string '0 out'
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments

Debug file information:
Note: Using POSIX realtime
Unexpected realtime delay on task 0 with period 100000
This Message will only display once per session.
Run the Latency Test and resolve before continuing.
./custom.hal:19: Signal 'tool-changed' can not add OUT pin 'revolverka.toolchanged', it already has OUT pin 'hal_manualtoolchange.changed'
15046

Stopping realtime threads
Unloading hal components
Note: Using POSIX realtime

Наверное я к тому же еще не подключил созданный компонент.

В программировании мало что смыслю.
Занимаюсь в основном электрикой\электроникой.
Совместно с токарем перебрали китайскую револьверную головку HAK31 на 8 инструментов.
Предназначена в основном для токарного с ЧПУ.

Выбросили червяк, блокировка муфты Хирта осуществляется пружинами, разблокировка муфты - пневмоцилиндром.
Контроль состояния муфты заблокирована\разблокирована осуществляется 2-мя датчиками Холла.
Револьвер вращается в обе стороны серводвигателем по Step/Dir.
Датчик выбора инструмента на основе 8 датчиков Холла + диск с магнитом.
Собрал на дискретной логике аппаратный перекодировщик десятичного кода в двоичный Грея.

Итого на выходе револьверки:
1. 8-ми разрядный десятичный код (8pins);
2. 3-х разрядный двоичный код (3pins);
3. Муфта заблокирована (1pin);
4. Муфта разблокирована (1pin).

Итого на входе револьверки:
1. Dir (1pin);
2. Step (1pin);
3. Включение пневмоцилиндра (для разблокировки муфты) (1pin).

Сделана полная гальваническая развязка по питанию и опторазвязка входов\выходов.
Механика, пневматика и электроника отлажены.

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

Задача: - чтобы управление револьвером и контроль выбора инструмента осуществлялись от LinuxCNC.
tokarka63
Мастер
Сообщения: 398
Зарегистрирован: 10 фев 2020, 18:39
Репутация: 13
Настоящее имя: Виталий
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение tokarka63 »

Компонент делал для 6и позиционной револьверки от тпк125, вращение в 1 сторону, никакой пневматики.....для ваших целей не подходит!
voltmarin
Новичок
Сообщения: 14
Зарегистрирован: 24 авг 2023, 23:22
Репутация: 2
Настоящее имя: Юрий
Контактная информация:

Re: Смена инструмента на токарнике

Сообщение voltmarin »

tokarka63 писал(а): 10 окт 2024, 22:24 Компонент делал для 6и позиционной револьверки от тпк125, вращение в 1 сторону, никакой пневматики.....для ваших целей не подходит!
В любом случае спасибо за оперативный ответ.
Ответить

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