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

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

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

Сообщение Nick » 08 фев 2013, 11:27

хм... надо попробовать для начала через Gкод. Если поменять параметр, изменится ли смещение (оно может измениться и со следующего кадра)?
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение nkp » 08 фев 2013, 11:40

Nick писал(а):надо попробовать для начала через Gкод. Если поменять параметр, изменится ли смещение (оно может измениться и со следующего кадра)?

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

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

Сообщение Nick » 08 фев 2013, 11:42

nkp писал(а):а что это даст?
как не прерывая программу выполнить какой то код?

Ну для начала надо проверить будет ли он менять отступ, просто он может эти отступы читать только при выполнении G43... если будет - то найдем решение :).
Плюс он может эти параметры вовсе не читать, а только писать - для информации...

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

Не, параметры можно менять на лету (через gкод) - поэтому все будет ок.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение nkp » 08 фев 2013, 12:09

Nick писал(а):просто он может эти отступы читать только при выполнении G43... если будет - то найдем решение

я немного не понимаю - куда ты клонишь ;)
коррекция конечно без ж43 не включиться - ну и что
нам это не мешает - допустим мы работаем - инструмент Т1 - сломался - меняем -меряем- и корректируем параметр
а ж43 и так уже активен (он был активирован при смене-М6 Т1 G43) - и параметр емс учитывает
Nick писал(а):Не, параметры можно менять на лету (через gкод)

ну не факт :)
из ж-кода - в моем понимании - не совсем на лету
код грузится 1 раз - и не предполагает изменений ...
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение Nick » 08 фев 2013, 12:18

Попробовал поменять #5402 через Gкод - сказало "параметр только для чтения :tongue:"
Бум дальше думать...
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение nkp » 08 фев 2013, 12:25

Вот здесь что то о параметрах
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение Lexxa » 08 фев 2013, 12:35

помнится в игре герои была читерская прога, когда значение переменных менялось прямо в ОЗУ. типа денег там много себе наделать можно было и еще что-то. Тут не прокатит такой метод?
Комната залита кровью, я занимаюсь любовью!
Аватара пользователя
Lexxa
Мастер
 
Сообщения: 2608
Зарегистрирован: 16 дек 2011, 16:48
Откуда: ryazan
Репутация: 300
Медальки:
Настоящее имя: Алексей

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

Сообщение vmarkiv » 08 фев 2013, 12:39

Lexxa писал(а):помнится в игре герои была читерская прога, когда значение переменных менялось прямо в ОЗУ. типа денег там много себе наделать можно было и еще что-то. Тут не прокатит такой метод?

Да-да , а на стойке Н33-2м была целая панель корректоров , тоже все на ходу менялось posting.php?mode=quote&f=15&p=55556#
vmarkiv
Мастер
 
Сообщения: 491
Зарегистрирован: 21 янв 2012, 00:23
Откуда: Ивано-Франковск
Репутация: 28

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

Сообщение nkp » 08 фев 2013, 12:54

Старая ветка с подобным вопросом
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение nkp » 01 дек 2013, 12:41

добавил в axis несколько строк,позволяющих вывести в файл интерпретированный код:
Код: Выделить всёРазвернуть
    import subprocess
    nst = ['rs274','-g',f,'-t', tooltable, '>' , '~/.srcngc' ]
    st =' '.join(nst)
    r = subprocess.Popen([st], shell=True)
    r.wait()

"собираем" команду и выводим данные в ~/.srcngc...
что нам это может дать?
теперь у нас есть "линейная развертка" любых о-кодов (подпрограмм и повторений) , сложных кодов , состоящих из нескольких файлов и т.д.
например :
загружаем в емс :
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
#<x-num>  =    4  (количество отверстий в ряду)
#<y-num>  =    4  (количество рядов)
#<x-0>    =    10   (начальная позиция X)
#<y-0>    =    10   (начальная позиция Y)
#<x-step> =    4    (шаг по X)
#<y-step> =    4    (шаг по Y)
#<y-shift> = [#<y-step>/2]
#<x> = #<x-0>
#<y> = #<y-0>
#<y-num_1> = [#<y-num>-1]
#<i> = 0

F800
o100 REPEAT [[#<x-num>*2]-1]
   #<y> = #<y-0>
   #<i> = [[#<i>+1] MOD 2]
   #<y> = [#<y> - #<i>*#<y-shift>]

      o120 IF [#<i> EQ 1]
          #<y-numN> = #<y-num>
      o120 ELSE
          #<y-numN> = #<y-num_1>   
      o120 ENDIF
      o101 REPEAT [#<y-numN>]
         G1 X#<x> Y#<y>
         G1 z-5
         G0 z0
         #<y> = [#<y>+#<y-step>]
      o101 ENDREPEAT
   #<x> = [#<x>+[#<x-step>/2]]
      (DEBUG, i = #<i>,n = #<y-numN> )
o100 ENDREPEAT
M2

и в ~/.srcngc имеем:
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
    1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
    2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
    3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
    4 N..... SET_XY_ROTATION(0.0000)
    5 N..... SET_FEED_REFERENCE(CANON_XYZ)
    6 N..... COMMENT("количество отверстий в ряду")
    7 N..... COMMENT("количество рядов")
    8 N..... COMMENT("начальная позиция X")
    9 N..... COMMENT("начальная позиция Y")
   10 N..... COMMENT("шаг по X")
   11 N..... COMMENT("шаг по Y")
   12 N..... SET_FEED_RATE(800.0000)
   13 N..... STRAIGHT_FEED(10.0000, 8.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   14 N..... STRAIGHT_FEED(10.0000, 8.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   15 N..... STRAIGHT_TRAVERSE(10.0000, 8.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   16 N..... STRAIGHT_FEED(10.0000, 12.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   17 N..... STRAIGHT_FEED(10.0000, 12.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   18 N..... STRAIGHT_TRAVERSE(10.0000, 12.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   19 N..... STRAIGHT_FEED(10.0000, 16.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   20 N..... STRAIGHT_FEED(10.0000, 16.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   21 N..... STRAIGHT_TRAVERSE(10.0000, 16.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   22 N..... STRAIGHT_FEED(10.0000, 20.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   23 N..... STRAIGHT_FEED(10.0000, 20.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   24 N..... STRAIGHT_TRAVERSE(10.0000, 20.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   25 N..... MESSAGE(" i = 1.000000,n = 4.000000 ")
   26 N..... STRAIGHT_FEED(12.0000, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   27 N..... STRAIGHT_FEED(12.0000, 10.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   28 N..... STRAIGHT_TRAVERSE(12.0000, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   29 N..... STRAIGHT_FEED(12.0000, 14.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   30 N..... STRAIGHT_FEED(12.0000, 14.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   31 N..... STRAIGHT_TRAVERSE(12.0000, 14.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   32 N..... STRAIGHT_FEED(12.0000, 18.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   33 N..... STRAIGHT_FEED(12.0000, 18.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   34 N..... STRAIGHT_TRAVERSE(12.0000, 18.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   35 N..... MESSAGE(" i = 0.000000,n = 3.000000 ")
   36 N..... STRAIGHT_FEED(14.0000, 8.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   37 N..... STRAIGHT_FEED(14.0000, 8.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   38 N..... STRAIGHT_TRAVERSE(14.0000, 8.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   39 N..... STRAIGHT_FEED(14.0000, 12.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   40 N..... STRAIGHT_FEED(14.0000, 12.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   41 N..... STRAIGHT_TRAVERSE(14.0000, 12.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   42 N..... STRAIGHT_FEED(14.0000, 16.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   43 N..... STRAIGHT_FEED(14.0000, 16.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   44 N..... STRAIGHT_TRAVERSE(14.0000, 16.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   45 N..... STRAIGHT_FEED(14.0000, 20.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   46 N..... STRAIGHT_FEED(14.0000, 20.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   47 N..... STRAIGHT_TRAVERSE(14.0000, 20.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   48 N..... MESSAGE(" i = 1.000000,n = 4.000000 ")
   49 N..... STRAIGHT_FEED(16.0000, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   50 N..... STRAIGHT_FEED(16.0000, 10.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   51 N..... STRAIGHT_TRAVERSE(16.0000, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   52 N..... STRAIGHT_FEED(16.0000, 14.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   53 N..... STRAIGHT_FEED(16.0000, 14.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   54 N..... STRAIGHT_TRAVERSE(16.0000, 14.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   55 N..... STRAIGHT_FEED(16.0000, 18.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   56 N..... STRAIGHT_FEED(16.0000, 18.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   57 N..... STRAIGHT_TRAVERSE(16.0000, 18.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   58 N..... MESSAGE(" i = 0.000000,n = 3.000000 ")
   59 N..... STRAIGHT_FEED(18.0000, 8.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   60 N..... STRAIGHT_FEED(18.0000, 8.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   61 N..... STRAIGHT_TRAVERSE(18.0000, 8.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   62 N..... STRAIGHT_FEED(18.0000, 12.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   63 N..... STRAIGHT_FEED(18.0000, 12.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   64 N..... STRAIGHT_TRAVERSE(18.0000, 12.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   65 N..... STRAIGHT_FEED(18.0000, 16.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   66 N..... STRAIGHT_FEED(18.0000, 16.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   67 N..... STRAIGHT_TRAVERSE(18.0000, 16.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   68 N..... STRAIGHT_FEED(18.0000, 20.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   69 N..... STRAIGHT_FEED(18.0000, 20.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   70 N..... STRAIGHT_TRAVERSE(18.0000, 20.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   71 N..... MESSAGE(" i = 1.000000,n = 4.000000 ")
   72 N..... STRAIGHT_FEED(20.0000, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   73 N..... STRAIGHT_FEED(20.0000, 10.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   74 N..... STRAIGHT_TRAVERSE(20.0000, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   75 N..... STRAIGHT_FEED(20.0000, 14.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   76 N..... STRAIGHT_FEED(20.0000, 14.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   77 N..... STRAIGHT_TRAVERSE(20.0000, 14.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   78 N..... STRAIGHT_FEED(20.0000, 18.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   79 N..... STRAIGHT_FEED(20.0000, 18.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   80 N..... STRAIGHT_TRAVERSE(20.0000, 18.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   81 N..... MESSAGE(" i = 0.000000,n = 3.000000 ")
   82 N..... STRAIGHT_FEED(22.0000, 8.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   83 N..... STRAIGHT_FEED(22.0000, 8.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   84 N..... STRAIGHT_TRAVERSE(22.0000, 8.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   85 N..... STRAIGHT_FEED(22.0000, 12.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   86 N..... STRAIGHT_FEED(22.0000, 12.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   87 N..... STRAIGHT_TRAVERSE(22.0000, 12.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   88 N..... STRAIGHT_FEED(22.0000, 16.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   89 N..... STRAIGHT_FEED(22.0000, 16.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   90 N..... STRAIGHT_TRAVERSE(22.0000, 16.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   91 N..... STRAIGHT_FEED(22.0000, 20.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   92 N..... STRAIGHT_FEED(22.0000, 20.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   93 N..... STRAIGHT_TRAVERSE(22.0000, 20.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   94 N..... MESSAGE(" i = 1.000000,n = 4.000000 ")
   95 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   96 N..... SET_XY_ROTATION(0.0000)
   97 N..... SET_FEED_MODE(0)
   98 N..... SET_FEED_RATE(0.0000)
   99 N..... STOP_SPINDLE_TURNING()
  100 N..... SET_SPINDLE_MODE(0.0000)
  101 N..... PROGRAM_END()
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение nkp » 01 дек 2013, 13:46

с такими изменениями будет проверять в ini опцию SRCNGC = srcngc.ipr
(если прописана - вывод в указаный файл)
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение nkp » 29 дек 2013, 22:10

Код: Выделить всёРазвернуть
    def ret_line(number):
        f = open(fl, "r")
        lines = f.readlines()
        f.close()
        if number >= 0:
            return lines[number]
   
    def up(event=None):
        commands.task_stop()
        ensure_mode(linuxcnc.MODE_MDI)
        num = int(comp["curent-line"]) - 1
        while num >= 0 :
            commands.send_mdi_command(commands.ret_line(num))
            num -= 1

примерно так мы читаем подготовленый код в файле fl от некоторой строки и до начала.
--------
вот здесь бы сделать вызвов ret_line к примеру 5 раз - не более(5 невыполненых команд)
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение Nick » 29 дек 2013, 22:16

Может так сделать:
Код: Выделить всёРазвернуть
    def ret_line(number, num=1):
        f = open(fl, "r")
        lines = f.readlines()
        f.close()
        if number >= 0:
            lines = lines[number:max(number-num,0)]
            lines.reverse()
            return lines     

Ну и вызывать так:
Код: Выделить всёРазвернуть
lines = commands.ret_line(num,5)
for l in lines :
    commands.send_mdi_command(l)
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение nkp » 29 дек 2013, 22:36

попоробую ,спасибо ...
но тут с mdi какие то метаморфозы происходят :)
вроде бы на простых коротких файлах уже стабильно работает - бац - опять едет куда хочет :hehehe:
такое впечатление - что команды действительно хранятся в буфере , который работает пока по неизвестному алгоритму))
конечно ,используем мы это не по прямому назначению т.с. , но все же))
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение nkp » 29 дек 2013, 23:55

нашел немного связанного с ошибкой:
Код: Выделить всёРазвернуть
    // max number of queued MDI commands
    if (NULL != (inistring = inifile.Find("MDI_QUEUED_COMMANDS", "TASK"))) {
   max_mdi_queued_commands = atoi(inistring);

то есть размер буфера можно устанавливать в ини файле(только нужно выяснить предел))по умолчанию стоит 10
============
заодно тут же :
if (NULL != (inistring = inifile.Find("INTERP_MAX_LEN", "TASK"))) {
if (1 == sscanf(inistring, "%d", &emc_task_interp_max_len))
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение nkp » 30 дек 2013, 10:26

"брал" номер активной строки программы с помощью minmax...
но он работает не для всех случаев:
запоминает максимальное значение и если остановиться в следуюший раз раньше - то номер ошибочный получается...
попробую сбрасывать - но где то на форуме другой вариант проскакивал :thinking:
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение Nick » 30 дек 2013, 10:57

nkp писал(а):"брал" номер активной строки программы с помощью minmax...

А как именно ты его берешь?
через motion.program-line в minmax, чтобы после остановки сохранить номер?
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение nkp » 30 дек 2013, 10:59

Nick писал(а):через motion.program-line в minmax, чтобы после остановки сохранить номер?

точно...
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

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

Сообщение Nick » 30 дек 2013, 11:02

Ну добавь на старт/реверс ресет для minmax и все... вроде должно хватить...
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение nkp » 31 дек 2013, 11:44

вот такой промежуточный итог:
выбрал реверс-движения по одной команде mdi ...
так избавился от нескольких проблем(но не от всех :) ) - таких как переполнение буфера, и еще непонятных наслоений команд :shock:
пока отработка кнопками - потом переведется на атоматическое управление из ладдера...
напомню весь алгоритм:
перед загрузкой в емс файла с кодом (а скорей всего одновременно с загрузкой - "на лету") фотмируется обратный (реверсный код) ...
потом при остановке (имеется в виду замыкание в edm) - все машины стоп,самый полный назад емс стоп, и из файла реверскода берем по одной строке и
используя их как mdi команды отходим (в данном случае до размыкания)
EDM.rar
(5.33 Кб) Скачиваний: 306

вот такое управление процессом:
Код: Выделить всёРазвернуть
#!/usr/bin/python
import hal, linuxcnc
h = hal.component("rev")
h.newpin("stop", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rerev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("curent-line",hal.HAL_FLOAT,hal.HAL_IN)
h.newpin("minmax-reset", hal.HAL_BIT, hal.HAL_OUT)   
h.ready()
c = linuxcnc.command()
s = linuxcnc.stat()
def ret_line(number):
   f = open('/home/nkp/temp_rev.ngc', "r") #here prepared code(revers Gcode)
   lines = f.readlines()
   f.close()
   if number >= 0:
       return lines[number]
   else:
       return lines[0]   
def stop():
   c.abort()
   c.wait_complete()
   global num_curent_line
   num_curent_line = int(h["curent-line"]) - 1

   h["stop"]=0
   print  num_curent_line
def back():
   global num_curent_line
   c.mode(linuxcnc.MODE_MDI)
   c.wait_complete()
   c.mdi(ret_line(num_curent_line))
   print 'comand:',ret_line(num_curent_line), 'curent line:', num_curent_line
   num_curent_line -= 1
   h["minmax-reset"] = 0
   h["rev"]=0
def again_forward():
   h["rerev"]=0
   global num_curent_line
   c.mode(linuxcnc.MODE_AUTO)
   c.wait_complete()
   c.auto(linuxcnc.AUTO_RUN, (num_curent_line+2))
   h["minmax-reset"] = 1
   print  num_curent_line ,'!'
try:
    while 1:   
   if h["stop"]==1:
      stop()
   if h["rev"]==1:
      back()      
   if h["rerev"]==1:
      again_forward()   
except KeyboardInterrupt:
    raise SystemExit
nkp
Мастер
 
Сообщения: 7795
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1421
Медальки:

Пред.След.

Вернуться в LinuxCNC

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

Зарегистрированные пользователи: AlekseySP, Bing [Bot], Google [Bot], ilya37rus, Majestic-12 [Bot], MSN [Bot], Santa2019, UAVpilot, Yandex [bot]

Reputation System ©'