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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

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

Сообщение Lexxa »

Lexxa писал(а):Не устраивает только то, что при включении станка у ЧПУ нет информации о установленном на данный момент инструменте.
Не решение ли?
IO reports the tool number of the tool currently in the spindle in two
ways: by the hal pin iocontrol.0.tool-number, and by the emcioStatus
field tool.toolInSpindle.

Before this commit, these two variables were not initialized correctly
at startup (they were updated at the first tool change, and correct
there after). This commit fixes the initialization these variables.

On machines with nonrandom tool changers, LinuxCNC assumes it starts up
with the spindle empty, indicated by tool number 0 in this config.

On machines with random tool changers, LinuxCNC normally starts up with
a tool in the spindle (possibly T0 which is commonly used to denote
"no tool"). In the situation where the tool table does not indicate a
tool in the spindle, the "error" tool number -1 is reported.
:bender:
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

Подниму тему.
Не доходит до меня как организовать автоматическую смену инструмента.
Есть револьверная головка на 16 инструментов с фиксацией штифтом на пневматике. Поворачивает её серводвигатель с энкодером. И стоит один концевик для определения первого инструмента.
Предполагается, что при начале работы, когда инструмент не определен, едем до срабатывания концевика и от него пляшем. Сейчас револьверка определена как поворотная ось Y. Т.е поворачиваем ось на номер инструмента*22,5 градуса. Пытался сделать просто ремапом M6, но #<_current_tool> и #<_selected_tool> всегда возвращает ноль. Как правильно реализовать без отдельных компонентов и ладдера?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Правильно будет с отдельным компонентом или ладдером ;).
А так, что именно у тебя не работает G0 Y[22.5*#<t>]?

можно через процедуру (просто я с ремапом не работал).

Будет:

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

O<change-tool> SUB
  #<t> = #1
  M62-64 (разжать пневматику)
  G1 Y[22.5*#<t>]
  M62-64 (зажать пневматику)
O<change-tool> ENDSUB
Плюс к этому можно хоуминг добавить - через MDI комманду и тоже какой-нибудь Gкод :).
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

Спасибо. Попробую твой вариант.
Примерно так и делал. Только пытался получить номер инструмента через переменные #<_current_tool> и #<_selected_tool>. Но похоже что они не для этого.
Nick писал(а): Плюс к этому можно хоуминг добавить - через MDI комманду и тоже какой-нибудь Gкод :).
А здесь можно поподробнее? Как сделать хоуминг в коде программы?
Аватара пользователя
vovafed
Мастер
Сообщения: 1822
Зарегистрирован: 08 фев 2013, 16:19
Репутация: 325
Настоящее имя: Владимир
Откуда: башкортостан
Контактная информация:

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

Сообщение vovafed »

http://www.cnc-club.ru/forum/viewtopic. ... 1&start=40
http://linuxcnc.org/docs/html/man/man9/carousel.9.html
карусель должна подойти , вам нужен конфиг с индексной меткой

http://www.cnc-club.ru/forum/viewtopic. ... &start=540
здесь подключал с двоичным кодом грея (4 датчика)
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

Nick писал(а):Правильно будет с отдельным компонентом или ладдером ;).
А так, что именно у тебя не работает G0 Y[22.5*#<t>]?

можно через процедуру (просто я с ремапом не работал).

Будет:

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

O<change-tool> SUB
  #<t> = #1
  M62-64 (разжать пневматику)
  G1 Y[22.5*#<t>]
  M62-64 (зажать пневматику)
O<change-tool> ENDSUB
Не работает у меня. Параметр #1 всегда возвращает 0
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

vovafed писал(а):http://www.cnc-club.ru/forum/viewtopic. ... 1&start=40
http://linuxcnc.org/docs/html/man/man9/carousel.9.html
карусель должна подойти , вам нужен конфиг с индексной меткой

http://www.cnc-club.ru/forum/viewtopic. ... &start=540
здесь подключал с двоичным кодом грея (4 датчика)
А можно посмотреть ваши конфиги?
Аватара пользователя
vovafed
Мастер
Сообщения: 1822
Зарегистрирован: 08 фев 2013, 16:19
Репутация: 325
Настоящее имя: Владимир
Откуда: башкортостан
Контактная информация:

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

Сообщение vovafed »

в понедельник смогу скинуть только
http://www.cnc-club.ru/forum/viewtopic. ... 55#p261655
здесь во вложении есть
по внимательней перечитал ваши сообщения
вариант ника лучше будет
Аватара пользователя
vovafed
Мастер
Сообщения: 1822
Зарегистрирован: 08 фев 2013, 16:19
Репутация: 325
Настоящее имя: Владимир
Откуда: башкортостан
Контактная информация:

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

Сообщение vovafed »

я не специалист
попробуйте так
пусть меня поправят если что не так
в toolchange.ngc

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

O<change-tool> SUB
  #<t> = #1
  M62-64 (разжать пневматику)
  G1 Y[22.5*#<t>]
  m64p1
  M62-64 (зажать пневматику)
O<change-tool> ENDSUB
в хал

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

loadusr -W hal_manualtoolchange
net tool-release motion.digital-out-01 
net tool-released motion.digital-in-01

net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed
net tool-change-loop     iocontrol.0.tool-change       =>  hal_manualtoolchange.change
в ини

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

[RS274NGC]
PARAMETER_FILE = linuxcnc.var
SUBROUTINE_PATH = ./
REMAP=M6   modalgroup=6  prolog=change_prolog ngc=toolchange epilog=change_epilog

[PYTHON]
TOPLEVEL=./toplevel.py
PATH_APPEND= ./
PATH_APPEND= ../../nc_files/remap_lib/python-stdglue/


[MAX]
# distance from the end of the "reference tool" (tool-length - 0) to the
# center of the head tilt axis
B_PIVOT_LENGTH = 0

[TRAJ]
TLO_IS_ALONG_W = 0

Последний раз редактировалось vovafed 11 июн 2016, 19:53, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

galexey писал(а):Пытался сделать просто ремапом M6, но #<_current_tool> и #<_selected_tool> всегда возвращает ноль.
хорошо было бы глянуть полностью конфиг
-----------------------
какая версия емс?
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

nkp писал(а):
galexey писал(а):Пытался сделать просто ремапом M6, но #<_current_tool> и #<_selected_tool> всегда возвращает ноль.
хорошо было бы глянуть полностью конфиг
-----------------------
какая версия емс?
Версия последняя 2.7

Конфиг прикрепил.
Вложения
my_LinuxCNC_machine.hal
(10.3 КБ) 1037 скачиваний
my_LinuxCNC_machine.ini
(2.94 КБ) 958 скачиваний
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

нам никуда не продвинуться ,если "не работают" параметры ;)
нужно выяснить причину...

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

[RS274NGC]

#- File containing interpreter variables
PARAMETER_FILE =        linuxcnc.var
SUBROUTINE_PATH = ./
REMAP=M6   modalgroup=6  prolog=change_prolog ngc=m6 epilog=change_epilog

[PYTHON]
TOPLEVEL=./toplevel.py
PATH_APPEND= ./
PATH_APPEND= ../../nc_files/remap_lib/python-stdglue/
пробовать для начала в m6.ngc прописать простой код:

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

o<m6> sub

(debug,return = #<_value>)
(debug,5400 = #5400)
(debug,tool_in_spindle = #<tool_in_spindle>)
(debug,selected_tool = #<selected_tool>)

o<m6> endsub [1]
запускать емс из терминала(в терминале команда
linuxcnc
)
далее выбираем свой ини и запускаем...
пытаемся в MDI просто менять инструмент ... это нам подскажет ошибку(см в терминале - на что будет ругаться))
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

да,немного про remap забыл сказать:

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

[PYTHON]
TOPLEVEL=./toplevel.py
PATH_APPEND= ./
PATH_APPEND= ../../nc_files/remap_lib/python-stdglue/
=====================================================
./toplevel.py

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

#! /usr/bin/python

import remap
в этом случае лежит в папке конфига
-----------------
stdglue.py
лежит по пути ,указанному в этой строке:
PATH_APPEND= ../../nc_files/remap_lib/python-stdglue/
примерно такого содержания:

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

# stdglue - canned prolog and epilog functions for the remappable builtin codes (T,M6,M61,S,F)
#
# we dont use argspec to avoid the generic error message of the argspec prolog and give more
# concise ones here


# cycle_prolog,cycle_epilog: generic code-independent support glue for oword sub cycles
#
# these are provided as starting point - for more concise error message you would better
# write a prolog specific for the code
#
# Usage:
#REMAP=G84.3  modalgroup=1 argspec=xyzqp prolog=cycle_prolog ngc=g843 epilog=cycle_epilog


import emccanon 
from interpreter import *
throw_exceptions = 1

# REMAP=S   prolog=setspeed_prolog  ngc=setspeed epilog=setspeed_epilog
# exposed parameter: #<speed>

def setspeed_prolog(self,**words):
    try:
        c = self.blocks[self.remap_level]
        if not c.s_flag:
            self.set_errormsg("S requires a value") 
            return INTERP_ERROR
        self.params["speed"] = c.s_number
    except Exception,e:
        self.set_errormsg("S/setspeed_prolog: %s)" % (e))
        return INTERP_ERROR
    return INTERP_OK

def setspeed_epilog(self,**words):
    try:
        if not self.value_returned:
            r = self.blocks[self.remap_level].executing_remap
            self.set_errormsg("the %s remap procedure %s did not return a value"
                             % (r.name,r.remap_ngc if r.remap_ngc else r.remap_py))
            return INTERP_ERROR
        if self.return_value < -TOLERANCE_EQUAL: # 'less than 0 within interp's precision'
            self.set_errormsg("S: remap procedure returned %f" % (self.return_value)) 
            return INTERP_ERROR
        if self.blocks[self.remap_level].builtin_used:
            pass
            #print "---------- S builtin recursion, nothing to do"
        else:
            self.speed = self.params["speed"]
            emccanon.enqueue_SET_SPINDLE_SPEED(self.speed)
        return INTERP_OK
    except Exception,e:
        self.set_errormsg("S/setspeed_epilog: %s)" % (e))
        return INTERP_ERROR
    return INTERP_OK    

# REMAP=F   prolog=setfeed_prolog  ngc=setfeed epilog=setfeed_epilog
# exposed parameter: #<feed>

def setfeed_prolog(self,**words):
    try:
        c = self.blocks[self.remap_level]
        if not c.f_flag:
            self.set_errormsg("F requires a value") 
            return INTERP_ERROR
        self.params["feed"] = c.f_number
    except Exception,e:
        self.set_errormsg("F/setfeed_prolog: %s)" % (e))
        return INTERP_ERROR
    return INTERP_OK    

def setfeed_epilog(self,**words):
    try:
        if not self.value_returned:
            r = self.blocks[self.remap_level].executing_remap
            self.set_errormsg("the %s remap procedure %s did not return a value"
                             % (r.name,r.remap_ngc if r.remap_ngc else r.remap_py))
            return INTERP_ERROR
        if self.blocks[self.remap_level].builtin_used:
            pass
            #print "---------- F builtin recursion, nothing to do"
        else:
            self.feed_rate = self.params["feed"]
            emccanon.enqueue_SET_FEED_RATE(self.feed_rate)
        return INTERP_OK
    except Exception,e:
        self.set_errormsg("F/setfeed_epilog: %s)" % (e))
        return INTERP_ERROR
    return INTERP_OK    


# REMAP=T   prolog=prepare_prolog ngc=prepare epilog=prepare_epilog
# exposed parameters: #<tool> #<pocket>

def prepare_prolog(self,**words):
    try:
        cblock = self.blocks[self.remap_level]
        if not cblock.t_flag:
            self.set_errormsg("T requires a tool number")
            return INTERP_ERROR
        tool  = cblock.t_number
        if tool:
            (status, pocket) = self.find_tool_pocket(tool)
            if status != INTERP_OK:
                self.set_errormsg("T%d: pocket not found" % (tool))
                return status
        else:
            pocket = -1 # this is a T0 - tool unload
        self.params["tool"] = tool
        self.params["pocket"] = pocket
        return INTERP_OK
    except Exception, e:
        self.set_errormsg("T%d/prepare_prolog: %s" % (int(words['t']), e))
        return INTERP_ERROR

def prepare_epilog(self, **words):
    try:
        if not self.value_returned:
            r = self.blocks[self.remap_level].executing_remap
            self.set_errormsg("the %s remap procedure %s did not return a value"
                             % (r.name,r.remap_ngc if r.remap_ngc else r.remap_py))
            return INTERP_ERROR
        if self.blocks[self.remap_level].builtin_used:
            #print "---------- T builtin recursion, nothing to do"
            return INTERP_OK
        else:
            if self.return_value > 0:
                self.selected_tool = int(self.params["tool"])
                self.selected_pocket = int(self.params["pocket"])
                emccanon.SELECT_POCKET(self.selected_pocket, self.selected_tool)
                return INTERP_OK
            else:
                self.set_errormsg("T%d: aborted (return code %.1f)" % (int(self.params["tool"]),self.return_value))
                return INTERP_ERROR
    except Exception, e:
        self.set_errormsg("T%d/prepare_epilog: %s" % (tool,e))
        return INTERP_ERROR       

# REMAP=M6  modalgroup=6 prolog=change_prolog ngc=change epilog=change_epilog
# exposed parameters:
#    #<tool_in_spindle>
#    #<selected_tool>
#    #<current_pocket>
#    #<selected_pocket>

def change_prolog(self, **words):
    try:
        # this is relevant only when using iocontrol-v2.
        if self.params[5600] > 0.0:
            if self.params[5601] < 0.0:
                self.set_errormsg("Toolchanger hard fault %d" % (int(self.params[5601])))
                return INTERP_ERROR
            print "change_prolog: Toolchanger soft fault %d" % int(self.params[5601])
            
	if self.selected_pocket < 0:
            self.set_errormsg("M6: no tool prepared")
            return INTERP_ERROR
	if self.cutter_comp_side:
            self.set_errormsg("Cannot change tools with cutter radius compensation on")
            return INTERP_ERROR
	self.params["tool_in_spindle"] = self.current_tool
	self.params["selected_tool"] = self.selected_tool
	self.params["current_pocket"] = self.current_pocket # this is probably nonsense
        self.params["selected_pocket"] = self.selected_pocket
        return INTERP_OK
    except Exception, e:
        self.set_errormsg("M6/change_prolog: %s" % (e))
        return INTERP_ERROR
    
def change_epilog(self, **words):
    try:
        if not self.value_returned:
            r = self.blocks[self.remap_level].executing_remap
            self.set_errormsg("the %s remap procedure %s did not return a value"
                             % (r.name,r.remap_ngc if r.remap_ngc else r.remap_py))
            return INTERP_ERROR
        # this is relevant only when using iocontrol-v2.
        if self.params[5600] > 0.0:
            if self.params[5601] < 0.0:
                self.set_errormsg("Toolchanger hard fault %d" % (int(self.params[5601])))
                return INTERP_ERROR
            print "change_epilog: Toolchanger soft fault %d" % int(self.params[5601])

        if self.blocks[self.remap_level].builtin_used:
            #print "---------- M6 builtin recursion, nothing to do"
            return INTERP_OK
        else:
            if self.return_value > 0.0:
                # commit change
                self.selected_pocket =  int(self.params["selected_pocket"])
                emccanon.CHANGE_TOOL(self.selected_pocket)
                self.current_pocket = self.selected_pocket
                self.selected_pocket = -1
                self.selected_tool = -1
                # cause a sync()
                self.set_tool_parameters()
                self.toolchange_flag = True
                return INTERP_EXECUTE_FINISH
            else:
                self.set_errormsg("M6 aborted (return code %.1f)" % (self.return_value))
                return INTERP_ERROR
    except Exception, e:
        self.set_errormsg("M6/change_epilog: %s" % (e))
        return INTERP_ERROR

# REMAP=M61  modalgroup=6 prolog=settool_prolog ngc=settool epilog=settool_epilog
# exposed parameters: #<tool> #<pocket>

def settool_prolog(self,**words):
    try:
        c = self.blocks[self.remap_level]
        if not c.q_flag:
            self.set_errormsg("M61 requires a Q parameter") 
            return INTERP_ERROR
        tool = int(c.q_number)
        if tool < -TOLERANCE_EQUAL: # 'less than 0 within interp's precision'
            self.set_errormsg("M61: Q value < 0") 
            return INTERP_ERROR
        (status,pocket) = self.find_tool_pocket(tool)
        if status != INTERP_OK:
            self.set_errormsg("M61 failed: requested tool %d not in table" % (tool))
            return status
        self.params["tool"] = tool
        self.params["pocket"] = pocket
        return INTERP_OK
    except Exception,e:
        self.set_errormsg("M61/settool_prolog: %s)" % (e))
        return INTERP_ERROR

def settool_epilog(self,**words):
    try:
        if not self.value_returned:
            r = self.blocks[self.remap_level].executing_remap
            self.set_errormsg("the %s remap procedure %s did not return a value"
                             % (r.name,r.remap_ngc if r.remap_ngc else r.remap_py))
            return INTERP_ERROR

        if self.blocks[self.remap_level].builtin_used:
            #print "---------- M61 builtin recursion, nothing to do"
            return INTERP_OK
        else:
            if self.return_value > 0.0:
                self.current_tool = int(self.params["tool"])
                self.current_pocket = int(self.params["pocket"])
                emccanon.CHANGE_TOOL_NUMBER(self.current_pocket)
                # cause a sync()
                self.tool_change_flag = True
                self.set_tool_parameters()
            else:
                self.set_errormsg("M61 aborted (return code %.1f)" % (self.return_value))
                return INTERP_ERROR
    except Exception,e:
        self.set_errormsg("M61/settool_epilog: %s)" % (e))
        return INTERP_ERROR

# educational alternative: M61 remapped to an all-Python handler
# demo - this really does the same thing as the builtin (non-remapped) M61
#
# REMAP=M61 modalgroup=6 python=set_tool_number

def set_tool_number(self, **words):
    try:
        c = self.blocks[self.remap_level]
        if c.q_flag:
            toolno = int(c.q_number)
        else:
            self.set_errormsg("M61 requires a Q parameter")
            return status 
	(status,pocket) = self.find_tool_pocket(toolno)
	if status != INTERP_OK:
            self.set_errormsg("M61 failed: requested tool %d not in table" % (toolno))
            return status
	if words['q'] > -TOLERANCE_EQUAL: # 'greater equal 0 within interp's precision'
            self.current_pocket = pocket
            self.current_tool = toolno
            emccanon.CHANGE_TOOL_NUMBER(pocket)
            # cause a sync()
            self.tool_change_flag = True
            self.set_tool_parameters()
            return INTERP_OK
	else:
            self.set_errormsg("M61 failed: Q=%4" % (toolno))
            return INTERP_ERROR
    except Exception, e:
        self.set_errormsg("M61/set_tool_number: %s" % (e))
        return INTERP_ERROR


_uvw = ("u","v","w","a","b","c")
_xyz = ("x","y","z","a","b","c")
# given a plane, return  sticky words, incompatible axis words and plane name
# sticky[0] is also the movement axis
_compat = {
    emccanon.CANON_PLANE_XY : (("z","r"),_uvw,"XY"),
    emccanon.CANON_PLANE_YZ : (("x","r"),_uvw,"YZ"),
    emccanon.CANON_PLANE_XZ : (("y","r"),_uvw,"XZ"),
    emccanon.CANON_PLANE_UV : (("w","r"),_xyz,"UV"),
    emccanon.CANON_PLANE_VW : (("u","r"),_xyz,"VW"),
    emccanon.CANON_PLANE_UW : (("v","r"),_xyz,"UW")}           

# extract and pass parameters from current block, merged with extra paramters on a continuation line
# keep tjose parameters across invocations
# export the parameters into the oword procedure
def cycle_prolog(self,**words):
    # self.sticky_params is assumed to have been initialized by the
    # init_stgdlue() method below
    global _compat
    try:    
        # determine whether this is the first or a subsequent call
        c = self.blocks[self.remap_level]
        r = c.executing_remap
        if c.g_modes[1] == r.motion_code:
            # first call - clear the sticky dict
            self.sticky_params[r.name] = dict()

        self.params["motion_code"] = c.g_modes[1]
        
        (sw,incompat,plane_name) =_compat[self.plane]
        for (word,value) in words.items():
            # inject current parameters
            self.params[word] = value
            # record sticky words
            if word in sw:
                if self.debugmask & 0x00080000: print "%s: record sticky %s = %.4f" % (r.name,word,value)
                self.sticky_params[r.name][word] = value
            if word in incompat:
                return "%s: Cannot put a %s in a canned cycle in the %s plane" % (r.name, word.upper(), plane_name)

        # inject sticky parameters which were not in words:
        for (key,value) in self.sticky_params[r.name].items():
            if not key in words:
                if self.debugmask & 0x00080000: print "%s: inject sticky %s = %.4f" % (r.name,key,value)
                self.params[key] = value

        if not "r" in self.sticky_params[r.name]:
            return "%s: cycle requires R word" % (r.name)
        else:
            if self.sticky_params[r.name] <= 0.0:
                return "%s: R word must be > 0 if used (%.4f)" % (r.name, words["r"])

        if "l" in words:
            # checked in interpreter during block parsing
            # if l <= 0 or l not near an int
            self.params["l"] = words["l"]
            
        if "p" in words:
            p = words["p"]
            if p < 0.0:
                return "%s: P word must be >= 0 if used (%.4f)" % (r.name, p)
            self.params["p"] = p

        if self.feed_rate == 0.0:
            return "%s: feed rate must be > 0" % (r.name)
        if self.feed_mode == INVERSE_TIME:
            return "%s: Cannot use inverse time feed with canned cycles" % (r.name)
        if self.cutter_comp_side:
            return "%s: Cannot use canned cycles with cutter compensation on" % (r.name)
        return INTERP_OK
    
    except Exception, e:
        raise
        return "cycle_prolog failed: %s" % (e)

# make sure the next line has the same motion code, unless overriden by a
# new G code
def cycle_epilog(self,**words):
    try:
        c = self.blocks[self.remap_level]
        self.motion_mode = c.executing_remap.motion_code # retain the current motion mode
        return INTERP_OK
    except Exception, e:
        return "cycle_epilog failed: %s" % (e)


# this should be called from TOPLEVEL __init__()
def init_stdglue(self):
    self.sticky_params = dict()
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

Спасибо всем.
Ремап заработал. Теперь осталось разобраться с поиском начала револьверки.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

galexey писал(а):разобраться с поиском начала револьверки.
а в чем там проблема?
судя по постам выше,она у тебя организована как ось Y ,и есть вроде концевик первого инструмента?
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

nkp писал(а):
galexey писал(а):разобраться с поиском начала револьверки.
а в чем там проблема?
судя по постам выше,она у тебя организована как ось Y ,и есть вроде концевик первого инструмента?
Да. Именно так и есть. Хотелка такая. При запуске Linuxcnc инструмент не определен, т.е. #<_current_tool> равен 0. В этом случает едем до концевика. Вот это я еще не знаю как правильно реализовать.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

galexey писал(а):Вот это я еще не знаю как правильно реализовать
так а если через обычную процедуру HOME ?
у нас же просто ось,пусть она и находит home вместе со всеми осями...
это будет инструмент 1(первый) (ну - или нулевой,как сделаешь)
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

А как сделать HOME оси в подпрограмме?
Аватара пользователя
vovafed
Мастер
Сообщения: 1822
Зарегистрирован: 08 фев 2013, 16:19
Репутация: 325
Настоящее имя: Владимир
Откуда: башкортостан
Контактная информация:

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

Сообщение vovafed »

никак пока оси не захомлены подпрограмму не выполниш
возможно како активировать ремап можно при хомлении чтоб он выставлял инструмент :thinking:
galexey
Опытный
Сообщения: 104
Зарегистрирован: 01 апр 2012, 21:35
Репутация: 9
Контактная информация:

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

Сообщение galexey »

Насколько я понял, home из g кода не сделать.
Ответить

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