я все таки не оставляю надежду "научить" емс исполнение программы в реверсном режиме(пусть даже только линейные перемещения и без подпрограмм)
вот такие наработки:
1. по внешнему сигналу останавливаемся:
после остановки нужно вернуться в предыдущий кадр и повторять это в цикле до команды
тут загвоздка вот в чем:
насколько я понял - емс может (пока) начать с указанного кадра только в обычном(не пошаговом) режиме
мы не можем арументом указать требуемый стартовый кадр
(может выйдет и имеющимися средствами обойтись - а может и модуль linuxcnc.so нужно изменять)
какие у кого мнения по самому принципу?
в принципе - учитывая потребность в отходе на сравнительно небольшое расстояние при кз (в EDM)
даже такое решение может быть достаточным https://www.youtube.com/watch?v=ZP9MvwxHZJA
естественно вместо кнопок получаем сигнал напряжения на эрозионном промежутке
и "на весь" кадр конечно не нужно отходить - только до устранения кз
nkp писал(а):как и следовало ожидать:
TypeError: function takes exactly 1 argument (2 given)
Так функция же одна и та же?!
Можешь целиком ошибку скопировать?
nkp писал(а):в принципе - учитывая потребность в отходе на сравнительно небольшое расстояние при кз (в EDM)
даже такое решение может быть достаточным
Ахренеть! Это медаль!
Ток я не понял, а как ты все это сделал??? По кнопке реверсируется Gкод, и автоматом загружается в MyGUI? Кстати, код целиком реверсируешь и после загрузки есть пройденный путь (который раньше был окончанием траектории)?
вот исходники модуля linuxcnc.so
насколько я понимаю - именно в нем сосредоточена большая часть(или весь?) интерфейса емс
знатокам Си:
возможно ли изменение работы в пошаговом режиме с указанием начального кадра
(по аналогии с c.auto(linuxcnc.AUTO_RUN, self.program_start_line) - где
вторым аргументом указываем номер начального кадра(строки)
хочеться иметь команду:
по
c.auto(linuxcnc.AUTO_STEP
оно должно "провалится" вот сюда
case LOCAL_AUTO_STEP: ...
Останется только проверить наличие второлго аргумента...
Не понял только что делает PyArg_ParseTuple(...), вроде достаёт соотв. аргументы, надо только почитать как.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
if(!(PyArg_ParseTuple(o, "ii", &fn, &run.line) ) # если не берется два параметра
{
if(!PyArg_ParseTuple(o, "i", &fn)) return NULL# пробуем взять хотя бы один, если не возьмется - return Null
}
выложу файлы где отходы можно протестировать в axis
функции повесил на кнопки zoom (на видео видно)
принцип простой : командуем начать выполнение с такого то кадра( точнее строки)
из-за этого есть ограничения по структуре программы(ж-кода)
но это решается простым парсером кода https://www.youtube.com/watch?v=fEMpiFBwznc
для "попробовать" нужно:
1. заменить "родной" файл axis.py (который лежит /usr/bin) - это в случае с установленным в систему емс (делаем под root, не забывая сохранить оригинальный файл)
2. папку EDM1 положить в папку configs к остальным конфигурационным директориям
то же можно сделать и на установленном емс из исходников(еще проще )
этот примитивный ж-код в архиве (1_re.ngc)
---------------- маленькое отступление:
я стараюсь ставить емс в мужском роде - ведь это контроллер - он
а язык чешеться всегда сказать емс - она
--------------
сейчас немного подправил - так компактней и без использования пинов хал
теперь внеся такие изменения только в axis.py , получаем отъезды в любой конфигурации:
Nick писал(а):Попробуй :Вместо: if(!PyArg_ParseTuple(o, "i", &fn)) return NULL;
наверно в этом модуле только исключительно интерфейс "общения " с помощью питона
а основные функции режимов (AUTO_RUN , AUTO_STEP,...) зарыты глубже...
найти бы где это????
там бы уже попытаться прицепить к step номер стартового кадра
По #544 не удается запустить реверс . Ошибки Print file information:
RUN_IN_PLACE=no
LINUXCNC_DIR=
LINUXCNC_BIN_DIR=/usr/bin
LINUXCNC_TCL_DIR=/usr/lib/tcltk/linuxcnc
LINUXCNC_SCRIPT_DIR=
LINUXCNC_RTLIB_DIR=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/share/linuxcnc/tcl/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.5
LINUXCNC - 2.5.1
Machine configuration directory is '/home/cnc/linuxcnc/configs/EDM1'
Machine configuration file is 'Sherline3Axis_mm.ini'
INIFILE=/home/cnc/linuxcnc/configs/EDM1/Sherline3Axis_mm.ini
PARAMETER_FILE=stepper.var
TASK=milltask
HALUI=halui
DISPLAY=axis
Starting LinuxCNC...
Starting LinuxCNC server program: linuxcncsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting LinuxCNC IO program: io
Starting HAL User Interface program: halui
Starting TASK program: milltask
Starting DISPLAY program: axis
Shutting down and cleaning up LinuxCNC...
Killing task linuxcncsvr, PID=5627
Killing task milltask, PID=5678
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Cleanup done
Debug file information:
Can not find -sec MOT -var MOT -num 1
Can not find -sec IO -var IO -num 1
Can not find -sec LINUXCNC -var NML_FILE -num 1
Can not find -sec EMC -var NML_FILE -num 1
rev.py:2: DeprecationWarning: the emc module is deprecated; use the linuxcnc module instead
import hal, time, emc
Traceback (most recent call last):
File "/usr/bin/axis", line 3036, in <module>
setup_grid_menu(grids)
File "/usr/bin/axis", line 3031, in setup_grid_menu
variable="grid_size", command="set_grid_size")
File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 2642, in add_radiobutton
self.add('radiobutton', cnf or kw)
File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 2630, in add
self._options(cnf, kw))
_tkinter.TclError: invalid command name ".menu.view.grid"
5627
PID TTY STAT TIME COMMAND
5678
PID TTY STAT TIME COMMAND
Stopping realtime threads
Unloading hal components
то есть разница в импортируемых модулях(точнее в их названии)
зы лучше попробовать внести изменения как в #545 (всего 8 строк кода) :проще, без привязки к хал,и работает в любой конфигурации
По #545 ошибки Print file information:
RUN_IN_PLACE=no
LINUXCNC_DIR=
LINUXCNC_BIN_DIR=/usr/bin
LINUXCNC_TCL_DIR=/usr/lib/tcltk/linuxcnc
LINUXCNC_SCRIPT_DIR=
LINUXCNC_RTLIB_DIR=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/share/linuxcnc/tcl/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.5
LINUXCNC - 2.5.1
Machine configuration directory is '/home/cnc/linuxcnc/configs/EDM1'
Machine configuration file is 'Sherline3Axis_mm.ini'
INIFILE=/home/cnc/linuxcnc/configs/EDM1/Sherline3Axis_mm.ini
PARAMETER_FILE=stepper.var
TASK=milltask
HALUI=halui
DISPLAY=axis
Starting LinuxCNC...
Starting LinuxCNC server program: linuxcncsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting LinuxCNC IO program: io
Starting HAL User Interface program: halui
Starting TASK program: milltask
Starting DISPLAY program: axis
Shutting down and cleaning up LinuxCNC...
Killing task linuxcncsvr, PID=9069
Killing task milltask, PID=9120
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Cleanup done
Debug file information:
Can not find -sec MOT -var MOT -num 1
Can not find -sec IO -var IO -num 1
Can not find -sec LINUXCNC -var NML_FILE -num 1
Can not find -sec EMC -var NML_FILE -num 1
rev.py:2: DeprecationWarning: the emc module is deprecated; use the linuxcnc module instead
import hal, time, emc
File "/usr/bin/axis", line 1807
s.poll()
^
IndentationError: unindent does not match any outer indentation level
9069
PID TTY STAT TIME COMMAND
9120
PID TTY STAT TIME COMMAND
Stopping realtime threads
Unloading hal components