Страница 1 из 2

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

Добавлено: 16 сен 2013, 07:34
nkp
...тут соседняя тема натолкнула на мысль(а как впоследствии оказалось - уже немного обсуждалось) - использовать вывод интерпретатора для рестарта с любой точки траектории в программах с циклами и о-кодами, для реверса Gкода , ... .
Сразу оговорюсь - решение пока не найдено, поэтому данная тема для попытки немного глубже разобраться в процессах ;)
Интерпретатор в емс (называется RS274/NGC) - это программа, получающая на вход строки с G-кодом (из файла или построчно с клавиатуры) ,
и преобразующая их в команды (canonical machining functions) для планировщика траектории , контроллера IO :
(для просмотра содержимого нажмите на ссылку)
Рабочий стол 1(003).jpg (5003 просмотра) <a class='original' href='./download/file.php?id=18645&sid=bcf61947553efd6f7694c418c62cb24d&mode=view' target=_blank>Загрузить оригинал (116.08 КБ)</a>
Интерпретатор RS274/NGC был разработан NIST при создании проекта ЕМС как отдельный модуль .
rs274ngc.tar
(620 КБ) 544 скачивания
Поэтому ,как правило,может работать сомостоятельно (“Stand-Alone Interpreter”(SAI)) на разных платформах:
(для просмотра содержимого нажмите на ссылку)
Рабочий стол 1(002).jpg (5003 просмотра) <a class='original' href='./download/file.php?id=18644&sid=bcf61947553efd6f7694c418c62cb24d&mode=view' target=_blank>Загрузить оригинал (395.4 КБ)</a>
В системе с установленным емс в терминале пишем :
rs274
видим приглашение ввести вариант требуемого продолжения:
(для просмотра содержимого нажмите на ссылку)
Выделение(002).jpg (5003 просмотра) <a class='original' href='./download/file.php?id=18647&sid=bcf61947553efd6f7694c418c62cb24d&mode=view' target=_blank>Загрузить оригинал (80.64 КБ)</a>
вводим "1" (непосредственная интерпретация)
программа требует путь к файлу инструментов (скармливаем ей путь из любого конфига емс)
и вот :
READ =>
предложение ввести любую строку с Gкодом...
при безошибочном вводе тут же происходит интерпретация :
(для просмотра содержимого нажмите на ссылку)
Выделение(003).jpg (4999 просмотров) <a class='original' href='./download/file.php?id=18652&sid=bcf61947553efd6f7694c418c62cb24d&mode=view' target=_blank>Загрузить оригинал (279.49 КБ)</a>
при чтении из файла :
указываем исходный файл с прграммой и путь для вывода (также путь с файлу инструментов):
(для просмотра содержимого нажмите на ссылку)
Выделение(004).jpg (5003 просмотра) <a class='original' href='./download/file.php?id=18651&sid=bcf61947553efd6f7694c418c62cb24d&mode=view' target=_blank>Загрузить оригинал (82.08 КБ)</a>
получили выход:

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

    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 скачивания

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

Добавлено: 16 сен 2013, 07:52
nkp
программа , написаная в относительных координатах интерпретируетя все равно в абсолютных ...
все циклы , вызовы подпрограмм, другие о-коды "раскладываются" на непосредственные команды формирования траектории...
осталось дело за малым ;) :
научиться скармливать емс напрямую эти canonical machining functions)))

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

Добавлено: 16 сен 2013, 11:37
Nick
А как планируешь все это дальше использовать?
Реверснуть до конца код всеравно не выйдет - тот же S1000 не получится... или если будет g38.2...

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

Добавлено: 16 сен 2013, 11:44
nkp
Nick писал(а):А как планируешь все это дальше использовать?
пока четкого видения нет :thinking:
но подразобраться не помешает...

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

Добавлено: 16 сен 2013, 11:52
nkp
Nick писал(а):тот же S1000 не получится
а кстати - что за проблемы могут быть с S1000 ?

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

Добавлено: 16 сен 2013, 12:36
Nick

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

S10 
G1 X10 
S1000 
G1 X100 
Если инвертировать, даже в простых командах, получишь G1 X10 на скорости S1000

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

Добавлено: 16 сен 2013, 12:43
nkp
Nick писал(а):Если инвертировать, даже в простых командах, получишь G1 X10 на скорости S1000
S=>F
;) так это если тупо© переписать файл вверх ногами)))
а мы же можем добавить нашему скрипту немного интелекта...

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

Добавлено: 19 сен 2013, 19:02
nkp
в продолжение дискуса об обработке больших файлов в емс...
создал файл больше миллиона строк (17Мб)
запустил его в обработку интерпретатору...
после 38с обработка закончилась , но в выходном файле оказалось только 325000 строк (как бы обработка не закончилась)

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

Добавлено: 19 сен 2013, 19:32
Nick
попробуй ему поставить доугой loglevel, может что скажет...

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

Добавлено: 21 сен 2013, 17:12
nkp
самые древние исходники емс (по моему 1.1)

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

Добавлено: 23 сен 2013, 09:49
Nick
О, какая инетересная штука там есть:

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

Добавлено: 09 дек 2015, 09:43
nkp

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

Добавлено: 09 дек 2015, 10:06
Сергей Саныч
Что это??? Книжку по телевизору читают?
Это ж все-таки не "Война и мир", а техдокументация!

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

Добавлено: 09 дек 2015, 10:21
Nick
Мне показалось, или самый первый слушатель в трансляции - женщина?

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

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

На мой взгляд логичней сразу передавать в стойку траекторию в виде сплайна (только полного, а не как в стандарте на G-код). Полного я имею в виду то, что кроме координат точек определения сплайна минимум должна передаваться ось инструмента (обычно в КАДах хранится три оси ориентации). Впрочем ось важна для 4+ осей. Плюс атрибуты в каждой точке (скорость подачи и\или метка безразмерного времени, обороты шпинделя, включение вакуума и т.п.). Постпроцессор в CAMе лишается обязательной функции преобразования в G-код (или подобный). Интерпретатор в станке тогда должен будет развернуть кривую в кривые от времени для каждой оси и каждого исполнительного механизма в реальное время станка (на основе заданных в нем параметров скоростей и ускорений). Поскольку время в атрибутах траектории безразмерное, появляется возможность его растягивать и сжимать без потери точности следования по траектории. После этого отдельная траектория отправляется на каждый привод (физический или программный), и синхронно запускается на исполнение в режиме реального времени. Если имеется обратная связь то появляется возможность синхронно корректировать приводы опять таки не уходя с траектории. Просто выполняется широковещательная рассылка всем приводам замедлиться или ускориться. Реверс обработки также упрощается.
А если помечтать, передавать в виде сплайна не ноль инструмента, а теоретическую точку контакта и ось нормали к пятну контакта, то можно вообще подойти к универсальной программе, которая будет легко переноситься на другое оборудование и допускать замену инструмента.
Конечно теряется возможность в ручную писать G-коды. Но для этого можно написать относительно простой транслятор с G-кода в сплайн. Тем более, что ничего особенно сложного в ручную на G-кодах не напишешь.

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

Добавлено: 09 дек 2015, 23:01
Nick
Только вот сложно представить себе такую программу, которая при всем этом будет все выполнять в режиме реального времени.

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

Вообще мне больше по душе принцип систем линукс - много маленьких простых программ которые выполняют только свою функцию. И комбинацией этих программ можно сделать такое, Такое, что не могут многие навороченные программы.

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

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

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

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

Я больше написал о том, что мне кажется, что сейчас G-код - лишний костыль. Если передавать из CAMа готовую траекторию и работать с ней, то будет гораздо больше информации для стойки. Можно будет проще адаптировать программу под конкретное оборудование.

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

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

Ну как то так... В порядке бреда.

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

Добавлено: 10 дек 2015, 20:49
Serg
MIX писал(а):После этого стойка может для каждой оси вычислить скорость и ускорение, сопоставить с пределами для оси и синхронно растянуть/сжать эти графики вдоль оси времени t. Для того чтобы уложиться в возможности станка. тоже не RT.
И что после этого станет с расчётными режимами резания?..

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

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