Как написать постпроцессор для SolidCAM. Часть 2. Синтаксис

Давайте продолжим процесс настройки постпроцессора и работы с G-кодом и разберем синтаксис для написания постпроцессора.

Для начала скопируем наш постпроцессор, используя Ctrl + C, и вставим его в новую папку. Для удобства можно нажать F2, чтобы быстро изменить имя файла, если он уже выбран. Мы создаем папку для SolidCAM 2020 SP1 и будем использовать её в качестве папки назначения для постпроцессора и файлов CAM-проекта.

Теперь копируем путь этой папки и открываем настройки SolidCAM. Зачем мы сделали резервную копию? Потому что если в версии 2020 что-то пойдет не так, и настройки постпроцессора или проекта окажутся несовместимыми с предыдущей версией, у нас не будет проблем вернуться к работе в версии 2019. Так что мы проверяем и убеждаемся, что все настроено правильно, и можем продолжать работу в версии 2020.

После этого открываем наш проект, созданный в версии 2019. SolidCAM распознает, что этот проект был создан в предыдущей версии и предложит преобразовать его в формат 2020 года. Имейте в виду, что после этого вы не сможете открыть проект в версии 2019, так что если вы ещё не сделали резервную копию, то сейчас самое время. Но так как мы уже сделали копию, можем спокойно продолжить работу.

Когда проект откроется в SolidCAM 2020, мы увидим, что операции не просчитаны. Это потому, что формат немного изменился, но если мы просто выберем «Вычислить все», это будет сделано без проблем. Теперь можно сгенерировать новый G-код и сохранить его в новой папке, соответствующей версии 2020 SP1.

После генерации G-кода мы сохраняем его в назначенную папку. Не забываем создать новую папку для SolidCAM 2020 SP1 и добавить к имени файла информацию о версии, чтобы было легко отличить этот код от других.

Теперь как проверить, есть ли различия между версиями G-кода? Один из способов — использовать онлайн-инструменты для сравнения файлов. Например, есть бесплатные программы, такие как Def Tracker или cimco, которые позволяют отслеживать изменения в папках. Также можно воспользоваться программой WinMerge, которая автоматически выделяет изменения между двумя версиями файла.

Мы можем загрузить G-коды версий 2019 и 2020 и сравнить их в WinMerge. Для этого создадим новый документ и вставим код версии 2019 года в одно поле, а код версии 2020 года — в другое. После этого нажмем на кнопку обновления, и программа покажет нам все различия между этими версиями.

Таким образом, вы можете легко отслеживать изменения в G-коде и видеть, как они влияют на постпроцессор или операции в SolidCAM.

Отлично, продолжим разбор постпроцессоров и кода. Мы уже увидели, что различий между G-кодами версий 2019 и 2020 практически нет, кроме времени генерации, что свидетельствует о корректной работе. Теперь клиент может спокойно продолжать работу.

Перейдем к работе с 2D-постпроцессором. Для начала, откроем его в Visual Studio Code, где удобно редактировать большие файлы, особенно если у вас несколько экранов и возможность увеличить шрифт для улучшенной концентрации. Чтобы лучше сосредоточиться на редактировании, удерживая Ctrl и нажимая «+», можно увеличить размер шрифта в интерфейсе.

Синтаксис. Начало и конец процедуры

Давайте напомним о структуре процедуры — она похожа на сэндвич. Верхняя часть сэндвича — это имя процедуры, которое начинается с символа «@», а всё, что находится между началом и концом процедуры (закрывающей части сэндвича), — это, собственно, содержимое. В конце процедуры всегда стоит «конец P», который завершает её.

Синтаксис. Начало и конец процедуры

Теперь давайте поговорим о ключевых элементах процедуры:

Синтаксис. Скобки выполнения

Скобки выполнения. Они обозначают часть кода, которая будет выполняться или напечатана при декодировании. Весь текст, заключённый в фигурные скобки, будет выводиться при выполнении.

Синтаксис. Скобки выполнения

Синтаксис. Запятые

Запятые. Они играют роль косметического элемента, облегчающего чтение и восприятие кода. Хотя запятые можно не ставить, они помогают визуально отделить разные переменные, особенно в плотном и сложном коде.

Таким образом, правильно структурированный и хорошо читаемый код постпроцессора делает его легче для модификаций и анализа. Мы будем внимательно следить за тем, чтобы код всегда оставался читабельным, добавляя запятые там, где это необходимо для удобства.

Теперь можем продолжить работу с нашим 2D-постпроцессором, улучшая его структуру и проверяя корректность выполнения процедур, что позволит облегчить будущие изменения и работу с G-кодом.

Синтаксис. Точка с запятой (;)

Следующий элемент синтаксиса — это точка с запятой (;). Она обозначает комментарий, то есть всё, что следует после точки с запятой, не будет выводиться в G-коде. Используйте её, если хотите оставить заметки или временно отключить строки кода. Примером может служить следующая ситуация: у нас есть имя задания, и мы хотим добавить комментарий для себя как для автора. Добавляем новую строку с точкой с запятой и пишем комментарий, например, «имя операции будет напечатано». Это поможет нам как редактору сообщения понять, что именно будет напечатано в G-коде.

Синтаксис. Точка с запятой (;)

После сохранения изменений и генерации G-кода в SolidCAM вы заметите, что в выводе G-кода наш комментарий не отображается, потому что это была внутренняя заметка, которая не выводится в конечный файл.

Также точку с запятой можно использовать как своего рода быстрый переключатель. Например, если вы временно не хотите, чтобы какая-то строка выводилась в G-коде, просто добавьте перед ней точку с запятой. Это удобный способ при отладке — вы можете быстро комментировать строки и проверять, как это влияет на вывод.

Когда вы отредактировали GPP-файл и нужно протестировать изменения, добавление или удаление точек с запятой позволяет контролировать, что будет выводиться в G-коде и что останется скрытым. После проверки можно удалить комментарии или оставить их для справки.

Синтаксис. Апострофы и двойные кавычки

Теперь перейдем к следующему элементу синтаксиса — апострофы и двойные кавычки. По сути, в контексте SolidCAM между ними нет разницы, они оба используются для того, чтобы жёстко закодировать и напечатать строку текста. Всё, что заключено в апострофы или кавычки, будет выведено в точности так, как написано. Это удобно для добавления комментариев или строк, которые должны быть напечатаны в G-коде без изменений.

Для демонстрации давайте продублируем строку с апострофами и вставим её. Если у вас настроен Visual Studio Code, вы можете быстро дублировать строки с помощью комбинации клавиш Ctrl+D.

Синтаксис. Апострофы и двойные кавычки

Как вы видите, здесь мы открыли строку с помощью апострофов: сначала открывающая скобка, затем пробел, после чего используется переменная для вывода имени задания, а в конце — закрывающая скобка, снова заключённая в апострофы. Таким образом, всё, что вы хотите вывести в точности так, как указано, необходимо заключать в апострофы.

Теперь давайте проверим это на практике. Мы можем закрыть один из файлов, который не содержит имени задания, и сгенерировать новый G-код. Откроем Visual Studio Code, и теперь вы увидите, что в выводе содержится именно то, что мы задали: открывающая скобка, пробел, затем переменная, которая подставляет имя задания, и, наконец, закрывающая скобка. Это пример так называемого жёсткого кодирования — всё, что вы заключаете в апострофы, будет напечатано именно так, как вы указали.

Почему я продублировал эту строку? Потому что хочу показать вам, что нет никакой разницы между использованием апострофов и двойных кавычек. Давайте заменим апострофы на кавычки и сохраним изменения в файле DEP. После генерации нового G-кода вы увидите, что оба варианта вывода идентичны.

Однако стоит отметить, что нельзя смешивать апострофы и кавычки в одной строке. Если вы открыли строку апострофом, то должны закрыть её также апострофом. Попробуем нарушить это правило: если мы откроем строку с апострофом, а закроем её кавычкой, сразу становится понятно, что что-то пошло не так. Visual Studio Code, если настроены соответствующие расширения, выделит эту ошибку цветом, показывая, что синтаксис нарушен.

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

Синтаксис. Квадратные скобки

Модальность, или использование квадратных скобок, — это концепция, которая указывает, изменилось ли значение. Как это работает на практике? Например, если мы изменим уровень трассировки на пятый в нашем G-коде, мы получим всю необходимую информацию о переменных. После сохранения и генерации пятой трассировки на экране будут отображены координаты и другие данные.

Синтаксис. Квадратные скобки

Модальность применяется ко многим системным переменным, и узнать, какие из них поддерживают модальность, можно двумя способами: либо воспользовавшись справкой GPP, как я демонстрировал ранее, либо проверив пятую трассировку, что я и делаю сейчас. В трассировке после каждой координаты (например, X, Y, Z) есть буквы, которые указывают на состояние переменной. Если буква обозначает «T», это означает, что модальность переменной истинна, то есть её значение изменилось. В обратном случае она будет ложной.

Например, если значение для оси Y изменилось и его модальность истинна, это будет отображено в трассировке. Однако если значение остаётся прежним, как в случае с осью X, то оно не будет печататься. Это правило модальности.

Теперь, что касается квадратных скобок. Если значение переменной заключено в квадратные скобки и его модальность ложна, это значение не будет напечатано в G-коде. Поэтому, если после анализа пятой трассировки мы видим, что какое-то значение остаётся неизменным (модальность ложна), оно не отображается. Например, если модальность переменной Z истинна, а остальных переменных — ложна, то в G-коде будет распечатано только значение для Z.

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

Для подтверждения можно ещё раз взглянуть на трассировку: если модальность осей Y и Z отличается, выводим только изменённые значения, что и демонстрирует работа квадратных скобок.

Синтаксис. Новый блок и команда новой строки

Последний элемент синтаксиса процедуры DPP, который мы рассмотрим на данном этапе, — это новый блок и команда новой строки. Как следует из названия, команда новой строки вставляет новую строку, аналогично нажатию клавиши Enter на клавиатуре. В то время как новый блок выполняет ту же задачу, он также добавляет новый номер блока в G-код.

Что такое номера блоков? Это последовательные числа, которые предшествуют строкам G-кода в файле, отправляемом на станок. Некоторые машины требуют наличия номеров блоков, а для других это не принципиально. Однако важно помнить, что каждый новый блок в коде создаёт отдельный номер блока.

Теперь давайте рассмотрим, как это работает на практике. В текущей конфигурации у нас отключена генерация номеров блоков, то есть значение переменной, отвечающей за их вывод, установлено в «false». Для того чтобы номера блоков начали появляться в G-коде, нужно изменить это значение на «true». Но на этом не всё — также требуется задать ещё одну переменную, которая включает поддержку номеров блоков на уровне машины.

Давайте активируем обе переменные, установив для них значение «true». Первая переменная отвечает за генерацию номеров блоков, а вторая — за их поддержку на уровне машины. Если хотя бы одна из этих переменных будет ложной, номера блоков не появятся. Теперь, когда обе переменные установлены в «true», проверим результат.

Новый блок и команда новой строки

Для удобства мы также изменим уровень трассировки на нулевой, чтобы упростить отображение данных. Сохраним изменения и сгенерируем G-код.

Однако, как вы можете заметить, номера блоков могут не отображаться сразу. Это связано с тем, какую команду вы используете — новый блок или новую строку. Например, если в заголовке используется команда новой строки, номера блоков не будут генерироваться, поскольку новая строка не добавляет новый блок.

Чтобы это проверить, давайте изменим используемую команду в конце строки и снова сгенерируем G-код. После этих изменений мы увидим, как номера блоков появляются в коде, подтверждая правильность работы новой команды.

Теперь давайте продолжим обсуждение. Мы установили новый блок для пользователя, и, как видите, отсчёт блоков начинается здесь. Единственная часть, которая сгенерировала новый блок, была отмечена ранее. Мы решили не использовать эту команду, а вместо неё применять новую строку. Теперь отображаются номера блоков, и всё зависит от того, как настроены рабочие номера.

Определение этих номеров связано с форматированием переменных, которое мы сейчас рассмотрим. Номер блока по умолчанию обозначается буквой «N». Как правило, машины используют именно эту букву, и редко встречаются варианты с другими обозначениями. Это строка, которую можно настроить в зависимости от требований.

Логические переменные

Теперь перейдём к логическим переменным. У нас есть переменные, которые контролируют генерацию номеров блоков. Если обе переменные установлены в значение «true», номера блоков будут напечатаны. Если одна из них будет «false», номера не появятся.

Логические переменные

Далее рассмотрим формат номеров блоков. Он работает так же, как и любая другая числовая переменная. Вы задаёте количество десятичных знаков и максимальное число для номера блока. Например, первый номер блока — это 10, а «Дельта» — шаг между номерами, который может быть равен единице, что создаст последовательность 1, 2, 3 и так далее.

Теперь давайте применим эти принципы на практике. Допустим, первый номер блока — это 10, а шаг между номерами (Дельта) равен 5. Это означает, что номера блоков будут увеличиваться на 5 единиц каждый раз: 10, 15, 20 и так далее. Если будет достигнуто максимальное значение номера блока, например, 100, появится ошибка при генерации G-кода.

Форматирование чисел для отображения номеров блоков также аналогично другим переменным. Мы можем задать 5 знаков для номера, без десятичных знаков. Если мы установим максимальное значение номера книги на 100, после его достижения G-код больше не будет генерировать новые блоки.

Теперь, чтобы протестировать это, давайте зададим начальный номер блока, скажем, на уровне 5, с шагом Дельта 5. После этого изменения будут видны в G-коде. Сохраним файл и посмотрим на результат генерации.

Теперь давайте продолжим. Мы получили ошибку из-за слишком большого номера блока, но это нормально. Таких ошибок можно избежать несколькими способами, например, сбросив номер блока. Однако сейчас это не столь важно. Давайте посмотрим на результат: после того как мы достигли максимального номера блока, вывод остановился, и G-код больше не печатался. Всё, что вышло после этого, — это код до достижения лимита.

Теперь давайте изменим максимальное значение на, скажем, 999999, чтобы не было ошибок. Перейдём к следующему этапу — форматированию переменных. Это может показаться сложным, но на практике это очень мощный и гибкий инструмент.

Форматирование переменных

Форматирование переменных задаётся формулой, которая включает множество элементов: знак префикса, нули, целая часть, дробная часть, десятичная точка, конечные нули, параметры и постфикс. Хотя это может показаться запутанным на первый взгляд, давайте разберёмся с основными принципами.

Рассмотрим пример. Формат может включать до пяти знаков перед десятичной точкой и определённое количество знаков после неё. Например, если у нас число с тремя знаками перед точкой, но требуется пять, то будут добавлены два нуля перед числом. Аналогично, если число с четырьмя знаками после десятичной точки, то недостающие нули также будут добавлены. Это важно для точного форматирования чисел.

Теперь давайте обсудим префиксы и постфиксы. Они используются для добавления символов перед и после числовой части переменной. Это может быть полезно для обозначения осей (например, «X», «Y», «Z» перед значениями координат). Префиксы и постфиксы заключаются в угловые скобки и могут быть любой строкой длиной до 31 символа.

Используя этот метод, мы можем чётко указать, какие символы и числа будут выводиться в G-коде. Например, можно задать префикс «X», который будет выводиться перед значением координаты, а постфикс, например, — пустое пространство для удобства чтения кода.

Теперь давайте сохраним изменения и сгенерируем новый G-код с учётом этих настроек префиксов, постфиксов и форматирования чисел.

Постфикс — это просто пустое пространство, предназначенное для разделения каждой координаты. Если мы добавим постфикс и сохраним его, сгенерируем G-код и посмотрим результат, то увидим, что каждый раз, когда используется формат G, например, G54, добавляется это пустое пространство. Префиксы и постфиксы играют важную роль в форматировании G-кода, и хотя визуально постфиксы могут быть незаметны, они создают нужное разделение в коде.

Теперь давайте отключим номера блоков, установив значение переменной на false, и оставим только букву G. Перейдем к символу знака, который используется после префикса. Знак — это опциональный параметр. По умолчанию, если значение положительное, оно отображается без знака, а если отрицательное — только с минусом. Однако некоторые машины требуют явного указания знака для положительных значений, и в этом случае можно включить знак плюса.

Например, если мы добавим знак плюса перед значением, то все положительные числа будут иметь этот знак, а отрицательные останутся с минусом. Если установить минус в формате, то даже положительные значения будут отображаться с отрицательным знаком. В большинстве случаев положительные числа остаются без знака, а для отрицательных используется минус.

Теперь рассмотрим ведущие нули. Они работают аналогично минимальному количеству знаков для чисел до и после десятичной точки. Например, если у вас установлено максимальное количество знаков в пять и вы активируете ведущие нули, то все пять позиций будут заполнены. В качестве примера: если у вас три цифры, а формат требует пять, то два дополнительных нуля будут добавлены перед числом.

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

Теперь давайте сгенерируем G-код с ведущими нулями. Добавим Z перед числом, чтобы указать, что требуется пять знаков. После генерации G-кода мы увидим, что у нас есть два числа, но формат указывает на пять, поэтому оставшиеся позиции заполняются нулями. Если заменить Z на пробелы, эти позиции будут заполнены пробелами.

Конечные нули работают так же, как и ведущие, но применяются к дробной части числа. Это полезно для форматирования чисел в дробном виде.

Теперь перейдём к параметрам форматирования, которые позволяют манипулировать значениями переменных, включая знак и десятичную точку. Например, параметры масштабирования могут умножать или делить значение переменной. Это часто используется в токарной обработке, где координаты X могут быть умножены на два для корректного отображения.

Опции

Опция D удаляет значение, если оно равно нулю. То есть, если переменная равна 0, она не будет отображаться. Это напоминает модальность, но не в полной мере. В конце концов, координаты всё равно нужны, хотя эта функция редко используется на практике. Её можно применить и без десятичной точки, например, если значение 1.23 будет отображаться как 123 без дробной части.

Опция P — это условная десятичная точка. Она убирает десятичную точку, если число является целым. К примеру, 24.0 будет отображаться как 24 без десятичной части. Также опция инверсии позволяет менять знак числа с положительного на отрицательный и наоборот.

На примерах видно, что мы можем контролировать масштабирование и применение нуля. Если значение переменной равно нулю, то оно не будет отображаться, даже если это X. Также убирается десятичная точка, как было упомянуто ранее.

Некоторые машины используют условные десятичные точки, например, в микронах. В таких случаях удобно экономить пространство, убирая десятичные точки, если после них идут нули. Однако некоторые машины требуют, чтобы после чисел координат обязательно стояла десятичная точка.

В следующей статье, мы подробно рассмотрим, как можно создать собственную систему генерации номеров блоков. Это позволит вам контролировать процесс и определить, как и что должно быть напечатано. Например, вы сможете установить новый номер блока после достижения лимита в 995.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.