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

Введение в постпроцессирование в ESPRIT

Данное руководство представляет собой введение в постпроцессор ESPRIT. Вы получите советы,


которые помогут вам написать свой собственный постпроцессор или настроить существующие.
Мы рекомендуем всегда обращаться к справке ESPRIT по Постпроцессорам (в меню ESPRIT выберите
Справка> Справка по Постпроцессору). Большинство пунктов, упомянутых в настоящем руководстве,
подробно описаны здесь.

Вы узнаете ...

 основные сведения о постпроцессорах


 как скачать и установить редактор UltraEdit
 Системные переменные (или System Variables)
 Режимы работы (или Machine Modes)
 Форматируемые коды (или Formatable Codes)
 Символические коды (или Symbolic Codes)
 Переменные (или Variables)
 Подпрограммы (или Subroutines)
 Секции (или Example section)
 Переопределение размерных данных
 Отладка постпроцессора
 Логические операторы
 Математические операторы и функции
 Cпециальные ключевые слова для организации циклов в программе

Основные сведения

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


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

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

Постпроцессор (файл формата *. asc) преобразует данные CL-файла в определенный формат


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

В тех случаях, когда автор постпроцессора не хочет, чтобы кто-либо имел возможность изменить
исходный код, он предоставляет откомпилированный файл (формат *.PST) вместо файла, открытого
для редактирования (*.asc). Содержание *.PST файла не может быть просмотрено или
отредактировано.

Ниже приведен пример рабочего процесса при постпроцессировании в ESPRIT.


www. dptechnology.ru
Информация, содержащаяся в файле *.asc, делится на разделы. Каждый раздел определяет
конкретный тип информации для постпроцессирования.

• Заголовок: Информация о постпроцессоре (название станка, конфигурация станка, автор ПП, дата
редакции файла и др.) Эта информация не выводится в коде УП.

• Системные переменные: значения по умолчанию для данного ПП (выход порядкового номера и типа
обработка выполняемой операции).

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

• Форматируемые коды: Коды, которые получают значения в зависимости от выбранных параметров


в ESPRIT, такие как номер инструмента или скорость вращения шпинделя.

• Символические коды: Коды, которые выводятся в УП "как есть", таких как G00 и G01

• Примеры: Примеры кода УП, который выводится (код смены инструмента или код для быстрого
перемещения).

Пример .asc файла только для демонстрации:

##############################
## Machine: 2-Axis Lathe
## Controller:
## ESPRIT Version: 2012
## Author:
## Company:
## Date:
## Comments:
## Modified Date:
##############################

******* System Variables *******

PostName : Lathe.asc

MachineTolerance : 0.00001
MaxCircleRadius : 9999


www. dptechnology.ru
MaxNCode : 9999
NCodeDefault : 100
NCodeIncrement : 10

******* Machine Modes *******

CoordinateMode : Absolute
CircleMode : By180
CenterMode : IncrementFromStart
MeasurementMode : Metric
RadialValueMode : Diametral

******* Formatable Codes *******

ProgramNumber : O Y 4 N N 0 Y 4 N N 0 0 - - - -
XAbsolute : X N 2 Y N 5 N 3 Y N 4 1 1 N 0 0
ZAbsolute : Z N 2 Y N 5 N 3 Y N 4 1 1 N 0 0
XCenterAbsolute : I N 4 Y N 4 N 5 Y N 3 1 1 N 0 0
ZCenterAbsolute : K N 4 Y N 4 N 5 Y N 3 1 1 N 0 0
SequenceNumber : N Y 4 N N 0 Y 4 N N 0 0 - - - -
StartSequenceNumber : P N 3 N N 0 N 3 N N 0 0 1 N 0 0
EndSequenceNumber : Q N 3 N N 0 N 3 N N 0 0 1 N 0 0

******* Symbolic Codes *******

MotionRapid : G00
MotionLinear : G01
MotionCW : G02
MotionCCW : G03
Dwell : G04
Inch : G20
Metric : G21

******* Examples *******

ex_MainStart : O*
: TimeStamp
ex_MachineSetup : MachineSetupComment
: N CoordinateCode* MeasurementCode*
ex_FirstToolChange : ToolChangeComment
: N G00* X*(XTC) Z*(ZTC)
: N T*(101 * PresentTool)
ex_OtherToolChange : ToolChangeComment
: N G00* X*(XTC) Z*(ZTC)
: N T*(101 * PresentTool)
ex_LastToolChange : ToolChangeComment
: N G00* X*(XTC) Z*(ZTC)
: N T*(101 * PresentTool)
ex_ToolCancel : N G00* G28* G40* G49* G80* M05* M09*
ex_CycleStart : Comment
: N SpindleUnit S S_ SpindleDirection SpindleRange CoolantCode

Текстовые редакторы для постпроцессора

Постпроцессоры могут быть отредактированы во встроенном редакторе ESPRIT - NC Editor или в


любом другом текстовом редакторе, даже в Блокноте.

Недорогим редактором, который подходит для редактирования постпроцессоров, является UltraEdit.


Это приложение позволяет редактировать многоцелевой текст, HTML и XML код, кроме того, это
продвинутый PHP, Perl, Java и JavaScript редактор для программистов. UltraEdit полезен при
редактировании сообщения, так как подсветка синтаксиса позволяет визуально сортировать код,
выделив соответствующие части исходного код разными цветами.

С информацией об UltraEdit можно ознакомиться здесь: http://www.ultraedit.com


www. dptechnology.ru
Бесплатную пробную версию UltraEdit вы найдете здесь:
http://www.ultraedit.com/downloads/ultraedit_download.html

Файл конфигурации, поставляемый с этим уроком, называется ESPRIT.uew, и упрощает для вас
визуализацию кода. UltraEdit считывает файлы .uew из указанного каталога для настройки подсветки
синтаксиса.

Настройте UltraEdit так, чтобы приложение обращалось к файлу ESPRIT.uew каждый раз при запуске.

1. Скачать файл конфигурации ESPRIT.uew в папку на вашем компьютере (требуется доступ к


ESPRITWeb).

2. Запустить UltraEdit.

3. Нажать кнопку Advanced -> Configuration.

4. В диалоговом окне раскрыть Редактор дисплея и выбрать подсветку синтаксиса.

5. Нажмите кнопку Обзор рядом с путем к каталогу и перейдите в каталог, где находится файл
ESPRIT.uew.

6. Нажмите кнопку Применить.

7. Нажмите OK, чтобы закрыть диалоговое окно.

8. Каждый раз, когда вы открываете файл с UltraEdit, будет использоваться подсветка синтаксиса из
файла ESPRIT.uew.

Системные переменные

Системные переменные служат двум целям:


• Они позволяют устанавливать некоторые значения по умолчанию
• Некоторые переменные могут использоваться для вызова специальных функций

Структура раздела Системные переменные:

****** SYSTEM VARIABLES ******

Keyword : Value


www. dptechnology.ru
Часто используемые переменные

Две системные переменные, которые обычно используются, это NCodeDefault и NCodeIncrement.


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

Другие системные переменные позволяют пользователю вызывать специальные функции или


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

Возможно, наиболее важной системной переменной является MachineTolerance. Эта переменная


должна быть установлена в соответствии с точностью станка с ЧПУ. Если станок с ЧПУ может
выполнять перемещения с точностью до пятого знака после запятой, то установите MachineTolerance
0,00001 в данном ПП. Любое перемещение с шагом, меньшим, чем значение MachineTolerance, будет
исключено из кода УП выход.

Некоторые системные переменные имеют расширенное использование в разделе Секции примеров. В


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

Меньше значит больше

При определении системных переменных следует придерживаться правила: не добавлять переменные


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

Пример: Изменение приращения N-код


Если системная переменная NCodeIncrement устанавливается в постпроцессоре равной 1, то каждый
раз при обращении к SequenceNumber, текущий порядковый номер N будет увеличиваться на 1.

Обратите внимание - с настройками, указанными в примере ниже N начнется с N1 (первое значение N


в выходном коде будет: NCodeDefault 0 плюс NCodeIncrement 1) и достигнет наибольшего N9999.

****** SYSTEM VARIABLES ******

NCodeIncrement : 1
NCodeDefault : 0
MaxNCode : 9999

****** FORMATABLE CODES ******

SequenceNumber : N N 4 N N 0 N 4 N N 0 0 - - - -

Пример кода УП

N1 (SPINDLE-1 GROOVING FACE - CANNED CYCLE)


N2 (T1515 GROOVING INSERT FACE 3V)
N3 G28 U0
N4 G28 V0 W0
N5 G54
N6 G00 T1515

Теперь если вы измените NCodeIncrement на 5, код УП получится следующим:

N5 (SPINDLE-1 GROOVING FACE - CANNED CYCLE)


N10 (T1515 GROOVING INSERT FACE 3V)
N15 G28 U0
N20 G28 V0 W0
N25 G54
N30 G00 T1515

Режимы работы

www. dptechnology.ru
Установка режимов работы служит двум целям:
•установить определенные значения по умолчанию в случае, если они не установлены в программе
ESPRIT
• задать важные требования машины, которые не встречаются ни в одной из технологий в ESPRIT

Структура раздела Режимы работы:

****** MACHINE MODES ******


Keyword : Value

Обзор общего режима


Ниже приведен пример типичных режимах машина:

****** MACHINE MODES ******

CoordinateMode : Absolute
MeasurementMode : Metric
CircleMode : By360
CenterMode : IncrementFromStart
WorkPlaneMode : XYPlane

Например, параметр MeasurementMode по умолчанию может быть дюймовым или метрическим.


CoordinateMode может быть задан в приращениях (Incremental), но почти всегда устанавливается в
Абсолютных значениях (Absolute). Если эти значения уже были запрограммированы в ESPRIT, эти два
режима игнорируются.

Для определения возможностей машины используют параметр CircleMode, который определяет, какую
часть окружности система ЧПУ станка может обработать в одном блоке (кадре) кода NC. Если станок
может обработать дугу в 360 градусов в одном блоке кода, то CircleMode может быть установлен как
By360. Если система ЧПУ может обработать дугу до 90 градусов в одном блоке и при этом разбить на
несколько дугу больше, чем в 90 градусов, тогда следует использовать ByQuadrant.

Пример: Изменение CircleMode

Если CircleMode в постпроцессоре установлен By360, любая дуга до полного круга может быть
выведена в коде УП как одна строка.

****** MACHINE MODES ******

CircleMode : By360

Пример кода УП

G03 X58.371 Y15.998 Z-75.921 R16.0

Теперь, если вы измените CircleMode на By180 (дуги, которые больше, чем 180 градусов будут
разбиты на несколько строчек в коде УП), ваш код будет следующим:

G03 X56.87 Y-15.998 Z-76.479 R16.0

X58.371 Y15.998 Z-75.921 R16.0

Форматируемые коды

Форматируемые коды используются для возврата значений из технологии в ESPRIT, такие как номер
инструмента и X, Y, Z координаты.
Структура раздела форматируемых кодов уникальна тем, что здесь есть несколько столбцов данных.

Keyword :Symbol I1 I2 I3 I4 I5 M1 M2 M3 M4 M5 S Z1 Z2 Z3 Z4


www. dptechnology.ru
Столбцы справа от Symbol определяют числовое поле для значения, которое выводится. Числовые
значения могут быть выведены с или без ведущей цифры, последующей цифры, десятичной точки
или положительного, или отрицательного знака. Последний набор столбцов (Z1-Z4) определяет
формат, когда значение равно нулю.

ПП может иметь раздел форматируемых кодов следующего вида:

************************** FORMATABLE CODES **************************

* Inch Output Metric Output +/- Zero Value

* L # . T # L # . T # L . # +/-*

************************************************************************

XAbsolute : X N 4 Y N 4 N 5 Y N 3 1 1 N 0 0

ToolNumber : T Y 2 N N 0 Y 2 N N 0 0 - - - -

DiameterCompensation : D Y 2 N N 0 Y 2 N N 0 0 1 N 0 0

Ключевое слово возвращает значение из ESPRIT. Например, XAbsolute возвращает значение


координаты Х в ESPRIT. Символ для XAbsolute обычно X.
Форматируемые коды должны быть определены в соответствующем разделе, прежде чем они могут
быть использованы в других разделах файла ПП.
Ниже приведен пример форматируемых кодов, используемых в разделе "Примеры". X, Y, Z
координаты, I и J координаты центра окружностей, T для номера инструмента, S для скорости
вращения шпинделя и F для подачи: все это форматируемые коды.

ex_Circle : N G17 CircleDirection* X Y I* J* F

ex_OtherToolChange : ToolChangeComment

: N T M06

ex_Rapid : N G00 X Y Z

ex_Linear : N G01 X Y Z F

Примеры распространенных форматов

При выводе номера программы (O0001 (Пример 1)), первые четыре цифры должны быть заполнены
значениями. Для этого ProgramNumber может быть установлен следующим образом:

ProgramNumber :O Y4NN0 Y4NN0 0 ----

O: Символ, который будет выводиться в коде УП.


Y 4 NN 0: Первый Y заполняет первые цифры нулями, 4 показывает, какие цифры будут заполнены
(4 первые цифры); N подтверждает отсутствие десятичной точки; N чтобы не заполнять нулями
последующие цифры, 0 указывает на то, что последующие цифры не будут заполнены.
Одинаковые параметры применяются для вывода в дюймовой и метрической системах.
0: Значение на выходе установлено как 0, так что номер программы всегда будет выводиться без
знака.

MiscMCode, MiscGCode

В разделе Символические коды с помощью MiscSymbolicCode # можно определить только двадцать


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


www. dptechnology.ru
Форматируемые коды MiscMCode и MiscGCode могут быть использованы для разных M и G кодов.
MiscMCode и MiscGCode не соответствуют никаким значениям в ESPRIT. Их использование
определяется только пользователем, и они всегда перезаписываемые, аналогично MiscFormat1 и т.д.

Заполнение: использование подчеркивания

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

Все эти значения используют разный формат и поэтому должны быть описаны различными
свойствами в Форматируемы кодах. Чтобы быть в состоянии сделать это, вы можете использовать
технику заполнение (использование "_" символа):

EndSequenceNumber :Q N4NN0 N4NN0 0 ----


MiscFormat5 : Q_ N3NY4 N5NY3 0 ----
Peck : Q__ N3NY4 N3NY3 0 1N00

При использовании вышеуказанных кодов в ваших ПП только Q и его значение будет выводиться.
Знак "_", будет проигнорирован.

Данный пример продемонстрировал вам, как вы можете определить несколько форматируемых кодов,
которые должны быть выведены в УП с использованием один и тех же символов, но с разным
форматированием.
Примечания:
• Объем заполнения не ограничен. Вы можете добавлять столько подчеркиваний, сколько вам нужно,
так как все подчеркивания будут удалены.

• Вы можете также заполнять символические коды (см. обсуждение в следующем разделе). Например,
"CoolantFlood: M8_M28" выведет оба M-кода в одной строке с пробелом между ними.

Двойная точка для вставки символов и чисел в середине форматируемых кодов

Это может быть очень полезно при работе с переменными.

Вот пример:

MiscFormat1 : Z[#500+..] 13Y14 15Y13 1 1Y10

Вы можете использовать примеры Z [# 500 + ..] * (Значение, которое должно быть выведено).
Например, Z [# 500 + ..] * (2) будет выводиться, как это (в формате выше): Z [# 5002,0].

Установка знака вывода в положение (-1) для исключения кода, удаления N-номеров

Если Знак Вывода (четвертая колонка) в форматируемом коде установлен на (-1), то вывод символов
и значений будет подавлен. Это, например, очень полезно, если необходимо отключить вывод N-
кодов в УП.
В этом примере знак вывода равен 0, поэтому N-код будет выводиться без знака.

****** FORMATABLE CODES ******

SequenceNumber : N N 4 N N 0 N 4 N N 0 0 - - - -

Код УП при заданных выше параметрах:

N1 (SPINDLE-1 GROOVING FACE - CANNED CYCLE)


N2 (T1515 GROOVING INSERT FACE 3V)
N3 G28 U0
N4 G28 V0 W0
N5 G54


www. dptechnology.ru
N6 G00 T1515

Теперь изменим формат свойств на следующие - N-код не будет более выводится:

****** FORMATABLE CODES ******

SequenceNumber : N N 4 N N 0 N 4 N N 0 -1 - - - -

Код УП (с настройками выше)

(SPINDLE-1 GROOVING FACE - CANNED CYCLE)


(T1515 GROOVING INSERT FACE 3V)
G28 U0
G28 V0 W0
G54
G00 T1515

Нулевой формат

Некоторые значения, например, время задержки, не должны быть выведены в коде УП, если их
значение равно 0 в ESPRIT.

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

DwellTime : G04_U 13Y14 13Y14 0 ----

Символические коды

Символический код генерируется в файл УП именно так, как показано на файле ПП .asc.

Структура раздела символический кодов:

Keyword : Symbol

В разделе могут присутствовать следующие команды:

****** SYMBOLIC CODES ******


MotionRapid : G00
MotionLinear : G01
XYPlane : G17
EndProgram : M02
SpindleOff : M05
ToolChange : M06
CoolantOff : M09

Символические коды должны быть определены в разделе символический код, прежде чем они могут
быть использованы в других разделах файла .asc.
Ниже приведен пример символических кодов, используемых в разделе "Примеры".

ex_Rapid : N G00 X Y Z
ex_Linear : N G01 X Y Z F
ex_ToolCancel : N M05 M09
ex_MainEnd : N M02

Символические коды для G00, G01, M05, M09, M02 уже определены в этом разделе.

Символические выключатели


www. dptechnology.ru
Символический выключатель - ключевое слово, которое включает вывод одного или нескольких
символических кодов в зависимости от определенных условий.

Как и другие символические коды, вывод символический кодов с использованием символических


выключателей должен быть определен в разделе символическом Коды.

Символический выключатель CircleDirection специально разработан для включения символов,


назначенные для ключевых слов MotionCW и MotionCCW. CircleDirection, как правило, будет иметь
следующие:

MotionCW : G02
MotionCCW : G03

Пример:

ex_Circle : N G17 CircleDirection* X Y I* J* F

Если G02 или G03 были использованы непосредственно в ex_Circle вместо выключателя, ПП не будет
работать, потому что все дуги будут выведены с одним и тем же кодом направления, либо G02 или
G03. Наоборот, использование символического выключателя CircleDirection, символический код,
определенный для MotionCW или MotionCCW, будет выведен в зависимости от направления дуги.

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

CompensationSide, который часто встречается в ex_Compensation, будет переключаться между


CompensationOff, CompensationLeft и CompensationRight, которые, как правило, G40, G41 и G42.

CoolantCode будет переключаться между CoolantOff, CoolantOn, CoolantMist, CoolantFlood,


CoolantFlood2 и т.д. в зависимости от настроек подачи СОЖ, выбранных для конкретного
инструмента.

MiscSymbolicCode #

MiscSymbolicCode # (# с равным номером от 1 до 20) соответствует определенным пользователем


разным кодам.

Вот пример:

****** FORMATABLE CODES ******

ProgramNumber : O Y 4 N N 0 Y 4 N N 0 0 1 N 0 0

***** SYMBOLIC CODES ******

MiscSymbolicCode1 : G10

ex_MachineSetup : O*

: G10

: MachineSetupComment

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

10 
www. dptechnology.ru
Переменные
Переменные позволяют хранить отдельные значения, массивы значений, или создавать выключатели.
В файле ПП .asc можно объявлять переменные для собственного использования. Форматом для этого
является:

Variable : VariableName1 VariableName2 VariableName3

В одной линии могут быть определены несколько переменных.

Практически любое имя может быть использовано для объявления переменной при условии, что оно
еще не было использовано для системной переменной с тем же названием. Например, ProgNumber не
может быть использована в качестве переменной, поскольку она уже определена как системная
переменная на языке постпроцессирования. Кроме того, имена переменных не могут начинаться с
цифры, так Milling5Axis - возможно, но 5AxisMilling - нет.

Переменной может быть присвоено значение в любой ex_ example, используя следующий формат:

: VariableName=(expression)

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

Предположим, что в EDM создана операция «Установить начало координат», тогда в УП должно быть
G92 с X, Y, Z начальной позиции со страницы установки начала координат. Но если операция
«установить начало координат не создана, то должна быть выведена G92 с координатами X, Y, Z
точки подхода (входа) первой операций.

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

Изначально флаг переменной снят, но как только выводится G92, переменная будет установлена
таким образом, чтобы предотвратить дополнительный вывод G92:

MiscFormat1 : X_ N 4 Y N 4 N 5 Y N 3 1 1 N 0 0
MiscFormat2 : Y_ N 4 Y N 4 N 5 Y N 3 1 1 N 0 0
MiscFormat3 : Z_ N 4 Y N 4 N 5 Y N 3 1 1 N 0 0
SetOrigin : G92
Variable : seto
ex_StartCode : seto=(0)
ex_SetOrigin : G92 X_*(xstart) Y_*(ystart) Z_*(zstart)
: seto=(1)
ex_CycleStart : If (seto=0)
: G92 X_*(xnext) Y_*(ynext) Z_*(znext)
: seto=(1)
: EndIf

Массив переменных может быть объявлен в формате array_name (lower_index.. Upper_index).

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

Variable : css(1..999) fpr(1..999) opcount


ex_StartCode : opcount=(0)
ex_CycleDefinition : opcount=(opcount+1)
: css(opcount)=(nextclfile(418))
: fpr(opcount)=(nextclfile(416))

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

Индексные номера для CL-кодов можно найти в приложении к справке ESPRIT По


Постпроцессорам. Например, CL-код 418 возвращает скорость вращения шпинделя и CL- код
416 возвращает скорость подачи из операции ESPRIT. Вы также можете вручную найти CL-
коды ESPRIT, щелкнув правой кнопкой мыши на параметре в странице технологии и выбрав Edit
Properties. CL- код отображается в скобках в верхней части диалогового окна.

Подпрограммы

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

Однострочные подпрограммы

Некоторые подпрограммы могут состоять только из части одной линии. Форматом этих подпрограмм
является:

Define subroutine_name [code] EndDefine

Ключевые слова Define и EndDefine используются для создания подпрограммы.

Для вызова подпрограммы, $ subroutine_name вставляется в соответствующие примеры. Знак $


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

В качестве примера рассмотрим ситуацию, когда все стандартные циклы сверления отменяются с
помощью N G00 G80 M09. Вместо того чтобы вставлять этот код во все примеры отмены и потом быть
вынужденным вносить изменения в каждый, то же самое можно получить в одну строку:

Define cannedcancel N G00 G80 M09 EndDefine

Подпрограмма отмены будет вызвана следующим образом:

ex_DrillCancel : $cannedcancel

ex_PeckCancel : $cannedcancel

ex_TapCancel : $cannedcancel

ex_BoreCancel : $cannedcancel

Многострочные подпрограммы

Другие подпрограммы может включать несколько строк кода УП. Формат для них:

Define subroutine_name
: [code]
: ...
: [code]
EndDefine

Между Define и EndDefine, может быть вставлено столько строк кода, сколько необходимо.

Типичный фрезерный постпроцессор может содержать следующее:

12 
www. dptechnology.ru
ex_FirstToolChange : T M06
: ToolChangeComment
: T(secondtool)

ex_OtherToolChange : T M06
: ToolChangeComment
: T(nexttool)

ex_LastToolChange : T M06
: ToolChangeComment
: T*(firsttool)

Данный код может быть отображен в подпрограмме следующий образом:

Define tc
: T M06
: ToolChangeComment

EndDefine

ex_FirstToolChange $tc
: T(secondtool)

ex_OtherToolChange $tc
: T(nexttool)

ex_LastToolChange $tc
: T*(firsttool)

Обратите внимание на то, что нет двоеточия (:) между ex_keyword и $ для вызова подпрограммы.
Это происходит потому, что в многострочных подпрограммах двоеточие встроено в ключевые слова
подпрограммы Define и EndDefine. Если вы включите их в обоих местах, вы получите ошибку при
компиляции.

Примечания:

• Убедитесь, что всегда завершает подпрограмму с EndDefine

• Подпрограммы всегда должны быть определены перед местами вызова

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

Раздел секций

Раздел секций является сердцем постпроцессора, поскольку он дает примеры того, как должен
выглядеть код УП для станка с ЧПУ. Ключевые слова секций должны начинаться с EX_. Всё, что
запрограммировано в ESPRIT имеет соответствующее ключевого слова EX_ в ПП.
Структура раздела секций:

ex_Keyword : NC Code Format

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

• символические коды
13 
www. dptechnology.ru
• Символический выключатели
• Форматируемые коды

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

ex_Circle : N G17 CircleDirection* X Y I* J* F

Другие секции могут генерировать несколько строчек кода УП, например, секция смены инструмента:

ex_OtherToolChange : ToolChangeComment

: N T M06

Каждая строка после ex_ keyword, которая начинается с двоеточия, создает строку в файл УП.
Любую строку в ex_ example можно разбить на несколько строк в файле .asc, но она по-прежнему
будет создавать только одну строку кода в файле УП. Это делается с помощью \\ продолжения строки
в файле .asc:

ex_CycleStart : Comment

: SpindleUnit If (spindlespeed<500) S(1) Else \\

If ((spindlespeed>=500) && (spindlespeed<1250)) \\

S(2) Else S(3) EndIf EndIf SpindleDirection

Важные замечания:

• Каждый ex_ example в файле процессора должен иметь двоеточие (:) в первой строке

• Каждый пример может быть определен только один раз: каждый пример может иметь только один
экземпляр на постпроцессор

Обзор порядке следования примеров

Для работы с постпроцессором необходимо знать рабочий процесс в ex_ examples. Таким образом,
определенная логика может быть реализована в каждом примере вашего постпроцессора.
Самый лучший способ рассмотреть этот поток - разместить длинный код УП: в ESPRIT перейдите в
меню Файл> Расширенная УП ... или нажмите на Ctrl + F9 на клавиатуре:

Отображается окно Расширенного вывода УП

14 
www. dptechnology.ru
Выберите «Длинная» для отображения развернутого кода УП:

Длинный код УП показывает "ex_ ..." ключевые слова из файла .asc перед строкой (строками) кода
УП, которые данное ключевое слово производит. Таким образом, вы можете видеть рабочий процесс.
Пример:

575 Hard ex_OtherToolChange


N45 (SPINDLE-1 WRAP DRILLING OD Y0 - BORE)
(T1414 EM 05.0 L)
G30 U0
G30 V0 W0
G54
G00 T1414
576 Hard ex_ConstantSurface
577 Hard ex_SetWorkCoor
578 Hard ex_CycleStart(DrillWrap) M69
G98 G19 M45
G97 S3000 M13
579 Hard ex_ChangeWorkSystem(DrillWrap)
580 Soft ex_Rapid(DrillWrap)
581 Soft ex_Rapid(DrillWrap)
582 Hard ex_StartPoint(DrillWrap) G00 C-180.0
G00 Z-19.644
X42.1 Y0.0 M08
583 Soft ex_BoreStart(DrillWrap) G89 X34.4 R0.0 F150.0
584 Soft ex_BoreBody(DrillWrap) C-90.0
585 Soft ex_BoreBody(DrillWrap) C0.0
586 Soft ex_BoreBody(DrillWrap) C90.0
587 Soft ex_BoreCancel(DrillWrap) G80
588 Hard ex_CycleEnd(DrillWrap)
589 Hard ex_ToolCancel M09
G30 U0
G30 V0 W0
M05
M69
M46

Жесткая и мягкая
Как вы можете видеть в примере выше, есть мягкие и жесткие примеры.

• Жесткий пример вызывается всегда, независимо от технологии или других параметров

• Мягкие примеры вызываются только при определенных условиях

ex_StartCode является жесткий примером, потому что он всегда приходит в начале вывода кода УП.
ex_MainStart является жесткий примером, потому что он всегда приходит в начале основной
программы. Точно так же и ex_MainEnd и ex_EndCode – жесткие примеры.

ex_Tap2Start и ex_Tap2Body - мягкие примеры, потому что они используются только, если
Стандартный Цикл включен и Cycle Type установлен на Tap2 в диалоговом окне технологии
сверления. Если постоянный цикл был включен и цикл типа был только Tap, то будут вызываться
мягкие примеры ex_TapStart и ex_TapBody. Если постоянный цикл не включен, то вместо этих
примеров всё движение будет разбито на движения ex_Rapid и ex_Linear, необходимых для
15 
www. dptechnology.ru
выполнения резьбонарезания в каждом отверстии. ex_Rapid и ex_Linear – сами по себе мягкие
примеры.

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

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

Если постоянный цикл был включен и был выбран цикл типа Tap 2 в диалоговом окне технологии
сверления, но этот файл ПП не содержит примеры ex_Tap2Start и ex_Tap2Body, то вместо этого будет
использоваться ex_TapStart и ex_TapBody. Если эти примеры не были определены в файле ПП, то
придется прибегнуть к разбиению движения на движения ex_Rapid и ex_Linear.

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

Если вы видите жесткий пример при длинном (или Extended) выводе кода УП, который выводится в
определенном месте, где нужен вывод кода УП, то вы можете добавить этот пример на свой файл ПП
.asc и быть уверенным, что он всегда будет вызван в одном и том же месте.

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

Переопределение данных

При переопределения форматируемых значений очень важно понимать различие между


форматируемыми размерами и форматируемыми разными. В общем можно сказать следующим
образом:

• значения форматируемых Разных всегда могут быть переопределены

• переопределение значений форматируемых размеров может дать непредсказуемый результат при


выводе кода УП, и настоятельно не рекомендовано.

Значения, которые поступают из графики, называются размерами, в то время как имя «Разные»
используется для значений, которые обычно поступают со страницы технологии. Например, XAbsolute
считается форматируемым размером, а ToolNumber считается форматируемым разным.
Вероятно, лучшим примером этого является постпроцессор для многозадачных станков. При повороте
стола, как правило, следует отправить инструмент на безопасное расстояние в начальную позицию.
Это часто осуществляется с помощью G91 G28 X0 Y0 Z0 в коде УП. Одним из способов, с которым вы
можете получить этот вывод, может быть: G91 * G28 * X (0) Y (0) Z (0). Символ (0) переопределяет
форматируемое значение на 0, но G91 * принудительно переводит кода в режим приращений. Таким
образом, вместо того, чтобы двигаться от нуля, вам нужно дополнительное перемещение, чтобы
вернуться обратно в нулевое положение. Если инструмент начинает работу в X5, вместо X0 в коде УП
будет X-5.

Другой пример - применить коэффициент масштабирования. Может быть, у вас есть определенная
пользователем переменная под названием шкала, которая устанавливается с помощью одного из
пользовательских настроек. Предположим, значений I и J для дуг или значений U и V для 4 осей
измеряются постепенно из X и Y. Так если вы переопределяете значения X и Y напрямую, то вы также
изменяете ссылки на эти дополнительные расчеты. Так что если вы просто попробуете применить тот
же масштаб для I и J или U и V значений, то число получится неправильным.

Решением во всех случаях является определение ключевого слова MiscFormat#, например,


MiscFormat1 и перезаписать символ для MiscFormat #.

16 
www. dptechnology.ru
Пока вы не перезаписали форматируемое измерение, вам все еще нужно обновить его, как если бы
это был вывод. Это делается с NCOutputOff и NCOutputOn. В целом, принятый подход показан в
примере ниже:

XAbsolute : X N 4 Y N 4 N 5 Y N 3 1 1 N 0 0
YAbsolute : Y N 4 Y N 4 N 5 Y N 3 1 1 N 0 0
MiscFormat1 : X_ N 4 Y N 4 N 5 Y N 3 1 1 N 0 0
MiscFormat2 : Y_ N 4 Y N 4 N 5 Y N 3 1 1 N 0 0

MotionRapid : G00

Define XOut X_(overwrite expression) NCOutputOff X NCOutputOn EndDefine

Define YOut Y_(overwrite expression) NCOutputOff Y NCOutputOn EndDefine

ex_Rapid : G00 $XOut $YOut

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

Отладка

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

До ESPRIT 2010, вы, вероятно, использовали форматируемые коды, чтобы сделать это:

MiscFormat1 : Debug N 4 Y N 4 N 5 Y N 3 7 1 N 0 6
Variable : Test
ex_Rapid : Debug*(Test)

Это не лучший способ сделать это, потому что вывод значение переменной зависит от
форматирования DEBUG форматируемого. Например, если вы работаете в метрической СИ, только три
цифры будут выведены и значение вашей переменной будет округлено.

Для отладки в ESPRIT, вы должны использовать OutputString (). Это было добавлено в качестве
поддержки части переменной строки в ESPRIT 2010 года.

С помощью этой функции вы можете легко вывести переменную стандартного листинга (без
перезаписи форматируемого и тем самым ограничить число знаков после запятой). Приведенный
выше пример будет теперь выглядеть так:

Variable : Test

ex_Rapid : OutputString(“Test=” + Test)

Логические операторы

Следующие логические операторы могут быть использованы в постпроцессоре:


> Greater than Больше чем
< Less than Меньше чем
= Equal to Равно
<> Not equal Не равно
>= Greater than or equal to Больше или равно
<= Less than or equal to Меньше или равно
|| Or Или
&& And И

Математические операторы и функции

17 
www. dptechnology.ru
Следующие математические операторы могут быть использованы в постпроцессоре (указаны в
порядке приоритета):

() Скобки (по умолчанию), или при любом определении StartExp и EndExp, используются для
группировки частей выражения. Все, что внутри имеет наивысший приоритет, и
оценивается в первую очередь.
- Отрицание. Номера, которые должны быть сведены на нет, должны быть заключены в
скобки, как в случае с (-2). Переменные и выражения, которые должны быть сведены на
нет следует умножить на (-1), а в (-1) * (выражение).
* умножение
/ Деление (тот же приоритет, как умножение)
% Модуль, который возвращает остаток от деления
+ Сложение
- Вычитание (тот же приоритет, как сложение)

Помимо математических операторов существуют также математические функции:

ABS ABS - функция, которая возвращает абсолютное значение аргумента. Если значение
положительное, абсолютное значение то же самое. Если значение отрицательное, то
отрицается, чтобы иметь положительное значение той же величины.
ACS ACS - Функция, которая возвращает арккосинус значения. ACS - это угол (в градусах),
который имеет значение косинуса, равное данному аргументу.
ASN ASN - Функция, которая возвращает арксинус значения. ASN – это угол (в градусах),
который имеет значения синуса, равное данному аргументу.
ATN ATN - Функция, которая возвращает арктангенс значения. ATN – это угол (в градусах),
который имеет значение тангенса, равное данному аргументу.
COS COS - это функция, которая возвращает косинус заданного угла. Значение угла
задается в градусах.
EXP EXP - Функция, которая поднимает натуральный логарифм (е) сила аргумента.
Другими словами, EXP (х) равна е ^ х. е является трансцендентным постоянной (как,
например, пи) и имеет значение от примерно 2,71828.
INT INT - Функция, которая возвращает наименьшее следующее целое значение для
данного аргумента.

Для положительных чисел, это число с удаленной десятичной частью. Для


отрицательных чисел с десятичной частью, это значение на единицу меньше, чем число
с удаленной десятичной частью. Например, INT (3.14) = 3, а INT (-3,14) = (-4).
LN LN is a функция, которая возвращает натуральный логарифм значения. Натуральный
логарифм - это степень, в которую должна быть возведена постоянная е, чтобы достичь
данного значения. е *LN (х) = х. е является трансцендентной постоянной (как пи) и
имеет значение приблизительно 2,71828.
SIN SIN - Функция, которая возвращает синус заданного угла. Значение угла задается в
градусах.
SQR SQR - Функция, которая возвращает квадрат значения (это значение в степени 2). SQR
(х) равна х ^ 2.
SQRT SQRT - Функция, которая возвращает квадратный корень из заданного значения.
TAN TAN - Функция, которая возвращает тангенс заданного угла. Значение угла задается в
градусах.

 Примечания:
• Оператор «+» также используется для объединения строк. Если один из операндов в
выражении является строкой, то «+» рассматривается как объединение. Оператор «+»
работает только как сложение, если оба операнда являются числами или числовыми
переменными.
 Показателя оператора степени ^ не поддерживается, но это легко обойти использованием
функций EXP и LN. Так: х = у = ехр (у * ln (х)).

Cпециальные ключевые слова для организации циклов в программе

Специальные ключевые слова позволяют расширить функциональность вашего постпроцессора.


Ключевое слово IF и Else добавят цикл в программу для проверки заданного условия.

18 
www. dptechnology.ru
• "If" является специальным ключевым словом, которое варьирует вывод кода УП в зависимости от
теста условия

• «Else» является специальным ключевым словом, которое отделяет истинное и ложное утверждение
для условия If

• "ElseIf” -специальное ключевое слово, которое используется для тестирования нескольких


диапазонов значений

• «EndIf - специальное ключевое слово, которое закрывает условный переход If

Пример If (одной строкой):

ex_Rapid : If (OutputStartPoint=1) ExitExample EndIf

: G00 X Y Z CoolantCode

If/Else пример (несколько линий):

Define PreCallTool
If (NextTool=0) \\
If (PresentTool<>FirstTool) T*(FirstTool) EndIf \\
Else \\
T*(NextTool) \\
EndIf
EndDefine

Что происходит перед тем, как Else выполняется, когда условие истинно. Что появляется после Else и
прежде, чем выполнится EndIf, когда условие ложно.

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

Пример ElseIf:

ex_CycleStart : Comment
: If (SpindleSpeed<500)
: SpindleUnit S(1) SpindleDirection
: ElseIf (SpindleSpeed<1250)
: SpindleUnit S(2) SpindleDirection
: ElseIf (SpindleSpeed<2500)
: SpindleUnit S(3) SpindleDirection
: Else
: SpindleUnit S(4) SpindleDirection
: EndIf

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

• ‘While’ - специальное ключевое слово, которое начинает цикл, который будет продолжаться пока
условие истинно, и прекращает цикл, как только условие ложно

• ‘EndWhile’ является специальным ключевым словом, которое закрывает цикл While

Пример While:

Variable : LoopCounter
MiscFormat1 : =~ N 4 N N 0 N 4 N N 0 0 1 N 0 0

19 
www. dptechnology.ru
ex_EndCode : LoopCounter=(1)
: “To fully demonstrate this example, do a Set Origin”
: “or Machine Setup and change the Program Number.”
: While (LoopCounter<=prognumber)
: “Loop Counter” =~*(LoopCounter)
: LoopCounter=(LoopCounter+1)
: EndWhile

20 
www. dptechnology.ru

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