Вы находитесь на странице: 1из 249

Перевод: английский - русский - www.onlinedoctranslator.

com

Руководство по обучению работе с постпроцессором


Для использования с Fusion 360 CAM, Inventor CAM, HSMWorks

Руководство по постпроцессору CAM 08.12.21

© Autodesk, Inc., 2018-2021. Все права защищены.


Оглавление
1 Введение в постпроцессоры ................................................................ ................................. 1-1
1.1 Область применения................................................... ................................................. ................................................ 1-1
1.2 Что такое постпроцессор? ................................................. ................................................. .......... 1-1
1.3 Поиск постпроцессора ...................................................... ................................................. ................. 1-2
1.4 Загрузка и установка постпроцессора........................................................ ...................................... 1-3
1.4.1 Автоматическое обновление ваших постпроцессоров........................................... ............................. 1-6
1.5 Запуск постпроцессора ...................................................... ................................................. ............ 1-6
1.5.1 Диалоговое окно постобработки....................................... ................................................. ................... 1-7
1.5.2 NC-программы..................................................... ................................................. ................................ 1-9
1.5.3 Конфигурации машины...................................................... ................................................. ......... 1-12
1.6 Создание/изменение постпроцессора ...................................................... .............................................. 1-16
1.7 Тестирование вашего постпроцессора – эталонные части ................................................ .............................. 1-17
1.7.1 Расположение эталонных частей ....................................................... ................................................. 1-17
1.7.2 Фрезерование эталонной детали.......................................... ................................................. .......... 1-19
1.7.3 Эталонная часть токарно-фрезерного станка ...................................... ................................................. ........ 1-20
1.7.4 Эталонная часть по перемещению запасов ...................................... ................................................. 1 -21
1.7.5 Зондирование эталонной части ............................................ ................................................. ......... 1-22

2 Редактор постпроцессора Autodesk....................................... .............................. 2-23


2.1 Установка редактора постпроцессора Autodesk...................................... ................................ 2-23
2.2 Настройки постпроцессора Autodesk ....................................... ................................................. 2-26
2.3 Левая сторона всплывающего окна ....................................... ................................................. ............................. 2-28
2.3.1 Всплывающее окно Проводника ................................................ ................................................. ...................... 2-29
2.3.2 Всплывающее окно поиска ....................................... ................................................. ......................... 2-31
2.3.3 Всплывающее меню закладок....................................... ................................................. ................... 2-33
2.3.4 Всплывающее меню расширений....................................... ................................................. ................... 2-34
2.4 Функции редактора постпроцессора Autodesk ...................................... ................................. 2-35
2.4.1 Автодополнение.................................................. ................................................. .................... 2-35
2.4.2 Проверка синтаксиса ...................................................... ................................................. .................... 2-36
2.4.3 Скрытие разделов кода ....................................... ................................................. .......... 2-36
2.4.4 Соответствующие скобки ...................................................... ................................................. ................. 2-37
2.4.5 Перейти к номеру строки ....................................... ................................................. ................... 2-37
2.4.6 Открытие файла в отдельном окне ........................................ ...................................... 2-37
2.4.7 Горячие клавиши...................................................... ................................................. ......................... 2-38
2.4.8 Запуск команд....................................................... ................................................. ............... 2-39
2.5 Запуск/отладка поста ............................................ ................................................. ...... 2-40
2.5.1 Команды постпроцессора Autodesk........................................... ...................................... 2-40
2.5.2 Свойства постпроцессора..................................................... ................................................. .. 2-41
2.5.3 Запуск постпроцессора ....................................................... ................................................. ..... 2-41
2.5.4 Создание собственных промежуточных файлов ЧПУ....................................... .............................. 2-43

3 Обзор JavaScript ................................................................ ...................................... 3-45


3.1 Обзор................................................................... ................................................. ................................... 3-45
3.2 Синтаксис JavaScript....................................................... ................................................. ................. 3-45
3.3 Переменные ...................................................... ................................................. ................................... 3-47
3.3.1 Числа ....................................................... ................................................. ................................ 3-47

я
Руководство по постпроцессору 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

4 Входные функции ................................................................ ................................................. .... 4-70


4.1 Глобальная секция................................................... ................................................. ............................. 4-71
4.1.1 Настройки ядра..................................................... ................................................. ...................... 4-71
4.1.2 Таблица свойств..................................................... ................................................. ................. 4-74
4.1.3 Области свойств ...................................................... ................................................. ...................... 4-78
4.1.4 Группы свойств ...................................................... ................................................. ...................... 4-78
4.1.5 Доступ к свойствам ...................................................... ................................................. .............. 4-79
4.1.6 Определения формата ...................................................... ................................................. ................. 4-80
4.1.7 Определения выходных переменных..................................................... ................................................. .... 4-82
4.1.8 Фиксированные настройки..................................................... ................................................. ......................... 4-85
4.1.9 Собранное состояние ....................................... ................................................. ...................... 4-85
4.2 при открытии..................................................... ................................................. ...................................... 4-86
4.2.1 Определение настроек на основе свойств поста ...................................... ................................... 4-86
4.2.2 Определение многоосевой конфигурации........................................... ...................................... 4-87
4.2.3 Имя и заголовок программы вывода.......................................... ...................................... 4-87
4.2.4 Выполнение общих проверок ...................................................... ................................................. .... 4-92
4.2.5 Вывод кодов начального запуска ....................................... ................................................. .... 4-93
4.3 в разделе................................................... ................................................. ................................... 4-93
II
Руководство по постпроцессору CAM 08.12.21
Оглавление
4.3.1 Завершение предыдущей операции ....................................... ................................................. 4-94
4.3.2 Комментарии и примечания по эксплуатации ....................................... ................................................ 4- 95
4.3.3 Смена инструмента..................................................... ................................................. ...................... 4-97
4.3.4 Смещения системы рабочих координат ..................................... ................................................. 4-100
4.3.5 Рабочая плоскость — 3+2 операции....................................... ................................................. ... 4-102
4.3.6 Исходное положение...................................................... ................................................. ...................... 4-110
4.4 Раздел Объект ....................................................... ................................................. ...................... 4-111
4.4.1 текущая секция ....................................................... ................................................. ...................... 4-112
4.4.2 getSection....................................................... ................................................. ................................ 4-112
4.4.3 getNumberOfSections........................................................ ................................................. ...... 4-112
4.4.4 получить идентификатор ....................................................... ................................................. ...................................... 4-112
4.4.5 isToolChangeNeeded ...................................................... ................................................. .......... 4-113
4.4.6 isNewWorkPlane ...................................................... ................................................. ................ 4-113
4.4.7 isProbeOperation....................................................... ................................................. ................. 4-113
4.4.8 isInspectionOperation ................................................ ................................................. ...... 4-113
4.4.9 probeWorkOffset ....................................... ................................................. ................ 4-114
4.4.10 getNextTool ...................................................... ................................................. ...................... 4-114
4.4.11 getFirstTool................................................... ................................................. ...................... 4-114
4.4.12 инструментZRange.................................................. ................................................. ................. 4-114
4.4.13 стратегия....................................................... ................................................. ............................. 4-115
4.4.14 Контрольная группа .................................................. ................................................. ...................... 4-115
4.5 в конце раздела .................................................. ................................................. ...................... 4-115
4.6 при закрытии ...................................................... ................................................. ................................... 4-117
4.7 при завершении ...................................................... ................................................. ............................. 4-117
4.8 по команде..................................................... ................................................. ............................. 4-118
4.9 Комментарий................................................... ................................................. ............................. 4-120
4.10 при задержке..................................................... ................................................. ................................. 4-121
4.11 по параметрам ...................................................... ................................................. ...................... 4-122
4.11.1 Функция getParameter ...................................................... ................................................. ....... 4-123
4.11.2 Функция getGlobalParameter ...................................................... ...................................... 4-124
4.12 при сквозной передаче................................................... ................................................. ...................... 4-125
4.13 на скорости шпинделя.................................................. ................................................. ...................... 4-125
4.14 Ориентация шпинделя ...................................................... ................................................. ................ 4-125
4.15 Компенсация радиуса ...................................................... ................................................. ......... 4-125
4.16 в движении ...................................................... ................................................. ............................. 4-127
4.17 на Рапиде .................................................. ................................................. ................................. 4-128
4.18 invokeOnRapid .................................................. ................................................. ...................... 4-129
4.19 onLinear .................................................. ................................................. ................................. 4-129
4.20 invokeOnLinear .................................................. ................................................. ...................... 4-131
4.21 на Rapid5D ...................................................... ................................................. ............................. 4-131
4.22 invokeOnRapid5D ...................................................... ................................................. ................. 4-132
4.23 на Linear5D ...................................................... ................................................. ................................. 4-133
4.24 invokeOnLinear5D .................................................. ................................................. ................ 4-135
4.25 Циркуляр ................................................................ ................................................. ............................. 4-135
4.25.1 Настройки круговой интерполяции ........................................ ...................................... 4-137
4.25.2 Общие функции круговой интерполяции ........................................ ................................ 4-138
III
Руководство по постпроцессору CAM 08.12.21
Оглавление
4.25.3 Спиральная интерполяция ...................................................... ................................................. .......... 4-139
4.25.4 Спиральная интерполяция ...................................................... ................................................. ............ 4-140
4.25.5 Трехмерная круговая интерполяция........................................... ................................................. ..... 4-141
4.26 invokeOnCircular.................................................. ................................................. ................... 4-141
4.27 onCycle ................................................................ ................................................. ................................. 4-141
4.28 onCyclePoint.................................................. ................................................. ............................. 4-142
4.28.1 Типы циклов сверления................................................... ................................................. ........... 4-144
4.28.2 Параметры цикла...................................................... ................................................. ................ 4-145
4.28.3 Велосипедные плоскости/высоты ....................................................... ................................................. ..... 4-147
4.28.4 Общие функции цикла............................................ ................................................. ... 4-148
4.28.5 Вывод высоты тона с помощью циклов постукивания ................................................. ...................................... 4-149
4.29 в конце цикла..................................................... ................................................. ............................ 4-150
4.30 на машине перемотки ................................................ ................................................. ................. 4-151
4.31 Общие функции...................................................... ................................................. ................. 4-151
4.31.1 запись ............................................................. ................................................. .............................. 4-151
4.31.2 Блокировка записи..................................................... ................................................. ......................... 4-152
4.31.3 toPreciseUnit........................................................ ................................................. ...................... 4-153
4.31.4 сила--- .................................................. ................................................. ................................. 4-153
4.31.5 writeRetract.................................................. ................................................. ...................... 4-154

5 Ручные команды ЧПУ ................................................ ...................................... 5-157


5.1 onManualNC и expandManualNC.......................................... ...................................... 5-158
5.1.1 Пример функции «Ручное ЧПУ».............................................. ............................................. 5-159
5.1.2 Задержка обработки ручных команд ЧПУ ...................................... ............................ 5-160
5.2 по команде..................................................... ................................................. ............................. 5-161
5.3 по параметрам ...................................................... ................................................. ............................. 5-162
5.4 при сквозной передаче................................................... ................................................. ......................... 5-166

6 Отладка ................................................................ ................................................. ...... 6-166


6.1 Обзор................................................................... ................................................. ................................. 6-166
6.2 Постпроцессор dump.cps ....................................... ................................................. ....... 6-167
6.3 Отладка с использованием настроек постпроцессора..................................... ...................................... 6-167
6.3.1 Режим отладки ....................................... ................................................. ............................. 6-168
6.3.2 setWriteInvocations ................................................ ................................................. ............ 6-168
6.3.3 setWriteStack .................................................. ................................................. ...................... 6-168
6.4 Функции, используемые при отладке..................................................... ................................................. .. 6-169
6.4.1 отладка................................................... ................................................. ................................... 6-169
6.4.2 журнал .................................................. ................................................. ...................................... 6-169
6.4.3 запись ............................................................... ................................................. ................................ 6-170
6.4.4 запись комментария..................................................... ................................................. ...................... 6-170
6.4.5 записьОтладка.................................................. ................................................. ............................. 6-170

7 Многоосевые постпроцессоры..................................................... ...................................... 7-171


7.1 Добавление основных многоосевых возможностей......................................... ................................. 7-171
7.1.1 Создание форматов поворотных осей ........................................ ............................................. 7-171
7.1.2 Настройки и функции конфигурации машины ...................................... ................. 7-171

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

8 Добавление поддержки зондирования .................................................. ................................... 8-196


8.1 Зондирование WCS ....................................................... ................................................. ................................ 8-196
8.1.1 Операции зондирования ...................................................... ................................................. .............. 8-197
8.1.2 Добавление базовой логики зондирования........................................... ................................................ 8- 201
8.1.3 Добавление вспомогательной логики зондирования........................................... ...................................... 8-203
8.1.4 Добавление поддержки печати результатов зондирования ....................................... .............................. 8-206
8.2 Измерение геометрии....................................................... ................................................. ...................... 8-207
8.3 Осмотр поверхности..................................................... ................................................. ............................. 8-210
8.3.1 Проверка наземных операций ................................................ ................................................. ... 8-210
8.3.2 Добавление базовой логики Inspect Surface........................................... ...................................... 8-211
8.3.3 Добавление вспомогательной логики Inspect Surface........................................... ...................... 8-212

9 Аддитивные возможности и постпроцессоры..................................................... ..............9-214


9.1 Начало работы ....................................................... ................................................. ............................. 9-214
9.1.1 Поиск машины ...................................................... ................................................. ................ 9-215
9.1.2 Создание аддитивной настройки ....................................... ................................................. .... 9-217
9.1.3 Создание и моделирование аддитивной операции........................................ ................. 9-220
9.2 Создание новой конфигурации машины ....................................... ................................. 9-222
9.3 Аддитивные переменные ....................................................... ................................................. .................... 9-224
9.3.1 Объект конфигурации машины............................................ ...................................... 9-224
9.3.2 Объект экструдера..................................................... ................................................. ..............9-225
9.4 Функции аддитивного ввода ....................................................... ................................................. ........... 9-225
9.4.1 Глобальная секция.................................................. ................................................. ...................... 9-227
9.4.2 при открытии..................................................... ................................................. ................................ 9-228
9.4.3 Раздел.................................................................. ................................................. ............................. 9-229
9.4.4 при закрытии ....................................................... ................................................. .............................. 9-229
9.4.5 Температура кровати.................................................. ................................................. ......................... 9-230
9.4.6 при смене экструдера ...................................... ................................................. ..............9-230
9.4.7 при сбросе экструзии ....................................... ................................................. ................ 9-231
9.4.8 на слое .................................................. ................................................. .............................. 9-231
9.4.9 Температура экструдера ................................................ ................................................. ................. 9-232
9.4.10 onFanSpeed................................................... ................................................. ...................... 9-232
9.4.11 onParameter .................................................. ................................................. ...................... 9-233
9.4.12 в режиме Rapid ............................................... ................................................. ............................. 9-233

В
Руководство по постпроцессору 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.

Ожидается, что у вас есть некоторый опыт программирования и вы знакомы с требованиями


станка, для которого вы будете создавать постпроцессор.

1.2 Что такое постпроцессор?


Постпроцессор, иногда называемый просто «пост», является связующим звеном между системой CAM и вашим станком с ЧПУ.
Система CAM обычно выводит нейтральный промежуточный файл, который содержит информацию о каждой операции траектории
инструмента, такую как данные инструмента, тип операции (сверление, фрезерование, токарная обработка и т. д.) и данные
центральной линии инструмента. Этот промежуточный файл передается в постпроцессор, где он переводится на язык, понятный
станку с ЧПУ. В большинстве случаев этот язык представляет собой форму стандартного G-кода ISO/EIA, даже несмотря на то, что
некоторые элементы управления имеют собственный собственный язык или используют более разговорный язык. Во всех
примерах в этом руководстве используется формат G-кода ISO/EIA.

Если вам нужна дополнительная информация о формате G-кода,Справочник по ЧПУ содержит много полезной
информации, включая дальнейшее объяснение формата G-кода в главе 5 «Язык программирования ЧПУ».

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

Введение в постпроцессоры 1-1


Руководство по постпроцессору CAM 08.12.21
1.3 Поиск постпроцессора
Первый шаг в создании постпроцессора — найти существующий пост, который максимально соответствует вашим
требованиям, и начать с этого постпроцессора в качестве исходного. Вы никогда не создадите постпроцессор с нуля.
Вы найдете все общие посты, созданные Autodesk, на нашем сайте.Почтовая библиотека . Отсюда вы можете искать
машину, которую вы ищете, по типу машины, производителю машины или системы управления или по имени
постпроцессора.

Другие места для проверки наличия постпроцессора включаютФорум постпроцессоров HSM илиИдеи
постпроцессора HSM .

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

Введение в постпроцессоры 1-2


Руководство по постпроцессору CAM 08.12.21
Поиск постпроцессора в Ideas или на форуме

Бета-постпроцессор найден на идеях постпроцессора HSM

Если ваш постпроцессор не найден, вам следует поискатьФорум постпроцессоров HSM используя тот же метод,
который вы использовали на сайте HSM Post Processor Ideas. Форум постпроцессоров используется сообществом
HSM, чтобы задавать вопросы и помогать друг другу. Возможно, другой пользователь создал сообщение для запуска
вашей машины.

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

1.4 Загрузка и установка постпроцессора


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

Введение в постпроцессоры 1-3


Руководство по постпроцессору CAM 08.12.21
Выбор папки локального постпроцессора

При использовании Fusion 360 рекомендуется включить облачные публикации и поместить их в свою библиотеку активов. Таким образом,
постпроцессоры, библиотеки инструментов и шаблоны будут синхронизированы между устройствами и пользователями в компании.

Включение облачных постпроцессоров в Fusion 360

Введение в постпроцессоры 1-4


Руководство по постпроцессору CAM 08.12.21
Дважды щелкните папку CAMPosts, а затем нажмите кнопку «Загрузить».

После того, как вы загрузили свои публикации в облачную библиотеку, вы можете получить к ним доступ из Fusion 360. Для
этого нажмите кнопку «Настройка» в диалоговом окне «Постобработка» и выберите свою публикацию в раскрывающемся
меню.

Выбор публикации из облачной библиотеки

Введение в постпроцессоры 1-5


Руководство по постпроцессору CAM 08.12.21
Во всех случаях вам следует избегать размещения сообщений в рабочей папке установки, так как они могут быть перезаписаны
при обновлении HSM. Загрузка ваших постов в отдельную папку означает, что вы можете сократить список постпроцессоров,
которые отображаются в диалоговом окне постобработки, до тех, которые вы используете в своем магазине.

1.4.1 Автоматическое обновление ваших постпроцессоров


Fusion 360 может автоматически искать последние версии и дополнения постпроцессоров и машин,
когда они становятся доступными. Это достигается проверкой Автоматически получать последние
сообщения и машиныв разделе «Предварительный просмотр» пользовательских настроек.

Выбор диалогового окна постобработки в Fusion

1.5 Запуск постпроцессора


Постпроцессор можно запустить из диалогового окна «Постобработка» или из программы ЧПУ в Fusion 360. Вы можете либо
нажать кнопку «Постобработка», либо щелкнуть правой кнопкой мыши программу «Операция/ЧПУ» и выбрать
«Постобработка» в меню. Можно выбрать несколько операций и выполнить их постобработку в рамках одной операции.

Введение в постпроцессоры 1-6


Руководство по постпроцессору CAM 08.12.21
Слияние изобретатель HSMWorks Щелкните правой кнопкой мыши

1.5.1 Диалог постобработки


В Inventor CAM и HSMWorks всегда будет отображаться диалоговое окно «Постобработка», но Fusion 360 по умолчанию использует
программу ЧПУ в качестве интерфейса для постпроцессора. Вы можете переопределить настройку по умолчанию в Fusion 360 для
использования программы УП и вместо этого отобразить диалоговое окно постпроцессора, изменив настройку в разделе
«Предварительный просмотр» пользовательских настроек.

Выбор диалогового окна постобработки в Fusion 360

Введение в постпроцессоры 1-7


Руководство по постпроцессору CAM 08.12.21
Диалоговое окно постобработки

Поле Описание
Папка конфигурации Указывает расположение папки постпроцессора, который вы хотите
запустить. Вы можете нажать кнопку, чтобы открыть окно браузера
папок для выбора постпроцессора.
Настраивать Используется для выбора предустановленных библиотек постпроцессора или для
выбора каскадного постпроцессора. Каскадный пост обычно равен 3рдсторонний
постпроцессор или программа проверки, которая запускается после постпроцессора
HSM.

Почтовая конфигурация Определяет постпроцессор, который вы хотите запустить. Доступные сообщения


перечислены в раскрывающемся меню. Существуют фильтры, которые будут
ограничивать перечисленные постпроцессоры, включая поле «Текст поиска»,
«Возможности» (фрезерование, токарная обработка и т. д.) и «Поставщики».

Папки вывода Задает папку для выходного файла ЧПУ. При нажатии на кнопку
открывается окно браузера папок для выбора папки для файла ЧПУ. То
Открыть папкуКнопка открывает файловый браузер в этой папке.

Расширение ЧПУ Содержит расширение файла по умолчанию для выходного файла ЧПУ,
заданное в постпроцессоре. Вы можете переопределить расширение
файла в этом поле.
Название или номер программы Имя/номер выходного файла ЧПУ. Это имя/номер обычно
выводится в качестве первой строки файла ЧПУ, обычно в виде
кода Oxxxx, когда требуется число, или в виде комментария (xxxx),
если разрешено имя. Постпроцессор контролирует,
Введение в постпроцессоры 1-8
Руководство по постпроцессору CAM 08.12.21
Поле Описание
в этом поле разрешено буквенно-цифровое имя или необходимо ввести
число. Это определяетсяProgramNameIsInteger = Истина;оператор в
постпроцессоре и может быть установлен либоистинный (требуется
номер) илиложный(допускается буквенно-цифровое имя).
Комментарий к программе Это поле выводится как комментарий вверху файла ЧПУ.
Единица измерения Управляет единицами вывода файла ЧПУ. Обычно для этого используются те же
единицы измерения, что и для модели, но его можно переопределить для вывода
в дюймах или миллиметрах.
Изменить порядок, чтобы свести к минимуму смену инструмента Установите этот флажок, если вы работаете с несколькими наладками и хотите, чтобы
операции с одинаковыми номерами инструментов были размещены вместе, чтобы
свести к минимуму смену инструментов. Операции в рамках одной и той же установки
не будут переупорядочены.

Откройте файл ЧПУ в редакторе Установите этот флажок, если вы хотите открыть выходной файл ЧПУ в
редакторе после завершения постобработки. Используемый редактор
определяется вНастройкидиалог вОбщие->Производство-
> Внешний редакторполе.
Таблица свойств Отображает свойства, определенные в постпроцессоре, и позволяет
изменять эти свойства. Пожалуйста, смотритеТаблица свойств раздел
данного руководства для полного описания свойств постпроцессора.

Диалоговое окно постобработки

1.5.2 Программы ЧПУ


Программы ЧПУ поддерживаются в Fusion 360 и позволяют группировать операции и назначать постпроцессор,
который используется для этих операций. Вы создаете NC-программу, нажимая меню NC-программы или щелкая
правой кнопкой мыши (группу) операций и выбирая Create NC-программу из списка. Если вы не отметили
постобработку кода ЧПУ с функцией предварительного просмотра диалогового окна постобработки в диалоговом
окне «Настройки», то нажатие кнопки «Постобработка» вызовет программу ЧПУ и автоматически создаст программу
ЧПУ из выбранных операций при нажатии кнопки «Пост» или «ОК». нажимаются. Важно отметить, что нажатие
кнопки OK НЕ выполняет постобработку программы ЧПУ, а только сохраняет ее.

Введение в постпроцессоры 1-9


Руководство по постпроцессору CAM 08.12.21
Кнопка программы ЧПУ Щелкните правой кнопкой мыши, чтобы создать программу ЧПУ

Диалоговое окно «NC-программа» содержит две вкладки: «Настройки» и «Операции». Вкладка «Настройки»
определяет настройки постпроцессора, а ввод аналогичен диалоговому окну «Постобработка», хотя и отображается
в другом формате. Следует отметить, что группы свойств поддерживаются в таблице свойств, отображаемой в
диалоговом окне УП, и эти группы можно разворачивать и сворачивать. Диалоговое окно «Постобработка» не
поддерживает группы свойств.

Вы также заметите, что при постобработке NC-файла ни NC-программа, ни диалоговое окно Post Process не
отображаются. Если вы хотите изменить какие-либо настройки постобработки при использовании NC-файла, вы
должны отредактировать NC-файл, чтобы внести изменения.

Введение в постпроцессоры 1-10


Руководство по постпроцессору CAM 08.12.21
Выбор операций для управляющей программы

Настройки постобработки в программе ЧПУ

Введение в постпроцессоры 1-11


Руководство по постпроцессору CAM 08.12.21
Вы выбираете папку для постпроцессора и сам постпроцессор, нажимая кнопку кнопка далее
кПочтаполе. Вы можете щелкнуть правой кнопкой мыши на меню Linked в диалоговом окне Post Library, чтобы добавить
новую папку для выбора постпроцессоров. Новая папка будет отображаться в меню «Связанные».

Выбор новой папки для постпроцессоров

1.5.3 Конфигурации машины


Конфигурации станка можно использовать для определения кинематики и многоосевых возможностей станка как
для постпроцессора, так и для моделирования станка. Конфигурация машины назначается настройке в системе CAM.
Использование машинной конфигурации имеет явные преимущества.

1. Позволяет использовать один общий постпроцессор для нескольких машин с различной


кинематикой.
2. Постпроцессор назначается непосредственно Конфигурации машины.
3. Выходная папка ЧПУ определяется в конфигурации станка.
4. Определяет уникальные многоосевые характеристики станка.
5. Требуется для машинного моделирования.
6. Требуется для свойств операции.

Вы можете определить, поддерживает ли постпроцессор конфигурацию машины, проверив


активироватьМашинафункции внутри постпроцессора. Если эта функция отсутствует, то постпроцессор,
скорее всего, не примет или полностью не поддержит Конфигурацию машины. Существует ряд
постпроцессоров, поддерживающих конфигурации станков, таких как посты Fanuc, Haas Next Generation,
Heidenhain, Hurco, Siemens и Tormach.

Вы назначаете конфигурацию машины для настройки CAM при создании или редактировании настройки и нажатии
кнопкиВыбирать…кнопка. Откроется диалоговое окно «Библиотека машин», в котором можно выбрать машину из
доступных конфигураций.

Введение в постпроцессоры 1-12


Руководство по постпроцессору CAM 08.12.21
Выбор конфигурации машины

Диалоговое окно Machine Library состоит из следующих областей.

Площадь Пункт Описание


Расположение машины Определяет область, из которой вы хотите выбрать
Конфигурации Конфигурацию машины.
Недавний Отображает недавно выбранные
конфигурации машины.
Документ Отображает конфигурации машины, используемые в
активной модели.
Мои машины Отображает конфигурации машин, хранящиеся локально на
вашем компьютере или в выбранных (связанных) папках. Вы
можете добавить папки в связанную область, щелкнув правой
кнопкой мыши меню «Связанные» и выбравСвязать папку.

Библиотека Fusion 360 Отображает все конфигурации машин, включенные в


Fusion 360.
Конфигурации машины Список конфигураций машины, сохраненных в
выбранном месте.
Фильтры и машина ТоФильтрВкладка позволяет фильтровать конфигурации
Конфигурация машин на основе возможностей, готовности машинного
Описание моделирования и поставщика. ТоИнформацияВкладка
отображает информацию о выбранной конфигурации
машины.

Введение в постпроцессоры 1-13


Руководство по постпроцессору CAM 08.12.21
Площадь Пункт Описание
Меню редактирования Содержит кнопки для создания, редактирования,
копирования и удаления конфигураций машины. Щелчок
правой кнопкой мыши по конфигурации машины также
отобразит это меню.
Создает новую конфигурацию машины.

Редактирует существующую конфигурацию машины.


Конфигурация машины должна находиться в одном из
Мои машиныпапки.
Копирует выбранную конфигурацию машины.

Вставляет выбранную конфигурацию машины в


выбранную папку.
Импортирует внешний файл конфигурации машины.

Экспортирует выбранную конфигурацию машины во


внешний файл.
Удаляет выбранную конфигурацию машины.

Диалог машинной библиотеки

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

Последние версии конфигураций машин доступны на нашем веб-сайте.Почтовая библиотека . Отсюда


вы можете искать машину по типу машины, производителю машины или по названию машины.

Введение в постпроцессоры 1-14


Руководство по постпроцессору CAM 08.12.21
Онлайн-библиотека машин

После выбора конфигурации машины вы можете отредактировать ее, нажав кнопкуРедактировать...кнопку в диалоговом окне
настройки.

Редактирование/создание конфигурации машины

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

Площадь Описание
Описание Описывает постпроцессор, станок, производителя и ЧПУ для
управления конфигурацией.
Кинематика Определяет кинематику станка движущихся осей. Вы можете определить до 3
линейных осей, 2 оси вращения и один шпиндель. Вы можете добавить/удалить ось,
щелкнув компонент правой кнопкой мыши и выбрав соответствующее действие.
Когда вы добавляете ось, она будет добавлена после компонента, на который вы
нажали.

Определение выбранной оси отображается на правой панели диалогового окна,


включая исходное положение, вектор вращения (ориентацию), диапазон,
предпочтение и настройку TCP. Эти поля относятся непосредственно к

Введение в постпроцессоры 1-15


Руководство по постпроцессору CAM 08.12.21
Площадь Описание
параметрыcreateAxisфункционировать, как описано вМногоосевые
постпроцессорыглава.
Постобработка Здесь вы выберете расположение постпроцессора, сам
постпроцессор и выходную папку для файла ЧПУ. Они станут
значениями по умолчанию при постобработке и программах ЧПУ.
Многоосевой Определяет многоосевые возможности элемента управления, а также то, как
обрабатываются операции отвода/изменения конфигурации, а также
параметры сингулярности. Эти возможности описаны вМногоосевые
постпроцессоры глава.
Конфигурация машины Настройки постпроцессора

1.6 Создание/изменение постпроцессора


Как только вы найдете постпроцессор, который близок, но не точно соответствует требованиям вашей машины, вам нужно будет
внести в него изменения. Хорошей новостью является то, что все сообщения имеют открытый исходный код и могут быть изменены
без ограничений для создания нужного вам сообщения. У вас есть несколько вариантов внесения изменений.

1. Внесите изменения самостоятельно, используя данное руководство в качестве руководства и обратившись за


помощью к сообществу HSM наФорум постпроцессоров HSM .
2. ПосетитеИдеи постпроцессора HSM и создайте запрос на постпроцессор для вашей машины. Другие пользователи могут
проголосовать за ваш запрос, чтобы Autodesk создал и добавил вашу публикацию в нашу библиотеку.
3. Свяжитесь с одним из наших партнеров по CAM, который предлагает услуги пост-настройки. Этих партнеров можно
найти на форуме постпроцессоров HSM в верхней части страницы.

Поиск партнеров HSM CAM

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

Введение в постпроцессоры 1-16


Руководство по постпроцессору CAM 08.12.21
1. Постпроцессор (.cps), который будет использоваться в качестве начального поста.

2. Образец кода УП, запущенного на вашем компьютере.


3. Марка и модель машины/системы управления.
4. Тип станка (фрезерный, токарный, фрезерно-токарный, гидроабразивный и т.д.).
5. Конфигурация станка, включая линейные оси, настройку осей вращения и т. д.
6. Руководство по программированию для вашей машины/системы управления.

1.7 Тестирование вашего постпроцессора — эталонные части


При тестировании вашего постпроцессора вам понадобится деталь с операциями резки для последующей обработки.
Мы создали стандартные эталонные детали для этой конкретной цели. Эти части охватывают наиболее
распространенные сценарии, с которыми вы столкнетесь при тестировании постпроцессора, и доступны для
HSMWorks, Inventor CAM и Fusion 360 CAM. Они доступны как в метрическом, так и в дюймовом формате для всех трех
систем CAM. Есть пять различных эталонных частей.

• Фрезерование

• Токарная и фрезерно-токарная обработка

• Переводы акций
• Гидроабразивная лазерно-плазменная резка

• Зондирование

1.7.1 Расположение эталонных частей


Детали эталона доступны для всех пользователей Autodesk CAM и доступны в папке Samples для
каждого продукта.

Примеры деталей HSMWorks


C:\Program Files\HSMWorks\examples
Введение в постпроцессоры 1-17
Руководство по постпроцессору CAM 08.12.21
Образцы деталей Inventor CAM
C:\Пользователи\Общие\Общие документы\Autodesk\Inventor CAM\Примеры

Fusion 360 CAM


Выберите панель данных и дважды щелкните образцы CAM.

Введение в постпроцессоры 1-18


Руководство по постпроцессору CAM 08.12.21
Fusion 360 CAM (продолжение)
Дважды щелкните постпроцессор, чтобы отобразить образцы частей

1.7.2 Фрезерование контрольной детали


Фрезерование эталонных деталей включает следующие стратегии.

• 2D
• бурение
• Коды охлаждающей жидкости

• Ручные команды ЧПУ


• 3+2 5-осевой
• 5-осевой одновременный

Введение в постпроцессоры 1-19


Руководство по постпроцессору CAM 08.12.21
Эталонная деталь мельницы

1.7.3 Эталонная часть токарно-фрезерной обработки

Части эталонного фрезерно-токарного станка содержат следующие стратегии.

• Операции с первичным и вторичным шпинделем


• Превращение

• Осевое фрезерование

• Радиальное фрезерование

• 5-осевое фрезерование

Введение в постпроцессоры 1-20


Руководство по постпроцессору CAM 08.12.21
Токарная и токарно-фрезерная эталонная деталь

1.7.4 Эталонная часть по перемещению запасов


Эталонная часть перемещения запасов содержит следующие стратегии.

• Операции с первичным и вторичным шпинделем


• Простой перенос деталей

• Перенос деталей с отсечкой

Эталонная часть передачи запасов

Тестовая часть Waterjet-Laser-Plasma содержит следующие стратегии.

• Струя воды

• Лазер
• Плазма
• Вход/выход
• Компенсация радиуса

Введение в постпроцессоры 1-21


Руководство по постпроцессору CAM 08.12.21
Эталонная часть гидроабразивно-лазерно-плазменной резки

1.7.5 Эталонная часть зондирования


Тестовая часть Probing содержит следующие стратегии.

• Различные циклы зондирования

Введение в постпроцессоры 1-22


Руководство по постпроцессору CAM 08.12.21
Зондирование контрольной части

2 Редактор постпроцессора Autodesk


Поскольку постпроцессоры Fusion 360, Inventor CAM и HSMWorks представляют собой текстовый код JavaScript,
их можно редактировать в любом текстовом редакторе, с которым вы знакомы. На рынке есть различные
редакторы, оптимизированные для работы с таким программным кодом, как JavaScript. Мы рекомендуем Visual
Studio Code сУтилита постпроцессора Autodesk Fusion 360расширение. Использование этого редактора дает
следующие преимущества при работе с постпроцессорами Autodesk.

• Цветовое кодирование

• Автоматическое закрытие и сопоставление скобок и квадратных скобок


• Автоматический отступ
• Интеллектуальное завершение кода

• Автоматическая проверка синтаксиса

• Список функций
• Запустите постпроцессор прямо из редактора
• Сопоставьте строку выходного файла ЧПУ с командой постпроцессора, создавшей ее.

2.1 Установка редактора постпроцессора Autodesk


Прежде чем вы сможете использовать редактор VSC, вам необходимо его установить. Самый простой способ –
посетитьУтилита постпроцессора Autodesk Fusion 360 на странице Visual Studio Marketplace, где можно загрузить VSC,
а затем расширение Autodesk Fusion 360 Post Processor Utility. Обратите внимание, что сайт Visual Studio Code
довольно часто меняется, поэтому инструкции/изображения в этом разделе могут не совпадать с тем, что вы видите
на экране, но шаги установки должны быть похожими.

Установка кода Visual Studio

Редактор постпроцессора Autodesk 2-23

Руководство по постпроцессору CAM 08.12.21


Эта ссылка приведет вас на страницу установки Visual Studio Code. Выберите правильную версию для вашей
операционной системы.

Установка версии Visual Studio Code для Windows

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

Щелкните исполняемый файл, чтобы установить VSC.

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

Редактор постпроцессора Autodesk 2-24

Руководство по постпроцессору CAM 08.12.21


Выбор параметров установки
Вы можете выбрать автоматический запуск редактора кода Visual Studio после его установки. После открытия
редактора вы можете установить утилиту постпроцессора Autodesk Fusion 360, открыв Расширенияпросмотреть
на левой панели и выполнить поискАвтодеск. Выберите утилиту постпроцессора Autodesk Fusion 360, чтобы
установить ее.

Загрузка расширения постпроцессора Autodesk Fusion 360

Редактор постпроцессора Autodesk 2-25

Руководство по постпроцессору CAM 08.12.21


Установка расширения постпроцессора Autodesk Fusion 360

После установки расширения Autodesk Fusion 360 Post Processor Utility вам потребуется выйти из редактора VSC, а затем
перезапустить его, чтобы инициализировать расширение. Теперь вы готовы приступить к редактированию постпроцессоров
Autodesk.

2.2 Настройки постпроцессора Autodesk


После установки редактора Autodesk Post Processor вам потребуется настроить редактор в соответствии с вашими
предпочтениями. Откройте файл настроек, выбравФайл->Настройки->Настройки. В этом разделе описываются некоторые из
наиболее популярных настроек, но не стесняйтесь исследовать другие настройки на досуге, чтобы найти те, которые вы,
возможно, захотите изменить. Пользовательские настройки также можно отобразить с помощьюCtrl+Запятаяярлык.

Отображение настроек редактора

Настройки отобразятся в отдельной вкладке. Теперь вы можете искать отдельные настройки с помощью панели
поиска. Чтобы отобразить настройки Autodesk Fusion 360 Post Processor Utility, введитесмв строке поиска.

Редактор постпроцессора Autodesk 2-26

Руководство по постпроцессору CAM 08.12.21


Изменение настроек редактора

Существует описание, объясняющее настройку, что упрощает внесение изменений.

В следующей таблице приведен список некоторых наиболее распространенных параметров и их описания.

Параметр Описание
Редактор > Миникарта Определяет, отображается ли миникарта. Миникарта
представляет собой небольшое представление всего
файла, отображаемое в правой части окна и
позволяющее легко прокручивать файл.
Редактор: Размер шрифта Размер шрифта редактора.
Редактор: Вес шрифта Вес (толщина) шрифта редактора.
Редактор: Определить отступ Автоматически обнаруживаетeditor.tabSizeи
редактор.insertSpacesнастройки при открытии
файла.
Редактор: Вставить пробелы Если флажок установлен, пробелы будут вставлены в
файл, когдавкладкаклавиша нажата.
Редактор: Размер вкладки Устанавливает количество пробелов, которым равна табуляция.
Стандартная настройка для постпроцессоров Autodesk — 2.

Редактор > Подсказки параметров Включает всплывающее окно, в котором при вводе
отображается документация по параметрам и информация о
стиле.

Редактор: автоматически закрывающиеся скобки Определяет, должен ли редактор автоматически


закрывать скобки после их открытия.
Расширения: автоматическая проверка обновленийилиАвтоматические обновления Автоматически (проверять наличие) обновлений расширений.

Файлы: Ассоциации Связывает типы файлов с языком программирования.


Это должно быть"*.cps": "javascript"
Редактор постпроцессора Autodesk 2-27

Руководство по постпроцессору CAM 08.12.21


Параметр Описание
установите в нем, чтобы включить автоматические
функции редактора в постпроцессорах Autodesk.
Верстак: цветовая тема Определяет цветовую тему для редактора. Этот
параметр можно изменить с помощьюФайл-
> Настройки->Цветтематическое меню.
Утилита HSMPost: список функций автоматического обновления Обновляет список функций автоматически, без
необходимости обновления.
Утилита HSMPost: сортировка списка функций по алфавиту Если флажок установлен, список функций будет отсортирован.
Если флажок снят, имена функций будут отображаться в том
порядке, в котором они определены.

Утилита HSMPost: цветной вывод Когда этот флажок установлен, быстрые блоки, блоки скорости подачи

и круговые блоки будут отображаться в цвете.

Утилита HSMPost: быстрый цвет Цвет для быстрого перемещения блоков.

Утилита HSMPost: линейный цвет Цвет блоков перемещения скорости подачи.

Утилита HSMPost: круговой цвет Цвет блоков кругового перемещения.


Утилита HSMPost: включить автоматический выбор строки Включает автоматический выбор строки в
постпроцессоре, сгенерировавшем выбранную
строку в выходном файле ЧПУ.
Утилита HSMPost: единицы вывода Устанавливает желаемые единицы вывода при
постобработке
Утилита HSMPost: сокращение выходного кода Ограничивает количество блоков, выводимых
при публикации, что упрощает навигацию.

Утилита HSMPost: публикация на CNCSelection Если этот флажок установлен, постобработка будет
выполняться, как только будет выбран файл ЧПУ.

Утилита HSMPost: публикация при сохранении Автоматически запускать постпроцессор при его
сохранении, только если открыто окно выходного файла
ЧПУ.
Часто изменяемые пользовательские настройки

2.3 Левая сторона всплывающего окна

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

Редактор постпроцессора Autodesk 2-28

Руководство по постпроцессору CAM 08.12.21


Левое всплывающее диалоговое окно

2.3.1 Всплывающее меню проводника

Всплывающее меню проводника содержит расширяемые списки, которые используются для отображения открытых редакторов, папок,
переменных, функций и селектора ЧПУ. Стрелка ► слева от каждой записи используется для расширения или свертывания списка.

Список Описание
ОТКРЫТЬ РЕДАКТОРЫ Список файлов, открытых в этом экземпляре редактора
VSC. Любые файлы, которые были изменены, но не
сохранены, будут отмечены маркером (•). Количество
измененных файлов, которые не были сохранены,
отображается в значке проводника.
НЕТ ОТКРЫТЫХ ПАПОК Вы можете открыть папку для быстрого доступа ко всем
постпроцессорам в папке. Развернув папки, вы увидите
Открыть папкукнопка, с помощью которой можно
открыть папку. Щелчок по файлу в открытой папке
автоматически откроет его в редакторе. Обратите
внимание, что если папка открыта, то все открытые
файлы в редакторе сначала будут закрыты, и вам будет
предложено сохранить те, которые были изменены.

КОНТУР Список функций, определенных в постпроцессоре, и


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

Редактор постпроцессора Autodesk 2-29

Руководство по постпроцессору CAM 08.12.21


Список Описание
СЕЛЕКТОР ЧПУ Содержит промежуточные файлы Autodesk
(*.cnc), доступные для постпроцессора из
редактора VSC. Этот список поясняется далее
в Запуск/отладка постараздел этой главы.

СПИСОК ФУНКЦИЙ Расширение списка функций отобразит функции,


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

ПОЧТОВЫЕ СВОЙСТВА Содержит таблицу свойств для постпроцессора,


аналогичную таблице свойств, отображаемой
при запуске публикации из CAM. Этот список
поясняется далее вЗапуск/отладка постараздел
этой главы.
СПИСОК ПЕРЕМЕННЫХ Перечисляет типы переменных, поддерживаемые
постпроцессором, такие как массив, формат, вектор и
т. д. Он не содержит списка переменных,
определенных в постпроцессоре. Развернув тип
переменной, нажав стрелку ► слева от нее,
отобразятся функции, связанные с типом переменной.
Исследуйте всплывающие элементы

Открытые редакторы Открытие папки Список файлов открытых папок

Редактор постпроцессора Autodesk 2-30

Руководство по постпроцессору CAM 08.12.21


Контур Селектор ЧПУ Список функций

Свойства поста Список переменных

2.3.2 Всплывающее окно поиска

Вы можете искать текстовую строку в текущем файле или во всех открытых файлах. Для поиска текстовой строки в текущем файле
следует использовать всплывающее окно «Найти», доступ к которому осуществляется нажатием кнопкиCtrl+Fключи.

Ctrl+F Find Popup – поиск текстовой строки в текущем файле

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

Использование всплывающего окна «Найти» для поиска текстовых строк

Редактор постпроцессора Autodesk 2-31

Руководство по постпроцессору CAM 08.12.21


ТоПоисквсплывающее окно ищет файл в открытых файлах и в файлах, находящихся в открытой папке (см.Исследователь
всплывающее окно, чтобы увидеть, как открыть папку). ТоПоискпоявится диалоговое окно, когда вы нажмете кнопкуПоиск
кнопка.

Всплывающее окно поиска — поиск текстовой строки в нескольких файлах

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

Поиск текстовой строки в открытых файлах

Существуют параметры, доступные при поиске текстовых строк. Эти параметры управляются с помощью значков в
Поискдиалог иНаходитьнеожиданно возникнуть.

Значок Описание
Если этот параметр включен, регистр строки поиска должен совпадать с соответствующей текстовой
строкой в файле.
Если этот параметр включен, все слово совпадающей текстовой строки в файле должно
совпадать со строкой поиска. Когда он отключен, он будет искать вхождения строки
поиска в словах.

Редактор постпроцессора Autodesk 2-32

Руководство по постпроцессору CAM 08.12.21


Значок Описание
Когда включено, '.' можно использовать в качестве односимвольного подстановочного знака, а символ '*' можно
использовать в качестве многосимвольного подстановочного знака в строке поиска.

Поиск вперед в файле. вНаходитьтолько всплывающее окно.


Поиск назад в файле. вНаходитьтолько всплывающее окно.
Ищет текстовую строку только в выделенном тексте в файле. вНаходитьтолько
всплывающее окно.
ЗакрываетНаходитьвсплывающее окно.
Обновите окно результатов. вПоисктолько вылет.
Свернуть все развернутые файлы в окне результатов. вПоисктолько вылет.

Отображает поля, которые позволяют включать или исключать определенные файлы из поиска. в
Поисктолько вылет.
ОтображаетЗаменятьполе, позволяющее заменитьПоисктекст сЗаменять текст
поля.
Заменяет текущее (выделенное) вхождениеПоисктекст сЗаменять текст поля.
Попадание вВходитьключ, находясь вЗаменятьfield выполняет ту же замену. в
Находитьтолько всплывающее окно.
Заменяет все вхожденияПоисктекст сЗаменятьтекст поля. При инициации изПоиск
всплывающее окно, все вхождения текста во всех файлах, перечисленных в Результаты
окно будет заменено.
Параметры поиска и замены

2.3.3 Всплывающее меню закладок

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

Чтобы просмотреть активные закладки, вы можете открыть всплывающее меню «Закладки» и развернутьКонтрольные точкиокно.
Затем вы можете перейти непосредственно к строке, отмеченной закладкой, выбрав эту строку во всплывающем меню «Закладки».
Закладки, установленные во всех открытых файлах, будут отображаться во всплывающем меню, а файл, в котором установлена
закладка, автоматически станет активным окном при выборе закладки.

Редактор постпроцессора Autodesk 2-33

Руководство по постпроцессору CAM 08.12.21


Использование всплывающего меню закладок

2.3.4 Всплывающие расширения

Visual Studio Code — это редактор с открытым исходным кодом, и сообщество добавило к нему множество
расширений. Например,Постпроцессор Autodesk Fustion 360Утилита является расширением этого редактора.
Открыв всплывающее окно «Расширения», вы увидите, какие расширения вы установили и для каких
расширений ожидаются обновления.

Просмотр установленных расширений

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

Вы можете искать в Visual Studio Marketplace расширения, полезные для вашего стиля редактирования, введя имя в
полеПоисковые расширения в Marketplaceполе. Например, если вам нужен более специализированный способ
установки закладок, вы можете ввести закладку в это поле, и будут отображаться все расширения, связанные с
добавлением закладок. Вы можете нажать зеленыйУстановитькнопку для установки расширения.

Вы также можете искать расширения в Интернете по адресуРынок Visual Studio .

Редактор постпроцессора Autodesk 2-34

Руководство по постпроцессору CAM 08.12.21


Просмотр расширений в интернет-магазине

2.4 Функции редактора постпроцессора Autodesk


Редактор Autodesk Post Processor имеет функции, упрощающие редактирование файлов JavaScript постпроцессора.
Одним из примеров является цветовое кодирование текста, переменные — одним цветом, функции — другим,
зарезервированные слова JavaScript — третьим и так далее. Цвета каждого объекта основаны на Цветовая тема
верстакапараметр.

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

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

ЕслиРедактор: подсказки параметровустановлено значение true, то при вводе имени функции,


включая открывающую скобку, вам будут предоставлены имена аргументов функции для справки.

Редактор постпроцессора Autodesk 2-35

Руководство по постпроцессору CAM 08.12.21


Использование автозавершения

2.4.2 Проверка синтаксиса


Если у вас есть синтаксическая ошибка при редактировании файла, редактор достаточно умен, чтобы пометить ошибку,
увеличив счетчик ошибок в левом нижнем углу нижнего колонтитула окна и пометив проблему в файле красной волнистой
линией. Вы можете открыть окно «Проблемы», выбрав X в нижнем колонтитуле окна, чтобы увидеть все строки, содержащие
синтаксическую ошибку. Нажав на строку, отображающую ошибку, вы перейдете прямо к этой строке, чтобы вы могли
устранить ошибку.

Вы можете закрыть окно, нажав X в нижнем колонтитуле окна или X в правом верхнем углу окна
Проблемы.

Отображение синтаксических ошибок

2.4.3 Скрытие разделов кода


Вы можете скрыть код, заключенный в фигурные скобки {}, поместив курсор справа от номера строки в строке
с открывающей фигурной скобкой, а затем нажав значок [-]. Код можно снова расширить, нажав значок [+].
Обратите внимание, что значки не будут отображаться, пока курсор не будет помещен в область между
номером строки и окном редактирования.

Редактор постпроцессора Autodesk 2-36

Руководство по постпроцессору CAM 08.12.21


Скрытие разделов кода

2.4.4 Соответствующие скобки


Если вы поместите курсор редактирования в круглую скобку (()), квадратную скобку ([]) или фигурную скобку ({}), редактор
выделит выбранное вложение, а также открывающий/закрывающий соответствующий символ вложения. Если несколько
символов вложений находятся рядом друг с другом, будет выбрано вложение, следующее за курсором редактирования.
Если символ вложения не выделяется, это означает, что нет соответствующего открывающего/закрывающегося
вложения.

Соответствующие скобки

2.4.5 Перейти к номеру строки


Вы можете перейти к определенному номеру строки в файле, нажав кнопкуCtrl+Gклавиши, а затем введите номер
строки.

Перейти к номеру строки

2.4.6 Открытие файла в отдельном окне


Вы можете открыть файл в текущем окне, выбравФайл->Открыть файл…меню на панели задач или нажав
кнопкуCtrl+Оключи. Вы можете открыть активный файл в отдельном окне VSC, нажав кнопку Ctrl+К
клавиши, а затем нажатиемОключ. Файл откроется в новом окне и останется открытым
Редактор постпроцессора Autodesk 2-37

Руководство по постпроцессору CAM 08.12.21


в активном окне. Вы также можете открыть новое окно VSC, выбравФайл->Новое окноменю или
нажатием кнопкиCtrl+Shift+Nключи.

Открыть отдельное окно VSC

2.4.7 Горячие клавиши


Вы можете отобразить назначенные клавиши быстрого доступа, нажав кнопкуF1ключ, а затем введитеключдля отображения
всех команд, ссылающихся на ключевую строку. ВыберитеНастройки: открытые сочетания клавишменю. Вы также можете
нажать кнопкуCtrl+K Ctrl+Sклавиши по очереди, чтобы отобразить окно «Горячие клавиши».

Отображение клавиш быстрого доступа

Назначение сочетаний клавиш

Редактор постпроцессора Autodesk 2-38

Руководство по постпроцессору CAM 08.12.21


Изменения и/или дополнения к назначениям клавиш быстрого доступа можно внести, выбрав keybindings.json
ссылка вверху страницы. Откроется разделенное окно, в котором в левом окне отображаются сочетания клавиш по
умолчанию, а в правом окне — определенные пользователем сочетания клавиш. Используйте ту же процедуру, что
и при изменении параметра для изменения сочетания клавиш, скопировав определение привязки из левого окна в
правое окно и внеся необходимые изменения. Обязательно сохраните keybindings.jsonфайл после внесения
изменений.

Формат нажатий клавиш, представляющих один ярлык, определен в следующей таблице.

Ярлык Образец Описание


ключ F1 Нажмите единственную клавишу.

ключ+ключ Ctrl+Shift+Ввод ключэто название клавиши, которую нужно нажать. Символ + означает,
что клавиши должны быть нажаты одновременно. Клавиша + не
нажата.
ключ ключ Ctrl+K Ctrl+S Клавиши следует нажимать последовательно, одну за другой. Каждая
клавиша может быть комбинацией нескольких клавиш, которые нажимаются
одновременно, как описано выше. Пока неСдвигявляется частью ключевой
последовательности, то указываются строчные буквы.
Синтаксис сочетания клавиш

2.4.8 Запуск команд


Команды, доступные с помощью сочетаний клавиш или меню, можно найти и запустить из всплывающего диалогового окна
команд, а доступ к ним осуществляется в редакторе нажатием кнопкиF1ключ. После отображения всплывающего окна
команды вы можете искать команды, вводя текст в строке поиска. Команды, соответствующие поиску, будут отображаться
вместе с клавишами быстрого доступа, назначенными для команд. Выберите команду, чтобы запустить ее.

Запуск команды

Редактор постпроцессора Autodesk 2-39

Руководство по постпроцессору CAM 08.12.21


2.5 Запуск/отладка поста
ТоУтилита постпроцессора Autodesk Fusion 360расширение позволяет запускать редактируемый постпроцессор
непосредственно из редактора и отлаживать пост, сопоставляя строки вывода в файле ЧПУ со строкой кода, сгенерировавшей
вывод. Вы можете запустить публикацию в соответствии с предоставленными промежуточными файлами, сгенерированными
из тестовых частей, или вы можете создать свой собственный промежуточный файл для запуска публикации.

2.5.1 Команды постпроцессора Autodesk


Существуют встроенные команды, относящиеся к запуску постпроцессора. Доступ к этим командам
осуществляется нажатием клавиши F1 и вводом HSM в поле поиска.

Отображение команд постпроцессора Autodesk

В следующей таблице описаны доступные команды.

Команда Описание
Почтовая утилита Отображает меню, в котором вы можете выполнить
постобработку выбранного промежуточного файла (ЧПУ) в
открытом постпроцессоре, выбрать новый файл ЧПУ или
отобразитьСправка Autodesk Postокно. Вы также можете
использовать ярлыкCtrl+Alt+Gдля запуска постпроцессора.

Изменить исполняемый файл сообщения Задает расположение исполняемого файла механизма


постпроцессора.

Показать отлаженный код Отображает вызываемые функции ввода и


номера строк, сгенерировавших блок в
выходном файле ЧПУ. Это тот же вывод, который
отображается при вызовеsetWriteStack (истина) и
setWriteInvocations (истина)функции.
Удалить файл ЧПУ Эту команду нельзя запустить из меню
«Команды». Щелкните правой кнопкой мыши
файл ЧПУ вВыбор ЧПУсписок и выборУдалить
файл ЧПУудалит файл и удалит его из списка.

Отключить автоматический выбор линии Отключает функцию автоматического отображения


строки в постпроцессоре, сгенерировавшем
выбранную строку в выходном файле ЧПУ.

Редактор постпроцессора Autodesk 2-40

Руководство по постпроцессору CAM 08.12.21


Команда Описание
Скачать экспортный постпроцессор ЧПУ ЗагружаетЭкспорт постпроцессораиспользуется для
создания собственных файлов ЧПУ для тестирования.
Опубликовать помощь Отображает онлайнДокументация по постпроцессору
AutoDesk CAMстраница в Интернете.
Команды постпроцессора Autodesk

2.5.2 Свойства постпроцессора


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

Если вы добавляете новое свойство в сообщение или по какой-то причине свойства не отображаются, вы можете нажать желтый
символ обновления в заголовке свойств сообщения, чтобы обновить отображаемые свойства.

Изменение свойств поста

2.5.3 Запуск постпроцессора


Для запуска открытого в редакторе постпроцессора можно использовать командуCtrl+Alt+Gярлык или запустить
Почтовая утилитаиз командного окна, как описано в предыдущем разделе. Сначала вам нужно будет выбрать
промежуточный файл ЧПУ для запуска поста. Вы выбираете файл ЧПУ, открываяИсследовательвсплывающее окно и
расширениеСелектор ЧПУlist, пока не найдете нужный файл ЧПУ.

Редактор постпроцессора Autodesk 2-41

Руководство по постпроцессору CAM 08.12.21


Опубликовать выбранный файл ЧПУ против активного поста

Вы также можете выбрать файл ЧПУ из меню Post Utility.

Выберите файл ЧПУ или постпроцессор с помощью команды Post Utility.

При первом запуске постпроцессора в редакторе возможно, что местонахождение исполняемого файла
постпроцессора (post.exe) неизвестно. В этом случае вы увидите следующее сообщение.

Вы можете нажать кнопкуПросматривать…кнопка для поискаpost.exe. Исполняемый файл будет находиться в


одном из следующих мест в зависимости от запущенной версии HSM.

Версия HSM Разместить исполняемый файл


Фьюжн 360 C:\Пользователь\имя пользователя\AppData\Local\Autodesk\webdeploy\production\(я бы)\Приложения\CAM360

имя пользователяэто ваше имя пользователя, под которым вы вошли в систему.(я бы)— это уникальное и длинное имя,
которое меняется в зависимости от установленной версии Fusion 360. Обычно вы выбираете папку с самой последней
датой.

изобретатель C:\Program Files\Autodesk\Inventor CAMгггг

гггг яs номер версии (год) Inventor.


HSMWorks C:\Program Files\HSMWorks

Редактор постпроцессора Autodesk 2-42

Руководство по постпроцессору CAM 08.12.21


Размещение исполняемых файлов

После публикации файла ЧПУ выходной файл ЧПУ или файл журнала будут отображаться на правой
панели разделенного экрана. КогдаHSMPosUtility: включить автоматический выбор строкизначение true,
то двойное нажатие на строку в выходном файле ЧПУ выделит строку в постпроцессоре,
сгенерировавшем выходные данные. Второй щелчок должен быть на другом символе в той же строке
вывода, чтобы выделить строку. Затем, нажав на другой символ в той же строке, вы пройдете через стек
функций, которые были вызваны при генерации вывода.

Выходной файл ЧПУ, дважды щелкните строку вывода, чтобы увидеть код, который сгенерировал вывод

2.5.4 Создание собственных промежуточных файлов ЧПУ


Расширение Autodesk Post Processor поставляется со встроенными промежуточными файлами ЧПУ, которые создаются с использованием
эталонных деталей HSM. Их можно использовать для тестирования большинства аспектов постпроцессора, но бывают случаи, когда вам
нужно протестировать определенные сценарии. В этих случаях вы можете создать свой собственный файл ЧПУ для использования в качестве
входных данных.

Сначала вам нужно будет скачатьэкспортировать файл ЧПУ в vs code.cpsпостпроцессор. Вы можете сделать
это, запустивСкачать экспортный постпроцессор ЧПУкоманда.

Редактор постпроцессора Autodesk 2-43

Руководство по постпроцессору CAM 08.12.21


Загрузите постпроцессор экспорта ЧПУ

Появится файловый браузер, который позволит вам выбрать папку, в которую вы хотите загрузить
пост. Следуйте указаниям вЗагрузка и установка постпроцессорараздел для установки постпроцессора
в вашей системе.

После того, как постпроцессор будет установлен, вы захотите выполнить постобработку операций, которые хотите
использовать для тестирования. Постпроцессор экспорта ЧПУ запускается так же, как и любой другой постпроцессор
Autodesk, за исключением того, что он не генерирует код ЧПУ, а создает копию файла ЧПУ из системы Autodesk CAM вОбычай
расположениеСелектор ЧПУпапка. В большинстве сообщений для имени выходного файла используется число,
рекомендуется дать файлу ЧПУ уникальное имя, описывающее операции, которые использовались для его создания.

Создайте пользовательский промежуточный файл ЧПУ

Как только вы нажмете желтую кнопку обновления, вы должны увидеть файл ЧПУ вОбычайотделениеСелектор ЧПУlist и
может использовать его при постобработке из редактора VSC. Если вы решите, что вам больше не нужен пользовательский
промежуточный файл ЧПУ, вы можете удалить его, щелкнув правой кнопкой мыши файл ЧПУ и выбрав Удалить файл ЧПУ.

Редактор постпроцессора Autodesk 2-44

Руководство по постпроцессору CAM 08.12.21


Использование пользовательского промежуточного файла ЧПУ Удаление пользовательского промежуточного файла ЧПУ

3 Обзор JavaScript
3.1 Обзор
Постпроцессоры Autodesk написаны на языке JavaScript. Он похож на языки программирования C, C++ и Java,
является интерпретируемым, а не компилируемым языком, и является объектно-ориентированным. JavaScript,
используемый для разработки постпроцессоров, довольно прост для изучения и понимания, но все же сохраняет
свою сложную природу для более продвинутых программистов.

В этой главе рассматриваются основы языка JavaScript и соглашения, используемые в постпроцессорах Autodesk.
Существует множество веб-сайтов, документирующих язык JavaScript. ТоКРАСНОЯВНЫЙ ЯВАСКРИПТ сайт имеет
красиво оформленный формат. Если вы предпочитаете печатное руководство по JavaScript, то Полное
руководство по JavaScript, Автор: Дэвид Фланаган, Издатель: O'ReillyРекомендовано. Какое бы руководство вы ни
использовали, вы захотите сосредоточиться на основном синтаксисе JavaScript и игнорировать браузерные и
клиентские аспекты языка.

Документация по постпроцессору Autodesk предоставляется в качествеpost.chmфайл с HSMWorks и Inventor


CAM, или вы можете посетитьДокументация по постпроцессору Autodesk CAM Веб-сайт. Вы обнаружите, что
post.chmверсию документации легче просматривать, так как она имеет рабочий индекс.

3.2 Синтаксис JavaScript


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

текущая охлаждающая жидкость = 7;

текущая охлаждающая жидкость = 8;

текущая охлаждающая жидкость = 9;

Чувствительное к регистру определение 3 разных переменных

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

Обзор JavaScript 3-45


Руководство по постпроцессору CAM 08.12.21
Команды могут быть продолжены на несколько строк и заканчиваются точкой с запятой (;), обозначающей конец
логической команды. Если вы определяете строковый литерал в кавычках, литерал должен быть определен в одной
строке, а не в нескольких строках. Если текстовая строка слишком длинная для одной строки, ее следует объединить с
помощью операции.

message = «Перед запуском необходимо измерить отверстие диаметром 3 дюйма» +


"следующая операция.";
Разбиение текстовой строки на несколько строк

Есть два метода определения комментариев в JavaScript. Вы можете либо заключить комментарии между
символами /* и */, тогда весь текст между этими разделителями будет считаться комментарием, либо поместить
символы // перед текстом комментария.

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

/**
Вывести комментарий.
*/
функция writeComment(текст) {
writeln(formatComment(текст));//написать строку комментария
}
..
/*
переключатель (блок) {

дело В:
writeBlock(gUnitModal.format(20));
ломать;
чехол ММ:
writeBlock(gUnitModal.format(21));
ломать;
}
*/
Строки комментариев

Рекомендуется использовать отступы для содержимого функций, блоков, циклов и строк продолжения, поскольку это
упрощает визуализацию кода. Символы табуляции, хотя и поддерживаются JavaScript, не рекомендуется использовать.
Предпочтительно использовать виртуальные позиции табуляции из двух пробелов для отступа кода в коде постпроцессора.
Большинство редакторов, в том числе Autodesk Post Processor Editor, можно настроить на автоматическое преобразование
символов табуляции в пробелы, при этом каждый отступ будет выравниваться по двум пробелам. Обратитесь к главе
«Редактор постпроцессора», чтобы узнать, как настроить рекомендуемый Autodesk редактор.

функциональный тест (вход) {

// отступ 2 пробела внутри функции


если (вход == 1) {

Обзор JavaScript 3-46


Руководство по постпроцессору CAM 08.12.21
написатьБлок(//отступ еще на 2 пробела в блоке if или цикле
gAbsIncModal.format(90),//отступ еще на 2 пробела для строк продолжения
gMotionModal.format(0)
);
}
}
Отступ кода 2 пробела внутри функции, если блок, цикл и линия продолжения

3.3 Переменные
Переменные — это просто имена, связанные со значением. Значение может быть числом, строкой, логическим значением, массивом
или объектом. Переменные в JavaScript нетипизированы, что означает, что они определяются значением, которое они им присвоили,
и тип значения может меняться в течение всей программы. Например, вы можете присвоить число переменной, а позже в программе
вы можете присвоить той же переменной строковое значение. Товар ключевое слово используется для определения переменной.

Если переменной не присвоено значение, то ей будет присвоено специальное значениенеопределенный.

вар а; // определяем переменную 'a', она будет иметь значение


вар б = 1; неопределенный // присвоить значение 1 переменной 'b' //
вар с = "текст"; присвоить текстовую строку переменной 'c' // 'c' теперь содержит
с = 2,5; число вместо строки
Определения переменных

Хотя вы можете включить несколько объявлений переменных в один и тот жеварline, это противоречит стандарту,
используемому для постпроцессоров, и не рекомендуется. Вы также можете неявно создать переменную, просто
присвоив значение имени переменной без использованияварключевое слово, но также не рекомендуется. При
объявлении новой переменной не используйте то же имя, что и ключевое слово JavaScript или Post Kernel,
например, не называйте ее.вар, для, цикл, текущий раздел,и т. д. Обратитесь к соответствующей документации за
списком ключевых слов/переменных, выделенных в JavaScript или Post Kernel.

JavaScript поддерживает как глобальные, так и локальные переменные. Глобальная переменная определяется вне области
действия функции, например, в начале файла перед определением каких-либо функций. Глобальные переменные доступны
для всех функций внутри программы и будут иметь одно и то же значение от функции к функции. Локальные переменные
доступны только внутри функции, в которой они определены. Вы можете использовать одно и то же имя для локальных
переменных в нескольких функциях, и каждая из них будет иметь свое уникальное значение в отдельных функциях. В
отличие от языков C и C++, локальные переменные, определенные в блоке или цикле if, доступны для всей функции и не
являются локальными для блока, в котором они определены.

3.3.1 Числа
Помимо содержания стандартного числового значения, переменная, присвоенная числу, создаетЧислообъект. Для
этого обсуждения мы будем рассматривать объект как переменную со связанными функциями. Эти функции
относятся к номерам и перечислены в следующей таблице.

Обзор JavaScript 3-47


Руководство по постпроцессору CAM 08.12.21
Функция Описание Возвращает

в экспоненту (цифры) Форматирование числа с использованием Строковое представление числа


экспоненциальной записи

toFixed(цифры) Форматирование числа с фиксированным Строковое представление числа


количеством цифр

toLocaleString() Форматировать число в соответствии с Строковое представление числа


региональными соглашениями

toPrecision(цифры) Отформатируйте число, используя либо Строковое представление числа


фиксированное количество цифр, либо
экспоненциальную запись в зависимости от
значения числа.

нанизывать() Форматировать число Строковое представление числа


Функции числового объекта

вар а = 12,12345; b =
a.toExponential(2); b = // b = "1.21e+1" //
a.toFixed(3); b = "12.123"
б = а.toString(); // б = "12.12345"
Вывод номера образца

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

Функция Возвращаемое значение

Math.abs(x) Абсолютное значениеИкс

Math.acos(x) АрккосинусИксв радианах

Math.asin(x) АрксинусИксв радианах

Мат.атан(х) АрктангенсИксв радианах

Math.atan2(y, x) Угол против часовой стрелки между положительной осью X и точкойх, ув радианах

Math.ceil(x) ОкругляетИкск следующему целому числу

Math.cos(x) косинусИкс

Мат.этаж(x) Округляет внизИкск следующему целому числу

Math.max(аргументы) Максимальное значение входных аргументов

Math.min(аргументы) Минимальное значение входных аргументов

Math.PI Значение PI, примерно 3,14159


Math.pow(x, y) Иксвозведен в степеньу
Мат.раунд(х) РаундыИксдо ближайшего целого числа

Мат.грех(х) Синус отИкс

Math.sqrt(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 для описания этого объекта.

Функция Описание Возвращает

charAt(n) Возвращает один символ в позициин Тоэнныйперсонаж

indexOf (подстрока, начало) Находитподстрокавнутри строки. Начало Место первого появления


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

lastIndexOf (подстрока, начало) Находит последнее вхождениеподстрока внутри Место последнего появления
строки.Началоявляется необязательным и подстрокавнутри строки.
указывает начальное местоположение в строке, с
которого начинается поиск.

длина Возвращает длину строки. длина Длина строки


является не функцией, а свойством
строки и не использует () в своем
синтаксисе.
localeCompare (цель) Сравнивает строку сцельнить. Отрицательное число, еслинить
меньше чемцель, 0, если строки
идентичны, и положительное число,
если нитьбольше, чемцель
заменить (шаблон, замена) Заменяетшаблонтекст внутри Обновленная строка.
строки сзаменатекст.
часть (начало, конец) Создает подстроку из строки, Подстрока, содержащая текст из нить
состоящей изНачалосимвол до, начинается сНачалои заканчивается в
но не включаяконецсимвол конец-1. Отрицательное значение для
строки. Началоили конецуказывает позицию с
концанить; -1 — последний символ, -2 —
предпоследний символ и т. д.
разделить(разделитель, предел) Разбивает строку при каждом вхождении Массив строк, созданный путем
разделительнить. разделения нитьв подстроки по
разделителю. Максимумограничение
будут созданы подстроки.
toLocaleLowerCase() Преобразует строку во все строчные Строка нижнего регистра.

буквы методом, зависящим от локали.


toLocaleUpperCase() Преобразует строку во все буквы верхнего Строка в верхнем регистре.

регистра методом, зависящим от локали.

Обзор JavaScript 3-49


Руководство по постпроцессору CAM 08.12.21
Функция Описание Возвращает

в нижний регистр() Преобразует строку во все строчные Строка нижнего регистра.

буквы.
toUpperCase() Преобразует строку во все буквы верхнего Строка в верхнем регистре.

регистра.

Строковые объектные функции

var a = "Первый, Второй,


Третий"; б = а.charAt(3); // б = "с"
б = a.indexOf ("Второй"); // б = 7
б = а.длина; // б = 20
б = a.localeCompare ("ABC"); b // б = 5;
= a.replace(/,/g, "-"); // b = "Первый-Второй-Третий" //
б = а.срез (0, -7); b = "Первый, Второй"

б = а.split(","); // b[0] = "Первый", b[1] = "Второй", b[2] = "Третий"; // b =


б = a.toLowerCase(); б "первый, второй, третий"
= а.toUpperCase(); // b = "ПЕРВЫЙ, ВТОРОЙ, ТРЕТИЙ"
Пример вывода строки

3.3.3 Булевы значения

Булевы значения — самые простые из типов переменных. Они содержат значение либоистинныйизложный, которые являются ключевыми
словами JavaScript.

вар а = правда; // 'a' определяется как логическое значение

if (a) {

// обрабатывает код в этом блоке if, поскольку 'a' равно 'true'


}
Пример логического назначения

3.3.4 Массивы
Массив — это составной тип данных, в котором значения хранятся в последовательном порядке. Каждое значение,
хранящееся в массиве, считается элементом массива, а позиция в массиве называется индексом. Каждый элемент массива
может быть переменной любого типа, и каждый элемент может иметь тип переменной, отличный от других элементов
массива.

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

вар а = новый массив(); var a // создает пустой массив, все значения присваиваются
= новый массив (10); неопределенный // создает пустой массив из 10 элементов

Обзор JavaScript 3-50


Руководство по постпроцессору CAM 08.12.21
вар а = [истина, "а", 3.17]; // создает массив с присвоенными первыми 3 элементами
var a = [{x:1, y:2}, {x:3, y:4}, {x:5, y:6}]; // создает массив из 3 объектов xy
Определения массива

Вы можете получить доступ к элементу массива, используя квадратные скобки [ ]. Имя массива появится
слева от скобок, а индекс элемента в массиве — внутри скобок. Индекс может быть простым числом или
уравнением.

вар а = [1, 2, "текст", ложь];


б = а[0]; // б = 1
а[5] = "следующий"; // а = [1, 2, "текст", ложь, "следующий"]
б = а[2+а[0]]; // б = ложь;
Доступ к элементам в массиве

ТоМножествообъект имеет следующие функции, связанные с ним.

Функция Описание Возвращает

конкат (значения) Добавляет значения в массив. Исходный массив с конкатенированными


элементами

присоединиться (разделитель) Объединяет все элементы массива в строку. Строка, содержащая элементы массива.
разделительявляется необязательным и
указывает строку, используемую для
разделения элементов массива. По умолчанию
используется запятая.

длина Возвращает выделенный размер массива. Размер массива.


длинаявляется не функцией, а скорее
свойством массива и не использует () в
своем синтаксисе.
поп() Извлекает последний элемент из Значение последнего элемента
массива и уменьшает размер массива массива.
на 1.
нажать (значения) Толкаетценностина массив и Обновлен размер массива.
увеличивает размер массива на
количествоценности.
обеспечить регресс() Меняет порядок элементов массива на Ничего не возвращает, а изменяет
обратный. исходный массив.
сдвиг(значения) Удаляет первый элемент из Значение первого элемента
массива и уменьшает размер массива.
массива на 1.
часть (начало, конец) Создает новый массив, состоящий из Массив, содержащий элементы из
Началоэлемента до, но не включая множествоначинается сНачалои
конецэлемент массива. заканчивается в конец-1. Отрицательное
значение дляНачалоили конецуказывает
позицию с концамножество; -1 — последний
элемент, -2 — предпоследний элемент и т. д.
сортировать (функция) Сортирует элементы массива. Исходный массив Отсортированный массив.

будет изменен. Метод sort использует


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

Обзор JavaScript 3-51


Руководство по постпроцессору CAM 08.12.21
Функция Описание Возвращает

toLocaleString() Отформатируйте массив в соответствии с Строковое представление массива


региональными соглашениями

Форматировать массив Строковое представление массива

отменить сдвиг () Добавляетценностив начало Обновлен размер массива.


массива и увеличивает размер
массива на количествоценности.
Функции объекта массива

вар а = [1, 2, 3, 4, 5, 6, 7, 8]; б


= а.concat(9, 10, 11); // b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] //
б = а. присоединить b = "1, 2, 3, 4, 5, 6, 7, 8"
("", "); б = а.длина; // б = 8
а.push(9, 10, 11) // а = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] // а =
б = а.поп(); [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], b = 10 // а =
а.обратный(); [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
б = а.unshift(12, 11); б // а = [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], b = 12 // а
= а.shift(); = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], b = 12 // b = [7, 6,
b = a.slice(4, 7); a.sort 5]
(функция (а, б) // а = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
{возврат аб;
});
б = a.toString() // б = "1,2,3,4,5,6,7,8,9,10,11"
Пример вывода массива

3.3.5 Объекты
АнОбъектпохож на массив тем, что хранит несколько значений в одной переменной. Разница в том, что объекты
используют имя для каждой подсущности, а не полагаются на указатель индекса в массиве. То характеристикитаблица в
постпроцессоре является объектом. Вы можете определить объект, используя два разных метода, явно используяОбъект
ключевое слово или неявно путем создания литерала объекта с определенными именами и значениями для объекта.
Каждая именованная сущность внутри объекта может быть любым типом переменной, числом, строкой, массивом,
логическим значением и другим объектом. Объекты также могут храниться в массиве.

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

вар а = новый объект(); // создает пустой объект, без именованных элементов //


вар а = {х:1, у:2, z:3}; создает объект для хранения координат
а.подача = 10,0; // добавляет элемент 'feed' к объекту 'a'
var a = [{x:1, y:2}, {x:3, y:4}, {x:5, y:6}]; // создает массив из 3 объектов xy
Определения объектов

Обзор JavaScript 3-52


Руководство по постпроцессору CAM 08.12.21
3.3.6 Векторный объект
ТоВекторОбъект встроен в постпроцессор и используется для хранения и работы с векторами. Компоненты вектора хранятся
вх, у, гэлементыВекторобъект. Некоторые переменные постпроцессора хранятся в виде векторов, а для некоторых функций
требуются векторы в качестве входных данных. АВекторобъект создается так же, как и любой другой объект.Векторобъекты
обычно используются для хранения и работы с векторами, пространственными точками и углами поворота.

var a = новый вектор(); var a = // создает пустой объект Vector


новый вектор (1, 0, 0); топор = // создает вектор по оси X {x:1, y:0, z:0} //
-1; присваивает -1 элементу x вектора //
setWorkPlane (новый вектор (0, 0, 0)); определяет встроенный нулевой вектор
Примеры определений векторов

В следующих таблицах описаны атрибуты и функции, содержащиеся вВекторобъект. Поскольку


атрибут — это просто значение, содержащееся вВекторобъект, у него нет аргумента.

Атрибут Описание
пресс Содержит абсолютные координаты
вектора
длина Содержит длину вектора
длина2
отрицал Содержит отрицательный вектор

нормализованный Содержит нормализованный/единичный вектор

Икс Содержит X-компонент


у Содержит компонент Y
г Содержит компонент Z
Атрибуты вектора

Вы можете напрямую изменить атрибут вектора, но если вы это сделаете, остальные атрибуты не будут
обновлены. Например, если вы напрямую сохраняете значение вИксатрибут,vec.x = 0,707,длинаатрибут вектора
не будет обновляться. Вы должны использоватьvec.setX(.707)метод вместо этого.

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

Функция Описание Возвращает

разделить (значение) Делит каждый компонент вектора Скрытый


объекта на значение
получитькоординату(координата) Возвращает значение компонента Компонент вектора
вектора (0=x, 1=y, 2=z)
получитьмаксимум() Определяет наибольшее значение Максимальная стоимость компонента

компонента в векторе
получитьминимум() Определяет минимальное значение Минимальная стоимость компонента

компонента в векторе

Обзор JavaScript 3-53


Руководство по постпроцессору CAM 08.12.21
Функция Описание Возвращает

получить отрицательный () Вычисляет отрицательный вектор Вектор под углом 180 градусов к вектору
объекта (вектор * -1)

получитьнормализованный() Вычисляет нормализованный/единичный вектор Нормализованный или единичный вектор

получитьX() Возвращает координату X вектора X-координата

получитьXYAngle() Вычисляет угол вектора в Угол вектора в плоскости XY


плоскости XY
получитьY() Возвращает координату Y вектора Y-координата

получитьZ() Возвращает Z-координату вектора Z-координата

получитьZAngle() Вычисляет угол Z вектора Z-угол вектора относительно плоскости


относительно плоскости XY XY
isZero () Определяет, является ли вектор нулевым Истинно, если это нулевой вектор

вектором (0,0,0)

умножить (значение) Умножает каждый компонент Скрытый


вектора на значение
отрицать() Умножает каждый компонент вектора Скрытый
на -1. Создает вектор под углом 180
градусов к вектору объекта
setCoordinate(координата, значение) Устанавливает значение компонента Скрытый
вектора (0=x, 1=y, 2=z)
установитьX() Устанавливает координату X вектора Скрытый

установитьY() Задает координату Y вектора Скрытый

установитьZ() Устанавливает Z-координату вектора Скрытый

toDeg() Преобразует радианы в градусы Углы в градусах


toRad() Преобразует градусы в радианы Углы в радианах

нанизывать() Форматирует вектор как строку, например Строковое представление вектора


"(1, 2, 3)"
Функции векторного объекта

Статические функции не требуют связанного объекта Vector.

Функция Описание Возвращает

Vector.cross(слева, справа) Вычисляет векторное произведение двух Вектор перпендикулярен двум


векторов векторам
Vector.diff(слева, справа) Вычисляет разницу между двумя Левый вектор минус правый вектор
векторами
Vector.dot(слева, справа) Вычисляет скалярное произведение двух Косинус угла между двумя
векторов векторами
Вектор.получитьАбсолют() Преобразует компоненты вектора в Вектор с абсолютными координатами
абсолютные значения

Вектор.получить угол() Вычисляет угол между двумя Угол между двумя векторами в
векторами радианах
Vector.getDistance(слева, справа) Вычисляет расстояние между двумя Расстояние между двумя точками
векторами. Обычно используется, когда
векторы хранят пространственные
координаты XYZ, а не векторы.
Vector.getDistance2 (слева, справа) Вычисляет квадрат расстояния Квадрат расстояния между двумя точками.
между двумя векторами.
Vector.lerp(слева, справа, u) Вычисляет точку в процентах от Укажите в процентах от линии
расстояния между двумя между двумя точками
координаты. 'у' указывает

Обзор JavaScript 3-54


Руководство по постпроцессору CAM 08.12.21
Функция Описание Возвращает

процент расстояния для создания


точки.
Vector.product(вектор, значение) Умножает каждый компонент Вектор * значение
вектора на значение
Vector.sum(слева, справа) Добавляет два вектора Левый вектор плюс правый вектор

Статические векторные функции

б = а.длина(); // b = длина вектора a


c = Vector.getAngle(a, b) var a // c = угол в радианах между векторами a и b
= new Vector(1, 2, 1.5); д =
а.getMaximum(); // д = 2
b = Vector.getDistance(point1, point2).normalized; б = // b = вектор направления из точки 1 в точку 2 // b =
Вектор.точка(вектор1, вектор2); косинус угла между вектором 1 и вектором 2 // b =
б = отрицательный; вектор под углом 180 градусов к вектору a
Примеры векторных выражений

3.3.7 Объект матрицы


ТоМатрицаОбъект встроен в постпроцессор и используется для хранения и работы с матрицами. Матрицы
обычно используются при работе с многоосевыми станками, для операций 3+2 и для корректировки координат
при поворотах стола. Матрицы в постпроцессоре содержат только повороты по каждой оси и не содержат
значений перемещения.

Некоторые переменные постпроцессора хранятся в виде матриц, напримеррабочая плоскостьпеременная, а некоторые функции
требуют в качестве входных данных матрицы. АМатрицаобъект имеет функции, которые можно использовать при создании
матрицы и не зависят от работы с существующей матрицей.

Назначение Функция Определение

Матрица() Матрица идентичности (1,0,0, 0,1,0, 0,0,1)

Матрица (i1, j1, k1, i2, j2, k2, i3, j3, k3) Каноническая матрица

Матрица (шкала) Масштабная матрица

Матрица (вправо, вверх, вперед) Матрица с использованием 3 векторов

Матрица (вектор, угол) Матрица вращения вокруг вектора


Функции назначения матрицы

var a = новая матрица(); // создает единичную матрицу


var a = новый вектор (-1, 0, 0, 0, -1,0, 0,0, 1); var // создает матрицу, повернутую на 180 градусов в плоскости XY // создает
a = новая матрица (.5); матрицу половинного масштаба
var a = новая матрица (новый вектор (1, 0, 0), 30); // создает матрицу X-поворота на 30 градусов
Примеры определений матриц

В следующих таблицах описаны атрибуты и функции, содержащиеся вМатрицаобъект. Поскольку атрибут


— это просто значение, содержащееся в объекте Matrix, у него нет аргумента.

Обзор JavaScript 3-55


Руководство по постпроцессору CAM 08.12.21
Атрибут Описание
вперед Содержит прямой вектор
n1 Содержит длину векторов-строк
этой матрицы
п2 Содержит квадратный корень из длин векторов
этой матрицы

Отрицание Содержит отрицательную матрицу

правильно Содержит правильный вектор

транспонированный Содержит обратную матрицу

вверх Содержит восходящий вектор

Атрибуты матрицы

Вы можете напрямую изменить атрибут матрицы, но если вы это сделаете, остальные атрибуты не будут обновлены.
Например, если вы напрямую сохраняете вектор ввпередатрибут, другие атрибуты не будут обновлены, чтобы
отразить это изменение. Вы должны использоватьmatrix.setForward(вектор)метод вместо этого.

Если в столбце «Возвраты» в следующей таблицеСкрытый, то возвращаемого значения нет, аМатрица объект,
связанный с функцией, изменяется неявно. По этой причине, если вы собираетесь вложить Матрицафункцию
внутри выражения, используйте не неявную функцию, а эквивалентную функцию, которая возвращает
матрицу.

Функция Описание Возвращает

добавить (матрица) Добавляет указанную матрицу к этой Скрытый


матрице

получитьКолонка (столбец) Извлекает столбец матрицы как Вектор, содержащий указанный


вектор столбец этой матрицы
получитьэлемент (строка, столбец) Извлекает элемент матрицы как Значение этого матричного элемента
значение
getEuler2 (соглашение) Вычисляет углы для указанного Вектор, содержащий углы Эйлера этой
соглашения Эйлера матрицы. Обратитесь кРабочая
плоскость раздел руководства для
описания соглашений Эйлера.
получитьвперед() Возвращает прямой вектор. Это будет Прямой вектор этой матрицы
0,0,1 в единичной матрице
получитьN1() Возвращает длину векторов-строк Возвращает right_vector + up_vector +
этой матрицы forward_vector матрицы
получитьN2() Возвращает квадратный корень из длин векторов Мат.кв.(n1)
этой матрицы.

получить отрицательный () Вычисляет отрицательную матрицу Матрица *-1.

быть правым() Возвращает правильный вектор. Это будет Правый вектор матрицы
1,0,0 в единичной матрице
получитьСтрока(строка) Извлекает строку матрицы как вектор Вектор, содержащий указанную строку
этой матрицы
getTiltAndTilt(первый, второй) Вычисляет повороты по осям X и Y вокруг Вычисленное прямое направление этой
фиксированного кадра для соответствия прямому матрицы
направлению. 'first' и 'second' могут принимать
значения 0 или 1 и должны быть разными.

получитьтранспонированный() Возвращает транспонированную Обратная матрица


(обратную) матрицу

Обзор JavaScript 3-56


Руководство по постпроцессору CAM 08.12.21
Функция Описание Возвращает

getTurnAndTilt (первый, второй) Вычисляет повороты по осям X, Y, Z вокруг Расчетное направление вперед
фиксированного кадра для соответствия прямому
направлению. 'first' и 'second' могут быть равны
0, 1 или 2 и должны быть
разные.
вставать() Возвращает вектор вверх. Это будет Правый вектор матрицы
0,1,0 в единичной матрице
isIdentity() Определяет, является ли матрица Истинно, если это единичная матрица
единичной матрицей (1,0,0, 0,1,0, 0,0,1).

isZero () Определяет, является ли матрица Истинно, если это нулевая матрица

нулевой матрицей (0,0,0, 0,0,0, 0,0,0)

умножить (значение) Умножает каждый компонент Результат умножения матрицы на указанное

матрицы на значение значение

умножить (матрица) Умножает матрицу на указанную Результаты умножения матрицы на указанную

матрицу матрицу

умножить (вектор) Умножает указанный вектор на Вектор, умноженный на матрицу


матрицу
отрицать() Вычисляет отрицательную матрицу Скрытый

нормализовать() Вычисляет отрицательную матрицу Скрытый

setColumn (столбец, вектор) Устанавливает столбец матрицы как вектор Скрытый

setElement (строка, столбец, вектор) Устанавливает матричный элемент Скрытый

setForward (вектор) Устанавливает прямой вектор Скрытый

setRight (вектор) Устанавливает правильный вектор Скрытый

setRow(строка, вектор) Задает строку матрицы как вектор Скрытый

setUp (вектор) Устанавливает вектор вверх Скрытый

вычесть (матрица) Вычитает указанную матрицу из этой Скрытый


матрицы

нанизывать() Форматирует матрицу как строку, Строковое представление матрицы


например "[[1, 0, 0], [0, 1, 0], [0, 0, 1]]"
транспонировать() Создает транспонированную/обратную эту Скрытый
матрицу
Матричные функции

Статические функции не требуют ассоциированногоМатрицаобъект.

Функция Описание Возвращает

Matrix.diff(слева, справа) Вычисляет разницу между двумя Левая матрица минус правая матрица
матрицами
Matrix.getAxisRotation(вектор, угол) Вычисляет матрицу вращения Матрица вращения «угла»
радиан вокруг оси «вектор»
Matrix.getXRotation(угол) Вычисляет матрицу вращения Матрица вращения «угловых»
вокруг оси X радиан вокруг оси X
Matrix.getXYZRotation(abc) Вычисляет матрицу поворота для Матрица поворота, удовлетворяющая
заданных углов указанным поворотам XYZ

Matrix.getYRotation(угол) Вычисляет матрицу поворота Матрица вращения «угловых»


вокруг оси Y радиан вокруг оси Y
Matrix.getZRotation(угол) Вычисляет матрицу вращения Матрица вращения «угловых»
вокруг оси Z радиан вокруг оси Z
Matrix.sum(слева, справа) Складывает две матрицы Левая матрица плюс правая матрица

Обзор JavaScript 3-57


Руководство по постпроцессору CAM 08.12.21
Статические матричные функции

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), где операторы с
более высоким номером приоритета выполняются перед операторами с более низким номером приоритета. Операторы с
одинаковым номером приоритета будут вычисляться в том порядке, в котором они появляются в выражении.

Унарные операторы требуют только одного операнда вместо двух. Например,у = х++будет увеличивать
переменнуюИкспосле присваивания переменнойу.

п Оператор Операнды Описание


13 () Выражение Переопределяет назначенный приоритет операторов
12 + + Целое число Унарный приращение

-- Целое число Унарный декремент


~ Целое число Унарное побитовое дополнение
! логический Унарное логическое дополнение (не)
11 * Число Умножение
/ Число Разделение

% Число Остаток
10 + Число, Строка Добавление

- Число вычитание
9 << Целое число Побитовый сдвиг влево

>> Целое число Побитовый сдвиг вправо

8 < Число, Строка Меньше, чем

<= Число, Строка Меньше или равно


> Число, Строка Лучше чем
>= Число, Строка Больше или равно
7 == Любой Равно
знак равно Любой Не равно
=== Любой Равен и тот же тип переменной
!== Любой Не равно и того же типа переменной
6 & Целое число Побитовое И

Обзор JavaScript 3-58


Руководство по постпроцессору CAM 08.12.21
п Оператор Операнды Описание
5 ^ Целое число Побитовое исключающее ИЛИ

4 | Целое число Побитовое ИЛИ

3 && логический Логическое И


2 || логический Логическое ИЛИ

1 знак равно Любой Назначение


+= Число, Строка Задание с дополнением
знак равно Число Присваивание с вычитанием
знак равно Число Присваивание с умножением
знак равно Число Задание с разделением
Операторы выражений

Икс у Выражение Результат Выражение Результат

3 5 г=х+у*3 18 г = (х + у) * 3 24
г = ++ х г = 4, х = 4 г = х++ г = 3, х = 4
х += у 8 х *= у 15
г=у/х 1,667 г = у% х 2.0
"Начинать" "-Конец" г=х+у "Начать конец" х += у "Начать конец"

2 3 г=хиу 2 г=х|у 3
1 "1" г = х == у истинный х === у ложный

истинный ложный г=х истинный г = !у истинный

г = х || у истинный г = х && у ложный

Примеры выражений

3.5 Условные операторы


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

В этом разделе описываются условные операторы и функции, используемые при разработке


постпроцессора. Некоторые условия поддерживаются JavaScript, а другие встроены в ядро
постпроцессора.

3.5.1 Оператор if
Тоеслиоператор является наиболее распространенным методом тестирования условного оператора и выполнения операторов на
основе результатов теста. Он может содержать одно тело операторов, которые должны выполняться, когда выражение истинно,
второе тело операторов, которое нужно выполнять, когда выражение ложно, или может содержать несколько условных выражений,
которые проверяются по порядку с помощьюиначе, еслипостроить.

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

Обзор JavaScript 3-59


Руководство по постпроцессору CAM 08.12.21
Синтаксисеслиоператоры должны следовать стандарту Autodesk: всегда включать скобки {} вокруг
каждого тела кода, указывать открывающую скобку ({) в условной строке и закрывающую скобку (}) в
начале строки, следующей за телом кода для каждой секции, как показано в следующих примерах.

если (условный1) {
// выполнить код, если conditional1 истинен
}

если (условный1) {
// выполнить код, если условие 1
истинно } else {
// выполнить код, если conditional1 ложно
}

если (условный1) {
// выполнить код, если условие1 истинно }
иначе если (условие2) {
// выполнить код, если условие1 ложно, а условие2 истинно }
else {
// выполнить код, если все условия ложны
}
Если синтаксис оператора

если (имеетПараметр("операция-комментарий")) {
комментарий = получитьпараметр("операция-комментарий");
}

если (isProbeOperation()) {
var workOffset = probeOutputWorkOffset ? probeOutputWorkOffset : currentWorkOffset; если
(workOffset > 99) {
error(localize("Рабочее смещение вне допустимого диапазона.");

возвращение;

} иначе если (workOffset > 6) {


probeWorkOffsetCode = probe100Format.format (workOffset — 6 + 100); }
еще {
probeWorkOffsetCode = workOffset + "."; // G54->G59
}
}
Образец операторов if

Обзор JavaScript 3-60


Руководство по постпроцессору CAM 08.12.21
3.5.2 Оператор switch
Товыключательзаявление похоже наеслив том, что он вызывает ветвь в потоке выполнения программы на основе
результата условного оператора.выключательоператоры обычно используются при проверке значения одной
переменной, тогда какеслиусловные операторы могут проверять сложные выражения.

Синтаксисвыключательbodys будет содержать один оператор switch с переменной, значение которой определяет
исполняемый код.кейсзаявления будут включены ввыключательbody, каждый из которых содержит значение,
вызывающее выполнение тела кода. Конец каждогокейстело кода должно иметьломатьзаявление, чтобы следующее
кейстело кода не выполняется. Адефолтможет быть определен оператор, содержащий код, который будет
выполняться, есливыключательпеременная не соответствует ни одному изкейс ценности.

кейсоператоры должны соответствовать стандарту Autodesk, который всегда включает указание открывающей
скобки ({) ввыключательстроку и закрывающую скобку (}) в начале строки в конце тела кода для каждого
раздела. Токейсзаявления будут согласованы свыключательоператор и весь код внутри каждого кейстело будет
с отступом.

переключатель (переменная) {

значение случая1:

// выполнить, если переменная = значение1

break;

значение случая2:

// выполнить, если переменная = значение2

case значение3:

// выполнить, если переменная = значение3 по

умолчанию:

// выполнить, если переменная не равна значению1, значению2 или значению3


break;
}

Синтаксис блока переключения

переключатель (охлаждающая жидкость) {

случай COOLANT_FLOOD:
м = 8;
ломать;
чехол COOLANT_THROUGH_TOOL:
м = 88;
ломать;
случай ХЛАДАГЕНТ_ВОЗДУХ:
м = 51;
ломать;
дефолт:

Обзор JavaScript 3-61


Руководство по постпроцессору CAM 08.12.21
onUnsupportedCoolant(охлаждающая жидкость);

}
}
Примеры блоков переключателей

3.5.3 Условный оператор (?)


? условный оператор проверяет выражение и возвращает разные значения в зависимости от того, является ли выражение
истинным или ложным. Это компактная версия простогоеслиблок и используется в операторе типа присваивания или как
часть выражения.

вар а = условное? истинное_значение : ложное_значение;


? Условный оператор

В приведенном выше синтаксисеабудет назначенистинное_значениеесли условное истинно, илиfalse_valueесли оно ложно.

homeGcode = getProperty ("useG30")? 30 : 28;

// можно расширить в этот блок if if


(getProperty("useG30")) {
домашний код = 30;
} еще {
домашний код = 28;
}
Образец ? Условный оператор

3.5.4 Тип оператора


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

Тотипза оператором следует одно имя операнда, т.е. "переменная typeof". Он может возвращать следующие
строковые значения.

Тип операнда Возвращаемые значения

номер "номер"
нить "нить"
логический "логическое"

объект, массив, ноль "объект"


функция "функция"
неопределенный "неопределенный"

typeof Возвращаемые значения

Обзор JavaScript 3-62


Руководство по постпроцессору CAM 08.12.21
если ((typeof getHeaderVersion == "функция") && getHeaderVersion()) {
writeComment(localize("post version") + ": " + getHeaderVersion());
}
Пример использования

3.5.5 Условная функция


Тоусловныйфункция проверит выражение и, если оно истинно, вернет указанное значение. Если
выражение ложно, возвращается пустая строка. ТоусловныйФункция в основном используется для
определения того, должен ли конкретный код выводиться в блоке.

условное (выражение, истинное_значение)


условный синтаксис

написатьБлок(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(82),
getCommonCycle(x, y, z, cycle.retract),
условный (P > 0, "P" + миллиФормат.формат (P)), // необязательный
feedOutput.format(F)
);
условное использование

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

написатьБлок(условный (Rapid, gMotionModal.format (0)), х, у, г);


Устанавливает модальное значение gMotionModal в 0, даже если isRapid имеет значение false и G00 не выводится.

3.5.6 попробовать/поймать

Топопробуй пойматьblock — это механизм обработки исключений. Это позволяет постпроцессору контролировать
результат исключения. В зависимости от возникшего исключения код JavaScript может продолжить обработку или
завершиться с ошибкой. Топопробуй пойматьблок используется для переопределения нормальной обработки
исключений в JavaScript.

пытаться {

// код, который может генерировать исключение


} catch (e) { // e — это локальная переменная, содержащая объект исключения или значение, которое было сгенерировано
// код для выполнения при обнаружении исключения
}
попробовать/поймать синтаксис

Обзор JavaScript 3-63


Руководство по постпроцессору CAM 08.12.21
пытаться {

идентификатор программы = getAsInt (имя программы); }

поймать(е) {

error(localize("Имя программы должно быть числом"));


возвращение;
}
попробовать/поймать Использование

3.5.7 Функция подтверждения


ТоподтверждатьФункция проверяет выражение и вызывает исключение, если выражение ложно. Постпроцессор обычно
выдает ошибку, если возникает исключение, поэтому, по сути,подтверждатьФункция определяет, является ли выражение
истинным или ложным, и выводит ошибку, используя предоставленное сообщение, если оно ложно.

проверить(выражение, error_message)
проверить синтаксис

validate(retracted, "Невозможно отменить компенсацию длины, если машина не полностью втянута.");


Образец кода проверки

В приведенном выше примере ошибка будет сгенерирована, еслиубранустановлено значение «ложь».

3.5.8 Сравнение реальных значений


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

вар а = 3,141592654;
переменная b = 3,141593174;

// простое сравнение
если (а == б) { //ложный

// сравнение с допуском допустимая


переменная = .0001;
if (Math.abs(a – b) <= допуск) { //истинный

// сравнение с усеченными значениями


вар пространственный формат = createFormat ({десятичные числа: 4});

if ((spatialFormat.getResultingValue(a) - spaceFormat.getResultingValue(b)) == 0) { //истинный

Сравнение реальных значений

Обзор JavaScript 3-64


Руководство по постпроцессору CAM 08.12.21
3.6 Операторы цикла
Циклы выполняют повторяющиеся действия. Существуют различные стили операторов цикла;за,для/в,пока, и
делать пока. Вы должны выбрать оператор цикла, который соответствует стилю цикла, который вы кодируете.

Синтаксис операторов цикла должен соответствовать стандарту Autodesk: всегда включать скобки {} вокруг
каждой части кода, указывать открывающую скобку ({) в операторе цикла и закрывающую скобку (}) в начале
строки, следующей за оператором цикла. тело кода для цикла. Циклы могут быть вложены в другие части кода,
такие как условные операторы или другие циклы.

3.6.1 Цикл for


Тозаloop является наиболее распространенным оператором цикла. Он включает в себя счетчик и выражение о том,
когда закончить цикл, поэтому он будет проходить через тело цикла фиксированное количество раз, если только не
будет прерванломатькоманда. Топеременная счетчикаинициализируется перед запуском цикла и проверяется,
когдавыражениеоценивается перед каждой итерацией цикла. Топеременная счетчикаувеличивается в конце цикла,
непосредственно передвыражениеоценивается повторно.
Несколько счетчиков могут быть инициализированы и увеличены в цикле for путем разделения счетчиков
запятой (,).

for(initialize_counter; тестовое выражение; increment_counter) {


// тело цикла
}
для синтаксиса цикла

for (var i = 0; i < getNumberOfSections(); ++i) { // цикл для количества разделов в промежуточном файле
если (getSection(i).workOffset > 0) {
error(localize("Использование нескольких рабочих смещений невозможно, если начальное рабочее смещение равно 0."));

возвращение;

}
}

for (i = 0, j = ary.length - 1 ; i < ary.length / 2; ++i, --j) { // обратный порядок массива


var tl = ary[i];
ары[я] = ары[j];
ary[j] = tl;
}
Образец для циклов

3.6.2 Цикл for/in


Тодля/вЦикл позволяет вам перемещаться по свойствамобъект. Он обычно не используется в постпроцессорах
(за исключением постпроцессора dump.cps), но может быть полезен для отладки имен и значений свойств в
объект.

Обзор JavaScript 3-65


Руководство по постпроцессору CAM 08.12.21
for(переменная в объекте) {
// тело цикла
}
Синтаксис цикла for/in

for(var element in properties) { // выводим таблицу свойств


writeln("свойства." + элемент + " = " + свойства[элемент]);
}
Образец для/в цикле

3.6.3 Цикл while


Топокаloop оценивает выражение и выполняет тело цикла, когда выражение истинно, и завершает цикл,
когда выражение ложно. Поскольку выражение проверяется в начале цикла, основная часть кода в цикле
не будет выполняться, если для выражения изначально задано значение false.

в то время как (выражение) {

// тело цикла
}
Синтаксис цикла

в то время как (c > 2*Math.PI) {


с -= 2 * Math.PI;
}
Образец во время цикла

3.6.4 Цикл do/while


Тоделать покаЦикл во многом похож на цикл while, но выражение проверяется в конце цикла, а не в
его начале. Это означает, что цикл будет выполнен хотя бы один раз, даже если выражение
изначально установлено в false.

делать {

// тело цикла
} пока (выражение)
do/while Синтаксис цикла

переменная я = 0;

переменная найдена = ложь;

делать {

если (mtype[i++] == "Начало") {


найдено = верно;
}
Обзор JavaScript 3-66
Руководство по постпроцессору CAM 08.12.21
} while (!found && i < mtype.length);
Образец цикла do/while

3.6.5 Заявление о разрыве


Толоматьоператор используется для преждевременного прерывания оператора цикла или оператора switch. Когдаломать оператор
встречается во время тела цикла или переключателя, тогда самый внутренний цикл/переключатель будет завершен, и управление
переместится к первому оператору вне цикла/переключателя.

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

для (я = 0; я < mtype.length; ++ я) {


если (mtype[i] == "Начало") {
ломать; // выход из цикла
}
}
Пример использования команды break

3.6.6 Оператор continue


ТоПродолжатьоператор используется для обхода оставшейся части тела цикла и перезапускает цикл на следующей
итерации.

для (я = 0; я < mtype.length; ++ я) {


если (mtype[i] < 0) {
Продолжать; // пропускает эту итерацию цикла и продолжает следующую итерацию
}

}
Пример использования команды break

3.7 Функции
Функции в JavaScript ведут себя так же, как и функции в других языках программирования высокого уровня. В
постпроцессоре весь код, кроме глобальных настроек вверху файла, содержится в функциях, либо входных функциях (
onOpen,onSectionи т. д.) или вспомогательные функции (написатьБлокировать, setWorkPlane, и т.д.). Код в функции не
будет обработан до тех пор, пока эта функция не будет вызвана из другой подпрограммы (ради ясности, вызывающая
функция будет называться «подпрограммой» в этом разделе). Вот основные причины размещения кода в отдельной
функции, а не его программирования в подпрограмме верхнего уровня, которая вызывает функцию.

1. Один и тот же код выполняется в разных областях кода либо из одной функции, либо из нескольких
функций. Размещение общего кода в отдельной функции устраняет дублирование кода из файла, что
упрощает его понимание и поддержку.

Обзор JavaScript 3-67


Руководство по постпроцессору CAM 08.12.21
2. Логически отделить логику и сделать ее более понятной. Разделение кода на отдельные функции может
предотвратить слишком большой размер вызывающей процедуры и ее сложность для выполнения, даже если
функция вызывается только один раз.

3.7.1 Описание функции


Функция состоит из оператора функции, списка аргументов, тела функции (кода JavaScript) и
необязательных операторов возврата.

имя функции([arg1 [,arg2 […, argn]]]) {



код

}
Синтаксис инструкции function

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

функция writeComment(текст) {
writeln(formatComment(текст)); // текст принимается в качестве аргумента и передается в formatComment
}
Пример функции Определение

Аргументы, принимаемые функцией, могут быть либо именованными идентификаторами, как показано в предыдущем
примере, либо вы можете использоватьаргументымассив для ссылки на аргументы функции. Тоаргументымассив встроен в
JavaScript и рассматривается как любой другойМножествообъект, что означает, что он имеет свойство длины и доступ к
Множествоатрибуты и функции.

TransferType = parseChoice(getProperty("transferType"),"ФАЗА","СКОРОСТЬ","СТОП"); …

функция parseChoice() {
для (var я = 1; я <аргументы.длина; ++я) {
если (строка(аргументы[0]).toUpperCase() == Строка(аргументы [я]).toUpperCase()) {
вернуть я - 1;
}
}
возврат -1;
}
Пример использования массива аргументов

Обзор JavaScript 3-68


Руководство по постпроцессору CAM 08.12.21
3.7.2 Вызов функции
Вызов функции обрабатывается так же, как и любое другое выражение. Он может быть автономным, присваивать значение
и размещаться в любом месте выражения. Значение, возвращаемое вызываемой функцией, рассматривается как любая
другая переменная. Вы просто вводите имя функции с ее аргументами.

установитьВоркПлане (abc); // функция не возвращает значение seqno =


formatSequenceNumber(); // функция возвращает значение
окружность = getRadius(окружность) * 2.0 * Math.PI; // функция, используемая в регулярном выражении
Примеры вызовов функций

3.7.3 Оператор возврата


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

вернуть [выражение]
Синтаксис инструкции 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;//вариант возврата не найден
}

function FeedContext(id, описание, фид) {


это.id = идентификатор;

Обзор JavaScript 3-69


Руководство по постпроцессору CAM 08.12.21
это.описание = описание;
this.feed = лента;
}//вернуть этот объект {id, description, feed}

var feedContext = новый FeedContext(id, "Cutting", feedCutting);//создать новый объект FeedContext


Образец возврата Использование

4 функции ввода
Функции ввода постпроцессора представляют собой интерфейс между ядром и постпроцессором. Функция Entry
будет вызываться для каждой записи в промежуточном файле. Какая функция Entry вызывается, определяется
типом записи промежуточного файла. Все функции ввода имеют префикс on, поэтому рекомендуется не
использовать этот префикс ни с какими функциями, которые вы добавляете в постпроцессор.

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

Функция входа Вызывается, когда…


onCircular(по часовой стрелке, cx, cy, cz, x, y, z, подача) Круговой ход
при закрытии() Конец постобработки
onCommand (значение) Команда ЧПУ вручную не обрабатывается в собственной
функции
onComment(строка) КомментарийРучная команда ЧПУ

onCycle() Начало цикла


конец цикла () Конец цикла
onCyclePoint(x, y, z) Каждая точка цикла

onDwell(значение) ЖитьРучная команда ЧПУ


onLinear(x, y, z, подача) 3-осевой режущий ход

onLinear5D(x, y, z, a, b, c, подача) 5-осевой режущий ход

на машине() Изменения конфигурации машины

onManualNC() Ручные команды ЧПУ


при движении (значение) Изменения типа движения

приоткрытии() Инициализация постпроцессора

onOrientateSpindle (значение) Требуется ориентация шпинделя

onParameter (строка, значение) Каждая настройка параметра

onPassThrough (строка) Пройти черезРучная команда ЧПУ


onPower (логическое значение) Режим мощности для смены воды/плазмы/лазера

onRadiusCompensation() Изменение режима компенсации радиуса

onRapid(x, y, z) 3-осевое быстрое перемещение

Функции ввода 4-70


Руководство по постпроцессору CAM 08.12.21
Функция входа Вызывается, когда…
onRapid5D(x, y, z, a, b, c) 5-осевое быстрое перемещение

onRewindMachine(a, b, c) Превышены пределы поворотных осей

в разделе () Начало операции


в конце раздела () Конец операции
onSectionEndSpecialCycle() Конец операции специального цикла

onSectionSpecialCycle() Запуск операции специального цикла (Перемещение запаса)

onSpindleSpeed (значение) Изменение скорости шпинделя

при завершении () Постобработка завершена, выходные файлы закрыты

onToolCompensation (значение) Изменения режима компенсации инструмента

Входные функции

4.1 Глобальная секция


Раздел global не является функцией ввода, а вызывается при первой инициализации постпроцессора. Он определяет
настройки, используемые ядром постпроцессора, таблицу свойств, отображаемую в диалоговом окне постпроцессора
внутри HSM, определения для форматирования выходных кодов и глобальные переменные, используемые
постпроцессором.

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

4.1.1 Настройки ядра


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

Параметр Описание
разрешенокруговыеплоскости Определяет разрешенные круговые плоскости. Эта настройка описана в
onCircularраздел.
разрешить HelicalMoves Указывает, разрешены ли винтовые перемещения. Эта настройка описана
вonCircularраздел.
разрешитьSpiralMoves Указывает, разрешены ли спиральные движения. Эта настройка описана в
onCircularраздел.
возможности Определяет возможности постпроцессора. Возможности
могут быть CAPABILITY_MILLING, CAPABILITY_TURNING,
CAPABILITY_JET, CAPABILITY_SETUP_SHEET и

Функции ввода 4-71


Руководство по постпроцессору CAM 08.12.21
Параметр Описание
ВОЗМОЖНОСТЬ_ПРОМЕЖУТОЧНАЯ. Несколько возможностей могут быть включены с
помощью логического оператора ИЛИ.

возможности = CAPABILITY_MILLING | CAPABILITY_TURNING;


уровень сертификации Уровень сертификации пост-конфигурации, используемый для определения того,
сертифицирован ли постпроцессор для работы с пост-движком. Это значение редко
меняется.
описание Краткое описание постпроцессора. Оно будет отображаться вместе с именем
постпроцессора вПостобработкадиалоговое окно в HSM при выборе запускаемого
постпроцессора.
расширение Расширение выходного файла ЧПУ.
highFeedMapping Определяет режим отображения с высокой подачей для быстрых
перемещений. Допустимые режимы: HIGH_FEED_NO_MAPPING,
HIGH_FEED_MAP_MULTI, HIGH_FEED_MAP_XY_Z и HIGH_FEED_MAP_ANY. Этот
параметр можно динамически изменить в таблице свойств при запуске
постпроцессора.
высокая скорость подачи Указывает скорость подачи, используемую при преобразовании быстрых перемещений в линейные перемещения.

законный Юридическое уведомление компании, создавшей постпроцессор


mapToWCS Указывает, сопоставляется ли рабочая плоскость с исходной точкой модели и рабочей
плоскостью. Если этот пост отключен, он отвечает за обработку сопоставления от источника
модели к источнику установки. Эта переменная должна быть определена с использованием
следующего синтаксиса и может быть определена только в разделе global. Любое отклонение
от этого формата, включая добавление дополнительных пробелов, приведет к игнорированию
этой команды.

mapToWCS = истина;
mapToWCS = ложь;
картаРаботаПроисхождение Указывает, сопоставляются ли координаты с началом координат рабочей плоскости. При
отключении столб отвечает за обработку начала рабочей плоскости. Эта переменная должна
быть определена с использованием следующего синтаксиса и может быть определена только
в разделе global. Любое отклонение от этого формата, включая добавление дополнительных
пробелов, приведет к игнорированию этой команды.

MapWorkOrigin = Истина;
mapWorkOrigin = ложь;
максимальныйкруговойрадиус Задает максимальный радиус круговых перемещений, который может
быть выведен как круговая интерполяция и может динамически
изменяться в таблице свойств при запуске постпроцессора. Эта настройка
описана в onCircularраздел.
максимальная круговая развертка Определяет максимальную круговую развертку круговых перемещений, которая может
быть выведена как круговая интерполяция. Эта настройка описана вonCircular раздел.

Функции ввода 4-72


Руководство по постпроцессору CAM 08.12.21
Параметр Описание
минимальная длина хорды Определяет минимальное дельта-движение, допустимое для круговой
интерполяции, и может динамически изменяться в таблице свойств при
запуске постпроцессора. Эта настройка описана вonCircularраздел.
минимальныйкруговойрадиус Задает минимальный радиус круговых перемещений, который может быть
выведен как круговая интерполяция и может динамически изменяться в
таблице свойств при запуске постпроцессора. Эта настройка описана в
onCircularраздел.
минимальная круговая развертка Задает минимальную круговую развертку круговых перемещений, которая может быть
выведена как круговая интерполяция. Эта настройка описана вonCircular раздел.

минимальная версия Минимальная версия постядра, поддерживаемая постпроцессором. Это значение


останется прежним, если постпроцессор не использует функциональные
возможности, добавленные в более позднюю версию почтового движка, которые
недоступны в более ранних версиях.
ProgramNameIsInteger Указывает, должно ли имя программы быть целым числом (истинный) или может быть текстовой
строкой (ложный).

толерантность Указывает допуск, используемый для линеаризации круговых перемещений, которые


расширяются до серии линейных перемещений. Эта настройка описана вonCircular
раздел.
единица измерения Содержит блоки вывода постпроцессора. Обычно это то же самое, что и
единицы ввода, ММ или IN, но их можно изменить вonOpen функции
постпроцессора, установив его на желаемые единицы измерения.
продавец Название производителя станка.
URL-адрес поставщика URL-адрес веб-сайта производителя станка.
Настройки пост-ядра

описание = "РС-274Д";
продавец = "Autodesk";
vendorUrl = "http://www.autodesk.com";
юридический = "Авторское право (C) 2012-2017 Autodesk, Inc.";
уровень сертификации = 2;
минимальная версия = 24000;

longDescription = "Общий пост для формата RS-274D. Большинство ЧПУ используют формат, очень
похожий на RS-274D. При создании поста для нового ЧПУ этот пост часто служит основой.";

расширение = "нк";
setCodePage("ascii");

возможности = CAPABILITY_MILLING; допуск


= пространственный (0,002, мм);

минимальная длина хорды = пространственная (0,01, мм);


минимальный круговой радиус = пространственный (0,01, мм);

Функции ввода 4-73


Руководство по постпроцессору CAM 08.12.21
максимальный круговой радиус = пространственный (1000,
мм); минимальная круговая развертка = toRad (0,01);
максимальная круговая развертка = toRad(180);
разрешитьHelicalMoves = истина;
разрешенные круговые плоскости = не определено; // разрешаем любое круговое движение
Пример кода настроек пост-ядра

4.1.2 Таблица свойств


Библиотечные постпроцессоры предназначены для запуска машины без каких-либо модификаций, но могут не создавать вывод
точно таким, каким вы хотели бы его видеть. Таблица свойств содержит параметры, которые можно изменить во время выполнения,
чтобы запись в библиотеке оставалась общей по своей природе, но по-прежнему легко настраивалась различными пользователями.
Настройки в таблице свойств обычно используются для управления небольшими изменениями выходных данных, создаваемых
постпроцессором, а основные изменения обрабатываются настройками в разделе «Фиксированные настройки».

Свойства могут отображаться в нескольких областях HSM; когда вы используете диалоговое окно «Постобработка»
для запуска постпроцессора в программе ЧПУ, на вкладке «Постобработка» в конфигурации станка и на вкладке
«Постобработка» операции. Когда вы выполняете постобработку из HSM или редактируете программу ЧПУ, вам
может быть представлено диалоговое окно, позволяющее выбрать исполняемый постпроцессор, путь к выходному
файлу и другие настройки. Таблица свойств также будет отображаться в диалоговом окне, позволяя вам
переопределять настройки постпроцессора при каждом его запуске.

Таблица свойств в диалоговом окне постобработки

Функции ввода 4-74


Руководство по постпроцессору CAM 08.12.21
Таблица свойств в программе ЧПУ

Таблица свойств в конфигурации машины Таблица свойств в действии

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

// определяемые пользователем

свойства свойства = {

написатьМашина: {
title: "Машина записи",
description: "Вывести настройки машины в шапку кода.",
Функции ввода 4-75
Руководство по постпроцессору CAM 08.12.21
группа: "общая",
тип: "булев",
значение: правда,

область действия: "пост"

},
использовать сглаживание: {

title: "SGI / Режим высокой точности",


описание: "Высокоскоростной параметр высокой точности.",
тип: "enum",
группа: "предпочтения",
ценности:[
{title:"Выкл", id:"-1"},
{title:"Автоматически", id:"9999"},
{title:"Стандарт", id:"0"},
{title:"Высокая скорость" , id:"1"},
{title:"Высокая точность", id:"2"},
{title:"Особый", id:"3"}
],
значение: "-1",
область действия: "операция"

}, …
}
Определение таблицы свойств

В следующей таблице описаны поддерживаемые элементы вхарактеристикиобъект. Важно, чтобы форматхарактеристики


object следует приведенному выше примеру, где сначала идет имя переменной, за которым следует двоеточие (:), а члены
заключены в фигурные скобки ({}). Тоценностисвойство представляет собой массив, и его элементы должны быть
заключены в квадратные скобки ([]).

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

диапазон Минимальные и максимальные допустимые значения для числового свойства,


указанного в виде массива ([-1000, 1000]).
ценности Содержит список (массив) вариантов дляперечисление, целое,илилогическийтипы ввода.
Это недействительно с любым другим типом ввода. Залогическийзначений, это должен быть
массив из 2 строк, первая запись которого представляетистинныйа второй представляет
ложный.

Функции ввода 4-76


Руководство по постпроцессору CAM 08.12.21
Имущество Описание
презентация Определяет, как логическое значение будет отображаться в таблице свойств. Допустимые
настройки определяются как текстовая строка и могут быть «да нет" (Да нет), "правдаложь(Верно/
Неверно), «вкл выкл” (вкл./выкл.) и “10(1/0).
сфера Сообщает сообщению, какие диалоги будут отображать это свойство. Поддерживаемые параметры
Почта,машина, иоперация. Параметр должен быть указан в виде текстовой строки. сфераможет
быть одним значением или массивом поддерживаемых диалогов. Примеры: область действия:
«пост»,область действия: ["пост", "машина"].Существуют предостережения при включении
свойства более чем в одном диалоговом окне, как описано в Области свойствраздел этой
главы.
включено Указывает тип операции, в котором это свойство будет отображаться в диалоговом окне
операции HSM. Это свойство относится только коперациясвойства и не влияет наПочтаи
машинахарактеристики. Параметр должен быть указан как текстовая строка или массив
текстовых строк. Допустимые настройки: “фрезерование, “превращение", “бурение», “
зондирование, “инспекция», и "добавка».
видимый Определяет, отображается ли свойство в диалоговом окне УП. Этот параметр не влияет на
диалоговые окна «Постобработка», «Конфигурация машины» или «Операция». Объем
имущества должен включатьоперациячтобы эта настройка вступила в силу. Его можно
установить наистинныйилиложный.
Настройки свойств

Тип ввода Описание


"целое число" Целое значение
"номер" Реальная стоимость

"пространственный" Реальная стоимость

"угол" Угловое значение в градусах


"логическое" истинныйилиложный

"нить" Текстовая строка

"перечисление" Топеречислениетип ввода определяет эту переменную как имеющую фиксированный выбор, связанный
с ней. Эти варианты определяются индивидуально вценностимассив свойств. Анперечислениетип ввода
должен быть определен с использованием строковых значений.
Типы ввода таблицы свойств

Ценности Свойство Описание


заглавие Текст элемента выбора, отображаемый в пользовательском интерфейсе для этой переменной.
я бы Значение, которое будет возвращено в переменной при вызове постпроцессора. Все
ссылки на это свойство, напримерgetProperty("ось вращения таблицы"), в постпроцессоре
следует ожидать только один из этихя бызначения как его значение. Тоя быдолжна быть
текстовой строкой, когда связана сперечислениетип ввода или целочисленное значение,
когда оно связано сцелое число.
Свойства вариантов Enum

Функции ввода 4-77


Руководство по постпроцессору CAM 08.12.21
4.1.3 Области свойств
Если длясферасуществует иерархия, которая определяет, какой диалог имеет последнее слово в
значении свойства, передаваемом в постпроцессор. Эта иерархия выглядит следующим образом.

1. Свойство операции
2. Опубликовать свойство

3. Свойство машины

Таким образом, если свойство определяется какПочтаиоперацияпараметр, то настройки, сделанные в диалоговых окнах
постобработки и программы ЧПУ, будут игнорироваться постпроцессором, постпроцессор будет использовать только
настройки, сделанные в каждой отдельной операции. Единственное место, где вы сможете запросить настройку свойства
Post Process, находится вonOpenпри использованииполучить свойствофункция.

При указании свойства какмашина,Почтаи/илиоперациясвойство, настройка, сделанная для этого свойства в


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

4.1.4 Группы свойств


Порядок отображения свойств управляется настройкой группы в определении свойства и в groupDefinitions
объект, который определяет, к какой группе принадлежит свойство, и порядок, в котором группы
отображаются в таблице свойств в каждом диалоговом окне.

// определяем группы свойств


групповые определения = {
конфигурация: {название: «Конфигурация», описание: «Параметры машины», порядок: 0},
предпочтения: {название: «Предпочтения», описание: «Настройки пользователя», порядок: 1},
токарно-фрезерный станок: {название: «Настройки токарно-фрезерного станка», свернуто: правда, описание: «Настройки, относящиеся к параметрам токарно-

фрезерного станка.», порядок: 2},

homePositions: {название: "Исходные позиции G53", свернуто: правда, порядок: 3}, зацикливание:
{название: "Зацикливание", свернуто: правда, порядок: 4},
общие: {заголовок: "Общие", свернуто: правда, порядок: 5} };

Определение группы свойств

В следующей таблице описаны поддерживаемые свойства вgroupDefinitionsобъект. Важно, чтобы формат


groupDefinitionsобъект следует приведенному выше примеру, где сначала идет имя группы, за которым следует
двоеточие (:) и свойства, заключенные в фигурные скобки ({}).

Каждая группа, указанная вхарактеристикиопределение должно быть определено вgroupDefinitions.

Имущество Описание
заглавие Название группы отображается вСвойства сообщенияТаблица. Заголовок не отображается в
устаревшем диалоговом окне постобработки.

Функции ввода 4-78


Руководство по постпроцессору CAM 08.12.21
Имущество Описание
описание Описание группы, отображаемое в виде всплывающей подсказки при наведении
указателя мыши на это имя группы.
приказ Число, указывающее отображаемую позицию группы вСвойства
сообщенияТаблица. 0 указывает первую группу, 1 вторую группу и т. д.
рухнул Определяет, будет ли группа свернута или развернута по умолчанию в Свойства
сообщенияТаблица.истинныйсворачивает группу иложныйрасширяет группу.
Настройки определения группы

Группы свойств

4.1.5 Доступ к свойствам


getProperty (свойство [, значение по умолчанию])

section.getProperty (свойство [, значение по умолчанию])

Аргументы Описание
имущество Свойство, значение которого вы хотите получить. Его можно указать как текстовую
строку («useSmoothing») или как прямую ссылку на свойство (properties.useSmoothing).
Рекомендуется использовать синтаксис текстовой строки.

Тоsection.getPropertyФункция может использоваться для получения значения свойства


для определенного раздела. Если указанное свойство не является свойством операции,
будет возвращено значение свойства записи. Тоsection.getPropertyФункцию необходимо
использовать только в том случае, если вам нужно знать значение свойства операции за
пределами обработки операции, например, вonOpen.
значение по умолчанию Значение для возврата изполучить свойствоесли указанное свойство не существует.
Если значение по умолчанию не указано и свойство не существует, то
неопределенныйбудет возвращен.

Тополучить свойствоиспользуется для получения значения свойства постпроцессора.

Функции ввода 4-79


Руководство по постпроцессору CAM 08.12.21
showSequenceNumbers = getProperty("showSequenceNumbers"); если
(getProperty(properties.showSequenceNumbers) {
var smooth = getProperty («использовать сглаживание», section.getId());
Примеры вызовов getProperty

функция setProperty(свойство, значение)

Аргументы Описание
имущество Свойство, для которого вы хотите установить значение. Его можно указать как текстовую
строку («useSmoothing») или как прямую ссылку на свойство
(свойства.useSmoothing). Рекомендуется использовать синтаксис текстовой строки.
ценность Значение для установки свойства.

ТоsetPropertyФункция используется для установки значения свойства постпроцессора.

setProperty("showSequenceNumbers", true); setProperty


(properties.showSequenceNumbers, правда);
Пример вызова setProperty

4.1.6 Определения формата


Область определения формата глобального раздела используется для определения форматирования кодов,
выводимых в файл ЧПУ. Он состоит из определений формата (создатьформат), а также определения, определяющие,
когда коды будут выводиться или подавляться (createModal,создать переменную,создатьReferenceVariable,
createIncrementalVariable).

ТосоздатьформатКоманда определяет, как коды форматируются перед выводом в файл ЧПУ. Его можно использовать
для создания полного формата выходного кода, включая буквенный префикс, или для создания основного формата,
на который ссылаются выходные определения. Он имеет следующий синтаксис.

создать формат({спецификатор:значение, спецификатор:значение, …});


Синтаксис createFormat

Спецификаторы должны быть заключены в фигурные скобки ({}) и содержать имя спецификатора, за которым следует двоеточие
(:), а затем значение. Несколько спецификаторов разделяются запятыми.

Спецификатор Ценность

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

суффикс Определяет суффикс выходного значения в виде текстовой строки. Суффикс следует определять
только в том случае, если это автономный формат и он не используется для множественных
определений вывода.

Функции ввода 4-80


Руководство по постпроцессору CAM 08.12.21
Спецификатор Ценность

десятичные дроби Определяет количество цифр справа от десятичной точки для вывода. По
умолчанию 6.
силаДесятичный При установке наистинныйдесятичная точка всегда будет включена в
форматированное число.ложныйудалит десятичную точку для целых значений.
силаПодписать При установке наистинныйзаставит выводить знак плюс (+) для положительных
чисел. По умолчаниюложный.
ширина Задает минимальную ширину выходной строки. Если ширина
отформатированного значения меньше, чемшириназначение, то начало числа
будет либо заполнено пробелами, либо нулями в зависимости от значения
нольпад.Если формат используется для вывода кода в файл ЧПУ, обязательно
установитенольпадкистинный, иначе префикс и значение могут быть разделены
пробелами. Ширина выходной строки включает десятичную точку, когда она
входит в число, но не знак числа. Значение по умолчанию – 0.
нольпад При установке наистинныйзаполнит начало выходной строки нулями, чтобы
соответствовать указанной ширине. Еслиширинане указан или выходная строка
длиннее, чемширина, то нули добавляться не будут. По умолчаниюложный.
подрезать При установке наистинныйконечные нули будут обрезаны справа от десятичной
точки. По умолчаниюистинный.
обрезатьLeadZero При установке наистинныйурежет начальный нуль из числа с плавающей запятой, если
число является дробным, например, 0,123 вместо 0,123. По умолчаниюложный.
масштаб Определяет коэффициент масштабирования, на который умножается значение перед его форматированием

для вывода.масштабможет быть номером или обозначением номера, напримерградус. По умолчанию 1.

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

умолчанию – 0.

разделитель Определяет символ, используемый в качестве десятичной точки. По умолчанию '.'.


наследовать Наследует все свойства от существующегоформат.
свойства createFormat

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

Функция Описание
различаются(а, б) Возвращаетистинныйесли входные значения отличаются после форматирования.
формат(значение) Возвращает форматированное текстовое строковое представление числа.
получитьОшибка(значение) Возвращает инверсию оставшейся части значения, не отформатированного для
числа. Например, если отформатированное значение 4,5005 равно «4,500», то
значение, возвращаемое изполучитьОшибкабудет -0,0005.
получитьминимальное значение() Возвращает минимальное значение, которое можно отформатировать с помощью этогоформат,

например, 1 длядесятичные дроби: 0, .1 длядесятичные дроби:1, и т.д.

getResultingValue Возвращает реальное значение, которое представляет отформатированная выходная текстовая строка.

(ценность)

Значимый(значение) Возвращает true, если значение будет ненулевым при форматировании.

Функции ввода 4-81


Руководство по постпроцессору CAM 08.12.21
форматФункции

var xFormat = createFormat({десятичные числа:3, обрезка:ложь, forceSign:true});


xFormat.format(4.5); // возвращает "+4,500"
xFormat.areDifferent(9.123, 9.1234); // возвращает false, оба числа равны 9.123
xFormat.getMinimumValue(); // возвращает 0,001
xFormat.isSignificant(.0005); // возвращает true (с округлением до 0,001)
xFormat.isSignificant(.00049); // возвращает ложь

var yFormat = createFormat({десятичные числа:3, forceSign:true});


yFormat.format(4.5); // возвращает "+4,5"
yFormat.getResultingValue(3.1234); // возвращает 3,123

var toolFormat = createFormat({префикс: "T", десятичные знаки: 0, нулевая панель: истина, ширина: 2});
инструментФормат.формат(7); // возвращает "Т07"

var aFormat = createFormat({decimals:3, forceSign:true, forceDecimal:true, scale:DEG}); формат.формат(


Математика .ЧИСЛО ПИ); // возвращает «+180».

var zFormat = createFormat ({десятичные числа: 4, масштаб: 10000, forceDecimal: false});


zFormat.format(1.23); // возвращает 12300 (подавление ведущих нулей)
ПримерформатКоманды

4.1.7 Определения выходных переменных


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

Тосоздать переменную,createModal,создатьReferenceVariable,иcreateIncrementalVariableфункции создают объекты вывода,


которые используются для управления выводом кода. Тосоздать переменнуюиcreateModal объекты используются для
вывода кодов/регистров только тогда, когда они изменяются по сравнению с предыдущим выходным значением,
создатьReferenceVariableиспользуется для вывода значений, когда они отличаются от заданного эталонного значения, а
createIncrementalVariableиспользуется для вывода инкрементных значений, т. е. выходное значение будет инкрементным
значением на основе предыдущего значения и входного значения.

Тосоздать переменнуюиcreateModalобъекты могут использоваться взаимозаменяемо, поскольку они оба выводят только те
значения, которые изменились. В постпроцессоре вы увидите, чтоcreateModalобъект используется для вывода модальных
групп G-кода или М-кода, где несколько кодов могут быть выведены в одном блоке и будут выведены только тогда, когда код
изменит значение по сравнению с предыдущим кодом в этой группе. То создать переменнуюобъект используется для всего
остального вывода кода/регистра, такого как регистры осей, скорость шпинделя, скорости подачи и т. д. Единственная
разница в этих объектах — функции, которые им принадлежат, например, вы можете отключить вывод переменной, но не
Модальный.

Функции ввода 4-82


Руководство по постпроцессору CAM 08.12.21
Вы можете использоватьсоздатьформатобъект для кодов/регистров, которые должны выводиться всякий раз, когда они
встречаются в сообщении, просто не забудьте добавить префикс к определению.

создать переменную ({спецификатор:значение, спецификатор:значение, …},формат); создать


модальный ({спецификатор:значение, спецификатор:значение, …},формат);
создатьReferenceVariable({спецификатор:значение, спецификатор:значение, …},формат);
createIncrementalVariable({спецификатор:значение, спецификатор:значение, …},формат);
Синтаксис выходных переменных

Спецификаторы должны быть заключены в фигурные скобки ({}) и содержать имя спецификатора, за которым следует двоеточие
(:), а затем значение. Несколько спецификаторов разделяются запятыми. Аформатобъект предоставляется в качестве второго
параметра. Некоторые спецификаторы являются общими для всех трех объектов, а некоторые — для конкретного объекта, как
указано в следующей таблице.

Спецификатор Объект Ценность

префикс (все) Текстовая строка, которая переопределяет префикс, определенный вформат.

сила (все) При установке наистинныйпринудительно форматирует значение, даже если


оно не отличается от предыдущего значения. По умолчанию ложный.

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

первый createIncrementalVariable Определяет начальное значение инкрементной переменной. Вам


также придется позвонить впеременная.формат(первая)после
создания IncrementalVariable для правильного сохранения начального
значения.
Свойства выходной переменной

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

вар gPlaneModal = createModal({onchange: функция () {gMotionModal.reset();}}, gFormat);


onChange Использование

После создания выходной переменной ее можно использовать для создания форматированной текстовой строки для
вывода. В следующей таблице описаны функции, назначенные объектам выходных переменных. Функции являются
свойствами определенныхПеременнаяобъект.

Функция Объект Описание


запрещать() Переменная Отключает вывод этой переменной.
СсылкаПеременная Вызывает возвращаемое значение из
Инкрементальная переменная форматфункция всегда должна быть
пустой строкой ("").

Функции ввода 4-83


Руководство по постпроцессору CAM 08.12.21
Функция Объект Описание
включить() Переменная Включает эту переменную для вывода. Это
Ссылочная переменная условие по умолчанию при создании
Инкрементальная переменная переменной.
формат (значение [, ссылка]) (все) Возвращает форматированное текстовое
строковое представление числа. Может
возвращать пустую строку, если значение
совпадает с сохраненным значением в
объектах Variable и Modal, а также со значением
ссылки в объекте.
ReferenceVariable или создает значение 0
в объекте IncrementalVariable. Призыв к
форматдля объекта ReferenceVariable
должен содержать второйссылка
параметр, который определяет, должно
ли значение форматироваться для
вывода.
получить текущий() Переменная Возвращает значение, хранящееся в данный момент в

Модальный этой переменной.

Инкрементальная переменная

включен() Переменная Возвращаетистинныйесли эта переменная


СсылкаПеременная включена для вывода
Инкрементальная переменная

перезагрузить() Переменная Принудительно выводит отформатированную


Модальный текстовую строку при следующем вызове format,
Инкрементальная переменная переопределяя правила, запрещающие вывод
значения.

setPrefix (префикс-текст) (все) Переопределяет префикс переменной.


setSuffix (суффикс-текст) Модальный Переопределяет суффикс переменной.
ПеременнаяФункции

var xyzFormat = createFormat({decimal:3, forceDecimal:true}); var


xOutput = createVariable({prefix:"X"}, xyzFormat);
xOutput.format(4.5); // возвращает "X4.5"
xOutput.format(4.5); // возвращает "" (на данный момент в переменной xOutput хранится 4.5)
xOutput.reset(); // принудительно xOuput при следующем форматировании
xOutput.format(4.5); // возвращает "X4.5" xOutput.disable(); //
отключить форматирование xOutput xOutput.format(1.2); //
возвращает "", так как он отключен

var gFormat = createFormat({префикс: "G", десятичные знаки: 0, ширина: 2, нулевая панель:


истина}); вар gMotionModal = createModal({force:true}, gFormat);
gMotionModal.format(0); // возвращает G00 gMotionModal.format(0); //
возвращает G00 (установлено значение true)
gMotionModal.format.setPrefix("G1=");
gMotionModal.setSuffix("*");
Функции ввода 4-84
Руководство по постпроцессору CAM 08.12.21
gMotionModal.format(1); // возвращает "G1=01*"

var iOutput = createReferenceVariable({prefix:"I", forceDecimal}, xyzFormat);


iOutput.format(.001, 0); // возвращает "I0.001"
iOutput.format(.0001, 0); // возвращает ""

var zOutput = createIncrementalVariable({prefix:"Z", first:.5}, xyzFormat); zOutput.format(.5); // после


создания IncrementalVariable вы должны вызвать функцию форматирования
// с тем же значением, что и 'first', чтобы правильно установить начальное значение

zOutput.format(1.2); // возвращает "Z0.7"


zOutput.format(1.5); // возвращает "Z0.3"
zOutput.format(1.5); // возвращает ""
zOutput.format(0); // возвращает "Z-1.5"
ПримерПеременнаяКоманды

4.1.8 Фиксированные настройки

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

// фиксированные настройки

вар firstFeedParameter = 500; var


useMultiAxisFeatures = false;
вар forceMultiAxisIndexing = ложь; // принудительное многоосевое индексирование для 3D-
программ var maxLineLength = 80; // максимально допустимое количество символов в строке
вар минимум циклов = 5; // минимальное количество точек в цикле, которые следует учитывать для подпрограммы

вар WARNING_WORK_OFFSET = 0;

вар ANGLE_PROBE_NOT_SUPPORTED = 0;
вар ANGLE_PROBE_USE_ROTATION = 1; вар
ANGLE_PROBE_USE_CAXIS = 2;
Пример кода фиксированных настроек

4.1.9 Собранное состояние


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

// собранное состояние

var номер_последовательности;

переменная текущаяВоркоффсет;
Образец собранного кода состояния

Функции ввода 4-85


Руководство по постпроцессору CAM 08.12.21
4.2 при открытии

функция onOpen () {

ТоonOpenФункция вызывается в начале каждой операции CAM и может использоваться для определения настроек,
используемых в постпроцессоре, и вывода блоков запуска.

1. Определите настройки на основе свойств


2. Определите конфигурацию многоосного станка
3. Имя и заголовок программы вывода
4. Выполните проверки на наличие повторяющихся номеров инструментов и рабочих смещений.

5. Вывести начальные коды запуска

4.2.1 Определение настроек на основе свойств записи


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

Некоторые из переменных, которые могут быть определены здесь, включают максимальную круговую развертку, начальный
порядковый номер, форматы, свойства, которые можно изменить с помощью команды Manual NC, и т. д.

если (getProperty("useRadius")) {
максимальная круговая развертка = toRad(90);//избежать потенциальных ошибок расчета центра для ЧПУ
}

// определяем вывод порядкового номера


если (getProperty("sequenceNumberOperation")) {
setProperty("showSequenceNumbers", false);
}
номер_последовательности = получить свойство ("Начальный номер_последовательности");

// разделяйте коды пробелом в выходном блоке


если (!getProperty("separateWordsWithSpace")) {
УстановитьРазделительСлов("");

// Команда ручного ЧПУ может изменить тип передачи


TransferType = parseToggle(getProperty("transferType"), "ФАЗА", "СКОРОСТЬ");
Определение динамических переменных в функции onOpen

Функции ввода 4-86


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

единица = мм;//установите выходные единицы в миллиметры, используйте IN для дюймов

Поддержка только одного устройства ввода

4.2.2 Определение многоосевой конфигурации


Функция onOpen содержит вызовы функций, которые дополнительно создают жестко закодированную
конфигурацию машины и активируют конфигурацию машины, будь то жестко закодированная или
определенная в CAM-системе. Ниже приведен пример этого кода. Полное описание определения
многоосевой конфигурации см.Многоосевые постпроцессорыглава.

// определить и включить конфигурацию машины


полученная конфигурация машины = (typeof machineConfiguration.isReceived == "функция")?
machineConfiguration.isReceived() :
((machineConfiguration.getDescription() != "") ||
machineConfiguration.isMultiAxisConfiguration());
если (typeof defineMachine == "функция") {
определитьМашину(); // жестко заданная конфигурация машины
}
активироватьМашина(); // включаем оптимизацию и настройки машины
Определение конфигурации машины

4.2.3 Имя и заголовок программы вывода


Имя программы и комментарий к программе определяются на вкладке «Постобработка» настройки CAM в HSM. То
ProgramNameIsIntegerпеременная, определенная в верхней части программы, определяет, должно ли имя программы быть
числом или может быть текстовой строкой.

Определение имени программы и комментария

Функции ввода 4-87


Руководство по постпроцессору CAM 08.12.21
написать("%");//вывод начала файла ЧПУ если
(имя программы) {
var идентификатор программы;

пытаться {

идентификатор программы = getAsInt (имя программы); }

поймать(е) {

error(localize("Имя программы должно быть числом"));


возвращение;
}
если (!((идентификатор_программы >= 1) && (идентификатор_программы <= 99999))) {

error(localize("Номер программы вне допустимого диапазона.");


возвращение;
}
пиши(
"O" + oFormat.format(programId) +
условный (комментарий программы, " " + Комментарий формата (Комментарий программы. подстрока (0,
максимальная длина строки - 2 - ("O" + oFormat.format (идентификатор программы)). длина - 1)))
);
последняя подпрограмма = идентификатор

программы; } еще {

error(localize("Имя программы не указано."));


возвращение;
}
Вывести имя программы в виде целого числа и комментарий к программе

Некоторые машины не используют номер программы и принимают имя программы в качестве комментария.

написать("%");//вывод начала файла ЧПУ если


(имя программы) {
написать комментарий (имя программы);
}
если (комментарий к программе) {

написатьКомментарий(программныйКомментарий);

}
Вывести имя программы в виде комментария

Заголовок программы может состоять из имени выходного файла, номеров версий, даты и времени выполнения,
описания машины, списка инструментов, используемых в программе, и заметок по настройке.

// Выводим информацию о текущем запуске


if (hasParameter("сгенерировано") && getParameter("сгенерировано")) {
написать комментарий(" " + localize("CAM") + ": " + getParameter("сгенерировано"));
}
if (hasParameter("путь-документ") && getParameter("путь-документ")) {
writeComment(" " + localize("Документ") + ": " + getParameter("путь к документу"));
Функции ввода 4-88
Руководство по постпроцессору CAM 08.12.21
}
var eos = longDescription.indexOf(".");
writeComment(localize(" Постпроцессор: ") + ((eos == -1) ?
longDescription : longDescription.substr(0, eos + 1)));
if ((typeof getHeaderVersion == "функция") && getHeaderVersion()) {
writeComment(" " + localize("Post version") + ": " + getHeaderVersion());
}
если ((typeof getHeaderDate == "функция") && getHeaderDate()) {
writeComment(" " + localize("После изменения") + ": " + getHeaderDate());
}
var d = новая дата();//вывести текущую дату и время написать
комментарий(" " + локализовать ("Дата") + ": " + d.toLocaleDateString() + " " +
d.toLocaleTimeString());
Вывести описание текущего прогона

// дамп конфигурации машины


var поставщик = machineConfiguration.getVendor();
модель var = machineConfiguration.getModel();
var description = machineConfiguration.getDescription();

if (getProperty("writeMachine") && (поставщик || модель || описание)) {


writeComment(localize("Машина")); если
(поставщик) {
writeComment(" " + localize("поставщик") + ": " + поставщик);
}
если (модель) {
writeComment(" " + localize("model") + ": " + model);
}
если (описание) {
writeComment(" " + localize("описание") + ": " + описание);
}
}
Вывод информации о машине

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

machineConfiguration.setVendor("Doosan");
machineConfiguration.setModel ("Рысь");
machineConfiguration.setDescription(описание);
Определение информации о машине

// информация об инструменте дампа

если (получить свойство («инструменты записи»)) {

вар zRanges = {};

Функции ввода 4-89


Руководство по постпроцессору CAM 08.12.21
если (3D()) {
var число_секций = getNumberOfSections(); for
(var i = 0; i < numberOfSections; ++i) {
var section = getSection(i);
var zRange = section.getGlobalZRange();
инструмент var = section.getTool();
если (zRanges[tool.number]) {
zRange[tool.number].expandToRange(zRange); }
еще {
zRange[tool.number] = zRange;
}
}
}

вар инструменты = getToolTable();


если (tools.getNumberOfTools() > 0) {
for (var i = 0; i < tools.getNumberOfTools(); ++i) {
инструмент var = tools.getTool(i);
var comment = "T" + toolFormat.format(tool.number) + " " +
"D=" + xyzFormat.format(tool.diameter) + " " + localize("CR") +
"=" + xyzFormat.format(tool.cornerRadius); если
((tool.taperAngle > 0) && (tool.taperAngle < Math.PI)) {
комментарий += " " + localize("TAPER") + "=" + TaperFormat.format(tool.taperAngle) +
локализовать("градус");

}
если (zRanges[tool.number]) {
комментарий += "-" + локализовать("ZMIN") + "=" +
xyzFormat.format(zRanges[tool.number].getMinimum());
}
комментарий += "-" + getToolTypeName(tool.type); написать
комментарий (комментарий);
}
}
}
Выходной список используемых инструментов

Следующий код используется для вывода заметок из первой установки. НедвижимостьпоказатьПримечанияопределяется в


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

// вывод примечаний к настройке

если (получить свойство ("showNotes")) {


написатьSetupNotes();
}
Вывод примечаний из первой настройки

Функции ввода 4-90


Руководство по постпроцессору CAM 08.12.21
Если ваш пост должен выводить заметки из нескольких настроек, тогда дополнительный код внеonOpen
необходимо добавить.

Во-первых, определитепервая заметкаимущества в собранном состоянии разделе почты.

// собранное состояние


вар первая заметка; // обрабатывает вывод заметок из нескольких установок
Определите глобальную переменную firstNote

В функции onParameter определите логику для обработкирабочие заметкипараметр.

функция onParameter (имя, значение) {


переключатель (имя) {


кейс "заметки о работе":

если (!firstNote) {
writeNotes(значение, правда);
}
первое примечание = ложь;

ломать;
}
}
Обработка примечаний к настройке в onParameter

И, наконец, реализоватьнаписатьтекстфункция. Его можно поставить передonParameterфункция. Эту


функцию также можно использовать для вывода текста изПройти черезРучная команда ЧПУ.

// выводит многострочный текст либо как есть, либо как


комментарий функция writeNotes(текст, asComment) {
если (текст) {
var lines = String(text).split("\n"); var r2 =
new RegExp("[\\s]+$", "g"); для (строка
в строчках) {
var comment = строки[строка].replace(r2, ""); если
(комментарий) {
если (как комментарий) {

onComment (комментарий);
} еще {
написать(комментарий);
}
}
}
}
}
Функция writeNotesFunction используется для вывода многострочного текста.

Функции ввода 4-91


Руководство по постпроцессору CAM 08.12.21
4.2.4 Выполнение общих проверок
Базовые проверки на использование повторяющихся номеров инструментов, неопределенные смещения нулевой точки и другие
требования можно выполнить вonOpenфункция, так как все операции могут быть доступны в любое время во время постобработки.

если (ложь) {//установите значение true, чтобы проверить дублирующиеся номера инструментов с другой геометрией фрезы

// проверка дублирующегося номера инструмента

for (var i = 0; i < getNumberOfSections(); ++i) {


var sectioni = getSection(i); var
tooli = sectioni.getTool();
for (var j = i + 1; j < getNumberOfSections(); ++j) {
var sectionj = получитьSection(j); var
toolj = sectionj.getTool(); если
(tooli.number == toolj.number) {
если (xyzFormat.areDifferent(tooli.diameter, toolj.diameter) ||
xyzFormat.areDifferent(tooli.cornerRadius, toolj.cornerRadius) ||
abcFormat.areDifferent(tooli.taperAngle, toolj.taperAngle) ||
(tooli.numberOfFlutes != toolj.numberOfFlutes)) {
ошибка(

субст(
localize("Использование одного и того же номера инструмента для другой геометрии фрезы для операции "%1" и
'%2'."),
sectioni.hasParameter("операция-комментарий") ?
sectioni.getParameter("операция-комментарий") : ("#" + (i + 1)),
sectionj.hasParameter("операция-комментарий") ?
sectionj.getParameter("операция-комментарий") : ("#" + (j + 1))
)
);
возвращение;

}
}
}
}
}
Проверка дублирующихся номеров инструментов с использованием другой геометрии фрезы

// не разрешать WCS 0, если только он не является единственным WCS, используемым в


программе если ((getNumberOfSections() > 0) && (getSection(0).workOffset == 0)) {
for (var i = 0; i < getNumberOfSections(); ++i) {
если (getSection(i).workOffset > 0) {
error(localize("Использование нескольких рабочих смещений невозможно, если начальное рабочее смещение равно 0."));

возвращение;

}
}
}
Функции ввода 4-92
Руководство по постпроцессору CAM 08.12.21
Проверьте рабочее смещение 0, когда в программе используется несколько рабочих смещений.

4.2.5 Вывод начальных кодов запуска


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

// выводим коды по умолчанию

writeBlock(gAbsIncModal.format(90), gFeedModeModal.format(94), gPlaneModal.format(17),


gFormat.format(49), gFormat.format(40), gFormat.format(80));

// код юнитов вывода


переключатель (блок) {
дело В:
writeBlock(gUnitModal.format(20));
ломать;
чехол ММ:
writeBlock(gUnitModal.format(21));
ломать;
}
Вывод начальных кодов запуска

4.3 в разделе
функция в разделе () {

ТоonSectionФункция вызывается в начале каждой операции CAM и управляет выводом следующих


блоков.

1. Конец предыдущего раздела


2. Комментарии и примечания по эксплуатации

3. Смена инструмента
4. Рабочая плоскость
5. Исходное положение

Функции ввода 4-93


Руководство по постпроцессору CAM 08.12.21
Перевод: английский - русский - www.onlinedoctranslator.com

onSection вызывается для каждой операции

Первая частьonSectionопределяет, есть ли изменение в используемом инструменте и отличается ли смещение


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

var insertToolCall = isToolChangeNeeded("число"); var


newWorkOffset = isFirstSection() ||
(getPreviousSection().workOffset!= CurrentSection.workOffset); // изменения рабочего смещения
var newWorkPlane = isNewWorkPlane();
Смена инструмента, смещение системы рабочих координат и настройки рабочей плоскости

4.3.1 Завершение предыдущей операции


Вы ожидаете, что блоки ЧПУ, выводимые в конце операции, будут выводиться вonSectionEnd функция, но в
большинстве сообщений это обрабатывается вonSectionи для заключительной операции, впри закрытии функция.
Этот код обычно останавливает шпиндель, отключает подачу СОЖ и убирает инструмент.

если (insertToolCall || newWorkOffset || newWorkPlane) {

// остановить шпиндель перед отводом во время смены


инструмента if (insertToolCall && !isFirstSection()) {
по команде (COMMAND_STOP_SPINDLE);
}

// отводим в безопасную
плоскость writeRetract(Z);
}


Функции ввода 4-94
Руководство по постпроцессору CAM 08.12.21
по команде (COMMAND_COOLANT_OFF);

if (!isFirstSection() && getProperty("OptionalStop")) {


по команде (COMMAND_OPTIONAL_STOP);
}
Завершение предыдущей операции

Код для отвода инструмента может варьироваться от сообщения к сообщению, в зависимости от модели контроллера и
конфигурации машины. Он может выводить абсолютное перемещение в исходное положение станка, например, с помощью G53, или
перемещение на заднюю плоскость, соответствующую текущему рабочему смещению, например, G00 Z5.0.

ТоonSectionEndраздел содержит пример завершения операции, если она не была выполнена вonSection
функция.

4.3.2 Комментарии и примечания по эксплуатации


Комментарий к операции выводится вonSectionфункция и, при необходимости, отмечает, что пользователь присоединился к
операции.

Создать комментарий к операции

var comment = getParameter("операция-комментарий", ""); если


(комментарий) {
написать комментарий (комментарий);

}
Комментарий операции вывода

Функции ввода 4-95


Руководство по постпроцессору CAM 08.12.21
Щелкните правой кнопкой мыши, чтобы показать меню для создания примечаний к операции

Вывод примечаний к операции обычно обрабатывается свойством постпроцессора.показатьПримечания.

// пользовательские
свойства properties = {

показатьПримечания: {

title : "Показать заметки",


description: "Записывает примечания по настройке и эксплуатации в виде комментариев в выходной код.", введите

: "логическое",
ценность : ложный,

сфера : "Почта"
},

}
Определите свойство showNotes

// выводим примечания к разделу

если (получить свойство ("showNotes")) {


написатьПримечания к разделу();

}
Функции ввода 4-96
Руководство по постпроцессору CAM 08.12.21
Примечания к операции вывода

4.3.3 Смена инструмента


Блоки смены инструмента выводятся всякий раз, когда в шпиндель загружается новый инструмент или принудительно выполняется смена инструмента,

либо с помощью ручного ЧПУ.Принудительная смена инструментапо команде или внутри, например, когда безопасный пуск принудительно

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

1. Номер инструмента и код смены инструмента


2. Комментарий к инструменту

3. Комментарий, содержащий нижний предел Z для инструмента (необязательно)

4. Выбор следующего инструмента

5. Скорость и направление шпинделя


6. Коды охлаждающей жидкости

Параметры инструмента, используемые при смене инструмента

Значение смещения длины обычно выводится вместе с начальным положением, как описано далее в этой главе.
Значение смещения диаметра выводится с блоком движения вonLinear. Все остальные параметры инструмента выводятся
в коде смены инструмента.

если (insertToolCall) {

если (tool.number > numberOfToolSlots) {
warning(localize("Номер инструмента превышает максимальное значение."));
}

writeBlock("T" + toolFormat.format(tool.number), mFormat.format(6)); если


(инструмент.комментарий) {
написатьКомментарий(инструмент.комментарий);

Функции ввода 4-97


Руководство по постпроцессору CAM 08.12.21
}

Смена инструмента вывода и комментарий к инструменту

Вам придется изменить настройкупоказатьToolZMinкистинныйесли вы хотите, чтобы комментарий нижнего предела Z


выводился при смене инструмента.

вар showToolZMin = истина;


если (showToolZMin) {
если (3D()) {
вар zRange = инструментZRange(); writeComment(localize("ZMIN") +
"=" + zRange.getMinimum());
}
}
Выходной нижний предел Z для этой операции

Выбор следующего инструмента является необязательным и управляется свойством постпроцессора.preloadTool.

// пользовательские
свойства properties = {

preloadTool: {
title : "Инструмент предварительной загрузки",

description: "Предварительно загружает следующий инструмент при смене инструмента (если есть).",

введите : "логическое",
ценность : истинный,

сфера : "Почта"
}
}
Определите свойство preloadTool

Первый инструмент будет загружен при последней операции программы.

// предварительно загрузить следующий инструмент

если (getProperty("preloadTool")) {
var nextTool = getNextTool («число»); если
(следующий инструмент) {
writeBlock("T" + toolFormat.format(nextTool.number)); }
еще {
// предварительно загрузить первый инструмент

var firstToolNumber = getFirstTool().number; if


(tool.number!= firstToolNumber) { writeBlock("T" +
toolFormat.format(firstToolNumber));
}
}
}
Функции ввода 4-98
Руководство по постпроцессору CAM 08.12.21
Предварительно загрузить следующий инструмент

Коды шпинделя будут выводиться при смене инструмента и при изменении скорости шпинделя.

если (вставить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}
];
Таблица определения охлаждающей жидкости

Код охлаждающей жидкости выводится с использованием следующего кода вonSection.

Функции ввода 4-99


Руководство по постпроцессору CAM 08.12.21
// устанавливаем охлаждающую жидкость после того, как мы

расположились по оси Z setCoolant(tool.coolant);

Вывод кодов охлаждающей жидкости

ТоsetCoolantФункция выводит каждый код охлаждающей жидкости в отдельных блоках. Он делает это, вызывая getCoolantCodes
функцию для получения кода(ов) охлаждающей жидкости и использованиянаписатьБлокироватьдля вывода каждого отдельного
кода охлаждающей жидкости. Обе эти функции являются общими по своей природе и не должны изменяться.

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

var coolantCodes = getCoolantCodes(tool.coolant);


var initialPosition = getFramePosition(currentSection.getInitialPosition());
написатьБлок(
gAbsIncModal.format(90),
gMotionModal.format(0),
xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y),
coolantCodes,
);
Функция getCoolantCodes поддерживает несколько кодов для режима одного хладагента

4.3.4 Смещения системы рабочих координат


Смещение активной рабочей системы координат (WCS) определяется в диалоговом окне CAM Setup. Вы можете
переопределить WCS, определенный в настройках, либо в папке, либо в шаблоне. ТоwcsDefinitionsпеременная определяет
поддерживаемые коды WCS, которые могут быть выведены, и рекомендуется включить определение этой переменной в
свой пост. Все примеры в этом разделе предполагают, чтоwcsDefinitionsопределено.

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

Входные функции 4-100


Руководство по постпроцессору CAM 08.12.21
Смещение WCS с конфигурацией машины Смещение WCS без конфигурации машины

Коды 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. Установите его наложныйбудет рассматривать

рабочее смещение 0 как 1.

туалет Содержит определения поддерживаемых форматов WCS.


название Имя выходного формата WCS. Обычно это будетСтандартили
Расширенный. Имя отображается вФорматполе кадра Machine WCS.

формат Выходной формат WCS. Это текстовая строка с необязательным символом #,


который определяет, где будет помещено значение смещения. Если # не
указан, то значение смещения будет помещено в конец строки.
диапазон Определяет допустимый диапазон рабочих смещений для заданного формата.
Переменная wcsDefinitions

Функции ввода 4-101


Руководство по постпроцессору CAM 08.12.21
Ядро постпроцессора отформатирует выходной код WCS на основе формата, определенного
в wcsDefinitions. И строка, и число доступны для постпроцессора вразделобъект.

Переменная Описание
section.wcs Выходной код рабочего смещения (G54, G51 P1 и т. д.).
section.workOffset Номер рабочего смещения.

//туалет

if (insertToolCall) { // принудительное смещение нулевой точки при смене инструмента

currentWorkOffset = не определено;
}

если (currentSection.workOffset != currentWorkOffset) {


writeBlock(currentSection.wcs);
currentWorkOffset = currentSection.workOffset;
}
Вывод номера смещения рабочей системы координат

4.3.5 Рабочая плоскость — 3+2 операции


3+2 операции поддерживаются определением ориентации инструмента для операции. Эта ориентация инструмента
называется рабочей плоскостью в постпроцессоре. Ориентация инструмента задается на вкладке Геометрия
операции.

Определение рабочей плоскости

Функции ввода 4-102


Руководство по постпроцессору CAM 08.12.21
Рабочая плоскость для операции 3+2

Выходными данными для рабочей плоскости будут либо положения поворотных осей, либо определение самой рабочей плоскости в
виде углов Эйлера. Для систем управления станком, поддерживающих оба формата,использованиеMultiAxisFeaturesпеременная
определяет используемый метод рабочей плоскости. Эта переменная, наряду с другими переменными, которые управляют 3+2
операциями, определяется настройками конфигурации машины и функциями в верхней части постпроцессора.

// Запуск логики конфигурации


машины…
var useMultiAxisFeatures = false; //включить использование наклонной плоскости с включенным управлением

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

Функции ввода 4-103


Руководство по постпроцессору CAM 08.12.21
ТоЭйлерКонвенциянастройка передается вgetEuler2функция и используется для вычисления углов Эйлера для
рабочей плоскости. Он определяет порядок вращения основной оси, требуемый системой управления станком, и
может быть одним из значений в следующей таблице.

Параметр Параметр Параметр Параметр


ЭУЛЕР_XYZ_R ЭУЛЕР_XYX_R ЭУЛЕР_XZX_R ЭУЛЕР_XZY_R
EULER_YXY_R ЭУЛЕР_YXZ_R ЭУЛЕР_YZX_R EULER_YZY_R
ЭУЛЕР_ZXY_R ЭУЛЕР_ZXZ_R ЭУЛЕР_ZYX_R ЭУЛЕР_ZYZ_R
ЭУЛЕР_XYZ_S EULER_XYX_S ЭУЛЕР_ХЗХ_С ЭУЛЕР_XZY_S
EULER_YXY_S EULER_YXZ_S ЭУЛЕР_YZX_S EULER_YZY_S
ЭУЛЕР_ZXY_S ЭУЛЕР_ZXZ_S EULER_ZYX_S ЭУЛЕР_ZYZ_S
Порядок углов Эйлера

Обратитесь к Руководству по программированию для вашей машины, чтобы определить, поддерживаются ли углы Эйлера
и порядок вращения. Варианты _R (повернутые) углов Эйлера будут использовать измененную ориентацию после каждого
поворота для каждой оси. Варианты _S (статические) будут использовать исходную систему координат для всех поворотов
и иногда упоминаются как шаг, ряд, рыскание.

ТоиспользованиеMultiAxisFeaturesиuseABCPrepositioningпеременными можно управлять из свойств


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

свойства = {

использованиеMultiAxisFeatures: {

заголовок: "Использовать G68.2",

description: "Включить вывод блоков G68.2 для операций 3+2, отключить вывод углов поворота.", type:
"boolean,
значение: правда,

область действия:["машина", "пост"],


группа:"многоосность"},
useABCPrepositioning: {
title: "Поворотные предлоги",
описание: "Разрешить предварительное позиционирование поворотных осей перед кадрами G68.2.",

область действия: ["станок", "столб"],

группа: "многоосность",
тип: "булев",
значение: правда

},

Определение useMultiAxisFeatures и useABCPrepositioning в качестве свойств

Код, обрабатывающий 3+2 операции, обычно находится вопределить рабочую плоскостьфункцию, но также может быть
определен как встроенный код внутриonSectionфункция. Предпочтительным методом является использование

Функции ввода 4-104


Руководство по постпроцессору CAM 08.12.21
определить рабочую плоскостьфункция, которая управляет расчетом и выводом углов поворота для многоосевых и
3+2 операций.определить рабочую плоскостьбудет вызван изonSection.

// позиционирование поворотных осей для многоосевых и 3+2 операций var


abc =определить рабочую плоскость(текущий раздел, правда);
Вызов функции defineWorkPlane

Тоопределить рабочую плоскостьФункция определяется следующим образом и возвращает начальные положения поворота для многоосевых операций и

операций 3+2.

определить рабочую плоскость(_раздел, _setWorkPlane)

Аргументы Описание
_раздел Операция (сечение), используемая для расчета углов поворота.
_setWorkPlane истинныйзнак равновыведите положения угла поворота и отрегулируйте выходные координаты
для вращения 3+2.ложныйзнак равноне выводить положения угла поворота. Углы поворота по-
прежнему будут рассчитываться, а выходные координаты будут скорректированы для поворота
3+2.
Функция defineWorkPlane

// используем углы Эйлера для рабочей


плоскости если (useMultiAxisFeatures) {
var abc = _section.workPlane.getEuler2(eulerConvention);
отменитьПреобразование();
// используем углы поворота для рабочей

плоскости } еще {

abc = getWorkPlaneMachineABC (_section.workPlane, true);


}
// вывод рабочей плоскости
если (_setWorkPlane) {
установитьВоркПлане (abc);

}
}
Расчеты рабочей плоскости

ФункцияgetWorkPlaneMachineABCиспользуется для расчета позиций поворотных осей, которые удовлетворяют


рабочей плоскости. Он вернет вычисленные углы положения поворотной оси или наклонной плоскости.

getWorkPlaneMachineABC(рабочая плоскость, поворот)

Аргументы Описание
рабочая плоскость Матрица рабочей плоскости, используемая для расчета углов поворота. Эта переменная
обычноsection.workPlane.
вращать Включите, чтобы настроить выходные координаты для ориентации рабочей плоскости.
Отключите, чтобы просто вычислять углы поворота, а не корректировать координаты XYZ для
поворотов осей.

Функции ввода 4-105


Руководство по постпроцессору CAM 08.12.21
Функция getWorkPlaneMachineABC

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

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

var currentABC = isFirstSection() ? новый вектор (0, 0, 0): getCurrentDirection();


var abc = machineConfiguration.getABCByPreference(W, currentABC, ABC,
PREFER_PREFERENCE, ENABLE_ALL);
Вычислите углы поворотной оси на основе рабочей плоскости

конфигурация машины.получитьABCByPreference(рабочая плоскость, текущая, управляющая ось, тип, параметры)

Аргументы Описание
рабочая плоскость Матрица рабочей плоскости, используемая для расчета углов поворота. Эта
переменная обычноsection.workPlane.
Текущий Текущие углы поворота. Обычно это позиция ABC, возвращаемая жеткуррентдиректион. В
первой операции это значение устанавливается на ось инструмента, поэтому в данном
случае текущие углы поворота определены как 0,0,0.
ось управления Ось, используемая для определения предпочтительного решения в сочетании стип аргумент. Это
может быть A, B или C для одной оси или ABC для рассмотрения всех определенных поворотных
осей.
тип Тип предпочтения, как описано в таблице «Тип предпочтения».
Опции Параметры, используемые для управления решением, как описано в таблице параметров управления.

Функция getABCByPreference

Тип предпочтения Описание


PREFER_PREFERENCE Использует предпочтение, указанное с осью, либо в конфигурации CAM-
машины, либо вcreateAxisфункция для жестко заданной кинематики.
PREFER_CLOSEST Выбирает решение, ближайшее к текущему положению поворотных осей. Все
типы предпочтений будут выбирать наиболее близкое решение,
удовлетворяющее выбранному типу предпочтения. PREFER_CLOSEST выберет
самое близкое решение без учета каких-либо других предпочтений.
PREFER_POSITIVE Ближайшее решение с положительным углом для управляющей оси. Это
предпочтение нельзя использовать, когда ABC является управляющей осью.
PREFER_NEGATIVE Ближайшее решение с отрицательным углом для управляющей оси. Это
предпочтение нельзя использовать, когда ABC является управляющей осью.
PREFER_CLW Закрывает решение, которое перемещается по часовой стрелке от текущего
положения оси. Это предпочтение нельзя использовать, когда ABC является
управляющей осью.
PREFER_CCW Закрывает решение, которое перемещается против часовой стрелки от текущего
положения оси. Это предпочтение нельзя использовать, когда ABC является
управляющей осью.
Предпочтительные типы решений

Функции ввода 4-106


Руководство по постпроцессору CAM 08.12.21
Управление параметрами Описание
ENABLE_NONE Отключает все параметры управления.
ENABLE_RESET уважаетперезагрузитьпараметр в определениях осей. ТоперезагрузитьПараметр
сбрасывает ось на 0 градусов перед вычислением ближайшего решения.
ENABLE_WCS Решает для оси вращения, перпендикулярной вектору шпинделя, как определено
ориентацией инструмента операции. Например, если ориентация инструмента
обращена вверх по Z и имеет вращение XY, то ось C будет использовать
ориентацию оси X вращения для определения положения оси C.
ВКЛЮЧИТЬ ВСЕ Включает все параметры управления.
Варианты управления для решения с осями вращения

Используйте ENABLE_WCS для инструмента, перпендикулярного поворотному столу

Координаты операции 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 и т. д., но может быть неверным для станков, которые не
поддерживают эти функции.

Функции ввода 4-107


Руководство по постпроцессору CAM 08.12.21
Тоsection.optimize3DPositionsByMachineФункция используется для расчета правильных координат, выровненных с
определенной конфигурацией машины для указанной операции.

раздел.оптимизировать 3DPositionsByMachine(machineConfiguration, abc, optimeType);


Отрегулируйте координаты для конфигурации станка для обработки 3+2

Аргументы Описание
конфигурация машины Активная конфигурация машины.
азбука Текущие положения оси вращения переданы как вектор.
ОптимизироватьТип Тип оптимизации, как описано в следующей таблице.
Аргументы Optimize3DPositionsByMachine

ОптимизироватьТип Описание
OPTIMIZE_NONE Координаты будут положением кончика инструмента (TCP).
OPTIMIZE_BOTH Координаты будут скорректированы для вращения стола и головы.
OPTIMIZE_TABLES Координаты будут скорректированы для поворотных столов.
OPTIMIZE_HEADS Координаты будут скорректированы для поворотных головок.
OPTIMIZE_AXIS Координаты будут скорректированы на основе настройки TCP для каждой оси,
как определено вcreateAxisкоманда.
Типы оптимизации для операций 3+2

Если позиции TCP выводятся в операции 3+2, вам необходимо убедиться, что TCP разрешен для этой
операции (G43.4, TRAORI и т. д.).

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

var abc = новый вектор (0, 0, 0);


//использовать 5-осевое индексирование для многоосевого режима

if (!is3D() || machineConfiguration.isMultiAxisConfiguration()) {
//
если (currentSection.isMultiAxis()) {
ForceWorkPlane();
отменитьПреобразование(); }
еще {
//использовать углы Эйлера для рабочей
плоскости если (useMultiAxisFeatures) {
var eulerXYZ = currentSection.workPlane.getEuler2(EULER_ZXZ_R); abc =
новый вектор (eulerXYZ.x, eulerXYZ.y, eulerXYZ.z);
отменитьПреобразование();
//использовать углы поворотных осей для рабочей

плоскости } еще {

abc = getWorkPlaneMachineABC (currentSection.workPlane, правда, правда);


}
//вывести рабочую плоскость
установитьВоркПлане (abc);

Функции ввода 4-108


Руководство по постпроцессору CAM 08.12.21
}
} else { // чистое 3D
оставшаяся переменная = currentSection.workPlane;
if (!isSameDirection(remaining.forward, новый вектор(0, 0, 1))) {
error(localize("Ориентация инструмента не поддерживается.");
возврат абв;
}
setRotation (осталось);
}
Расчеты рабочей плоскости

Вы должны знать, что направление оси X рабочей плоскости влияет на вычисление угла Эйлера. Типичный метод
определения рабочей плоскости заключается в том, чтобы ориентация оси X указывала в положительном направлении,
когда вы смотрите вниз по оси Z, но на некоторых станках типа «стол/стол» это приведет к тому, что обработка будет
выполняться на обратной стороне таблице, поэтому в этом случае вам нужно, чтобы ось X указывала в отрицательном
направлении.

ТоsetWorkPlaneФункция выполняет фактический вывод рабочей плоскости и может варьироваться от постпроцессора к


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

функция setWorkPlane (abc) {


если (is3D() && !machineConfiguration.isMultiAxisConfiguration()) {
возвращение;

//рабочая плоскость не меняется, не выводить ее


если (!((currentWorkPlaneABC == undefined) ||
abcFormat.areDifferent(abc.x, currentWorkPlaneABC.x) ||
abcFormat.areDifferent(abc.y, currentWorkPlaneABC.y) ||
abcFormat.areDifferent(abc.z, currentWorkPlaneABC.z)))
{ return; // без изменений
}

//разблокировать поворотные оси по команде


(COMMAND_UNLOCK_MULTI_AXIS);

//убрать инструмент
если (!убрано) {
написатьОтменить(Z);
}

// вывод с использованием углов


Эйлера если (useMultiAxisFeatures) {
отменитьРабочуюПлоскость();

Функции ввода 4-109


Руководство по постпроцессору CAM 08.12.21
//предварительная установка осей вращения

если (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)); // повернуть машину
}

//выходные положения оси вращения


} еще {
positionABC(abc, правда);
}

//блокировка поворотных осей по команде


(COMMAND_LOCK_MULTI_AXIS);
}
Выходная рабочая плоскость в функции setWorkPlane

4.3.6 Исходное положение


Исходное положение операции доступно дляonSectionфункция и выводится здесь. Компенсация длины
инструмента в системе управления активируется с начальным положением при смене инструмента или если она
была отключена между операциями.

//заставить все оси выводиться в начале операции


заставитьЛюбой();

//получить начальное положение инструмента и при необходимости отвести его по оси Z

var initialPosition = getFramePosition(currentSection.getInitialPosition());


если (!убрано) {
если (getCurrentPosition().z < initialPosition.z) {
writeBlock(gMotionModal.format(0), zOutput.format(initialPosition.z));
}
}

//вывод смещения длины инструмента при смене инструмента или если инструмент был отведен

Функции ввода 4-110


Руководство по постпроцессору CAM 08.12.21
if (insertToolCall || отозвано) {
var lengthOffset = инструмент.lengthOffset;
если (lengthOffset > numberOfToolSlots) {
error(localize("Смещение длины вне допустимого диапазона.");

возвращение;

gMotionModal.reset();
writeBlock(gPlaneModal.format(17));

//вывод XY, а затем Z с 3-осевой или настольной конфигурацией


если (!machineConfiguration.isHeadConfiguration()) {
написатьБлок(
gAbsIncModal.format(90),
gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y)
);
writeBlock(gMotionModal.format(0), gFormat.format(43), zOutput.format(initialPosition.z),
hFormat.format(lengthOffset));
//выход XYZ с конфигурацией головы }
еще {
написатьБлок(
gAbsIncModal.format(90),
gMotionModal.format(0),
gFormat.format(43), xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y),
zOutput.format(initialPosition.z), hFormat.format(lengthOffset)
);
}
//не активировать компенсацию длины инструмента, если она уже активирована }
еще {
написатьБлок(
gAbsIncModal.format(90),
gMotionModal.format(0),
xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y)
);
}
Вывод текущей позиции и компенсации длины инструмента

4.4 Раздел Объект


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

Функции ввода 4-111


Руководство по постпроцессору CAM 08.12.21
хранится в разделе. Вы найдете описание различныхразделфункции/переменные в других разделах данного
руководства, где они используются.

4.4.1 текущая секция


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

var firstSection = получитьРаздел(0); //получить доступ к первому разделу программы


var lastSection = getSection(getNumberOfSections() – 1) //получить доступ к последнему разделу программы
Доступ к первому и последнему разделам

4.4.2 получить раздел


значение = getSection (идентификатор раздела)

Аргументы Описание
идентификатор раздела Идентификатор возвращаемого раздела. sectionId может быть в диапазоне от 0 до
количества определенных разделов (getNumberOfSections).

Возвращает объект раздела, связанный с указанным идентификатором раздела.

4.4.3 получить число секций


значение = получитьЧислоСекций()

Возвращает количество разделов (операций), определенных в программе.

for (var i = 0; i < getNumberOfSections(); ++i) { //пройтись по всем разделам


var section = getSection(i);

Перебор всех определенных разделов

4.4.4 получить идентификатор

значение = section.getId()

Тополучить идентификаторФункция возвращает идентификатор предоставленного раздела. Он будет находиться в диапазоне от 0 до


количества определенных секций минус 1 (getNumberOfSections).

//цикл по разделам, определенным после текущего раздела


for (var i = currentSection.getId() + 1; i < numberOfSections; ++i) {
var section = getSection(i);
Перебор следующих разделов
Функции ввода 4-112
Руководство по постпроцессору CAM 08.12.21
4.4.5 isToolChangeNeeded
значение = isToolChangeNeeded (аргументы)

Аргументы Описание
аргументы Задает одну или несколько переменных объекта «Инструмент», которые следует использовать в
качестве критериев для определения необходимости замены инструмента. Этот список критериев
можнономер, описание,длинаСмещениеили любой другой член объекта Tool.

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

var insertToolCall = isToolChangeNeeded("число", "lengthOffset);


Определение необходимости смены инструмента для текущего участка на основе номера инструмента и смещения длины

4.4.6 isNewWorkPlane
значение = isNewWorkPlane ([раздел])

Аргументы Описание
раздел Указывает раздел для проверки изменения рабочей плоскости. Если раздел не
указан, тотекущий разделпредполагается.

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

var newWorkPlane = isNewWorkPlane();


Определение того, изменяется ли рабочая плоскость между сечениями

4.4.7 isProbeOperation
значение = isProbeOperation()

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

если (isProbeOperation()) { //проверить, является ли текущий раздел операцией зонда


if (section(i).getTool().type == TOOL_PROBE) { //зондирование или инспекционная операция
Определение того, является ли секция операцией зондирования

4.4.8 isInspectionOperation
значение = isInspectionOperation()

Функции ввода 4-113


Руководство по постпроцессору CAM 08.12.21
Возвращаетистинныйесли текущий раздел является операцией проверки, в противном случае вернутьложный.

если (isInspectionOperation()) { //проверить, является ли текущий раздел операцией проверки


if (section(i).getTool().type == TOOL_PROBE) { //указанный участок является зондирующей операцией
Определение того, является ли раздел операцией проверки

4.4.9 probeWorkOffset
значение = section.probeWorkOffset

ТозондWorkOffsetпеременная содержит номер WCS, который активен во время операции зондирования. Это то же
самое, что изонд-выход-рабочее смещениепараметр.

подтвердить(currentSectionprobeWorkOffset <= 6, "Angular Probing поддерживает только рабочие смещения 1-6.");


Проверка диапазона рабочего смещения датчика

4.4.10 GetNextTool
инструмент = getNextTool([аргументы])

ТоgetNextToolФункция возвращает следующий инструмент, используемый в программе, на основе активного инструмента в


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

var nextTool = getNextTool(); //получить следующий инструмент на основе номера инструмента

var nextTool = getNextTool("описание"); //получить следующий инструмент на основе описания инструмента


Доступ к следующему инструменту

4.4.11 GetFirstTool
инструмент = получитьПервыйИнструмент()

ТоgetFirstToolФункция возвращает первый инструмент, использованный в программе.

вар firstTool = getFirstTool();


Доступ к первому инструменту

4.4.12 инструментZRange
zRange = инструментZRange()

ТоинструментZRangeФункция возвращает диапазон оси Z для активного инструмента для текущего и последующих разделов, использующих
этот инструмент. Будет возвращено неопределенное значение, если ориентация инструмента активного сечения не совпадает с осью Z.

Функции ввода 4-114


Руководство по постпроцессору CAM 08.12.21
вар zRange = инструментZRange();
Вычислите минимум и максимум по оси Z для активных секций.

4.4.13 стратегия
значение = section.strategy;

Тостратегияпеременная является частьюразделобъект и содержит строку, представляющую стратегию


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

} else { // не выводить сглаживание для следующих операций


сглаживание.isAllowed = !(currentSection.strategy == "сверлить"));
}
Проверка операции сверления

4.4.14 контрольная группа


значение = section.checkGroup (список стратегий)

Аргументы Описание
список стратегий Список групп стратегий обработки для проверки, разделенных запятыми.

Функция checkGroup возвращает значение true, если стратегия обработки сечения принадлежит ко всем группам
стратегий, указанным всписок стратегий.Допустимые группы стратегий перечислены в следующей таблице. Каждая
из этих переменных должна иметь префикс STRATEGY_, например STRATEGY_2D.

2D 3D ДОБАВКА КОНТРОЛЬНАЯ ПОВЕРХНОСТЬ

ОТДЕЛКА ПРОДЕЛКА ОТВЕРСТИЙ ОСМОТР ДЖЕТ


БУРЕНИЕ ФРЕЗЕРОВАНИЕ МНОГООСЬ ЗОНДИРОВАНИЕ

ПОВОРОТНЫЙ ЧЕРНОВАЯ ОТБОР ПРОБ ВТОРИЧНЫЙ ШПИНДЕЛЬ


ПОВЕРХНОСТЬ НИТЬ ПРЕВРАЩЕНИЕ
Группы стратегий (с префиксом STRATEGY_)

} else { // не выводить сглаживание для следующих операций


сглаживание.isAllowed = !(currentSection.checkGroup(STRATEGY_DRILLING));
}
Проверка операции сверления

4.5 в конце раздела


функция onSectionEnd() {

Функции ввода 4-115


Руководство по постпроцессору CAM 08.12.21
ТоonSectionEndФункция может использоваться для определения конца операции, но в большинстве постпроцессоров это
обрабатывается вonSectionфункция. Причина этого в том, что разные выходные данные будут генерироваться в зависимости
от того, происходит ли смена инструмента, смена WCS или смена рабочей плоскости, и эта логика обрабатывается вonSection
функция (см.вставитьToolCallпеременная), хотя она может быть обработана вonSectionEnd функцию, если это необходимо,
ссылаясь наgetNextSectionиisLastSectionфункции.

var insertToolCall = isLastSection() ||


getNextSection().getForceToolChange && getNextSection().getForceToolChange() ||
(getNextSection().getTool().number != tool.number);

переменная убрана = ложь; // указывает, что инструмент отведен в безопасную плоскость


var newWorkOffset = isLastSection() ||
(currentSection.workOffset != getNextSection().workOffset); // изменения рабочего смещения
var newWorkPlane = isLastSection() ||
!isSameDirection(currentSection.getGlobalFinalToolAxis(),
getNextSection().getGlobalInitialToolAxis());

если (insertToolCall || newWorkOffset || newWorkPlane) {


// остановить шпиндель перед отводом во время смены
инструмента if (insertToolCall) {
по команде (COMMAND_STOP_SPINDLE);
}

// вернуться в безопасную

плоскость retracted = true;

writeBlock(gFormat.format(28), gAbsIncModal.format(91), "Z" + xyzFormat.format(0)); // отозвать


writeBlock(gAbsIncModal.format(90));
zВыход.сброс();
если (insertToolCall) {
по команде (COMMAND_COOLANT_OFF);

если (getProperty("необязательныйStop")) {
по команде (COMMAND_OPTIONAL_STOP);
}
}
}
Завершение операции в onSectionEnd

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

Одна из причин прекращения операции вonSectionEndфункция, если команда Manual NC


используется между операциями. Команда Manual NC будет обработана доonSectionфункции, и если
предыдущая операция завершается вonSection, то команда Manual NC будет активирована до
завершения предыдущей операции.

Функции ввода 4-116


Руководство по постпроцессору CAM 08.12.21
ТоonSectionEndВ большинстве сообщений функция довольно проста и сбрасывает коды, которые могли быть
изменены в ходе операции, и, возможно, некоторые переменные, зависящие от операции.

функция onSectionEnd() {
writeBlock(gPlaneModal.format(17));
заставитьЛюбой();
}
Базовая функция onSectionEnd

4.6 при закрытии

функция при закрытии() {

Топри закрытиифункция вызывается в конце последней операции, послеonSectionEnd. Он используется для


определения конца операции, если не обрабатывается вonSectionEnd, и для вывода кодов конца программы.

функция при закрытии() {


// завершаем предыдущую

операцию написать("");

необязательный раздел = ложь;

по команде (COMMAND_COOLANT_OFF);

написатьОтменить(Z); // убрать
disableLengthCompensation(true); установить
сглаживание (ложь);
zВыход.сброс();
setWorkPlane (новый вектор (0, 0, 0)); // сброс рабочей плоскости
writeRetract(X, Y); // возвращаться домой

// вывод кодов конца программы по неявной команде (COMMAND_END);


onImpliedCommand (COMMAND_STOP_SPINDLE); writeBlock(mFormat.format(30)); //
остановка программы, остановка шпинделя, отключение СОЖ writeln("%");

}
Базовая функция onClose

4.7 при завершении


функция onTerminate() {

ТоonTerminateфункция вызывается в конце постобработки, послепри закрытии. Он вызывается после завершения всего
вывода в файл ЧПУ и закрытия файла ЧПУ. Его можно использовать для переименования выходных файлов.

Функции ввода 4-117


Руководство по постпроцессору CAM 08.12.21
после завершения обработки, чтобы автоматически создать лист наладки или запустить другую программу для выходного
файла ЧПУ.

функция 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 имя_программы \"'" + имя_программы + "'\"";
}
если (комментарий к программе) {

a += " --property programComment \"'" + programComment + "'\"";


}
a += " --property имя_файла_программы \"'" + имя_файла_программы + "'\""; a += "
--property Размер программы \"" + Размер программы + "\"";
a += " --noeditor --log temp.log \"" + postPath + "\" \"" + middlePath + "\" \"" +
FileSystem.replaceExtension(outputPath, "xlsx") +
"\"";выполнить(getPostProcessorPath(), a, false, "");
executeNoWait("excel", "\"" + FileSystem.replaceExtension(outputPath, "xlsx") + "\"", false, "");
}
Создание и отображение листа настройки из onTerminate

4.8 по команде
функция onCommand (команда) {

Аргументы Описание
команда Команда для обработки.

Топо командеФункция может быть вызвана командой Manual NC, непосредственно из HSM или из
постпроцессора.

Команда Описание
COMMAND_ACTIVATE_SPEED_FEED_SYNCHRONIZATION Активировать режим многопоточности
COMMAND_ALARM Тревога
COMMAND_ALERT Тревога
COMMAND_BREAK_CONTROL Контроль поломки инструмента

COMMAND_CALIBRATE Запустить цикл калибровки


COMMAN_CHANGE_PALLET Сменить поддон
COMMAND_CLEAN Запустить цикл очистки
COMMAND_CLOSE_DOOR Закрыть главную дверь
COMMAND_COOLANT_OFF Отключение охлаждающей жидкости (M09)

Функции ввода 4-118


Руководство по постпроцессору CAM 08.12.21
Команда Описание
COMMAND_COOLANT_ON Охлаждающая жидкость включена (M08)

COMMAND_DEACTIVATE_SPEED_FEED_SYNCHRONIZATION Деактивировать режим многопоточности


КОМАНДА_END Конец программы (M02)
COMMAND_EXACT_STOP Точная остановка

COMMAND_LOAD_TOOL Смена инструмента (M06)


COMMAND_LOCK_MULTI_AXIS Блокирует поворотные оси
COMMAND_MAIN_CHUCK_CLOSE Закрыть главный патрон
COMMAND_MAIN_CHUCK_OPEN Открытый главный патрон
КОМАНДА_ОТКРЫТЬ_ДВЕРЬ Открыть главную дверь
COMMAND_OPTIONAL_STOP Дополнительный останов программы (M01)
COMMAND_ORIENTATE_SPINDLE Ориентация шпинделя (M19)
COMMAND_POWER_OFF Выключение
COMMAND_POWER_ON Включить
COMMAND_SECONDARY_CHUCK_CLOSE Закрыть вторичный патрон
COMMAND_SECONDARY_CHUCK_OPEN Открытый вторичный патрон
COMMAND_SECONDARY_SPINDLE_SYNCHRONIZATION_ACTIVATE Активировать синхронизацию шпинделя
COMMAND_SECONDARY_SPINDLE_SYNCHRONIZATION_DEACTIVATE Отключить синхронизацию шпинделя
COMMAND_SPINDLE_ЧАСОВАЯ СТРЕЛКА Направление шпинделя по часовой стрелке (M03)
COMMAND_SPINDLE_ПРОТИВ ЧАСОВОЙ СТРЕЛКИ Направление шпинделя против часовой стрелки
(M04)
COMMAND_START_CHIP_ТРАНСПОРТ Пуск конвейера для стружки
COMMAND_START_SPINDLE Запустить шпиндель в предыдущем направлении
COMMAND_STOP Останов программы (M00)
COMMAND_STOP_CHIP_TRANSPORT Останов конвейера для стружки

COMMAND_STOP_SPINDLE Останов шпинделя (M05)


COMMAND_TOOL_MEASURE Инструмент измерения

COMMAND_UNLOCK_MULTI_AXIS Разблокирует поворотные оси


COMMAND_VERIFY Проверка целостности пути/инструмента/машины

Допустимые команды

Команды ручного ЧПУ, вызывающиепо командеописаны вРучные команды ЧПУглава. Внутренние звонки напо
командеобычно генерируются при расширении цикла. Постпроцессор сам вызоветпо команденепосредственно
для выполнения простых функций, таких как вывод остановки программы, отмена СОЖ, открытие главной
дверцы, включение конвейера для стружки и т. д.

// остановить шпиндель и отменить подачу СОЖ перед отводом во время смены


инструмента if (insertToolCall && !isFirstSection()) {
по команде (COMMAND_COOLANT_OFF);
по команде (COMMAND_STOP_SPINDLE);
}
Вызов onCommand напрямую из постпроцессора

Функции ввода 4-119


Руководство по постпроцессору CAM 08.12.21
ТоonImpliedCommandфункция изменяет состояние определенных настроек в почтовом движке без
вызова по командеи вывод связанных кодов с командой. Состояние определенных параметров важно,
когда механизм постпроцессора расширяет циклы.

по неявной команде (COMMAND_END); onImpliedCommand (COMMAND_STOP_SPINDLE);


onImpliedCommand(COMMAND_COOLANT_OFF); writeBlock(mFormat.format(30));//
программа остановки, остановка шпинделя, отключение охлаждающей жидкости

Использование onImpliedCommand

4.9 Комментарий
функция onComment(сообщение) {

Аргументы Описание
сообщение Текст комментария для вывода.

ТоonCommentфункция вызывается, когда команда Manual NCКомментарийвыпущен. Он


отформатирует и выведет текст комментария в файл ЧПУ.

Комментарий к NC-команде

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

var AllowedCommentChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,=_-";


Определение разрешенных символов для комментариев

/** Форматирование комментария */

Функции ввода 4-120


Руководство по постпроцессору CAM 08.12.21
формат функцииКомментарий(текст) {
return "(" + filterText(String(text).toUpperCase(), AllowCommentChars).replace(/[\(\)]/g, "") + ")";

/** Вывод комментария */


функция writeComment(текст) {
writeln(formatComment(текст));
}

/** Обработка команды Комментарий ЧПУ вручную */


функция onComment(сообщение) {
var comments = String(сообщение).split(";");//разрешить несколько строк комментариев на команду для
(напишите в комментариях) {
написатьКомментарий(комментарии[комментарий]);

}
}
Функции комментариев

4.10 при задержке


функция onDwell (секунды) {

Аргументы Описание
секунды Время выдержки в секундах.

ТоonDwellФункция может быть вызвана командой Manual NC, непосредственно из HSM или из
постпроцессора. Команда Manual NC, которая вызываетonDwellописан вРучные команды ЧПУ глава.
Внутренние звонки наonDwellобычно генерируются при расширении цикла. Постпроцессор сам вызовет
onDwellнепосредственно для вывода блока задержки.

функция onDwell (секунды) {


если (секунд > 99999,999) {
warning(localize("Время пребывания вне диапазона.");
}
миллисекунды = зажим (1, секунды * 1000, 99999999);
writeBlock(gFeedModeModal.format(94), gFormat.format(4), "P" +
миллиФормат.формат(миллисекунды));
}
Выведите время задержки в миллисекундах

по команде (COMMAND_COOLANT_ON); при задержке (1.0);//задержка 1


секунда после включения охлаждающей жидкости
Вызов onDwell непосредственно из постпроцессора

Функции ввода 4-121


Руководство по постпроцессору CAM 08.12.21
4.11 по параметру
функция onParameter (имя, значение) {

Аргументы Описание
название Имя параметра.
ценность Значение, сохраненное в параметре.

Почти все параметры, используемые для создания операции обработки в HSM, передаются в постпроцессор. Общие
параметры доступны с использованием встроенных переменных постпроцессора (currentSection, tool, cycle и т. д.), а
также доступны в качестве параметров. Остальные параметры передаются вonParameter функция.

74: onParameter('операция:контекст', 'операция') 75:


onParameter('операция:стратегия', 'отработка')
76: onParameter('операция:описание_операции', 'Сверло') 77:
onParameter('операция:тип_инструмента', 'коснитесь правой
рукой') 78: onParameter('операция:подрезка', 0)
79: onParameter('операция:tool_isTurning', 0) 80:
onParameter('операция:tool_isMill', 0) 81:
onParameter('операция:tool_isDrill', 1)
82: onParameter('операция:tool_taperedType', 'tapered_bull_nose') 83:
onParameter('операция:tool_unit', 'дюймы')
84: onParameter('операция:tool_number', 4) 85:
onParameter('операция:tool_diameterOffset', 4) 86:
onParameter('операция:tool_lengthOffset', 4)
Примеры параметров, переданных в функцию onParameter из постпроцессора дампа

Имя параметра вместе с его значением передается вonParameterфункция. Некоторые команды


ручного ЧПУ вызываютonParameterфункции, они описаны вРучные команды ЧПУ глава. Вы
можете увидеть, как запустить и проанализировать вывод издамп.cpsпостпроцессор в. Отладка
глава.

функция onParameter (имя, значение) {


переключатель (имя) {

кейс "заметки о работе":

если (!firstNote) {
writeNotes(значение, правда);
}
первое примечание = ложь;

ломать;
}
}
Пример функции onParameter

Функции ввода 4-122


Руководство по постпроцессору CAM 08.12.21
4.11.1 Функция getParameter
значение = получитьпараметр (имя [, по умолчанию])

Аргументы Описание
название Имя параметра.
дефолт Возвращаемое значение, если запрошенный параметр не определен. Еслидефолт
значение не указано и параметр не определен, тонеопределенныйвозвращается.

Вы можете получить параметры операции в любом месте постпроцессора, вызвав функциюполучитьпараметр


функция. Параметры операции определяются как параметры, которые переопределяются для каждой операции
обработки. Существует вероятность того, что параметр не существует, поэтому рекомендуется проверить параметр,
либо указав значение по умолчанию вполучитьпараметрвызова или с помощью функции hasParameter.

переменный комментарий =получитьпараметр("операция-комментарий", ""); //получить значение параметра


если (комментарий) {
написать комментарий (комментарий);

}
Проверка существования параметра с помощью функции getParameter

если (имеет параметр("операция-комментарий")) { //проверить существование параметра


переменный комментарий =получитьпараметр("операция-комментарий"); //получить значение параметра если

(комментарий) {

написать комментарий (комментарий);

}
}
Проверка существования параметра с помощью функции hasParameter

При просмотре операций в промежуточном файле можно получить доступ к параметрам этой операции,
используя вариант раздела файлаимеет параметриполучитьпараметрфункции.

// выводим все комментарии к


операции writeln("Список операций:");
for (var i = 0; i < getNumberOfSections(); ++i) {
var section = getSection(i);
переменный комментарий =section.getParameter("операция-комментарий", ""); если
(комментарий) {
writeln(" " + комментарий);
}
}
написать("");
Использование варианта раздела getParameter

Функции ввода 4-123


Руководство по постпроцессору CAM 08.12.21
4.11.2 Функция getGlobalParameter
значение = getGlobalParameter (имя [, по умолчанию]))

Аргументы Описание
название Имя параметра.
дефолт Возвращаемое значение, если запрошенный параметр не определен. Еслидефолт
значение не указано и параметр не определен, тонеопределенныйвозвращается.

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

- 1: при открытии()

0: onParameter('идентификатор продукта', 'fusion360')


1: onParameter («создано», «Fusion 360 CAM 2.0.3803»)
2: onParameter('сгенерировано-в', 'Суббота, 24 марта 2018 г., 16:34:36') 3:
onParameter('имя хоста', 'хост')
4: onParameter('имя пользователя', 'пользователь')

5: onParameter('путь-документа', 'Вода-лазер-плазма v2') 6:


onParameter('лиды-поддерживаются', 1)
7: onParameter('описание задания', 'Лазер')
9: onParameter('stock', '((0, 0, -5), (300, 200, 0))') 11:
onParameter('stock-lower-x', 0)
13: onParameter('stock-lower-y', 0) 15:
onParameter('stock-lower-z', -5) 17:
onParameter('stock-upper-x', 300) 19:
onParameter('stock- верхний-y', 200) 21:
onParameter('stock-upper-z', 0) 23:
onParameter('part-lower-x', 0) 25:
onParameter('part-lower-y', 0) 27 :
onParameter('часть-нижняя-z', -5) 29:
onParameter('часть-верхняя-x', 300) 31:
onParameter('часть-верхняя-y', 200) 33:
onParameter('часть-верхняя -z', 0) 35:
onParameter('примечания', '')
Пример глобальных переменных

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

функция onParameter (имя, значение) {


если (имя == "описание работы") {

Функции ввода 4-124


Руководство по постпроцессору CAM 08.12.21
имя_установки = значение;
}
}
Использование onParameter для сохранения имени активной установки

4.12 при сквозной передаче


Функция onPassThrough (значение)

Аргументы Описание
ценность Текст для вывода в файл ЧПУ.

ТоonPassThroughфункция вызываетсяПройти черезКоманда Manual NC и используется для передачи


текстовой строки непосредственно в файл NC без какой-либо обработки постпроцессором. Эта функция
описана в главе «Ручные команды ЧПУ».

4.13 на скорости шпинделя


функция onSpindleSpeed (скорость) {

Аргументы Описание
скорость вращения шпинделя Новая скорость шпинделя в об/мин.

ТоonSpindleSpeedФункция используется для вывода изменений скорости шпинделя во время операции, как
правило, из механизма постпроцессора при расширении цикла.

функция onSpindleSpeed (SpindleSpeed) {


writeBlock(sOutput.format(spindleSpeed));
}
Пример функции SpindleSpeed

4.14 Ориентация шпинделя


функция onOrientateSpindle (угол) {

Аргументы Описание
угол Угол ориентации шпинделя в радианах.

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


расширяется,по команде (COMMAND_ORIENTATE_SPINDLE)вызывается функция.

4.15 Компенсация радиуса


функция onRadiusCompensation() {

Функции ввода 4-125


Руководство по постпроцессору CAM 08.12.21
ТоonRadiusCompensationФункция вызывается при изменении режима компенсации радиуса (резца). Обычно он
устанавливает ожидающий режим компенсации, который будет обрабатываться в функциях движения.
(onRapid,onLinear,onCircular, и т.д.). Компенсация радиуса, если она включена в операции, будет
включена при приближении к детали и отключена после удаления детали.

Состояние компенсации радиуса сохраняется в глобальномрадиусКомпенсацияпеременная и не передается в


функцию onRadiusCompensation. Компенсация радиуса определяется при создании операции обработки в HSM
(1). Параметр «Боковая компенсация» (2) определяет сторону детали, на которой будет находиться инструмент
при резке. Он основан на прямом направлении инструмента во время операции резания.

Включение/отключение компенсации радиуса

Тип компенсации Описание


В компьютере Инструмент смещается от детали на основе диаметра инструмента. Центральная
линия инструмента смещения отправляется в постпроцессор, а режим компенсации
радиуса выключен (G40).
Под контролем Инструмент не смещается от детали. Осевая линия инструмента, как будто он
находится на детали, отправляется в постпроцессор, а режим компенсации радиуса
определяется настройкой компенсации в боковом направлении (G41/G42). Система
управления выполнит полное смещение инструмента.
Носить Инструмент смещается от детали на основе диаметра инструмента.
Центральная линия инструмента смещения отправляется в постпроцессор, а
режим компенсации радиуса определяется настройкой боковой компенсации
(G41/G42). Система управления компенсирует износ инструмента.
Обратный износ То же, что и износ, но будет использоваться противоположное направление компенсации
(G42/G41).

Выключенный Инструмент не смещается от детали. Осевая линия инструмента, как если бы он


был на детали, отправляется в постпроцессор, и режим компенсации радиуса
отключается (G40).
Режимы компенсации радиуса

Функции ввода 4-126


Руководство по постпроцессору CAM 08.12.21
var pendingRadiusCompensation = -1;

функция onRadiusCompensation() {
ожидающая компенсация радиуса = компенсация радиуса;
}
Пример функции onRadiusCompensation

4.16 о движении
функция onMovement (движение) {

Аргументы Описание
движение Тип движения для следующего движения.

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

Поддерживаемые типы движения перечислены в следующей таблице.

Тип движения Описание


MOVEMENT_CUTTING Стандартное режущее движение.

MOVEMENT_EXTENDED Расширенный тип движения. Необычно.


MOVEMENT_FINISH_CUTTING Завершите режущее движение.

MOVEMENT_HIGH_FEED Движение с высокой скоростью подачи. Обычно не используется. Вывод быстрых

перемещений с использованием линейного перемещения с высокой скоростью подачи

будет использовать тип MOVEMENT_RAPID.

MOVEMENT_LEAD_IN Ведущее движение.


MOVEMENT_LEAD_OUT Выводящее движение.

MOVEMENT_LINK_DIRECT Направленный (нережущий) связующий ход.


MOVEMENT_LINK_TRANSITION Переходный (разрезной) связующий ход.
MOVEMENT_PLUNGE Погружной ход.
MOVEMENT_PREDDRILL Предварительное движение.

MOVEMENT_RAMP Ускоренное входное движение.

MOVEMENT_RAMP_HELIX Спиралевидное линейное движение.

MOVEMENT_RAMP_PROFILE Наклонное движение профиля.

MOVEMEN_RAMP_ZIG_ZAG Зигзагообразное линейное движение.

MOVEMENT_RAPID Быстрое движение.


MOVEMENT_REDUCED Уменьшенное режущее движение.
Типы движения

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

Функции ввода 4-127


Руководство по постпроцессору CAM 08.12.21
4.17 на Рапиде
функция onRapid(_x, _y, _z) {

Аргументы Описание
_х, _у, _з Положение инструмента.

ТоonRapidФункция обрабатывает быстрые перемещения позиционирования (G00) в 3-осевом режиме. Положение


инструмента передается как_х, _у, _zаргументы. Формат функции onRapid довольно простой, он будет обрабатывать
изменение компенсации радиуса, может определять, должны ли быстрые перемещения выводиться с высокой скоростью
подачи (из-за того, что станок совершает изгибы в ускоренном режиме), и выводит быстрые перемещения. перейти к файлу
NC.

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

Использование высоких скоростей подачи для перемещений позиционирования

функция onRapid(_x, _y, _z) {


// форматируем положение инструмента
для вывода вар х = xOutput.format(_x); var y
= yOutput.format(_y); переменная z =
zOutput.format(_z);

// игнорировать, если инструмент не двигается

если (х || у || г) {

если (ожидание компенсации радиуса >= 0) {//компенсация радиуса ручки


error(localize("Режим компенсации радиуса не может быть изменен при быстром перемещении.");
возвращение;
}

// выходное перемещение с высокой скоростью подачи, если движение осуществляется более чем по одной оси

Функции ввода 4-128


Руководство по постпроцессору CAM 08.12.21
if (!getProperty("useG0") && (((x ? 1 : 0) + (y ? 1 : 0) + (z ? 1 : 0)) > 1)) {
writeBlock(gFeedModeModal.format(94), gMotionModal.format(1), x, y, z,
получить фид (высокая скорость подачи));

// выходной ход в быстром режиме


} еще {
writeBlock(gMotionModal.format(0), x, y, z);
принудительная подача();
}
}
}
Пример onRapid Function

4.18 вызыватьOnRapid
вызыватьOnRapid(x, y, z);

Аргументы Описание
х, у, г Положение инструмента.

Возможно, постпроцессору потребуется генерировать быстрые перемещения позиционирования во время обработки


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

4.19 на линейном
функция onLinear(_x, _y, _z, подача) {

Аргументы Описание
_х, _у, _з Положение инструмента.

подача Скорость подачи.

ТоonLinearФункция обрабатывает линейные перемещения (G01) со скоростью подачи в 3-осевом режиме. Положение
инструмента передается как_х, _у, _zаргументы. ФорматonLinearФункция довольно проста, она обрабатывает
изменение компенсации радиуса и выводит линейное перемещение в файл ЧПУ.

функция onLinear(_x, _y, _z, подача) {


// принудительное перемещение при изменении компенсации
радиуса если (ожидание компенсации радиуса >= 0) {
xOutput.reset();
yВыход.сброс();
}

Функции ввода 4-129


Руководство по постпроцессору CAM 08.12.21
// форматируем положение инструмента
для вывода вар х = xOutput.format(_x); var y
= yOutput.format(_y); переменная z =
zOutput.format(_z); var f = getFeed (канал);

// игнорировать, если инструмент не двигается

если (х || у || г) {

// обработка изменений компенсации радиуса


если (ожидание компенсации радиуса >= 0) {
ожидающая компенсация радиуса =
-1; var d = tool.diameterOffset;
если (d > 200) {
warning(localize("Смещение диаметра превышает максимальное значение."));
}
writeBlock(gPlaneModal.format(17));
переключатель (компенсация радиуса) {
случай RADIUS_COMPENSATION_LEFT:
dВыход.сброс();
writeBlock(gFeedModeModal.format(94), gMotionModal.format(1), gFormat.format(41), x, y, z,
dOutput.format(d), f);
ломать;
случай RADIUS_COMPENSATION_RIGHT:
dВыход.сброс();
writeBlock(gFeedModeModal.format(94), gMotionModal.format(1), gFormat.format(42), x, y, z,
dOutput.format(d), f);
ломать;
дефолт:
writeBlock(gFeedModeModal.format(94), gMotionModal.format(1), gFormat.format(40), x, y, z,
ж);
}
// выходное изменение без компенсации, перемещение со скоростью подачи

} еще {

writeBlock(gFeedModeModal.format(94), gMotionModal.format(1), x, y, z, f);


}
// движения нет, но скорость подачи меняется }
иначе если (е) {
если (getNextRecord().isMotion()) {//старайтесь не выводить ленту без движения
принудительная подача(); // принудительная подача на следующую

строку } else {

writeBlock(gFeedModeModal.format(94), gMotionModal.format(1), f);


}
}
}
Пример линейной функции

Функции ввода 4-130


Руководство по постпроцессору CAM 08.12.21
4.20 вызыватьOnLinear
invokeOnLinear(x, y, z, подача);

Аргументы Описание
х, у, г Положение инструмента.

подача Скорость подачи.

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

4.21 на Rapid5D
функция onRapid5D(_x, _y, _z, _a, _b, _c) {

Аргументы Описание
_х, _у, _з Положение инструмента.

_а, _б, _в Углы поворота, если конфигурация станка была определена, в противном случае передается
вектор оси инструмента.

ТонаRapid5DФункция обрабатывает быстрые перемещения позиционирования (G00) в многоосевых операциях. Положение


инструмента передается как_х, _у, _zаргументы и углы поворота в качестве_а, _б, _варгументы. Если конфигурация машины не была
определена, то_а, _б, _всодержит вектор оси инструмента. То наRapid5DФункция будет вызываться для всех быстрых перемещений в
многоосевой операции, даже если перемещение представляет собой только линейное перемещение по 3 осям без вращательного
движения.

СловноonRapidфункция,наRapid5DФункция обрабатывает изменение компенсации радиуса, может определять, должны


ли быстрые перемещения выводиться с высокой скоростью подачи (из-за того, что станок совершает изгибы в
ускоренном режиме), и выводит быстрое перемещение в файл ЧПУ.

функция onRapid5D(_x, _y, _z, _a, _b, _c) {


// включить этот код, если станок не принимает ввод вектора оси инструмента IJK
если (ложь) {
если (!currentSection.isOptimizedForMachine()) {
error(localize("Эта конфигурация поста не была настроена для 5-осевой траектории."));
возвращение;
}
}

// обработка изменений компенсации радиуса


если (ожидание компенсации радиуса >= 0) {
error(localize("Режим компенсации радиуса не может быть изменен при быстром перемещении.");
возвращение;

Функции ввода 4-131


Руководство по постпроцессору CAM 08.12.21
}

// Конфигурация станка определена, углы поворота выводятся с перемещением


если (currentSection.isOptimizedForMachine()) {
вар х = 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); writeBlock(gMotionModal.format(0),
x, y, z, a, b, c);

// Конфигурация станка не определена, вывод оси инструмента с перемещением }


еще {
силаXYZ();
вар х = xOutput.format(_x); var y = yOutput.format(_y); переменная z =
zOutput.format(_z); переменная i = ijkFormat.format(_a); var j =
ijkFormat.format(_b); var k = ijkFormat.format(_c);
writeBlock(gMotionModal.format(0), x, y, z, "I" + i, "J" + j, "K" + k);

}
принудительная подача();

}
Пример функции Rapid5D

Пожалуйста, обратитесь кМногоосевые постпроцессорыглаву для подробного объяснения поддержки многоосевого


станка.

4.22 вызыватьOnRapid5D
invokeOnRapid5D(x, y, z, a, b, c);

Аргументы Описание
х, у, г Положение инструмента.

а, б, в Углы поворота, если конфигурация станка была определена, в противном случае передается
вектор оси инструмента.

Возможно, постпроцессору потребуется генерировать многоосевые быстрые перемещения позиционирования во время


обработки промежуточного файла. Примером может служить обработка процедуры отзыва/реконфигурации. Вместо того,
чтобы звонитьнаRapid5Dс пост-сгенерированными ходами рекомендуется вызыватьOnRapid5Dбыть вызван вместо этого.
Это гарантирует, что почтовый движок будет уведомлен о перемещении и будет установлена текущая позиция.
вызыватьOnRapid5Dзатем позвонитнаRapid5Dс приведенными аргументами.

Функции ввода 4-132


Руководство по постпроцессору CAM 08.12.21
4.23 на Linear5D
функция onLinear5D (_x, _y, _z, _a, _b, _c, подача, подачаMode) {

Аргументы Описание
_х, _у, _з Положение инструмента.

_а, _б, _в Углы поворота, если конфигурация станка была определена, в противном случае передается
вектор оси инструмента.
подача Значение скорости подачи, рассчитанное для режима многоосевой подачи.
режим подачи Активный режим многоосевой подачи Это может быть
FEED_FPM, FEED_INVERSE_TIME или FEED_DPM.

ТоonLinear5DФункция обрабатывает режущие движения (G01) в многоосевых операциях. Положение инструмента


передается как_х, _у, _zаргументы и углы поворота в качестве_а, _б, _варгументы. Если конфигурация машины не была
определена, то_а, _б, _всодержит вектор оси инструмента. ТоonLinear5D Функция будет вызываться для всех режущих
движений в многоосевой операции, даже если перемещение представляет собой только линейное перемещение по 3 осям
без вращательного движения.

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

СловноonLinearфункция,onLinear5DФункция обрабатывает изменение компенсации радиуса и


выводит резание в файл ЧПУ.

функция onLinear5D (_x, _y, _z, _a, _b, _c, подача, подачаMode) {
// включить этот код, если станок не принимает ввод вектора оси инструмента IJK
если (ложь) {
если (!currentSection.isOptimizedForMachine()) {
error(localize("Эта конфигурация поста не была настроена для 5-осевой траектории."));
возвращение;
}
}

// обработка изменений компенсации радиуса


если (ожидание компенсации радиуса >= 0) {
error(localize("Компенсация радиуса не может быть активирована/деактивирована для перемещения по 5 осям."));
возвращение;
}

// Конфигурация станка определена, углы поворота выводятся с перемещением


если (currentSection.isOptimizedForMachine()) {
вар х = xOutput.format(_x); var y =
yOutput.format(_y); переменная z =
zOutput.format(_z);

Функции ввода 4-133


Руководство по постпроцессору CAM 08.12.21
var a = aOutput.format(_a);
вар б = bOutput.format(_b);
var c = cOutput.format(_c);

// получаем число подачи


если (feedMode == FEED_INVERSE_TIME) {
feedOutput.reset();
}
var fMode = feedMode == FEED_INVERSE_TIME ? 93 : 94;
var f = feedMode == FEED_INVERSE_TIME ? inverseTimeOutput.format(лента):
feedOutput.format(лента); //
игнорировать, если инструмент не
двигается если (x || y || z || a || b || c) {
writeBlock(gFeedModeModal.format(fMode), gMotionModal.format(1), x, y, z, a, b, c, f); } иначе
если (е) {
if (getNextRecord().isMotion()) { // стараемся не выводить ленту без движения
принудительная подача(); // принудительная подача на следующую

строку } else {

writeBlock(gFeedModeModal.format(fMode), gMotionModal.format(1), f);


}
}

// Конфигурация станка не определена, вывод оси инструмента с перемещением }


еще {
силаXYZ();
вар х = xOutput.format(_x); var y =
yOutput.format(_y); переменная z
= zOutput.format(_z); переменная i
= ijkFormat.format(_a); var j =
ijkFormat.format(_b); var k =
ijkFormat.format(_c); var f =
getFeed (канал);

// игнорировать, если инструмент не двигается

если (x || y || z || i || j || k) {

writeBlock(gMotionModal.format(1), x, y, z, "I" + i, "J" + j, "K" + k, f); } иначе


если (е) {
if (getNextRecord().isMotion()) { // стараемся не выводить ленту без движения
принудительная подача(); // принудительная подача на следующую

строку } else {

writeBlock(gMotionModal.format(1), f);
}
}
}
}
Пример функции Linear5D

Функции ввода 4-134


Руководство по постпроцессору CAM 08.12.21
Пожалуйста, обратитесь кМногоосевые постпроцессорыглаву для подробного объяснения поддержки многоосевого
станка.

4.24 вызыватьOnLinear5D
invokeOnLinear5D(x, y, z, a, b, c, подача);

Аргументы Описание
х, у, г Положение инструмента.

а, б, в Углы поворота, если конфигурация станка была определена, в противном случае передается
вектор оси инструмента.
подача Скорость подачи.

Возможно, постпроцессору потребуется генерировать многоосевые режущие движения во время обработки


промежуточного файла. Примером может служить обработка процедуры отзыва/реконфигурации. Вместо того, чтобы
звонитьonLinear5Dс пост-сгенерированными ходами рекомендуетсявызыватьOnLinear5Dбыть вызван вместо этого.
Это гарантирует, что почтовый движок будет уведомлен о перемещении и будет установлена текущая позиция.
вызыватьOnLinear5Dзатем позвонитonLinear5Dс приведенными аргументами.

Пост-движок рассчитает правильное значение скорости подачи и режим перед вызовомonLinear5D.

4.25 по Циркуляру
функция onCircular (по часовой стрелке, cx, cy, cz, x, y, z, подача) {

Аргумент Описание
по часовой стрелке Установлен вистинныйесли круговое направление находится в направлении по часовой стрелке,ложныйесли

против часовой стрелки.

сх, су, сч Координаты центра окружности.


х, у, г Конечная точка на круге
подача Скорость подачи.

ТоonCircularФункция вызывается всякий раз, когда есть круговое, винтовое или спиральное движение. Круговое движение
может выполняться в любой из 3 стандартных плоскостей: XY-плоскости, YZ-плоскости или ZX-плоскости, это зависит от
onCircularФункция для определения того, какие типы циркулярных писем допустимы для машины, и для правильного
форматирования вывода.

СтруктураonCircularФункция в большинстве сообщений использует следующий макет.

1. Проверьте компенсацию радиуса. Большинство элементов управления не позволяют запускать компенсацию радиуса при
движении по кругу.
2. Выход полного круга.
3. Выход центральной точки (IJK).
4. Вывод радиуса.
Функции ввода 4-135
Руководство по постпроцессору CAM 08.12.21
Каждый из различных стилей вывода будет индивидуально обрабатывать вывод круговой интерполяции в каждой из плоскостей и,
возможно, трехмерной круговой интерполяции, если она поддерживается.

если (ожидание компенсации радиуса >= 0) {//Запретить компенсацию радиуса


error(localize("Компенсация радиуса не может быть активирована/деактивирована для кругового перемещения."));
возвращение;
}

если (полныйкруг()) {//Полные круги на 360 градусов
if (getProperty("useRadius") || isHelical()) { // режим радиуса не поддерживает полные дуги
линеаризовать (допуск);
возвращение;

}

} иначе если (!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(канал )); ломать;

по умолчанию: // круговая запись не в основной плоскости


линеаризовать (допуск);

Функции ввода 4-136


Руководство по постпроцессору CAM 08.12.21
}
Круговой вывод на основе плоскости

4.25.1 Настройки круговой интерполяции


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

Параметр Описание
разрешенокруговыеплоскости Определяет стандартные плоскости, в которых разрешена круговая интерполяция,
PLANE_XY, PLANE_YZ, PLANE_ZX. Его можно установить нанеопределенныйчтобы
разрешить круговую интерполяцию во всех трех плоскостях, 0, чтобы отключить
круговую интерполяцию, или битовую маску PLANE_XY, PLANE_YZ и/или PLANE_YZ, чтобы
разрешить только определенные плоскости.
разрешить HelicalMoves Спиральная интерполяция разрешена, если для этой переменной установлено значениеистинный. Спиральные движения

линеаризуются, если установлено значениеложный.

разрешитьSpiralMoves Спиральная интерполяция определяется как круговые движения, начальный радиус которых

отличается от конечного радиуса, и ее можно включить, установив для этой переменной значение

истинный. Спиральные движения линеаризуются, если установлено значениеложный.

максимальныйкруговойрадиус Задает максимальный радиус круговых перемещений, который может быть выведен как
круговая интерполяция и может динамически изменяться в таблице свойств при запуске
постпроцессора. Любые круговые записи, радиус которых превышает это значение,
будут линеаризованы. Эта переменная должна быть установлена в миллиметрах (MM).

максимальный круговой радиус = пространственный (1000, мм); // 39,37 дюйма

максимальная круговая развертка Определяет максимальный угловой размах круговых перемещений, который может быть
выведен как круговая интерполяция, и указывается в радианах. Любые круговые записи,
дельта-угол которых превышает это значение, будут линеаризованы.
минимальная длина хорды Определяет минимальное дельта-движение, допустимое для круговой интерполяции, и
может динамически изменяться в таблице свойств при запуске постпроцессора. Любые
циклические записи, дельта-линейное движение которых меньше этого значения, будут
линеаризованы. Эта переменная должна быть установлена в миллиметрах (MM).

минимальныйкруговойрадиус Задает минимальный радиус круговых перемещений, который может быть выведен как
круговая интерполяция и может динамически изменяться в таблице свойств при запуске
постпроцессора. Любые круговые записи, радиус которых меньше этого значения, будут
линеаризованы. Эта переменная должна быть установлена в миллиметрах (MM).

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

Функции ввода 4-137


Руководство по постпроцессору CAM 08.12.21
Параметр Описание
толерантность Указывает допуск, используемый для линеаризации круговых перемещений, которые
расширяются до серии линейных перемещений. Записи круговой интерполяции могут быть
линеаризованы из-за несоблюдения условий настроек круговой интерполяции или из-за
линеаризоватьвызываемая функция. Эта переменная должна быть установлена в
миллиметрах (MM).
Параметры круговой интерполяции

разрешенные круговые плоскости = не определено;//разрешить все круговые плоскости

разрешенные круговые плоскости = 0;//отключить все круговые плоскости

разрешенные круговые плоскости =(1 << ПЛАН_XY) | (1 << PLANE_ZX); // Плоскости XY, ZX

допуск = пространственный (0,002, мм);//допуск линеаризации 0,00008 IN минимальная длина хорды =


пространственная (0,01, мм);//минимальное линейное перемещение 0,0004 дюйма минимальный круговой
радиус = пространственный (0,01, мм);//минимальный круговой радиус 0,0004 дюйма максимальный круговой
радиус = пространственный (1000, мм);//максимальный круговой радиус 39,37 дюйма минимальная круговая
развертка = toRad (0,01);//минимальное угловое перемещение 0,01 градуса максимальная круговая развертка =
toRad(180);//круговая интерполяция до 180 градусов разрешитьHelicalMoves = истина;//включить винтовую
интерполяцию разрешитьSpiralMoves = ложь;//запретить спиральную интерполяцию

Пример настройки круговой интерполяции

4.25.2 Общие функции круговой интерполяции


Имеются встроенные функции, которые используютсяonCircularфункция. Эти функции возвращают значения,
используемые вonCircularфункцию, определить, следует ли линеаризовать циклическую запись, и управлять
потокомonCircularлогика функций.

Функция Описание
получитькруговойцентр() Возвращает центральную точку круга в виде вектора.
getCircularChordLength() Возвращает дельта-линейное перемещение записи круговой интерполяции.
получитькруговойнормальный() Возвращает нормаль круглой плоскости в виде вектора. Нормаль
переворачивается, если круговое движение происходит по часовой стрелке. Это
соответствует соглашению о правой плоскости.
получитькруговую плоскость() Возвращает плоскость записи круговой интерполяции, PLANE_XY, PLANE_ZX или
PLANE_YZ. Если возвращаемое значение равно -1, то круговая плоскость не является
главной плоскостью, а находится в трехмерном пространстве.
получитькруговойрадиус() Возвращает конечный радиус кругового движения.
получитькруговойстартрадиус() Возвращает начальный радиус кругового движения. Это будет отличаться от конечного
радиуса для спиральных перемещений.
получитькруговой развертки() Возвращает угловую развертку записи круговой интерполяции в
радианах.
получитьТекущаяПозиция() Возвращает начальную точку кругового движения в виде вектора.

Функции ввода 4-138


Руководство по постпроцессору CAM 08.12.21
Функция Описание
получить спиральное расстояние () Возвращает расстояние, на которое переместится третья ось во время винтовой
интерполяции. Возвращает 0 для записи двумерной круговой интерполяции.

получить спиральное смещение () Возвращает расстояние по третьей оси в виде вектора. Эта функция используется, когда
винтовая интерполяция поддерживается за пределами одной из трех стандартных
круговых плоскостей.
получить спиральный шаг () Возвращает расстояние, которое проходит третья ось за полный 360-
градусный размах, т. е. значение шага резьбы.
получитьПозицияU(u) Возвращает точку на окружности втыпроцентов вдоль дуги в виде вектора.
полныйкруг() Возвращаетистинныйесли угловая развертка кругового движения составляет 360
градусов.

спиральный () Возвращаетистинныйесли запись круговой интерполяции содержит винтовое


движение. Переменнаяразрешить HelicalMovesдолжен быть установлен наистинный
для спиральных записей, которые будут переданы вonCircularфункция.
isSpiral() Возвращает true, если запись круговой интерполяции содержит движение по спирали
(начальный и конечный радиусы разные). Переменная разрешитьSpiralMovesдолжен быть
установлен наистинныйдля спиральных записей, которые будут переданы вonCircular
функция.
линеаризовать (допуск) Линеаризует круговое движение, выводя серию линейных перемещений.
Циклические общие функции

4.25.3 Спиральная интерполяция


Винтовая интерполяция определяется как круговая интерполяция с перемещением вдоль третьей линейной оси. Третья
линейная ось определяется как ось, не являющаяся частью круговой плоскости, например, ось Z является третьей линейной
осью для круговой интерполяции в плоскости XY. Переменнаяразрешить HelicalMovesдолжно быть установлено значение
true, чтобы постпроцессор поддерживал винтовую интерполяцию.

Спиральная интерполяция обычно выводится с использованием того же формата, что и круговая интерполяция, с добавлением
третьей оси и, при необходимости, значения шага (приращения расстояния на 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(лента)); ломать;

Спиральная интерполяция с выводом шага

Функции ввода 4-139


Руководство по постпроцессору CAM 08.12.21
4.25.4 Спиральная интерполяция
Спиральная интерполяция определяется как круговая интерполяция, радиус которой в начале кругового перемещения отличается
от радиуса в конце перемещения. ПеременнаяразрешитьSpiralMovesдолжно быть установлено значение true, чтобы постпроцессор
поддерживал винтовую интерполяцию.

Спиральная интерполяция, когда она поддерживается элементом управления, обычно указывается с помощью 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(канал )); ломать;

дефолт:
линеаризовать (допуск);
}
возвращение;

}
}

Выход спиральной интерполяции

Функции ввода 4-140


Руководство по постпроцессору CAM 08.12.21
4.25.5 Трехмерная круговая интерполяция
Трехмерная круговая интерполяция определяется как круговая интерполяция не на стандартной круговой плоскости (XY, ZX,
YZ).

Трехмерная круговая интерполяция, когда она поддерживается элементом управления, обычно указывается с помощью 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));//выходная конечная точка }
еще {
линеаризовать (допуск);
}
}
Трехмерная круговая интерполяция

4.26 вызывать OnCircular


invokeOnCircular(по часовой стрелке, cx, cy, cz, x, y, z, i, j, k, подача);

Аргументы Описание
по часовой стрелке Установлен вистинныйесли направление круга по часовой стрелке, ложь, если этопротив
часовой стрелки.
сх, су, сч Центр круга.
х, у, г Положение инструмента.

я, дж, к Нормальный вектор окружности.


подача Скорость подачи.

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

4.27 цикл
функция onCycle () {

Функции ввода 4-141


Руководство по постпроцессору CAM 08.12.21
ТоonCycleФункция вызывается один раз в начале операции, содержащей постоянный цикл, и может
содержать код для подготовки машины к циклу. Фрезерные постпроцессоры обычно устанавливают здесь
плоскость обработки.

функция onCycle () {
writeBlock(gPlaneModal.format(17));
}
Пример функции onCycle

Фрезерно-токарные постпроцессоры обычно обрабатывают последовательность перемещения заготовки в функции


onCycle. Логика постпроцессоров Mill/Turn будет обсуждаться в отдельной главе.

4.28 на CyclePoint
функция onCyclePoint(x, y, z) {

Аргумент Описание
х, у, г Расположение отверстия снизу.

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

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

1. Расположение первого отверстия в цикле

а. Положение относительно плоскости зазора

б. Постоянный цикл поддерживается на машине


я. Расчет общих параметров цикла
II. Стандартный цикл форматирования и вывода
в. Постоянный цикл не поддерживается на машине
я. Развернуть цикл на линейные движения
2. 2йчерез нйотверстия
а. Цикл не расширяется
я. Расположение выходного отверстия

б. Цикл расширен
я. Развернуть цикл в новом месте

Фактический вывод блоков цикла обрабатывается ввыключательблок с отдельнымкейсдля каждого из


поддерживаемых циклов.

переключатель (тип цикла) {


корпус "сверление":

Функции ввода 4-142


Руководство по постпроцессору CAM 08.12.21
написатьБлок(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81),
getCommonCycle(x, y, z, cycle.retract),
feedOutput.format(F)
);
ломать;
Образец кода форматирования цикла

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

случай "глубокого сверления":

если (Р > 0) {//машина не поддерживает код остановки, поэтому расширьте цикл


развернутьCyclePoint(x, y,
z); } еще {
написатьБлок(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(83),
getCommonCycle(x, y, z, cycle.retract),
"Q" + xyzFormat.format(cycle.incrementalDepth),
feedOutput.format(F)
);
}
ломать;
Расширение цикла, когда функция не поддерживается на машине

2йчерез нйместоположения в операции цикла обычно выводятся с использованием простых перемещений XY без каких-
либо кодов определения цикла. Расширенные циклы по-прежнему необходимо расширять в этих местах.

} еще {//конец условия isFirstCyclePoint()


если (циклРасширенный) {
развернутьCyclePoint(x, y,
z); } еще {
вар _x = xOutput.format(x);
var _y = yOutput.format(y);
если (!_x && !_y) {
xOutput.reset(); // требуется хотя бы одна ось
_x = xOutput.format(x);
}
написатьБлок(_х, _у);
}
}
Выведите 2йчерез нйВелосипедные локации

Функции ввода 4-143


Руководство по постпроцессору CAM 08.12.21
4.28.1 Типы циклов сверления
Следующая таблица содержит сверление (циклы изготовления отверстий). Тип цикла хранится вциклТип переменная
в виде текстовой строки. Стандартный G-код, используемый для цикла, включен в описание, где расширенный
определяет цикл как обычно не поддерживаемый на машине и вместо этого расширенный.

циклТип Описание
бурение Подача на глубину и быстрое удаление (G81)
зенковка Подача на глубину, задержка и быстрое удаление (G82)
стружкодробление Несколько проходов с периодическим частичным отводом для удаления стружки (G73)

глубокое бурение Сверление сверления с полным отводом в конце каждого сверления (G83)
прорывное бурение Позволяет снизить скорость и подачу перед пробивкой отверстия
(расширено)
артиллерийское бурение Управляемое глубокое сверление позволяет изменять скорость вращения шпинделя для

позиционирования (расширенное)

постукивание Подача на глубину, реверс шпинделя, дополнительная задержка и подача.


Автоматически определяет левое или правое постукивание в зависимости от
выбранного инструмента. (G74/G84)
левое касание Нарезание резьбы левой рукой (G74)

правый тап Нарезание резьбы правой рукой (G84)

постукивание со стружкодроблением Постукивание несколькими ударами. Автоматически определяет левое или правое
постукивание в зависимости от выбранного инструмента. (расширенный)

развертывание Подача на глубину и подача (G85)


скучный Подача на глубину, задержка и подача (G86)
перестать скучать Подача на глубину, остановка шпинделя и подача (G87)
чистовой Подача на глубину, ориентация шпинделя, смещение от стенки и быстрое удаление
(G76)
обратное бурение Ориентирование шпинделя, ускорение на глубину, запуск шпинделя, смещение инструмента к

стене, подача до высоты отверстия, ориентация шпинделя, смещение от стенки и быстрое

удаление (G77)

кругло-фрезерование карманов Фрезерует отверстие (расширенное)

резьбофрезерный Нарезка винтовой резьбы (расширенная)


Типы циклов сверления

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

циклТип Поддерживается команда onCommand


постукивание COMMAND_SPINDLE_CLOCKWISE COMMAND_SPINDLE_ПРОТИВ
левое касание ЧАСОВОЙ СТРЕЛКИ
правый тап COMMAND_ACTIVATE_SPEED_FEED_SYNCHRONIZATION
постукивание со стружкодроблением COMMAND_DEACTIVATE_SPEED_FEED_SYNCHRONIZATION
перестать скучать COMMAND_STOP_SPINDLE
Функции ввода 4-144
Руководство по постпроцессору CAM 08.12.21
циклТип Поддерживается команда onCommand
COMMAND_START_SPINDLE
чистовой COMMAND_STOP_SPINDLE
обратное бурение COMMAND_START_SPINDLE
COMMAND_ORIENTATE_SPINDLE
Необходимая поддержка команд для расширенных циклов

Некоторые циклы будут использовать следующие параметры при их расширении.

параметры машины. Описание


чипBreakingDistance Расстояние, на которое нужно отступить, чтобы разбить стружку во времястружкодроблениецикл.

сверлениеSafeDistance Определяет безопасное расстояние над припуском при перемещении в


отверстие длястружкодроблениеиглубокое бурениециклы.
шпиндельОриентация Угол ориентации шпинделя после ориентации шпинделя.
шпиндельSpeedDwell Задержка в секундах после изменения скорости шпинделя во время цикла.
Параметры расширенных циклов

Вы определяете расширенные параметры цикла, используя следующий синтаксис.

machineParameters.chipBreakingDistance = toPreciseUnit(0,1, мм)


machineParameters.drillingSafeDistance = toPreciseUnit(2, мм);
machineParameters.spindleOrientation = 0;
machineParameters.spindleSpeedDwell = 1,5;
Определение параметров расширенных циклов

4.28.2 Параметры цикла


Параметры, определенные в операции цикла, передаются функциям цикла с помощьюциклобъект.
Доступны следующие переменные, на которые ссылаются как 'cycle.параметр'.

Параметр Описание
накопленная глубина Глубина комбинированных проходов до того, как инструмент будет полностью отведен
во времястружкодроблениецикл.
backBoreDistance Расстояние резкиобратное бурениецикл.
Нижний Дно ямы.
breakThroughDistance Расстояние над дном отверстия для переключения на сквозную
подачу и скорость шпинделя припрорывное бурениецикл.
breakThroughFeedRate Скорость подачи, используемая при пробивке отверстия во время
прорывное бурениецикл.
breakThroughSpindleSpeed Скорость шпинделя, используемая при пробивке отверстия во время
прорывное бурениецикл.
чипBreakDistance Расстояние отвода инструмента для разрушения стружки во время
стружколомцикл.
оформление Зазорная плоскость, в которую следует вставить инструмент, отведет инструмент после сверления

отверстия и переместит его к следующему отверстию.

Функции ввода 4-145


Руководство по постпроцессору CAM 08.12.21
Параметр Описание
компенсация Компенсация радиуса действует длякругло-фрезерование кармановирезьбофрезерование
циклы. Это значение может бытьконтроль,носить, иобратная одежда.
компенсацияShiftOrientation Такой же каксдвигОриентация.
глубина Глубина отверстия.
диаметр Диаметр отверстия длякругло-фрезерование карманови
резьбофрезерованиециклы.
направление Либовзбиратьсяилиобщепринятыйфрезерование длякругло-фрезерование карманови
резьбофрезерныйциклы.
жить Время выдержки в секундах.
глубина Расстояние над глубиной резания, на котором остановиться, используется дляартиллерийское

бурениециклы.

скорость подачи Основная скорость подачи при резании.

incrementalDepth Инкрементная глубина проклевывания первого прохода.


incrementalDepthReduction Пошаговое уменьшение глубины насечки за проход для циклов насечки.
минимальная инкрементальная глубина Минимальная глубина долбления для циклов долбления.
количество шагов Количество горизонтальных проходов длярезьбофрезерныйцикл.
погружениеПодача Скорость режущей подачи. Такой же какскорость подачи.

погружаетсяPerRetract Количество проходов до того, как инструмент будет полностью отведен во время
стружкодроблениецикл.
позиционированиескорость подачи Скорость подачи, используемая для позиционирования инструмента во времяартиллерийское бурениецикл.

позиционированиеSpindleSpeed Скорость шпинделя, используемая при позиционировании инструмента во время

артиллерийское бурениецикл.

повторный проход Установите значение true, если последний проход должен повторяться длякруговое

фрезерование кармановирезьбофрезерныйциклы.

втягивать Плоскость, в которой будет располагаться инструмент перед началом


цикла (подача в отверстие).
retractFeedrate Скорость подачи отвода инструмента, используемая при подаче из отверстия.
сдвиг Расстояние, на которое нужно отодвинуть инструмент от стены во времячистовой и
обратное бурениецикл.
сдвигнаправление Направление в радианах для смещения инструмента от стены во время
чистовойиобратное бурениецикл. Направление сдвига будет равно PI
радианам (180 градусов) от стены плюс это значение.
сдвигОриентация Ориентация шпинделя инструмента в радианах при смещении
инструмента от стены во времячистовойилиобратное бурениецикл.
переступить Расстояние горизонтального шага длякругло-фрезерование карманови
резьбофрезерныйциклы.
склад Верх отверстия.
стопШпиндель При установке на1, шпиндель будет остановлен во время
позиционирования/отвода вартиллерийское бурениецикл.
резьба Либоправильноилилевыйнарезание резьбы вручную длярезьбофрезерныйциклы.
Параметры цикла

Функции ввода 4-146


Руководство по постпроцессору CAM 08.12.21
4.28.3 Велосипедные плоскости/высоты
Циклы сверления используют разные высоты во время выполнения цикла. Эти высоты задаются на вкладке
«Высоты» для операции «Сверление». Одна вещь, которую вы должны иметь в виду, это то, что имена, данные
этим высотам, не совпадают с именами параметров цикла в постпроцессоре. В следующей таблице показано
соотношение между именами высоты HSM и эквивалентнымициклназвания параметров.

Вкладка «Операционные высоты» Параметр цикла Описание


Высота просвета (никто) Плоскость для позиционирования
в первой точке цикла и для отвода
инструмента после конечной
точки цикла.
Убрать высоту цикл.клиренс Инструмент перемещается к этой
плоскости с высоты зазора и
располагается между
отверстиями на этой высоте.
Высота подачи цикл.убрать Инструмент будет подавать из этой
плоскости в отверстие.
Верхняя высота цикл.сток Верх отверстия.
Нижняя высота цикл.дно Дно ямы. Эта высота представляет
собой плоскость, до которой
инструмент будет сверлить, и будет
отличаться от фактического дна
отверстия, если Кончик сверла
через днофлажок установлен.

Корреляция между рабочими высотами цикла и параметрами цикла

HSM предполагает, что инструмент всегда будет отводиться на высоту отвода (цикл.клиренс) между отверстиями, вы
заметите это при моделировании цикла в HSM. Обычно это обрабатывается в системе управления станком с
помощью кода G98 (отвод в заднюю плоскость). Конечно, этот код может отличаться от управления станком к
управлению станком, и есть элементы управления, которые всегда будут втягиваться на высоту подачи (цикл.убрать) в
конце операции сверления. В этом случае постпроцессор должен отвести инструмент на высоту отвода.

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

функция onCyclePoint(x, y, z) {
//если (isFirstCyclePoint()) {
если (истинный) {//вывод блока полного цикла для каждой дыры в операции
repositionToCycleClearance(цикл, x, y, z);
...

...

Функции ввода 4-147


Руководство по постпроцессору CAM 08.12.21
дефолт:
развернутьCyclePoint(x, y, z);
}
// убираем инструмент (добавляем в конце кода переключателя
cycleType) gMotionModal.format.reset();
writeBlock(gCycleModal.format(80), gMotionModal.format(0), zOutput.format(cycle.clearance)); }
еще {
если (циклРасширенный) {
Отвод инструмента в плоскость отвода, когда он не поддерживается системой управления станком

4.28.4 Общие функции цикла


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

Функция Описание
isFirstCyclePoint() Возвращаетистинныйесли это первая точка в цикле операции. Обычно
вызывается, чтобы определить, следует ли выводить полный блок цикла или
только позицию цикла.
isLastCyclePoint() Возвращаетистинныйесли это последняя точка цикла. Эта функция обычно
используется для операции нарезания резьбы на токарном станке, поскольку
HSM отправляет один проход вonCyclePointфункция и полная глубина резьбы
требуется для вывода одного блока резьбы. onCycleEndиспользуется для
завершения цикла сверления, поэтому эта функция обычно не используется в
циклах сверления.
isProbingCycle() Возвращаетистинныйесли это цикл зондирования.

repositionToCycleClearance() Перемещает инструмент в плоскость Retract Height (цикл.клиренс). Эта


функция обычно вызывается перед выводом блока полного цикла.
getCommonCycle(x, y, z, r) Форматирует общие параметры цикла (X, Y, Z, R) для вывода.
Общие функции цикла

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


постпроцессоре. Он принимает положение цикла (x, y, z) и плоскость/расстояние отвода (r) в качестве аргументов.
Некоторые машины требуют, чтобы значение отвода было запрограммировано как расстояние от текущего
местоположения, а не как абсолютное положение. Есть два способа сделать это. Вы можете пройти на расстоянии в
качестве значения отвода.

функция getCommonCycle(x, y, z, r) {
силаXYZ();
вернуть [xOutput.format(x), yOutput.format(y),
zOutput.format(z),
"R" + xyzFormat.format(r)];
}

корпус "сверление":

Функции ввода 4-148


Руководство по постпроцессору CAM 08.12.21
Перевод: английский - русский - www.onlinedoctranslator.com

написатьБлок(
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

4.28.5 Вывод шага с помощью циклов нарезания резьбы


Циклы нарезания резьбы могут иногда выводиться со стандартной скоростью подачи FPM, иногда с шагом резьбы, а
иногда с использованием режима скорости подачи FPR. В зависимости от используемого формата используются разные
переменные и форматы. При использовании скорости подачи шага или FPR вам необходимо создать формат для этого типа
скорости подачи. Формат определяется в верхней части постпроцессора вместе с остальными определениями формата.
Обратитесь кОпределения форматаиОпределения выходных переменныхразделы.

var feedFormat = createFormat({десятичные числа:(единица измерения == ММ ? 0 : 1), forceDecimal:true}); var


pitchFormat = createFormat({десятичные числа:(единица измерения == ММ ? 3 : 4), forceDecimal:true}); …

Функции ввода 4-149


Руководство по постпроцессору CAM 08.12.21
var feedOutput = createVariable({prefix:"F"}, feedFormat);
var pitchOutput = createVariable({prefix:"F", force:true}, pitchFormat);
Создайте выходной формат основного тона

В отводных секциях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 функция.

случай "выстукивание":

var F = цикл.скорость подачи / скорость вращения

шпинделя; написатьБлок(

gRetractModal.format(98),gFeedModeModal.format(95), gCycleModal.format((84),
getCommonCycle(x, y, z, cycle.retract),
(условный (P > 0, "P" + миллиФормат.формат (P)),
pitchOutput.format(F)
);
принудительная подача();//заставить скорость подачи выводиться после цикла нарезания резьбы с выводом шага ломать;

Вывод скорости подачи как FPR в цикле нарезания резьбы

4.29 в конце цикла


функция onCycleEnd() {

То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 Функция

4.30 на машине перемотки


функция onRewindMachine (_a, _b, _c) {

Аргумент Описание
_а, _б, _в Поворотные оси перематывают позиции.

ТоonRewindMachineФункция используется для изменения положения осей вращения при достижении предела станка.
Он подробно описан вПеремотка оси вращения при достижении пределовраздел данного руководства.

4.31 Общие функции


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

4.31.1 запись
написать(текст);

Аргументы Описание
текст Текст для вывода в файл ЧПУ

ТописатьФункция встроена в постпроцессор и не определяется в постпроцессоре. Он используется для вывода текста в


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

написать("%"); // выводит '%'


writeln("Vector = " + новый Vector(x, y, z)); // выводит переменные x, y, z в векторном формате
writeln(""); // выводит пустую строку
writeln(formatComment("Загрузить инструмент " + tool.number + " в шпиндель");
// выводит 'Загрузить инструментнв шпинделе в качестве комментария

Пример записи звонков

Функции ввода 4-151


Руководство по постпроцессору CAM 08.12.21
4.31.2 блок записи
функция writeBlock(аргументы) {

Аргументы Описание
аргументы Разделенный запятыми список кодов/текста для вывода.

ТонаписатьБлокироватьФункция записывает блок кодов в выходной файл ЧПУ. Он добавит порядковый номер к
блоку, если порядковые номера включены, и добавит необязательный символ пропуска, если это необязательная
операция. Список отформатированных кодов и/или текстовых строк передается внаписатьБлокироватьфункция.
Список кодов разделен запятыми, так что каждый код передается как отдельный аргумент, что позволяет разделять
коды разделителем слов, определенным параметромsetWordSeparatorфункция.

/**
Записывает указанный блок.
*/
функция записиБлок() {
var text = formatWords(аргументы);
если (! текст) {
возвращение;

}
если (getProperty("showSequenceNumbers")) {//добавить порядковые номера в выходные блоки
если (необязательный раздел) {

если (текст) {
writeWords("/", "N" + номер_последовательности, текст);
}
} еще {
writeWords2("N" + номер_последовательности, текст);
}
sequenceNumber += getProperty("sequenceNumberIncrement"); } еще {
//нет порядковых номеров
если (необязательный раздел) {

написатьСлова2("/",
текст); } еще {
написатьСлова(текст);
}
}
}
Пример функции writeBlock

writeBlock(gAbsIncModal.format(90), xFormat.format(x), yFormat.format(y)); writeBlock("G28",


"X" + xFormat.format(0), "Y" + yFormat.format(0)); // выводит 'G28 X0 Y0' writeBlock("G28" + "X"
+ xFormat.format(0) + "Y" + yFormat.format(0)); // выводит 'G28 X0Y0'
Пример writeBlock Calls

Функции ввода 4-152


Руководство по постпроцессору CAM 08.12.21
ТонаписатьБлокироватьфункцию обычно не нужно модифицировать.

4.31.3 toPreciseUnit
toPreciseUnit(значение, единицы);

Аргументы Описание
ценность Входное значение.
единицы Единицы, в которых указано значение, ММ или IN.

ТоtoPreciseUnitФункция позволяет указать значение в заданных единицах, и это значение будет возвращено в активных единицах
входного промежуточного файла ЧПУ. При разработке постпроцессора настоятельно рекомендуется, чтобы любые жестко
закодированные числа, основанные на единицах измерения, использовалиtoPreciseUnitфункция при определении номера.

yAxisMinimum = toPreciseUnit(gotYAxis ? -50,8: 0, мм); // минимальный диапазон для оси Y


yAxisMaximum = toPreciseUnit(gotYAxis ? 50.8 : 0, MM); // максимальный диапазон для оси Y
xAxisMinimum = toPreciseUnit(0, MM); // максимальный диапазон для оси X (режим радиуса)
Определение значений с помощью toPreciseUnit

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

Функция Описание
силаXYZ Форсирует вывод линейных осей (X, Y, Z) в следующем блоке движения.
силаABC Форсирует вывод поворотных осей (A, B, C) на следующий блок движения.
ForceFeed Принудительно выводит скорость подачи в следующем блоке движения.
ForceAny Задает все оси и скорость подачи для следующего блока движения.
Силовые функции

/** Принудительный вывод X, Y и Z на следующий вывод. */


функция forceXYZ() {
xOutput.reset();
yВыход.сброс();
zВыход.сброс();
}

/** Принудительный вывод A, B и C на следующий вывод.


*/ функция forceABC() {
выход.сброс();
bВыход.сброс();
cВыход.сброс();
}
Функции ввода 4-153
Руководство по постпроцессору CAM 08.12.21
/** Принудительный вывод F на следующем
выводе. */ функция forceFeed() {
currentFeedId = не определено;
feedOutput.reset();
}

/** Принудительный вывод X, Y, Z, A, B, C и F на следующем выводе.


*/ функция forceAny() {
силаXYZ();
силаABC();
принудительная подача();

}
Примеры силовых функций

4.31.5 записьRetract
функция writeRetract(аргументы) {

Аргументы Описание
аргументы X, Y и/или Z. Разделяются запятыми, если указано несколько осей.

ТописатьRetractФункция используется для отвода оси Z в ее заднюю плоскость и перемещения осей X и Y в


исходное положение.

ТописатьRetractФункция может быть вызвана с одной или несколькими осями для перемещения в исходное
положение. Оси задаются с использованием их стандартных именХ, У, Я, и разделяются запятыми, если в вызове
указано несколько осей.писатьRetract.

написатьОтменить(Z);//переместите ось Z в исходное положение


написатьRetract(X, Y);//переместите оси X и Y в исходное положение
Образец записи Retract Calls

Функция writeRetract не является общей по своей природе, и ее, возможно, придется изменить, чтобы она соответствовала требованиям
вашего компьютера. Например, некоторые станки используют G28 для перемещения оси в исходное положение, некоторые используют G53 с
исходным положением, а некоторые используют стандартный блок G00.

/** Выходной блок для безопасного отвода и/или перемещения в исходное


положение. */ функция writeRetract() {
// инициализируем подпрограмму

var _xyzMoved = новый массив (ложь, ложь, ложь);


вар _useG28 = получить свойство ("useG28"); // может быть либо истинным, либо ложным

// проверяем синтаксис вызова


если (arguments.length == 0) {

Функции ввода 4-154


Руководство по постпроцессору CAM 08.12.21
error(localize("Ось не указана для writeRetract().");
возвращение;
}
for (var i = 0; i < arguments.length; ++i) {
если ((аргументы [i] < 0) || (аргументы [i] > 2)) {
error(localize("Неверная ось указана для writeRetract().");
возвращение;
}
если (_xyzMoved[аргументы[i]]) {
error(localize("Невозможно дважды отвести одну и ту же ось в одной строке"));
возвращение;
}
_xyzMoved[аргументы[i]] = истина;
}

// особые условия
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();
}

// форматировать исходные позиции

Функции ввода 4-155


Руководство по постпроцессору CAM 08.12.21
переменные слова = []; // сохраняем все втянутые оси в
массив for (var i = 0; i < arguments.length; ++i) {
// определяем оси для
перемещения switch
(arguments[i]) { case X:
// особые условия
if (getProperty("homePositionCenter")) { // вывод X в стандартном блоке сам по себе при центрировании
writeBlock(gMotionModal.format(0), xOutput.format(_xHome));
_xyzMoved[0] = ложь;
ломать;
}
words.push("X" + xyzFormat.format(_xHome));
ломать;
случай Y:
words.push("Y" + xyzFormat.format(_yHome));
ломать;
случай Z:
words.push("Z" + xyzFormat.format(_zHome));
убрано = правда;
ломать;
}
}

// вывод перемещаем домой


если (слова.длина > 0) {
если (_useG28) {//используйте G28, чтобы перейти в исходное положение

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), слова);
}

// принудительно перемещаем все оси, которые перемещаются в исходное положение в

следующем кадре если (_xyzMoved[0]) {

xOutput.reset();
}
если (_xyzMoved[1]) {
yВыход.сброс();
}
если (_xyzMoved[2]) {
zВыход.сброс();
}
}
}
Функции ввода 4-156
Руководство по постпроцессору CAM 08.12.21
Пример функции writeRetract

5 ручных команд ЧПУ


Команды ЧПУ в ручном режиме используются для управления поведением отдельных операций, когда в форме операции нет
настройки для управления определенной функцией элемента управления. Вы можете использовать команды Manual NC,
чтобы отобразить сообщение, вставить коды в выходной файл NC, выполнить необязательную остановку, определить
настройку и т. д. Доступ к меню Manual NC осуществляется из разных областей меню ленты в зависимости от используемого
продукта. .

Выбор команды ЧПУ вручную в продуктах HSM (Fusion 360, Inventor, HSMWorks)

Как только вы выберете меню Manual NC, вы увидите отображаемую форму, которая используется для выбора
типа команды Manual NC, которую вы хотите передать постпроцессору, и, возможно, параметра, который
будет передан с командой.

Определение команды ЧПУ в ручном режиме

Если вы используете в своей детали команду Manual NC, необходимо, чтобы постпроцессор был оборудован для обработки
этой команды. Некоторые из команд поддерживаются стандартными постпроцессорами, напримерОстанавливаться,
Дополнительная остановка, иЖить, в то время как поддержка должна быть добавлена в постпроцессор для поддержки
других команд ручного ЧПУ. Если вы используете команду Manual NC, которая не поддерживается постом, то она либо выдаст
ошибку, либо будет проигнорирована. Общее правило заключается в том, что он будет генерировать ошибку, еслипо
команде функция вызывается и будет игнорироваться при вызове другой функции.

Ручные команды ЧПУ 5-157


Руководство по постпроцессору CAM 08.12.21
5.1 onManualNC и expandManualNC
функция onManualNC(команда, значение) {
expandManualNC(команда, значение)

Аргументы Описание
команда Команда Manual NC, вызвавшая функцию.
ценность Значение, введенное с помощью команды.

ТоonManualNCфункция определяется в постпроцессоре и используется для обработки команд ЧПУ в


ручном режиме. Он принимает команду и значение, присвоенное команде. ЕслиonManualNC функция не
определена в постпроцессоре, то будет вызвана отдельная функция, как указано в таблице ниже.

ТоразвернутьВручнуюNCКоманда также может использоваться для обработки команды ЧПУ вручную с


использованием отдельных функций, перечисленных в таблице. Обычно используется как условие по умолчанию в
onManualNC для обработки команд, где вам все равно, вводятся ли они как команда ЧПУ вручную или из
внутреннего вызова в постпроцессоре.

В следующей таблице описаны команды ЧПУ в ручном режиме вместе с функцией, которая будет вызываться
при обработке команды, когдаonManualNCфункция не существует илиразвернутьВручнуюNCназывается.

Ручное ЧПУ Описание Команда Ценность Вызванная функция


Команда
Комментарий Сообщение оператора COMMAND_COMMENT сообщение onComment
Останавливаться Останов машины COMMAND_STOP по команде
По желанию Дополнительная остановка
COMMAND_OPTIONAL_STOP по команде
Останавливаться

Жить Жить COMMAND_DWELL Время ожидания onDwell


в секундах
Перерыв инструмента Проверить наличие инструмента
COMMAND_BREAK_CONTROL по команде
контроль поломка
Инструмент измерения Автоматически COMMAND_TOOL_MEASURE по команде
измерительный инструмент

длина
Стартовый чип Стартовый чип
COMMAND_START_CHIP_ТРАНСПОРТ по команде
транспорт конвейер
Стоп-чип Стоп-чип COMMAND_STOP_CHIP_TRANSPORT по команде
транспорт конвейер
Открытая дверь Открыть главную дверь КОМАНДА_ОТКРЫТЬ_ДВЕРЬ по команде
Закрой дверь Закрыть главную дверь COMMAND_CLOSE_DOOR по команде
Калибровка Калибровка COMMAND_CALIBRATE по команде
машина

Ручные команды ЧПУ 5-158


Руководство по постпроцессору CAM 08.12.21
Ручное ЧПУ Описание Команда Ценность Вызванная функция
Команда
Проверять Проверить целостность COMMAND_VERIFY по команде
машина
Чистый Запросить уборку COMMAND_CLEAN по команде
цикл
Действие Определяемые пользователем
COMMAND_ACTION текст onParameter
действие

Распечатать Распечатать сообщение COMMAND_PRINT_MESSAGE сообщение onParameter


сообщение из машины
Отображать Дисплей оператора COMMAND_DISPLAY_MESSAGE сообщение onParameter
сообщение сообщение

Тревога Создать сигнал COMMAND_ALARM по команде


тревоги на машине
Тревога Запросить оповещение COMMAND_ALERT по команде
событие на
машина
Пройти через Вывести литеральный текст COMMAND_PASS_THROUGH текст onPassThrough
в файл ЧПУ
Инструмент силы section.getForceToolChange()
Принудительно использовать инструмент (никто)
изменять изменять

Программа звонков Вызов подпрограммы COMMAND_CALL_PROGRAM текст onParameter


Ручные команды ЧПУ

5.1.1 Пример функции ManualNC


ТоonManualNCФункция является недавним дополнением к постпроцессору и не встречается в большинстве
универсальных постпроцессоров. Вам не нужно определять ее для обработки команд ЧПУ в ручном режиме, а если
она определена, не нужно обрабатывать все команды ЧПУ в ручном режиме в этой функции. Его можно использовать
для обработки только тех команд, где вам нужно знать, были ли они сгенерированы из команды CAM Manual NC
вместо прямого вызова из постпроцессора.

Например, следующееonManualNCОпределение функции может использоваться для обработки комментариев,


введенных с помощью команды CAM Manual NC, иначе, чем комментарии, сгенерированные постпроцессором. Он
просто добавляет текст «MSG» перед комментарием для ручного NC.Показать комментарийкоманда. Все остальные
команды ручного ЧПУ обрабатываются нормально.

функция onManualNC(команда, значение) {


переключатель (команда) {
случай COMMAND_DISPLAY_MESSAGE:
writeComment("MSG, " + значение);
ломать;
дефолт:
развернутьManualNC(команда, значение);//нормальная обработка команды Manual NC
}
Ручные команды ЧПУ 5-159
Руководство по постпроцессору CAM 08.12.21
}
Обработка команды Display Message в onManualNC

5.1.2 Задержка обработки ручных команд ЧПУ


Команды ЧПУ в ручном режиме обрабатываются в месте их ввода в дереве операций, т. е.
они будут обработаны до вызоваonSection. СonSectionобычно завершает предыдущую
операцию перед началом новой операции, это может быть нежелательным местом для
обработки команды ручного ЧПУ.

В следующих примерах кода показано, как команды ЧПУ в ручном режиме могут буферизоваться и выводиться в
любой момент операции. Вы можете просто скопировать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 обрабатывается непосредственно перед выводом блока
смены инструмента, а остальные команды ЧПУ в ручном режиме — после блока смены инструмента.

выполнитьManualNC(COMMAND_DISPLAY_MESSAGE);//отобразить сообщение Manual NC


writeBlock("T" + toolFormat.format(tool.number), mFormat.format(6)); если (инструмент.комментарий)
{
написатьКомментарий(инструмент.комментарий);

}
выполнитьРучноеNC();//обработать оставшиеся команды ЧПУ в ручном режиме
Обработка ручных команд ЧПУ в нужном месте

В следующих разделах дается описание функций, которые вызываются командами ручного ЧПУ вне
функции onManualNC, и примеры того, как они обрабатываются в функциях. То onCommentиonDwell
функции описаны вВходные функцииглаве, так как они являются простыми функциями и ведут себя
одинаково независимо от того, как они вызываются.

5.2 по команде
функция onCommand (команда) {

Аргументы Описание
команда Команда для обработки.

Все команды ЧПУ в ручном режиме, не требующие соответствующего параметра, передаются впо
команде функции и, как вы видите изРучные команды ЧПУtable, это влечет за собой большинство
команд. Топо командеФункция также обрабатывает другие команды, которые не генерируются командой
ЧПУ в ручном режиме, и они описаны впо командераздел вВходные функцииглава.

// определяем команды, которые выводят один М-код


вар mapCommand = {
КОМАНДА_СТОП:0,
COMMAND_OPTIONAL_STOP:1,
COMMAND_START_CHIP_TRANSPORT:31,
COMMAND_STOP_CHIP_TRANSPORT:33 …

};

функция onCommand (команда) {


переключатель (команда) {

дело COMMAND_BREAK_CONTROL://обрабатывать команду «Сломать инструмент»
if (!toolChecked) { // избегайте дублирования COMMAND_BREAK_CONTROL
по команде (COMMAND_STOP_SPINDLE);
Ручные команды ЧПУ 5-161
Руководство по постпроцессору CAM 08.12.21
по команде (COMMAND_COOLANT_OFF);
написатьБлок(
gFormat.format(65),
«Р» + 9853,
"T" + toolFormat.format(tool.number),
"B" + xyzFormat.format(0),
"H" + xyzFormat.format(getProperty("toolBreakageTolerance"))
);
инструментПроверено = Истина;

}
возвращение;

дело COMMAND_TOOL_MEASURE://игнорировать измерения инструмента


возвращение;

// обрабатывать команды, которые выводят один


М-код var stringId = getCommandStringId(команда); var
mcode = mapCommand[stringId];
если (mcode != не определено) {
writeBlock(mFormat.format(mcode)); }
еще {
onUnsupportedCommand (команда);
}
}
Обработка ручных команд ЧПУ в функции onCommand

5.3 по параметру
функция onParameter (имя, значение) {

Аргументы Описание
название Имя параметра.
ценность Значение, сохраненное в параметре.

ТоonParameterфункция вызывается не только для всех параметров, определенных в промежуточном файле (см.
onParameterв выходных данных постпроцессора dump.cps) он также обрабатываетДействие,Программа звонков,
Показать сообщение, иРаспечатать сообщениеРучные команды ЧПУ. Ему передается как имя определяемого
параметра, так и текстовая строка, связанная с этим параметром.

Ручная команда ЧПУ Имя Ценность

Действие действие текст

Программа звонков подпрограмма вызова текст

Показать сообщение отображать текст

Распечатать сообщение Распечатать текст

Ручные команды ЧПУ 5-162


Руководство по постпроцессору CAM 08.12.21
Ручные команды ЧПУ, обрабатываемые в onParameter

В этом разделе будет описано, какДействиеможно использовать, так как это наиболее часто используемая из
этих команд.

ТоДействиеКоманда обычно используется для определения настроек постпроцессора, аналогичных свойствам


постпроцессора, определенным в верхней части постпроцессора, за исключением того, что настройки, определенные с
помощью этой команды, обычно применяются только к одной операции. Поскольку операции HSM выполняются в том
порядке, в котором они определены в дереве CAM, команда Manual NC всегда будет обрабатываться до операции, которой
они предшествуют. Вы также можете использоватьДействиекоманда, чтобы определить параметр, чтобы команду можно
было выполнить в другом разделе сообщения, ссылаясь на этот параметр. Вы даже можете определить параметры, которые
обычно задаются в свойствах публикации, в вашей программе, поэтому вам не нужно проверять, установлено ли свойство
для конкретной программы. В этом случаеДействиекоманда установит значение свойства post на основе входного
значения, связанного с командой.

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

Команда действия Ценности Описание


Сглаживание Выкл., Низкий, Средний, Высокий Устанавливает тип сглаживания

Толерантность . 001-.999 Сглаживание допуска


fastToolChange Да нет ОтменяетfastToolChange
опубликовать свойство
Пример ручного типа действия NC-команды

В этом примере формат вводаДействиеКоманда ручного ЧПУ предназначена для указания команды, за которой
следует разделитель ':', за которым, в свою очередь, следует значение, вДействиетекстовое поле.

ДействиеФормат команды

var SmoothingType = 0; var


smoothingTolerance = .001; функция
onParameter (имя, значение) {
переменная недействительна = ложь;

Ручные команды ЧПУ 5-163


Руководство по постпроцессору CAM 08.12.21
переключатель (имя) {

случай "действие":
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]);
возвращение;
}
}
}

/* возвращает вариант, указанный в текстовой строке, по сравнению со списком вариантов


*/ function parseChoice() {
переменная статистика = не определено;

for (i = 1; i < arguments.length; i++) {


if (String(arguments[0]).toUpperCase() == String(arguments[i]).toUpperCase()) {
если (Строка(аргументы[i]).toUpperCase() == "ДА") {
стат = правда;

Ручные команды ЧПУ 5-164


Руководство по постпроцессору CAM 08.12.21
} else if (String(arguments[i]).toUpperCase() == "NO") {
стат = ложь;
} еще {
стат = я - 1;
ломать;
}
}
}
возврат статистики;

}
ОбработкаДействиеРучная команда ЧПУ

Чтобы упростить использование пользовательскихДействиеРучные команды ЧПУ вы можете использовать


возможности шаблона HSM. Сначала вы создадите команду Manual NC, которую вы превратите в шаблон,
используя пример вФормат команды действиякартинка показана выше. После создания команды Manual NC
вам нужно будет дать ей осмысленное имя, переименовав ее в дереве операций.

ПереименоватьДействиеРучная команда ЧПУ перед созданием шаблона

Теперь вы создадите шаблон из этой команды Manual NC, щелкнув правой кнопкой мыши команду
Manual NC и выбравСохранить как шаблон. Вы захотите дать шаблону то же имя, что и в операции
переименования.

Создание шаблона ручной команды ЧПУ

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

Ручные команды ЧПУ 5-165


Руководство по постпроцессору CAM 08.12.21
Использование созданного шаблона команды ЧПУ вручную

5.4 при сквозном прохождении

Функция onPassThrough (значение)

Аргументы Описание
ценность Текст для вывода в файл ЧПУ.

ТоПройти черезКоманда Manual NC используется для передачи текстовой строки непосредственно в файл NC без какой-
либо обработки постпроцессором. Это похоже на редактирование файла ЧПУ и добавление строки текста вручную.
Текстовая строка может быть стандартными кодами (G, M и т. д.) или простым сообщением. Поскольку почта не имеет
контроля или информации о выводимых кодах, рекомендуется использоватьПройти черезкоманду экономно и только с
кодами, которые не могут быть выведены с помощью другого метода.

ТоonPassThroughфункция обрабатываетПройти черезРучная команда ЧПУ и передается текст, введенный с


командой. Следующий пример кода принимает текстовую строку с разделителями-запятыми, которые
разделяют текст на отдельные строки.

функция onPassThrough(текст) {
команды var = String(text).split(",");
for (текст в командах) {
writeBlock(команды[текст]);
}
}
Строки вывода кодов/текста, разделенные командами, используяПройти черезРучная команда ЧПУ

СловноДействиеКоманда Manual NC, вы можете настроить шаблон для использования сПройти черезкоманду,
если вам нужно выводить одни и те же коды в нескольких экземплярах.

6 Отладка
6.1 Обзор
Первое, на что следует обратить внимание при отладке, это отсутствие интерактивного отладчика, связанного с
постпроцессорами Autodesk CAM. Это означает, что вся отладочная информация должна выводиться с использованием настроек в
сообщении и с явной записью. В этом разделе описываются различные методы, которые вы можете использовать при отладке
вашего сообщения.

Отладка 6-166
Руководство по постпроцессору CAM 08.12.21
Вы также можете использовать редактор постпроцессора HSM для помощи в отладке вашей программы, как
описано в Запуск/отладка постараздел данного руководства

6.2 Постпроцессор dump.cps


Постпроцессор dump.cps обработает промежуточный файл ЧПУ и выведет файл, содержащий всю информацию,
переданную из HSM в постпроцессор. Выходной файл имеет расширение файла.дмп. Содержимое файла дампа
покажет настройки всех значений параметров и перечислит функции входа, вызываемые вместе с аргументами,
переданными функции, и любые настройки, которые применяются к этой функции. Выходные данные dump.cps
могут иметь огромное значение при разработке и отладке постпроцессора.

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.3 Отладка с использованием настроек постпроцессора


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

Отладка 6-167
Руководство по постпроцессору CAM 08.12.21
6.3.1 Режим отладки
режим отладки = истина;

НастройкаРежим отладкизначение true разрешает вывод отладочной информации из


отлаживать команды и обычно определяется в начале постпроцессора.

6.3.2 setWriteInvocations
setWriteInvocations (значение);

Аргументы Описание
ценность истинныйвыводит отладочную информацию для функций входа.

ВключениеsetWriteInvocationsсоздаст отладочный вывод в файле ЧПУ, аналогичный тому, который выводится с


помощьюсвалкапостпроцессор. Отладочная информация содержит входные функции (onParameter, onSectionи т. д.),
вызываемые во время постобработки, и параметры, с которыми они вызываются. Эта информация будет выведена до
фактического вызова функции входа и помечена с помощью!ОТЛАЖИВАТЬ: текст.

!DEBUG: onRapid(-0.433735, 1.44892, 0.23622)


N190 Z0.2362
!DEBUG: onLinear(-0.433735, 1.44892, 0.0787402, 39.3701)
N195 G1 Z0.0787 F39.37
!DEBUG: onLinear(-0.433735, 1.44892, -0.5, 19.685)
N200 Z-0.5 F19.68
Вывод 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));
Содержимое постпроцессора

6.4 Функции, используемые при отладке


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

Текст, предоставляемый функциям отладки, может содержать операции и подчиняться тем же правилам, что и определение
строковой переменной в JavaScript. Вы также можете указать векторы или матрицы, и они будут правильно
отформатированы для вывода. Например,

вар х = 3;
debug("Значение x равно " + x);

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

var numberFormat = createFormat ({десятичные числа: 4});


вар х = 3;
debug("Значение x равно " + numberFormat.format(x));

При записи выходной отладочной информации в журнал и/или файлы ЧПУ рекомендуется предварять текст отладки
фиксированной строкой, например «DEBUG –», чтобы ее было легко отличить от других выходных данных.

6.4.1 отладка
отладка (текст);

Аргументы Описание
текст Выходытекств файл журнала, когдаРежим отладкиустановлен наистинный.

Тоотлаживатьфункция выводит предоставленное текстовое сообщение в файл журнала только тогда, когдаРежим отладкипеременная
установлена в true. Текст выводится точно в том виде, в котором он был предоставлен, без какого-либо указания на то, что вывод был
сгенерированотлаживатьфункция.

6.4.2 журнал
журнал(текст);

Отладка 6-169
Руководство по постпроцессору CAM 08.12.21
Аргументы Описание
текст Выходытекств файл журнала.

Тобревнофункция выводит текст в файл журнала. Это похоже наотлаживатьфункционировать, но не зависит от


Режим отладкипараметр.

6.4.3 запись
написать(текст);

Аргументы Описание
текст Выходытекств файл NC.

Тописатьфункция выводит текст в файл ЧПУ. Он широко используется в постпроцессорах для вывода действительных
данных в файл ЧПУ, а не только отладочного текста.

6.4.4 запись комментария


написать комментарий (текст);

Аргументы Описание
текст Выходытекстк файлу ЧПУ в качестве комментария.

ТонаписатькомментарийФункция определена в постпроцессоре и используется для вывода комментариев в


выходной файл ЧПУ. Это описано в разделе onComment данного руководства.

6.4.5 запись отладки


Функция writeDebug(текст);

Аргументы Описание
текст Выходытекств файлы ЧПУ и журналы.

ТонаписатьОтладкафункция обычно не присутствует в универсальных постпроцессорах. Вы можете создать его для обработки
вывода отладочной информации как в файл журнала, так и в файл ЧПУ, чтобы в случае сбоя или успешного выполнения
постпроцессора вы все равно видели вывод отладки.

функция writeDebug(текст) {
if (true) { // вместо этого можно использовать глобальную настройку 'debugMode'

writeln("ОТЛАДКА - " + текст); // вместо этого можно использовать 'writeComment'


log("DEBUG - " + text); // вместо этого можно использовать 'debug'
}
}
Пример функции writeDebug

Отладка 6-170
Руководство по постпроцессору CAM 08.12.21
7 многоосевых постпроцессоров

7.1 Добавление основных многоосевых возможностей


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

ОбщийRS-274D Образец многоосевого постпроцессорадоступен для использования в качестве образца для реализации
многоосевой поддержки в любом постпроцессоре. Он поддерживает определенные CAM и жестко запрограммированные
конфигурации машины. Вы можете использовать этот постпроцессор для тестирования конфигураций поворотных осей и для
копирования функций в ваш пользовательский постпроцессор.

Обратите внимание, что поддержка операций 3+2 здесь не поддерживается, за исключением настройки
машины. См. раздел «Рабочая плоскость» вonSectionглаву для описания того, как обрабатывать операции
3+2.

7.1.1 Создание форматов поворотных осей


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

var abcFormat = createFormat ({десятичные числа: 3, forceDecimal: true, масштаб: DEG}); …

var aOutput = createVariable({prefix:"A"}, abcFormat); var


bOutput = createVariable({префикс:"B"}, abcFormat); var
cOutput = createVariable({prefix:"C"}, abcFormat);
Определите форматы поворотных осей

Тошкала: ГрадусовПараметр указывает, что углы поворотных осей будут выводиться в градусах. Если вам требуется,
чтобы вывод был в радианах, опуститемасштабпараметр.

7.1.2 Настройки и функции конфигурации машины


Конфигурация машины и связанные с ней настройки находятся вышеonOpenфункцию, а также определить и
активировать конфигурацию станка в постпроцессоре. Если ваш постпроцессор не имеет этого кода или
использует более старый метод определения конфигурации машины вonOpen, то вы должны скопировать этот
код изRS-274D Образец Многоосевойпостпроцессор в свой пост. Все строки между и включая следующие
строки должны быть скопированы.

// Запуск логики конфигурации машины. . .

// Конец логики конфигурации машины


Скопируйте этот код в свой пользовательский постпроцессор.

Многоосевые постпроцессоры 7-171

Руководство по постпроцессору CAM 08.12.21


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

функция onOpen () {
// определить и включить конфигурацию машины полученная
конфигурация машины = конфигурация машины. isReceived(); если (typeof
defineMachine == "функция") {
определитьМашину(); // жестко заданная конфигурация машины
}
активироватьМашина(); // включаем оптимизацию и настройки машины
Скопируйте этот код в верхнюю часть функции onOpen.

Переменные в верхней части кода конфигурации машины управляют некоторыми аспектами многоосевой
логики в постпроцессоре.

/ Запуск логики конфигурации машины


переменная компенсацияToolLength = ложь; //добавить длину инструмента к расстоянию поворота для поворотных головок без TCP

Переменная Описание
компенсироватьToolLength Эта переменная используется только для конфигураций вращающихся головок, которые не
поддерживают TCP. Когда он включен, длина корпуса инструмента (длина корпуса инструмента)
будет добавлена к расстоянию поворота. Конфигурации поворотных головок подробно
обсуждаются вНастройка точек для смещения осей вращенияраздел.
Многоосевые настройки

7.1.3 Создание жестко заданной конфигурации многоосевого станка


Вы можете использовать Конфигурацию станка в системе CAM для определения кинематики поворотной оси станка или ее
можно жестко запрограммировать в постпроцессоре. В этом разделе описывается, как жестко запрограммировать
конфигурацию машины внутри сценария постпроцессора.

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

функция определить машину () {


// если (!receivedMachineConfiguration) { //Конфигурация CAM-машины имеет приоритет если правда)
{ //жестко заданная конфигурация машины имеет приоритет
//определить кинематику станка var
useTCP = ложь; //поддержка TCP
var aAxis = createAxis({координата: X, таблица: истина, ось: [1, 0, 0], смещение: [0, 0, 0], диапазон: [-120, 30],
циклический: ложь, предпочтение: - 1, tcp:useTCP});
var cAxis = createAxis({координата: Z, таблица: истина, ось: [0, 0, 1], смещение: [0, 0, 0], циклическая: истина, сброс: 0,
tcp: useTCP});
Конфигурация машины = новая Конфигурация машины (ось a, ось c);
Многоосевые постпроцессоры 7-172

Руководство по постпроцессору CAM 08.12.21


Определение кинематики станка

Оси вращения можно настроить в соответствии с конфигурацией станка, используя параметры в


createAxisкоманда.

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

ось Определяет ось вращения оси вращения в формате вектора, т.е. [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

Многоосевые постпроцессоры 7-173

Руководство по постпроцессору CAM 08.12.21


Порядок, в котором оси определены вновая конфигурация машинывызов важен и должен использовать
следующий порядок.

Заказ Поворотная ось

1 Вращающийся наездник

2 Держатель поворотной головки

3 Носитель поворотного стола

4 Наездник на поворотном столе

СтанокКонфигурация Поворотная ось Порядок

// Настройка 4 осей, A вращается вокруг X, направление положительное


var aAxis = createAxis({координата: X, таблица: истина, ось: [1, 0, 0], циклическая: истина, tcp: ложь, предпочтение:
1}); Конфигурация машины = новая конфигурация машины (ось);

// Настройка 4 осей, A вращается вокруг X, направление отрицательное


var aAxis = createAxis({координата:X, таблица:true, ось:[-1, 0, 0], циклическая:true, tcp:false,, предпочтение:1});
Конфигурация машины = новая конфигурация машины (ось);
setMachineConfiguration (конфигурация машины);

// установка 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 (конфигурация машины);

// 5-осевая головка/настройка головки без TCP


var aAxis = createAxis({координата:X, таблица:false, ось:[-1, 0, 0], смещение:[0, 0, 8,75], диапазон:[-120,120],
tcp:false, предпочтение:-1});
var cAxis = createAxis({координата:Z, таблица:false, ось:[0, 0, 1], циклический:false, диапазон:[-180, 180],
TCP: Ложь});
Конфигурация машины = новая Конфигурация машины (ось a, ось c);
setMachineConfiguration (конфигурация машины);
Примеры поворотных конфигураций

Решение о том, должны ли выходные координаты быть в точке поворота вращающихся головок или в виртуальной позиции
всплывающей подсказки (как если бы инструмент был вертикальным), определяетсяsetVirtualTooltipфункция. Этот параметр
применяется только к вращающимся головкам, которые не поддерживают TCP. Положение виртуальной всплывающей подсказки
описано в Настройка точек для смещения осей вращенияраздел.

Многоосевые постпроцессоры 7-174

Руководство по постпроцессору CAM 08.12.21


//многоосевые настройки
если (machineConfiguration.isHeadConfiguration()) {
machineConfiguration.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

Руководство по постпроцессору CAM 08.12.21


Определение скорости подачи по нескольким осям

Исходное положение машины можно определить вопределить машинуфункция. Исходные положения


используются вписатьRetractфункция при позиционировании машины в координатах машины (G53) или
координатах WCS (G00).

/* исходные позиции */
// machineConfiguration.setHomePositionX(toPreciseUnit(0, IN)); //
machineConfiguration.setHomePositionY(toPreciseUnit(0, IN)); //
machineConfiguration.setRetractPlane(toPreciseUnit(0, IN));
Определение исходных координат машины

Наконец, механизм постпроцессора должен быть проинформирован о жестко заданной конфигурации машины.

// определяем конфигурацию машины


setMachineConfiguration (конфигурация машины); //информировать пост-ядро о жестко запрограммированной машине
конфигурация
если (получена конфигурация машины) {
warning(localize("Предоставленная конфигурация CAM-машины перезаписывается
постпроцессором."));
полученная конфигурация машины = ложь; // предоставленная CAM конфигурация машины перезаписывается
}
Информирование Post Engine о жестко заданной конфигурации машины

7.1.4 Расчет углов поворота


После определения конфигурации станка необходимо рассчитать углы поворотных осей и настроить
конечную точку инструмента для поворотных осей, если TCP не поддерживается. Это верно для CAM и жестко
заданных конфигураций машины. Это обрабатывается вактивироватьМашинафункционируют и не должны
изменяться. Он описан здесь только для справки.

ТооптимизироватьMachineAngles2функция вычисляет углы поворотных осей и корректирует координаты XYZ для


поворотных осей, если TCP не поддерживается. Следующие значения передаются в
оптимизироватьMachineAngles2функция.

Ценность Описание
OPTIMIZE_NONE Не корректируйте координаты осей вращения. Используется для режима TCP.
OPTIMIZE_BOTH Настройте координаты осей вращения. Для вращающихся головок, которые не
поддерживают TCP, возможно, что длина инструмента должна быть добавлена к
координатам конечной точки инструмента. Этот сценарий обсуждается далее в
Регулировка точек для поворотных головокраздел этой главы.
OPTIMIZE_TABLES Настройте координаты для поворотных столов. Для голов регулировка не
производится.
OPTIMIZE_HEADS Настройте координаты для вращающихся головок. Корректировка таблиц
производиться не будет.

Многоосевые постпроцессоры 7-176

Руководство по постпроцессору CAM 08.12.21


Ценность Описание
OPTIMIZE_AXIS Отрегулируйте координаты для осей вращения на основе настройки TCP,
связанной с определенными осями. Это обязательный параметр для
определенных в CAM конфигураций машин и жестко заданных
конфигураций машин, которые определяютTCPпеременная вcreateAxis
определения.
Настройки для корректировки входных координат для осей вращения

Регулировки поворотной головки, которые требуют, чтобы длина инструмента добавлялась к расстоянию смещения оси, не могут
быть отрегулированы с помощьюоптимизировать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многоосевые функции.

7.1.5 Вывод исходного положения вращения


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

/** Позиционирует оси вращения в быстром


режиме */ функция positionABC(abc, сила) {
if (typeof unwindABC == "функция") {
раскрутитьABC(abc, false);
}
если (сила) {
Многоосевые постпроцессоры 7-177

Руководство по постпроцессору CAM 08.12.21


силаABC();
}
var a = aOutput.format(abc.x); var
b = bOutput.format(abc.y); var c =
cOutput.format(abc.z); если (а ||
б || в) {
если (!убрано) {
if (typeof moveToSafeRetractPosition == "функция") {
moveToSafeRetractPosition(); }
еще {
написатьОтменить(Z);
}
}
по команде (COMMAND_UNLOCK_MULTI_AXIS);
gMotionModal.reset();
writeBlock(gMotionModal.format(0), a, b, c); установитьCurrentABC(abc); //
требуется для машинного моделирования
}
}
Вывод начальных положений осей вращения

Начальные положения осей вращения должны быть рассчитаны перед вызовомпозицияABCфункция. Функция
getInitialToolAxisABC() используется для получения начальных положений поворотных осей для многоосевых операций.

если (currentSection.isMultiAxis()) {
var abc = section.getInitialToolAxisABC();
positionABC(abc, правда);
}
Вычислите начальные углы поворота для многоосевой операции

7.1.6 Создание функций onRapid5D и onLinear5D


Теперь, когда вы определили машину, вам нужно убедиться, чтонаRapid5DиonLinear5D функции присутствуют. Это
функции, которые будут обрабатывать траекторию инструмента, созданную многоосевыми операциями. Если в
вашем посте уже определены эти функции, то отлично, что вы должны быть (почти) готовы к работе, если нет, то
добавьте следующие функции в свой пост.

функция onRapid5D (_x, _y, _z, _a, _b, _c) {


если (!currentSection.isOptimizedForMachine()) {
error(localize("Эта пост-конфигурация не была настроена для 5-осевой одновременной
траектории."));
возвращение;

}
если (ожидание компенсации радиуса >= 0) {
error(localize("Режим компенсации радиуса не может быть изменен при быстром перемещении.");
возвращение;

Многоосевые постпроцессоры 7-178

Руководство по постпроцессору CAM 08.12.21


}
вар х = 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) {
writeBlock(gMotionModal.format(0), x, y, z, a, b, c);
feedOutput.reset();
}
}
onБыстрая функция

функция 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);

// получаем число подачи


var fMode = feedMode == FEED_INVERSE_TIME ? 93 : 94;
var f = feedMode == FEED_INVERSE_TIME ? inverseTimeOutput.format(лента):
feedOutput.format(лента);

если (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 {

writeBlock(gfFeedModeModal.format(fMode), MotionModal.format(1), f);


}
}
Многоосевые постпроцессоры 7-179

Руководство по постпроцессору CAM 08.12.21


}
Функция onLinear5D

Обе эти функции в том виде, в котором они представлены, являются базовыми по своему характеру, и требования к вашей машине могут

потребовать некоторых изменений.

7.1.7 Многоосевые общие функции


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

Функция Описание
Конфигурация машины.isMultiAxisConfiguration() Возвращаетистинныйесли была определена конфигурация станка,
содержащая оси вращения. Для некоторых многоосевых станков
по-прежнему можно создавать выходные данные, если оси
вращения не были определены, выводя вектор оси инструмента
вместо положений осей вращения или используя углы Эйлера для
3+2 операций.
MachineConfiguration.getABCByPreference Возвращает предпочтительные углы поворотных осей для
(матрица, текущая, управляющая ось, тип, опции) предоставленной матрицы. Эта матрица обычно представляет собой
матрицу рабочей плоскости (currentSection.workPlane).
получитьABCByPreferenceболее подробно описано вРабочая плоскость
— 3+2 операциираздел.
section.isOptimizedForMachine() Возвращаетистинныйесли для секции рассчитаны углы
поворотных осей.
section.isMultiAxis() Возвращаетистинныйесли операция, указаннаяразделявляется
многоосевой операцией.
section.getGlobalInitialToolAxis() Возвращает исходную ось инструмента для предоставленного раздела в
виде вектора. Обычно используется в начале операции с помощью
текущий разделПеременная.
section.getInitialToolAxisABC() Возвращает начальные углы поворотных осей для предоставленной
секции в виде вектора. Обычно используется в начале операции с
помощьютекущий разделПеременная. Ошибка будет
сгенерирована, если конфигурация станка, содержащая круговые
оси, не была определена.
section.getGlobalFinalToolAxis() Возвращает конечную ось инструмента для предоставленного сечения в виде

вектора. Обычно используется в начале операции с использованием

получитьпредыдущую секцию().

section.getFinalToolAxisABC() Возвращает окончательные углы поворотных осей для


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

Многоосевые постпроцессоры 7-180

Руководство по постпроцессору CAM 08.12.21


Функция Описание
перечислены вРасчет осей вращенияраздел в этой
главе.
получить текущее направление () Возвращает текущие углы поворотных осей в виде вектора
в многоосевой операции. Он вернет прямой вектор
рабочей плоскости при работе с 3 осями или 3+2.
is3D() Возвращаетистинныйесли вся программа представляет собой 3-осевую
операцию без многоосевых операций. Возвращаетложныйесли хотя бы
одна операция является 3+2 или многоосевой операцией.

setCurrentABC(abc) Устанавливает текущую позицию ABC в почтовом движке. Эта


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

7.2 Вывод непрерывной оси вращения на шкале вращения


Существует два разных стиля, которые обычно используются для вывода по круговым осям: линейная шкала или круговая
шкала. Линейная шкала является более стандартным случаем в современных машинах и будет перемещаться по
прогрессивной шкале, аналогично выходу линейной оси. Например, значение 720 градусов сместит ось на два оборота от 0
градусов. Линейная шкала почти всегда используется с прерывистыми осями и может использоваться с непрерывной осью
вращения.

С другой стороны, поворотная шкала обычно выводит положения угла поворота от 0 до 360 градусов, обычно
со знаком ±, указывающим направление. Если знак не требуется и система управления всегда будет выбирать
кратчайший путь, то довольно просто вывести ось вращения на шкалу вращения, просто задав ее как
циклическую ось с диапазоном от 0 до 360 градусов.

var aAxis = createAxis({координата:0, таблица:true, ось:[1, 0, 0],циклический: истина, диапазон: [0, 360]});
Создайте ось вращения, используя шкалу вращения. Машина выберет кратчайший путь

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

var aAxis = createAxis({координата:0, таблица:true, ось:[1, 0, 0],циклический: правда});


Создайте круговую ось с помощью линейной шкалы при выводе с помощью круговой шкалы

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

// Начало вывода поворотной шкалы


функция createRotaryVariable (спецификаторы, формат) {
вернуть новую RotaryVariable(спецификаторы, формат);
}

function RotaryVariable(спецификаторы, формат) {


if (!(этот экземпляр RotaryVariable)) {
Многоосевые постпроцессоры 7-181

Руководство по постпроцессору CAM 08.12.21


throw new Error(localize("Конструктор RotaryVariable вызывается как функция.");
}
this.variable = createVariable (спецификаторы, формат);
this.format2 = формат;
этот.текущий = 0;
}

RotaryVariable.prototype.format = функция (значение) {


// расчет угла между 0-360 градусами
var angle = value % (Math.PI * 2);
угол = угол < 0 ? угол + (Math.PI * 2): угол;

// рассчитать правильное направление (знак) для выходных углов


var delta = this.format2.getResultingValue(value - this.current); если
(дельта == 0) {
угол = this.variable.getCurrent(); }
иначе если (дельта < 0) {
если (this.format2.getResultingValue(угол) == 0) {
угол = Math.PI * 2;
}
угол *= -1;
}
это.текущее = значение;
вернуть this.variable.format(угол); };

RotaryVariable.prototype.reset = функция () {
вернуть this.variable.reset(); };

RotaryVariable.prototype.disable = функция () {
вернуть this.variable.disable(); };

RotaryVariable.prototype.enable = функция () {
вернуть this.variable.enable(); };

// Конец вывода поворотной шкалы


Определение функций поворотной шкалы

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

// aOutput = createVariable({prefix:"A"}, abcFormat); Выход =


создатьRotaryVariable({префикс: "A"}, abcFormat);
Создайте выходную переменную с помощью поворотной шкалы

Многоосевые постпроцессоры 7-182

Руководство по постпроцессору CAM 08.12.21


Больше никаких модификаций не требуется.

7.3 Настройка точек для смещения осей вращения


Ядро постпроцессора поддерживает таблицы смещений и головок, когда на машине не поддерживается протокол TCP.
Смещения от начала координат детали до центра(ов) вращения должны быть определены при создании оси. Это
делается с помощьюкомпенсироватьпараметр вcreateAxis.

var aAxis = createAxis({координата:X, таблица:false, ось:[-1, 0, 0],смещение: [0, 0, 8,75], диапазон: [-120,120],
tcp:false, предпочтение:-1});

Создайте вращающуюся головку со смещением

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

Поворотная ось Поворотная ось

Вращающийся наездник Расстояние от упора инструмента до точки поворота

Держатель поворотной головки Расстояние от точки вращения Head Rider до точки


вращения Head Carrier
Носитель поворотного стола Расстояние от начала детали до центра стола
Наездник на поворотном столе Расстояние от начала детали до центра стола
Смещения оси вращения без TCP

Многоосевые постпроцессоры 7-183

Руководство по постпроцессору CAM 08.12.21


Ссылки на поворотную головку

При определении смещения поворотного стола определение смещения — это все, что необходимо до расчета углов
поворота и преобразованных координат.

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

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

Многоосевые постпроцессоры 7-184

Руководство по постпроцессору CAM 08.12.21


Определение длины инструмента

Вывод координат смещения головки может быть либо в точке поворота оси, либо в конечной точке инструмента, когда оси
вращения находятся на 0 градусов (инструмент расположен вертикально). Обычно вы настраиваете станок с острием
инструмента на Z0. В этом случае выходные координаты будут на виртуальной вершине инструмента, что означает, что
координаты будут там, где положение вершины инструмента было бы, когда оси вращения находятся на 0 градусов, даже
когда оси наклонены.

Виртуальная подсказка

ТоmachineConfiguration.setVirtualTooltipФункция используется для определения того, находятся ли выходные


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

7.4 Расчет многоосевого положения инструмента


Можно вручную рассчитать линейное положение станка на основе положения конечной точки инструмента или положение
конечной точки инструмента на основе линейного положения станка на основе положений оси вращения. То
machineConfiguration.getOptimizedPositionфункция выполняет оба преобразования.

machineConfiguration.getOptimizedPosition (текущий, abc, tcpType, OptimizedType, сила)


Отрегулируйте координату для положений оси вращения

Многоосевые постпроцессоры 7-185

Руководство по постпроцессору CAM 08.12.21


Параметр Тип переменной Описание
Текущий Вектор Либо вершина инструмента, либо положение станка XYZ на основеtcpType.
азбука Вектор Позиции поворотной оси.
tcpType Ценность Тип преобразования.
ОптимизироватьТип Ценность Тип оптимизации.
сила логический Установите значение true, чтобы настроить значения, даже если TCP
действует. Действительно для TCP_XYZ_OPTIMIZED и TCP_TOOL_OPTIMIZED.
Параметры getOptimizedPosition

Ценность Описание Текущее входное значение

TCP_XYZ Преобразует кончик инструмента в Подсказка инструмента

положение станка XYZ.

TCP_TOOL Преобразует положение станка XYZ в Машина XYZ


положение кончика инструмента.
TCP_XYZ_OPTIMIZED Преобразует вершину инструмента в Позиция, указанная в
позицию XYZ станка только тогда, когда onRapid5D и onLinear5D.
входные координаты корректируются для
осей вращения (не TCP).
TCP_TOOL_OPTIMIZED Преобразует положение XYZ станка в Позиция, указанная в
положение вершины инструмента только тогда, onRapid5D и onLinear5D.
когда входные координаты корректируются для
осей вращения (не TCP).
Значения tcpType

Ценность Описание
OPTIMIZE_BOTH Настройте координаты для столов и головок.
OPTIMIZE_TABLES Настройте координаты только для поворотных столов.
OPTIMIZE_HEADS Настройте координаты только для поворотных головок.
Значения типа оптимизации

// рассчитываем положение станка XYZ по положению кончика инструмента


var xyz = machineConfiguration.getOptimizedPosition (подсказка, abc, TCP_XYZ, OPTIMIZE_BOTH,
ложь);

функция onRapid5D(_x, _y, _z, _a, _b, _c) {


// вычисляем положение кончика инструмента

// если входные координаты не настроены для осей вращения, выходная координата будет //
такой же, как и входная координата
var toolTip = machineConfiguration.getOptimizedPosition(
новый вектор (_x, _y, _z), новый вектор (_a, _b,
_c), TCP_TOOL_OPTIMIZED, OPTIMIZE_HEAD,

Многоосевые постпроцессоры 7-186

Руководство по постпроцессору CAM 08.12.21


ложный);

Пример преобразования координат

7.5 Обработка проблемы сингулярности в постпроцессоре


Ядро постпроцессора решает проблему, когда направление оси инструмента приближается к сингулярности станка.
Сингулярность определяется как ориентация оси инструмента, которая перпендикулярна оси вращения, столу или
головке. Когда направление инструмента приближается к сингулярности, вы можете заметить, что ось вращения
может начать сильно раскачиваться, даже если ось инструмента имеет лишь небольшое отклонение. Если вы можете
представить станок с цапфой оси А, несущей стол оси С, а ось инструмента равна 0, sin(.001), cos(.001). Это приводит к
тому, что выходные поворотные положения равны A.001 C0. Теперь, если поворотная ось изменится на 0, sin(.001),
cos(.001), изменение менее чем на 0.002 градуса, вы заметите, что поворотные позиции будут A.001 C90. Вы можете
видеть, где очень небольшое изменение направления оси инструмента (<.

Логика сингулярности в ядре будет массировать направление оси инструмента, чтобы удерживать инструмент в пределах допуска и
минимизировать движение оси вращения в этих случаях. Также была реализована защита, которая линеаризует движения вокруг
сингулярности. Эта линеаризация добавит положения инструмента по мере необходимости, чтобы конечная точка инструмента
оставалась в пределах допуска детали.

Инструмент Направление приближения к сингулярности

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

machineConfiguration.setSingularity(настройка, метод, конус, угол, допуск, linearizationTolerance)


Многоосевые постпроцессоры 7-187

Руководство по постпроцессору CAM 08.12.21


Переменная Описание
регулировать Установлен вистинныйчтобы включить оптимизацию сингулярности в постпроцессоре. Оптимизация
сингулярности включает в себя возможность регулировки оси инструмента для минимизации проблем
сингулярности (большое перемещение оси вращения, когда ось инструмента приближается к
перпендикуляру к оси вращения) и линеаризацию перемещений вокруг сингулярности, чтобы
удерживать конечную точку инструмента в пределах допуска. По умолчаниюистинный.

метод Если установлено значение SINGULARITY_LINEARIZE_OFF, оно отключает линеаризацию


перемещений, чтобы конечная точка инструмента оставалась в пределах допуска
запрограммированной траектории инструмента вокруг сингулярности.
SINGULARITY_LINEARIZE_ROTARY линеаризует движения вокруг сингулярности. Дополнительные
точки добавляются, чтобы удерживать инструмент в пределах указанного допуска, и
оптимизированы для вращательного движения, как если бы инструмент перемещался вокруг
цилиндра или другого вращающегося элемента. SINGULARITY_LINEARIZE_LINEAR также добавит
дополнительные точки, чтобы инструмент оставался в пределах допуска, но при этом конечная
точка инструмента будет двигаться по прямой линии. По умолчанию
SINGULARITY_LINEARIZE_ROTARY.
конус Указывает угловое расстояние, в пределах которого должен находиться вектор оси
инструмента относительно точки сингулярности, прежде чем будет активирована логика
сингулярности. Обычно это небольшая величина (менее 5 градусов), так как чем дальше ось
инструмента от сингулярности, тем менее заметны будут колебания осей вращения и тем
меньшую пользу даст эта функция. Этот параметр указывается в радианах, и его значение по
умолчанию равно 0,052 (3 градуса).
угол Минимальное угловое дельта-движение, которое оси вращения должны сместить до того, как будет
рассмотрена корректировка вектора оси инструмента для оптимизации сингулярности. Этот предел
используется для предотвращения корректировки вектора оси инструмента, когда оси вращения
не сильно колеблются. Обычно это значение составляет 10 градусов или более. Этот параметр
указывается в радианах, и его значение по умолчанию равно 0,175 (10 градусов).
толерантность Значение допуска, используемое для удержания инструмента в пределах допуска, когда ось инструмента
регулируется для минимизации движения оси вращения вокруг сингулярности. Значение по умолчанию
— 0,04 мм (0,0015 дюйма).

линеаризацияДопуск Значение допуска, используемое при добавлении дополнительных точек, чтобы удерживать конечную точку

инструмента в пределах допуска запрограммированного перемещения, когда ось инструмента находится вблизи

сингулярности. Значение по умолчанию — 0,04 мм (0,0015 дюйма).

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

7.6 Перемотка поворотных осей при достижении пределов


Ядро постпроцессора будет выбирать начальные углы поворотных осей на основе наилучшего возможного решения, чтобы
избежать ситуаций перемотки назад, когда одна из поворотных осей выходит за свои пределы. Это достигается путем сканирования
всей операции, чтобы увидеть, требуется ли перемотка осей вращения из-за нарушения предельных значений.

Многоосевые постпроцессоры 7-188

Руководство по постпроцессору CAM 08.12.21


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

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

Когда требуется перемотка назад, к пользовательскому постпроцессору можно добавить группу функций для обработки
фактической перемотки затронутой поворотной оси. Этот код можно легко скопировать в ваш пользовательский
постпроцессор и изменить в соответствии с вашими потребностями, приложив немного усилий.

Одна настройка, которая очень важна при определении оси вращения, этоциклическийпараметр в вызове 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

Руководство по постпроцессору CAM 08.12.21


}
Отменить/перенастроить параметры, определенные в defineMachine

Переменная Описание
выполнять перемотки При установке наложныйошибка будет генерироваться, когда требуется перемотка
поворотной оси. Установка его наистинныйвключит логику перемотки..
safeRetractDistance Определяет расстояние, которое будет добавлено к позиции отвода, когда инструмент располагается
за материалом заготовки, чтобы безопасно удалить его из заготовки. Если установлено значение 0,
то инструмент будет отводиться на внешний припуск плюс расширение припуска.

сейфретрактфид Определяет скорость подачи для отвода инструмента перед перемоткой оси вращения.
safePlungeFeed Определяет скорость подачи для погружения инструмента обратно в деталь после перемотки
оси вращения.
акцииРасширение По умолчанию инструмент отводится за пределы заданного припуска. Вы можете
расширить определенный запас со всех сторон, определивзапасПособиевектор,
который содержит значение расширения для X, Y и Z.
Переменные, управляющие отводом инструмента

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

// Запуск логики onRewindMachine …

// Конец логики onRewindMachine


Скопируйте этот код в свой пост

Функция Аргументы Описание


onRewindMachineEntry (никто) Эта функция вызывается в начале процесса
автоматической перемотки и позволяет
пользователю переопределить логику перемотки
по умолчанию. Возвращениеистинныйиз этой
функции отключит логику перемотки в почтовом
движке, аложныйпродолжит процесс перемотки/
реконфигурации.
onMoveToSafeRetractPosition (никто) Перемещает инструмент в безопасное положение
отвода после отвода инструмента от детали.
onRotateAxes х, у, г, а, б, в Перемещает оси вращения в их новое положение,
как предусмотреноа, б, впосле перемещения
инструмента в безопасное положение.
onReturnFromSafeRetractPosition х, у, г Перемещает линейные оси в положение
инструмента, когда он был отведен от
детали.
Функции ввода с автоматической перемоткой назад

Многоосевые постпроцессоры 7-190

Руководство по постпроцессору CAM 08.12.21


ТоonRewindMachineEntryФункция используется для отмены или дополнения стандартной логики перемотки назад. Он просто
вернетсяложныйкогда желательна стандартная логика перемотки, заключающаяся в отводе инструмента, изменении
положения осей вращения и изменении положения инструмента. К этой функции можно добавить код для элементов
управления, которые просто требуют сброса энкодера или вывода нового положения оси вращения, когда элемент
управления будет автоматически отслеживать инструмент с движением оси вращения. В следующем примере энкодер оси C
сбрасывается, когда он в настоящее время кратен 360 градусам, а ось B не изменяется.

/** Разрешить пользователю переопределять логику


onRewind. */ функция onRewindMachineEntry(_a, _b, _c) {
// сброс поворотного энкодера, если он поддерживается, чтобы избежать большой перемотки

назад if (false) { // отключено по умолчанию

if ((abcFormat.getResultingValue(_c) == 0) && !abcFormat.areDifferent(getCurrentDirection().y, _b)) {

writeBlock(gAbsIncModal.format(91), gFormat.format(28), "C" + abcFormat.format(0));


writeBlock(gAbsIncModal.format(90));
вернуть истину;

}
}
вернуть ложь;
}
Пример кода для сброса энкодера вместо перемотки оси C

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

ТоonMoveToSafeRetractPositionФункция управляет перемещением в безопасное положение после отвода инструмента


от детали и перед изменением положения осей вращения. Обычно он перемещается в исходное положение по оси Z
и, возможно, по осям X и Y, используя блок стиля G28 или G53. Вы должны найти аналогичный код для отвода
инструмента при позиционировании осей вращения для операции 3+2 и впри закрытиифункция, которая
позиционирует инструмент в конце программы. Вы должны использовать ту же логику, что и в этих областях, для
onMoveToSafeRetractPositionфункция.

/**Отведите в безопасное положение перед индексацией


роторов.*/ функция onMoveToSafeRetractPosition() {
написатьОтменить(Z); // возврат в исходное положение // отмена TCP,

чтобы инструмент не следовал за поворотными кругами

если (currentSection.isMultiAxis() && operationSupportsTCP) {


отключить компенсацию длины (ложь);
}

if (false) { // разрешить перемещение в безопасную позицию по X и Y


написатьRetract(X, Y);
}
}
Переместитесь в безопасное положение перед изменением положения осей вращения

Многоосевые постпроцессоры 7-191

Руководство по постпроцессору CAM 08.12.21


ТоonRotateAxesФункция используется для позиционирования поворотных осей в их новое положение, рассчитанное пост-
движком._а, _б, _вопределить новое положение оси вращения._х, _у, _zследует игнорировать и не использовать.
/**Повернуть оси в новое положение выше положения повторного
входа*/ функция onRotateAxes (_x, _y, _z, _a, _b, _c) {
// позиционирование поворотных

осей xOutput.disable();

yВыход.отключить();
zВывод.отключить();
invokeOnRapid5D(_x, _y, _z, _a, _b, _c);
xOutput.enable();
yВыход.включить();
zВыход.включить();
}
Позиционирование осей вращения

ТоonReturnFromSafeRetractPositionФункция управляет возвратом инструмента в положение исходного


отвода за припуск. Эта функция вызывается после повторного позиционирования круговых осей.

/**Возврат из безопасного положения после индексации


роторов.*/ функция onReturnFromSafeRetractPosition (_x, _y, _z) {
// восстановить TCP / компенсацию длины
инструмента if (!lengthCompensationActive) {
writeBlock(gFormat.format(getOffsetCode()), hFormat.format(tool.lengthOffset));
длинаКомпенсацияАктив = Истина;
}

// позиция по XY
forceXYZ();
xOutput.reset();
yВыход.сброс();
zВывод.отключить();
invokeOnRapid(_x, _y, _z);

// позиция в Z
zOutput.enable();
invokeOnRapid(_x, _y, _z);
}
Возврат из безопасного положения после изменения положения осей вращения

7.7 Многоосевые подачи


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

Многоосевые постпроцессоры 7-192

Руководство по постпроцессору CAM 08.12.21


точный. Обратите внимание, что если ваш станок поддерживает программирование TCP (точка управления инструментом), то он,
вероятно, поддерживает скорость подачи с прямой подачей в минуту (FPM) во время многоосевых контурных перемещений и не
требует скорости подачи обратного времени или DPM.

Расчеты скорости подачи по нескольким осям обрабатываются пост-движком и будут работать со всеми конфигурациями
станков; стол/стол, голова/голова и голова/стол. Одной из возможностей расчета скорости подачи по нескольким осям
является то, что он учитывает фактическое движение вершины инструмента по отношению к движению осей вращения, а не
только прямолинейное движение вдоль запрограммированной вершины инструмента, создавая более точные скорости
подачи по нескольким осям. На следующем рисунке движение по дуге, вызванное движением оси вращения (зеленая дуга),
используется в расчетах вместо прямолинейного движения, генерируемого HSM (синяя линия).

Фактический путь инструмента на станке используется в расчетах скорости подачи

Поддержка многоосевой подачи осуществляется в конфигурации CAM-машины или вопределить машину


функция для жестко заданной конфигурации машины.

//многоосевые подачи
если (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-193

Руководство по постпроцессору CAM 08.12.21


);
}
Включение многоосевых подач

Переменная Описание
режим подачи 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, если она еще не существует.

var gFeedModeModal = createModal({}, gFormat); // модальная группа 5 // G93-94 …

var inverseFormat = createFormat({decimals:4, forceDecimal:true}); …

var inverseTimeOutput = createVariable({prefix:"F", force:true}, feedFormat); …

СоздаватьинверстимеаутпутПеременная

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

Многоосевые постпроцессоры 7-194

Руководство по постпроцессору CAM 08.12.21


функция onLinear5D(_x, _y, _z, _a, _b, _c, подача,режим подачи) {
если (!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 fMode = feedMode == FEED_INVERSE_TIME ? 93 : 94;
var f = feedMode == FEED_INVERSE_TIME ? inverseTimeOutput.format(канал):
feedOutput.format(канал);

если (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

Многоосевые постпроцессоры 7-195

Руководство по постпроцессору CAM 08.12.21


написатьБлок(gFeedModeModal.format(94),gMotionModal.format(1), gFormat.format(40), x, y, z,
ж);
Опциональный сброс режима FPM во всех выходных блоках с подачами

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

var length = machineConfiguration.getMultiAxisLength(x, y, z, a, b, c);


Рассчитайте длину многоосевого перемещения

getMultiAxisMoveLengthвернусьMoveLengthобъект, к которому затем можно получить доступ, используя следующие функции


для получения различных длин перемещения.

Функция Описание
getRadialToolTipMoveLength Расчетное перемещение конечной точки инструмента вдоль фактической траектории инструмента.

getLinearMoveLength Комбинированное линейное дельта-движение.

getRadialMoveLength Комбинированное вращательное дельта-движение.

Функции MoveLength

var moveLength = getMultiAxisMoveLength(x, y, z, a, b, c); var


toolTipLength = moveLength.getRadialToolTipMoveLength(); var
xyzLength = moveLength.getLinearMoveLength();
var abcLength = moveLength.getRadialMoveLength();
Получить вычисленные длины перемещения для наконечника инструмента, линейных осей и осей вращения

8 Добавление поддержки зондирования


Fusion 360, Inventor CAM и HSM поддерживают несколько стилей операций измерения, включая измерение WCS,
измерение геометрии и проверку поверхности. Хотя возможности зондирования поддерживаются многими
библиотечными постпроцессорами, они поддерживаются не всеми из них, и пользовательские постпроцессоры могут
не иметь этих возможностей. В этой главе обсуждаются необходимые изменения в постпроцессоре для поддержки
операций измерения.

8.1 Зондирование WCS


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

Добавление поддержки зондирования 8-196

Руководство по постпроцессору CAM 08.12.21


Фьюжн 360 Изобретатель САМ HSMWorks

Вы можете проверить постпроцессор, с которым вы работаете, чтобы узнать, поддерживает ли он зондирование WCS. Самый простой
способ — попытаться выполнить операцию зондирования поста, пост не удастся, если зондирование не поддерживается. Вы можете
увидеть сообщение об ошибке, жалующееся на то, что скорость шпинделя выходит за допустимые пределы (операции измерения не
включают шпиндель) или сообщение о том, что цикл измерения должен обрабатываться в постпроцессоре.

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Ошибка: Скорость

вращения шпинделя вне допустимого диапазона.

Ошибка в строке: 735


Ошибка в работе: «WCS Probe1»
Ошибка при обработке onSection() для записи 261.
################################################################################

Сообщение об ошибке скорости вращения шпинделя

##################################################
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # Ошибка. обрабатывается в
конфигурации поста.
Ошибка в работе: «WCS Probe1»
Ошибка при обработке onCycle() для записи 280.
################################################################################

Сообщение об ошибке, специфичное для машины

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

8.1.1 Операции зондирования


Имеется образец модели для тестирования логики зондирования в постпроцессоре. В Fusion 360 он содержится в папке
CAM Samples/Post Processor. Эта модель содержит часть, предназначенную для тестирования циклов зондирования с
использованием доступных операций зондирования WCS.

Добавление поддержки зондирования 8-197

Руководство по постпроцессору CAM 08.12.21


Перевод: английский - русский - www.onlinedoctranslator.com

Образец зондирующей части

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

Интеллектуальный выбор зонда

Операции зондирования WCS считаются постоянным циклом в постпроцессоре и поэтому выводятся в


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

Добавление поддержки зондирования 8-198

Руководство по постпроцессору CAM 08.12.21


циклТип Описание
зондирование-х Зондирует стену перпендикулярно оси X.
зондирование-y Исследует стену перпендикулярно оси Y.
зондирование-z Исследует стену перпендикулярно оси Z.
зондирование-х-стена Определяет толщину стенки по оси X
зондирование стены Определяет толщину стенки по оси Y
зондирование-х-канал Определяет открытое расстояние между двумя стенами по оси X
зондирование-y-канал Определяет открытое расстояние между двумя стенами по оси Y
зондирование-x-канал-с-островом Измеряет открытое расстояние между двумя стенами с
островком между стенами по оси X.
зондирование-y-канал-с-островом Измеряет открытое расстояние между двумя стенами с
островком между стенами по оси Y.
зондирование-xy-круговой-босс Ощупывает внешнюю стенку круглой бобышки
зондирование-xy-круговой-частичный-босс Исследует внешнюю стенку круглой бобышки, которая не
является полной на 360 градусов.
зондирование-xy-круглое-отверстие Зондирует внутреннюю стенку круглого отверстия

зондирование-xy-круглое-частичное отверстие Исследует внутреннюю стенку круглого отверстия, которое не


является полным на 360 градусов.

зондирование-xy-круглое-отверстие-с-островом Зондирует внутреннюю стенку круглого отверстия островком в


отверстии
зондирование-xy-прямоугольный-босс Прощупывает наружные стенки прямоугольного выступа
зондирование-xy-прямоугольное-отверстие Зонды внутренних стенок прямоугольного отверстия
зондирование-xy-прямоугольное-отверстие-с-островом Зондирует внутренние стенки прямоугольного отверстия с островком в
отверстии
зондирование-xy-внутренний угол Прощупывает внутренний угол. Изменяет исходную точку и
поворот детали.
зондирование-xy-внешний угол Прощупывает внешний угол. Изменяет исходную точку и
поворот детали.
зондирование-x-угол-плоскости Исследует стену под углом к оси X. Изменяет
вращение детали.
угол зондирования-y-плоскости Исследует стену под углом к оси Y. Изменяет
вращение детали.
Циклы зондирования

Параметры, определенные в операции зондирования WCS, передаются функциям цикла с помощьюцикл


объект. Доступны следующие переменные, на которые ссылаются как 'cycle.параметр'.

Параметр Описание
уголAskewДействие Этот параметр будет определен только с циклом углового измерения, когдаКосой
флажок установлен. Единственным допустимым параметром, когда он определен,
является строкастоп-сообщение.
подход1 Направление, в котором движется датчик, приближает его к детали. Это строковая
переменная, которая может бытьположительныйилиотрицательный.

Добавление поддержки зондирования 8-199

Руководство по постпроцессору CAM 08.12.21


Параметр Описание
подход2 Направление перемещения датчика по мере его приближения к детали для второй грани
многогранной операции. Это строковая переменная, которая может быть положительный
илиотрицательный.
Нижний Окончательное положение глубины вдоль оси датчика для касания детали.
оформление Высота, на которую быстро набирается датчик на пути к началу операции
измерения, и положение, в которое он возвращается после завершения
операции измерения.
глубина Инкрементальное расстояние без знака от верхней части детали вдоль
оси датчика, где датчик будет касаться детали.
скорость подачи Скорость подачи, с которой датчик будет приближаться к детали.

hasAngleTolerance Установите в 1, если задан угловой допуск. Угловой допуск


сохраняется вугол допускапараметр.
hasPositionalTolerance Установите в 1, если указан допуск на положение. Позиционный допуск
сохраняется втерпимостьПозицияпараметр.
hasSizeTolerance Установите в 1, если указан допуск размера. Допуск размера хранится
вдопускРазмерпараметр.
инкременткомпонент Установите на 1, еслиИнкрементный компонентфлажок установлен подРаспечатать
результаты.
outOfPositionAction Этот параметр будет определен только тогда, когдаВне позициифлажок установлен.
Единственным допустимым параметром, когда он определен, является строкастоп-
сообщение.
распечататьРезультаты Установите на 1, когдаРаспечатать результатыфлажок установлен в операции
зондирования.

зондЗазор Расстояние подхода в направлении операции зондирования. Датчик


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

втягивать Высота подачи до уровня измерения и отвода датчика после


завершения измерения.
склад Верх детали.
угол допуска Допустимое угловое отклонение геометрического элемента.
терпимостьПозиция Допустимое позиционное отклонение геометрического элемента.
допускРазмер Допустимое отклонение размера геометрического элемента.
ширина1 Ширина измеряемой бобышки или отверстия.
ширина2 Ширина второстепенных стенок (ось Y) прямоугольной бобышки или
исследуемого отверстия.
неправильное действие размера Этот параметр будет определен только при зондировании объекта, который определяет
фиксированный размер иНе тот размерфлажок установлен. Единственным допустимым
параметром, когда он определен, является строкастоп-сообщение.
Параметры зондирования

Добавление поддержки для зондирования 8-200

Руководство по постпроцессору CAM 08.12.21


8.1.2 Добавление основной логики зондирования
Добавление поддержки WCS Probing требует основной логики для вывода цикла зондирования, вспомогательных функций и
некоторой логики, добавленной в основные разделы постпроцессора. Вы должны сначала открыть постпроцессор, который содержит
поддержку зондирования, прежде чем начинать добавлять зондирование в ваш постпроцессор, поскольку логика и большая часть
кода останутся прежними. В большинстве стандартных постпроцессоров используются макросы измерения в стиле Renishaw (Fanuc,
Haas и т. д.), но существуют также элементы управления, которые поддерживают измерение без использования этих макросов,
например элементы управления Datron, Heidenhain и Siemens. Обязательно начните с наиболее близкого соответствия машине, для
которой вы создаете постпроцессор. В примерах, используемых в этой главе, используется код для макросов зондирования в стиле
Renishaw.

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

Функция Описание
подход Преобразует строку подхода к циклу в число (-1/1).
setProbeAngleMethod Определяет метод вывода (G68, G54.4, вращательный) для
циклов углового измерения.
setProbeAngle Выводит блоки вращения для циклов углового измерения. Этот вывод, возможно,

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

защищенопробемове Переводит датчик в защищенный режим (P9810).


getProbingArguments Форматирует стандартные коды для всех циклов зондирования на основе
параметров цикла зондирования. Эта функция обычно располагается
послеonCyclePointфункцию и, возможно, придется изменить, чтобы она
соответствовала вашему управлению.
Требуемые функции зонда

/** Преобразование подхода в знак. */


подход функции (значение) { …

функция setProbeAngleMethod() { …

/** Выходное смещение вращения на основе цикла углового измерения.


*/ функция setProbeAngle() {

}

Добавление поддержки зондирования 8-201

Руководство по постпроцессору CAM 08.12.21


функция protectedProbeMove(_cycle, x, y, z) {

}

функция getProbingArguments (цикл, updateWCS) { …

}
Требуемые функции углового датчика и датчика безопасного позиционирования

Основная логика для зондирования находится в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);
}
Необходимые модификации для поддержки зондирования

Добавление поддержки зондирования 8-202

Руководство по постпроцессору CAM 08.12.21


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

переключатель (тип цикла) {


случай «сверление»:

случай «зондирование-х»://скопировать из этой строки в перед случае «по умолчанию» …

дефолт:

Вызов макроса зонда

Добавьте следующий код вonCycleEndфункция для завершения операции зондирования.

функция onCycleEnd() {
если (isProbeOperation()) {
zВыход.сброс();
gMotionModal.reset();
writeBlock(gFormat.format(65), "P" + 9810, zOutput.format(cycle.retract)); // защищенный возврат
назад
} еще {

}

8.1.3 Добавление вспомогательной логики зондирования


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

вар probeWCSFormat = createFormat ({десятичные числа: 0, forceDecimal: true});


Требуется для форматирования кода WCS зонда

ТоgRotationModalmodal используется для управления выводом кодов вращения (G68, G68.2 и т. д.). Возможно, эта переменная
уже определена в постпроцессоре, но может потребоваться ее обновление для поддержки зондирования. Он должен быть
определен, как показано.

вар gRotationModal = createModal({


обмен: функция () {
если (probeVariables.probeAngleMethod == "G68") {
probeVariables.outputRotationCodes = true;
}
}
}, gFormat); // модальная группа 16 // G68-G69
Определение модального окна gRotationModal

Добавление поддержки зондирования 8-203

Руководство по постпроцессору CAM 08.12.21


Следующие переменные используются для управления выходными данными зондирования объектов и должны быть
определены вфиксированные настройкираздел в верхней части постпроцессора.

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;
Добавить в раздел собранного состояния

Следующие определения функций и переменных должны быть добавлены доonParameterфункция. То


onParameterФункция также должна иметь показанное условное добавление, если его там нет.

функция printProbeResults() {
вернуть currentSection.getParameter("printResults", 0) == 1;
}

вар probeOutputWorkOffset = 1;

Добавление поддержки зондирования 8-204

Руководство по постпроцессору CAM 08.12.21


функция onParameter (имя, значение) {
if (name == "probe-output-work-offset") {
probeOutputWorkOffset = (значение > 0)? значение: 1;
}
Добавить до и в функцию onParameter

Следующий код необходимо добавить вonSectionфункция.

если (tool.type != TOOL_PROBE) {


var outputSpindleSpeed = insertToolCall || силаСкорость шпинделя || isFirstSection() ||
rpmFormat.areDifferent(spindleSpeed, sOutput.getCurrent()) ||
(инструмент.по часовой стрелке != getPreviousSection().getTool().по часовой стрелке);

}
Не выводите скорость шпинделя с помощью щупа

установитьПробеАнгле(); // вывод угла поворота зонда, если требуется

// устанавливаем охлаждающую жидкость после того, как мы

расположились по оси Z setCoolant(tool.coolant);

Установите вращение на основе результатов углового измерения

если (isProbeOperation()) {
validate(probeVariables.probeAngleMethod != "G68", "Вы не можете проводить измерения, пока
действует вращение G68.");
validate(probeVariables.probeAngleMethod != "G54.4", "Вы не можете выполнять измерения, пока включена
компенсация ошибки установки заготовки G54.4.");
writeBlock(gFormat.format(65), "P" + 9832); // крутим щуп при
проверкеCreateResultsFileHeader();
} еще {
// осмотр поверхности
if (isInspectionOperation() && (typeofинспекцияProcessSectionStart == "функция")) {
инспекцияПроцессРазделНачало();
}
}

// определить подпрограмму

subprogramDefine (initialPosition, abc, убрано, zIsOutput);

убрано = ложь;
}
Добавить в конце функции onSection

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

Добавление поддержки зондирования 8-205

Руководство по постпроцессору CAM 08.12.21


функция getCoolantCodes(охлаждающая жидкость) {

varmultiCoolantBlocks = новый массив(); // создаем форматированный массив для передачи в выводимую строку

если (!охлаждающие жидкости) {

error(localize("Охлаждающие жидкости не определены.");


}
if (isProbeOperation()) { // избегаем выхода охлаждающей жидкости для зондирования

охлаждающая жидкость = COOLANT_OFF;

}
Отключить охлаждающую жидкость для измерительных операций

Зонд должен быть выключен, а коды углового зондирования должны выводиться вonSectionEndфункция.

функция onSectionEnd()
{…
если (isProbeOperation()) {
writeBlock(gFormat.format(65), "P" + 9833); // отключить зонд if
(probeVariables.probeAngleMethod != "G68") {
установитьПробеАнгле(); // вывод угла поворота зонда, если требуется
}
}
}

8.1.4 Добавление поддержки печати результатов исследования


Можно добавить свойство для управления выводом результатов зондирования в один файл или в отдельные файлы
для каждой операции зондирования/проверки.

singleResultsFile: {
title : "Создать один файл результатов",
description: "Установите значение false, если хотите сохранять результаты измерений для каждой траектории зонда/
проверки в отдельном файле",
группа : 0,
тип : "логическое",
ценность : истинный,

сфера : "Почта"
}
Добавьте свойство для управления выводом результатов проверки в один или несколько файлов.

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

вар isDPRNTopen = ложь;


Добавление поддержки зондирования 8-206

Руководство по постпроцессору CAM 08.12.21


проверка функцииCreateResultsFileHeader() { …

функция getPointNumber()
{…
}

функцияинспекцияWriteCADTransform() { …

функцияинспекцияWriteWorkplaneTransform()
{…
}

function writeProbingToolpathInformation(cycleDepth) { …

}
Включите функции результатов зондирования

8.2 Измерение геометрии


Геометрическое зондирование работает аналогично зондированию WCS. Он используется для измерения геометрических
характеристик детали во время обработки. Измеренные геометрические элементы проверяются на соответствие заданным
допускам по размеру и положению. Основываясь на результате, вы можете обновить износ инструмента или дать указание станку
прекратить обработку, если элемент выходит за пределы допуска. Определение геометрии запускается с помощьюГеометрия
зонда операция, указанная в меню PROBING.

Операция измерения геометрии

Циклы измерения диаметра делительной окружности (PCD) являются дополнением к измерению геометрии, которого нет в
измерении WCS. Как и все другие измерительные циклы, типы циклов PCD сохраняются вциклТип Переменная.

циклТип Описание
зондирование-xy-pcd-отверстие Ощупывает отверстия вокруг PCD.
зондирование-XY-PCD-босс Исследует боссов вокруг PCD.
Циклы измерения диаметра делительной окружности (PCD)

Добавление поддержки зондирования 8-207

Руководство по постпроцессору CAM 08.12.21


Геометрия PCD-зондирования

Как и в WCS Probing, параметры, определенные в операции Geometry Probing, передаются функциям цикла с
помощьюциклобъект. Они являются дополнением к параметрам, определенным для зондирования WCS, которые
также доступны в зондировании геометрии. Доступны следующие переменные, на которые ссылаются как 'cycle.
параметр'.

Параметр Описание
количество подфункций Количество геометрических объектов в операции измерения PCD.
pcdStartingAngle Начальный угол первого геометрического объекта, подлежащего измерению в
операции измерения PCD.
инструментДиаметрСмещение Определяет регистр смещения диаметра инструмента, используемый для обработки элемента.

инструментДлинаСмещение Определяет регистр смещения длины инструмента, используемый для обработки элемента.

инструментWearErrorCorrection Процент отклонения для обновления износа инструмента.


инструментWearUpdateThreshold Минимальное отклонение, которое вызовет обновление данных об износе инструмента.

обновитьToolWear Активируется, когда на контроллере должна быть активирована компенсация износа


инструмента.

ширинаФункция Диаметр геометрического элемента для операции зондирования PCD.


ширинаPCD Диаметр делительной окружности (PCD) геометрических элементов.
Параметры измерения геометрии

Чтобы добавить Geometry Probing в свой пост, вам сначала нужно реализовать WCS Probing. После этого потребуются лишь
незначительные изменения для поддержки Geometry Probing.

ТоprobeMultipleFeaturesпеременная указывает почтовому движку, что несколько геометрических объектов могут быть исследованы за одну
операцию. Логика проверки во всех сообщениях теперь поддерживает эту функцию, поэтому ее следует установить наистинный. Он должен
быть определен с другими переменными пост-движка (разрешенокруговыеплоскости,высокая скорость подачи, и т.д.).

highFeedrate = (единица измерения == IN) ? 500 : 5000;

Добавление поддержки зондирования 8-208

Руководство по постпроцессору CAM 08.12.21


probeMultipleFeatures = истина;
Включить зондирование нескольких геометрических объектов

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

случай "зондирование-xy-pcd-отверстие":

protectedProbeMove (цикл, x, y, z);


написатьБлок(
gFormat.format(65), "P" + 9819,
"A" + xyzFormat.format(цикл.pcdStartingAngle), "B" +
xyzFormat.format(цикл.numberOfSubfeatures), "C" +
xyzFormat.format(цикл.widthPCD),
"D" + xyzFormat.format(цикл.widthFeature), "K" +
xyzFormat.format(z - цикл.глубина), "Q" +
xyzFormat.format(цикл.probeOvertravel),
getProbingArguments(цикл, ложь)
);
если (цикл.updateToolWear) {
error(localize("Действие -Update Tool Wear- не поддерживается в этом цикле."));
возвращение;
}
ломать;
case "зондирование-xy-pcd-boss":
protectedProbeMove (цикл, x, y, z);
написатьБлок(
gFormat.format(65), "P" + 9819,
"A" + xyzFormat.format(цикл.pcdStartingAngle), "B" +
xyzFormat.format(цикл.numberOfSubfeatures), "C" +
xyzFormat.format(цикл.widthPCD),
"D" + xyzFormat.format(цикл.widthFeature), "Z" +
xyzFormat.format(z - цикл.глубина), "Q" +
xyzFormat.format(цикл.probeOvertravel), "R" +
xyzFormat.format(цикл .probeClearance),
getProbingArguments (цикл, ложь)
);
если (цикл.updateToolWear) {
error(localize("Действие -Update Tool Wear- не поддерживается в этом цикле."));
возвращение;
}
ломать;
Поддержка зондирования PCD в onCyclePoint

Добавление поддержки зондирования 8-209

Руководство по постпроцессору CAM 08.12.21


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

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

Осмотр поверхности запускается с помощьюОсмотрите поверхностьоперация, указанная в меню PROBING.

Проверка работы поверхности

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

Постпроцессоры инспекции будут иметьосмотрилиосмотреть поверхностьсуффикс, добавленный к имени


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

8.3.1 Проверка наземных операций


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

Добавление поддержки зондирования 8-210

Руководство по постпроцессору CAM 08.12.21


Интерфейс проверки поверхности

Операции Surface Inspect считаются циклом в постпроцессоре и поэтому вызывают onCyclePointфункции, хотя они
расширены винспекцияЦиклОсмотрфункция. Стандарт циклТиппеременная для определения типа цикла не
устанавливается для операций проверки поверхности, а скорее isInspectionOperationФункция используется для
определения, является ли это циклом проверки поверхности. Это дополнительно поясняется вДобавление
вспомогательной логики проверки поверхностираздел. В отличие от других циклов, которые передают одну точку
onCyclePointфункция, цикл Surface Inspect будет содержать следующие 3 точки для каждого местоположения цикла,
при этом каждое местоположение генерирует отдельный и последующий вызовonCyclePoint.

Место расположения Как определить Описание


Первый isFirstCyclePoint() Безопасный переход к месту проверки
Второй (дефолт) Инспекционный ход
Третий isLastCyclePoint() Отменить ход
Три балла за место проверки

Параметры, определенные в операции Inspect Surface, передаются функциям цикла с помощьюциклобъекта


или через параметры раздела (получитьпараметр). Эти параметры здесь не описываются, так как они
обрабатываются в основных функциях Surface Inspect, которые копируются из существующего постпроцессора
инспекции.

8.3.2 Добавление основной логики Inspect Surface


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

Добавление поддержки зондирования 8-211

Руководство по постпроцессору CAM 08.12.21


Имя библиотеки постов Имя файла
Инспекция Фанук Fanuc Inspection.cps
HAAS (до NGC) Осмотр поверхности Haas проверяет поверхность.cps

HAAS — контрольная поверхность нового поколения Haas нового поколения Inspect Surface.cps
Хайденхайнская инспекция Heidenhain Inspection.cps
Siemens SINUMERIK 840D Осмотр Siemens 840D Inspection.cps
Постпроцессоры, поддерживающие операции проверки поверхности

Вы также можете поискать в ИнтернетеБиблиотека постов для Autodesk Fusion 360, чтобы увидеть, были ли добавлены какие-либо
другие постпроцессоры с возможностями проверки.

Поиск сообщений, поддерживающих операции проверки поверхности

Основной код для логики Inspect Surface расположен в конце постпроцессора. Вам нужно будет
скопировать из определения описания, расположенного послепри закрытииилиonTerminateв конец
файла и добавьте этот код в конец вашего постпроцессора.

description = "HAAS — контрольная поверхность следующего поколения";


минимальная версия = 42251;
longDescription = "Общий пост для системы управления HAAS Next Generation с возможностью проверки
поверхности.";
Скопируйте этот код в конец файла для базовой логики проверки поверхности.

8.3.3 Добавление вспомогательной логики Inspect Surface


Существует ряд местоположений, которые содержат логику поддержки операций Inspect Surface в постпроцессоре.
Вы можете обратиться к любому из универсальных постпроцессоров, поддерживающих операции Inspect Surface,
для примера реализации этого кода.

Добавление поддержки зондирования 8-212

Руководство по постпроцессору CAM 08.12.21


Добавьте следующий код в концеonOpenфункция.

// Контроль поверхности зондирования

если (тип проверкиWriteVariables == "функция") {


проверкаWriteVariables();
}
Добавить в конец функции onOpen
Для многоосевых станков важно, чтобы фактическая конфигурация станка была определена и не зависела от кодов
плоскости 3+2 и/или выходных данных IJK. Пожалуйста, обратитесь кМногоосевые постпроцессорыраздел для
описания реализации многоосевой поддержки вашего постпроцессора.

Если ваш постпроцессор не имеетisInspectionOperationопределенную функцию, затем добавьте ее после


isProbeOperationфункция.

функция isInspectionOperation(раздел) {
вернуть section.hasParameter("стратегия-операции") && (section.getParameter("стратегия-операции") ==
"inspectSurface");
}
Добавить isInspectionOperation

Следующий код необходимо добавить вonSectionфункция.

если (!isInspectionOperation(currentSection) &&!isProbeOperation() &&


(вставитьToolCall ||
силаСкорость шпинделя ||
isFirstSection() ||
(rpmFormat.areDifferent(SpindleSpeed, sOutput.getCurrent())) || (инструмент.по
часовой стрелке != getPreviousSection().getTool().по часовой стрелке))){
ForceSpindleSpeed = Ложь;
Не выводите скорость шпинделя с помощью щупа

В концеonSectionфункцию, но перед тем, как будут определены какие-либо подпрограммы, добавьте следующий код.

if (isInspectionOperation(currentSection) && (typeofинспекционныйProcessSectionStart == "функция"))


{
инспекцияПроцессРазделНачало();
}
Инициализировать операцию проверки поверхности

В верхней частиonCyclePointдобавьте функцию в следующий код.

if (isInspectionOperation(currentSection) && (typeofинспекцияCycleInspect == "функция")) {


инспекцияЦиклИнспект(цикл, x, y, z);
возвращение;
}
Добавление поддержки зондирования 8-213

Руководство по постпроцессору CAM 08.12.21


Вызов функции проверки контрольной поверхности

В началеonSectionEndдобавьте следующий код.

if (typeofинспекцияProcessSectionEnd == "функция") {
инспекцияПроцессРазделКонец();
}
Завершите операцию проверки поверхности

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

if (typeofинспекцияProgramEnd == "функция") {
КонецПрограммыинспекции();
}
Завершение программы проверки поверхности

9 аддитивных возможностей и постпроцессоров


До сих пор в этом руководстве мы обсуждали постпроцессоры, поскольку они относятся к субтрактивной обработке, но Fusion 360
также поддерживает принтеры с аддитивным FFF (изготовление сплавленной нити). В этой главе обсуждаются основы выбора станка,
способного к аддитивному производству, созданию траектории аддитивного инструмента, созданию выходных данных, а также
детали аддитивного постпроцессора.

9.1 Начало работы


В этом разделе представлен обзор создания траектории аддитивного инструмента, но не будут подробно
описаны все функции аддитивных возможностей Fusion 360, которых достаточно, чтобы вы начали
постобработку.

Конечно, для начала вам понадобится модель, которую вы хотите распечатать. Для примеров в этом руководстве мы будем
использовать модель цепочки ключей Fusion, предоставленную в качестве образца CAM с вашей установкой Fusion 360. Эта
модель содержит операции субтрактивного производства, которые можно комбинировать с операциями аддитивного
производства, если ваша машина поддерживает обе возможности.

Аддитивные возможности и постпроцессоры 9-214

Руководство по постпроцессору CAM 08.12.21


Образец аддитивной части

Вы увидите вкладку ДОБАВКИ на ленте ПРОИЗВОДСТВО. При выборе этой вкладки отобразятся
дополнительные меню.

Дополнительные меню

9.1.1 Поиск машины


Первым шагом в создании траектории аддитивного инструмента является определение станка, который вы будете
использовать. В отличие от операций вычитания, для которых конфигурация машины не является обязательной, она
необходима для операций сложения. НажатиеМашинная библиотеказначок в меню Additive будет отображатьМашинная
библиотека диалог. ВыберитеОбразцыменю и проверитьдобавкаполе для списка доступных аддитивных машин. Мы будем
использоватьПруса И3 МК2машина. Вы должны перетащить эту машину в свою локальную библиотеку для удобства.

Аддитивные возможности и постпроцессоры 9-215

Руководство по постпроцессору CAM 08.12.21


Поиск аддитивной машины и сохранение в вашей локальной библиотеке

Как только вы найдете свою машину, вам нужно будет выбрать постпроцессор, соответствующий этой машине. Вы можете
сделать это, щелкнув правой кнопкой мыши наПруса И3 МК2машина и выборВыберите сообщение…

Назначение постпроцессора аддитивной машине

ТоПочтовая библиотекапоявится диалоговое окно. Выберите библиотеку Samples и установите флажок Additive, чтобы
отображались только постпроцессоры, поддерживающие возможности Additive. Вы захотите выбрать Пруса И3 МК2
машина. Вы можете перетащить этот пост в свою локальную библиотеку.

Аддитивные возможности и постпроцессоры 9-216

Руководство по постпроцессору CAM 08.12.21


Выбор постпроцессора

9.1.2 Создание дополнительной настройки


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

Чтобы создать аддитивную настройку, нажмите кнопкуНастраиватьменю, изменитьТип операциикдобавкаи выберите


конфигурацию для вашей машины, нажав кнопкуВыбирать…кнопка подМашина.

Аддитивные возможности и постпроцессоры 9-217

Руководство по постпроцессору CAM 08.12.21


Определение аддитивной настройки

Теперь вам нужно связать постпроцессор с конфигурацией машины. Сделайте это, нажав кнопку
Редактировать…кнопка подМашинабыстрый. Отобразится конфигурация машины, изменитеМесто
размещениякЛичное – местноеи выберитеprusa.cpsпостпроцессор изПостпроцессорвыпадающее меню.

Связывание постпроцессора с конфигурацией машины

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

Аддитивные возможности и постпроцессоры 9-218

Руководство по постпроцессору CAM 08.12.21


Определение параметров печати

Параметры печати можно изменить вне диалогового окна «Настройка», щелкнув правой кнопкой мыши значок «Параметры печати» в
разделе «Настройка добавления».

Редактирование настроек печати

После создания Установки вы должны увидеть изображение основания машины и оболочки с расположенной на ней
деталью. Не стесняйтесь переименовывать новую настройку в Additive, чтобы вы знали, что это аддитивная операция. Если
вы собираетесь выполнять как аддитивные, так и вычитательные операции в одной и той же модели, вам нужно будет
переместить настройку Additive выше настройки Subtractive.

Аддитивные возможности и постпроцессоры 9-219

Руководство по постпроцессору CAM 08.12.21


Деталь, отображаемая на машине

Если деталь находится не в том месте на машине, где вы хотите, вы можете легко изменить ее положение с
помощью меню POSITION.

Меню позиционирования

9.1.3 Создание и моделирование аддитивной операции


Аддитивная операция создается автоматически при создании аддитивной настройки. Вы можете увидеть эту
операцию, развернув настройку Additive в браузере. Для каждой настройки может быть только одна аддитивная
операция. Вам нужно будет сгенерировать аддитивную траекторию вручную, выбрав «Создать» в меню
«ДЕЙСТВИЯ» или нажавCtrl+G. Это может занять некоторое время в зависимости от сложности модели.

Аддитивные возможности и постпроцессоры 9-220

Руководство по постпроцессору CAM 08.12.21


Создание аддитивной траектории

Чтобы имитировать аддитивную траекторию, нажмите кнопкуИмитацияв меню ДЕЙСТВИЯ. Аддитивные


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

Симуляция аддитивной траектории

Аддитивные возможности и постпроцессоры 9-221

Руководство по постпроцессору CAM 08.12.21


9.2 Создание новой конфигурации машины
При добавлении нового постпроцессора Additive вам потребуется создать соответствующую конфигурацию машины.
Вы делаете это, копируя существующую конфигурацию машины в свою локальную библиотеку, открывМашинная
библиотекавыберите конфигурацию машины, которую хотите скопировать, а затем вставьте ее в локальную папку.

Копирование конфигурации машины

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

Аддитивные возможности и постпроцессоры 9-222

Руководство по постпроцессору CAM 08.12.21


Дублирование и редактирование конфигурации машины

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

Назначение постпроцессора вашей аддитивной машине

Теперь вы готовы редактировать свой постпроцессор.

Аддитивные возможности и постпроцессоры 9-223

Руководство по постпроцессору CAM 08.12.21


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

Переменная Описание
кроватьцентр Постпроцессор определяет объект, в котором хранятся координаты центра
кровати.
кроватьТемп Температура постели.
Экструдер Безымянный объект, содержащий определение экструдера. Этот объект получается
путем вызова методаполучитьэкструдерфункция.
экструдерофсеты Массив, определяемый постпроцессором, который определяет смещения от эталонного
(первого) экструдера для каждого экструдера.

количество слоев Количество печатных слоев за всю операцию печати.


конфигурация машины Определение конфигурации машины.
количествоэкструдеров Количество используемых экструдеров.

partCount Количество тел, созданных во время печати.


принтерLimits Переменная, определяемая постпроцессором, в которой хранятся ограничения машины.

время печати Количество времени, которое должно занять печать.


Глобальные аддитивные переменные

Переменные, определяемые постпроцессором, определяются вgetPrinterGeometryфункцию от


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

9.3.1 Объект конфигурации машины


Токонфигурация машиныобъект является стандартным для всех типов станков, фрезерных, токарных, аддитивных и т. д.
Ссылки на настройки конфигурации станка всегда выполняются с помощью функции. Переменные, возвращаемые
функциями, описаны в следующей таблице.

Функция конфигурации машины Описание


hasCenterPosition() Возвращаетистинныйесли определено центральное положение стола принтера.

getCenterPositionX (идентификатор) Центр стола принтера в X.


getCenterPositionY(идентификатор) Центр стола принтера по оси Y.
getCenterPositionZ (идентификатор) Центр стола принтера в Z.
getExtruderOffsetX (идентификатор) Смещение по оси X от эталонного экструдера.
getExtruderOffsetY(id) Смещение по Y от эталонного экструдера.
getExtruderOffsetZ(идентификатор) Смещение по Z от эталонного экструдера.
hasParkPosition() Возвращаетистинныйесли исходное положение машины определено.
getParkPositionX (идентификатор) Исходное положение машины в X.
getParkPositionY(идентификатор) Исходное положение машины в Y.
getParkPositionZ (идентификатор) Исходное положение машины по З.
получить модель () Тип модели принтера.
получить число экструдеров () Количество определенных экструдеров.
MachineConfiguration Функции, используемые для Additive

Аддитивные возможности и постпроцессоры 9-224

Руководство по постпроцессору CAM 08.12.21


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

если (machineConfiguration.hasCenterPosition()) {
PrinterLimits.x.min = 0 - machineConfiguration.getCenterPositionX();
PrinterLimits.y.min = 0 - machineConfiguration.getCenterPositionY();
PrinterLimits.z.min = 0 + machineConfiguration.getCenterPositionZ();
}
Вызов hasCenterPosition перед вызовом getCenterPosition

9.3.2 Объект экструдера


На самом деле нет именованного объекта Extruder, что означает, что вы не можете использоватьновый экструдерсинтаксис
для создания объекта, как если бы вы создали вектор, но естьполучитьэкструдерфункция, которая вернет безымянный объект
с переменными, специфичными для экструдера. На каждый экструдер можно ссылаться, передав номер экструдера в
получитьэкструдерфункция.

var totalLength = getExtruder(1).extrusionLength;


Получите общую длину материала, используемого для экструдера 1

В следующей таблице определены переменные, доступные с помощьюполучитьэкструдерфункция

Переменная экструдера Описание


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

диаметр нити Диаметр материала нити.


имя материала Название материала, используемого для экструдера.
соплоДиаметр Диаметр сопла экструдера.
температура Температурный режим экструдера.
Переменные экструдера

9.4 Дополнительные функции ввода


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

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

Функция входа Вызывается, когда…


onBedTemp(временная, подождите) Изменение температуры кровати.

при закрытии() Конец постобработки.

Аддитивные возможности и постпроцессоры 9-225

Руководство по постпроцессору CAM 08.12.21


Функция входа Вызывается, когда…
onExtruderChange(id) Замена экструдеров.
onExtruderTemp (температура, ожидание, идентификатор) Изменение температуры экструдера.

onExtrusionReset(длина) Сбрасывает длину используемого экструзионного материала.

onFanSpeed (скорость, идентификатор) Изменение скорости вентилятора.

onLayer (слой) Изменение уровня слоя.

приоткрытии() Инициализация постпроцессора.

onLinearExtrude(x, y, z, f, e) Аддитивный проход.

onParameter (строка, значение) Настройка каждого параметра.

onRapid(x, y, z) Позиционирование Быстрое перемещение.

в разделе () Начало операции.


Аддитивные входные функции

Многие функции ввода получают свои аргументы и настройки либо из конфигурации машины, либо из настроек
печати. Доступ к этим диалоговым окнам можно получить, нажав правую кнопку мыши над настройкой Additive и
выбравРедактировать.

Редактирование установки

Откроется диалоговое окно «Настройка», в котором можно выбрать редактирование либо «Конфигурации машины» (описано в
предыдущем разделе), либо «Настройки печати». Вы также можете отобразить диалоговое окно «Параметры печати», нажав
кнопкуПараметры печатикнопка вдобавкаменю.

Аддитивные возможности и постпроцессоры 9-226

Руководство по постпроцессору CAM 08.12.21


Редактирование настроек печати

9.4.1 Глобальная секция


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

возможности = CAPABILITY_ADDITIVE;
// возможности = CAPABILITY_ADDITIVE | ВОЗМОЖНОСТЬ _ФРЕЗЕРВИРОВАНИЯ; // аддитивная и вычитательная
Установка возможностей постпроцессора на аддитивные

Общие глобальные переменные, найденные в аддитивном посте, перечислены ниже. Эти переменные
определены вgetPrinterGeometryиспользовать настройки из конфигурации машины.

// необходимо для проверки диапазона, будет передано из Fusion var


printerLimits = {
x: {min: 0, max: 250.0}, //Определяет размер кровати x y:
{min: 0, max: 210.0}, //Определяет размер кровати y z:
{min: 0, max: 210.0} / /Определяет размер кровати z };

// Только для информации

Аддитивные возможности и постпроцессоры 9-227

Руководство по постпроцессору CAM 08.12.21


переменная кроватьCenter = {

х: 0,0,
у: 0,0,
г: 0,0
};

var extruderOffsets = [[0, 0, 0], [0, 0, 0]];


вар активэкструдер = 0; // Отслеживание активного экструдера.
Глобальные настройки

9.4.2 при открытии

функция onOpen()

ТоonOpenФункция вызывается в начале постобработки и используется для определения настроек и вывода


стартовых блоков.

1. Определите настройки
2. Машина вывода и описание программы
3. Вывести начальные коды запуска

Параметры определения машины задаются вgetPrinterGeometryфункция, которая вызывается в


началеonOpenфункция.

получитьпринтергеометрию();
Определение геометрии машины

Ниже приведен пример кода, который выводит информацию о программе и машине в выходной файл.

если (имя программы) {


написать комментарий (имя программы);
}
если (комментарий к программе) {

написатьКомментарий(программныйКомментарий);

writeComment("Имя принтера: " + machineConfiguration.getVendor() + " " +


Конфигурация машины.getModel());
writeComment("Время печати: " + xyzFormat.format(printTime) + "s"); writeComment("Использованный
материал: " + DimensionFormat.format(getExtruder(1).extrusionLength)); writeComment("Имя материала:
" + getExtruder(1).materialName);
writeComment("Диаметр нити: " + DimensionFormat.format(getExtruder(1).filamentDiameter));
writeComment("Диаметр сопла: " + DimensionFormat.format(getExtruder(1).nozzleDiameter));
writeComment("Смещение экструдера x: " + DimensionFormat.format(extruderOffsets[0][0]));
writeComment("Смещение экструдера y: " + DimensionFormat.format(extruderOffsets[0][1]));
writeComment("Смещение экструдера z: " + DimensionFormat.format(extruderOffsets[0][2]));
Аддитивные возможности и постпроцессоры 9-228

Руководство по постпроцессору CAM 08.12.21


writeComment("Максимальная температура: " + integerFormat.format(getExtruder(1).temperature));
writeComment("Время кровати: " + integerFormat.format(BedTemp));
writeComment("Количество слоев: " + integerFormat.format(layerCount));
Вывести имя программы, комментарий и описание машины

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

// инициализируем машину
writeBlock("G28 W ; дома все без уровня сетчатой кровати");
writeBlock("G80; выравнивание сетки");
Выведите начальные коды запуска

9.4.3 в разделе
функция в разделе () {

ТоonSectionФункция вызывается в начале каждой аддитивной операции, проверяет, находится ли


операция в пределах возможностей машины, и выводит коды, требуемые в начале операции.

// проверяем, что траектория инструмента находится в пределах объема сборки


станка диапазон переменных = currentSection.getBoundingBox(); оси = ["х", "у", "г"];

форматы = [xFormat, yFormat, zFormat];


for (элемент var в осях) {
var min = форматы[элемент].getResultingValue(range.lower[оси[элемент]]); var
max = форматы[элемент].getResultingValue(range.upper[оси[элемент]]);
if (printerLimits[axes[element]].max < max ||printerLimits[axes[element]].min > min) {
error(localize("Траектория находится за пределами тома сборки.");
}
}
Проверьте траекторию с ограничениями станка

// вывод кодов начала операций


writeBlock(gFormat.format(92), eOutput.format(0));

// установить единицу измерения

writeBlock(gFormat.format(unit == MM ? 21: 20)); writeBlock(gAbsIncModal.format(90)); //


абсолютные пространственные координаты writeBlock(mFormat.format(82)); //
абсолютные координаты экструзии
Вывод начальных кодов аддитивных операций

9.4.4 при закрытии


функция при закрытии() {

Аддитивные возможности и постпроцессоры 9-229

Руководство по постпроцессору CAM 08.12.21


Топри закрытиифункция вызывается в конце последней операции. Он используется для вывода кодов конца программы.

функция при закрытии() {


// вывод кодов конца программы
writeComment("Отключить степпер на всех осях
кроме z"); writeBlock(mFormat.format(84) + "XY E");
writeComment("КОНЕЦ GCODE");
}
Пример функции закрытия

9.4.5 Постельная температура

функция onBedTemp (темп, ожидание) {

Аргументы Описание
температура Температура в постели по Цельсию.
ждать Установлен вистинныйкогда машина должна ждать, пока кровать прогреется.

ТоonBedTempфункция вызывается несколько раз во время траектории. В начале операции onBedTempназывается с


ждатьустановлен вложныйчтобы начать нагревать кровать. Он вызывается во второй раз перед началом траектории
с помощьюждатьустановлен вистинныйтак что машина ожидает достижения заданной температуры. Так же будет
вызываться в конце программы для выключения подогрева кровати.

Максимальная температура кровати определяется вОграничениявкладку при определении конфигурации машины в Fusion
360.

функция onBedTemp (темп, ожидание) {


если (подождите) {

writeBlock(mFormat.format(190), sOutput.format(temp)); }
еще {
writeBlock(mFormat.format(140), sOutput.format(temp));
}
}
Пример функции onBedTemp

9.4.6 при изменении экструдера


функция onExtruderChange(id) {

Аргументы Описание
я бы Номер экструдера для активации. Первый экструдер 0.

Аддитивные возможности и постпроцессоры 9-230

Руководство по постпроцессору CAM 08.12.21


ТоonExtruderФункция обрабатывает переключение с одного экструдера на другой аналогично смене
инструмента в вычитающей машине. Количество экструдеров определяется вИнформациявкладку при
определении конфигурации машины в Fusion 360.

функция onExtruderChange(id) {
если (id < numberOfExtruders) {
writeBlock(tFormat.format(id));
активэкструдер = идентификатор;
xOutput.reset();
yВыход.сброс();
zВыход.сброс();
} еще {
error(localize("Этот принтер не поддерживает экструдер") + integerFormat.format(id) + "!");
}
}
Пример функции onExtruderChange

9.4.7 при сбросе экструзии


функция onExtrusionReset(длина) {

Аргументы Описание
длина Длина добавочного материала, используемого для активного экструдера.

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

функция onExtrusionReset(длина) {
eOutput.reset();
writeBlock(gFormat.format(92), eOutput.format(длина));
}
Пример функции onExtrusionReset

9.4.8 на слое
функция onLayer (слой) {

Аргументы Описание
слой Текущий слой печатается.

ТоonLayerФункция вызывается для каждого печатного слоя и передается в активный слой. Его можно использовать для
вывода комментария перед траекторией для каждого слоя и/или для увеличения счетчика на панели управления станком,
чтобы показать ход печати.

Аддитивные возможности и постпроцессоры 9-231

Руководство по постпроцессору CAM 08.12.21


функция onLayer (число) {
writeComment("Слой: " + integerFormat.format(num) + " of " +
integerFormat.format(layerCount));
}
Пример функции onLayer

9.4.9 Температура экструдера


функция onExtruderTemp (temp, ожидание, идентификатор) {

Аргументы Описание
температура Температура экструдера в градусах Цельсия.
ждать Установлен вистинныйкогда машина должна дождаться прогрева экструдера.
я бы Номер экструдера, для которого устанавливается температура. Первый экструдер 0.

ТоonExtruderTempфункция вызывается несколько раз во время траектории. В начале операции onExtruderTemp


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

Желаемая температура экструдера определяется вЭкструдервкладкаПараметры печатидиалог. Максимальная


температура экструдера устанавливается вКонфигурация экструдеравкладку при определении конфигурации
машины в Fusion 360.

функция onExtruderTemp (temp, ожидание, идентификатор) {

если (id < numberOfExtruders) {


если (подождите) {

writeBlock(mFormat.format(109), sOutput.format(temp), tFormat.format(id)); }


еще {
writeBlock(mFormat.format(104), sOutput.format(temp), tFormat.format(id));
}
} еще {
error(localize("Этот принтер не поддерживает экструдер") + integerFormat.format(id) + "!");
}
}
Пример функции onExtruderTemp

9.4.10 на скорости вентилятора

функция onFanSpeed (скорость, идентификатор) {

Аргументы Описание
скорость Скорость вентилятора в процентах от скорости по умолчанию в диапазоне 0-255.
я бы Номер экструдера, для которого устанавливается скорость вращения вентилятора, обычно это активный экструдер.

Аддитивные возможности и постпроцессоры 9-232

Руководство по постпроцессору CAM 08.12.21


ТоonFanSpeedФункция используется для включения и выключения вентилятора, используемого для охлаждения экструдированного
материала. Вентилятор управляется, начиная со слоя после числа отключенных слоев, определенного вОхлаждениевкладка
Параметры печатидиалог.

функция onFanSpeed (скорость, идентификатор) {

если (скорость == 0) {
writeBlock(mFormat.format(107)); }
еще {
writeBlock(mFormat.format(106), sOutput.format(скорость));
}
}
Пример функции onFanSpeed

9.4.11 по параметру
функция onParameter (имя, значение) {

Аргументы Описание
название Имя параметра.
ценность Значение, сохраненное в параметре.

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

функция onParameter (имя, значение) {


переключатель (имя) {

// скорость подачи устанавливается перед быстрыми перемещениями и сменой

экструдера case "скорость подачи":

если (единица измерения == IN) {

значение /= 25,4;
}
установить FeedRate (значение);

ломать;
}
}
Пример функции onParameter

9.4.12 на Рапиде
функция onRapid(_x, _y, _z) {

Аргументы Описание
_х, _у, _з Положение инструмента.

Аддитивные возможности и постпроцессоры 9-233

Руководство по постпроцессору CAM 08.12.21


ТоonRapidФункция обрабатывает позиционирующие перемещения, которые не выдавливают добавочный материал.
РезультатonRapidФункция обычно выводит один кадр для перемещения позиционирования.

функция onRapid(_x, _y, _z) {


вар х = xOutput.format(_x); var y =
yOutput.format(_y); переменная z =
zOutput.format(_z); если (х || у ||
г) {
writeBlock(gMotionModal.format(0), x, y, z);
}
}
Пример onRapid Function

9.4.13 onLinearExtrude

функция onLinearExtrude (_x, _y, _z, _f, _e) {

Аргументы Описание
_х, _у, _з Положение инструмента.

_f Скорость подачи.

_е Длина добавочного материала для выдавливания во время перемещения.

ТоonLinearExtrudeФункция обрабатывает линейные перемещения, которые выдавливают добавочный материал. Положение


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

функция onLinearExtrude (_x, _y, _z, _f, _e) {


вар х = xOutput.format(_x); var y =
yOutput.format(_y); переменная z
= zOutput.format(_z); var f =
feedOutput.format(_f); var e =
eOutput.format(_e); если (x || y ||
z || f || e) {
writeBlock(gMotionModal.format(1), x, y, z, f, e);
}
}
Пример функции onLinearExtrude

9.5 Общие аддитивные функции


Существуют не входные функции, которые являются общими для аддитивных постпроцессоров. Некоторые из них
определены в ядре постпроцессора, а некоторые — в самом постпроцессоре. В следующих разделах описаны эти
функции.

Аддитивные возможности и постпроцессоры 9-234

Руководство по постпроцессору CAM 08.12.21


9.5.1 Получить Экструдер
функция getExtruder(id) {

Аргументы Описание
я бы Номер экструдера для получения информации.
ТополучитьэкструдерФункция возвращает переменную Extruder, которая включает информацию об указанном
экструдере. В отличие от функций ввода, где база экструдера равна 0, вполучитьэкструдерфункция первый
экструдер упоминается какя бы=1, второе какя бы=2 и т. д.

writeComment("Использованный материал: " + DimensionFormat.format(получитьэкструдер(1)


.extrusionLength)); writeComment("Название материала: " +getExtruder(1).materialName);
writeComment("Диаметр нити: " + sizeFormat.format(getExtruder(1).filamentDiameter));
writeComment("Диаметр сопла: " + sizeFormat.format(getExtruder(1).nozzleDiameter));
Примеры вызовов getExtruder

9.5.2 является аддитивным

функция isAdditive () {

Возвращаетистинныйесли какие-либо операции в детали являются аддитивными по своей природе.

9.5.3 getPrinterGeometry()
функция getPrinterGeometry() {

ТоgetPrinterGeometryФункция определена в постпроцессоре и устанавливает переменные, локальные


для постпроцессора, на основе конфигурации машины. Вызывается в начале постобработки из onOpen
функция.

функция getPrinterGeometry() {
Конфигурация машины = получитьКонфигурация машины();

// Получить геометрию принтера из конфигурации машины


PrinterLimits.x.min = 0 - machineConfiguration.getCenterPositionX();
PrinterLimits.y.min = 0 - machineConfiguration.getCenterPositionY();
PrinterLimits.z.min = 0 + machineConfiguration.getCenterPositionZ();

PrinterLimits.x.max = machineConfiguration.getWidth() –
Конфигурация машины.getCenterPositionX();
PrinterLimits.y.max = machineConfiguration.getDepth() –
machineConfiguration.getCenterPositionY();
PrinterLimits.z.max = machineConfiguration.getHeight() +
machineConfiguration.getCenterPositionZ();

// Можно использовать в посте для документирования.


Аддитивные возможности и постпроцессоры 9-235

Руководство по постпроцессору CAM 08.12.21


bedCenter.x = (machineConfiguration.getWidth() / 2.0) –
Конфигурация машины.getCenterPositionX(); bedCenter.y
= (machineConfiguration.getDepth() / 2.0) –
machineConfiguration.getCenterPositionY(); bedCenter.z =
machineConfiguration.getCenterPositionZ();

// Получаем конфигурацию экструдера


extruderOffsets[0][0] = machineConfiguration.getExtruderOffsetX(1);
extruderOffsets[0][1] = machineConfiguration.getExtruderOffsetY(1);
extruderOffsets[0][2] = machineConfiguration.getExtruderOffsetZ(1);
если (число экструдеров > 1) {
extruderOffsets[1] = [];
extruderOffsets[1][0] = machineConfiguration.getExtruderOffsetX(2);
extruderOffsets[1][1] = machineConfiguration.getExtruderOffsetY(2);
extruderOffsets[1][2] = machineConfiguration.getExtruderOffsetZ(2);
}
}
Пример функции getPrinterGeometry

9.5.4 установка скорости подачи

функция setFeedRate (значение) {

Аргументы Описание
ценность Скорость подачи для позиционирующих перемещений.

ТоsetFeedRateФункция определена в постпроцессоре и используется для вывода скорости подачи, используемой для
перемещений позиционирования, когда аддитивный материал не используется. Обычно он вызывается со значением,
переданным вскорость подачипараметр, определенный вonParameterфункция.

функция setFeedRate (значение) {


feedOutput.reset();
writeBlock(gFormat.format(1), feedOutput.format(значение));
}
Пример функции setFeedRate

Аддитивные возможности и постпроцессоры 9-236

Руководство по постпроцессору CAM 08.12.21


Показатель

круговая плоскость ..................4-71, 4-137


? просветная плоскость.............. ................ 4-154

? условный...................................... 3-62 по часовой стрелке ....................... .................


4-135 Справочник по ЧПУ ...................... 1-1
3 собранное состояние................................... 4-85
комментарий ......... ......................3-46, 4-120
3+2 операции ...................................... 3-55
компенсировать длину инструмента..................
7- 172 условная функция ...................... 3-63
А
условные операторы .................. .... 3-59
точность ...................................... 6-169 продолжить.......................................... .. СОЖ
Действие .... ................................. 5-162 3-67................................................ .. СОЖ
активироватьМашина1-12,4-104, 7-172, 7-176, 7-185 4-99 ................................................ 4-99
Аддитивные ................................................. 9-214 Аддитивные createAxis ................7-173, 7-183, 7-189
операции ... ...................... 9-220 createFormat ................4-80, 4-83, 7-171
разрешеныКруговыеПлоскости ..........4-71, 4-137 createIncrementalVariable ......4-80, 4-82
разрешеныСпиральныеПеремещения ....4- 71, 4-137, 4-139 createModal ................................4-80, 4-82
позволяют спиральные движения 4-71, 4-137, 4-139, 4-140 createReferenceVariable ........4-80, 4-82
подход................................................... 8-201 createRotaryVariable ...................... 7-181
разные.... .................................4-81 createVariable ..............4-80, 4-82, 7-171 текущая
аргумент .................................3-68, 3-69 секция ................................. 4-112
массив ........ ................ 3-50, 3-52, 3-68, 3-69 цикл ..... ...................................... 4-142 Параметры
Функции объекта массива........... 3-52 цикла ... ................................. 4-145
Утилита постпроцессора Autodesk Fusion 360 2-23 Велосипедные плоскости/высоты .................... ...
4-147 циклТип....4-144, 8-198, 8-207
Б циклический.............. ......................7-181, 7-189
BedCenter ...................................... 9-224
BedTemp ....... ................................. 9-224
Д
Эталонные детали ....... ................... 1-17 Дата................................................. 4-89
Эталонные партии ...................... 2-40, 2 -43 отладка............... 2-40, 4-151, 6-168, 6-169
закладки.....................................2-33, 2-34 Отладка............... ....................... 6-166 Режим
логические значения ........ .................... 3-50 отладки ............... 6-168, 6-169, 6 -170 по
перерыв ........... .................................3-61, 3-67 умолчанию ................................................ 3
Встроенные свойства ....... ................. 4-75 -61 defineMachine ................................ 7-172
defineWorkPlane ............ ....4-104, 4-108
С градусов ....................................... ..... 7-171
CAM-партнеры ...................................... 1-16 градус в минуту ..................... 7-192
возможности .......... ...................4-71, 9-227 описание............ ................................. 4-72
CAPABILITY_ADDITIVE .......... 9-227 Смещение диаметра ....... .............. 4-97
корпус .......... ................................. 3-61 с отключить ................................ .............. 4-83
учетом регистра ..... .............................. 3-45 делать/пока ....................... .......... 3-66
Уровень сертификации ................ .......... 4-72 скачать пост ............................... .. 1-3
Контрольная группа................................. ... DrillSafeDistance ...................... 4-145
4-115 chipBreakingDistance.......... 4-145 dump.cps ................ ..4-122, 5-162, 6-167
круговая интерполяция.........4-135, 4-137

Индекс 237
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель

Е getCommonCycle ...................... 4-148


getCoolantCodes................. 4- 100, 8-205
редактор ......................................1-9, 2-23
getCurrent ........................................................ 4-84
остальное ................................................. 3-60
getCurrentDirection ............ 4-106, 7-181
enableMachineRewinds ................. 7-175
getCurrentPosition ...................... 4-138
функция ввода....................... .......... 6-167
getError . ..............................................4-81
Функции ввода ..................... 4-70, 9-225
getEuler2 ............................ 4-104, 4-108
Эйлер...... .................................. 4-109
getExtruder ............ .............9-225, 9-235
Порядок углов Эйлера.. ..........................4-104
getFinalToolAxisABC ................... 7-180
Углы Эйлера ...................................... 4-103
getFirstTool...... .................4-98, 4-114
eulerConvention......... .................... 4-103
getFramePosition ....................... ...... 4-110
executeManualNC ...................... 5 -160
getGlobalFinalToolAxis ................ 7-180
расширенных циклов ..................4-143, 4-144
getGlobalInitialToolAxis ...... 7-180
ExpandManualNC ....................... ...... 5-158
getGlobalParameter . ...................... 4-124
выражения ............ 3-58, 3-62, 3-65, 3-69
getGlobalZRange ............... ..... 4-90
операторы выражений ........... .......... 3-59
getHeaderDate ................................ 4-89
расширение ..................................... .................
getHeaderVersion .... ................................ 4-89
4-72 Экструдер ...................................................... ....
getHelicalDistance ...................... ... 4-139
9-225 Смещения экструдера ...................... 9-224
getHelicalOffset ...................... 4-139

Ф getHelicalPitch.......... ................. 4-139 получить


идентификатор ......................... ......................
Скорость подачи................................................... 4-135 4-112 getInitialToolAxisABC.......7-178, 7-180
фиксированные настройки.. .............................4-85, getLinearMoveLength ......... ..........7-196
4-86 для................... ................................3-65, 3-67 получитьминимальное значение .......................
Принудительная смена инструмента......... ................ 4-81 getMultiAxisMoveLength .............. 7-196
4-97 forceABC.................................. ......... 4-153 getNextSection ...................................... 4 -116
forceAny ........................................ ... 4-153 getNextTool ..........................4-98, 4-114
forceFeed ...................................................... 4-153 getNumberOfSections4-90, 4-92, 4-112, 4- 123
forceMultiAxisIndexing ................ 4-103 getNumberOfTools ...................... 4-90
forceXYZ ....................... ......... Формат 4-153.........4-80, getOptimizedPosition .................... 7-185
4-81,4-82, 4-83, 4-84 формат getOptimizedTCPMode ................. 7-180
Комментарий ................................. 4-120 функция ......3 getParameter ........................ .......... 4-123
-47, 3-62, 3-67, 3-68, 3-69 изготовление плавленых getPositionU ....................... 4-139, 4-141
нитей ................................ 9-214 getPrinterGeometry..... ........9-228, 9-235
getProbingArguments .......................8-201
г получить свойство.............................4-78,4-79
G-код...................................................1-1, 4-82 getRadialMoveLength ....... 7-196
Геометрия Зондирование .................. 8-207 getRadialToolTipMoveLength ...... 7-196
getABCByPreference ....... 4-106, 7-180 getResultingValue............ ...3-64, 4-81
getCircularCenter.. ............................. 4-138 getSection ........ 4-90, 4-92, 4-112, 4-123
getCircularChordLength ................ 4-138 getTool ......... .............................. 4-92
getCircularNormal . ................................ 4-138 getToolTypeName ................ ........... 4-90
getCircularPlane ...................... ...... 4-138 getWorkPlaneMachineABC4-105, 4-108
getCircularRadius ...................... 4-138 gFeedModeModal ...................... 7- 194
getCircularStartRadius.......... ................. 4-138 Глобальная секция .......................4-71, 9-227
getCircularSweep......................... 4-138 глобальная переменная .......3 -47, 4-71, 4-85

Индекс 238
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель

gRotationModal ............................. 8-203 Дж


groupDefinitions......................4-76,4-78
JavaScript................................................... 3-45

ЧАС К
hasGlobalParameter ...................... 4-124
настройки ядра ...................................... 4-71
hasParameter....................... ............ 4-123
винтовая интерполяция ...................... 4-139 л
винтовое перемещение...... .................................
4-71 высокая подача ............... ..........4-128, 4-131 Лазер ................................................ 1 -21

highFeedMapping ........................ 4-72 layerCount.....................................9-224

highFeedrate .................................... 4-72 исходное юридический...... ............................................. 4-72

положение.......... ................. 4-154 Редактор Смещение длины .................................... 4-97

постпроцессора HSM ............... 3-46 линейная шкала ........ ............... 7-181


линеаризация.................. ....................... 4-139
я локальные переменные ...................... ............
3-47 журнал .................................. ................ 6-169
если 3-59, 3-62
подробное описание.................................. .. 4-89
инкрементный ...................................... 4-82 отступ ....... .................................
Операторы циклов ................................ 3-65
3-46 Исходное положение.......... ..........4-97, 4-110

insertToolCall .......................4-97, 4-116 Осмотр


М
поверхности .............................. 8-210 промежуточный

файл ............... .................1-1, 9-225 Обратнозависимое время ........................


конфигурация машины ................. 7-171
7-192 inverseTimeOutput ................. 7-194 invokeOnCircular ................. .........
Конфигурация машины 1-12, 7-172, 9-215, 9-
4-141 invokeOnLinear ...................... 4-131 invokeOnLinear5D .... ....................
222
4-135 invokeOnRapid ...................... .... 4-129 invokeOnRapid5D ......................
Конфигурация станка ..................4-89, 9-224
4-132 is3D............. .................................... 7-181
плоскость обработки......................4 -142
Добавление.......... ................................. 9-235
Ручное ЧПУ..................................... 5-162
isFirstCyclePoint.................. .......... 4-148 isFullCircle ........................................
Ручная команда ЧПУ 4-86, 4-116, 4-118, 4-120,
4-139 isСпиралевидный ...................... .................... 4-139
4-121,4-122
isInspectionOperation .................... 4-113
Ручная команда ЧПУ ..................... 5-157

isLastCyclePoint .. ................................. 4-148 isLastSection.......... ..............


mapToWCS ........................ .......... 4-72

4-116 isMultiAxis ................................. .... 4-108


mapWorkOrigin ............................. 4- 72

isMultiAxisConfiguration...4-108, 7-180 isNewWorkPlane .......4-94, 4-113


Математический объект ...................................... 3-48

isOptimizedForMachine ..... 7-178, 7-180 isProbeOperation ......................


Матрица ....... ................................................. 3-55

4-113 isProbingCycle......... .................... 4-148


Назначения матричных объектов .... .................

Значимо ...................... ..................... 4-108 isMultiAxisConfiguration...4-108,


3-55 Атрибуты матричного объекта....... 3-56

7-180 isNewWorkPlane ...................4-94, 4-113


Функции матричного объекта.......... ....... 3-57

isOptimizedForMachine .....7-178, 7-180 isProbeOperation ...................... 4-113


матрицы ....................................... ... 6-169

isProbingCycle.. ................................. 4-148 имеет важное


максимумCircularRadius ......4-72, 4-137

значение ................. .............................. 4-108


максимумCircularSweep4-72, 4-86, 4-137

isMultiAxisConfiguration...4-108, 7-180 isNewWorkPlane ...................4-94,


М-код ................................................ 4- 82
4-113 isOptimizedForMachine .....7-178, 7-180 isProbeOperation ......................
фрез/об................................................. 1-20
4-113 isProbingCycle.. ................................. 4-148 имеет важное
фрезерование...................................................
значение ................. ....................4-81 isSpiral ................................................
1-19 minChordLength ........4-73, 4-137
4-139 isToolChangeNeeded.. ..........4-94, 4-113
minCircularRadius.......4-73, 4-137
minCircularSweep .......4-73, 4-137
minRevision.. ............................. 4-73

Индекс 239
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель

исходная точка модели..................................... 4-72 onRapid........ 4-126, 4-128, 4-129, 9-234


MoveLength....... ................................. 7-196 onRapid5D.............4-131, 4-132, 7- 178
движение .................. .................... 4-127 onReturnFromSafeRetractPosition 7-190
moveToSafeRetractPosition .......... 7-191 onRewindMachine ...................... 4-151
многоосный 1-16, 3-55, 4-131 , 4-133, 7-171 onRewindMachineEntry .....7-190, 7-191
многоосный ....................................... .. 4-87 onRotateAxes.. .............................. 7-190 в
Многоосевые скорости подачи ...................... 7-192 разделе ....... ....4-93, 4-116, 9-229 в конце
раздела4-94, 4-95, 4-116, 4-117, 8-206
Н onSpindleSpeed ............................. 4-125

Расширение файла ЧПУ ...................... 4-72 NC-


onTerminate...................................4-117
программа ............... ..........1-7, 1-9, 4-74 следующий
Комментарий к операции .................. 4-95

инструмент ........................... ................ 4-98


Замечания по эксплуатации ....... ..............4-96

номер .............................. ......3-47, 3-69 Объекты с


Свойства операции .................. 1-12
номерами ....................... 3-48 Количество
операторы ..................... ......................
экструдеров ...................... 9-224
3-58
optimiseMachineAngles2 ............... 7-176

О 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
Показатель

свойства ................................1-9,4-75 Группы сингулярность ...................................... 7-187


свойств........................... 1-10 Таблица коды шпинделя...... .............................. 4-99
свойств ..... 3-52, 4-74 , 4-85, 4-86 Ориентация шпинделя ................ .......... 4-145
protecedProbeMove ...................... 8-201 spindleSpeedDwell ...................... 4-145
спиральная интерполяция ....... .......4-139,
р 4-140 спиральный ход......................... ..... 4-71

радианы...................................3-49, 7-171 перемещение запаса.....................................

компенсация радиуса4-128, 4- 129, 4-133, 4-135 1-21 стратегия .......................................... 4-115

диапазон...................................7-181, 7-189 строка... .................................3-46, 3-49, 3-69

быстрый...... .............................................. 4-72 Функции строковых объектов ........ ..........

реальное значение.. ................................. 3-64 переключатель 3-50 ....................... ..3-61, 3-67

repositionToCycleClearance...... .... 4-148


сброс ...................................................... ......... 4-84
Т
втянуть .................................. 4- 95, 4-111 циклы нарезания резьбы ................................. 4-149
возврат.....................................3-68, 3 -69 оси TCP ............ .................................... 7-193
вращения..................................... 7-171 Порядок Шаблон ....... .............................. 5-165 до
осей вращения.. ................. 7-174 поворотная град................. ................................. 3-49
шкала..................... ................ 7-181 RS-274D допуск.................. .......4-73, 4-138, 4-139 оси
Образец многоосевого постпроцессора...7- инструмента..................4-131, 4-133, 7- 187 Смена
171 инструмента ...................................... 4-97 Коррекция
длины инструмента .... ................................. 4-110
С диапазон инструментов.......... ................ 4-114
toolZRange ....................... ........ 4-98
секция ................................................ 4-111
toPreciseUnit................................ 4-153
посевной пост ..............................................
toRad ................................................ 3- 49 попытка/
1-17 порядковый номер .. ......................
поймать ...................................... 3-63
4-152 установка СОЖ .................. .................
тип ................................................ 3- 62
4-100 setCurrentABC ...................... 7-181
setFeedRate...................................................
9-236 setMachineConfiguration ..... .........
U
7-176 setMultiAxisFeedrate..................... неопределенный ...................................... 3-47
7-175 setPrefix ............ ................................. единица .... .............................. 1-9, 4-87, 4-93
4-84 setProbeAngle........... ................. 8-201 использование ABCпрепозиции ....... ........... 4-103
setProbeAngleMethod ................... 8-201 Использование функций MultiAxis.................. 4-103
setProperty ...... ................................. 4-80 Пользовательские настройки ....... ............................. 2-26
setSingularity ............... .................... 7-187
setSuffix ...................... ................. 4-84 В
setToolLength ...................... ... 7-184 подтвердить .................................................
настройка ...................................4-124,9-217 3-64 вар ................................................. .. 3-47
setVirtualTooltip ..7-175, 7-185 переменная .....3-47, 3-58, 3-62, 3-68, 9-224
setWordSeparator ................4-86, 4-152 вектор ..................... ................................. 3-53
setWorkPlane ................................ 4-109 Атрибуты вектора ....... ................. 3-53
setWriteInvocations ......... .....2-40, 6-168 Функции векторного объекта ....... 3-54
setWriteStack ........................2-40, 6-168 векторы......... ................................. 6-169
showNotes..... ...................... 4-90,4-96 виртуальная подсказка ........... .................
моделирование................................................... 7-185 Код Visual Studio ....................... ... 2-23
9-221 singleLineCoolant... ......................... 4-99

Индекс 241
Руководство по постпроцессору Autodesk CAM 8/12/21
Показатель

Вт workOffset ..................................... 4-92


writeBlock...... ................................. 4-152 написать
Водоструйная резка................................... 1-21
комментарий . 4-88, 4-90, 4-120, 6-170
WCS. ................................4-72, 4-100, 4-116
записьОтладка ................................. .. 6-170
Зондирование WCS .................. ......................
напиши...................................4-151, 6-170
8-196 wcsDefinitions ........................ ....... 4-100
напишиПримечания... ..........................4-91,
пока ....................................... ......... 3-66
4-122 написатьВтягивать.... 4-94, 4-117, 4-154,
Рабочая система координат 4-94, 4-100, 8-196
7-176 writeSectionNotes ................................ 4-96
Рабочая плоскость 4-72, 4-94, 4-102, 4-105, 4-109, 4-
writeSetupNotes.............. ................. 4-90
116

Индекс 242
Руководство по постпроцессору Autodesk CAM 8/12/21

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