com
я
Руководство по постпроцессору CAM 08.12.21
Оглавление
3.3.2 Строки ....................................................... ................................................. ................................... 3-49
3.3.3 Булевы значения........................................................ ................................................. ................................ 3-50
3.3.4 Массивы..................................................................... ................................................. ...................................... 3-50
3.3.5 Объекты ....................................................... ................................................. ................................ 3-52
3.3.6 Векторный объект....................................................... ................................................. ................... 3-53
3.3.7 Объект Matrix............................................................ ................................................. ................... 3-55
3.4 Выражения ...................................................... ................................................. ................................ 3-58
3.5 Условные операторы ....................................................... ................................................. ............... 3-59
3.5.1 Оператор if ....................................................... ................................................. ...................... 3-59
3.5.2 Заявление о переключении ....................................... ................................................. .............. 3-61
3.5.3 Условный оператор (?)............................................. ................................................. ..... 3-62
3.5.4 Тип оператора ...................................................... ................................................. ................ 3-62
3.5.5 Условная функция ...................................................... ................................................. ........ 3-63
3.5.6 попробовать / поймать ................................................ ................................................. ................................. 3-63
3.5.7 Функция подтверждения ....................................................... ................................................. ............. 3-64
3.5.8 Сравнение реальных значений ...................................................... ................................................. .......... 3-64
3.6 Циклические операторы ....................................................... ................................................. .................... 3-65
3.6.1 Цикл for ...................................................... ................................................. ............................. 3-65
3.6.2 Цикл for/in ...................................................... ................................................. ......................... 3-65
3.6.3 Цикл while ...................................................... ................................................. ...................... 3-66
3.6.4 Цикл do/while.......................................... ................................................. .................... 3-66
3.6.5 Заявление перерыва ................................................ ................................................. ............... 3-67
3.6.6 Оператор continue ................................................................ ................................................. ........... 3-67
3.7 Функции................................................................... ................................................. ................................... 3-67
3.7.1 Заявление о функции ................................................ ................................................. ........... 3-68
3.7.2 Вызов функции..................................................... ................................................. .................... 3-69
3.7.3 Заявление о возврате..................................................... ................................................. ............... 3-69
IV
Руководство по постпроцессору CAM 08.12.21
Оглавление
7.1.3 Создание жестко заданной конфигурации многоосевого станка ...................................... ...... 7-172
7.1.4 Расчет углов поворота ...................................................... ................................................ 7 -176
7.1.5 Выходное начальное положение вращения........................................... ................................................. 7-177
7.1.6 Создание функций onRapid5D и onLinear5D ....................................... .................... 7-178
7.1.7 Многоосевые общие функции ....................................... ................................................ 7- 180
7.2 Вывод непрерывной оси вращения на шкале вращения ....................................... ....................... 7-181
7.3 Настройка точек для смещения осей вращения ....................................... ................................... 7-183
7.4 Вычисление многоосевого положения инструмента ...................................... ................................... 7-185
7.5 Обработка проблемы сингулярности в постпроцессоре ....................................................... ....................... 7-187
7.6 Перемотка поворотных осей при достижении пределов......................................... ................. 7-188
7.7 Многоосевые подачи ............................................................. ................................................. ................... 7-192
В
Руководство по постпроцессору CAM 08.12.21
Оглавление
9.4.13 onLinearExtrude ................................................ ................................................. ...............9-234
9.5 Общие аддитивные функции ....................................... ................................................. ..... 9-234
9.5.1 getExtruder.................................................. ................................................. ............................. 9-235
9.5.2 является аддитивным.................................................. ................................................. ................................ 9-235
9.5.3 getPrinterGeometry() ...................................... ................................................. ............ 9-235
9.5.4 setFeedRate .................................................. ................................................. ......................... 9-236
VI
Руководство по постпроцессору CAM 08.12.21
1 Введение в постпроцессоры
1.1 Область применения
Это руководство предназначено для тех, кто хочет внести свои собственные изменения в существующие
постпроцессоры. Объем руководства охватывает все, что вам нужно для начала работы; введение в
рекомендуемый редактор (редактор постпроцессора Autodesk Fusion 360), обзор JavaScript (язык
постпроцессоров Autodesk), подробное описание функций обратного вызова (onOpen, onSection, onLinear и
т. д.) и многое другое. информация, полезная для работы с системой постпроцессора Autodesk.
Если вам нужна дополнительная информация о формате G-кода,Справочник по ЧПУ содержит много полезной
информации, включая дальнейшее объяснение формата G-кода в главе 5 «Язык программирования ЧПУ».
Хотя большинство элементов управления распознают формат G-кода, конфигурация машины может быть различной, и
некоторые коды могут поддерживаться на одной машине, а не на другой, или коды могут интерпретироваться по-разному,
например, одна машина может поддерживать круговую интерполяцию, а другая требует линейных перемещений для
вырежьте круг, поэтому вам, вероятно, понадобится отдельный постпроцессор для каждого из ваших станков.
Другие места для проверки наличия постпроцессора включаютФорум постпроцессоров HSM илиИдеи
постпроцессора HSM .
Возможно, Autodesk уже создала постпроцессор для вашей машины, но еще не выпустила его официально. Считается,
что эти сообщения находятся в режиме бета-тестирования и ожидают тестирования сообществом перед запуском в
производство. Вы можете посетитьИдеи постпроцессора HSM сайт и найдите свой пост здесь. Этот сайт содержит
запросы постпроцессора от пользователей и ссылки на сообщения, которые находятся в бета-режиме. Вы можете
найти свой компьютер и/или контроллер, чтобы узнать, доступен ли постпроцессор.
Если ваш постпроцессор не найден, вам следует поискатьФорум постпроцессоров HSM используя тот же метод,
который вы использовали на сайте HSM Post Processor Ideas. Форум постпроцессоров используется сообществом
HSM, чтобы задавать вопросы и помогать друг другу. Возможно, другой пользователь создал сообщение для запуска
вашей машины.
Вы всегда должны соблюдать осторожность при первом запуске вывода постпроцессора на своей машине,
независимо от того, откуда исходит постпроцессор.Несмотря на то, что постпроцессор относится к вашему точному
имени, он может быть настроен для параметров, которых нет на вашем компьютере, или вывод может быть не в том
формате, который вы привыкли использовать на компьютере.
При использовании Fusion 360 рекомендуется включить облачные публикации и поместить их в свою библиотеку активов. Таким образом,
постпроцессоры, библиотеки инструментов и шаблоны будут синхронизированы между устройствами и пользователями в компании.
После того, как вы загрузили свои публикации в облачную библиотеку, вы можете получить к ним доступ из Fusion 360. Для
этого нажмите кнопку «Настройка» в диалоговом окне «Постобработка» и выберите свою публикацию в раскрывающемся
меню.
Поле Описание
Папка конфигурации Указывает расположение папки постпроцессора, который вы хотите
запустить. Вы можете нажать кнопку, чтобы открыть окно браузера
папок для выбора постпроцессора.
Настраивать Используется для выбора предустановленных библиотек постпроцессора или для
выбора каскадного постпроцессора. Каскадный пост обычно равен 3рдсторонний
постпроцессор или программа проверки, которая запускается после постпроцессора
HSM.
Папки вывода Задает папку для выходного файла ЧПУ. При нажатии на кнопку
открывается окно браузера папок для выбора папки для файла ЧПУ. То
Открыть папкуКнопка открывает файловый браузер в этой папке.
Расширение ЧПУ Содержит расширение файла по умолчанию для выходного файла ЧПУ,
заданное в постпроцессоре. Вы можете переопределить расширение
файла в этом поле.
Название или номер программы Имя/номер выходного файла ЧПУ. Это имя/номер обычно
выводится в качестве первой строки файла ЧПУ, обычно в виде
кода Oxxxx, когда требуется число, или в виде комментария (xxxx),
если разрешено имя. Постпроцессор контролирует,
Введение в постпроцессоры 1-8
Руководство по постпроцессору CAM 08.12.21
Поле Описание
в этом поле разрешено буквенно-цифровое имя или необходимо ввести
число. Это определяетсяProgramNameIsInteger = Истина;оператор в
постпроцессоре и может быть установлен либоистинный (требуется
номер) илиложный(допускается буквенно-цифровое имя).
Комментарий к программе Это поле выводится как комментарий вверху файла ЧПУ.
Единица измерения Управляет единицами вывода файла ЧПУ. Обычно для этого используются те же
единицы измерения, что и для модели, но его можно переопределить для вывода
в дюймах или миллиметрах.
Изменить порядок, чтобы свести к минимуму смену инструмента Установите этот флажок, если вы работаете с несколькими наладками и хотите, чтобы
операции с одинаковыми номерами инструментов были размещены вместе, чтобы
свести к минимуму смену инструментов. Операции в рамках одной и той же установки
не будут переупорядочены.
Откройте файл ЧПУ в редакторе Установите этот флажок, если вы хотите открыть выходной файл ЧПУ в
редакторе после завершения постобработки. Используемый редактор
определяется вНастройкидиалог вОбщие->Производство-
> Внешний редакторполе.
Таблица свойств Отображает свойства, определенные в постпроцессоре, и позволяет
изменять эти свойства. Пожалуйста, смотритеТаблица свойств раздел
данного руководства для полного описания свойств постпроцессора.
Диалоговое окно «NC-программа» содержит две вкладки: «Настройки» и «Операции». Вкладка «Настройки»
определяет настройки постпроцессора, а ввод аналогичен диалоговому окну «Постобработка», хотя и отображается
в другом формате. Следует отметить, что группы свойств поддерживаются в таблице свойств, отображаемой в
диалоговом окне УП, и эти группы можно разворачивать и сворачивать. Диалоговое окно «Постобработка» не
поддерживает группы свойств.
Вы также заметите, что при постобработке NC-файла ни NC-программа, ни диалоговое окно Post Process не
отображаются. Если вы хотите изменить какие-либо настройки постобработки при использовании NC-файла, вы
должны отредактировать NC-файл, чтобы внести изменения.
Вы назначаете конфигурацию машины для настройки CAM при создании или редактировании настройки и нажатии
кнопкиВыбирать…кнопка. Откроется диалоговое окно «Библиотека машин», в котором можно выбрать машину из
доступных конфигураций.
Как только вы найдете конфигурацию машины, которую хотите использовать, вы можете скопировать ее в свою
локальную папку или связанную папку. Вы можете сделать это, перетащив конфигурацию на нужныйМои машиныпапке
или путем копирования и вставки в нужную папку. Вы можете редактировать только Конфигурации машины, сохраненные
в одном изМои машиныпапки.
После выбора конфигурации машины вы можете отредактировать ее, нажав кнопкуРедактировать...кнопку в диалоговом окне
настройки.
Области конфигурации станка, важные для постобработки, — это описание, кинематика, постобработка и
параметры многоосевой обработки. Постпроцессор может получить доступ к информации в других областях, но
не все из них используются постпроцессорами библиотеки на момент написания этой статьи.
Площадь Описание
Описание Описывает постпроцессор, станок, производителя и ЧПУ для
управления конфигурацией.
Кинематика Определяет кинематику станка движущихся осей. Вы можете определить до 3
линейных осей, 2 оси вращения и один шпиндель. Вы можете добавить/удалить ось,
щелкнув компонент правой кнопкой мыши и выбрав соответствующее действие.
Когда вы добавляете ось, она будет добавлена после компонента, на который вы
нажали.
Независимо от того, какой метод вы решите использовать для создания своего постпроцессора, у вас
должно быть достаточно информации для определения требований, включая как можно больше
следующего.
• Фрезерование
• Переводы акций
• Гидроабразивная лазерно-плазменная резка
• Зондирование
• 2D
• бурение
• Коды охлаждающей жидкости
• Осевое фрезерование
• Радиальное фрезерование
• 5-осевое фрезерование
• Струя воды
• Лазер
• Плазма
• Вход/выход
• Компенсация радиуса
• Цветовое кодирование
• Список функций
• Запустите постпроцессор прямо из редактора
• Сопоставьте строку выходного файла ЧПУ с командой постпроцессора, создавшей ее.
Это загрузит программу установки, которую вы можете запустить для фактической установки. Щелкните левой кнопкой мыши программу
установки, чтобы запустить ее.
Следуйте инструкциям на экране, чтобы завершить установку. Вы должны выбрать значения по умолчанию для всех
вопросов, хотя вы можете сделать его редактором кода по умолчанию и добавить его в контекстное меню файла
Windows Explorer.
После установки расширения Autodesk Fusion 360 Post Processor Utility вам потребуется выйти из редактора VSC, а затем
перезапустить его, чтобы инициализировать расширение. Теперь вы готовы приступить к редактированию постпроцессоров
Autodesk.
Настройки отобразятся в отдельной вкладке. Теперь вы можете искать отдельные настройки с помощью панели
поиска. Чтобы отобразить настройки Autodesk Fusion 360 Post Processor Utility, введитесмв строке поиска.
Параметр Описание
Редактор > Миникарта Определяет, отображается ли миникарта. Миникарта
представляет собой небольшое представление всего
файла, отображаемое в правой части окна и
позволяющее легко прокручивать файл.
Редактор: Размер шрифта Размер шрифта редактора.
Редактор: Вес шрифта Вес (толщина) шрифта редактора.
Редактор: Определить отступ Автоматически обнаруживаетeditor.tabSizeи
редактор.insertSpacesнастройки при открытии
файла.
Редактор: Вставить пробелы Если флажок установлен, пробелы будут вставлены в
файл, когдавкладкаклавиша нажата.
Редактор: Размер вкладки Устанавливает количество пробелов, которым равна табуляция.
Стандартная настройка для постпроцессоров Autodesk — 2.
Редактор > Подсказки параметров Включает всплывающее окно, в котором при вводе
отображается документация по параметрам и информация о
стиле.
Утилита HSMPost: цветной вывод Когда этот флажок установлен, быстрые блоки, блоки скорости подачи
Утилита HSMPost: публикация на CNCSelection Если этот флажок установлен, постобработка будет
выполняться, как только будет выбран файл ЧПУ.
Утилита HSMPost: публикация при сохранении Автоматически запускать постпроцессор при его
сохранении, только если открыто окно выходного файла
ЧПУ.
Часто изменяемые пользовательские настройки
В левой части окна редактора находится вкладка, которая открывает различные всплывающие диалоговые окна. Функции, содержащиеся
во всплывающих диалоговых окнах, весьма полезны при редактировании постпроцессора и объясняются в этом разделе. ТоУправления
источникомвсплывающее окно не используется при редактировании постпроцессоров и не будет обсуждаться.
Всплывающее меню проводника содержит расширяемые списки, которые используются для отображения открытых редакторов, папок,
переменных, функций и селектора ЧПУ. Стрелка ► слева от каждой записи используется для расширения или свертывания списка.
Список Описание
ОТКРЫТЬ РЕДАКТОРЫ Список файлов, открытых в этом экземпляре редактора
VSC. Любые файлы, которые были изменены, но не
сохранены, будут отмечены маркером (•). Количество
измененных файлов, которые не были сохранены,
отображается в значке проводника.
НЕТ ОТКРЫТЫХ ПАПОК Вы можете открыть папку для быстрого доступа ко всем
постпроцессорам в папке. Развернув папки, вы увидите
Открыть папкукнопка, с помощью которой можно
открыть папку. Щелчок по файлу в открытой папке
автоматически откроет его в редакторе. Обратите
внимание, что если папка открыта, то все открытые
файлы в редакторе сначала будут закрыты, и вам будет
предложено сохранить те, которые были изменены.
Вы можете искать текстовую строку в текущем файле или во всех открытых файлах. Для поиска текстовой строки в текущем файле
следует использовать всплывающее окно «Найти», доступ к которому осуществляется нажатием кнопкиCtrl+Fключи.
Когда вы вводите текстовую строку, редактор автоматически отображает и выделяет следующее вхождение текста в
файл. Количество вхождений текстовой строки в файл будет отображаться справа от текстового поля. Вы можете
использоватьВходитьдля поиска следующего вхождения строки или нажимайте клавиши со стрелками для поиска
вперед → и назад ← по файлу. Если вы используетеВходитьклавишу, то фокус клавиатуры должен находиться в
Находитьполе.
Ввод текстовой строки для поиска, а затем нажатие кнопкиВходитьkey отобразит файлы, содержащие текстовую
строку, и количество экземпляров текстовой строки в каждом файле. Вы можете развернуть файл в списке, нажав
клавишу со стрелкой ►, и будут показаны все экземпляры текстовой строки, найденные в выбранном файле. При
нажатии на один из экземпляров редактор переходит к этой строке в файле и автоматически открывает файл, если он
еще не открыт. Если вы не внесете никаких изменений в файл, а затем выберете текстовую строку в другом файле, то
первый файл будет закрыт до открытия следующего файла. Неизмененный файл, открытый изПоискимя
всплывающего окна будет выделено курсивом в окне редактора.
Существуют параметры, доступные при поиске текстовых строк. Эти параметры управляются с помощью значков в
Поискдиалог иНаходитьнеожиданно возникнуть.
Значок Описание
Если этот параметр включен, регистр строки поиска должен совпадать с соответствующей текстовой
строкой в файле.
Если этот параметр включен, все слово совпадающей текстовой строки в файле должно
совпадать со строкой поиска. Когда он отключен, он будет искать вхождения строки
поиска в словах.
Отображает поля, которые позволяют включать или исключать определенные файлы из поиска. в
Поисктолько вылет.
ОтображаетЗаменятьполе, позволяющее заменитьПоисктекст сЗаменять текст
поля.
Заменяет текущее (выделенное) вхождениеПоисктекст сЗаменять текст поля.
Попадание вВходитьключ, находясь вЗаменятьfield выполняет ту же замену. в
Находитьтолько всплывающее окно.
Заменяет все вхожденияПоисктекст сЗаменятьтекст поля. При инициации изПоиск
всплывающее окно, все вхождения текста во всех файлах, перечисленных в Результаты
окно будет заменено.
Параметры поиска и замены
Хорошо, так чтоЗакладкиВсплывающее окно на самом деле является всплывающим окном точек останова, но, поскольку в
JavaScript нет интерактивного отладчика, мы собираемся использовать его для добавления закладок в открытые файлы.
Поместив курсор слева от номера строки, где вы хотите установить закладку, отобразится красный кружок, а затем щелчок в
этом месте добавит закладку.
Чтобы просмотреть активные закладки, вы можете открыть всплывающее меню «Закладки» и развернутьКонтрольные точкиокно.
Затем вы можете перейти непосредственно к строке, отмеченной закладкой, выбрав эту строку во всплывающем меню «Закладки».
Закладки, установленные во всех открытых файлах, будут отображаться во всплывающем меню, а файл, в котором установлена
закладка, автоматически станет активным окном при выборе закладки.
Visual Studio Code — это редактор с открытым исходным кодом, и сообщество добавило к нему множество
расширений. Например,Постпроцессор Autodesk Fustion 360Утилита является расширением этого редактора.
Открыв всплывающее окно «Расширения», вы увидите, какие расширения вы установили и для каких
расширений ожидаются обновления.
Если естьОбновить до хххотображается вместе с расширением, вы можете нажать эту кнопку, чтобы установить последнюю
версию соответствующего расширения.
Вы можете искать в Visual Studio Marketplace расширения, полезные для вашего стиля редактирования, введя имя в
полеПоисковые расширения в Marketplaceполе. Например, если вам нужен более специализированный способ
установки закладок, вы можете ввести закладку в это поле, и будут отображаться все расширения, связанные с
добавлением закладок. Вы можете нажать зеленыйУстановитькнопку для установки расширения.
В этом разделе будут рассмотрены некоторые из наиболее часто используемых функций. Вы обязательно обнаружите другие функции
при использовании редактора.
2.4.1 Автозаполнение
Когда вы вводите имя переменной или функции, вы заметите всплывающее окно, в котором будут показаны ранее
использовавшиеся имена, которые соответствуют тексту, когда он был введен. Выберите одно из предложений с помощью
клавиш со стрелками, чтобы выделить имя, а затем клавиша табуляции, чтобы выбрать его, вставит это имя в то место, где вы
печатаете.
Вы можете закрыть окно, нажав X в нижнем колонтитуле окна или X в правом верхнем углу окна
Проблемы.
Соответствующие скобки
ключ+ключ Ctrl+Shift+Ввод ключэто название клавиши, которую нужно нажать. Символ + означает,
что клавиши должны быть нажаты одновременно. Клавиша + не
нажата.
ключ ключ Ctrl+K Ctrl+S Клавиши следует нажимать последовательно, одну за другой. Каждая
клавиша может быть комбинацией нескольких клавиш, которые нажимаются
одновременно, как описано выше. Пока неСдвигявляется частью ключевой
последовательности, то указываются строчные буквы.
Синтаксис сочетания клавиш
Запуск команды
Команда Описание
Почтовая утилита Отображает меню, в котором вы можете выполнить
постобработку выбранного промежуточного файла (ЧПУ) в
открытом постпроцессоре, выбрать новый файл ЧПУ или
отобразитьСправка Autodesk Postокно. Вы также можете
использовать ярлыкCtrl+Alt+Gдля запуска постпроцессора.
Если вы добавляете новое свойство в сообщение или по какой-то причине свойства не отображаются, вы можете нажать желтый
символ обновления в заголовке свойств сообщения, чтобы обновить отображаемые свойства.
При первом запуске постпроцессора в редакторе возможно, что местонахождение исполняемого файла
постпроцессора (post.exe) неизвестно. В этом случае вы увидите следующее сообщение.
имя пользователяэто ваше имя пользователя, под которым вы вошли в систему.(я бы)— это уникальное и длинное имя,
которое меняется в зависимости от установленной версии Fusion 360. Обычно вы выбираете папку с самой последней
датой.
После публикации файла ЧПУ выходной файл ЧПУ или файл журнала будут отображаться на правой
панели разделенного экрана. КогдаHSMPosUtility: включить автоматический выбор строкизначение true,
то двойное нажатие на строку в выходном файле ЧПУ выделит строку в постпроцессоре,
сгенерировавшем выходные данные. Второй щелчок должен быть на другом символе в той же строке
вывода, чтобы выделить строку. Затем, нажав на другой символ в той же строке, вы пройдете через стек
функций, которые были вызваны при генерации вывода.
Выходной файл ЧПУ, дважды щелкните строку вывода, чтобы увидеть код, который сгенерировал вывод
Сначала вам нужно будет скачатьэкспортировать файл ЧПУ в vs code.cpsпостпроцессор. Вы можете сделать
это, запустивСкачать экспортный постпроцессор ЧПУкоманда.
Появится файловый браузер, который позволит вам выбрать папку, в которую вы хотите загрузить
пост. Следуйте указаниям вЗагрузка и установка постпроцессорараздел для установки постпроцессора
в вашей системе.
После того, как постпроцессор будет установлен, вы захотите выполнить постобработку операций, которые хотите
использовать для тестирования. Постпроцессор экспорта ЧПУ запускается так же, как и любой другой постпроцессор
Autodesk, за исключением того, что он не генерирует код ЧПУ, а создает копию файла ЧПУ из системы Autodesk CAM вОбычай
расположениеСелектор ЧПУпапка. В большинстве сообщений для имени выходного файла используется число,
рекомендуется дать файлу ЧПУ уникальное имя, описывающее операции, которые использовались для его создания.
Как только вы нажмете желтую кнопку обновления, вы должны увидеть файл ЧПУ вОбычайотделениеСелектор ЧПУlist и
может использовать его при постобработке из редактора VSC. Если вы решите, что вам больше не нужен пользовательский
промежуточный файл ЧПУ, вы можете удалить его, щелкнув правой кнопкой мыши файл ЧПУ и выбрав Удалить файл ЧПУ.
3 Обзор JavaScript
3.1 Обзор
Постпроцессоры Autodesk написаны на языке JavaScript. Он похож на языки программирования C, C++ и Java,
является интерпретируемым, а не компилируемым языком, и является объектно-ориентированным. JavaScript,
используемый для разработки постпроцессоров, довольно прост для изучения и понимания, но все же сохраняет
свою сложную природу для более продвинутых программистов.
В этой главе рассматриваются основы языка JavaScript и соглашения, используемые в постпроцессорах Autodesk.
Существует множество веб-сайтов, документирующих язык JavaScript. ТоКРАСНОЯВНЫЙ ЯВАСКРИПТ сайт имеет
красиво оформленный формат. Если вы предпочитаете печатное руководство по JavaScript, то Полное
руководство по JavaScript, Автор: Дэвид Фланаган, Издатель: O'ReillyРекомендовано. Какое бы руководство вы ни
использовали, вы захотите сосредоточиться на основном синтаксисе JavaScript и игнорировать браузерные и
клиентские аспекты языка.
JavaScript игнорирует пробелы и новые строки между переменными, операторами, именами и символами-разделителями. В именах
переменных и функций не должно быть пробелов, так как это приведет к созданию отдельных объектов.
Есть два метода определения комментариев в JavaScript. Вы можете либо заключить комментарии между
символами /* и */, тогда весь текст между этими разделителями будет считаться комментарием, либо поместить
символы // перед текстом комментария.
То/*комментарий */Формат обычно используется в качестве описательного заголовка функции или для выделения нескольких строк
кода. Любые символы в строке, которые следуют за символами //, рассматриваются как комментарий, поэтому вы можете
использовать одну строку комментария или добавить комментарий в конец инструкции JavaScript.
/**
Вывести комментарий.
*/
функция writeComment(текст) {
writeln(formatComment(текст));//написать строку комментария
}
..
/*
переключатель (блок) {
дело В:
writeBlock(gUnitModal.format(20));
ломать;
чехол ММ:
writeBlock(gUnitModal.format(21));
ломать;
}
*/
Строки комментариев
Рекомендуется использовать отступы для содержимого функций, блоков, циклов и строк продолжения, поскольку это
упрощает визуализацию кода. Символы табуляции, хотя и поддерживаются JavaScript, не рекомендуется использовать.
Предпочтительно использовать виртуальные позиции табуляции из двух пробелов для отступа кода в коде постпроцессора.
Большинство редакторов, в том числе Autodesk Post Processor Editor, можно настроить на автоматическое преобразование
символов табуляции в пробелы, при этом каждый отступ будет выравниваться по двум пробелам. Обратитесь к главе
«Редактор постпроцессора», чтобы узнать, как настроить рекомендуемый Autodesk редактор.
3.3 Переменные
Переменные — это просто имена, связанные со значением. Значение может быть числом, строкой, логическим значением, массивом
или объектом. Переменные в JavaScript нетипизированы, что означает, что они определяются значением, которое они им присвоили,
и тип значения может меняться в течение всей программы. Например, вы можете присвоить число переменной, а позже в программе
вы можете присвоить той же переменной строковое значение. Товар ключевое слово используется для определения переменной.
Хотя вы можете включить несколько объявлений переменных в один и тот жеварline, это противоречит стандарту,
используемому для постпроцессоров, и не рекомендуется. Вы также можете неявно создать переменную, просто
присвоив значение имени переменной без использованияварключевое слово, но также не рекомендуется. При
объявлении новой переменной не используйте то же имя, что и ключевое слово JavaScript или Post Kernel,
например, не называйте ее.вар, для, цикл, текущий раздел,и т. д. Обратитесь к соответствующей документации за
списком ключевых слов/переменных, выделенных в JavaScript или Post Kernel.
JavaScript поддерживает как глобальные, так и локальные переменные. Глобальная переменная определяется вне области
действия функции, например, в начале файла перед определением каких-либо функций. Глобальные переменные доступны
для всех функций внутри программы и будут иметь одно и то же значение от функции к функции. Локальные переменные
доступны только внутри функции, в которой они определены. Вы можете использовать одно и то же имя для локальных
переменных в нескольких функциях, и каждая из них будет иметь свое уникальное значение в отдельных функциях. В
отличие от языков C и C++, локальные переменные, определенные в блоке или цикле if, доступны для всей функции и не
являются локальными для блока, в котором они определены.
3.3.1 Числа
Помимо содержания стандартного числового значения, переменная, присвоенная числу, создаетЧислообъект. Для
этого обсуждения мы будем рассматривать объект как переменную со связанными функциями. Эти функции
относятся к номерам и перечислены в следующей таблице.
вар а = 12,12345; b =
a.toExponential(2); b = // b = "1.21e+1" //
a.toFixed(3); b = "12.123"
б = а.toString(); // б = "12.12345"
Вывод номера образца
Встроенный в JavaScript объект Math содержит функции и константы, применимые к числам. В следующей таблице перечислены
математические функции и константы, которые, скорее всего, будут использоваться в постпроцессоре. Все математические функции
возвращают значение.
Math.atan2(y, x) Угол против часовой стрелки между положительной осью X и точкойх, ув радианах
Math.cos(x) косинусИкс
Мат.тангенс(х) ТангенсИкс
Math.NaN Значение, соответствующее свойству не числа
Математический объект
а = Math.sqrt(4); // а = 2
а = Math.round (4,59); // а = 5
а = Math.floor (4,59); // а = 4
Обзор JavaScript 3-48
Руководство по постпроцессору CAM 08.12.21
а = Math.PI; // а = 3,14159
a = Math.cos(toRad(45)); a = // а = 0,7071
toDeg(Math.acos(.866)); // а = 60
Пример вывода математического объекта
Все математические тригонометрические функции работают в радианах. На самом деле, большинство функций, которые
передают углы в постпроцессор, работают в радианах. Существуют функции, предоставляемые ядром, которые доступны
для преобразования между радианами и градусами.доградус(х)возвращает градусный эквивалент значения в радианахИкс
и наобороткрад(х)функция возвращает эквивалент значения градуса в радианахИкс.
3.3.2 Строки
Переменные, которым назначена текстовая строка, создадутНитьобъект, который содержит полный набор функций, которые можно
использовать для управления строкой. Эти функции специфичны для строк и перечислены в следующей таблице. В таблице
подробно описано основное использование этих функций, как если бы вы использовали их в постпроцессоре. Некоторые функции
принимаютрегулярное выражениеобъект, который не рассматривается в этом руководстве, пожалуйста, обратитесь к специальному
руководству по JavaScript для описания этого объекта.
lastIndexOf (подстрока, начало) Находит последнее вхождениеподстрока внутри Место последнего появления
строки.Началоявляется необязательным и подстрокавнутри строки.
указывает начальное местоположение в строке, с
которого начинается поиск.
буквы.
toUpperCase() Преобразует строку во все буквы верхнего Строка в верхнем регистре.
регистра.
Булевы значения — самые простые из типов переменных. Они содержат значение либоистинныйизложный, которые являются ключевыми
словами JavaScript.
if (a) {
3.3.4 Массивы
Массив — это составной тип данных, в котором значения хранятся в последовательном порядке. Каждое значение,
хранящееся в массиве, считается элементом массива, а позиция в массиве называется индексом. Каждый элемент массива
может быть переменной любого типа, и каждый элемент может иметь тип переменной, отличный от других элементов
массива.
Массив, как числа и строки, считается объектом со связанными с ним функциями. Вы можете определить массив, используя
два разных метода, как пустой массив, используя новыйМножествообъекта или путем создания литерала массива с
определенными значениями для массива. Вы можете указать начальный размер массива при определенииМножество
объект. Начальный размер массива, определенного со значениями, представляет собой количество значений,
содержащихся в инициализации.
вар а = новый массив(); var a // создает пустой массив, все значения присваиваются
= новый массив (10); неопределенный // создает пустой массив из 10 элементов
Вы можете получить доступ к элементу массива, используя квадратные скобки [ ]. Имя массива появится
слева от скобок, а индекс элемента в массиве — внутри скобок. Индекс может быть простым числом или
уравнением.
присоединиться (разделитель) Объединяет все элементы массива в строку. Строка, содержащая элементы массива.
разделительявляется необязательным и
указывает строку, используемую для
разделения элементов массива. По умолчанию
используется запятая.
3.3.5 Объекты
АнОбъектпохож на массив тем, что хранит несколько значений в одной переменной. Разница в том, что объекты
используют имя для каждой подсущности, а не полагаются на указатель индекса в массиве. То характеристикитаблица в
постпроцессоре является объектом. Вы можете определить объект, используя два разных метода, явно используяОбъект
ключевое слово или неявно путем создания литерала объекта с определенными именами и значениями для объекта.
Каждая именованная сущность внутри объекта может быть любым типом переменной, числом, строкой, массивом,
логическим значением и другим объектом. Объекты также могут храниться в массиве.
Объекты могут быть расширены для включения дополнительных именованных элементов в любое время и не ограничиваются
именованными элементами при их создании.
Атрибут Описание
пресс Содержит абсолютные координаты
вектора
длина Содержит длину вектора
длина2
отрицал Содержит отрицательный вектор
Вы можете напрямую изменить атрибут вектора, но если вы это сделаете, остальные атрибуты не будут
обновлены. Например, если вы напрямую сохраняете значение вИксатрибут,vec.x = 0,707,длинаатрибут вектора
не будет обновляться. Вы должны использоватьvec.setX(.707)метод вместо этого.
Если в столбце «Возвраты» в следующей таблицеСкрытый, то возвращаемого значения нет, аВектор объект,
связанный с функцией, изменяется неявно. По этой причине, если вы собираетесь вложить Векторфункцию
внутри выражения, используйте не неявную функцию, а эквивалентную функцию, которая возвращает вектор.
компонента в векторе
получитьминимум() Определяет минимальное значение Минимальная стоимость компонента
компонента в векторе
получить отрицательный () Вычисляет отрицательный вектор Вектор под углом 180 градусов к вектору
объекта (вектор * -1)
вектором (0,0,0)
Вектор.получить угол() Вычисляет угол между двумя Угол между двумя векторами в
векторами радианах
Vector.getDistance(слева, справа) Вычисляет расстояние между двумя Расстояние между двумя точками
векторами. Обычно используется, когда
векторы хранят пространственные
координаты XYZ, а не векторы.
Vector.getDistance2 (слева, справа) Вычисляет квадрат расстояния Квадрат расстояния между двумя точками.
между двумя векторами.
Vector.lerp(слева, справа, u) Вычисляет точку в процентах от Укажите в процентах от линии
расстояния между двумя между двумя точками
координаты. 'у' указывает
Некоторые переменные постпроцессора хранятся в виде матриц, напримеррабочая плоскостьпеременная, а некоторые функции
требуют в качестве входных данных матрицы. АМатрицаобъект имеет функции, которые можно использовать при создании
матрицы и не зависят от работы с существующей матрицей.
Матрица (i1, j1, k1, i2, j2, k2, i3, j3, k3) Каноническая матрица
Атрибуты матрицы
Вы можете напрямую изменить атрибут матрицы, но если вы это сделаете, остальные атрибуты не будут обновлены.
Например, если вы напрямую сохраняете вектор ввпередатрибут, другие атрибуты не будут обновлены, чтобы
отразить это изменение. Вы должны использоватьmatrix.setForward(вектор)метод вместо этого.
Если в столбце «Возвраты» в следующей таблицеСкрытый, то возвращаемого значения нет, аМатрица объект,
связанный с функцией, изменяется неявно. По этой причине, если вы собираетесь вложить Матрицафункцию
внутри выражения, используйте не неявную функцию, а эквивалентную функцию, которая возвращает
матрицу.
быть правым() Возвращает правильный вектор. Это будет Правый вектор матрицы
1,0,0 в единичной матрице
получитьСтрока(строка) Извлекает строку матрицы как вектор Вектор, содержащий указанную строку
этой матрицы
getTiltAndTilt(первый, второй) Вычисляет повороты по осям X и Y вокруг Вычисленное прямое направление этой
фиксированного кадра для соответствия прямому матрицы
направлению. 'first' и 'second' могут принимать
значения 0 или 1 и должны быть разными.
getTurnAndTilt (первый, второй) Вычисляет повороты по осям X, Y, Z вокруг Расчетное направление вперед
фиксированного кадра для соответствия прямому
направлению. 'first' и 'second' могут быть равны
0, 1 или 2 и должны быть
разные.
вставать() Возвращает вектор вверх. Это будет Правый вектор матрицы
0,1,0 в единичной матрице
isIdentity() Определяет, является ли матрица Истинно, если это единичная матрица
единичной матрицей (1,0,0, 0,1,0, 0,0,1).
матрицу матрицу
Matrix.diff(слева, справа) Вычисляет разницу между двумя Левая матрица минус правая матрица
матрицами
Matrix.getAxisRotation(вектор, угол) Вычисляет матрицу вращения Матрица вращения «угла»
радиан вокруг оси «вектор»
Matrix.getXRotation(угол) Вычисляет матрицу вращения Матрица вращения «угловых»
вокруг оси X радиан вокруг оси X
Matrix.getXYZRotation(abc) Вычисляет матрицу поворота для Матрица поворота, удовлетворяющая
заданных углов указанным поворотам XYZ
var abc = m.getEuler2 (EULER_ZXZ_R); вар // abc = ZXZ углы Эйлера для m // t =
т = m.getTransposed(); обратная/транспонированная матрица m //
var fwd = m.getForward(); var fwd = прямой (Z) вектор матрицы m
v = новый вектор (0, 0, 1); var
q = m.multiply(v); // q = преобразование v через матрицу m // r =
var r = Matrix.getZRotation(toDeg(30)); матрица, повернутая на 30 градусов относительно Z
Примеры матричных выражений
3.4 Выражения
Переменным может быть присвоено простое значение или текстовая строка, или они могут иметь более сложный
характер, содержащий список переменных или литералов и операторов, которые выполняют операции над значениями,
содержащимися в выражении. В следующей таблице перечислены общие операторы, поддерживаемые JavaScript. и
предоставляет образцы с использованием операторов. Также указан приоритет операций (столбец P), где операторы с
более высоким номером приоритета выполняются перед операторами с более низким номером приоритета. Операторы с
одинаковым номером приоритета будут вычисляться в том порядке, в котором они появляются в выражении.
Унарные операторы требуют только одного операнда вместо двух. Например,у = х++будет увеличивать
переменнуюИкспосле присваивания переменнойу.
% Число Остаток
10 + Число, Строка Добавление
- Число вычитание
9 << Целое число Побитовый сдвиг влево
3 5 г=х+у*3 18 г = (х + у) * 3 24
г = ++ х г = 4, х = 4 г = х++ г = 3, х = 4
х += у 8 х *= у 15
г=у/х 1,667 г = у% х 2.0
"Начинать" "-Конец" г=х+у "Начать конец" х += у "Начать конец"
2 3 г=хиу 2 г=х|у 3
1 "1" г = х == у истинный х === у ложный
Примеры выражений
3.5.1 Оператор if
Тоеслиоператор является наиболее распространенным методом тестирования условного оператора и выполнения операторов на
основе результатов теста. Он может содержать одно тело операторов, которые должны выполняться, когда выражение истинно,
второе тело операторов, которое нужно выполнять, когда выражение ложно, или может содержать несколько условных выражений,
которые проверяются по порядку с помощьюиначе, еслипостроить.
Как и все команды, влияющие на код,еслиоператоры могут быть вложены внутри другихеслитела и петли.
если (условный1) {
// выполнить код, если conditional1 истинен
}
если (условный1) {
// выполнить код, если условие 1
истинно } else {
// выполнить код, если conditional1 ложно
}
если (условный1) {
// выполнить код, если условие1 истинно }
иначе если (условие2) {
// выполнить код, если условие1 ложно, а условие2 истинно }
else {
// выполнить код, если все условия ложны
}
Если синтаксис оператора
если (имеетПараметр("операция-комментарий")) {
комментарий = получитьпараметр("операция-комментарий");
}
если (isProbeOperation()) {
var workOffset = probeOutputWorkOffset ? probeOutputWorkOffset : currentWorkOffset; если
(workOffset > 99) {
error(localize("Рабочее смещение вне допустимого диапазона.");
возвращение;
Синтаксисвыключательbodys будет содержать один оператор switch с переменной, значение которой определяет
исполняемый код.кейсзаявления будут включены ввыключательbody, каждый из которых содержит значение,
вызывающее выполнение тела кода. Конец каждогокейстело кода должно иметьломатьзаявление, чтобы следующее
кейстело кода не выполняется. Адефолтможет быть определен оператор, содержащий код, который будет
выполняться, есливыключательпеременная не соответствует ни одному изкейс ценности.
кейсоператоры должны соответствовать стандарту Autodesk, который всегда включает указание открывающей
скобки ({) ввыключательстроку и закрывающую скобку (}) в начале строки в конце тела кода для каждого
раздела. Токейсзаявления будут согласованы свыключательоператор и весь код внутри каждого кейстело будет
с отступом.
переключатель (переменная) {
значение случая1:
break;
значение случая2:
case значение3:
умолчанию:
случай COOLANT_FLOOD:
м = 8;
ломать;
чехол COOLANT_THROUGH_TOOL:
м = 88;
ломать;
случай ХЛАДАГЕНТ_ВОЗДУХ:
м = 51;
ломать;
дефолт:
}
}
Примеры блоков переключателей
Тотипза оператором следует одно имя операнда, т.е. "переменная typeof". Он может возвращать следующие
строковые значения.
номер "номер"
нить "нить"
логический "логическое"
написатьБлок(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(82),
getCommonCycle(x, y, z, cycle.retract),
условный (P > 0, "P" + миллиФормат.формат (P)), // необязательный
feedOutput.format(F)
);
условное использование
Сусловныйявляется функцией, любые вызовы функций, содержащиеся в аргументах, будут обработаны, даже если выражение равно false.
Это означает, что если модальное значение используется для форматирования значения, значение будет отформатировано перед
вычислением выражения, и текущее значение модального выражения будет установлено с использованием этого значения, даже если
значение не выводится.
3.5.6 попробовать/поймать
Топопробуй пойматьblock — это механизм обработки исключений. Это позволяет постпроцессору контролировать
результат исключения. В зависимости от возникшего исключения код JavaScript может продолжить обработку или
завершиться с ошибкой. Топопробуй пойматьблок используется для переопределения нормальной обработки
исключений в JavaScript.
пытаться {
поймать(е) {
проверить(выражение, error_message)
проверить синтаксис
вар а = 3,141592654;
переменная b = 3,141593174;
// простое сравнение
если (а == б) { //ложный
Синтаксис операторов цикла должен соответствовать стандарту Autodesk: всегда включать скобки {} вокруг
каждой части кода, указывать открывающую скобку ({) в операторе цикла и закрывающую скобку (}) в начале
строки, следующей за оператором цикла. тело кода для цикла. Циклы могут быть вложены в другие части кода,
такие как условные операторы или другие циклы.
for (var i = 0; i < getNumberOfSections(); ++i) { // цикл для количества разделов в промежуточном файле
если (getSection(i).workOffset > 0) {
error(localize("Использование нескольких рабочих смещений невозможно, если начальное рабочее смещение равно 0."));
возвращение;
}
}
// тело цикла
}
Синтаксис цикла
делать {
// тело цикла
} пока (выражение)
do/while Синтаксис цикла
переменная я = 0;
делать {
ломатьв значительной степени обязателен с операторами switch. Для петель,ломатьможет использоваться для выхода из
цикла при обнаружении ошибки или при обнаружении определенного шаблона в массиве.
3.7 Функции
Функции в JavaScript ведут себя так же, как и функции в других языках программирования высокого уровня. В
постпроцессоре весь код, кроме глобальных настроек вверху файла, содержится в функциях, либо входных функциях (
onOpen,onSectionи т. д.) или вспомогательные функции (написатьБлокировать, setWorkPlane, и т.д.). Код в функции не
будет обработан до тех пор, пока эта функция не будет вызвана из другой подпрограммы (ради ясности, вызывающая
функция будет называться «подпрограммой» в этом разделе). Вот основные причины размещения кода в отдельной
функции, а не его программирования в подпрограмме верхнего уровня, которая вызывает функцию.
1. Один и тот же код выполняется в разных областях кода либо из одной функции, либо из нескольких
функций. Размещение общего кода в отдельной функции устраняет дублирование кода из файла, что
упрощает его понимание и поддержку.
Список аргументов является необязательным и содержит идентификаторы, которые передаются в функцию вызывающей
подпрограммой. Аргументы, переданные функции, считаются доступными только для чтения для вызывающей процедуры, а это
означает, что любые изменения этих переменных будут храниться локально для вызываемой функции и не распространяться на
вызывающую процедуру. Вы используетевозвращениеОператор для возврата значений вызывающей программе.
функция writeComment(текст) {
writeln(formatComment(текст)); // текст принимается в качестве аргумента и передается в formatComment
}
Пример функции Определение
Аргументы, принимаемые функцией, могут быть либо именованными идентификаторами, как показано в предыдущем
примере, либо вы можете использоватьаргументымассив для ссылки на аргументы функции. Тоаргументымассив встроен в
JavaScript и рассматривается как любой другойМножествообъект, что означает, что он имеет свойство длины и доступ к
Множествоатрибуты и функции.
TransferType = parseChoice(getProperty("transferType"),"ФАЗА","СКОРОСТЬ","СТОП"); …
функция parseChoice() {
для (var я = 1; я <аргументы.длина; ++я) {
если (строка(аргументы[0]).toUpperCase() == Строка(аргументы [я]).toUpperCase()) {
вернуть я - 1;
}
}
возврат -1;
}
Пример использования массива аргументов
вернуть [выражение]
Синтаксис инструкции return
Возвращаемое значение может быть любым допустимым типом переменной; число, строка, объект или массив. Если
вы хотите вернуть несколько значений из функции, вы должны вернуть либо объект, либо массив. Вы также можете
распространять JavaScriptэтообъект, который будет автоматически возвращен вызывающей процедуре при
достижении конца функции или при обработке оператора return без выражения. Еслиэто используется объект, то
функция будет использоваться для создания нового объекта, и вам нужно будет определить вызов функции, как если
бы вы создавали объект любого другого типа, как показано в следующем примере.
функция writeComment(текст) {
writeln(formatComment(текст)); }//
неявный возврат
функция parseChoice() {
for (var i = 1; i < arguments.length; ++i) {
if (String(arguments[0]).toUpperCase() == String(arguments[i]).toUpperCase()) {
вернуть я - 1;//вернуть соответствующий выбор
}
}
возврат -1;//вариант возврата не найден
}
4 функции ввода
Функции ввода постпроцессора представляют собой интерфейс между ядром и постпроцессором. Функция Entry
будет вызываться для каждой записи в промежуточном файле. Какая функция Entry вызывается, определяется
типом записи промежуточного файла. Все функции ввода имеют префикс on, поэтому рекомендуется не
использовать этот префикс ни с какими функциями, которые вы добавляете в постпроцессор.
Вот список поддерживаемых функций ввода и когда они вызываются. В следующих разделах этой главы
представлена более подробная документация по наиболее распространенным функциям входа.
Входные функции
В то время как глобальная секция обычно располагается в верхней части постпроцессора, любые переменные,
определенные вне функции, находятся в глобальной секции и доступны для всех функций, даже для функций, определенных
до переменной. Вы можете заметить, что глобальные переменные определяются в середине кода постпроцессора
непосредственно перед функцией. Это позволяет легко вырезать и вставлять группу функций из одного поста в другой,
включая необходимые глобальные переменные.
Параметр Описание
разрешенокруговыеплоскости Определяет разрешенные круговые плоскости. Эта настройка описана в
onCircularраздел.
разрешить HelicalMoves Указывает, разрешены ли винтовые перемещения. Эта настройка описана
вonCircularраздел.
разрешитьSpiralMoves Указывает, разрешены ли спиральные движения. Эта настройка описана в
onCircularраздел.
возможности Определяет возможности постпроцессора. Возможности
могут быть CAPABILITY_MILLING, CAPABILITY_TURNING,
CAPABILITY_JET, CAPABILITY_SETUP_SHEET и
mapToWCS = истина;
mapToWCS = ложь;
картаРаботаПроисхождение Указывает, сопоставляются ли координаты с началом координат рабочей плоскости. При
отключении столб отвечает за обработку начала рабочей плоскости. Эта переменная должна
быть определена с использованием следующего синтаксиса и может быть определена только
в разделе global. Любое отклонение от этого формата, включая добавление дополнительных
пробелов, приведет к игнорированию этой команды.
MapWorkOrigin = Истина;
mapWorkOrigin = ложь;
максимальныйкруговойрадиус Задает максимальный радиус круговых перемещений, который может
быть выведен как круговая интерполяция и может динамически
изменяться в таблице свойств при запуске постпроцессора. Эта настройка
описана в onCircularраздел.
максимальная круговая развертка Определяет максимальную круговую развертку круговых перемещений, которая может
быть выведена как круговая интерполяция. Эта настройка описана вonCircular раздел.
описание = "РС-274Д";
продавец = "Autodesk";
vendorUrl = "http://www.autodesk.com";
юридический = "Авторское право (C) 2012-2017 Autodesk, Inc.";
уровень сертификации = 2;
минимальная версия = 24000;
longDescription = "Общий пост для формата RS-274D. Большинство ЧПУ используют формат, очень
похожий на RS-274D. При создании поста для нового ЧПУ этот пост часто служит основой.";
расширение = "нк";
setCodePage("ascii");
Свойства могут отображаться в нескольких областях HSM; когда вы используете диалоговое окно «Постобработка»
для запуска постпроцессора в программе ЧПУ, на вкладке «Постобработка» в конфигурации станка и на вкладке
«Постобработка» операции. Когда вы выполняете постобработку из HSM или редактируете программу ЧПУ, вам
может быть представлено диалоговое окно, позволяющее выбрать исполняемый постпроцессор, путь к выходному
файлу и другие настройки. Таблица свойств также будет отображаться в диалоговом окне, позволяя вам
переопределять настройки постпроцессора при каждом его запуске.
Таблица свойств определяется в постпроцессоре, поэтому у вас есть полный контроль над отображаемой в ней
информацией, за исключениемВстроенныйсвойства, которые отображаются с каждым постпроцессором и определяют
переменные постядра, описанные ранее. ТохарактеристикиОбъект, определенный в постпроцессоре, определяет
имена свойств, используемые в постпроцессоре, заголовки, отображаемые в таблице свойств, допустимые типы
ввода, значения по умолчанию, присвоенные каждому свойству, и настройки, управляющие атрибутами отображения
свойства в таблицу свойств.
// определяемые пользователем
свойства свойства = {
написатьМашина: {
title: "Машина записи",
description: "Вывести настройки машины в шапку кода.",
Функции ввода 4-75
Руководство по постпроцессору CAM 08.12.21
группа: "общая",
тип: "булев",
значение: правда,
},
использовать сглаживание: {
}, …
}
Определение таблицы свойств
Имущество Описание
заглавие Описание свойства, отображаемое в пользовательском интерфейсе в
Имуществостолбец.
описание Описание свойства, отображаемое в виде всплывающей подсказки при
наведении мыши на это свойство.
группа Имя группы, к которой принадлежит это свойство. Все свойства с одинаковым именем
группы будут отображаться вместе в пользовательском интерфейсе. Группы
определяютсяgroupDefinitionsобъект, обсуждаемый далее в этой главе.
тип Определяет тип ввода. Типы ввода описаны в следующей таблице.
ценность Значение по умолчанию для этого свойства.
"перечисление" Топеречислениетип ввода определяет эту переменную как имеющую фиксированный выбор, связанный
с ней. Эти варианты определяются индивидуально вценностимассив свойств. Анперечислениетип ввода
должен быть определен с использованием строковых значений.
Типы ввода таблицы свойств
1. Свойство операции
2. Опубликовать свойство
3. Свойство машины
Таким образом, если свойство определяется какПочтаиоперацияпараметр, то настройки, сделанные в диалоговых окнах
постобработки и программы ЧПУ, будут игнорироваться постпроцессором, постпроцессор будет использовать только
настройки, сделанные в каждой отдельной операции. Единственное место, где вы сможете запросить настройку свойства
Post Process, находится вonOpenпри использованииполучить свойствофункция.
homePositions: {название: "Исходные позиции G53", свернуто: правда, порядок: 3}, зацикливание:
{название: "Зацикливание", свернуто: правда, порядок: 4},
общие: {заголовок: "Общие", свернуто: правда, порядок: 5} };
Имущество Описание
заглавие Название группы отображается вСвойства сообщенияТаблица. Заголовок не отображается в
устаревшем диалоговом окне постобработки.
Группы свойств
Аргументы Описание
имущество Свойство, значение которого вы хотите получить. Его можно указать как текстовую
строку («useSmoothing») или как прямую ссылку на свойство (properties.useSmoothing).
Рекомендуется использовать синтаксис текстовой строки.
Аргументы Описание
имущество Свойство, для которого вы хотите установить значение. Его можно указать как текстовую
строку («useSmoothing») или как прямую ссылку на свойство
(свойства.useSmoothing). Рекомендуется использовать синтаксис текстовой строки.
ценность Значение для установки свойства.
ТосоздатьформатКоманда определяет, как коды форматируются перед выводом в файл ЧПУ. Его можно использовать
для создания полного формата выходного кода, включая буквенный префикс, или для создания основного формата,
на который ссылаются выходные определения. Он имеет следующий синтаксис.
Спецификаторы должны быть заключены в фигурные скобки ({}) и содержать имя спецификатора, за которым следует двоеточие
(:), а затем значение. Несколько спецификаторов разделяются запятыми.
Спецификатор Ценность
префикс Определяет префикс выходного значения в виде текстовой строки. Префикс следует определять
только в том случае, если это автономный формат и он не используется для множественных
определений вывода.
суффикс Определяет суффикс выходного значения в виде текстовой строки. Суффикс следует определять
только в том случае, если это автономный формат и он не используется для множественных
определений вывода.
десятичные дроби Определяет количество цифр справа от десятичной точки для вывода. По
умолчанию 6.
силаДесятичный При установке наистинныйдесятичная точка всегда будет включена в
форматированное число.ложныйудалит десятичную точку для целых значений.
силаПодписать При установке наистинныйзаставит выводить знак плюс (+) для положительных
чисел. По умолчаниюложный.
ширина Задает минимальную ширину выходной строки. Если ширина
отформатированного значения меньше, чемшириназначение, то начало числа
будет либо заполнено пробелами, либо нулями в зависимости от значения
нольпад.Если формат используется для вывода кода в файл ЧПУ, обязательно
установитенольпадкистинный, иначе префикс и значение могут быть разделены
пробелами. Ширина выходной строки включает десятичную точку, когда она
входит в число, но не знак числа. Значение по умолчанию – 0.
нольпад При установке наистинныйзаполнит начало выходной строки нулями, чтобы
соответствовать указанной ширине. Еслиширинане указан или выходная строка
длиннее, чемширина, то нули добавляться не будут. По умолчаниюложный.
подрезать При установке наистинныйконечные нули будут обрезаны справа от десятичной
точки. По умолчаниюистинный.
обрезатьLeadZero При установке наистинныйурежет начальный нуль из числа с плавающей запятой, если
число является дробным, например, 0,123 вместо 0,123. По умолчаниюложный.
масштаб Определяет коэффициент масштабирования, на который умножается значение перед его форматированием
компенсировать Определяет число, которое нужно добавить к значению перед его форматированием для вывода. Значение по
умолчанию – 0.
Один разформатсоздан, его можно использовать для создания форматированной текстовой строки значения, которое
соответствует свойствам в определенномформат. В следующей таблице описаны функции, определенные вформат объект.
Функция Описание
различаются(а, б) Возвращаетистинныйесли входные значения отличаются после форматирования.
формат(значение) Возвращает форматированное текстовое строковое представление числа.
получитьОшибка(значение) Возвращает инверсию оставшейся части значения, не отформатированного для
числа. Например, если отформатированное значение 4,5005 равно «4,500», то
значение, возвращаемое изполучитьОшибкабудет -0,0005.
получитьминимальное значение() Возвращает минимальное значение, которое можно отформатировать с помощью этогоформат,
getResultingValue Возвращает реальное значение, которое представляет отформатированная выходная текстовая строка.
(ценность)
var toolFormat = createFormat({префикс: "T", десятичные знаки: 0, нулевая панель: истина, ширина: 2});
инструментФормат.формат(7); // возвращает "Т07"
Тосоздать переменнуюиcreateModalобъекты могут использоваться взаимозаменяемо, поскольку они оба выводят только те
значения, которые изменились. В постпроцессоре вы увидите, чтоcreateModalобъект используется для вывода модальных
групп G-кода или М-кода, где несколько кодов могут быть выведены в одном блоке и будут выведены только тогда, когда код
изменит значение по сравнению с предыдущим кодом в этой группе. То создать переменнуюобъект используется для всего
остального вывода кода/регистра, такого как регистры осей, скорость шпинделя, скорости подачи и т. д. Единственная
разница в этих объектах — функции, которые им принадлежат, например, вы можете отключить вывод переменной, но не
Модальный.
Спецификаторы должны быть заключены в фигурные скобки ({}) и содержать имя спецификатора, за которым следует двоеточие
(:), а затем значение. Несколько спецификаторов разделяются запятыми. Аформатобъект предоставляется в качестве второго
параметра. Некоторые спецификаторы являются общими для всех трех объектов, а некоторые — для конкретного объекта, как
указано в следующей таблице.
по изменению создать переменную Определяет метод, который будет вызываться, когда форматирование
createModal значения приводит к выводу.
суффикс createModal Текстовая строка, которая переопределяет суффикс, определенный вформат.
Топо изменениюСвойство обычно определяет функцию, которая вызывается всякий раз, когда форматирование переменной
приводит к выходной текстовой строке, например, когда значение изменяется или вытесняется. В следующем примере код
gMotionModal вытесняется всякий раз, когда изменяется код плоскости.
После создания выходной переменной ее можно использовать для создания форматированной текстовой строки для
вывода. В следующей таблице описаны функции, назначенные объектам выходных переменных. Функции являются
свойствами определенныхПеременнаяобъект.
Инкрементальная переменная
Область фиксированных настроек в разделе global определяет настройки постпроцессора, которые включают функции,
которые могут меняться от машины к машине, но недостаточно распространены для размещения в таблице свойств. Эти
настройки обычно не изменяются постпроцессором, но их можно изменить, чтобы активировать функции на вашем
компьютере, которые отключены в стандартном постпроцессоре, или наоборот.
// фиксированные настройки
вар WARNING_WORK_OFFSET = 0;
вар ANGLE_PROBE_NOT_SUPPORTED = 0;
вар ANGLE_PROBE_USE_ROTATION = 1; вар
ANGLE_PROBE_USE_CAXIS = 2;
Пример кода фиксированных настроек
// собранное состояние
var номер_последовательности;
переменная текущаяВоркоффсет;
Образец собранного кода состояния
функция onOpen () {
ТоonOpenФункция вызывается в начале каждой операции CAM и может использоваться для определения настроек,
используемых в постпроцессоре, и вывода блоков запуска.
Некоторые из переменных, которые могут быть определены здесь, включают максимальную круговую развертку, начальный
порядковый номер, форматы, свойства, которые можно изменить с помощью команды Manual NC, и т. д.
если (getProperty("useRadius")) {
максимальная круговая развертка = toRad(90);//избежать потенциальных ошибок расчета центра для ЧПУ
}
пытаться {
поймать(е) {
программы; } еще {
Некоторые машины не используют номер программы и принимают имя программы в качестве комментария.
написатьКомментарий(программныйКомментарий);
}
Вывести имя программы в виде комментария
Заголовок программы может состоять из имени выходного файла, номеров версий, даты и времени выполнения,
описания машины, списка инструментов, используемых в программе, и заметок по настройке.
В приведенном выше примере кода информация о машине извлекается из конфигурации машины, но файл
конфигурации машины не всегда доступен для постпроцессора, поэтому можно жестко закодировать описание
машины.
machineConfiguration.setVendor("Doosan");
machineConfiguration.setModel ("Рысь");
machineConfiguration.setDescription(описание);
Определение информации о машине
}
если (zRanges[tool.number]) {
комментарий += "-" + локализовать("ZMIN") + "=" +
xyzFormat.format(zRanges[tool.number].getMinimum());
}
комментарий += "-" + getToolTypeName(tool.type); написать
комментарий (комментарий);
}
}
}
Выходной список используемых инструментов
// собранное состояние
…
вар первая заметка; // обрабатывает вывод заметок из нескольких установок
Определите глобальную переменную firstNote
…
кейс "заметки о работе":
если (!firstNote) {
writeNotes(значение, правда);
}
первое примечание = ложь;
ломать;
}
}
Обработка примечаний к настройке в onParameter
onComment (комментарий);
} еще {
написать(комментарий);
}
}
}
}
}
Функция writeNotesFunction используется для вывода многострочного текста.
если (ложь) {//установите значение true, чтобы проверить дублирующиеся номера инструментов с другой геометрией фрезы
субст(
localize("Использование одного и того же номера инструмента для другой геометрии фрезы для операции "%1" и
'%2'."),
sectioni.hasParameter("операция-комментарий") ?
sectioni.getParameter("операция-комментарий") : ("#" + (i + 1)),
sectionj.hasParameter("операция-комментарий") ?
sectionj.getParameter("операция-комментарий") : ("#" + (j + 1))
)
);
возвращение;
}
}
}
}
}
Проверка дублирующихся номеров инструментов с использованием другой геометрии фрезы
возвращение;
}
}
}
Функции ввода 4-92
Руководство по постпроцессору CAM 08.12.21
Проверьте рабочее смещение 0, когда в программе используется несколько рабочих смещений.
4.3 в разделе
функция в разделе () {
3. Смена инструмента
4. Рабочая плоскость
5. Исходное положение
// отводим в безопасную
плоскость writeRetract(Z);
}
…
…
Функции ввода 4-94
Руководство по постпроцессору CAM 08.12.21
по команде (COMMAND_COOLANT_OFF);
Код для отвода инструмента может варьироваться от сообщения к сообщению, в зависимости от модели контроллера и
конфигурации машины. Он может выводить абсолютное перемещение в исходное положение станка, например, с помощью G53, или
перемещение на заднюю плоскость, соответствующую текущему рабочему смещению, например, G00 Z5.0.
ТоonSectionEndраздел содержит пример завершения операции, если она не была выполнена вonSection
функция.
}
Комментарий операции вывода
// пользовательские
свойства properties = {
…
показатьПримечания: {
: "логическое",
ценность : ложный,
сфера : "Почта"
},
…
}
Определите свойство showNotes
}
Функции ввода 4-96
Руководство по постпроцессору CAM 08.12.21
Примечания к операции вывода
либо с помощью ручного ЧПУ.Принудительная смена инструментапо команде или внутри, например, когда безопасный пуск принудительно
выполняется при каждой операции. Блоки смены инструмента обычно содержат следующую информацию.
Значение смещения длины обычно выводится вместе с начальным положением, как описано далее в этой главе.
Значение смещения диаметра выводится с блоком движения вonLinear. Все остальные параметры инструмента выводятся
в коде смены инструмента.
если (insertToolCall) {
…
если (tool.number > numberOfToolSlots) {
warning(localize("Номер инструмента превышает максимальное значение."));
}
// пользовательские
свойства properties = {
…
preloadTool: {
title : "Инструмент предварительной загрузки",
description: "Предварительно загружает следующий инструмент при смене инструмента (если есть).",
введите : "логическое",
ценность : истинный,
сфера : "Почта"
}
}
Определите свойство preloadTool
если (getProperty("preloadTool")) {
var nextTool = getNextTool («число»); если
(следующий инструмент) {
writeBlock("T" + toolFormat.format(nextTool.number)); }
еще {
// предварительно загрузить первый инструмент
Коды шпинделя будут выводиться при смене инструмента и при изменении скорости шпинделя.
если (вставитьToolCall ||
isFirstSection() ||
(rpmFormat.areDifferent(tool.spindleRPM, sOutput.getCurrent())) ||
(инструмент.по часовой стрелке != getPreviousSection().getTool().по часовой
стрелке)) { if (tool.spindleRPM < 1) {
error(localize("Скорость шпинделя вне диапазона.");
возвращение;
}
если (tool.spindleRPM > 99999) {
warning(localize("Скорость вращения шпинделя превышает максимальное значение."));
}
написатьБлок(
sOutput.format(инструмент.шпиндельRPM), mFormat.format(инструмент.по часовой стрелке ? 3 : 4)
);
}
Выходные коды шпинделя
Вы найдете различные способы вывода кодов охлаждающей жидкости в различных сообщениях. Последний метод использует
таблицу для определения кодов включения и отключения охлаждающей жидкости. Таблица определяется сразу после таблицы
свойств в верхней части постпроцессора. Вы можете определить один код для каждого режима СОЖ или несколько кодов, используя
массив. При добавлении или изменении кодов охлаждающей жидкости, поддерживаемых вашей машиной, это единственная
область кода, которую необходимо изменить.
var singleLineCoolant = ложь; // указывает на вывод нескольких кодов охлаждающей жидкости в одну строку, а не в
отдельные строки
// образцы:
// {id: COOLANT_THROUGH_TOOL, вкл.: 88, выкл.: 89}
// {id: COOLANT_THROUGH_TOOL, вкл: [8, 88], выкл: [9, 89]}
var coolants = [
{id: COOLANT_FLOOD, вкл: 8},
{id: COOLANT_MIST},
{id: COOLANT_THROUGH_TOOL, вкл.: 88, выкл.: 89},
{id: COOLANT_AIR},
{идентификатор: COOLANT_AIR_THROUGH_TOOL},
{идентификатор: COOLANT_SUCTION},
{идентификатор: COOLANT_FLOOD_MIST},
{id: COOLANT_FLOOD_THROUGH_TOOL, вкл: [8, 88], выкл: [9, 89]}, {id:
COOLANT_OFF, выкл: 9}
];
Таблица определения охлаждающей жидкости
ТоsetCoolantФункция выводит каждый код охлаждающей жидкости в отдельных блоках. Он делает это, вызывая getCoolantCodes
функцию для получения кода(ов) охлаждающей жидкости и использованиянаписатьБлокироватьдля вывода каждого отдельного
кода охлаждающей жидкости. Обе эти функции являются общими по своей природе и не должны изменяться.
Возможно, вы захотите вывести коды СОЖ в блоке с другими кодами, такими как начальное положение или
скорость шпинделя. В этом случае вы можете позвонитьgetCoolantCodesнепосредственно вonSection функцию и
добавить вывод кодов охлаждающей жидкости в соответствующий блок. В следующем примере будут выведены
коды охлаждающей жидкости с начальным положением операции.
Если конфигурация CAM-машины определена, WCS может быть выбрана с использованием номера, ожидаемого
системой управления машиной. Если конфигурация CAM Machine не определена, будет отображаться простое
значение.
Коды WCS выводятся при использовании нового инструмента для операции или при изменении используемого номера
коррекции WCS. Смещения WCS обычно управляются с помощью кодов G54–G59 и, возможно, расширенного синтаксиса для
обработки рабочих смещений после 6.
wcsDefinitions определяется сразу после таблицы охлаждающих жидкостей в верхней части постпроцессора.
варwcsDefinitionsзнак равно
useZeroOffset: ложь, //установите значение «true», чтобы разрешить рабочее смещение 0, «false» рассматривает 0
как 1 туалет : [
{имя: "Стандарт", формат: "G", диапазон: [54, 59]}, //стандартный WCS, вывод как G54-G59
{название:"Расширенный", формат:"G59.#", диапазон:[1, 64]} //расширенный WCS, вывод как G59.7 и т. д. //
{имя:"Расширенный", формат:"G54 P#", диапазон:[1, 64]} //расширенный WCS, вывод как G54 P7 и т. д.
]
};
Параметры Описание
использованиеZeroOffset Установлен вистинныйчтобы включить значение рабочего смещения 0. Установите его наложныйбудет рассматривать
Переменная Описание
section.wcs Выходной код рабочего смещения (G54, G51 P1 и т. д.).
section.workOffset Номер рабочего смещения.
//туалет
currentWorkOffset = не определено;
}
Выходными данными для рабочей плоскости будут либо положения поворотных осей, либо определение самой рабочей плоскости в
виде углов Эйлера. Для систем управления станком, поддерживающих оба формата,использованиеMultiAxisFeaturesпеременная
определяет используемый метод рабочей плоскости. Эта переменная, наряду с другими переменными, которые управляют 3+2
операциями, определяется настройками конфигурации машины и функциями в верхней части постпроцессора.
var useABCPrepositioning = false; //позволяет предварительно позиционировать оси вращения перед выводом наклонной
плоскости вар forceMultiAxisIndexing = ложь; //принудительное многоосевое индексирование для 3D-программ вар
eulerConvention = EULER_ZXZ_R; //соглашение об угле Эйлера для 3 + 2 операций
Определение переменных для наклонной плоской опоры
Переменная Описание
использованиеMultiAxisFeatures Включите эту настройку, когда система управления поддерживает коды наклонной
плоскости для операций 3+2, например, G68.2, CYCLE800, PLANE SPATIAL, DWO и т. д.
Когда она отключена, оси вращения будут выводиться для операций 3+2, а вывод
координаты могут быть скорректированы для столов/головок на основе настройки TCP
для каждой оси.
useABCPrepositioning Включите, чтобы позиционировать оси вращения перед выводом наклонной плоскости. Отключите,
чтобы выводить только наклонную плоскость. Эта переменная используется только тогда, когда
использованиеMultiAxisFeaturesустановлен наистинный.
forceMultiAxisIndexing Принудительно выводит оси вращения/наклонную плоскость, когда программа является чисто
3-осевой. Отключение этой переменной не приведет к выводу позиций круговой оси, если вся
программа является 3-осевой.
ЭйлерКонвенция Определяет порядок вычисления угла Эйлера, который требуется машине для вывода
наклонной плоскости. Если постпроцессор не поддерживает углы Эйлера, то этот
параметр будет проигнорирован.
Переменные, управляющие выводом операций 3+2
Обратитесь к Руководству по программированию для вашей машины, чтобы определить, поддерживаются ли углы Эйлера
и порядок вращения. Варианты _R (повернутые) углов Эйлера будут использовать измененную ориентацию после каждого
поворота для каждой оси. Варианты _S (статические) будут использовать исходную систему координат для всех поворотов
и иногда упоминаются как шаг, ряд, рыскание.
свойства = {
…
использованиеMultiAxisFeatures: {
description: "Включить вывод блоков G68.2 для операций 3+2, отключить вывод углов поворота.", type:
"boolean,
значение: правда,
группа: "многоосность",
тип: "булев",
значение: правда
},
…
Определение useMultiAxisFeatures и useABCPrepositioning в качестве свойств
Код, обрабатывающий 3+2 операции, обычно находится вопределить рабочую плоскостьфункцию, но также может быть
определен как встроенный код внутриonSectionфункция. Предпочтительным методом является использование
Тоопределить рабочую плоскостьФункция определяется следующим образом и возвращает начальные положения поворота для многоосевых операций и
операций 3+2.
Аргументы Описание
_раздел Операция (сечение), используемая для расчета углов поворота.
_setWorkPlane истинныйзнак равновыведите положения угла поворота и отрегулируйте выходные координаты
для вращения 3+2.ложныйзнак равноне выводить положения угла поворота. Углы поворота по-
прежнему будут рассчитываться, а выходные координаты будут скорректированы для поворота
3+2.
Функция defineWorkPlane
плоскости } еще {
}
}
Расчеты рабочей плоскости
Аргументы Описание
рабочая плоскость Матрица рабочей плоскости, используемая для расчета углов поворота. Эта переменная
обычноsection.workPlane.
вращать Включите, чтобы настроить выходные координаты для ориентации рабочей плоскости.
Отключите, чтобы просто вычислять углы поворота, а не корректировать координаты XYZ для
поворотов осей.
Эта функция стандартна от поста к посту, но есть несколько областей, которые, возможно, потребуется изменить.
Первый шаг — рассчитать углы поворота на основе ориентации рабочей плоскости, вызвав метод
получитьABCByPreferenceфункция.
Аргументы Описание
рабочая плоскость Матрица рабочей плоскости, используемая для расчета углов поворота. Эта
переменная обычноsection.workPlane.
Текущий Текущие углы поворота. Обычно это позиция ABC, возвращаемая жеткуррентдиректион. В
первой операции это значение устанавливается на ось инструмента, поэтому в данном
случае текущие углы поворота определены как 0,0,0.
ось управления Ось, используемая для определения предпочтительного решения в сочетании стип аргумент. Это
может быть A, B или C для одной оси или ABC для рассмотрения всех определенных поворотных
осей.
тип Тип предпочтения, как описано в таблице «Тип предпочтения».
Опции Параметры, используемые для управления решением, как описано в таблице параметров управления.
Функция getABCByPreference
Координаты операции 3+2, возможно, потребуется отрегулировать для осей вращения. Это делается путем вызова
section.optimize3DPositionsByMachineс осями вращения и типом оптимизации. В большинстве постов для каждой оси будет
использоваться параметр Контрольная точка инструмента (TCP) с использованием параметра OPTIMIZE_AXIS.
если (!currentSection.isOptimizedForMachine()) {
machineConfiguration.setToolLength (addToolLength? getBodyLength (инструмент)); // определяем длину инструмента
для регулировки головки
currentSection.optimize3DPositionsByMachine(machineConfiguration, abc, OPTIMIZE_AXIS);
}
Отрегулируйте координаты для осей вращения
Важно знать, что координаты XYZ, предоставленные постпроцессору для 3+2, находятся в системе координат рабочей
плоскости, то есть они находятся в плоскости XY, определяемой рабочей плоскостью. Это нормально для станков, которые
поддерживают многоосевые функции, такие как G68.2, CYCLE800 и т. д., но может быть неверным для станков, которые не
поддерживают эти функции.
Аргументы Описание
конфигурация машины Активная конфигурация машины.
азбука Текущие положения оси вращения переданы как вектор.
ОптимизироватьТип Тип оптимизации, как описано в следующей таблице.
Аргументы Optimize3DPositionsByMachine
ОптимизироватьТип Описание
OPTIMIZE_NONE Координаты будут положением кончика инструмента (TCP).
OPTIMIZE_BOTH Координаты будут скорректированы для вращения стола и головы.
OPTIMIZE_TABLES Координаты будут скорректированы для поворотных столов.
OPTIMIZE_HEADS Координаты будут скорректированы для поворотных головок.
OPTIMIZE_AXIS Координаты будут скорректированы на основе настройки TCP для каждой оси,
как определено вcreateAxisкоманда.
Типы оптимизации для операций 3+2
Если позиции TCP выводятся в операции 3+2, вам необходимо убедиться, что TCP разрешен для этой
операции (G43.4, TRAORI и т. д.).
Логика, управляющая вычислением рабочей плоскости, обычно находится вопределить рабочую плоскостьраздел, но
может быть и вonSectionфункция для устаревших постпроцессоров
if (!is3D() || machineConfiguration.isMultiAxisConfiguration()) {
//
если (currentSection.isMultiAxis()) {
ForceWorkPlane();
отменитьПреобразование(); }
еще {
//использовать углы Эйлера для рабочей
плоскости если (useMultiAxisFeatures) {
var eulerXYZ = currentSection.workPlane.getEuler2(EULER_ZXZ_R); abc =
новый вектор (eulerXYZ.x, eulerXYZ.y, eulerXYZ.z);
отменитьПреобразование();
//использовать углы поворотных осей для рабочей
плоскости } еще {
Вы должны знать, что направление оси X рабочей плоскости влияет на вычисление угла Эйлера. Типичный метод
определения рабочей плоскости заключается в том, чтобы ориентация оси X указывала в положительном направлении,
когда вы смотрите вниз по оси Z, но на некоторых станках типа «стол/стол» это приведет к тому, что обработка будет
выполняться на обратной стороне таблице, поэтому в этом случае вам нужно, чтобы ось X указывала в отрицательном
направлении.
//убрать инструмент
если (!убрано) {
написатьОтменить(Z);
}
если (machineConfiguration.isMultiAxisConfiguration()) {
var machineABC = abc.isNonZero() ? getWorkPlaneMachineABC (currentSection.workPlane,
false): abc;
если (useABCPrepositioning || abc.isZero()) {
positionABC(machineABC, true);
}
установитьCurrentABC(machineABC); // требуется для машинного моделирования
}
если (abc.isNonZero()) {
gRotationModal.reset();
writeBlock(gRotationModal.format(68.2), "X" + xyzFormat.format(0), "Y" +
xyzFormat.format(0), "Z" + xyzFormat.format(0), "I" + abcFormat.format( abc.x), "J" +
abcFormat.format(abc.y), "K" + abcFormat.format(abc.z)); // устанавливаем кадр
writeBlock(gFormat.format(53.1)); // повернуть машину
}
//вывод смещения длины инструмента при смене инструмента или если инструмент был отведен
возвращение;
gMotionModal.reset();
writeBlock(gPlaneModal.format(17));
Аргументы Описание
идентификатор раздела Идентификатор возвращаемого раздела. sectionId может быть в диапазоне от 0 до
количества определенных разделов (getNumberOfSections).
значение = section.getId()
Аргументы Описание
аргументы Задает одну или несколько переменных объекта «Инструмент», которые следует использовать в
качестве критериев для определения необходимости замены инструмента. Этот список критериев
можнономер, описание,длинаСмещениеили любой другой член объекта Tool.
Возвращаетистинныйесли для текущего участка требуется смена инструмента. На момент написания этой статьи вы не можете
проверить смену инструмента в независимых разделах, только в текущем разделе. Критерии сравнения передаются функции в виде
списка аргументов и могут быть любой допустимой переменной объекта Tool.
4.4.6 isNewWorkPlane
значение = isNewWorkPlane ([раздел])
Аргументы Описание
раздел Указывает раздел для проверки изменения рабочей плоскости. Если раздел не
указан, тотекущий разделпредполагается.
Возвращаетистинныйесли рабочая плоскость изменяется для указанного сечения по сравнению с предыдущим сечением.
4.4.7 isProbeOperation
значение = isProbeOperation()
Возвращаетистинныйесли текущий раздел является операцией зондирования, в противном случае вернутьложный. Вы также можете
проверить, установлен ли тип инструмента TOOL_PROBE, чтобы определить, активно ли измерение для операции.
4.4.8 isInspectionOperation
значение = isInspectionOperation()
4.4.9 probeWorkOffset
значение = section.probeWorkOffset
ТозондWorkOffsetпеременная содержит номер WCS, который активен во время операции зондирования. Это то же
самое, что изонд-выход-рабочее смещениепараметр.
4.4.10 GetNextTool
инструмент = getNextTool([аргументы])
4.4.11 GetFirstTool
инструмент = получитьПервыйИнструмент()
4.4.12 инструментZRange
zRange = инструментZRange()
ТоинструментZRangeФункция возвращает диапазон оси Z для активного инструмента для текущего и последующих разделов, использующих
этот инструмент. Будет возвращено неопределенное значение, если ориентация инструмента активного сечения не совпадает с осью Z.
4.4.13 стратегия
значение = section.strategy;
Аргументы Описание
список стратегий Список групп стратегий обработки для проверки, разделенных запятыми.
Функция checkGroup возвращает значение true, если стратегия обработки сечения принадлежит ко всем группам
стратегий, указанным всписок стратегий.Допустимые группы стратегий перечислены в следующей таблице. Каждая
из этих переменных должна иметь префикс STRATEGY_, например STRATEGY_2D.
// вернуться в безопасную
если (getProperty("необязательныйStop")) {
по команде (COMMAND_OPTIONAL_STOP);
}
}
}
Завершение операции в onSectionEnd
Вам нужно будет удалить аналогичный код изonSectionфункцию и, вероятно,при закрытии функция, которая будет
дублировать код завершения сеанса, если оставить его нетронутым.
функция onSectionEnd() {
writeBlock(gPlaneModal.format(17));
заставитьЛюбой();
}
Базовая функция onSectionEnd
операцию написать("");
по команде (COMMAND_COOLANT_OFF);
написатьОтменить(Z); // убрать
disableLengthCompensation(true); установить
сглаживание (ложь);
zВыход.сброс();
setWorkPlane (новый вектор (0, 0, 0)); // сброс рабочей плоскости
writeRetract(X, Y); // возвращаться домой
}
Базовая функция onClose
ТоonTerminateфункция вызывается в конце постобработки, послепри закрытии. Он вызывается после завершения всего
вывода в файл ЧПУ и закрытия файла ЧПУ. Его можно использовать для переименования выходных файлов.
функция onTerminate() {
var outputPath = getOutputPath();
var имя_файла_программы = FileSystem.getFilename(outputPath);
var programSize = FileSystem.getFileSize(outputPath); var postPath =
findFile("setup-sheet-excel-2007.cps"); вар промежуточный путь =
getIntermediatePath();
var a = "--property unit" + ((unit == IN) ? "0" : "1"); // используем 0 для дюймов и 1 для мм if
(programName) {
a += " --property имя_программы \"'" + имя_программы + "'\"";
}
если (комментарий к программе) {
4.8 по команде
функция onCommand (команда) {
Аргументы Описание
команда Команда для обработки.
Топо командеФункция может быть вызвана командой Manual NC, непосредственно из HSM или из
постпроцессора.
Команда Описание
COMMAND_ACTIVATE_SPEED_FEED_SYNCHRONIZATION Активировать режим многопоточности
COMMAND_ALARM Тревога
COMMAND_ALERT Тревога
COMMAND_BREAK_CONTROL Контроль поломки инструмента
Допустимые команды
Команды ручного ЧПУ, вызывающиепо командеописаны вРучные команды ЧПУглава. Внутренние звонки напо
командеобычно генерируются при расширении цикла. Постпроцессор сам вызоветпо команденепосредственно
для выполнения простых функций, таких как вывод остановки программы, отмена СОЖ, открытие главной
дверцы, включение конвейера для стружки и т. д.
Использование onImpliedCommand
4.9 Комментарий
функция onComment(сообщение) {
Аргументы Описание
сообщение Текст комментария для вывода.
Комментарий к NC-команде
Есть еще две функции, которые используются для форматирования и вывода комментариев.форматКомментарийи
написатькомментарий. Эти функции комментариев являются стандартными по своей природе и обычно не нуждаются в
модификации, хотяразрешенный комментарийCharsпеременная, определенная в верхней части сообщения, используется
для определения символов, которые разрешены в комментарии, и, возможно, их придется изменить, чтобы они
соответствовали элементу управления. То форматКомментарийфункция удалит из комментария любые символы, не
указанные в этой переменной. Строчные буквы будут преобразованы в прописные с помощьюформатКомментарийфункция.
Если вы хотите поддерживать строчные буквы, их нужно добавить вразрешенный комментарийCharsпеременная и
форматКомментарийфункция должна была бы удалить преобразование в верхний регистр.
}
}
Функции комментариев
Аргументы Описание
секунды Время выдержки в секундах.
ТоonDwellФункция может быть вызвана командой Manual NC, непосредственно из HSM или из
постпроцессора. Команда Manual NC, которая вызываетonDwellописан вРучные команды ЧПУ глава.
Внутренние звонки наonDwellобычно генерируются при расширении цикла. Постпроцессор сам вызовет
onDwellнепосредственно для вывода блока задержки.
Аргументы Описание
название Имя параметра.
ценность Значение, сохраненное в параметре.
Почти все параметры, используемые для создания операции обработки в HSM, передаются в постпроцессор. Общие
параметры доступны с использованием встроенных переменных постпроцессора (currentSection, tool, cycle и т. д.), а
также доступны в качестве параметров. Остальные параметры передаются вonParameter функция.
если (!firstNote) {
writeNotes(значение, правда);
}
первое примечание = ложь;
ломать;
}
}
Пример функции onParameter
Аргументы Описание
название Имя параметра.
дефолт Возвращаемое значение, если запрошенный параметр не определен. Еслидефолт
значение не указано и параметр не определен, тонеопределенныйвозвращается.
}
Проверка существования параметра с помощью функции getParameter
(комментарий) {
}
}
Проверка существования параметра с помощью функции hasParameter
При просмотре операций в промежуточном файле можно получить доступ к параметрам этой операции,
используя вариант раздела файлаимеет параметриполучитьпараметрфункции.
Аргументы Описание
название Имя параметра.
дефолт Возвращаемое значение, если запрошенный параметр не определен. Еслидефолт
значение не указано и параметр не определен, тонеопределенныйвозвращается.
Некоторые параметры определяются в начале промежуточного файла перед первой операцией. Эти
параметры считаются глобальными и доступны с помощьюhasGlobalParameterи получить глобальный
параметрфункции. К глобальным параметрам применяются те же правила, что и к параметрам операции.
- 1: при открытии()
При одновременной обработке нескольких настроек некоторые глобальные параметры будут меняться от одной настройки
к другой. Тополучить глобальный параметрОднако функция всегда будет ссылаться на параметры первой настройки,
поэтому, если вы хотите получить доступ к параметрам активной настройки, вам нужно будет использовать onParameter
функцию, а неполучить глобальный параметрфункция.
Аргументы Описание
ценность Текст для вывода в файл ЧПУ.
Аргументы Описание
скорость вращения шпинделя Новая скорость шпинделя в об/мин.
ТоonSpindleSpeedФункция используется для вывода изменений скорости шпинделя во время операции, как
правило, из механизма постпроцессора при расширении цикла.
Аргументы Описание
угол Угол ориентации шпинделя в радианах.
функция onRadiusCompensation() {
ожидающая компенсация радиуса = компенсация радиуса;
}
Пример функции onRadiusCompensation
4.16 о движении
функция onMovement (движение) {
Аргументы Описание
движение Тип движения для следующего движения.
в движениивызывается всякий раз, когда изменяется тип движения. Он используется, чтобы сообщить сообщению, когда происходит
позиционирование, вход, выход или движение типа резки. Существует такжедвижениеглобальная переменная, содержащая
настройку движения. На эту переменную можно ссылаться напрямую в других функциях, таких какonLinear, чтобы получить доступ к
типу движения без определенияв движениифункция.
Типы движения используются для определения параметрических скоростей подачи в некоторых фрезерных постах и для удаления всех
нережущих движений для гидроабразивных/плазменных/лазерных станков, которым требуется только профиль резания.
Аргументы Описание
_х, _у, _з Положение инструмента.
ЕслиОтображение высокой скорости подачисвойство установлено наВсегда используйте высокую подачу, тоonLinearфункция будет
вызываться с высокой скоростью подачи, переданной в качестве скорости подачи, иonRapidфункция вызываться не будет.
если (х || у || г) {
// выходное перемещение с высокой скоростью подачи, если движение осуществляется более чем по одной оси
4.18 вызыватьOnRapid
вызыватьOnRapid(x, y, z);
Аргументы Описание
х, у, г Положение инструмента.
4.19 на линейном
функция onLinear(_x, _y, _z, подача) {
Аргументы Описание
_х, _у, _з Положение инструмента.
ТоonLinearФункция обрабатывает линейные перемещения (G01) со скоростью подачи в 3-осевом режиме. Положение
инструмента передается как_х, _у, _zаргументы. ФорматonLinearФункция довольно проста, она обрабатывает
изменение компенсации радиуса и выводит линейное перемещение в файл ЧПУ.
если (х || у || г) {
} еще {
строку } else {
Аргументы Описание
х, у, г Положение инструмента.
Возможно, что постпроцессору потребуется генерировать режущие движения во время обработки промежуточного файла.
Примером может служить создание собственного расширенного цикла бурения. Вместо того, чтобы звонить onLinearс пост-
сгенерированными ходами рекомендуетсяinvokeOnLinearбыть вызван вместо этого. Это гарантирует, что почтовый движок
будет уведомлен о перемещении и будет установлена текущая позиция.invokeOnLinear затем позвонитonLinearс
приведенными аргументами.
4.21 на Rapid5D
функция onRapid5D(_x, _y, _z, _a, _b, _c) {
Аргументы Описание
_х, _у, _з Положение инструмента.
_а, _б, _в Углы поворота, если конфигурация станка была определена, в противном случае передается
вектор оси инструмента.
}
принудительная подача();
}
Пример функции Rapid5D
4.22 вызыватьOnRapid5D
invokeOnRapid5D(x, y, z, a, b, c);
Аргументы Описание
х, у, г Положение инструмента.
а, б, в Углы поворота, если конфигурация станка была определена, в противном случае передается
вектор оси инструмента.
Аргументы Описание
_х, _у, _з Положение инструмента.
_а, _б, _в Углы поворота, если конфигурация станка была определена, в противном случае передается
вектор оси инструмента.
подача Значение скорости подачи, рассчитанное для режима многоосевой подачи.
режим подачи Активный режим многоосевой подачи Это может быть
FEED_FPM, FEED_INVERSE_TIME или FEED_DPM.
Важно знать, чторежим подачиАргумент не будет присутствовать, если скорости подачи по нескольким осям не
определены ни во внешней конфигурации станка, ни в постпроцессоре с помощью setMultiAxisFeedrateфункция. В
этом случае значение подачи всегда будет передаваться как запрограммированная скорость подачи.
функция onLinear5D (_x, _y, _z, _a, _b, _c, подача, подачаMode) {
// включить этот код, если станок не принимает ввод вектора оси инструмента IJK
если (ложь) {
если (!currentSection.isOptimizedForMachine()) {
error(localize("Эта конфигурация поста не была настроена для 5-осевой траектории."));
возвращение;
}
}
строку } else {
если (x || y || z || i || j || k) {
строку } else {
writeBlock(gMotionModal.format(1), f);
}
}
}
}
Пример функции Linear5D
4.24 вызыватьOnLinear5D
invokeOnLinear5D(x, y, z, a, b, c, подача);
Аргументы Описание
х, у, г Положение инструмента.
а, б, в Углы поворота, если конфигурация станка была определена, в противном случае передается
вектор оси инструмента.
подача Скорость подачи.
4.25 по Циркуляру
функция onCircular (по часовой стрелке, cx, cy, cz, x, y, z, подача) {
Аргумент Описание
по часовой стрелке Установлен вистинныйесли круговое направление находится в направлении по часовой стрелке,ложныйесли
ТоonCircularФункция вызывается всякий раз, когда есть круговое, винтовое или спиральное движение. Круговое движение
может выполняться в любой из 3 стандартных плоскостей: XY-плоскости, YZ-плоскости или ZX-плоскости, это зависит от
onCircularФункция для определения того, какие типы циркулярных писем допустимы для машины, и для правильного
форматирования вывода.
1. Проверьте компенсацию радиуса. Большинство элементов управления не позволяют запускать компенсацию радиуса при
движении по кругу.
2. Выход полного круга.
3. Выход центральной точки (IJK).
4. Вывод радиуса.
Функции ввода 4-135
Руководство по постпроцессору CAM 08.12.21
Каждый из различных стилей вывода будет индивидуально обрабатывать вывод круговой интерполяции в каждой из плоскостей и,
возможно, трехмерной круговой интерполяции, если она поддерживается.
}
…
} иначе если (!getProperty("useRadius")) {//Инкрементальный вывод центральной точки
переключатель (getCircularPlane())
{ case PLANE_XY:
…
} еще {//Использовать режим радиуса
var r = getCircularRadius();
если (toDeg(getCircularSweep()) > (180 + 1e-9)) {
г = -г; // разрешить дуги до <360 градусов
}
…
переключатель (getCircularPlane()) {
случай PLANE_XY:
writeBlock(gPlaneModal.format(17), gMotionModal.format(по часовой стрелке? 2:3),
xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx -
start.x, 0), jOutput.format(cy - start.y, 0), getFeed(канал )); ломать;
случай PLANE_ZX:
writeBlock(gPlaneModal.format(18), gMotionModal.format(по часовой стрелке? 2:3),
xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x,
0), kOutput.format(cz - start.z, 0), getFeed(канал )); ломать;
случай PLANE_YZ:
writeBlock(gPlaneModal.format(19), gMotionModal.format(по часовой стрелке? 2:3),
xOutput.format(x), yOutput.format(y), zOutput.format(z), jOutput.format(cy - start.y,
0), kOutput.format(cz - start.z, 0), getFeed(канал )); ломать;
Параметр Описание
разрешенокруговыеплоскости Определяет стандартные плоскости, в которых разрешена круговая интерполяция,
PLANE_XY, PLANE_YZ, PLANE_ZX. Его можно установить нанеопределенныйчтобы
разрешить круговую интерполяцию во всех трех плоскостях, 0, чтобы отключить
круговую интерполяцию, или битовую маску PLANE_XY, PLANE_YZ и/или PLANE_YZ, чтобы
разрешить только определенные плоскости.
разрешить HelicalMoves Спиральная интерполяция разрешена, если для этой переменной установлено значениеистинный. Спиральные движения
разрешитьSpiralMoves Спиральная интерполяция определяется как круговые движения, начальный радиус которых
отличается от конечного радиуса, и ее можно включить, установив для этой переменной значение
максимальныйкруговойрадиус Задает максимальный радиус круговых перемещений, который может быть выведен как
круговая интерполяция и может динамически изменяться в таблице свойств при запуске
постпроцессора. Любые круговые записи, радиус которых превышает это значение,
будут линеаризованы. Эта переменная должна быть установлена в миллиметрах (MM).
максимальная круговая развертка Определяет максимальный угловой размах круговых перемещений, который может быть
выведен как круговая интерполяция, и указывается в радианах. Любые круговые записи,
дельта-угол которых превышает это значение, будут линеаризованы.
минимальная длина хорды Определяет минимальное дельта-движение, допустимое для круговой интерполяции, и
может динамически изменяться в таблице свойств при запуске постпроцессора. Любые
циклические записи, дельта-линейное движение которых меньше этого значения, будут
линеаризованы. Эта переменная должна быть установлена в миллиметрах (MM).
минимальныйкруговойрадиус Задает минимальный радиус круговых перемещений, который может быть выведен как
круговая интерполяция и может динамически изменяться в таблице свойств при запуске
постпроцессора. Любые круговые записи, радиус которых меньше этого значения, будут
линеаризованы. Эта переменная должна быть установлена в миллиметрах (MM).
минимальная круговая развертка Определяет минимальный угловой размах круговых перемещений, который может быть
выведен как круговая интерполяция, и указывается в радианах. Любые циклические записи,
дельта-угол которых меньше этого значения, будут линеаризованы.
разрешенные круговые плоскости =(1 << ПЛАН_XY) | (1 << PLANE_ZX); // Плоскости XY, ZX
Функция Описание
получитькруговойцентр() Возвращает центральную точку круга в виде вектора.
getCircularChordLength() Возвращает дельта-линейное перемещение записи круговой интерполяции.
получитькруговойнормальный() Возвращает нормаль круглой плоскости в виде вектора. Нормаль
переворачивается, если круговое движение происходит по часовой стрелке. Это
соответствует соглашению о правой плоскости.
получитькруговую плоскость() Возвращает плоскость записи круговой интерполяции, PLANE_XY, PLANE_ZX или
PLANE_YZ. Если возвращаемое значение равно -1, то круговая плоскость не является
главной плоскостью, а находится в трехмерном пространстве.
получитькруговойрадиус() Возвращает конечный радиус кругового движения.
получитькруговойстартрадиус() Возвращает начальный радиус кругового движения. Это будет отличаться от конечного
радиуса для спиральных перемещений.
получитькруговой развертки() Возвращает угловую развертку записи круговой интерполяции в
радианах.
получитьТекущаяПозиция() Возвращает начальную точку кругового движения в виде вектора.
получить спиральное смещение () Возвращает расстояние по третьей оси в виде вектора. Эта функция используется, когда
винтовая интерполяция поддерживается за пределами одной из трех стандартных
круговых плоскостей.
получить спиральный шаг () Возвращает расстояние, которое проходит третья ось за полный 360-
градусный размах, т. е. значение шага резьбы.
получитьПозицияU(u) Возвращает точку на окружности втыпроцентов вдоль дуги в виде вектора.
полныйкруг() Возвращаетистинныйесли угловая развертка кругового движения составляет 360
градусов.
Спиральная интерполяция обычно выводится с использованием того же формата, что и круговая интерполяция, с добавлением
третьей оси и, при необходимости, значения шага (приращения расстояния на 360 градусов) для третьей оси. Большинство
стандартных постпроцессоров уже настроены на вывод третьей оси с круговой интерполяцией (она не будет выводиться для
двумерного кругового перемещения).
случай PLANE_XY:
writeBlock(gPlaneModal.format(17), gMotionModal.format(по часовой стрелке? 2:3),
xOutput.format(x), yOutput.format(y),zOutput.format(z),
iOutput.format(cx-start.x, 0), jOutput.format(cy-start.y, 0),kOutput.format(getHelicalPitch()),
feedOutput.format(лента)); ломать;
Спиральная интерполяция, когда она поддерживается элементом управления, обычно указывается с помощью G-кода, отличного от
стандартных G02/G03 G-кодов круговой интерполяции. Большинство стандартных постпроцессоров не поддерживают спиральную
интерполяцию.
если (спираль()) {
var startRadius = getCircularStartRadius();
вар endRadius = getCircularRadius(); var dr =
Math.abs(endRadius - startRadius);
if (dr > maximumCircularRadiiDifference) { // максимальный предел
if (isHelical()) { // не поддерживается
линеаризовать (допуск);
возвращение;
переключатель (getCircularPlane())
{ case PLANE_XY:
writeBlock(gPlaneModal.format(17), gMotionModal.format(по часовой стрелке? 2.1: 3.1),
xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx -
start.x, 0), jOutput.format(cy - start.y, 0), getFeed(канал )); ломать;
случай PLANE_ZX:
writeBlock(gPlaneModal.format(18), gMotionModal.format(по часовой стрелке? 2.1: 3.1),
xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x,
0), kOutput.format(cz - start.z, 0), getFeed(канал )); ломать;
случай PLANE_YZ:
writeBlock(gPlaneModal.format(19), gMotionModal.format(по часовой стрелке? 2.1: 3.1),
xOutput.format(x), yOutput.format(y), zOutput.format(z), jOutput.format(cy - start.y,
0), kOutput.format(cz - start.z, 0), getFeed(канал )); ломать;
дефолт:
линеаризовать (допуск);
}
возвращение;
}
}
Трехмерная круговая интерполяция, когда она поддерживается элементом управления, обычно указывается с помощью G-кода,
отличного от стандартных G02/G03 G-кодов круговой интерполяции, и должна содержать либо среднюю точку кругового
перемещения, либо вектор нормали круг. Большинство стандартных постпроцессоров не поддерживают трехмерную круговую
интерполяцию.
дефолт:
если (getProperty("allow3DArcs")) {//свойство post используется для включения поддержки трехмерного кругового
// убедитесь, что максимальное значение CircularSweep значительно ниже 360 градусов var ip = getPositionU(0.5); //
вычисляем середину окружности writeBlock(gMotionModal.format(по часовой стрелке? 2.4: 3.4),//Трехмерные G-
коды кругового направления
xOutput.format(ip.x), yOutput.format(ip.y), zOutput.format(ip.z),//выходная середина окружности получить
фид(фид));
writeBlock(xOutput.format(x), yOutput.format(y), zOutput.format(z));//выходная конечная точка }
еще {
линеаризовать (допуск);
}
}
Трехмерная круговая интерполяция
Аргументы Описание
по часовой стрелке Установлен вистинныйесли направление круга по часовой стрелке, ложь, если этопротив
часовой стрелки.
сх, су, сч Центр круга.
х, у, г Положение инструмента.
Возможно, постпроцессору потребуется генерировать дуги окружности при обработке промежуточного файла.
Сделать этоinvokeOnCircularможно назвать. ВызовinvokeOnCircularгарантирует, что пост-движок будет уведомлен о
движении дуги и будет установлена текущая позиция.invokeOnCircularзатем позвонитonCircularс
предоставленными аргументами и установкой правильных циклических переменных.
4.27 цикл
функция onCycle () {
функция onCycle () {
writeBlock(gPlaneModal.format(17));
}
Пример функции onCycle
4.28 на CyclePoint
функция onCyclePoint(x, y, z) {
Аргумент Описание
х, у, г Расположение отверстия снизу.
Выход постоянного цикла обрабатывается вonCyclePointфункция, которая включает в себя позиционирование на плоскости
зазора, форматирование кадра цикла, вычисление параметров цикла, определение того, поддерживается ли постоянный
цикл на станке или его следует расширить, а также циклы измерения, которые не будут обсуждаться в этой главе.
Расположение дна отверстия для цикла передается какх, у, гаргументы в пользуonCyclePoint функция. Все
остальные параметры доступны вциклобъекта или через вызовы функций, специфичных для цикла. Поток
вывода постоянных циклов обычно следует следующей логике.
б. Цикл расширен
я. Развернуть цикл в новом месте
Если цикл не поддерживается и нуждается в расширении почтовым движком, то вы можете либо удалить весь блок
case для этого цикла, и он будет обрабатываться в блоке по умолчанию, либо вы можете специально расширить цикл.
Второй метод удобен, когда постоянный цикл не поддерживает все параметры, доступные в HSM, например, если
выдержка не поддерживается для цикла глубокого сверления на станке, но вы хотите иметь возможность
использовать выдержку.
2йчерез нйместоположения в операции цикла обычно выводятся с использованием простых перемещений XY без каких-
либо кодов определения цикла. Расширенные циклы по-прежнему необходимо расширять в этих местах.
циклТип Описание
бурение Подача на глубину и быстрое удаление (G81)
зенковка Подача на глубину, задержка и быстрое удаление (G82)
стружкодробление Несколько проходов с периодическим частичным отводом для удаления стружки (G73)
глубокое бурение Сверление сверления с полным отводом в конце каждого сверления (G83)
прорывное бурение Позволяет снизить скорость и подачу перед пробивкой отверстия
(расширено)
артиллерийское бурение Управляемое глубокое сверление позволяет изменять скорость вращения шпинделя для
позиционирования (расширенное)
постукивание со стружкодроблением Постукивание несколькими ударами. Автоматически определяет левое или правое
постукивание в зависимости от выбранного инструмента. (расширенный)
удаление (G77)
Любой из этих циклов может быть расширен, если система управления станком не поддерживает конкретный цикл.
Есть несколько предостережений: почта (и машина) должны поддерживать определенные возможности, чтобы
расширенный цикл правильно работал на машине. В следующей таблице перечислены команды, которые должны
быть определены в по командефункцию поддержки расширения этих циклов. Ожидается, что машина будет
поддерживать эти функции, если они включены в постпроцессор.
Параметр Описание
накопленная глубина Глубина комбинированных проходов до того, как инструмент будет полностью отведен
во времястружкодроблениецикл.
backBoreDistance Расстояние резкиобратное бурениецикл.
Нижний Дно ямы.
breakThroughDistance Расстояние над дном отверстия для переключения на сквозную
подачу и скорость шпинделя припрорывное бурениецикл.
breakThroughFeedRate Скорость подачи, используемая при пробивке отверстия во время
прорывное бурениецикл.
breakThroughSpindleSpeed Скорость шпинделя, используемая при пробивке отверстия во время
прорывное бурениецикл.
чипBreakDistance Расстояние отвода инструмента для разрушения стружки во время
стружколомцикл.
оформление Зазорная плоскость, в которую следует вставить инструмент, отведет инструмент после сверления
бурениециклы.
погружаетсяPerRetract Количество проходов до того, как инструмент будет полностью отведен во время
стружкодроблениецикл.
позиционированиескорость подачи Скорость подачи, используемая для позиционирования инструмента во времяартиллерийское бурениецикл.
артиллерийское бурениецикл.
повторный проход Установите значение true, если последний проход должен повторяться длякруговое
фрезерование кармановирезьбофрезерныйциклы.
HSM предполагает, что инструмент всегда будет отводиться на высоту отвода (цикл.клиренс) между отверстиями, вы
заметите это при моделировании цикла в HSM. Обычно это обрабатывается в системе управления станком с
помощью кода G98 (отвод в заднюю плоскость). Конечно, этот код может отличаться от управления станком к
управлению станком, и есть элементы управления, которые всегда будут втягиваться на высоту подачи (цикл.убрать) в
конце операции сверления. В этом случае постпроцессор должен отвести инструмент на высоту отвода.
Вы можете отменить цикл в концеonCyclePointи выведите блок отвода инструмента, чтобы вернуть инструмент на
высоту отвода. При использовании этого метода также обязательно, чтобы полный цикл выводился для каждого
отверстия в операции, а не только для первой точки цикла. Некоторые станки поддерживают задание плоскости
отвода с помощью кода отмены цикла, например, G80 Rxxx.
функция onCyclePoint(x, y, z) {
//если (isFirstCyclePoint()) {
если (истинный) {//вывод блока полного цикла для каждой дыры в операции
repositionToCycleClearance(цикл, x, y, z);
...
...
Функция Описание
isFirstCyclePoint() Возвращаетистинныйесли это первая точка в цикле операции. Обычно
вызывается, чтобы определить, следует ли выводить полный блок цикла или
только позицию цикла.
isLastCyclePoint() Возвращаетистинныйесли это последняя точка цикла. Эта функция обычно
используется для операции нарезания резьбы на токарном станке, поскольку
HSM отправляет один проход вonCyclePointфункция и полная глубина резьбы
требуется для вывода одного блока резьбы. onCycleEndиспользуется для
завершения цикла сверления, поэтому эта функция обычно не используется в
циклах сверления.
isProbingCycle() Возвращаетистинныйесли это цикл зондирования.
функция getCommonCycle(x, y, z, r) {
силаXYZ();
вернуть [xOutput.format(x), yOutput.format(y),
zOutput.format(z),
"R" + xyzFormat.format(r)];
}
…
корпус "сверление":
написатьБлок(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81),
getCommonCycle(x, y, z,Cycle.Retract – Cycle.Clearance), feedOutput.format(F)
);
ломать;
Передать расстояние отвода стандартной функции getCommonCycle
Или вы можете передать самолет зазора вgetCommonCycleфункцию и заставить ее рассчитать расстояние. Этот метод обычно
используется в постпроцессорах, которые поддерживают подпрограммы, которым требуется плоскость отвода в абсолютном
режиме и расстояние в инкрементальном режиме.
функция getCommonCycle(x, y, z, r, с) {
силаXYZ(); // форсировать xyz для первого отверстия любого цикла
if (incrementalMode) {
zOutput.format(c);
вернуть [xOutput.format(x), yOutput.format(y),
"Z" + xyzFormat.format(z - r), "R"
+ xyzFormat.format(r - c)]; } еще
{
вернуть [xOutput.format(x), yOutput.format(y),
zOutput.format(z),
"R" + xyzFormat.format(r)];
}
}
…
корпус "сверление":
написатьБлок(
gRetractModal.format(98), gCycleModal.format(81),
getCommonCycle(x, y, z,цикл.втягивание, цикл.зазор),
feedOutput.format(F)
);
ломать;
Передать Retract и Clearance Heights для функции getCommonCycle
В отводных секцияхonCyclePointвам нужно будет назначить выходу правильное значение высоты тона.
Шаг постукивания сохраняется вtool.threadPitchПеременная.
случай "выстукивание":
написатьБлок(
gRetractModal.format(98), gCycleModal.format((84),
getCommonCycle(x, y, z, cycle.retract),
(условный (P > 0, "P" + миллиФормат.формат (P)),
pitchOutput.format(tool.threadPitch)
);
принудительная подача();//заставить скорость подачи выводиться после цикла нарезания резьбы с выводом шага ломать;
Если цикл нарезания резьбы требует, чтобы станок был переведен в режим FPR, вы также можете рассчитать
значение шага, разделив скорость подачи на скорость шпинделя. Вам также потребуется вывести код FPR (G95) с
циклом нарезания резьбы и сбросить его в конце операции нарезания резьбы, обычно вonCycleEnd функция.
случай "выстукивание":
шпинделя; написатьБлок(
gRetractModal.format(98),gFeedModeModal.format(95), gCycleModal.format((84),
getCommonCycle(x, y, z, cycle.retract),
(условный (P > 0, "P" + миллиФормат.формат (P)),
pitchOutput.format(F)
);
принудительная подача();//заставить скорость подачи выводиться после цикла нарезания резьбы с выводом шага ломать;
ТоonCycleEndФункция вызывается после обработки всех точек операции цикла. В этой функции цикл отменяется, и
режим скорости подачи (FPM) сбрасывается, если это операция нарезания резьбы, использующая скорости подачи
FPR.
функция onCycleEnd() {
если (! CycleExpanded) {
writeBlock(gCycleModal.format(80));
Входные функции 4-150
Руководство по постпроцессору CAM 08.12.21
// writeBlock(gFeedModeModal.format(94)), gCycleModal.format(80));//сбросить режим FPM
zВыход.сброс();
}
}
onCycleEnd Функция
Аргумент Описание
_а, _б, _в Поворотные оси перематывают позиции.
ТоonRewindMachineФункция используется для изменения положения осей вращения при достижении предела станка.
Он подробно описан вПеремотка оси вращения при достижении пределовраздел данного руководства.
4.31.1 запись
написать(текст);
Аргументы Описание
текст Текст для вывода в файл ЧПУ
Аргументы Описание
аргументы Разделенный запятыми список кодов/текста для вывода.
ТонаписатьБлокироватьФункция записывает блок кодов в выходной файл ЧПУ. Он добавит порядковый номер к
блоку, если порядковые номера включены, и добавит необязательный символ пропуска, если это необязательная
операция. Список отформатированных кодов и/или текстовых строк передается внаписатьБлокироватьфункция.
Список кодов разделен запятыми, так что каждый код передается как отдельный аргумент, что позволяет разделять
коды разделителем слов, определенным параметромsetWordSeparatorфункция.
/**
Записывает указанный блок.
*/
функция записиБлок() {
var text = formatWords(аргументы);
если (! текст) {
возвращение;
}
если (getProperty("showSequenceNumbers")) {//добавить порядковые номера в выходные блоки
если (необязательный раздел) {
если (текст) {
writeWords("/", "N" + номер_последовательности, текст);
}
} еще {
writeWords2("N" + номер_последовательности, текст);
}
sequenceNumber += getProperty("sequenceNumberIncrement"); } еще {
//нет порядковых номеров
если (необязательный раздел) {
написатьСлова2("/",
текст); } еще {
написатьСлова(текст);
}
}
}
Пример функции writeBlock
4.31.3 toPreciseUnit
toPreciseUnit(значение, единицы);
Аргументы Описание
ценность Входное значение.
единицы Единицы, в которых указано значение, ММ или IN.
ТоtoPreciseUnitФункция позволяет указать значение в заданных единицах, и это значение будет возвращено в активных единицах
входного промежуточного файла ЧПУ. При разработке постпроцессора настоятельно рекомендуется, чтобы любые жестко
закодированные числа, основанные на единицах измерения, использовалиtoPreciseUnitфункция при определении номера.
4.31.4 сила---
Тосилафункции используются для принудительного вывода указанных осей и/или скорости подачи в следующий раз, когда они
должны быть выведены, даже если они имеют то же значение, что и предыдущее значение.
Функция Описание
силаXYZ Форсирует вывод линейных осей (X, Y, Z) в следующем блоке движения.
силаABC Форсирует вывод поворотных осей (A, B, C) на следующий блок движения.
ForceFeed Принудительно выводит скорость подачи в следующем блоке движения.
ForceAny Задает все оси и скорость подачи для следующего блока движения.
Силовые функции
}
Примеры силовых функций
4.31.5 записьRetract
функция writeRetract(аргументы) {
Аргументы Описание
аргументы X, Y и/или Z. Разделяются запятыми, если указано несколько осей.
ТописатьRetractФункция может быть вызвана с одной или несколькими осями для перемещения в исходное
положение. Оси задаются с использованием их стандартных именХ, У, Я, и разделяются запятыми, если в вызове
указано несколько осей.писатьRetract.
Функция writeRetract не является общей по своей природе, и ее, возможно, придется изменить, чтобы она соответствовала требованиям
вашего компьютера. Например, некоторые станки используют G28 для перемещения оси в исходное положение, некоторые используют G53 с
исходным положением, а некоторые используют стандартный блок G00.
// особые условия
if (_useG28 && _xyzMoved[2] && (_xyzMoved[0] || _xyzMoved[1])) { // XY не использовать G28
error(localize("Вы не можете вернуться домой по осям XY и Z в одном и том же блоке")); возвращение;
}
если (_xyzMoved[0] || _xyzMoved[1]) {
_useG28 = ложь;
}
// определяем исходные
позиции вар _xHome;
вар _yHome;
вар _zHome;
если (_useG28) {
_хдом = 0;
_yHome = 0;
_zHome = 0;
} еще {
если (getProperty("homePositionCenter") &&
hasParameter("часть-верхняя-x") && hasParameter("часть-нижняя-x")) { _xHome =
(getParameter("часть-верхняя-x") + getParameter("часть-нижняя-x")) / 2 ; } еще {
_xHome = machineConfiguration.hasHomePositionX() ?
machineConfiguration.getHomePositionX(): 0;
}
_yHome = machineConfiguration.hasHomePositionY() ?
machineConfiguration.getHomePositionY(): 0;
_zHome = machineConfiguration.getRetractPlane();
}
gAbsIncModal.reset();
writeBlock(gFormat.format(28), gAbsIncModal.format(91), слова);
writeBlock(gAbsIncModal.format(90));
} еще {//используйте G53 для перехода в исходное положение
gMotionModal.reset();
writeBlock(gAbsIncModal.format(90), gFormat.format(53), gMotionModal.format(0), слова);
}
xOutput.reset();
}
если (_xyzMoved[1]) {
yВыход.сброс();
}
если (_xyzMoved[2]) {
zВыход.сброс();
}
}
}
Функции ввода 4-156
Руководство по постпроцессору CAM 08.12.21
Пример функции writeRetract
Выбор команды ЧПУ вручную в продуктах HSM (Fusion 360, Inventor, HSMWorks)
Как только вы выберете меню Manual NC, вы увидите отображаемую форму, которая используется для выбора
типа команды Manual NC, которую вы хотите передать постпроцессору, и, возможно, параметра, который
будет передан с командой.
Если вы используете в своей детали команду Manual NC, необходимо, чтобы постпроцессор был оборудован для обработки
этой команды. Некоторые из команд поддерживаются стандартными постпроцессорами, напримерОстанавливаться,
Дополнительная остановка, иЖить, в то время как поддержка должна быть добавлена в постпроцессор для поддержки
других команд ручного ЧПУ. Если вы используете команду Manual NC, которая не поддерживается постом, то она либо выдаст
ошибку, либо будет проигнорирована. Общее правило заключается в том, что он будет генерировать ошибку, еслипо
команде функция вызывается и будет игнорироваться при вызове другой функции.
Аргументы Описание
команда Команда Manual NC, вызвавшая функцию.
ценность Значение, введенное с помощью команды.
В следующей таблице описаны команды ЧПУ в ручном режиме вместе с функцией, которая будет вызываться
при обработке команды, когдаonManualNCфункция не существует илиразвернутьВручнуюNCназывается.
длина
Стартовый чип Стартовый чип
COMMAND_START_CHIP_ТРАНСПОРТ по команде
транспорт конвейер
Стоп-чип Стоп-чип COMMAND_STOP_CHIP_TRANSPORT по команде
транспорт конвейер
Открытая дверь Открыть главную дверь КОМАНДА_ОТКРЫТЬ_ДВЕРЬ по команде
Закрой дверь Закрыть главную дверь COMMAND_CLOSE_DOOR по команде
Калибровка Калибровка COMMAND_CALIBRATE по команде
машина
В следующих примерах кода показано, как команды ЧПУ в ручном режиме могут буферизоваться и выводиться в
любой момент операции. Вы можете просто скопироватьonManualNCивыполнитьManualNCфункции в ваш
постпроцессор и добавьте соответствующие вызовы ввыполнитьManualNCгде вы хотите обрабатывать команды
ручного ЧПУ.
/**
Буферизация команд ЧПУ в ручном режиме для последующей обработки
*/
var manualNC = [];
функция onManualNC(команда, значение) {
manualNC.push({команда:команда, значение:значение});
}
/**
Обрабатывает команды ручного ЧПУ
Передайте нужную команду для обработки или оставьте список аргументов пустым, чтобы обработать все буферизованные
команды.
*/
функция executeManualNC (команда) {
for (var i = 0; i < manualNC.length; ++i) {
if (!command || (command == manualNC[i].command)) {
switch(manualNC[i].command) { case
COMMAND_DISPLAY_MESSAGE:
writeComment("MSG, " + manualNC[i].value);
ломать;
дефолт:
expandManualNC(manualNC[i].command, manualNC[i].value);
}
}
}
for (var i = manualNC.length -1; i >= 0; --i) {
if (!command || (command == manualNC[i].command)) {
руководствоNC.splice(i, 1);
}
}
}
Ручные команды ЧПУ 5-160
Руководство по постпроцессору CAM 08.12.21
Функции поддержки ручных команд ЧПУ
Вызовы для обработки команд ручного ЧПУ могут быть размещены в любом месте постпроцессора. В следующем
примере кода команда COMMAND_DISPLAY_MESSAGE обрабатывается непосредственно перед выводом блока
смены инструмента, а остальные команды ЧПУ в ручном режиме — после блока смены инструмента.
}
выполнитьРучноеNC();//обработать оставшиеся команды ЧПУ в ручном режиме
Обработка ручных команд ЧПУ в нужном месте
В следующих разделах дается описание функций, которые вызываются командами ручного ЧПУ вне
функции onManualNC, и примеры того, как они обрабатываются в функциях. То onCommentиonDwell
функции описаны вВходные функцииглаве, так как они являются простыми функциями и ведут себя
одинаково независимо от того, как они вызываются.
5.2 по команде
функция onCommand (команда) {
Аргументы Описание
команда Команда для обработки.
Все команды ЧПУ в ручном режиме, не требующие соответствующего параметра, передаются впо
команде функции и, как вы видите изРучные команды ЧПУtable, это влечет за собой большинство
команд. Топо командеФункция также обрабатывает другие команды, которые не генерируются командой
ЧПУ в ручном режиме, и они описаны впо командераздел вВходные функцииглава.
};
}
возвращение;
5.3 по параметру
функция onParameter (имя, значение) {
Аргументы Описание
название Имя параметра.
ценность Значение, сохраненное в параметре.
ТоonParameterфункция вызывается не только для всех параметров, определенных в промежуточном файле (см.
onParameterв выходных данных постпроцессора dump.cps) он также обрабатываетДействие,Программа звонков,
Показать сообщение, иРаспечатать сообщениеРучные команды ЧПУ. Ему передается как имя определяемого
параметра, так и текстовая строка, связанная с этим параметром.
В этом разделе будет описано, какДействиеможно использовать, так как это наиболее часто используемая из
этих команд.
ЭтоonParameterфункция отвечает за анализ текстовой строки, переданной как частьДействие команда. Текстовая строка
может быть значением, списком значений, командой и значением и т. д. В следующей таблице перечисленыДействие
команды, которые поддерживаются примером кода постпроцессора, используемого в этом разделе. ЭтиДействиекоманды
задают переменные, которые будут использоваться в другом месте программы.
В этом примере формат вводаДействиеКоманда ручного ЧПУ предназначена для указания команды, за которой
следует разделитель ':', за которым, в свою очередь, следует значение, вДействиетекстовое поле.
ДействиеФормат команды
случай "действие":
var sText1 = Строка (значение).toUpperCase(); var
sText2 = новый массив();
sText2 = sText1.split(":");
если (sText2.length != 2) {
error(localize("Неверная команда действия: ") + значение);
возвращение;
}
переключатель (sText2[0]) {
чехол "СГЛАЖИВАНИЕ":
SmoothingType = parseChoice(sText2[1], "ВЫКЛ", "НИЗКИЙ", "СРЕДНИЙ", "ВЫСОКИЙ"); если
(smoothingType == undefined) {
error(localize("Тип сглаживания должен быть выключен, низкий, средний или высокий");
возвращение;
}
ломать;
чехол "ДОПУСК":
SmoothingTolerance = parseFloat(sText2[1]);
if (isNaN(smoothingTolerance) || ((smoothingTolerance < .001) || (smoothingTolerance > .999))) {
error(localize("Допуск сглаживания должен быть в диапазоне от 0,001 до 0,999"));
возвращение;
}
ломать;
кейс "FASTTOOLCHANGE":
var fast = parseChoice(sText2[1], "ДА", "НЕТ"); если (быстро
== не определено) {
error(localize("fastToolChange должен быть Да или Нет"));
возвращение;
}
setProperty("fastToolChange", быстро);
ломать;
дефолт:
error(localize("Недопустимый параметр действия: ") + sText2[0] + ":" + sText2[1]);
возвращение;
}
}
}
}
ОбработкаДействиеРучная команда ЧПУ
Теперь вы создадите шаблон из этой команды Manual NC, щелкнув правой кнопкой мыши команду
Manual NC и выбравСохранить как шаблон. Вы захотите дать шаблону то же имя, что и в операции
переименования.
Теперь шаблон готов к использованию в других операциях и деталях. Для этого щелкните правой кнопкой мыши
установку или папку в дереве операций, поместите указатель мыши наСоздать из шаблонаменю и выберите
созданный вами шаблон.
Аргументы Описание
ценность Текст для вывода в файл ЧПУ.
ТоПройти черезКоманда Manual NC используется для передачи текстовой строки непосредственно в файл NC без какой-
либо обработки постпроцессором. Это похоже на редактирование файла ЧПУ и добавление строки текста вручную.
Текстовая строка может быть стандартными кодами (G, M и т. д.) или простым сообщением. Поскольку почта не имеет
контроля или информации о выводимых кодах, рекомендуется использоватьПройти черезкоманду экономно и только с
кодами, которые не могут быть выведены с помощью другого метода.
функция onPassThrough(текст) {
команды var = String(text).split(",");
for (текст в командах) {
writeBlock(команды[текст]);
}
}
Строки вывода кодов/текста, разделенные командами, используяПройти черезРучная команда ЧПУ
СловноДействиеКоманда Manual NC, вы можете настроить шаблон для использования сПройти черезкоманду,
если вам нужно выводить одни и те же коды в нескольких экземплярах.
6 Отладка
6.1 Обзор
Первое, на что следует обратить внимание при отладке, это отсутствие интерактивного отладчика, связанного с
постпроцессорами Autodesk CAM. Это означает, что вся отладочная информация должна выводиться с использованием настроек в
сообщении и с явной записью. В этом разделе описываются различные методы, которые вы можете использовать при отладке
вашего сообщения.
Отладка 6-166
Руководство по постпроцессору CAM 08.12.21
Вы также можете использовать редактор постпроцессора HSM для помощи в отладке вашей программы, как
описано в Запуск/отладка постараздел данного руководства
342: onParameter('задержаться', 0)
344: onParameter('incrementalDepth', 0.03937007874015748)
346: onParameter('incrementalDepthReduction', 0.003937007932681737) 348:
onParameter('minimumIncrementalDepth', 0.01968503937007874) 350:
onParameter('accumulatedDepth', 5)
352: onParameter('chipBreakDistance', 0.004023600105694899)
354: onMovement(MOVEMENT_CUTTING /*cutting*/)
354: по циклу()
cycleType='ломание стружки'
cycle.clearance=123456
цикл.ретракт=0,19685039370078738
цикл.запас=0
Cycle.Deep = 0,810440544068344 Cycle.feedrate
= 15,748000257597194 Cycle.RetractFeedrate =
39,370100366787646 Cycle.PlungeFeedrate =
15,748000257597194 Cycle.dwell = 0
cycle.incrementalDepth=0,03937007874015748
cycle.incrementalDepthReduction=0,003937007932681737
cycle.minimumIncrementalDepth=0,01968503937007874
cycle.accumulatedDepth=5
Cycle.chipBreakDistance=0,004023600105694899
354: onCyclePoint(-1.25, 0.4999999924907534, -0.810440544068344) 355:
onCyclePoint(1.25, 0.4999999924907534, -0.810440544068344) 356:
onCycleEnd()
Пример вывода dump.cps
Отладка 6-167
Руководство по постпроцессору CAM 08.12.21
6.3.1 Режим отладки
режим отладки = истина;
6.3.2 setWriteInvocations
setWriteInvocations (значение);
Аргументы Описание
ценность истинныйвыводит отладочную информацию для функций входа.
6.3.3 setWriteStack
setWriteStack (значение);
Аргументы Описание
ценность истинныйвыводит стек вызовов, который выводит строку в файл ЧПУ.
ВключениеsetWriteStackНастройка отображает стек вызовов всякий раз, когда текст выводится в файл
ЧПУ. Стек вызовов будет состоять из!ОТЛАЖИВАТЬ:метка, уровень вызова, имя постпроцессора и номер
строки вызова функции (имя функции не включается в вывод).
!ОТЛАДКА: 1 rs274.cps:108 !
ОТЛАДКА: 2 rs274.cps:919 !
ОТЛАДКА: 3 rs274.cps:357
N125 M5
вывод setWriteStack
…
108: writeWords2("N" + номер_последовательности, аргументы);
Отладка 6-168
Руководство по постпроцессору CAM 08.12.21
…
357: по команде (COMMAND_STOP_SPINDLE); …
919: writeBlock(mFormat.format(mcode));
Содержимое постпроцессора
Текст, предоставляемый функциям отладки, может содержать операции и подчиняться тем же правилам, что и определение
строковой переменной в JavaScript. Вы также можете указать векторы или матрицы, и они будут правильно
отформатированы для вывода. Например,
вар х = 3;
debug("Значение x равно " + x);
Для значений с плавающей запятой вы можете захотеть создать формат, который ограничивает количество цифр справа от десятичной
точки, поскольку некоторые числа могут быть довольно длинными при выводе.
При записи выходной отладочной информации в журнал и/или файлы ЧПУ рекомендуется предварять текст отладки
фиксированной строкой, например «DEBUG –», чтобы ее было легко отличить от других выходных данных.
6.4.1 отладка
отладка (текст);
Аргументы Описание
текст Выходытекств файл журнала, когдаРежим отладкиустановлен наистинный.
Тоотлаживатьфункция выводит предоставленное текстовое сообщение в файл журнала только тогда, когдаРежим отладкипеременная
установлена в true. Текст выводится точно в том виде, в котором он был предоставлен, без какого-либо указания на то, что вывод был
сгенерированотлаживатьфункция.
6.4.2 журнал
журнал(текст);
Отладка 6-169
Руководство по постпроцессору CAM 08.12.21
Аргументы Описание
текст Выходытекств файл журнала.
6.4.3 запись
написать(текст);
Аргументы Описание
текст Выходытекств файл NC.
Тописатьфункция выводит текст в файл ЧПУ. Он широко используется в постпроцессорах для вывода действительных
данных в файл ЧПУ, а не только отладочного текста.
Аргументы Описание
текст Выходытекстк файлу ЧПУ в качестве комментария.
Аргументы Описание
текст Выходытекств файлы ЧПУ и журналы.
ТонаписатьОтладкафункция обычно не присутствует в универсальных постпроцессорах. Вы можете создать его для обработки
вывода отладочной информации как в файл журнала, так и в файл ЧПУ, чтобы в случае сбоя или успешного выполнения
постпроцессора вы все равно видели вывод отладки.
функция writeDebug(текст) {
if (true) { // вместо этого можно использовать глобальную настройку 'debugMode'
Отладка 6-170
Руководство по постпроцессору CAM 08.12.21
7 многоосевых постпроцессоров
ОбщийRS-274D Образец многоосевого постпроцессорадоступен для использования в качестве образца для реализации
многоосевой поддержки в любом постпроцессоре. Он поддерживает определенные CAM и жестко запрограммированные
конфигурации машины. Вы можете использовать этот постпроцессор для тестирования конфигураций поворотных осей и для
копирования функций в ваш пользовательский постпроцессор.
Обратите внимание, что поддержка операций 3+2 здесь не поддерживается, за исключением настройки
машины. См. раздел «Рабочая плоскость» вonSectionглаву для описания того, как обрабатывать операции
3+2.
Тошкала: ГрадусовПараметр указывает, что углы поворотных осей будут выводиться в градусах. Если вам требуется,
чтобы вывод был в радианах, опуститемасштабпараметр.
функция onOpen () {
// определить и включить конфигурацию машины полученная
конфигурация машины = конфигурация машины. isReceived(); если (typeof
defineMachine == "функция") {
определитьМашину(); // жестко заданная конфигурация машины
}
активироватьМашина(); // включаем оптимизацию и настройки машины
Скопируйте этот код в верхнюю часть функции onOpen.
Переменные в верхней части кода конфигурации машины управляют некоторыми аспектами многоосевой
логики в постпроцессоре.
Переменная Описание
компенсироватьToolLength Эта переменная используется только для конфигураций вращающихся головок, которые не
поддерживают TCP. Когда он включен, длина корпуса инструмента (длина корпуса инструмента)
будет добавлена к расстоянию поворота. Конфигурации поворотных головок подробно
обсуждаются вНастройка точек для смещения осей вращенияраздел.
Многоосевые настройки
Жестко запрограммированную конфигурацию машины можно найти вопределить машинуfunction. Он включает в себя все
применимые настройки, которые находятся в конфигурации машины, и содержит следующие разделы кода.
Параметр Описание
Таблица Установлен вистинныйкогда осью вращения является стол, илиложныйесли это голова. По умолчанию, если не
указаноистинный.
ось Определяет ось вращения оси вращения в формате вектора, т.е. [0, 0, 1]. Этот вектор не
обязательно должен быть ортогонален главной плоскости, например, он может быть [0, . 7071,
.7071]. Направление осей вращения основано на правиле правой руки для столов и правиле левой
руки для головок. Вы можете изменить направление оси, указав вектор, указывающий в
противоположном направлении, то есть [0, 0, -1]. Этот параметр является обязательным.
компенсировать Определяет положение вращения оси в формате координат, т.е. [0, 0, 0]. Для машин, поддерживающих
TCP,компенсироватьпараметр можно не указывать. Значения смещения для таблиц основаны на
исходной точке детали, определенной в настройках. Значение смещения для наездника или основной
вращающейся головки основано на расстоянии от упора инструмента (или торца шпинделя) до точки
поворота вращающейся головки. Величина смещения для вращающейся головки водила (если машина
имеет конфигурацию «голова/головка») основана на точке поворота оси наездника относительно точки
поворота оси держателя. По умолчанию [0, 0, 0].
координировать Определяет координату оси X, Y или Z. Вы заметите число, используемое в большинстве общих
постов, в данном случае 0=X, 1=Y и 2=Z. Любая спецификация является приемлемым вводом. Этот
параметр является обязательным.
циклический Определяет, является ли ось циклической (непрерывной) по своей природе, в том смысле, что выход
всегда будет в пределах диапазона, заданного параметромдиапазонпараметр. Циклические оси никогда
не вызовут onRewindFunctionназывать, так как они носят непрерывный характер и не имеют пределов.
Диапазон применяется конкретно к выходным значениям для этой оси. По умолчаниюложный.
TCP Определяет, поддерживает ли система управления программирование центральной точки инструмента для этой оси.
диапазон Определяет верхний и нижний пределы оси вращения, используя формат [нижний, верхний]. Если ось
вращения циклическая, то диапазон устанавливает пределы выходных значений для этой оси, если она не
циклическая, то диапазон является фактическими физическими пределами станка.
предпочтение Задает предпочтительное направление угла в начале операции. -1 = выбрать отрицательный угол,
0 = без предпочтения и 1 = выбрать положительный угол. Значение по умолчанию – 0.
перезагрузить Определяет начальное положение оси для новой операции и когда оси вращения необходимо
перемотать и переконфигурировать из-за превышения пределов. 0 = запомнить позицию из
предыдущего раздела, 1 = сбросить на 0 в начале работы, 2 = сбросить на 0 при автоматической
перемотке, 3 = сбросить на 0 в начале работы и при автоматической перемотке. Этот параметр
реализован начиная с R42225 почтового движка.
разрешающая способность Определяет разрешение в градусах вращательного привода. Как правило, это будет установлено
на количество цифр справа от десятичной запятой, как указано всоздатьформатвызвать
поворотные оси. Значение по умолчанию – 0.
Параметры createAxis
1 Вращающийся наездник
// установка 5 осей, B вращается вокруг Y, C вращается вокруг Z, оба направления положительные var
bAxis = createAxis({координата:Y, таблица:истина, ось:[0, 1,0], диапазон:[-120,120], tcp:истина,
предпочтение: 1});
var cAxis = createAxis({координата: Z, таблица: истина, ось: [0, 0, 1], циклическая: истина, tcp:
истина}); Конфигурация машины = новая Конфигурация машины (ось b, ось c);
setMachineConfiguration (конфигурация машины);
// Та же таблица/настройка таблицы, без TCP, вершина и центр оси C определены как начало координат var bAxis
= createAxis({координата:Y, таблица:true, ось:[0, 1, 0], смещение:0, 0, -12,5], диапазон:[-120,120],
tcp:false, предпочтение:1});
var cAxis = createAxis({координата: Z, таблица: истина, ось: [0, 0, 1], циклическая: истина, tcp: ложь});
Конфигурация машины = новая Конфигурация машины (ось b, ось c);
setMachineConfiguration (конфигурация машины);
Решение о том, должны ли выходные координаты быть в точке поворота вращающихся головок или в виртуальной позиции
всплывающей подсказки (как если бы инструмент был вертикальным), определяетсяsetVirtualTooltipфункция. Этот параметр
применяется только к вращающимся головкам, которые не поддерживают TCP. Положение виртуальной всплывающей подсказки
описано в Настройка точек для смещения осей вращенияраздел.
// отозвать/перенастроить
вар PerformRewinds = ложь; //установите значение true, чтобы включить логику отвода/перенастройки если
(выполнить перемотку) {
machineConfiguration.enableMachineRewinds(); // включает логику отвода/перенастройки safeRetractDistance
= (unit == IN) ? 1 : 25; // дополнительное расстояние для отвода из запаса, может быть переопределено с
помощью свойства
safeRetractFeed = (единица измерения == IN)? 20 : 500; // скорость подачи
обратно safePlungeFeed = (unit == IN) ? 10 : 250; // скорость подачи врезания
machineConfiguration.setSafeRetractDistance(safeRetractDistance);
machineConfiguration.setSafeRetractFeedrate (safeRetractFeed);
machineConfiguration.setSafePlungeFeedrate (safePlungeFeed);
var stockExpansion = новый вектор (toPreciseUnit (0,1, IN), toPreciseUnit (0,1, IN),
toPreciseUnit (0,1, IN)); // расширяем значения запаса XYZ
machineConfiguration.setRewindStockExpansion(stockExpansion);
}
Отменить/изменить настройки
Многоосевые станки, которые не поддерживают TCP, обычно требуют обратной скорости подачи во времени или в
градусах в минуту. Формат скорости подачи по нескольким осям определяется в следующем разделе кода.
Многоосевые подачи более подробно обсуждаются вМногоосевые подачираздел.
//многоосевые подачи
если (machineConfiguration.isMultiAxisConfiguration()) {
machineConfiguration.setMultiAxisFeedrate(
использовать TCP? FEED_FPM : getProperty("useDPMFeeds") ? FEED_DPM :
FEED_INVERSE_TIME,
9999.99, // максимальное выходное значение для обратнозависимой скорости подачи во
времени getProperty("useDPMFeeds") ? DPM_COMBINATION : INVERSE_MINUTES, //
INVERSE_MINUTES/INVERSE_SECONDS или DPM_COMBINATION/DPM_STANDARD
0,5, // допуск для определения момента изменения подачи DPM 1,0 //
отношение точности вращения к линейной точности для расчетов DPM
);
}
Многоосевые постпроцессоры 7-175
/* исходные позиции */
// machineConfiguration.setHomePositionX(toPreciseUnit(0, IN)); //
machineConfiguration.setHomePositionY(toPreciseUnit(0, IN)); //
machineConfiguration.setRetractPlane(toPreciseUnit(0, IN));
Определение исходных координат машины
Наконец, механизм постпроцессора должен быть проинформирован о жестко заданной конфигурации машины.
Ценность Описание
OPTIMIZE_NONE Не корректируйте координаты осей вращения. Используется для режима TCP.
OPTIMIZE_BOTH Настройте координаты осей вращения. Для вращающихся головок, которые не
поддерживают TCP, возможно, что длина инструмента должна быть добавлена к
координатам конечной точки инструмента. Этот сценарий обсуждается далее в
Регулировка точек для поворотных головокраздел этой главы.
OPTIMIZE_TABLES Настройте координаты для поворотных столов. Для голов регулировка не
производится.
OPTIMIZE_HEADS Настройте координаты для вращающихся головок. Корректировка таблиц
производиться не будет.
Регулировки поворотной головки, которые требуют, чтобы длина инструмента добавлялась к расстоянию смещения оси, не могут
быть отрегулированы с помощьюоптимизироватьMachineAngles2функцию, так как длина инструмента будет варьироваться от
инструмента к инструменту. Вместо этого функция SectionоптимизироватьMachineAnglesByMachineвызывается для каждого раздела.
Это также верно для постпроцессоров, которые могут изменять конфигурацию машины во время обработки операций. Ниже
приведен общий код, используемый вактивироватьМашинафункция, которая используется для расчета углов поворотных осей и
корректировки координат конечной точки инструмента.
// расчет углов ABC и корректировка точек для многоосевых операций // поворотные головки
могут потребовать добавления длины инструмента к длине поворота // поэтому нам нужно
оптимизировать каждую секцию по отдельности
если (machineConfiguration.isHeadConfiguration() && компенсацияToolLength) {
for (var i = 0; i < getNumberOfSections(); ++i) {
var section = getSection(i);
если (section.isMultiAxis()) {
machineConfiguration.setToolLength (getBodyLength (section.getTool())); // определяем длину инструмента
для регулировки головки
section.optimizeMachineAnglesByMachine (конфигурация машины, OPTIMIZE_AXIS);
}
}
} еще { //столы и поворотные головки с поддержкой TCP можно оптимизировать одним вызовом
оптимизироватьMachineAngles2 (OPTIMIZE_AXIS);
}
Расчеты поворотных осей и преобразование координат
Если вызов для расчета осей вращения и корректировки входных координат не сделан, то конечная точка
инструмента и вектор оси инструмента будут переданы внаRapid5DиonLinear5Dмногоосевые функции.
Начальные положения осей вращения должны быть рассчитаны перед вызовомпозицияABCфункция. Функция
getInitialToolAxisABC() используется для получения начальных положений поворотных осей для многоосевых операций.
если (currentSection.isMultiAxis()) {
var abc = section.getInitialToolAxisABC();
positionABC(abc, правда);
}
Вычислите начальные углы поворота для многоосевой операции
}
если (ожидание компенсации радиуса >= 0) {
error(localize("Режим компенсации радиуса не может быть изменен при быстром перемещении.");
возвращение;
функция onLinear5D (_x, _y, _z, _a, _b, _c, подача, подачаMode) {
если (!currentSection.isOptimizedForMachine()) {
error(localize("Эта пост-конфигурация не была настроена для 5-осевой одновременной
траектории."));
возвращение;
}
если (ожидание компенсации радиуса >= 0) {
error(localize("Компенсация радиуса не может быть активирована/деактивирована для перемещения по 5 осям."));
возвращение;
}
вар х = xOutput.format(_x); var y =
yOutput.format(_y); переменная z =
zOutput.format(_z); var a =
aOutput.format(_a); вар б =
bOutput.format(_b); var c =
cOutput.format(_c); var f =
feedOutput.format(_feed);
если (x || y || z || a || b || c) {
writeBlock(gFeedModeModal.format(fMode), gMotionModal.format(1), x, y, z, a, b, c, f); } иначе
если (е) {
if (getNextRecord().isMotion()) { // стараемся не выводить ленту без движения
feedOutput.reset(); // принудительная подача на следующую
строку } else {
Обе эти функции в том виде, в котором они представлены, являются базовыми по своему характеру, и требования к вашей машине могут
Функция Описание
Конфигурация машины.isMultiAxisConfiguration() Возвращаетистинныйесли была определена конфигурация станка,
содержащая оси вращения. Для некоторых многоосевых станков
по-прежнему можно создавать выходные данные, если оси
вращения не были определены, выводя вектор оси инструмента
вместо положений осей вращения или используя углы Эйлера для
3+2 операций.
MachineConfiguration.getABCByPreference Возвращает предпочтительные углы поворотных осей для
(матрица, текущая, управляющая ось, тип, опции) предоставленной матрицы. Эта матрица обычно представляет собой
матрицу рабочей плоскости (currentSection.workPlane).
получитьABCByPreferenceболее подробно описано вРабочая плоскость
— 3+2 операциираздел.
section.isOptimizedForMachine() Возвращаетистинныйесли для секции рассчитаны углы
поворотных осей.
section.isMultiAxis() Возвращаетистинныйесли операция, указаннаяразделявляется
многоосевой операцией.
section.getGlobalInitialToolAxis() Возвращает исходную ось инструмента для предоставленного раздела в
виде вектора. Обычно используется в начале операции с помощью
текущий разделПеременная.
section.getInitialToolAxisABC() Возвращает начальные углы поворотных осей для предоставленной
секции в виде вектора. Обычно используется в начале операции с
помощьютекущий разделПеременная. Ошибка будет
сгенерирована, если конфигурация станка, содержащая круговые
оси, не была определена.
section.getGlobalFinalToolAxis() Возвращает конечную ось инструмента для предоставленного сечения в виде
получитьпредыдущую секцию().
С другой стороны, поворотная шкала обычно выводит положения угла поворота от 0 до 360 градусов, обычно
со знаком ±, указывающим направление. Если знак не требуется и система управления всегда будет выбирать
кратчайший путь, то довольно просто вывести ось вращения на шкалу вращения, просто задав ее как
циклическую ось с диапазоном от 0 до 360 градусов.
var aAxis = createAxis({координата:0, таблица:true, ось:[1, 0, 0],циклический: истина, диапазон: [0, 360]});
Создайте ось вращения, используя шкалу вращения. Машина выберет кратчайший путь
Для элементов управления, требующих знака для обозначения направления, в котором будет перемещаться ось вращения, вам
потребуется задать ось вращения в линейной шкале. Да, это звучит нелогично, но выходная переменная будет обрабатывать
преобразование значения линейной шкалы в значение поворотной шкалы со знаком.
Следующие функции должны быть добавлены к вашему сообщению, которые определяют альтернативную выходную переменную,
используемую для вычисления угла поворотной шкалы.
RotaryVariable.prototype.reset = функция () {
вернуть this.variable.reset(); };
RotaryVariable.prototype.disable = функция () {
вернуть this.variable.disable(); };
RotaryVariable.prototype.enable = функция () {
вернуть this.variable.enable(); };
Теперь вам нужно будет использоватьсоздатьRotaryVariableфункция при создании выходной переменной вместосоздать
переменнуюфункция, которая обычно используется.
var aAxis = createAxis({координата:X, таблица:false, ось:[-1, 0, 0],смещение: [0, 0, 8,75], диапазон: [-120,120],
tcp:false, предпочтение:-1});
Важно знать, как смещения применяются к каждому стилю поворотной оси. Для вращающихся головок помните, что сначала
определяется ось наездника головки, а затем ось держателя головки. Когда несущая и направляющая головки имеют общую точку
поворота, необходимо определить только смещение оси наездника. Это смещение определяется от положения остановки
инструмента до точки поворота. Если точки поворота различны, смещение оси несущего элемента определяется как смещение от
точки поворота наездника. Большинство машин будут использовать общую точку поворота для обеих поворотных осей.
При определении смещения поворотного стола определение смещения — это все, что необходимо до расчета углов
поворота и преобразованных координат.
Для смещенных головок на машинах, не поддерживающих TCP, может потребоваться еще несколько вызовов
функций.
Возможно, длину инструмента необходимо добавить к смещению оси наездника, заданному в createAxisфункция. На небольших
любительских станках может случиться так, что инструмент всегда будет одинаковой длины, и тогда его можно будет определить как
часть смещения. На станках, использующих инструмент разной длины, вам необходимо будет сообщить системе постобработки длину
инструмента, которая будет добавлена к расстоянию поворота, прежде чем вычислять координаты смещения для секции. Это
делается путем вызоваКонфигурация машины.setToolLength Функция с длиной инструмента от конечной точки инструмента до
положения остановки инструмента, используемая для определения смещения головки.
Вывод координат смещения головки может быть либо в точке поворота оси, либо в конечной точке инструмента, когда оси
вращения находятся на 0 градусов (инструмент расположен вертикально). Обычно вы настраиваете станок с острием
инструмента на Z0. В этом случае выходные координаты будут на виртуальной вершине инструмента, что означает, что
координаты будут там, где положение вершины инструмента было бы, когда оси вращения находятся на 0 градусов, даже
когда оси наклонены.
Виртуальная подсказка
Ценность Описание
OPTIMIZE_BOTH Настройте координаты для столов и головок.
OPTIMIZE_TABLES Настройте координаты только для поворотных столов.
OPTIMIZE_HEADS Настройте координаты только для поворотных головок.
Значения типа оптимизации
// если входные координаты не настроены для осей вращения, выходная координата будет //
такой же, как и входная координата
var toolTip = machineConfiguration.getOptimizedPosition(
новый вектор (_x, _y, _z), новый вектор (_a, _b,
_c), TCP_TOOL_OPTIMIZED, OPTIMIZE_HEAD,
Логика сингулярности в ядре будет массировать направление оси инструмента, чтобы удерживать инструмент в пределах допуска и
минимизировать движение оси вращения в этих случаях. Также была реализована защита, которая линеаризует движения вокруг
сингулярности. Эта линеаризация добавит положения инструмента по мере необходимости, чтобы конечная точка инструмента
оставалась в пределах допуска детали.
В постпроцессоре есть настройки, которые управляют тем, как обрабатывается проблема сингулярности. Эти настройки
определяются с помощью следующей команды.
линеаризацияДопуск Значение допуска, используемое при добавлении дополнительных точек, чтобы удерживать конечную точку
инструмента в пределах допуска запрограммированного перемещения, когда ось инструмента находится вблизи
Настройки по умолчанию действительны для большинства траекторий инструмента, но эта команда позволяет внести некоторые коррективы
в особых случаях, когда вы хотите точно настроить вывод.
Наилучшее возможное решение для поворотных осей всегда выбирается в начале операции, и когда требуется
перемотка из-за того, что поворотная ось пересекает пределы, инструмент всегда останавливается точно на пределе
станка, исключая сценарии, в которых действительный не всегда можно было найти решение для перемотки
поворотных осей.
Когда требуется перемотка назад, к пользовательскому постпроцессору можно добавить группу функций для обработки
фактической перемотки затронутой поворотной оси. Этот код можно легко скопировать в ваш пользовательский
постпроцессор и изменить в соответствии с вашими потребностями, приложив немного усилий.
Одна настройка, которая очень важна при определении оси вращения, этоциклическийпараметр в вызове createAxis.циклический
считается синонимом непрерывного, что означает, что эта ось не имеет ограничений и не будет учитываться при определении
необходимости повторного позиционирования осей вращения, чтобы оставаться в пределах ограничений. Тодиапазон
спецификатор, используемый в сочетании с циклической осью, определяет выходные пределы оси вращения, например, указание
диапазона [0,360] приведет к тому, что все выходные углы для этой оси будут выводиться в диапазоне от 0 до 360 градусов. Диапазон
для нециклической оси определяет фактические физические пределы этой оси на станке и используется для определения того, когда
требуется перемотка назад. Обратите внимание, что физические пределы машины могут быть числовыми ограничениями
управления вместо физических пределов, например, 9999,9999.
Другой важной настройкой являетсяперезагрузитьпараметр, который позволяет определить начальный угол в начале
операции и после того, как произошла перемотка осей. По умолчанию пост-движок будет использовать конечный
угол предыдущей многоосевой операции. Некоторые элементы управления позволяют сбросить энкодер поворотной
оси, чтобы сохраненный угол сбрасывался в пределах 0-360 градусов без разматывания оси. В этом случае вам нужно
ввести соответствующие коды для сброса энкодера оси, например, G28 C0, и указать сброс:3при создании оси.
Теперь о том, как вы можете реализовать возможности автоматической перемотки в своем посте. Основная часть функции
обрабатывается ядром постпроцессора, но есть некоторые переменные и функции, которые требуются в вашем сообщении.
Переменные, используемые для отвода/изменения конфигурации, определяются либо в настройках CAM Machine
Configuration, либо вопределить машинуфункция для жестко заданных конфигураций машины.
//отозвать / перенастроить
вар PerformRewinds = ложь; //установите значение true, чтобы включить логику отвода/перенастройки
если (выполнить перемотку) {
machineConfiguration.enableMachineRewinds(); //включает логику отвода/перенастройки
safeRetractDistance = (единица измерения == IN)? 1 : 25; //дополнительное расстояние для отвода из
запаса safeRetractFeed = (единица измерения == IN)? 20 : 500; //скорость подачи отвода safePlungeFeed =
(единица измерения == IN) ? 10 : 250; //скорость подачи врезания
machineConfiguration.setSafeRetractDistance(safeRetractDistance);
machineConfiguration.setSafeRetractFeedrate (safeRetractFeed); machineConfiguration.setSafePlungeFeedrate
(safePlungeFeed);
var stockExpansion = новый вектор (toPreciseUnit (0,1, IN), toPreciseUnit (0,1, IN), toPreciseUnit (0,1, IN)); // расширить
складские значения XYZ
machineConfiguration.setRewindStockExpansion(stockExpansion);
Многоосевые постпроцессоры 7-189
Переменная Описание
выполнять перемотки При установке наложныйошибка будет генерироваться, когда требуется перемотка
поворотной оси. Установка его наистинныйвключит логику перемотки..
safeRetractDistance Определяет расстояние, которое будет добавлено к позиции отвода, когда инструмент располагается
за материалом заготовки, чтобы безопасно удалить его из заготовки. Если установлено значение 0,
то инструмент будет отводиться на внешний припуск плюс расширение припуска.
сейфретрактфид Определяет скорость подачи для отвода инструмента перед перемоткой оси вращения.
safePlungeFeed Определяет скорость подачи для погружения инструмента обратно в деталь после перемотки
оси вращения.
акцииРасширение По умолчанию инструмент отводится за пределы заданного припуска. Вы можете
расширить определенный запас со всех сторон, определивзапасПособиевектор,
который содержит значение расширения для X, Y и Z.
Переменные, управляющие отводом инструмента
Вам нужно будет скопировать функции отзыва/перенастройки из поста, который поддерживает эту логику, в
свой пост. Эти функции определены в следующем разделе кода и включают назначенные функции.
}
}
вернуть ложь;
}
Пример кода для сброса энкодера вместо перемотки оси C
Возврат значенияистинныйуказывает, чтоonRewindMachineEntryфункция выполнила все необходимые действия для изменения положения
осей вращения, и последовательность отвода/изменения положения/врезания выполняться не будет. Возвращениеложныйбудет выполнять
последовательность втягивания/изменения положения/погружения в обычном режиме.
осей xOutput.disable();
yВыход.отключить();
zВывод.отключить();
invokeOnRapid5D(_x, _y, _z, _a, _b, _c);
xOutput.enable();
yВыход.включить();
zВыход.включить();
}
Позиционирование осей вращения
// позиция по XY
forceXYZ();
xOutput.reset();
yВыход.сброс();
zВывод.отключить();
invokeOnRapid(_x, _y, _z);
// позиция в Z
zOutput.enable();
invokeOnRapid(_x, _y, _z);
}
Возврат из безопасного положения после изменения положения осей вращения
Расчеты скорости подачи по нескольким осям обрабатываются пост-движком и будут работать со всеми конфигурациями
станков; стол/стол, голова/голова и голова/стол. Одной из возможностей расчета скорости подачи по нескольким осям
является то, что он учитывает фактическое движение вершины инструмента по отношению к движению осей вращения, а не
только прямолинейное движение вдоль запрограммированной вершины инструмента, создавая более точные скорости
подачи по нескольким осям. На следующем рисунке движение по дуге, вызванное движением оси вращения (зеленая дуга),
используется в расчетах вместо прямолинейного движения, генерируемого HSM (синяя линия).
//многоосевые подачи
если (machineConfiguration.isMultiAxisConfiguration()) {
machineConfiguration.setMultiAxisFeedrate(
использовать TCP? FEED_FPM : getProperty("useDPMFeeds") ? FEED_DPM : FEED_INVERSE_TIME, 9999,99, //
максимальное выходное значение для обратнозависимых скоростей подачи
getProperty("useDPMFeeds") ? DPM_COMBINATION : INVERSE_MINUTES, //
INVERSE_MINUTES/INVERSE_SECONDS или DPM_COMBINATION/DPM_STANDARD
0,5, // допуск для определения момента изменения подачи DPM 1,0 //
отношение точности вращения к линейной точности для расчетов DPM
Переменная Описание
режим подачи FEED_INIVERSE_TIME (обратное время), FEED_DPM (градусы в минуту) или
FEED_FPM (запрограммированная скорость подачи).
максимальная скорость подачи Определяет максимальное значение, которое может быть выведено как для обратнозависимой скорости подачи,
фидТип Варианты скорости подачи по нескольким осям. Для обратнозависимых скоростей подачи
доступны параметры INVERSE_MINUTES или INVERSE_SECONDS, определяющие единицы
времени, используемые в вычислениях обратнозависимой подачи. Для скоростей подачи DPM
доступны следующие варианты: DPM_STANDARD для прямых вычислений в градусах в минуту
или DPM_COMBINATION, в котором используется комбинация градусов в минуту и линейной
подачи в минуту (это наиболее типично для станков, которым нужна форма скорости подачи
DPM).
выходной допуск Допуск для принятия решения о том, следует ли выводить значение скорости подачи или нет. Если
значение скорости подачи находится в пределах этого допуска предыдущего значения скорости подачи,
тогда оно будет установлено на предыдущее значение. Это используется для минимизации вывода
bpwRatio Определяет весовой коэффициент импульса для осей вращения, когда скорости подачи DPM
выводятся как комбинация линейных и вращательных перемещений. Вес импульса
представляет собой коэффициент масштабирования, основанный на сравнении точности
поворотных осей с точностью линейных осей. Например, он должен быть установлен на .1,
когда линейные оси выводятся с шагом 0,0001, а оси вращения — с шагом 0,001.
setMultiAxisFeedrate Параметры
Если скорости подачи обратного времени поддерживаются, вам потребуется создатьинверстимеаутпутв верхней части
кода постпроцессора, и если точность обратнозависимых скоростей подачи отличается от стандартной скорости
подачи FPM, вам также потребуется создать новый формат для связи с ней. ТоgFeedModeModal Модальная
переменная также должна быть определена для поддержки вывода G93/G94, если она еще не существует.
СоздаватьинверстимеаутпутПеременная
Теперь есть другие области постпроцессора, которые необходимо изменить для поддержки этих режимов скорости подачи. Во-первых,
onLinear5Dфункция должна иметь добавленную поддержку для приема и вывода режима скорости подачи и для вывода значения скорости
подачи с использованием правильного формата.
}
// требуется хотя бы одна ось
если (ожидание компенсации радиуса >= 0) {
error(localize("Компенсация радиуса не может быть активирована/деактивирована для перемещения по 5 осям."));
возвращение;
}
вар х = xOutput.format(_x); var y =
yOutput.format(_y); переменная z =
zOutput.format(_z); var a =
aOutput.format(_a); вар б =
bOutput.format(_b); var c =
cOutput.format(_c);
если (x || y || z || a || b || c) {
написатьБлок(gFeedModeModal.format(fMode),gMotionModal.format(1), x, y, z, a, b, c, f); }
иначе если (е) {
if (getNextRecord().isMotion()) { // стараемся не выводить ленту без движения
feedOutput.reset(); // принудительная подача на следующую
строку } else {
написатьБлок(gFeedModeModal.format(fMode),gMotionModal.format(1), f);
}
}
}
onLinear5DНеобходимые изменения
Вам нужно будет сбросить режим скорости подачи на FPM либо в конце многоосевой операции, либо при стандартном 3-
осевом перемещении. Гораздо проще сделать это в конце раздела, иначе вам пришлось бы модифицировать все
экземпляры, которые выводят скорость подачи, например, вonLinear,onCircular,onCycle, и т.д.
функция onSectionEnd()
{…
если (currentSection.isMultiAxis()) {
writeBlock(gFeedModeModal.format(94)); // обратнозависимая подача времени отключена
}
Сброс режима FPM вonSectionEnd
Возможно, ваша система управления станком не поддерживает стандартные скорости подачи обратнозависимого времени или DPM.
В этом случае вам нужно будет написать собственную функцию для обработки многоосевых подач. То getMultiAxisMoveLength
Функция поможет в расчетах длины перемещения, необходимых для расчета скоростей подачи по нескольким осям. Он принимает
текущую позицию для линейных осей и осей вращения и вычисляет длину перемещения вершины инструмента, линейных осей и
осей вращения из предыдущего местоположения.
Функция Описание
getRadialToolTipMoveLength Расчетное перемещение конечной точки инструмента вдоль фактической траектории инструмента.
Функции MoveLength
Вы можете проверить постпроцессор, с которым вы работаете, чтобы узнать, поддерживает ли он зондирование WCS. Самый простой
способ — попытаться выполнить операцию зондирования поста, пост не удастся, если зондирование не поддерживается. Вы можете
увидеть сообщение об ошибке, жалующееся на то, что скорость шпинделя выходит за допустимые пределы (операции измерения не
включают шпиндель) или сообщение о том, что цикл измерения должен обрабатываться в постпроцессоре.
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Ошибка: Скорость
##################################################
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # Ошибка. обрабатывается в
конфигурации поста.
Ошибка в работе: «WCS Probe1»
Ошибка при обработке onCycle() для записи 280.
################################################################################
Если вы получаете любое из этих сообщений, значит, ваш постпроцессор не поддерживает зондирование, и вам нужно
добавить его.
Одна вещь, которую вы заметите при создании операции измерения, это то, что интерфейс достаточно
интеллектуален, чтобы предоставить вам только те типы операций измерения, которые применяются к выбранному
типу геометрии. Например, если вы выберете плоскую грань, перпендикулярную оси X, вам будут доступны только
операцииХ поверхностьиУгол по оси Xоперации.
Параметр Описание
уголAskewДействие Этот параметр будет определен только с циклом углового измерения, когдаКосой
флажок установлен. Единственным допустимым параметром, когда он определен,
является строкастоп-сообщение.
подход1 Направление, в котором движется датчик, приближает его к детали. Это строковая
переменная, которая может бытьположительныйилиотрицательный.
Следующие функции поддерживают угловое измерение и безопасное позиционирование датчика. Возможно, их придется модифицировать,
чтобы они соответствовали требованиям вашего элемента управления. Показанный код предназначен для элемента управления в стиле
Fanuc. Они должны быть добавлены доonCyclePointфункция.
Функция Описание
подход Преобразует строку подхода к циклу в число (-1/1).
setProbeAngleMethod Определяет метод вывода (G68, G54.4, вращательный) для
циклов углового измерения.
setProbeAngle Выводит блоки вращения для циклов углового измерения. Этот вывод, возможно,
функция setProbeAngleMethod() { …
}
Требуемые функции углового датчика и датчика безопасного позиционирования
Основная логика для зондирования находится вonCyclePointфункция. Первая часть кода, которую нужно скопировать в сообщение,
находится вверху страницы.onCyclePointфункция.
если (isProbeOperation()) {
if (!useMultiAxisFeatures && !isSameDirection(currentSection.workPlane.forward, новый вектор(0, 0,
1))) {
if (!allowIndexingWCSProbing && currentSection.strategy == "зонд") {
error(localize("Обновление WCS/рабочего смещения с помощью измерения поддерживается только ЧПУ в
кадре WCS."));
возвращение;
}
}
если (printProbeResults()) {
writeProbingToolpathInformation(z - цикл.глубина + инструмент.диаметр/2);
инспекцияWriteCADTransform();
инспекцияWriteWorkplaneTransform();
если (тип проверкиWriteVariables == "функция") {
InspectionVariables.pointNumber += 1;
}
}
protectedProbeMove (цикл, x, y, z);
}
Обязательный код проверки в верхней части onCyclePoint
Все операции зондирования считаются отдельной операцией и не являются модальными. Следующий код в onCyclePointФункция
должна непосредственно следовать за требуемым кодом проверки, который вы только что добавили, и ее необходимо изменить, как
показано в выделенном коде, для поддержки проверки.
если (isFirstCyclePoint()||isProbeOperation()) {
если (!isProbeOperation()) {
// вернуться к исходной Z, которая является плоскостью зазора, и установить
абсолютный режим repositionToCycleClearance(cycle, x, y, z);
}
Необходимые модификации для поддержки зондирования
дефолт:
функция onCycleEnd() {
если (isProbeOperation()) {
zВыход.сброс();
gMotionModal.reset();
writeBlock(gFormat.format(65), "P" + 9810, zOutput.format(cycle.retract)); // защищенный возврат
назад
} еще {
…
}
ТоgRotationModalmodal используется для управления выводом кодов вращения (G68, G68.2 и т. д.). Возможно, эта переменная
уже определена в постпроцессоре, но может потребоваться ее обновление для поддержки зондирования. Он должен быть
определен, как показано.
var allowIndexingWCSProbing = false; //указывает, что датчик WCS с ориентацией инструмента поддерживается вар
probeVariables = {
outputRotationCodes: ложь, //определяет, требуется ли выводить коды вращения
зондУглМетод : "ВЫКЛЮЧЕННЫЙ", //ВЫКЛ., ВРАЩЕНИЕ ОСИ, G68, G54.4 :
компенсацияXY неопределенный
};
Добавить в раздел фиксированных настроек
Переменная Описание
разрешитьиндексированиевкспробинг Некоторые элементы управления не позволяют выполнять операции измерения WCS, когда
ориентация инструмента находится под углом к плоскости XY, т. е. поворотные столы не
находятся под углом 0 градусов. Если это так для вашей машины, отключите эту переменную,
определив ее какложный. Если измерение WCS разрешено, когда оси вращения не находятся под
углом 0 градусов, установите для этой переменной значениеистинный.
выходные коды вращения Управляет выводом кодов углового измерения. Эта переменная
управляется постпроцессором и должна быть установлена наложный.
зондУглМетод Определяет используемый метод углового измерения. Этот метод обычно
определяется постпроцессором вsetProbingAngleMethodфункция и может
управляться свойством постпроцессора. Он должен быть установлен на
ВЫКЛЮЧЕННЫЙ. Другие допустимые значенияОСЬ_ROT(используется, когда
определен поворотный стол с осью C),G68(стандартный метод вращения), илиG54.4(
на основе свойства постпроцессораиспользоватьG54x4).
компенсацияXY Управляет выводом переменных компенсации XY при угловом измерении. Эта
переменная управляется постпроцессором и должна быть установлена на
неопределенный.
Настройки зондирования
вар g68RotationMode = 0;
вар angularProbingMode;
Добавить в раздел собранного состояния
функция printProbeResults() {
вернуть currentSection.getParameter("printResults", 0) == 1;
}
вар probeOutputWorkOffset = 1;
если (isProbeOperation()) {
validate(probeVariables.probeAngleMethod != "G68", "Вы не можете проводить измерения, пока
действует вращение G68.");
validate(probeVariables.probeAngleMethod != "G54.4", "Вы не можете выполнять измерения, пока включена
компенсация ошибки установки заготовки G54.4.");
writeBlock(gFormat.format(65), "P" + 9832); // крутим щуп при
проверкеCreateResultsFileHeader();
} еще {
// осмотр поверхности
if (isInspectionOperation() && (typeofинспекцияProcessSectionStart == "функция")) {
инспекцияПроцессРазделНачало();
}
}
// определить подпрограмму
убрано = ложь;
}
Добавить в конце функции onSection
Охлаждение должно быть отключено во время операций зондирования, поэтому убедитесь, что следующее условие
находится вgetCoolantCodesфункция.
varmultiCoolantBlocks = новый массив(); // создаем форматированный массив для передачи в выводимую строку
}
Отключить охлаждающую жидкость для измерительных операций
Зонд должен быть выключен, а коды углового зондирования должны выводиться вonSectionEndфункция.
функция onSectionEnd()
{…
если (isProbeOperation()) {
writeBlock(gFormat.format(65), "P" + 9833); // отключить зонд if
(probeVariables.probeAngleMethod != "G68") {
установитьПробеАнгле(); // вывод угла поворота зонда, если требуется
}
}
}
singleResultsFile: {
title : "Создать один файл результатов",
description: "Установите значение false, если хотите сохранять результаты измерений для каждой траектории зонда/
проверки в отдельном файле",
группа : 0,
тип : "логическое",
ценность : истинный,
сфера : "Почта"
}
Добавьте свойство для управления выводом результатов проверки в один или несколько файлов.
Следующие функции должны быть включены, если ваша система управления поддерживает печать результатов измерений.
Модификации, которые вы уже сделали для поддержки зондирования, будут обрабатывать вызовы этих функций для вывода
результатов зондирования. Эти функции определяются последовательно и обычно располагаются после писатьRetract
функция.
функция getPointNumber()
{…
}
функцияинспекцияWriteCADTransform() { …
функцияинспекцияWriteWorkplaneTransform()
{…
}
function writeProbingToolpathInformation(cycleDepth) { …
}
Включите функции результатов зондирования
Циклы измерения диаметра делительной окружности (PCD) являются дополнением к измерению геометрии, которого нет в
измерении WCS. Как и все другие измерительные циклы, типы циклов PCD сохраняются вциклТип Переменная.
циклТип Описание
зондирование-xy-pcd-отверстие Ощупывает отверстия вокруг PCD.
зондирование-XY-PCD-босс Исследует боссов вокруг PCD.
Циклы измерения диаметра делительной окружности (PCD)
Как и в WCS Probing, параметры, определенные в операции Geometry Probing, передаются функциям цикла с
помощьюциклобъект. Они являются дополнением к параметрам, определенным для зондирования WCS, которые
также доступны в зондировании геометрии. Доступны следующие переменные, на которые ссылаются как 'cycle.
параметр'.
Параметр Описание
количество подфункций Количество геометрических объектов в операции измерения PCD.
pcdStartingAngle Начальный угол первого геометрического объекта, подлежащего измерению в
операции измерения PCD.
инструментДиаметрСмещение Определяет регистр смещения диаметра инструмента, используемый для обработки элемента.
инструментДлинаСмещение Определяет регистр смещения длины инструмента, используемый для обработки элемента.
Чтобы добавить Geometry Probing в свой пост, вам сначала нужно реализовать WCS Probing. После этого потребуются лишь
незначительные изменения для поддержки Geometry Probing.
ТоprobeMultipleFeaturesпеременная указывает почтовому движку, что несколько геометрических объектов могут быть исследованы за одну
операцию. Логика проверки во всех сообщениях теперь поддерживает эту функцию, поэтому ее следует установить наистинный. Он должен
быть определен с другими переменными пост-движка (разрешенокруговыеплоскости,высокая скорость подачи, и т.д.).
Если система управления поддерживает циклы измерения PCD, обязательно включите случаи для этих циклов в
onCyclePoint, где находится другой код цикла зондирования.
случай "зондирование-xy-pcd-отверстие":
Инспекция оптимизирует производственный процесс, позволяя выявить проблемные области и принять решение о любых
доработках, необходимых на более ранних этапах процесса. Это также помогает уменьшить потребность в перемещении деталей
между станком и измерительным устройством.
Если вы хотите использовать операции проверки поверхности, вам понадобится постпроцессор, который позволит вам
выводить и запускать эти пути проверки на вашем компьютере. Вы можете использовать один из универсальных
постпроцессоров Inspection, доступных наБиблиотека постов для Autodesk Fusion 360 , или измените текущий фрезерный
пост, который уже настроен для вашего станка, чтобы добавить функцию проверки.
Операции Surface Inspect считаются циклом в постпроцессоре и поэтому вызывают onCyclePointфункции, хотя они
расширены винспекцияЦиклОсмотрфункция. Стандарт циклТиппеременная для определения типа цикла не
устанавливается для операций проверки поверхности, а скорее isInspectionOperationФункция используется для
определения, является ли это циклом проверки поверхности. Это дополнительно поясняется вДобавление
вспомогательной логики проверки поверхностираздел. В отличие от других циклов, которые передают одну точку
onCyclePointфункция, цикл Surface Inspect будет содержать следующие 3 точки для каждого местоположения цикла,
при этом каждое местоположение генерирует отдельный и последующий вызовonCyclePoint.
HAAS — контрольная поверхность нового поколения Haas нового поколения Inspect Surface.cps
Хайденхайнская инспекция Heidenhain Inspection.cps
Siemens SINUMERIK 840D Осмотр Siemens 840D Inspection.cps
Постпроцессоры, поддерживающие операции проверки поверхности
Вы также можете поискать в ИнтернетеБиблиотека постов для Autodesk Fusion 360, чтобы увидеть, были ли добавлены какие-либо
другие постпроцессоры с возможностями проверки.
Основной код для логики Inspect Surface расположен в конце постпроцессора. Вам нужно будет
скопировать из определения описания, расположенного послепри закрытииилиonTerminateв конец
файла и добавьте этот код в конец вашего постпроцессора.
функция isInspectionOperation(раздел) {
вернуть section.hasParameter("стратегия-операции") && (section.getParameter("стратегия-операции") ==
"inspectSurface");
}
Добавить isInspectionOperation
В концеonSectionфункцию, но перед тем, как будут определены какие-либо подпрограммы, добавьте следующий код.
if (typeofинспекцияProcessSectionEnd == "функция") {
инспекцияПроцессРазделКонец();
}
Завершите операцию проверки поверхности
if (typeofинспекцияProgramEnd == "функция") {
КонецПрограммыинспекции();
}
Завершение программы проверки поверхности
Конечно, для начала вам понадобится модель, которую вы хотите распечатать. Для примеров в этом руководстве мы будем
использовать модель цепочки ключей Fusion, предоставленную в качестве образца CAM с вашей установкой Fusion 360. Эта
модель содержит операции субтрактивного производства, которые можно комбинировать с операциями аддитивного
производства, если ваша машина поддерживает обе возможности.
Вы увидите вкладку ДОБАВКИ на ленте ПРОИЗВОДСТВО. При выборе этой вкладки отобразятся
дополнительные меню.
Дополнительные меню
Как только вы найдете свою машину, вам нужно будет выбрать постпроцессор, соответствующий этой машине. Вы можете
сделать это, щелкнув правой кнопкой мыши наПруса И3 МК2машина и выборВыберите сообщение…
ТоПочтовая библиотекапоявится диалоговое окно. Выберите библиотеку Samples и установите флажок Additive, чтобы
отображались только постпроцессоры, поддерживающие возможности Additive. Вы захотите выбрать Пруса И3 МК2
машина. Вы можете перетащить этот пост в свою локальную библиотеку.
Теперь вам нужно связать постпроцессор с конфигурацией машины. Сделайте это, нажав кнопку
Редактировать…кнопка подМашинабыстрый. Отобразится конфигурация машины, изменитеМесто
размещениякЛичное – местноеи выберитеprusa.cpsпостпроцессор изПостпроцессорвыпадающее меню.
Вы можете выбрать и/или отредактировать настройки печати непосредственно в диалоговом окне «Настройка» при создании
аддитивной настройки. Настройки печати относятся к созданию траекторий аддитивных инструментов с настройками для
изменения температуры слоя, температуры сопла, толщины слоя, стиля заполнения и т. д. Вы также можете создать свои
собственные настройки печати по умолчанию, дав им новое имя.
Параметры печати можно изменить вне диалогового окна «Настройка», щелкнув правой кнопкой мыши значок «Параметры печати» в
разделе «Настройка добавления».
После создания Установки вы должны увидеть изображение основания машины и оболочки с расположенной на ней
деталью. Не стесняйтесь переименовывать новую настройку в Additive, чтобы вы знали, что это аддитивная операция. Если
вы собираетесь выполнять как аддитивные, так и вычитательные операции в одной и той же модели, вам нужно будет
переместить настройку Additive выше настройки Subtractive.
Если деталь находится не в том месте на машине, где вы хотите, вы можете легко изменить ее положение с
помощью меню POSITION.
Меню позиционирования
После того, как вы создадите копию конфигурации машины в своей локальной папке, вам нужно будет отредактировать ее
и описать свою машину. Обязательно дайте ему уникальное имя и описание и просмотрите все разделы, чтобы правильно
определить машину.
После создания конфигурации машины вам нужно будет скопировать исходную публикацию в локальную папку,
напримерprusa.cps, и дайте ему осмысленное имя. Затем вы можете назначить этот постпроцессор на свой компьютер.
Вы также можете выбрать выходную папку по умолчанию для ваших файлов G-кода при публикации.
Переменная Описание
кроватьцентр Постпроцессор определяет объект, в котором хранятся координаты центра
кровати.
кроватьТемп Температура постели.
Экструдер Безымянный объект, содержащий определение экструдера. Этот объект получается
путем вызова методаполучитьэкструдерфункция.
экструдерофсеты Массив, определяемый постпроцессором, который определяет смещения от эталонного
(первого) экструдера для каждого экструдера.
если (machineConfiguration.hasCenterPosition()) {
PrinterLimits.x.min = 0 - machineConfiguration.getCenterPositionX();
PrinterLimits.y.min = 0 - machineConfiguration.getCenterPositionY();
PrinterLimits.z.min = 0 + machineConfiguration.getCenterPositionZ();
}
Вызов hasCenterPosition перед вызовом getCenterPosition
В следующей таблице определены уникальные или модифицированные функции ввода для аддитивных
постпроцессоров. Вы можете ссылаться на таблицу в вычитательномВходные функциираздел для описания общих
функций входа.
Многие функции ввода получают свои аргументы и настройки либо из конфигурации машины, либо из настроек
печати. Доступ к этим диалоговым окнам можно получить, нажав правую кнопку мыши над настройкой Additive и
выбравРедактировать.
Редактирование установки
Откроется диалоговое окно «Настройка», в котором можно выбрать редактирование либо «Конфигурации машины» (описано в
предыдущем разделе), либо «Настройки печати». Вы также можете отобразить диалоговое окно «Параметры печати», нажав
кнопкуПараметры печатикнопка вдобавкаменю.
возможности = CAPABILITY_ADDITIVE;
// возможности = CAPABILITY_ADDITIVE | ВОЗМОЖНОСТЬ _ФРЕЗЕРВИРОВАНИЯ; // аддитивная и вычитательная
Установка возможностей постпроцессора на аддитивные
Общие глобальные переменные, найденные в аддитивном посте, перечислены ниже. Эти переменные
определены вgetPrinterGeometryиспользовать настройки из конфигурации машины.
х: 0,0,
у: 0,0,
г: 0,0
};
функция onOpen()
1. Определите настройки
2. Машина вывода и описание программы
3. Вывести начальные коды запуска
получитьпринтергеометрию();
Определение геометрии машины
Ниже приведен пример кода, который выводит информацию о программе и машине в выходной файл.
написатьКомментарий(программныйКомментарий);
Некоторые машины требуют, чтобы коды запуска выводились в начале программы для инициализации машины. Это может
включать возврат осей в исходное положение, коды инициализации и т. д.
// инициализируем машину
writeBlock("G28 W ; дома все без уровня сетчатой кровати");
writeBlock("G80; выравнивание сетки");
Выведите начальные коды запуска
9.4.3 в разделе
функция в разделе () {
Аргументы Описание
температура Температура в постели по Цельсию.
ждать Установлен вистинныйкогда машина должна ждать, пока кровать прогреется.
Максимальная температура кровати определяется вОграничениявкладку при определении конфигурации машины в Fusion
360.
writeBlock(mFormat.format(190), sOutput.format(temp)); }
еще {
writeBlock(mFormat.format(140), sOutput.format(temp));
}
}
Пример функции onBedTemp
Аргументы Описание
я бы Номер экструдера для активации. Первый экструдер 0.
функция onExtruderChange(id) {
если (id < numberOfExtruders) {
writeBlock(tFormat.format(id));
активэкструдер = идентификатор;
xOutput.reset();
yВыход.сброс();
zВыход.сброс();
} еще {
error(localize("Этот принтер не поддерживает экструдер") + integerFormat.format(id) + "!");
}
}
Пример функции onExtruderChange
Аргументы Описание
длина Длина добавочного материала, используемого для активного экструдера.
ТоonExtrusionResetбудет вызываться для сброса длины используемого аддитивного материала при смене активного
экструдера. В начале программы она будет вызываться со значением 0 и при переключении между одним
экструдером и другим будет передавать длину добавочного материала, используемого для вновь активированного
экструдера.
функция onExtrusionReset(длина) {
eOutput.reset();
writeBlock(gFormat.format(92), eOutput.format(длина));
}
Пример функции onExtrusionReset
9.4.8 на слое
функция onLayer (слой) {
Аргументы Описание
слой Текущий слой печатается.
ТоonLayerФункция вызывается для каждого печатного слоя и передается в активный слой. Его можно использовать для
вывода комментария перед траекторией для каждого слоя и/или для увеличения счетчика на панели управления станком,
чтобы показать ход печати.
Аргументы Описание
температура Температура экструдера в градусах Цельсия.
ждать Установлен вистинныйкогда машина должна дождаться прогрева экструдера.
я бы Номер экструдера, для которого устанавливается температура. Первый экструдер 0.
Аргументы Описание
скорость Скорость вентилятора в процентах от скорости по умолчанию в диапазоне 0-255.
я бы Номер экструдера, для которого устанавливается скорость вращения вентилятора, обычно это активный экструдер.
если (скорость == 0) {
writeBlock(mFormat.format(107)); }
еще {
writeBlock(mFormat.format(106), sOutput.format(скорость));
}
}
Пример функции onFanSpeed
9.4.11 по параметру
функция onParameter (имя, значение) {
Аргументы Описание
название Имя параметра.
ценность Значение, сохраненное в параметре.
Функция onParameter ведет себя так же, как и в субтрактивном постпроцессоре, но есть один параметр,
специфичный для аддитивных машин. Этоскорость подачипараметр, определяющий скорость
перемещения машины при позиционировании без выдавливания материала и при замене экструдера.
значение /= 25,4;
}
установить FeedRate (значение);
ломать;
}
}
Пример функции onParameter
9.4.12 на Рапиде
функция onRapid(_x, _y, _z) {
Аргументы Описание
_х, _у, _з Положение инструмента.
9.4.13 onLinearExtrude
Аргументы Описание
_х, _у, _з Положение инструмента.
_f Скорость подачи.
Аргументы Описание
я бы Номер экструдера для получения информации.
ТополучитьэкструдерФункция возвращает переменную Extruder, которая включает информацию об указанном
экструдере. В отличие от функций ввода, где база экструдера равна 0, вполучитьэкструдерфункция первый
экструдер упоминается какя бы=1, второе какя бы=2 и т. д.
функция isAdditive () {
9.5.3 getPrinterGeometry()
функция getPrinterGeometry() {
функция getPrinterGeometry() {
Конфигурация машины = получитьКонфигурация машины();
PrinterLimits.x.max = machineConfiguration.getWidth() –
Конфигурация машины.getCenterPositionX();
PrinterLimits.y.max = machineConfiguration.getDepth() –
machineConfiguration.getCenterPositionY();
PrinterLimits.z.max = machineConfiguration.getHeight() +
machineConfiguration.getCenterPositionZ();
Аргументы Описание
ценность Скорость подачи для позиционирующих перемещений.
ТоsetFeedRateФункция определена в постпроцессоре и используется для вывода скорости подачи, используемой для
перемещений позиционирования, когда аддитивный материал не используется. Обычно он вызывается со значением,
переданным вскорость подачипараметр, определенный вonParameterфункция.
Индекс 237
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель
Индекс 238
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель
ЧАС К
hasGlobalParameter ...................... 4-124
настройки ядра ...................................... 4-71
hasParameter....................... ............ 4-123
винтовая интерполяция ...................... 4-139 л
винтовое перемещение...... .................................
4-71 высокая подача ............... ..........4-128, 4-131 Лазер ................................................ 1 -21
Индекс 239
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель
О optimiseMachineAnglesByMachine7-177
опциональный пропуск .................................. ........
объект.................................................3-52, 3-69
4-152 единицы вывода ..................................... 4-73
таблицы смещения и головок ...................
7-183 onBedTemp......................... .......... 9-230 п
по циркулярному ................4-126, 4-135, 4-141
параметрические скорости подачи ......................
по закрытому ........ ............4-116, 4-117, 9-230
4-127 partCount ....................... .................. 9-224
по команде4-118, 4-125, 4-144, 5-158, 5-161
pendingRadiusCompensation ........ 4-127
onComment ..................4-120, 5-158, 6-170
разрешенные символы комментариев ........ 4 -120
onCycle ....................... ................... 4-142 onCycleEnd
точка поворота ...................................... 7-183
.........................4-150, 8-203 onCyclePoint............4-142,
Плазма.... ...................................... 1-21 после
8-198, 8-202 onDwell..................... ..........4-121, 5-158
ядра... ...................................... 3-47 Почтовая
по экструдеру ........................ ..... 9-231
библиотека ........ .............................. 1-2
onExtruderTemp ..................... 9-232
постпроцессор 2-40, 9-216, 9-218, 9- 223
onExtrusionReset ......... .................. 9-231 о скорости
документация по постпроцессорам ......... 3-45
вращения вентилятора......................... ........ 9-233
Форум по постпроцессорам ........1-2, 1-16 Идеи по
onImpliedCommand ...........4-117, 4-120
постпроцессорам ..... ................1-2, 1-16 Свойства
onLayer ....... ...................... 9-231 onLinear ....... 4-126,
поста ................................ .... 2-41
4-128, 4-129, 4-131 onLinear5D .. 4-133, 4-135, 7-178,
preloadTool ...................................... 4-98 Печать
7-194 на LinearExtrude ................................ 9-234 на
Настройки.................................9-218, 9-226
ManualNC ................5-158, 5-159, 5-160 в
Ограничения принтера .................. ................ 9-224
движении ................................. ........ 4-127
Время печати ................................ ......... 9-224
onMoveToSafeRetractPosition...... 7-190
probeMultipleFeatures .................. 8-208
onOpen......................4-86, 7 -172, 9-228 Ориентация
probeWorkOffset ....... ......... 4-114
шпинделя ........................ 4-125 по параметру 4-122,
Зондирование......... 1-22, 8-196, 8-207, 8-210
4-124, 5-159, 5-162, 8-204,
программный комментарий ......... ................... 4-87
название программы ................. 1-8, 4-73, 4-87
Комментарий к программе ................................ 4-88
9-233
Имя программы ................. .................... 4-88
onPassThrough ................5-159, 5-166
ProgramNameIsInteger ........... 4-73, 4-87
onRadiusCompensation ................. 4-126
Индекс 240
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель
Индекс 241
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель
Индекс 242
Руководство по постпроцессору Autodesk CAM 8/12/21