Страница 17 из 38
LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 22 май 2013, 18:07
Nick
Как некоторые уже заметили я пропал на недельку. И пропадал я не зря. Наконец-то решил сделать достойную замену ngcgui.
LinuxCNC Features это тулкит для создания "мастеров". Точнее это тулкит самих "мастеров". В общем и целом LinuxCNC Features работает схоже с ngcgui, но с некоторыми отличиями. Честно говоря, с ngcgui я до конца так и не разобрался, поэтому это я считаю, что он работает схоже

. (Название Features взято от кнопки в ngcgui - add feature.)
Текущий статус разработки
- Дописать обработки.
- Отловить баги
.
Возможности (для просмотра содержимого нажмите на ссылку)Что может LinuxCNC Features:
- Добавлять features - простые обработки
- Менять их порядок
- Группировать обработки
- Делать линейные и круговые массивы
- Встраиваться в axis LinuxCNC или работать как отдельной приложение
- Просматривать резултьтат в axis в редиме реального времени
- Сохранять шаблоны обработок
Это только пока

.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 18 фев 2014, 22:54
wick3
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 19 фев 2014, 09:04
Nick
хммм.... запакуй всю папку с конфигами и скинь сюда...
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 23 фев 2014, 21:16
Serg
Код: Выделить всё
--- linuxcnc-features/subroutines/get-offsets.ngc.orig 2014-02-23 22:14:22.557585437 +0400
+++ linuxcnc-features/subroutines/get-offsets.ngc 2014-02-23 22:14:36.275723231 +0400
@@ -76,7 +76,7 @@
#<_get_offsets_w> = 0
#<_get_offsets_r> = 0
O<get-offsets> SUB
- O<get-offsets-if> IF [5210 EQ 1] (Add 92 offset) (In #[5201+#5220*20], 5201 because #5220 starts from 1)
+ O<get-offsets-if> IF [#5210 EQ 1] (Add 92 offset) (In #[5201+#5220*20], 5201 because #5220 starts from 1)
#<_get_offsets_x> = [#[5201+#5220*20] + #5201]
#<_get_offsets_y> = [#[5202+#5220*20] + #5212]
#<_get_offsets_z> = [#[5203+#5220*20] + #5213]
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 01 мар 2014, 01:19
going
В версии 2.5.3 файлик /usr/share/glade3/catalogs/hal_python.xml выглядит совсем по другому.
Код: Выделить всё
<glade-catalog name="gladevcp" library="gladepython" supports="libglade,gtkbuilder"
domain="glade-3" depends="gtk+">
<init-function>glade_python_init</init-function>
<glade-widget-classes>
<glade-widget-class name="HAL_HBox" generic-name="hal_hbox" title="HAL_HBox"/>
<glade-widget-class name="HAL_Table" generic-name="hal_table" title="HAL_table"/>
<glade-widget-class name="HAL_ComboBox" generic-name="hal_combobox" title="HAL_ComboBox"/>
<glade-widget-class name="HAL_Button" generic-name="hal_button" title="HAL_Button"/>
<glade-widget-class name="HAL_CheckButton" generic-name="hal_checkbutton" title="HAL_CheckButton"/>
<glade-widget-class name="HAL_SpinButton" generic-name="hal_spinbutton" title="HAL_SpinButton"/>
<glade-widget-class name="HAL_ToggleButton" generic-name="hal_togglebutton" title="HAL_ToggleButton"/>
<glade-widget-class name="HAL_RadioButton" generic-name="hal_radiobutton" title="HAL_RadioButton"/>
<glade-widget-class name="HAL_HScale" generic-name="hal_hscale" title="HAL_HScale"/>
<glade-widget-class name="HAL_VScale" generic-name="hal_vscale" title="HAL_VScale"/>
<glade-widget-class name="HAL_ProgressBar" generic-name="hal_progressbar" title="HAL_ProgressBar"/>
<glade-widget-class name="HAL_LED" generic-name="hal_led" title="HAL LED">
<properties>
<property id="led_blink_rate" optional="True" save-always='True'/>
<property id="pick_color_on" optional="True"/>
<property id="pick_color_off" optional="True"/>
</properties>
</glade-widget-class>
<glade-widget-class name="HAL_Label" generic-name="hal_label" title="HAL Label"/>
<glade-widget-class name="HAL_HBar" generic-name="hal_hbar" title="HAL HBar"/>
<glade-widget-class name="HAL_VBar" generic-name="hal_vbar" title="HAL VBar"/>
<glade-widget-class name="HAL_Gremlin" generic-name="hal_gremlin" title="HAL Gremlin"/>
<glade-widget-class name="HAL_Meter" generic-name="hal_meter" title="HAL Meter"/>
<glade-widget-class name="HAL_Graph" generic-name="hal_graph" title="HAL Graph"/>
<!-- Actions -->
<glade-widget-class name="EMC_Action_ESTOP" generic-name="hal_action_estop" title="EMC Action ESTOP" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_Action_ESTOP_RESET" generic-name="hal_action_estop_reset" title="EMC Action ESTOP RESET" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_Action_ON" generic-name="hal_action_on" title="EMC Action ON" icon-name='gtk-connect'/>
<glade-widget-class name="EMC_Action_OFF" generic-name="hal_action_off" title="EMC Action OFF" icon-name='gtk-disconnect'/>
<glade-widget-class name="EMC_Action_Run" generic-name="hal_action_run" title="EMC Action Run" icon-name='gtk-media-play-ltr'/>
<glade-widget-class name="EMC_Action_Step" generic-name="hal_action_run" title="EMC Action Step" icon-name='gtk-media-next-ltr'/>
<glade-widget-class name="EMC_Action_Pause" generic-name="hal_action_run" title="EMC Action Pause" icon-name='gtk-media-pause'/>
<glade-widget-class name="EMC_Action_Resume" generic-name="hal_action_run" title="EMC Action Resume" icon-name='gtk-media-pause'/>
<glade-widget-class name="EMC_Action_Stop" generic-name="hal_action_stop" title="EMC Action Stop" icon-name='gtk-media-stop'/>
<glade-widget-class name="EMC_Action_MDI" generic-name="hal_action_mdi" title="EMC Action MDI" icon-name='gtk-execute'/>
<glade-widget-class name="EMC_Action_Home" generic-name="hal_action_home" title="EMC Action Home" icon-name='gtk-home'/>
<glade-widget-class name="EMC_Action_Unhome" generic-name="hal_action_unhome" title="EMC Action Unhome" icon-name='gtk-home'/>
<glade-widget-class name="EMC_ToggleAction_ESTOP" generic-name="hal_toggleaction_estop" title="EMC ToggleAction ESTOP" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_ToggleAction_Power" generic-name="hal_toggleaction_power" title="EMC ToggleAction Power" icon-name='gtk-disconnect'/>
<glade-widget-class name="EMC_ToggleAction_Run" generic-name="hal_toggleaction_run" title="EMC ToggleAction Run" icon-name='gtk-media-play-ltr'/>
<glade-widget-class name="EMC_ToggleAction_Stop" generic-name="hal_toggleaction_stop" title="EMC ToggleAction Stop" icon-name='gtk-media-stop'/>
<glade-widget-class name="EMC_ToggleAction_Pause" generic-name="hal_toggleaction_pause" title="EMC ToggleAction Pause" icon-name='gtk-media-pause'/>
<glade-widget-class name="EMC_ToggleAction_MDI" generic-name="hal_toggleaction_mdi" title="EMC ToggleAction MDI" icon-name='gtk-execute'/>
<glade-widget-class name="EMC_RadioAction_ESTOP" generic-name="hal_radioaction_estop" title="EMC RadioAction ESTOP" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_RadioAction_ESTOP_RESET" generic-name="hal_radioaction_estop_reset" title="EMC RadioAction ESTOP RESET" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_RadioAction_ON" generic-name="hal_radioaction_on" title="EMC RadioAction ON" icon-name='gtk-connect'/>
<glade-widget-class name="EMC_RadioAction_OFF" generic-name="hal_radioaction_off" title="EMC RadioAction OFF" icon-name='gtk-disconnect'/>
<glade-widget-class name="EMC_Stat" generic-name="hal_stat" title="EMC Stat" icon-name='gtk-properties' toplevel='yes'/>
<glade-widget-class name="EMC_FileChooserDialog" generic-name="hal_filechooserdialog" title="EMC FileChooserDialog"/>
<glade-widget-class name="EMC_FileChooserButton" generic-name="hal_filechooserbutton" title="EMC FileChooserButton"/>
<glade-widget-class name="EMC_Action_Open" generic-name="hal_action_open" title="EMC Action Open" icon-name='gtk-open'/>
<glade-widget-class name="EMC_Action_Reload" generic-name="hal_action_reload" title="EMC Action Reload" icon-name='gtk-refresh'/>
<glade-widget-class name="EMC_Action_Save" generic-name="hal_action_save" title="EMC Action Save" icon-name='gtk-save'/>
<glade-widget-class name="EMC_Action_SaveAs" generic-name="hal_action_saveas" title="EMC Action Save As" icon-name='gtk-save-as'/>
<glade-widget-class name="EMC_SourceView" generic-name="hal_sourceview" title="EMC SourceView"/>
<glade-widget-class name="EMC_MDIHistory" generic-name="hal_mdihistory" title="EMC MDIHistory"/>
</glade-widget-classes>
<glade-widget-group name="python" title="HAL Python">
<glade-widget-class-ref name="HAL_HBox"/>
<glade-widget-class-ref name="HAL_Table"/>
<glade-widget-class-ref name="HAL_LED"/>
<glade-widget-class-ref name="HAL_ComboBox"/>
<glade-widget-class-ref name="HAL_Button"/>
<glade-widget-class-ref name="HAL_SpinButton"/>
<glade-widget-class-ref name="HAL_CheckButton"/>
<glade-widget-class-ref name="HAL_ToggleButton"/>
<glade-widget-class-ref name="HAL_RadioButton"/>
<glade-widget-class-ref name="HAL_HScale"/>
<glade-widget-class-ref name="HAL_VScale"/>
<glade-widget-class-ref name="HAL_ProgressBar"/>
<glade-widget-class-ref name="HAL_Label"/>
<glade-widget-class-ref name="HAL_HBar"/>
<glade-widget-class-ref name="HAL_VBar"/>
<glade-widget-class-ref name="HAL_Gremlin"/>
<glade-widget-class-ref name="HAL_Meter"/>
<glade-widget-class-ref name="HAL_Graph"/>
<glade-widget-class-ref name="EMC_Stat"/>
<glade-widget-class-ref name="EMC_FileChooserDialog"/>
<glade-widget-class-ref name="EMC_FileChooserButton"/>
<glade-widget-class-ref name="EMC_SourceView"/>
<glade-widget-class-ref name="EMC_MDIHistory"/>
</glade-widget-group>
<glade-widget-group name="python" title="EMC Actions">
<glade-widget-class-ref name="EMC_Action_ESTOP"/>
<glade-widget-class-ref name="EMC_Action_ESTOP_RESET"/>
<glade-widget-class-ref name="EMC_Action_ON"/>
<glade-widget-class-ref name="EMC_Action_OFF"/>
<glade-widget-class-ref name="EMC_Action_Run"/>
<glade-widget-class-ref name="EMC_Action_Step"/>
<glade-widget-class-ref name="EMC_Action_Pause"/>
<glade-widget-class-ref name="EMC_Action_Resume"/>
<glade-widget-class-ref name="EMC_Action_Stop"/>
<glade-widget-class-ref name="EMC_Action_MDI"/>
<glade-widget-class-ref name="EMC_Action_Home"/>
<glade-widget-class-ref name="EMC_Action_Unhome"/>
<glade-widget-class-ref name="EMC_ToggleAction_ESTOP"/>
<glade-widget-class-ref name="EMC_ToggleAction_Power"/>
<glade-widget-class-ref name="EMC_ToggleAction_Run"/>
<glade-widget-class-ref name="EMC_ToggleAction_Stop"/>
<glade-widget-class-ref name="EMC_ToggleAction_Pause"/>
<glade-widget-class-ref name="EMC_ToggleAction_MDI"/>
<glade-widget-class-ref name="EMC_RadioAction_ESTOP"/>
<glade-widget-class-ref name="EMC_RadioAction_ESTOP_RESET"/>
<glade-widget-class-ref name="EMC_RadioAction_ON"/>
<glade-widget-class-ref name="EMC_RadioAction_OFF"/>
<glade-widget-class-ref name="EMC_Action_Open"/>
<glade-widget-class-ref name="EMC_Action_Reload"/>
<glade-widget-class-ref name="EMC_Action_Save"/>
<glade-widget-class-ref name="EMC_Action_SaveAs"/>
</glade-widget-group>
</glade-catalog>
Значит только для 2.6.0 будет работать?
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 03 мар 2014, 09:19
Nick
Может и будет... нужно сделать не дословно, а по смыслу.
Главное, чтобы в 2.5 работали поименованные переменные... можешь сразу проверить выполнить такой Gкод:
Должно вывести текущую координату по X.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 03 мар 2014, 10:36
going
Nick писал(а):Может и будет... нужно сделать не дословно, а по смыслу.
Главное, чтобы в 2.5 работали поименованные переменные... можешь сразу проверить выполнить такой Gкод:
Смогу только вечером попробовать.
Перечитал тему в выходные. Проникся.
#255 Сообщение Nick » 26 июл 2013, 23:07
Пока вы все тут думаете, запостил тему на chipmaker, будем еще народ подтягивать
http://www.chipmaker.ru/topic/114602/pa ... p__1858663
Решил написать скрипт установки. Дошёл до исправления файлов Гладе, но .... пока ошибки при запуске features. В теме раньше они уже опубликованы.
UAVpilot частично их исправил. Я применил его патчи. Но .... такое впечатление что в Гладе не все есть и не все зависимости удовлетворены.
Например используется библиотека ,которая в зависимостях искейпа, какая не понял просто его установил.
Nick ты писал, что всё вертится в Гладе .......а выложити пожалуйста уже исправленные файлы Гладе. Для примера. И отличается ли твой файл features.py от того что в git
У меня товарищ из другого города попросил установить LinuxCNC. У него фрезер 3х. Работает. Радуется. Увидел видео на cipmaker.ru и загорелся.
Пожалуйста реальный тестер с телефонной обратной связью. Но он больше ДОС пользователь. Ездить туда не очень удобно. Поэтому и хочу автоматизировать процесс установки.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 03 мар 2014, 11:10
Nick
going писал(а):Nick ты писал, что всё вертится в Гладе .......а выложити пожалуйста уже исправленные файлы Гладе. Для примера. И отличается ли твой файл features.py от того что в git
.... какие файлы? форма рисуется через glade_vcp, а он похоже использует glade...
Нет не отличается - я git использую как хранилище и файлообменник, обычно сразу делаю push

поэтому некоторые верисии могту быть не рабочими.
going писал(а): Но он больше ДОС пользователь. Ездить туда не очень удобно. Поэтому и хочу автоматизировать процесс установки.
Интеренет у него есть? Можно по ssh к нему залезть...
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 03 мар 2014, 15:06
Serg
going писал(а):Но .... такое впечатление что в Гладе не все есть и не все зависимости удовлетворены.
Например используется библиотека ,которая в зависимостях искейпа, какая не понял просто его установил.
У меня оно запускается на "голом" станочном компе, где чтоит только дистрибут с linuxcnc.org и пакет linuxcnc, ну может ещё linuxcnc-dev.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 14:21
Nick
Вопрос!
Как можно интегрировать сторонние инструменты в features. Скажем ту же утилитку
aaleksanderа
Идея небольшой утилитки #1.
С одной стороны просто - запускаем утилитку с нужными параметрами и потом тупо вставляем готовый Gкод.
С другой стороны теряется гибкость - многие параметры задаются параметрами Gкода, выражениями и прочими хитростями. Т.е. например использовать шаг заглубления из настроек обработки не выйдет. Т.к. он задается в Gкоде и чтобы его получить надо интерпретировать Gкод до точки вызова сторонней процедуры...
Может у кого-нибудь есть идеи?
Это я к тому, что очень не хочется делать заглубление по спирале на Gкоде - там слишком все хитро получается... а заглубление по спирали нужно...
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 14:58
Serg
Перед запуском слить все параметры в файлик и скормить его этой утилите (например с помощью скрипта-врапера). Соотв. утилита должна позволять задавать свои параметры неинтеррактивным путём.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 15:12
aaleksander
Nick писал(а):С другой стороны теряется гибкость - многие параметры задаются параметрами Gкода, выражениями и прочими хитростями.
Приведи пример. Так-то параметры в виде словаря можно оформить и запихать туда все, что угодно.
Придется, все-таки интерпретатор делать.
Как вариант: берем траекторию (как там она у тебя задается), вызываем функцию "Спираль", которой указываем "вот тебе траектория, пересчитай ее так, чтобы в конце заглубление составило столько-то", получаем G-код, который снова можем пихать в Features (в тот-же массив с глубиной, если у спирали несколько витков).
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 15:20
Nick
UAVpilot писал(а):Перед запуском слить все параметры в файлик и скормить его этой утилите (например с помощью скрипта-врапера)
Перед запуском чего?
просто параметр может иметь вид, скажем:
[#<depth> + 24]
aaleksander писал(а):Приведи пример. Так-то параметры в виде словаря можно оформить и запихать туда все, что угодно.
Может сделать интерпретатор команд Г-кода EMC, который будет "разворачивать" программу в набор обычных команд?
мм... у меня сейчас нет компа с рабочим Features,
UAVpilot, можешь сделать на features Gкод простой многозаходной обработки скажем квадратика?
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 15:24
aaleksander
Я там свой пост чуть дополнил, перечитай.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 15:47
aaleksander
Я что-то сразу на спираль зациклился. А тут же идея пошире.
Если Features будет "рулить" сторонней утилитой, то не вижу проблем. Утилита просто отдает G-код и делай с ним дальше, что хочешь.
Основная проблема - интерфейс для этой утилиты. Тупо брать из файла готовый шаблон?
Да! У тебя просто появится новая фишка (моя библиотека, например), у которой будет один параметр - имя py-файла.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 15:57
Serg
Nick писал(а):Перед запуском чего?
просто параметр может иметь вид, скажем:
[#<depth> + 24]
перед запуском сторонней утилиты
Nick писал(а):мм... у меня сейчас нет компа с рабочим Features, UAVpilot, можешь сделать на features Gкод простой многозаходной обработки скажем квадратика?
Легко! Сделал вот так:
Получил вот это:
Код: Выделить всё
Traceback (most recent call last):
File "./features.py", line 905, in refresh
f.write(self.to_gcode())
File "./features.py", line 887, in to_gcode
g,d = self.refresh_recursive(iter)
File "./features.py", line 866, in refresh_recursive
gcode += f.process(f.attr["call"])
File "./features.py", line 328, in process
s = re.sub(r"(?ims)(<exec>(.*?)</exec>)", exec_callback, s)
File "/usr/lib/python2.7/re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "./features.py", line 310, in exec_callback
exec(s) in {"self":self}
File "<string>", line 4
g10 += "R[%s/2]"%(self.get_param_value("d")) else ""
^
SyntaxError: invalid syntax
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 16:00
aaleksander
UAVpilot писал(а):Получил вот это:
Какая-то жоская опечатка в коде.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 16:04
Nick
UAVpilot писал(а):перед запуском сторонней утилиты
для этого надо распарсить весь код целиком до места вызова этой утилиты... может можно как-то заставить интерпретатор linuxcnc это все сделать?...
вроде кажется все реальным, кроме того, что утилита будет менять Gкод...
Хотя! а если сделаем так: в Gкоде делаем вызов сторонней команды через M100, со всеми вытекающими параметрами. Утилита берет на вход файл и место вызова, замеяет его на свой вывод и потом !внимание! говорит linuxcnc обновить Gкод! В итоге за несколько итераций можем получить чистый код без вызовов...
Как думаете, сработает?
UAVpilot писал(а):Легко! Сделал вот так:
угу... придется разбираться

Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 16:09
aaleksander
Надо определиться, что первично: features или сторонняя библиотека.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 16:14
Nick
Надо определиться, что первично: features или сторонняя библиотека.
Ну можно сделать враппер, как говорит UAVpilot, который по m100 схавает код, выделит нужное, запихнет в стороннюю библиотеку и пихнет назад ее вывод... и тогда все будут равны

Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2014, 17:29
Serg
Nick писал(а):Хотя! а если сделаем так: в Gкоде делаем вызов сторонней команды через M100, со всеми вытекающими параметрами. Утилита берет на вход файл и место вызова, замеяет его на свой вывод и потом !внимание! говорит linuxcnc обновить Gкод! В итоге за несколько итераций можем получить чистый код без вызовов...
Как думаете, сработает?
Я ровно это и предложил, только про способ вызова не уточнял.
