LinuxCNC реверс Gкода

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

LinuxCNC реверс Gкода

Сообщение nkp » 06 дек 2012, 12:44

я все таки не оставляю надежду "научить" емс исполнение программы в реверсном режиме(пусть даже только линейные перемещения и без подпрограмм)
вот такие наработки:
1. по внешнему сигналу останавливаемся:
Код: Выделить всёРазвернуть
   def run_from_line(self,widget):
#      self.c.set_feed_hold(1)
#      self.c.wait_complete()
      self.c.abort()
      self.c.wait_complete()
      print 'task_mode-' , self.s.task_mode,'program_line',self.halcomp["program-line"]

2. получаем номер текущего кадра в переменную(из хал в скрипт)
3. вот тут пока недорешенный вопрос:
Код: Выделить всёРазвернуть
   def run_from_line_re(self,widget):
      self.program_start_line = int(self.halcomp["program-line"]) - 1
      self.c.auto(linuxcnc.AUTO_RUN , self.program_start_line)
      self.c.wait_complete()
      self.c.auto(linuxcnc.AUTO_STEP)

после остановки нужно вернуться в предыдущий кадр и повторять это в цикле до команды
тут загвоздка вот в чем:
насколько я понял - емс может (пока) начать с указанного кадра только в обычном(не пошаговом) режиме
Код: Выделить всёРазвернуть
self.c.auto(linuxcnc.AUTO_RUN , self.program_start_line)

а вот включая пошаговый :
Код: Выделить всёРазвернуть
self.c.auto(linuxcnc.AUTO_STEP)

мы не можем арументом указать требуемый стартовый кадр
(может выйдет и имеющимися средствами обойтись - а может и модуль linuxcnc.so нужно изменять)
какие у кого мнения по самому принципу?

Эта тема была отделена от: MyGUI #532
--Nick
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение Nick » 06 дек 2012, 19:25

А что будет, если написать:
Код: Выделить всёРазвернуть
self.c.auto(linuxcnc.AUTO_STEP,  self.program_start_line) 
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение nkp » 06 дек 2012, 19:44

Nick писал(а):А что будет, если написать:

как и следовало ожидать:
Код: Выделить всёРазвернуть
Traceback (most recent call last):
  File "/home/nkp/emc2-dev-80db2a2/bin/mygui", line 75, in run_from_line_re
    self.c.auto(linuxcnc.AUTO_STEP , self.program_start_line)
TypeError: function takes exactly 1 argument (2 given)
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение nkp » 06 дек 2012, 20:20

в принципе - учитывая потребность в отходе на сравнительно небольшое расстояние при кз (в EDM)
даже такое решение может быть достаточным

естественно вместо кнопок получаем сигнал напряжения на эрозионном промежутке
и "на весь" кадр конечно не нужно отходить - только до устранения кз
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение Nick » 06 дек 2012, 21:35

nkp писал(а):как и следовало ожидать:
TypeError: function takes exactly 1 argument (2 given)

Так функция же одна и та же?!
Можешь целиком ошибку скопировать?

nkp писал(а):в принципе - учитывая потребность в отходе на сравнительно небольшое расстояние при кз (в EDM)
даже такое решение может быть достаточным

Ахренеть! :good: Это медаль!
Ток я не понял, а как ты все это сделал??? По кнопке реверсируется Gкод, и автоматом загружается в MyGUI? Кстати, код целиком реверсируешь и после загрузки есть пройденный путь (который раньше был окончанием траектории)?
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение nkp » 06 дек 2012, 22:00

Nick писал(а):По кнопке реверсируется Gкод, и автоматом загружается в MyGUI

нет ,ничего не грузится
вот примерно так:
Код: Выделить всёРазвернуть
   def run_from_line(self,widget):
      self.c.abort() #  делаем стоп
      self.c.wait_complete() # ждем выполнения (может это лишнее...)
      self.run_from_line_re(self) # вызываем следующую функцию
      print 'task_mode-' , self.s.task_mode,'program_line',self.halcomp["program-line"]  #контроль
   def run_from_line_re(self,widget):
      self.program_start_line = int(self.halcomp["program-line"]) - 1 #вычисляем нужный нам номер кадра (коннект с пином motion.program-line)
      self.c.auto(linuxcnc.AUTO_RUN , self.program_start_line)# начать обработку с кадра  self.program_start_line

вот если бы подправить модуль linuxcnc в плане
Код: Выделить всёРазвернуть
c.auto(linuxcnc.AUTO_STEP,  self.program_start_line) 

то таким образом можно было бы отходить хоть до начала...
найти бы для начала исходники модуля...
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение nkp » 06 дек 2012, 23:48

вот исходники модуля linuxcnc.so
насколько я понимаю - именно в нем сосредоточена большая часть(или весь?) интерфейса емс
знатокам Си:
возможно ли изменение работы в пошаговом режиме с указанием начального кадра
(по аналогии с c.auto(linuxcnc.AUTO_RUN, self.program_start_line) - где
вторым аргументом указываем номер начального кадра(строки)
хочеться иметь команду:
Код: Выделить всёРазвернуть
c.auto(linuxcnc.AUTO_STEP,  self.program_start_line) 

emcmodule.txt
расширение .cc
(73.41 Кб) Скачиваний: 406

наверно вот эта функция:
Код: Выделить всёРазвернуть
static PyObject *emcauto(pyCommandChannel *s, PyObject *o) {
    int fn;
    EMC_TASK_PLAN_RUN run;
    EMC_TASK_PLAN_PAUSE pause;
    EMC_TASK_PLAN_RESUME resume;
    EMC_TASK_PLAN_STEP step;

    if(PyArg_ParseTuple(o, "ii", &fn, &run.line) && fn == LOCAL_AUTO_RUN) {
        run.serial_number = next_serial(s);
        s->c->write(run);
        emcWaitCommandReceived(s->serial, s->s);
    } else {
        PyErr_Clear();
        if(!PyArg_ParseTuple(o, "i", &fn)) return NULL;
        switch(fn) {
        case LOCAL_AUTO_PAUSE:
            pause.serial_number = next_serial(s);
            s->c->write(pause);
            emcWaitCommandReceived(s->serial, s->s);
            break;
        case LOCAL_AUTO_RESUME:
            resume.serial_number = next_serial(s);
            s->c->write(resume);
            emcWaitCommandReceived(s->serial, s->s);
            break;
        case LOCAL_AUTO_STEP:
            step.serial_number = next_serial(s);
            s->c->write(step);
            emcWaitCommandReceived(s->serial, s->s);
            break;
        default:
            PyErr_Format(error, "Unexpected argument '%d' to command.auto", fn);
            return NULL;
        }
    }
    Py_INCREF(Py_None);
    return Py_None;
}
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение UAVpilot » 07 дек 2012, 00:03

по
c.auto(linuxcnc.AUTO_STEP
оно должно "провалится" вот сюда
case LOCAL_AUTO_STEP: ...
Останется только проверить наличие второлго аргумента...
Не понял только что делает PyArg_ParseTuple(...), вроде достаёт соотв. аргументы, надо только почитать как.
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 14613
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3505
Медальки:
Настоящее имя: Сергей

Re: MyGUI

Сообщение nkp » 07 дек 2012, 00:20

PyArg_ParseTuple(...) как я понял конвертирует типы данных из питоновских в сишные...
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение UAVpilot » 07 дек 2012, 00:26

Возможно, я просто не понял эти "i" и "ii", а уже спать охота. :nobeer:
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 14613
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3505
Медальки:
Настоящее имя: Сергей

Re: MyGUI

Сообщение Nick » 07 дек 2012, 11:26

UAVpilot писал(а):Не понял только что делает PyArg_ParseTuple(...), вроде достаёт соотв. аргументы, надо только почитать как.

Она парсит Tuple, в питоне это тип, который может содержать n переменных. ii - по ходу это два интеджера.


Попробуй :
Вместо:

if(!PyArg_ParseTuple(o, "i", &fn)) return NULL;

написать:
Код: Выделить всёРазвернуть
        if(!(PyArg_ParseTuple(o, "ii", &fn, &run.line) ) # если не берется два параметра
        {
                if(!PyArg_ParseTuple(o, "i", &fn)) return NULL# пробуем взять хотя бы  один, если не возьмется - return Null
        }
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение nkp » 08 дек 2012, 13:40

выложу файлы где отходы можно протестировать в axis
функции повесил на кнопки zoom (на видео видно)
принцип простой : командуем начать выполнение с такого то кадра( точнее строки)
из-за этого есть ограничения по структуре программы(ж-кода)
но это решается простым парсером кода

для "попробовать" нужно:
1. заменить "родной" файл axis.py (который лежит /usr/bin) - это в случае с установленным в систему емс (делаем под root, не забывая сохранить оригинальный файл)
2. папку EDM1 положить в папку configs к остальным конфигурационным директориям
то же можно сделать и на установленном емс из исходников(еще проще )
этот примитивный ж-код в архиве (1_re.ngc)
----------------
маленькое отступление:
я стараюсь ставить емс в мужском роде - ведь это контроллер - он
а язык чешеться всегда сказать емс - она :)

--------------
новая папка.rar
(32.34 Кб) Скачиваний: 394
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение nkp » 08 дек 2012, 19:05

сейчас немного подправил - так компактней и без использования пинов хал
теперь внеся такие изменения только в axis.py , получаем отъезды в любой конфигурации:
Код: Выделить всёРазвернуть
###############################################################################################rev
    def zoomin(event=None):
   s.poll()
        c.abort()
   c.wait_complete()
   c.auto(linuxcnc.AUTO_RUN , (s.motion_line-1))

    def zoomout(event=None):
   s.poll()
   c.abort()
   c.wait_complete()
   c.auto(linuxcnc.AUTO_RUN , (s.motion_line+1))
##################################################################################################end_rev
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение nkp » 09 дек 2012, 00:19

Nick писал(а):Попробуй :Вместо: if(!PyArg_ParseTuple(o, "i", &fn)) return NULL;

наверно в этом модуле только исключительно интерфейс "общения " с помощью питона
а основные функции режимов (AUTO_RUN , AUTO_STEP,...) зарыты глубже...
найти бы где это????
там бы уже попытаться прицепить к step номер стартового кадра
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение Nick » 09 дек 2012, 01:32

А что получается, если if поменять?
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение vmarkiv » 09 дек 2012, 12:53

По #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

Kernel message information:
[ 5073.388137] I-pipe: Domain RTAI registered.
[ 5073.388149] RTAI[hal]: <3.8.1> mounted over IPIPE-NOTHREADS 2.6-03.
[ 5073.388154] RTAI[hal]: compiled with gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) .
[ 5073.388220] RTAI[hal]: mounted (IPIPE-NOTHREADS, IMMEDIATE (INTERNAL IRQs DISPATCHED), ISOL_CPUS_MASK: 0).
[ 5073.388226] PIPELINE layers:
[ 5073.388233] fca3de20 9ac15d93 RTAI 200
[ 5073.388238] c085cb20 0 Linux 100
[ 5073.416421] RTAI[malloc]: global heap size = 2097152 bytes, <BSD>.
[ 5073.417283] RTAI[sched]: IMMEDIATE, MP, USER/KERNEL SPACE: <with RTAI OWN KTASKs>, kstacks pool size = 524288 bytes.
[ 5073.417294] RTAI[sched]: hard timer type/freq = APIC/12468720(Hz); default timing: periodic; linear timed lists.
[ 5073.417301] RTAI[sched]: Linux timer freq = 250 (Hz), TimeBase freq = 2992667000 hz.
[ 5073.417307] RTAI[sched]: timer setup = 999 ns, resched latency = 2944 ns.
[ 5073.417440] RTAI[usi]: enabled.
[ 5073.505313] RTAI[math]: loaded.
[ 5073.708346] config string '0x0378'
[ 5076.792568] RTAI[math]: unloaded.
[ 5076.868542] SCHED releases registered named ALIEN RTGLBH
[ 5076.900889] RTAI[malloc]: unloaded.
[ 5077.000047] RTAI[sched]: unloaded (forced hard/soft/hard transitions: traps 0, syscalls 0).
[ 5077.004708] I-pipe: Domain RTAI unregistered.
[ 5077.004785] RTAI[hal]: unmounted.
vmarkiv
Мастер
 
Сообщения: 445
Зарегистрирован: 21 янв 2012, 00:23
Откуда: Ивано-Франковск
Репутация: 14

Re: MyGUI

Сообщение nkp » 09 дек 2012, 13:20

да ,забыл отметить:
если пользуем linuxcnc (а не емс) - то модуль rev.py такой:
Код: Выделить всёРазвернуть
#!/usr/bin/python
import hal, time,linuxcnc
h = hal.component("rev")
h.newpin("rev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rerev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("program-line", hal.HAL_FLOAT, hal.HAL_IN)
h.ready()
c =linuxcnc.command()
def back():
   c.abort()
   c.wait_complete()      
   c.auto(emc.AUTO_RUN , program_start_line)
def again_forward ():
   c.abort()
   c.wait_complete()
   program_start_line = int(program_start_line) + 1
   c.auto(emc.AUTO_RUN , program_start_line)
try:
    while 1:
   program_start_line = int(h["program-line"])-2
   
   if h["rev"]==1:
      back()
      time.sleep(0.1)
      h["rev"]=0
      print program_start_line

except KeyboardInterrupt:
    raise SystemExit

то есть разница в импортируемых модулях(точнее в их названии)
зы лучше попробовать внести изменения как в #545 (всего 8 строк кода) :проще, без привязки к хал,и работает в любой конфигурации
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: MyGUI

Сообщение vmarkiv » 09 дек 2012, 13:26

По #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

Kernel message information:
[ 6986.863061] I-pipe: Domain RTAI registered.
[ 6986.863073] RTAI[hal]: <3.8.1> mounted over IPIPE-NOTHREADS 2.6-03.
[ 6986.863079] RTAI[hal]: compiled with gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) .
[ 6986.863145] RTAI[hal]: mounted (IPIPE-NOTHREADS, IMMEDIATE (INTERNAL IRQs DISPATCHED), ISOL_CPUS_MASK: 0).
[ 6986.863150] PIPELINE layers:
[ 6986.863155] fa3dce20 9ac15d93 RTAI 200
[ 6986.863160] c085cb20 0 Linux 100
[ 6986.896331] RTAI[malloc]: global heap size = 2097152 bytes, <BSD>.
[ 6986.896745] RTAI[sched]: IMMEDIATE, MP, USER/KERNEL SPACE: <with RTAI OWN KTASKs>, kstacks pool size = 524288 bytes.
[ 6986.896757] RTAI[sched]: hard timer type/freq = APIC/12468720(Hz); default timing: periodic; linear timed lists.
[ 6986.896764] RTAI[sched]: Linux timer freq = 250 (Hz), TimeBase freq = 2992667000 hz.
[ 6986.896769] RTAI[sched]: timer setup = 999 ns, resched latency = 2944 ns.
[ 6986.896894] RTAI[usi]: enabled.
[ 6986.986062] RTAI[math]: loaded.
[ 6987.214376] config string '0x0378'
[ 6988.729366] RTAI[math]: unloaded.
[ 6988.791508] SCHED releases registered named ALIEN RTGLBH
[ 6988.820910] RTAI[malloc]: unloaded.
[ 6988.920530] RTAI[sched]: unloaded (forced hard/soft/hard transitions: traps 0, syscalls 0).
[ 6988.924629] I-pipe: Domain RTAI unregistered.
[ 6988.924716] RTAI[hal]: unmounted.
vmarkiv
Мастер
 
Сообщения: 445
Зарегистрирован: 21 янв 2012, 00:23
Откуда: Ивано-Франковск
Репутация: 14

Re: MyGUI

Сообщение vmarkiv » 09 дек 2012, 13:28

файл axis
Вложения
axis.zip
редуктирован
(28.31 Кб) Скачиваний: 362
vmarkiv
Мастер
 
Сообщения: 445
Зарегистрирован: 21 янв 2012, 00:23
Откуда: Ивано-Франковск
Репутация: 14

Re: MyGUI

Сообщение vmarkiv » 09 дек 2012, 13:35

С версией
nkp писал(а):то модуль rev.py такой:
и версией вставки файла из сообщ 545 ошибки такие Print file information:

Can not find -sec LINUXCNC -var NML_FILE -num 1
Can not find -sec EMC -var NML_FILE -num 1
File "rev.py", line 2
import hal, time,linuxcnc
^
IndentationError: unexpected indent
core_stepper.hal:54: python exited without becoming ready
9886
PID TTY STAT TIME COMMAND
Stopping realtime threads
Unloading hal components
vmarkiv
Мастер
 
Сообщения: 445
Зарегистрирован: 21 янв 2012, 00:23
Откуда: Ивано-Франковск
Репутация: 14

След.

Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: 1240, 19bvn58, a_leha, aicT, anthro, Bender, Bing [Bot], Сергей Саныч, evgenymcp, Google [Bot], Homo_erectus, ignv, Ivan91, Majestic-12 [Bot], meruslan, mikehv, Morroc, Nonstopich, Sashalex24, VAT, Yahoo [Bot], Yandex [bot], Фрост

Поделиться

Reputation System ©'