[WIKI] Работа с центроискателем в LinuxCNC

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
verser
Мастер
Сообщения: 1883
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1278
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение verser »

nkp писал(а):
verser писал(а):Исходники.
self.halcomp = hal.component("probe_scr")
Упс. Баг. Спасибо. Исправил исходники.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение nkp »

добавление в axis.tcl (/usr/share/axis/tcl/axis.tcl)

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

bind . <q> {
 ${pane_top}.right raise preview  
}
нажатие "q" переключает вкладки на предпросмотр ...
пробовал питоном (pyatspi) эмулировать нажатие - упирается ;)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение Nick »

А через .axisrc это никак не сделать?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение Serg »

Можно, вот тут можно подглядеть идею: Re: Плазморез со смарт-вентиляцией #35 :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение nkp »

UAVpilot писал(а):Можно, вот тут можно подглядеть идею
да - вроде так работает (пином переключает вкладки)
сам пин еще куда то нужно прицепить ...
в ~.axisrc:

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

def user_enable_preview_tab(*args):
    root_window.tk.eval(pane_top + ".right raise preview")

def user_live_update():
    if comp["preview-enable"] == 1:
        root_window.event_generate("<<enable-preview-tab>>")

root_window.bind("<<enable-preview-tab>>", user_enable_preview_tab)
if hal_present == 1 :
    ucomp = hal.component("axisui.user")
    ucomp.newpin("preview-enable",hal.HAL_BIT,hal.HAL_IN)
Последний раз редактировалось nkp 15 май 2015, 08:55, всего редактировалось 1 раз.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение Serg »

nkp писал(а):в axis:
(создаем новый пин)
Ну что за нафик! Ну для кого я такой красивый пример опубликовал?.. :wik:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
verser
Мастер
Сообщения: 1883
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1278
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение verser »

UAVpilot писал(а):
nkp писал(а):в axis:
(создаем новый пин)
Ну что за нафик! Ну для кого я такой красивый пример опубликовал?.. :wik:
Я скачал. +1 :good:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение nkp »

UAVpilot писал(а):Ну что за нафик! Ну для кого я такой красивый пример опубликовал?.
дык быдлокодер я - не до красот - работало бы исправил :freak:
как лучше выключать его(пин) - в начале функции - активируем - в конце деакт. ?
так работает - но в случае ,если выйдем из функции по ошибке(return) - пин останется активным...
(для просмотра содержимого нажмите на ссылку)

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

    def on_ym_released(self, data = None):
        # Start yminus.ngc
        self.halcomp["ps_enable_tab_preview"] = 1
        self.command.mode( linuxcnc.MODE_MDI )
        self.command.wait_complete()
        self.command.mdi( "O<yminus> call" )
        self.stat.poll()
        while self.stat.exec_state == 7 or self.stat.exec_state == 3 :
            if self.error_poll() == -1:
                return
            self.command.wait_complete()
            self.stat.poll()
            print "wait"
        print "next"    
        self.command.wait_complete()
        
        if self.error_poll() == -1:
            return
        a=self.stat.probed_position
        res=float(a[1])-0.5*self.spbtn1_probe_diam.get_value()
        self.lb_probe_ym.set_text( "%.4f" % res )
        self.lenght_y()
#        self.command.mdi( "G0 Y%f" % res)
        self.command.wait_complete()
        self.command.mode( linuxcnc.MODE_MANUAL )
        self.command.wait_complete()
        self.halcomp["ps_enable_tab_preview"] = 0
Аватара пользователя
verser
Мастер
Сообщения: 1883
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1278
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение verser »

nkp писал(а):но в случае ,если выйдем из функции по ошибке(return) - пин останется активным...
отключать пин еще и внутри error_poll()
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение nkp »

verser писал(а):отключать пин еще и внутри error_poll()
все случаи не учтешь - я уже несколько раз сталкивался с подобной задачей,когда пин нужно включать
и "тут же" деактивировать...
опять же - время "тут же" должно хватать для уверенного срабатывания...
===============
был бы отдельный вид пинов ,сигнальный :
как кнопка без фиксации :)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение Nick »

nkp писал(а):все случаи не учтешь - я уже несколько раз сталкивался с подобной задачей,когда пин нужно включать
и "тут же" деактивировать...
oneshot?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение nkp »

вопрос иного плана - непосредственно по работе программы:
пока вожусь с эмулятором(вместо датчика кнопка PYVCP)
заметил - несколько раз уже было :
в итоговом окне показывает результат поиска , а не результат уточнения...
на реальном щупе это трудно уловить ,так как разница между показаниями поиска и уточнения не велика ...
а на эмуляторе можно нажать кнопку когда угодно ...
==========
может конечно это я накуролесил тут , так как переделываю под себя :thinking:
Аватара пользователя
verser
Мастер
Сообщения: 1883
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1278
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение verser »

Nick писал(а):все случаи не учтешь
В Gtk есть еще такая штука “leave-notify-event”
The ::leave-notify-event will be emitted when the pointer leaves the widget 's window.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение Nick »

А чего ты для вот этого всего не сделал функицю?

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

        self.command.mdi( "G91" )
        self.command.wait_complete()
        self.command.mdi( "G0 X-%f Y-%f" % (self.spbtn1_xy_clearance.get_value(),self.spbtn1_edge_lenght.get_value()) )
        self.command.wait_complete()
        self.command.wait_complete()
        self.command.mdi( "G90" )
        self.command.wait_complete()
        if self.error_poll() == -1:
            return
что-то типо вот такого:

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

def gcode(s): 
    for l in s.split("\n"):
        self.command.mdi( l )
        self.command.wait_complete()
        if self.error_poll() == -1:
            return -1
    return 0
и потом все это было бы

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

s="""G91
G0 X-%f Y-%f
G90"""" % (self.spbtn1_xy_clearance.get_value(),self.spbtn1_edge_lenght.get_value()) )
gcode(s)
Аватара пользователя
verser
Мастер
Сообщения: 1883
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1278
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение verser »

Nick писал(а):А чего ты для вот этого всего не сделал ... что-то типо вот такого:
Я так только щас научился :)
Вообще в планах уже стояло подчистить код.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение Nick »

можно в функцию добавить еще и

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

       self.stat.poll()
        while self.stat.exec_state == 7 or self.stat.exec_state == 3 :
            if self.error_poll() == -1:
                return
            self.command.wait_complete()
            self.stat.poll()
чтобы можно было использовать и O<xxx> CALL
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение Nick »

И можно еще для токарки такой же экранчик сделать, хотя хрен знает нужен он там или нет...

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

Re: [WIKI] Работа с центроискателем

Сообщение nkp »

Nick писал(а):
nkp писал(а):все случаи не учтешь - я уже несколько раз сталкивался с подобной задачей,когда пин нужно включать
и "тут же" деактивировать...
oneshot?
а как ним пользоваться??
в смысле - как ним изменить состояние пина BIT_OUT ??
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение Nick »

хмм... тебе нужен пин в скрипте, который бы можно было бы выставить в 1 одноразово, с уверенностью, что его прочитает другой rt компонент?

тогда сделай любой пин, и просто в while компонента сразу после sleep(1000) (или сколько там обычно стоит?) обнуляй его.

Тогда пин гарантированно провисит этот sleep(1000), и любой rt компонент его схавает. Другое дело, что его может не увидеть другой userspace компонент...
Аватара пользователя
verser
Мастер
Сообщения: 1883
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1278
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Работа с центроискателем

Сообщение verser »

Nick писал(а):при пробе вниз, где остановится щуп? В точке касания по Z или наверх уйдет?
Вернется по Z вверх в исходную позицию.
Ответить

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