.axisrc

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

.axisrc

Сообщение nkp »

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

Файл .axisrc по умолчанию находится в домашней папке.
Точка в начале говорит о том,что файл скрытый(Hidden) ,отсюда - чтоб увидеть жмем (в Nautilus) Ctrl+H
В терминале чтоб "увидеть" :
ls -a
------------------------------------
Сразу следует отметить,что в некоторых случаях (например - несколько конфигов,и для каждого необходим "свой .axisrc") удобней
его держать в папке конфига.
Тогда в INI файле прописываем в секции

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

[DISPLAY]
USER_COMMAND_FILE = gui.py
имя файла может быть в таком случае произвольным,с "расширением" или без.
далее по тексту будет всегда использоваться имя .axisrc
Синтаксис файла разумеется python , иногда именно несоблюдение синтаксиса(отступы чаще всего) и является причиной ошибки.
Кстати - если ошибки не критичны - содержимое игнорируется(с выдачей окошка с ошибкой) ,а емс запускается.
------------------------------------------
Для чего служит?
Если предельно упрощенно - то это "продолжение" основного файла интерфейса axis.py
Код .axisrc выполняется после axis.py,и это значит ,что мы можем изменить интерфейс Axis не изменяя сам файл axis.py.
В таком случае,когда у нас обновится версия емс ,то наши изменения сохранятся .
-----------------------
Что можно "делать" в этом файле:
1. изменять функционал("поведение") программы
как пример - заставить емс (Axis) при загрузке открываться "на весь экран":

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

#maximize window
root_window.attributes("-zoomed",1)
(это работает не для всех дистрибутивов, другие варианты будут в теме)
2. изменять внешний вид
пример
3. создавать свои пины
таким образом "подключая" Hal к функционалу интерфейса
пример:

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

if hal_present == 1 :
    ucomp = hal.component("userpin")
    ucomp.newpin("reload_file",hal.HAL_BIT, hal.HAL_IN)
в hal будет создан пин (вход) с именем userpin.reload_file
4. еще одна удобная фича - функция user_live_update()
она выполняется в цикле,(кому интересно - через LivePlotter.update axis.py)
а следовательно задействуется для всех обновлений интерфейса
пример
таймер хода программы в статус_строке Axis

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

if hal_present == 1 :
    ucomp = hal.component("axisui.user")
    ucomp.newpin('hr',   hal.HAL_U32, hal.HAL_IN)
    ucomp.newpin('mn',  hal.HAL_U32, hal.HAL_IN)
    ucomp.newpin('sec',  hal.HAL_U32, hal.HAL_IN)
    ucomp.ready()  

W = root_window.tk.call
W('label','.info.ttime','-text','TTime:' )
W('pack', '.info.ttime', '-side', 'right')

W('pack','.info.tool','-fill','x','-expand','0'  )

def user_live_update():
    W('.info.ttime','configure','-text','%2d:%2d:%2d' % ( (ucomp['hr']),(ucomp['mn']),(ucomp['sec'])))
тут в postgui.hal разумеется нужно прописать пины таймера

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

loadrt time 
loadrt not 
addf time.0 servo-thread 
addf not.0 servo-thread 
net prog-running not.0.in <= halui.program.is-idle 
net cycle-timer time.0.start <= not.0.out 
net cycle-seconds axisui.user.sec <= time.0.seconds 
net cycle-minutes axisui.user.mn  <= time.0.minutes 
net cycle-hours   axisui.user.hr  <= time.0.hours
=============================================
открытие последнего G-кода при загрузке емс

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

lastfile = ""
recent = ap.getpref('recentfiles', [], repr)
if len(recent):
    lastfile = recent.pop(0)

if os.path.exists(lastfile):
    initialfile = lastfile

if os.path.exists(initialfile):
    open_file_guts(initialfile, False, addrecent)
=============================================
nau
Новичок
Сообщения: 33
Зарегистрирован: 02 фев 2020, 11:10
Репутация: 11
Настоящее имя: Антон
Откуда: Алматы
Контактная информация:

Re: .axisrc

Сообщение nau »

Большое спасибо за ценную информацию! Таймер - очень полезная штука. Немного добавлю, что мне пригодилось:

Не спрашивать подтверждения выхода:

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

root_window.tk.call("wm","protocol",".","WM_DELETE_WINDOW","destroy .")
Скрыть лишние кнопки шпинделя и кнопку tool touch off:

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

root_window.tk.call('pack','forget','.pane.top.tabs.fmanual.spindlef.ccw')
root_window.tk.call('pack','forget','.pane.top.tabs.fmanual.spindlef.cw')
root_window.tk.call('grid','forget','.pane.top.tabs.fmanual.jogf.zerohome.tooltouch')
Отключить кнопки 1-10 для изменения подачи.

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

for key in range(10):
  root_window.unbind("%s" % key)
root_window.unbind("`")
Рядом с кнопкой шпинделя можно добавить обороты шпинделя:

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

W1('label','.pane.top.tabs.fmanual.spindlef.spr','-text','SPR')
W1('grid','.pane.top.tabs.fmanual.spindlef.spr','-column','2','-row','1','-sticky','w')
def user_hal_pins():
    comp.newpin('spindle-speed', hal.HAL_FLOAT, hal.HAL_IN)
    hal.connect('axisui.spindle-speed','spindle-cmd-rpm') 
Можно вставить кнопку с простым кодом

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

root_window.tk.call('button','.pane.top.tabs.fmanual.toxyz','-text','Touch Off XY','-command','touchoffall','-height','1')
root_window.tk.call('grid','.pane.top.tabs.fmanual.toxyz','-column','1','-row','2','-columnspan','1','-padx','2','-sticky','w')
def touchoffall():
    if s.task_mode != linuxcnc.MODE_MDI:
         c.mode(linuxcnc.MODE_MDI)
         c.mdi('G92 X0 Y0')
         reload_file()
TclCommands.touchoffall = touchoffall
commands = TclCommands(root_window)
Или можно вызывать файл с кодом (у меня это код датчика высоты)

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

#button zplate
root_window.tk.call('button','.pane.top.tabs.fmanual.toZ','-text','Touch Z','-command','touchZ','-height','1')
root_window.tk.call('grid','.pane.top.tabs.fmanual.toZ','-column','1','-row','5','-columnspan','1','-padx','1','-sticky','w')
def touchZ():
    ensure_mode(linuxcnc.MODE_MDI)
    c.mdi("o100 call [-205] [300] [19.5]")
TclCommands.touchZ = touchZ
commands = TclCommands(root_window)
А также многое другое:
http://linuxcnc.org/docs/2.8/html/gui/a ... tion_hints
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: .axisrc

Сообщение nkp »

https://www.youtube.com/watch?v=ZBl9GlB1O9E

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

if hal_present == 1 :
    ucomp = hal.component("axisui.user")
    ucomp.newpin('btn1',   hal.HAL_BIT, hal.HAL_IN)
    ucomp.newpin('btn2',   hal.HAL_BIT, hal.HAL_IN)
    ucomp.newpin('ena' ,   hal.HAL_BIT, hal.HAL_IO)
    ucomp.newpin('iinc',   hal.HAL_S32, hal.HAL_IN)
    ucomp.ready()  


def user_live_update():

    global increments 
    if (ucomp['iinc'] < len(increments)) :
        if ucomp.btn1:
            if (ucomp['ena'] == 0) : 
                ucomp['iinc'] += 1
                root_window.call(widgets.jogincr._w, "select", ucomp['iinc'])                
                ucomp['ena'] = 1
        else:
            ucomp['ena'] = 0
            
    if (ucomp['iinc'] > 0 ) :                
        if ucomp.btn2:
            if (ucomp['ena'] == 0) : 
                ucomp['iinc'] -= 1
                root_window.call(widgets.jogincr._w, "select", ucomp['iinc'])                
                ucomp['ena'] = 1
        else:
            ucomp['ena'] = 0
radlif
Мастер
Сообщения: 379
Зарегистрирован: 24 сен 2019, 20:14
Репутация: 7
Контактная информация:

Re: .axisrc

Сообщение radlif »

nkp писал(а): postgui.hal разумеется нужно прописать пины таймера
У себя нашёл только custom_postgui.hal но при добавление туда пинов прога не запускается.
А так в интерфейсе как надо отображаются нули)
radlif
Мастер
Сообщения: 379
Зарегистрирован: 24 сен 2019, 20:14
Репутация: 7
Контактная информация:

Re: .axisrc

Сообщение radlif »

nkp писал(а): 20 янв 2021, 13:02 https://www.youtube.com/watch?v=ZBl9GlB1O9E
ММ а откуда эта боковая панелька?)
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: .axisrc

Сообщение Сергей Саныч »

radlif писал(а): ММ а откуда эта боковая панелька?)
http://linuxcnc.org/docs/2.8/html/gui/pyvcp.html
Чудес не бывает. Бывают фокусы.
radlif
Мастер
Сообщения: 379
Зарегистрирован: 24 сен 2019, 20:14
Репутация: 7
Контактная информация:

Re: .axisrc

Сообщение radlif »

del
Последний раз редактировалось radlif 21 янв 2021, 00:58, всего редактировалось 1 раз.
radlif
Мастер
Сообщения: 379
Зарегистрирован: 24 сен 2019, 20:14
Репутация: 7
Контактная информация:

Re: .axisrc

Сообщение radlif »

nkp писал(а): 20 янв 2021, 13:02
(для просмотра содержимого нажмите на ссылку)
https://www.youtube.com/watch?v=ZBl9GlB1O9E

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

if hal_present == 1 :
    ucomp = hal.component("axisui.user")
    ucomp.newpin('btn1',   hal.HAL_BIT, hal.HAL_IN)
    ucomp.newpin('btn2',   hal.HAL_BIT, hal.HAL_IN)
    ucomp.newpin('ena' ,   hal.HAL_BIT, hal.HAL_IO)
    ucomp.newpin('iinc',   hal.HAL_S32, hal.HAL_IN)
    ucomp.ready()  


def user_live_update():

    global increments 
    if (ucomp['iinc'] < len(increments)) :
        if ucomp.btn1:
            if (ucomp['ena'] == 0) : 
                ucomp['iinc'] += 1
                root_window.call(widgets.jogincr._w, "select", ucomp['iinc'])                
                ucomp['ena'] = 1
        else:
            ucomp['ena'] = 0
            
    if (ucomp['iinc'] > 0 ) :                
        if ucomp.btn2:
            if (ucomp['ena'] == 0) : 
                ucomp['iinc'] -= 1
                root_window.call(widgets.jogincr._w, "select", ucomp['iinc'])                
                ucomp['ena'] = 1
        else:
            ucomp['ena'] = 0
Что у вас на кнопках в виджете прописано?)
radlif
Мастер
Сообщения: 379
Зарегистрирован: 24 сен 2019, 20:14
Репутация: 7
Контактная информация:

Re: .axisrc

Сообщение radlif »

Вернее даже в хал
nau
Новичок
Сообщения: 33
Зарегистрирован: 02 фев 2020, 11:10
Репутация: 11
Настоящее имя: Антон
Откуда: Алматы
Контактная информация:

Re: .axisrc

Сообщение nau »

radlif писал(а): 20 янв 2021, 17:48 У себя нашёл только custom_postgui.hal но при добавление туда пинов прога не запускается.
А так в интерфейсе как надо отображаются нули)
в .ini файле должно быть все прописано
[HAL]
HALUI = halui
HALFILE = luma.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: .axisrc

Сообщение nkp »

подправленный код viewtopic.php?p=598552#p598552

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

if hal_present == 1 :
    ucomp = hal.component("axisui.user")
    ucomp.newpin('btn1',   hal.HAL_BIT, hal.HAL_IN)
    ucomp.newpin('btn2',   hal.HAL_BIT, hal.HAL_IN)
    ucomp.newpin('ena' ,   hal.HAL_BIT, hal.HAL_IO)
    ucomp.newpin('iinc',   hal.HAL_S32, hal.HAL_IN)
    ucomp.ready()  


def user_live_update():

    global increments 
    if (ucomp['iinc'] < len(increments)) :
        if ucomp.btn1:
            if (ucomp['ena'] == 0) : 
                ucomp['iinc'] += 1
                root_window.call(widgets.jogincr._w, "select", ucomp['iinc'])                
                ucomp['ena'] = 1
        else:
            if not ucomp.btn2:        
                ucomp['ena'] = 0
            
    if (ucomp['iinc'] > 0 ) :                
        if ucomp.btn2:
            if (ucomp['ena'] == 0) : 
                ucomp['iinc'] -= 1
                root_window.call(widgets.jogincr._w, "select", ucomp['iinc'])                
                ucomp['ena'] = 1
        else:
            if not ucomp.btn1:        
                ucomp['ena'] = 0
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: .axisrc

Сообщение nkp »

прицепил выбор инкремента к клавишам "N" и "M"

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

def incrplus(d):
    ucomp['btn1'] = 1
    print "nnnn   btn1 = 1"

def rincrplus(d):
    ucomp['btn1'] = 0
    print "nnnn   btn1 = 0"
    
    
def incrminus(d):
    ucomp['btn2'] = 1
    print "mmmm   btn2 = 1"
   
def rincrminus(d):
    ucomp['btn2'] = 0
    print "mmmm   btn2 = 0"


root_window.bind("<KeyPress-n>" ,  incrplus)
root_window.bind("<KeyRelease-n>" ,rincrplus)
root_window.bind("<KeyPress-m>" ,  incrminus)
root_window.bind("<KeyRelease-m>" ,rincrminus)


if hal_present == 1 :
    ucomp = hal.component("axisui.user")
    ucomp.newpin('btn1',   hal.HAL_BIT, hal.HAL_IN)
    ucomp.newpin('btn2',   hal.HAL_BIT, hal.HAL_IN)
    ucomp.newpin('ena' ,   hal.HAL_BIT, hal.HAL_IO)
    ucomp.newpin('iinc',   hal.HAL_S32, hal.HAL_IN)
    ucomp.ready()  


def user_live_update():

    global increments 
    if (ucomp['iinc'] < len(increments)) :
        if ucomp.btn1:
            if (ucomp['ena'] == 0) : 
                ucomp['iinc'] += 1
                root_window.call(widgets.jogincr._w, "select", ucomp['iinc'])                
                ucomp['ena'] = 1
        else:
            if not ucomp.btn2:        
                ucomp['ena'] = 0
            
    if (ucomp['iinc'] > 0 ) :                
        if ucomp.btn2:
            if (ucomp['ena'] == 0) : 
                ucomp['iinc'] -= 1
                root_window.call(widgets.jogincr._w, "select", ucomp['iinc'])                
                ucomp['ena'] = 1
        else:
            if not ucomp.btn1:        
                ucomp['ena'] = 0
llur
Новичок
Сообщения: 12
Зарегистрирован: 13 май 2020, 14:47
Репутация: 0
Настоящее имя: Николай
Контактная информация:

Re: .axisrc

Сообщение llur »

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

Re: .axisrc

Сообщение Serg »

Никак (разве что исходники править).
Можно в gladevcp и то с оговорками.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
llur
Новичок
Сообщения: 12
Зарегистрирован: 13 май 2020, 14:47
Репутация: 0
Настоящее имя: Николай
Контактная информация:

Re: .axisrc

Сообщение llur »

От жеж пичаль то, пичальная.. А может можно как-то дистанционно запустить скрипт определения длинны инструмента (auto tool zero)?
steals_y2k
Мастер
Сообщения: 938
Зарегистрирован: 29 окт 2017, 14:08
Репутация: 60
Настоящее имя: Makc
Откуда: Ярославль
Контактная информация:

Re: .axisrc

Сообщение steals_y2k »

llur писал(а): дистанционно
с беспроводного пульта? с внешней кнопки(вынести на кожух шпинделя, например)? купить китайское реле беспроводное с пультиком(осторожно, помехи!)?
llur
Новичок
Сообщения: 12
Зарегистрирован: 13 май 2020, 14:47
Репутация: 0
Настоящее имя: Николай
Контактная информация:

Re: .axisrc

Сообщение llur »

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

Re: .axisrc

Сообщение Serg »

llur писал(а): А может можно как-то дистанционно запустить скрипт определения длинны инструмента (auto tool zero)?
Смотря что за скрипт...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
llur
Новичок
Сообщения: 12
Зарегистрирован: 13 май 2020, 14:47
Репутация: 0
Настоящее имя: Николай
Контактная информация:

Re: .axisrc

Сообщение llur »

Serg писал(а): Смотря что за скрипт...
Самый простой :
G91
G38.2 Z-18 F300
G1 Z1
G38.2 Z-1 F20
G92 Z19
G90
F100
G0 Z25
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: .axisrc

Сообщение Serg »

Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

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