интерпретатор linuxcnc

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

интерпретатор linuxcnc

Сообщение nkp »

...тут соседняя тема натолкнула на мысль(а как впоследствии оказалось - уже немного обсуждалось) - использовать вывод интерпретатора для рестарта с любой точки траектории в программах с циклами и о-кодами, для реверса Gкода , ... .
Сразу оговорюсь - решение пока не найдено, поэтому данная тема для попытки немного глубже разобраться в процессах ;)
Интерпретатор в емс (называется RS274/NGC) - это программа, получающая на вход строки с G-кодом (из файла или построчно с клавиатуры) ,
и преобразующая их в команды (canonical machining functions) для планировщика траектории , контроллера IO : Интерпретатор RS274/NGC был разработан NIST при создании проекта ЕМС как отдельный модуль .
rs274ngc.tar
(620 КБ) 544 скачивания
Поэтому ,как правило,может работать сомостоятельно (“Stand-Alone Interpreter”(SAI)) на разных платформах: В системе с установленным емс в терминале пишем :
rs274
видим приглашение ввести вариант требуемого продолжения: вводим "1" (непосредственная интерпретация)
программа требует путь к файлу инструментов (скармливаем ей путь из любого конфига емс)
и вот :
READ =>
предложение ввести любую строку с Gкодом...
при безошибочном вводе тут же происходит интерпретация : при чтении из файла :
указываем исходный файл с прграммой и путь для вывода (также путь с файлу инструментов): получили выход:

Код: Выделить всё

    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..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   11 N..... SET_FEED_RATE(300.0000)
   12 N..... COMMENT("interpreter: distance mode changed to incremental")
   13 N..... MESSAGE(" 0.000000 , 0.000000 ")
   14 N..... STRAIGHT_FEED(0.0000, 0.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   15 N..... STRAIGHT_FEED(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   16 N..... STRAIGHT_FEED(0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   17 N..... STRAIGHT_FEED(0.0000, 1.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   18 N..... STRAIGHT_FEED(0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   19 N..... STRAIGHT_FEED(0.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   20 N..... STRAIGHT_FEED(0.0000, 2.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   21 N..... STRAIGHT_FEED(0.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   22 N..... STRAIGHT_FEED(0.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   23 N..... STRAIGHT_FEED(0.0000, 3.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   24 N..... STRAIGHT_FEED(0.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   25 N..... STRAIGHT_FEED(0.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   26 N..... STRAIGHT_FEED(0.0000, 4.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   27 N..... STRAIGHT_FEED(0.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   28 N..... STRAIGHT_FEED(0.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   29 N..... STRAIGHT_FEED(0.0000, 5.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   30 N..... STRAIGHT_FEED(0.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   31 N..... STRAIGHT_FEED(0.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   32 N..... STRAIGHT_FEED(0.5000, 4.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   33 N..... STRAIGHT_FEED(0.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   34 N..... STRAIGHT_FEED(0.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   35 N..... STRAIGHT_FEED(0.5000, 3.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   36 N..... STRAIGHT_FEED(0.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   37 N..... STRAIGHT_FEED(0.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   38 N..... STRAIGHT_FEED(0.5000, 2.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   39 N..... STRAIGHT_FEED(0.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   40 N..... STRAIGHT_FEED(0.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   41 N..... STRAIGHT_FEED(0.5000, 1.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   42 N..... STRAIGHT_FEED(0.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   43 N..... STRAIGHT_FEED(0.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   44 N..... STRAIGHT_FEED(0.5000, 0.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   45 N..... STRAIGHT_FEED(0.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   46 N..... STRAIGHT_FEED(1.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   47 N..... MESSAGE(" 1.000000 , 0.000000 ")
   48 N..... STRAIGHT_FEED(1.0000, 0.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   49 N..... STRAIGHT_FEED(1.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   50 N..... STRAIGHT_FEED(1.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   51 N..... STRAIGHT_FEED(1.0000, 1.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   52 N..... STRAIGHT_FEED(1.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   53 N..... STRAIGHT_FEED(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   54 N..... STRAIGHT_FEED(1.0000, 2.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   55 N..... STRAIGHT_FEED(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   56 N..... STRAIGHT_FEED(1.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   57 N..... STRAIGHT_FEED(1.0000, 3.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   58 N..... STRAIGHT_FEED(1.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   59 N..... STRAIGHT_FEED(1.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   60 N..... STRAIGHT_FEED(1.0000, 4.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   61 N..... STRAIGHT_FEED(1.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   62 N..... STRAIGHT_FEED(1.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   63 N..... STRAIGHT_FEED(1.0000, 5.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   64 N..... STRAIGHT_FEED(1.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   65 N..... STRAIGHT_FEED(1.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   66 N..... STRAIGHT_FEED(1.5000, 4.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   67 N..... STRAIGHT_FEED(1.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   68 N..... STRAIGHT_FEED(1.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   69 N..... STRAIGHT_FEED(1.5000, 3.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   70 N..... STRAIGHT_FEED(1.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   71 N..... STRAIGHT_FEED(1.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   72 N..... STRAIGHT_FEED(1.5000, 2.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   73 N..... STRAIGHT_FEED(1.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   74 N..... STRAIGHT_FEED(1.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   75 N..... STRAIGHT_FEED(1.5000, 1.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   76 N..... STRAIGHT_FEED(1.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   77 N..... STRAIGHT_FEED(1.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   78 N..... STRAIGHT_FEED(1.5000, 0.5000, -5.0000, 0.0000, 0.0000, 0.0000)
   79 N..... STRAIGHT_FEED(1.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
   80 N..... STRAIGHT_FEED(2.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   81 N..... MESSAGE(" 2.000000 , 0.000000 ")
   82 N..... STRAIGHT_FEED(2.0000, 0.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   83 N..... STRAIGHT_FEED(2.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   84 N..... STRAIGHT_FEED(2.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   85 N..... STRAIGHT_FEED(2.0000, 1.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   86 N..... STRAIGHT_FEED(2.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   87 N..... STRAIGHT_FEED(2.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   88 N..... STRAIGHT_FEED(2.0000, 2.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   89 N..... STRAIGHT_FEED(2.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   90 N..... STRAIGHT_FEED(2.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   91 N..... STRAIGHT_FEED(2.0000, 3.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   92 N..... STRAIGHT_FEED(2.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   93 N..... STRAIGHT_FEED(2.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   94 N..... STRAIGHT_FEED(2.0000, 4.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   95 N..... STRAIGHT_FEED(2.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   96 N..... STRAIGHT_FEED(2.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   97 N..... STRAIGHT_FEED(2.0000, 5.0000, -5.0000, 0.0000, 0.0000, 0.0000)
   98 N..... STRAIGHT_FEED(2.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
   99 N..... STRAIGHT_FEED(2.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  100 N..... STRAIGHT_FEED(2.5000, 4.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  101 N..... STRAIGHT_FEED(2.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  102 N..... STRAIGHT_FEED(2.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  103 N..... STRAIGHT_FEED(2.5000, 3.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  104 N..... STRAIGHT_FEED(2.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  105 N..... STRAIGHT_FEED(2.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  106 N..... STRAIGHT_FEED(2.5000, 2.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  107 N..... STRAIGHT_FEED(2.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  108 N..... STRAIGHT_FEED(2.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  109 N..... STRAIGHT_FEED(2.5000, 1.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  110 N..... STRAIGHT_FEED(2.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  111 N..... STRAIGHT_FEED(2.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  112 N..... STRAIGHT_FEED(2.5000, 0.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  113 N..... STRAIGHT_FEED(2.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  114 N..... STRAIGHT_FEED(3.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  115 N..... MESSAGE(" 3.000000 , 0.000000 ")
  116 N..... STRAIGHT_FEED(3.0000, 0.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  117 N..... STRAIGHT_FEED(3.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  118 N..... STRAIGHT_FEED(3.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  119 N..... STRAIGHT_FEED(3.0000, 1.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  120 N..... STRAIGHT_FEED(3.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  121 N..... STRAIGHT_FEED(3.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  122 N..... STRAIGHT_FEED(3.0000, 2.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  123 N..... STRAIGHT_FEED(3.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  124 N..... STRAIGHT_FEED(3.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  125 N..... STRAIGHT_FEED(3.0000, 3.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  126 N..... STRAIGHT_FEED(3.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  127 N..... STRAIGHT_FEED(3.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  128 N..... STRAIGHT_FEED(3.0000, 4.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  129 N..... STRAIGHT_FEED(3.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  130 N..... STRAIGHT_FEED(3.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  131 N..... STRAIGHT_FEED(3.0000, 5.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  132 N..... STRAIGHT_FEED(3.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  133 N..... STRAIGHT_FEED(3.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  134 N..... STRAIGHT_FEED(3.5000, 4.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  135 N..... STRAIGHT_FEED(3.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  136 N..... STRAIGHT_FEED(3.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  137 N..... STRAIGHT_FEED(3.5000, 3.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  138 N..... STRAIGHT_FEED(3.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  139 N..... STRAIGHT_FEED(3.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  140 N..... STRAIGHT_FEED(3.5000, 2.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  141 N..... STRAIGHT_FEED(3.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  142 N..... STRAIGHT_FEED(3.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  143 N..... STRAIGHT_FEED(3.5000, 1.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  144 N..... STRAIGHT_FEED(3.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  145 N..... STRAIGHT_FEED(3.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  146 N..... STRAIGHT_FEED(3.5000, 0.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  147 N..... STRAIGHT_FEED(3.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  148 N..... STRAIGHT_FEED(4.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  149 N..... MESSAGE(" 4.000000 , 0.000000 ")
  150 N..... STRAIGHT_FEED(4.0000, 0.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  151 N..... STRAIGHT_FEED(4.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  152 N..... STRAIGHT_FEED(4.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  153 N..... STRAIGHT_FEED(4.0000, 1.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  154 N..... STRAIGHT_FEED(4.0000, 1.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  155 N..... STRAIGHT_FEED(4.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  156 N..... STRAIGHT_FEED(4.0000, 2.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  157 N..... STRAIGHT_FEED(4.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  158 N..... STRAIGHT_FEED(4.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  159 N..... STRAIGHT_FEED(4.0000, 3.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  160 N..... STRAIGHT_FEED(4.0000, 3.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  161 N..... STRAIGHT_FEED(4.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  162 N..... STRAIGHT_FEED(4.0000, 4.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  163 N..... STRAIGHT_FEED(4.0000, 4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  164 N..... STRAIGHT_FEED(4.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  165 N..... STRAIGHT_FEED(4.0000, 5.0000, -5.0000, 0.0000, 0.0000, 0.0000)
  166 N..... STRAIGHT_FEED(4.0000, 5.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  167 N..... STRAIGHT_FEED(4.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  168 N..... STRAIGHT_FEED(4.5000, 4.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  169 N..... STRAIGHT_FEED(4.5000, 4.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  170 N..... STRAIGHT_FEED(4.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  171 N..... STRAIGHT_FEED(4.5000, 3.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  172 N..... STRAIGHT_FEED(4.5000, 3.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  173 N..... STRAIGHT_FEED(4.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  174 N..... STRAIGHT_FEED(4.5000, 2.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  175 N..... STRAIGHT_FEED(4.5000, 2.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  176 N..... STRAIGHT_FEED(4.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  177 N..... STRAIGHT_FEED(4.5000, 1.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  178 N..... STRAIGHT_FEED(4.5000, 1.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  179 N..... STRAIGHT_FEED(4.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  180 N..... STRAIGHT_FEED(4.5000, 0.5000, -5.0000, 0.0000, 0.0000, 0.0000)
  181 N..... STRAIGHT_FEED(4.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000)
  182 N..... STRAIGHT_FEED(5.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  183 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  184 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
  185 N..... SET_XY_ROTATION(0.0000)
  186 N..... SET_FEED_MODE(0)
  187 N..... SET_FEED_RATE(0.0000)
  188 N..... STOP_SPINDLE_TURNING()
  189 N..... SET_SPINDLE_MODE(0.0000)
  190 N..... PROGRAM_END()
исходным был код :

Код: Выделить всё

#<x-num>  = 5   (количество отверстий в ряду)
#<y-num>  = 6   (количество рядов)
#<x-step> = 1    (шаг по X)
#<y-step> = 1    (шаг по Y)
G92 X0 Y0
F300
G91
o100 REPEAT [#<x-num>]
(DEBUG, #5420 , #5421 )
	#<y-num1> = #<y-num>
		o101 REPEAT [#<y-num1>]
			G1 z-5
			G1 z5
			o121 IF [#<y-num1> NE 1]
				G1  Y#<y-step>
				#<y-num1>= [#<y-num1> - 1]
			o121 ENDIF 
		o101 ENDREPEAT

	G1 X[#<x-step>/2] Y-[#<y-step>/2]
	#<y-num2> = #<y-num>
		o102 REPEAT [#<y-num2>-1]
			G1 z-5
			G1 z5
			o122 IF [#<y-num2> NE 2]
				G1  Y-[#<y-step>]
				#<y-num2>= [#<y-num2> - 1]
			o122 ENDIF 
		o102 ENDREPEAT 
	G1 X[#<x-step>/2] Y-[#<y-step>/2]

o100 ENDREPEAT
G92.1	
M2
список опций:

Код: Выделить всё

rs274 [-p interp.so] [-t tool.tbl] [-v var-file.var] [-n 0|1|2]
          [-b] [-s] [-g] [input file [output file]]

    -p: Specify the pluggable interpreter to use
    -t: Specify the .tbl (tool table) file to use
    -v: Specify the .var (parameter) file to use
    -n: Specify the continue mode:
           0: continue
           1: enter MDI mode
           2: stop (default)
    -b: Toggle the 'block delete' flag (default: OFF)
    -s: Toggle the 'print stack' flag (default: OFF)
    -g: Toggle the 'go (batch mode)' flag (default: OFF)
    -i: specify the .ini file (default: no ini file)
    -T: call task_init()
    -l: specify the log_level (default: -1)
документация:
RS274NGCVersion3.pdf
(1.04 МБ) 1973 скачивания
Последний раз редактировалось nkp 30 ноя 2013, 20:48, всего редактировалось 3 раза.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение nkp »

программа , написаная в относительных координатах интерпретируетя все равно в абсолютных ...
все циклы , вызовы подпрограмм, другие о-коды "раскладываются" на непосредственные команды формирования траектории...
осталось дело за малым ;) :
научиться скармливать емс напрямую эти canonical machining functions)))
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение Nick »

А как планируешь все это дальше использовать?
Реверснуть до конца код всеравно не выйдет - тот же S1000 не получится... или если будет g38.2...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение nkp »

Nick писал(а):А как планируешь все это дальше использовать?
пока четкого видения нет :thinking:
но подразобраться не помешает...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение nkp »

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

Re: интерпретатор linuxcnc

Сообщение Nick »

Код: Выделить всё

S10 
G1 X10 
S1000 
G1 X100 
Если инвертировать, даже в простых командах, получишь G1 X10 на скорости S1000
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение nkp »

Nick писал(а):Если инвертировать, даже в простых командах, получишь G1 X10 на скорости S1000
S=>F
;) так это если тупо© переписать файл вверх ногами)))
а мы же можем добавить нашему скрипту немного интелекта...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение nkp »

в продолжение дискуса об обработке больших файлов в емс...
создал файл больше миллиона строк (17Мб)
запустил его в обработку интерпретатору...
после 38с обработка закончилась , но в выходном файле оказалось только 325000 строк (как бы обработка не закончилась)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение Nick »

попробуй ему поставить доугой loglevel, может что скажет...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение nkp »

самые древние исходники емс (по моему 1.1)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение Nick »

О, какая инетересная штука там есть:
Вложения
emc-win32.png (4852 просмотра) <a class='original' href='./download/file.php?id=18887&mode=view' target=_blank>Загрузить оригинал (43.18 КБ)</a>
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение Сергей Саныч »

Что это??? Книжку по телевизору читают?
Это ж все-таки не "Война и мир", а техдокументация!
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение Nick »

Мне показалось, или самый первый слушатель в трансляции - женщина?
MIX
Кандидат
Сообщения: 89
Зарегистрирован: 23 авг 2015, 09:48
Репутация: 34
Настоящее имя: Михаил
Откуда: С. Петербург
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение MIX »

Да. Все это интересно конечно, только не покидает ощущение, что это все какая-то заглушка над древней технологией.
G - коды по сути не слишком удобны для современных станков, как мне кажется. И являются "лишней" прослойкой. Это особенно хорошо видно при программировании роботов (там 5 осей чуть ли не начальный уровень и несколько альтернативных вариантов подойти в одну и ту-же точку). Ведь многие современные CAM программы (в частности Siemens NX) не создают изначально G-коды. А работают со сложными кривыми (сплайнами), которые описываются в их внутреннем формате. G - код создается на этапе постпроцессинга. При этом теряется часть информации из-за аппроксимации, но начинают дополнительно учитываться многие особенности оборудования. После этого код попадает в интерпретатор стойки, рассматриваемый выше, который переписывает его фактически в те-же точки сплайна с учетом особенностей последующего преобразования в команды движения. Затем еще одна обработка уже в привязке к таймингам, скоростям и ускорениям станка, и т.п. (с предположением, что пользователь задал их корректно). Зачастую при этой обработке делается попытка восстановить часть информации которая была потеряна при аппроксимации на предыдущем шаге. Потом генерация шагов (в случае управления STEP\DIR).

На мой взгляд логичней сразу передавать в стойку траекторию в виде сплайна (только полного, а не как в стандарте на G-код). Полного я имею в виду то, что кроме координат точек определения сплайна минимум должна передаваться ось инструмента (обычно в КАДах хранится три оси ориентации). Впрочем ось важна для 4+ осей. Плюс атрибуты в каждой точке (скорость подачи и\или метка безразмерного времени, обороты шпинделя, включение вакуума и т.п.). Постпроцессор в CAMе лишается обязательной функции преобразования в G-код (или подобный). Интерпретатор в станке тогда должен будет развернуть кривую в кривые от времени для каждой оси и каждого исполнительного механизма в реальное время станка (на основе заданных в нем параметров скоростей и ускорений). Поскольку время в атрибутах траектории безразмерное, появляется возможность его растягивать и сжимать без потери точности следования по траектории. После этого отдельная траектория отправляется на каждый привод (физический или программный), и синхронно запускается на исполнение в режиме реального времени. Если имеется обратная связь то появляется возможность синхронно корректировать приводы опять таки не уходя с траектории. Просто выполняется широковещательная рассылка всем приводам замедлиться или ускориться. Реверс обработки также упрощается.
А если помечтать, передавать в виде сплайна не ноль инструмента, а теоретическую точку контакта и ось нормали к пятну контакта, то можно вообще подойти к универсальной программе, которая будет легко переноситься на другое оборудование и допускать замену инструмента.
Конечно теряется возможность в ручную писать G-коды. Но для этого можно написать относительно простой транслятор с G-кода в сплайн. Тем более, что ничего особенно сложного в ручную на G-кодах не напишешь.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение Nick »

Только вот сложно представить себе такую программу, которая при всем этом будет все выполнять в режиме реального времени.

Тем более ты сейчас говоришь о фрезерных станках. А их на самом деле гораздо больше.

Вообще мне больше по душе принцип систем линукс - много маленьких простых программ которые выполняют только свою функцию. И комбинацией этих программ можно сделать такое, Такое, что не могут многие навороченные программы.
MIX
Кандидат
Сообщения: 89
Зарегистрирован: 23 авг 2015, 09:48
Репутация: 34
Настоящее имя: Михаил
Откуда: С. Петербург
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение MIX »

Реальное время только на последнем этапе, когда общая траектория уже разобрана на траекторию на каждый привод и слита (может быть частично с кэшированием) в него. Все что до этого момента: получение общей траектории из CAM, разбивка ее на отдельные траектории каждого привода в соответствии с кинематикой станка, анализ скоростей и ускорений (лимитов и т.д.), выверка таймингов (чтобы уложиться в скорости и ускорения). Не требуют реального времени.

Почему о фрезерных? А роботы? А токарка? Там по другому? А проблемы с синхронизацией многоголовых станков?

А кто говорит об одной большой программе? Так и получается много маленьких функциональных программ:
1. Анализ входной траектории, разбивка на траектории в соответствии с кинематикой
2. Анализ отдельной траектории для каждого привода (синхронизация таймингов)
3. Связь с аппаратной платформой RT
4. Программные RT генераторы шагов или PID
5. RT обратная связь
...
и т.д.
...

Я больше написал о том, что мне кажется, что сейчас G-код - лишний костыль. Если передавать из CAMа готовую траекторию и работать с ней, то будет гораздо больше информации для стойки. Можно будет проще адаптировать программу под конкретное оборудование.
MIX
Кандидат
Сообщения: 89
Зарегистрирован: 23 авг 2015, 09:48
Репутация: 34
Настоящее имя: Михаил
Откуда: С. Петербург
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение MIX »

Например на рисунке
рисунок.jpg (4350 просмотров) <a class='original' href='./download/file.php?id=65716&mode=view' target=_blank>Загрузить оригинал (26.25 КБ)</a>
Слева траектория. Для простоты станок с всего двумя осями и шпинделем. Соответственно траектория - окружность атрибут частота вращения и подача шпинделя все в координатах X,Y.
В соответствии с кинематикой станка планировщик стойки разбирает эту траекторию на три отдельных профиля для каждой оси (вернее две оси и шпиндель). Это три графика справа. Это не RT
После этого стойка может для каждой оси вычислить скорость и ускорение, сопоставить с пределами для оси и синхронно растянуть/сжать эти графики вдоль оси времени t. Для того чтобы уложиться в возможности станка. тоже не RT.
Например явно не учтено, что шпинделю нужно разогнаться, поэтому в начале графиков относительное время увеличивается синхронно для всех осей.
После этого откорректированные графики уже с реальным а не относительным временем по оси t заливаются в исполнительные элементы стойки и дается синхронная команда на начало исполнения. Тут уже RT, со всеми ее заморочками.
При этом сохраняется возможность в процессе работы контролировать и корректировать процесс за счет синхронного таймера.

Ну как то так... В порядке бреда.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение Serg »

MIX писал(а):После этого стойка может для каждой оси вычислить скорость и ускорение, сопоставить с пределами для оси и синхронно растянуть/сжать эти графики вдоль оси времени t. Для того чтобы уложиться в возможности станка. тоже не RT.
И что после этого станет с расчётными режимами резания?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
MIX
Кандидат
Сообщения: 89
Зарегистрирован: 23 авг 2015, 09:48
Репутация: 34
Настоящее имя: Михаил
Откуда: С. Петербург
Контактная информация:

Re: интерпретатор linuxcnc

Сообщение MIX »

А это уже вопрос к оператору. Вариантов несколько:
1. Получив предупреждение не начинать резать. Править программу.
2. Смириться с уходом из режима. Но не траектории же всетаки?
3. Если задавать подачу на зуб, увеличить обороты
4. Подобрать оборудование, которое сможет обеспечить режим
5. .... что там еще сейчас делают испортив деталь?
Ответить

Вернуться в «LinuxCNC»