Страница 3 из 38

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

Добавлено: 14 май 2015, 10:43
verser
nkp писал(а):
verser писал(а):Исходники.
self.halcomp = hal.component("probe_scr")
Упс. Баг. Спасибо. Исправил исходники.

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

Добавлено: 14 май 2015, 21:40
nkp
добавление в axis.tcl (/usr/share/axis/tcl/axis.tcl)

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

bind . <q> {
 ${pane_top}.right raise preview  
}
нажатие "q" переключает вкладки на предпросмотр ...
пробовал питоном (pyatspi) эмулировать нажатие - упирается ;)

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

Добавлено: 14 май 2015, 22:50
Nick
А через .axisrc это никак не сделать?

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

Добавлено: 15 май 2015, 01:48
Serg
Можно, вот тут можно подглядеть идею: Re: Плазморез со смарт-вентиляцией #35 :)

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

Добавлено: 15 май 2015, 07:07
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)

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

Добавлено: 15 май 2015, 08:38
Serg
nkp писал(а):в axis:
(создаем новый пин)
Ну что за нафик! Ну для кого я такой красивый пример опубликовал?.. :wik:

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

Добавлено: 15 май 2015, 08:58
verser
UAVpilot писал(а):
nkp писал(а):в axis:
(создаем новый пин)
Ну что за нафик! Ну для кого я такой красивый пример опубликовал?.. :wik:
Я скачал. +1 :good:

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

Добавлено: 15 май 2015, 09:12
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

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

Добавлено: 15 май 2015, 09:22
verser
nkp писал(а):но в случае ,если выйдем из функции по ошибке(return) - пин останется активным...
отключать пин еще и внутри error_poll()

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

Добавлено: 15 май 2015, 09:36
nkp
verser писал(а):отключать пин еще и внутри error_poll()
все случаи не учтешь - я уже несколько раз сталкивался с подобной задачей,когда пин нужно включать
и "тут же" деактивировать...
опять же - время "тут же" должно хватать для уверенного срабатывания...
===============
был бы отдельный вид пинов ,сигнальный :
как кнопка без фиксации :)

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

Добавлено: 15 май 2015, 09:42
Nick
nkp писал(а):все случаи не учтешь - я уже несколько раз сталкивался с подобной задачей,когда пин нужно включать
и "тут же" деактивировать...
oneshot?

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

Добавлено: 15 май 2015, 09:49
nkp
вопрос иного плана - непосредственно по работе программы:
пока вожусь с эмулятором(вместо датчика кнопка PYVCP)
заметил - несколько раз уже было :
в итоговом окне показывает результат поиска , а не результат уточнения...
на реальном щупе это трудно уловить ,так как разница между показаниями поиска и уточнения не велика ...
а на эмуляторе можно нажать кнопку когда угодно ...
==========
может конечно это я накуролесил тут , так как переделываю под себя :thinking:

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

Добавлено: 15 май 2015, 09:58
verser
Nick писал(а):все случаи не учтешь
В Gtk есть еще такая штука “leave-notify-event”
The ::leave-notify-event will be emitted when the pointer leaves the widget 's window.

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

Добавлено: 15 май 2015, 10:02
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)

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

Добавлено: 15 май 2015, 10:08
verser
Nick писал(а):А чего ты для вот этого всего не сделал ... что-то типо вот такого:
Я так только щас научился :)
Вообще в планах уже стояло подчистить код.

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

Добавлено: 15 май 2015, 10:21
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

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

Добавлено: 15 май 2015, 10:22
Nick
И можно еще для токарки такой же экранчик сделать, хотя хрен знает нужен он там или нет...

Кстати, при пробе вниз, где остановится щуп? В точке касания по Z или наверх уйдет?

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

Добавлено: 15 май 2015, 10:23
nkp
Nick писал(а):
nkp писал(а):все случаи не учтешь - я уже несколько раз сталкивался с подобной задачей,когда пин нужно включать
и "тут же" деактивировать...
oneshot?
а как ним пользоваться??
в смысле - как ним изменить состояние пина BIT_OUT ??

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

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

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

Тогда пин гарантированно провисит этот sleep(1000), и любой rt компонент его схавает. Другое дело, что его может не увидеть другой userspace компонент...

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

Добавлено: 15 май 2015, 11:23
verser
Nick писал(а):при пробе вниз, где остановится щуп? В точке касания по Z или наверх уйдет?
Вернется по Z вверх в исходную позицию.