http://cnc-club.ru/wiki/index.php/LinuxCNC_Features
Текущий статус разработки
- Дописать обработки.
- Отловить баги
.
Код: Выделить всё
--- 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]
Код: Выделить всё
<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>Код: Выделить всё
(DEBUG, #<_x>) Смогу только вечером попробовать.Nick писал(а):Может и будет... нужно сделать не дословно, а по смыслу.
Главное, чтобы в 2.5 работали поименованные переменные... можешь сразу проверить выполнить такой Gкод:
.... какие файлы? форма рисуется через glade_vcp, а он похоже использует glade...going писал(а):Nick ты писал, что всё вертится в Гладе .......а выложити пожалуйста уже исправленные файлы Гладе. Для примера. И отличается ли твой файл features.py от того что в git
Интеренет у него есть? Можно по ssh к нему залезть...going писал(а): Но он больше ДОС пользователь. Ездить туда не очень удобно. Поэтому и хочу автоматизировать процесс установки.
У меня оно запускается на "голом" станочном компе, где чтоит только дистрибут с linuxcnc.org и пакет linuxcnc, ну может ещё linuxcnc-dev.going писал(а):Но .... такое впечатление что в Гладе не все есть и не все зависимости удовлетворены.
Например используется библиотека ,которая в зависимостях искейпа, какая не понял просто его установил.
Приведи пример. Так-то параметры в виде словаря можно оформить и запихать туда все, что угодно.Nick писал(а):С другой стороны теряется гибкость - многие параметры задаются параметрами Gкода, выражениями и прочими хитростями.
Перед запуском чего?UAVpilot писал(а):Перед запуском слить все параметры в файлик и скормить его этой утилите (например с помощью скрипта-врапера)
мм... у меня сейчас нет компа с рабочим Features, UAVpilot, можешь сделать на features Gкод простой многозаходной обработки скажем квадратика?aaleksander писал(а):Приведи пример. Так-то параметры в виде словаря можно оформить и запихать туда все, что угодно.
Может сделать интерпретатор команд Г-кода EMC, который будет "разворачивать" программу в набор обычных команд?
перед запуском сторонней утилиты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
Какая-то жоская опечатка в коде.UAVpilot писал(а):Получил вот это:
для этого надо распарсить весь код целиком до места вызова этой утилиты... может можно как-то заставить интерпретатор linuxcnc это все сделать?...UAVpilot писал(а):перед запуском сторонней утилиты
угу... придется разбиратьсяUAVpilot писал(а):Легко! Сделал вот так:
Ну можно сделать враппер, как говорит UAVpilot, который по m100 схавает код, выделит нужное, запихнет в стороннюю библиотеку и пихнет назад ее вывод... и тогда все будут равныНадо определиться, что первично: features или сторонняя библиотека.
Я ровно это и предложил, только про способ вызова не уточнял.Nick писал(а):Хотя! а если сделаем так: в Gкоде делаем вызов сторонней команды через M100, со всеми вытекающими параметрами. Утилита берет на вход файл и место вызова, замеяет его на свой вывод и потом !внимание! говорит linuxcnc обновить Gкод! В итоге за несколько итераций можем получить чистый код без вызовов...
Как думаете, сработает?