пятница, 26 августа 2016 г.

14. Пишем парсер g-code средствами Arduino

  Что же такое G-код?  G-код — условное именование языка программирования устройств с числовым программным управлением (ЧПУ), был создан в 60-х годах прошлого столетия. В 80-х стал отраслевым стандартом ISO 6983-1:2009 на западе, в СССР это - ГОСТ 20999-83. Грубо говоря g-код это - список инструкций для ЧПУ станка, что бы он перемещал инструмент (сверло, фреза, печатающая головка) в нужной последовательности и в нужном направлении. Выглядит он примерно так: 

G0 X  47.585 Y  38.795
M3 M8
G0 Z   3.000
F150
G1 Z  -1.500
F400
G1 X  47.552 Y  38.836
G1 X  47.521 Y  38.879
G1 X  47.491 Y  38.923
G1 X  47.462 Y  38.969
G1 X  47.435 Y  39.017
G1 X  47.409 Y  39.066
G1 X  47.385 Y  39.117
G1 X  47.362 Y  39.171
G1 X  47.340 Y  39.226
G1 X  47.320 Y  39.284
G1 X  47.302 Y  39.343


   Получить управляющую программу для ЧПУ можно при помощи специальных CAM программ. CAM системы переводят 2d и 3d, разработанные в системах автоматизированного проектирования САПР (у буржуев это - CAD). Примером CAD может служить SolidWorks, AutoCAD и др. Какие я буду использовать CAD/CAM системы пока не знаю. В идеале хотелось бы иметь мощный инструмент с открытым исходным кодом. Но я точно знаю какие буду использовать программы sender.
   Sender - это программа которая выполняет функцию передачи g-кода с персонального компьютера на станок по COM порту (в моем случае COM-порт). Мне понравились Universal Gcode Sender и Grbl Controller. Достаточно простые программы, есть версии под linux.



   Итак вернемся к g-коду. Для того чтобы станок передвинул инструмент по осям X,Y необходимо в него передать команду:


 G1 X  47.552 Y  38.836

, где G1 - Команда, линейная интерполяция
X  47.552 - смещение по оси Х
Y  38.836 - смещение по оси Y

   Не смотря на то что g-код стандартизирован, я видел много его вариантов, например вместо G1 G01 или X47 и X 47 (с пробелом). Или вообще жесть типа:
G01 Z[-1.000000*#7+#10] F#4  

квадратные скобки, какие-то звездочки, плюсики. И как прикажите с таким кодом работать? Править вручную? Убирать лишние скобки и пробелы? Вот вам и стандартизация. Хочется максимально все автоматизировать, а значит передо мной стоит нелегкая задача написать универсальный парсер g-кода который будет понимать любой g-код. Мы радиолюбители! В наших жилах течет горячий припой! Мало того это нужно сделать средствами Arduino. В Arduino нет регулярных выражений, а еще он не умеет работать с числами с плавающей запятой. Как вы наверное заметили координаты у нас до трех знаков после запятой. AVR это вам не Intel 8086/8087 так что даже не знаю стоит ли за это браться. Уверен что стоит! «Фигня война! Главное – маневры!».
    В Ардуине есть богатый набор строковых функций. Описание на русском языке можно найти тут. Как известно EEPROM в AVR имеет ограниченное количество циклов записи — 100000 не так уж и много. Так что разработку мы будем проводить не на железе как обычно это делали а с помощью онлайн симулятора https://circuits.io/.  Circuits: виртуальная Arduino в браузере! Обладает богатым функционалом. Позволяет собирать виртуальные схемы на макетной плате, подключать вольтметры, осциллографы. А еще там есть редактор кода и монитор COM-порта как в толстой Arduino IDE. Конкретно за моими разработками можно следить тут



Продолжение следует...