Haas Фрезерный станок. Руководство оператора (96-0117 ред. AL Июль 2011) - часть 8

 

  Главная      Книги - Разные     Haas Фрезерный станок. Руководство оператора (96-0117 ред. AL Июль 2011)

 

поиск по сайту            правообладателям  

 

   

 

   

 

содержание      ..     6      7      8      9     ..

 

 

 

Haas Фрезерный станок. Руководство оператора (96-0117 ред. AL Июль 2011) - часть 8

 

 

112

ПЕРЕМЕННЫЕ

ИСПОЛЬЗОВАНИЕ

#7081-#7086 (#14081-#14086)

Дополнительные коррекции детали G114 (G154 P5)

#7101-#7106 (#14101-#14106)

Дополнительные коррекции детали G115 (G154 P6)

#7121-#7126 (#14121-#14126)

Дополнительные коррекции детали G116 (G154 P7)

#7141-#7146 (#14141-#14146)

Дополнительные коррекции детали G117 (G154 P8)

#7161-#7166 (#14161-#14166)

Дополнительные коррекции детали G118 (G154 P9)

#7181-#7186 (#14181-#14186)

Дополнительные коррекции детали G119 (G154 P10)

#7201-#7206 (#14201-#14206)

Дополнительные коррекции детали G120 (G154 P11)

#7221-#7226 (#14221-#14221)

Дополнительные коррекции детали G121 (G154 P12)

#7241-#7246 (#14241-#14246)

Дополнительные коррекции детали G122 (G154 P13)

#7261-#7266 (#14261-#14266)

Дополнительные коррекции детали G123 (G154 P14)

#7281-#7286 (#14281-#14286)

Дополнительные коррекции детали G124 (G154 P15)

#7301-#7306 (#14301-#14306)

Дополнительные коррекции детали G125 (G154 P16)

#7321-#7326 (#14321-#14326)

Дополнительные коррекции детали G126 (G154 P17)

#7341-#7346 (#14341-#14346)

Дополнительные коррекции детали G127 (G154 P18)

#7361-#7366 (#14361-#14366)

Дополнительные коррекции детали G128 (G154 P19)

#7381-#7386 (#14381-#14386)

Дополнительные коррекции детали G129 (G154 P20)

#7501-#7506

Приоритет спутника

#7601-#7606

Состояние спутника

#7701-#7706

Номера программ обработки детали, назначенных спутникам

#7801-#7806

Подсчет использования спутника

#8500

Расширенное управление инструментами (РУИ) Group ID (индекс группы)

#8501

РУИ. Процент имеющегося ресурса инструмента для инструментов в 

группе.

#8502

РУИ. Суммарный подсчет использования инструмента, имеющегося в 

группе.

#8503

РУИ. Суммарный подсчет выполненных отверстий в группе.

#8504

РУИ. Суммарное имеющееся время подачи (в секундах) в группе.

#8505

РУИ. Суммарное имеющееся время инструментов (в секундах) в группе.

#8510

РУИ. Номер следующего используемого инструмента.

#8511

РУИ. Процент имеющегося ресурса следующего инструмента.

#8512

РУИ. Имеющийся подсчет использования следующего инструмента.

#8513

РУИ. Имеющийся подсчет выполненных отверстий следующего 

инструмента.

#8514

РУИ. Имеющееся время подачи следующего инструмента (в секундах).

#8515

РУИ. Имеющееся суммарное время следующего инструмента (в секундах).

#8550

Код отдельного инструмента

#8551

Количество канавок инструмента

#8552

Максимум записанных вибраций

#8553

Коррекции на длину инструмента

#8554

Коррекции на длину инструмента с учетом износа

#8555

Коррекция на диаметр инструмента

#8556

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

#8557

Фактический диаметр

113

ПЕРЕМЕННЫЕ

ИСПОЛЬЗОВАНИЕ

#8558

Программируемое положение СОЖ

#8559

Таймеры подачи инструмента (секунд)

#8560

Таймеры полного времени инструмента (в секундах)

#8561

Ограничение срока службы инструмента

#8562

Счетчик срока службы инструмента

#8563

Контроль нагрузки инструмента (максимальная нагрузка, 

зарегистрированная до настоящего времени)

#8564

Ограничение срока службы инструмента

#14401-#14406

G154 P21 дополнительная коррекция детали

#14421-#14426

G154 P22 дополнительная коррекция детали

#14441-#14446

G154 P23 дополнительная коррекция детали

#14461-#14466

G154 P24 дополнительная коррекция детали

#14481-#14486

G154 P25 дополнительная коррекция детали

#14501-#14506

G154 P26 дополнительная коррекция детали

#14521-#14526

G154 P27 дополнительная коррекция детали

#14541-#14546

G154 P28 дополнительная коррекция детали

#14561-#14566

G154 P29 дополнительная коррекция детали

#14581-#14586

G154 P30 дополнительная коррекция детали

#14781-#14786

G154 P40 дополнительная коррекция детали

#14981-#14986

G154 P50 дополнительная коррекция детали

#15181-#15186

G154 P60 дополнительная коррекция детали

#15381-#15386

G154 P70 дополнительная коррекция детали

#15581-#15586

G154 P80 дополнительная коррекция детали

#15781-#15786

G154 P90 дополнительная коррекция детали

15881-15886

G154 P95 дополнительная коррекция детали

15901-15906

G154 P96 дополнительная коррекция детали

15921-15926

G154 P97 дополнительная коррекция детали

15941-15946

G154 P98 дополнительная коррекция детали

15961-15966

G154 P99 дополнительная коррекция детали

114

п

одробнее

 

о

 

сисТемных

 

переменных

Переменные #750 и #751

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

проверку данных в очереди в буфере последовательного порта 2 и получить данные для обработки. 

Переменная #750 сообщит программисту, есть ли данные в очереди в RS232, порт 2. Значение 

1 означает, что в буфере приема находятся данные в очереди, в другом состоянии возвращается 

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

Это означает, что сначала проверяется содержимое буфера для определения, пусто ли он, если это не 

так - возвращается значение следующего символа в очереди.

1-разрядные дискретные входы

Входы, обозначенные как «резервные» (spare), можно подключать к внешним устройствам для 

использования программистом.

1-разрядные дискретные выходы

система управления HAAS способен контролировать до 56 дискретных выходов. Тем не менее 

некоторые из этих выходов уже зарезервированы для использования контроллером HAAS.

ВНИМАНИЕ! Не используйте выходы, зарезервированные системой. Их использование может привести к 

травме или выходу из строя оборудования.

Пользователь может изменять состояние этих выходов, записывая значения в переменные, 

обозначенные как «резервные». Если выходы подключены к реле, то присвоение значения 1 включает 

реле. Присвоение значения 0 сбрасывает реле.
При обращении к этим выходам возвращается текущее состояние выхода, которое может 

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

пользовательским М-кодом. Например, после проверки того, что выход #1108 «в резерве»:
#1108=1; (Включает реле #1108)
#101=#3001+1000;(101 наступит через 1 после текущего момента)
WHILE [[#101 GT #3001] AND [#1109 EQ 0]] D01
END1 (Подождать здесь 1 секунду или до срабатывания реле #1109)
#1108=0; (Выключает реле #1108)
Если система управления не оборудован релейной платой М-кодов, то коды от M21 до M28 будут 

отображаться от #1132 до #1139. Если релейная панель М-кодов установлена, см. дополнительную 

информацию и инструкции в разделе "Опция 8М".

ПРИМЕЧАНИЕ:  Всегда выполняйте тестовые или пробные прогоны программ, которые написаны для 

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

Максимальные нагрузки оси

Для хранения значений максимальной нагрузки для каждой оси теперь используются следующие 

переменные. Их можно сбросить, выключив и включив питание станка или установив макропрограмму 

на 0 (например, #1064=0;).

   1064 = ось X 

1264 = ось C

   1065 = ось Y 

1265 = ось U

   1066 = ось Z 

1266 = ось V

   1067 = ось A 

1267 = ось W

   1068 = ось B 

1268 = ось T

Коррекция на инструмент

Каждый инструмент имеет коррекцию на длину (H) и радиус (D) и связанные с ними величины износа.

#2001-#2200 

Геометрические коррекции H (1-200) на длину.

115

#2200-#2400 

Геометрические коррекции H (1-200) на длину с учетом износа.

#2401-#2600 

Геометрические коррекции D (1-200) на диаметр.

#2601-#2800 

Геометрические коррекции D (1-200) на диаметр с учетом износа.

Программируемые сообщения

#3000 Сигналы об ошибке можно программировать. Программируемый сигнал об ошибке будет 

действовать как встроенные сигналы об ошибке. Для подачи сигнала об ошибке макропеременной 

#3000 присваивается значение от 1 до 999.

#3000= 15 (СООБЩЕНИЕ, ПОМЕЩАЕМОЕ В СПИСОК ОШИБОК);

После этого в правом нижнем углу дисплей мигает слово «Alarm» (сигнал об ошибке), а в список 

сигналов об ошибке заносится текст в следующем комментарии. К номеру аварийного сообщения 

(например, 15) прибавляется 1000 и эта сумма используется в качестве номера аварийного сообщения. 

При выдаче такого аварийного сообщения все перемещения останавливаются и для продолжения 

требуется сброс программы. Программируемые сигналы об ошибке имеют номера от 1000 до 1999. 

Первые 34 символа комментария используются для сообщения о сигнале об ошибке.

Таймеры

Можно установить два таймера на определенное значение путем присвоения числового значения 

соответствующей переменной. Программа затем может выполнить чтение этой переменной и 

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

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

необходимо учитывать время.
#3001 Millisecond Timer (таймер миллисекунд) - Таймер миллисекунд обновляется каждые 20 

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

включении питания показания миллисекундомера сбрасываются. Таймер имеет предел работы - 497 

суток. Целое число, возвращаемое при вызове #3001, представляет собой количество миллисекунд.
#3002 Hour Timer (часовой таймер) - Часовой таймер похож на таймер миллисекунд с той разницей, что 

число, возвращаемое при вызове #3002, равно количеству часов. Часовый таймер и миллисекундомер 

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

Ручные коррекции системы

#3003 Переменная 3003 является параметром пропуска отдельного блока. Она обходит функцию 

"покадровый режим" G-кода (т.е. является более приоритетной) В следующем примере функция 

"покадровый" (Single Block) игнорируется, когда #3003 присваивается значение 1. После того, как 

M3003 присвоено значение 1, все команды G-кода (строки 2-5) выполняются последовательно, даже 

если функция "покадровый режим" включена. При установке #3003 на "ноль" функция "покадровый" 

действует как обычно. Пользователь должен нажимать кнопку «Запуск цикла» для выполнения каждой 

строки программы (строки 7-11).

#3003=1;

G54 G00 G90 X0 Y0;

S2000 M03;

G43 H01 Z.1;

G81 R.1 Z-0.1 F20.;

#3003=0;

T02 M06;

G43 H02 Z.1;

S1800 M03;

G83 R.1 Z-1. Q.25 F10.;

X0. Y0.;

Переменная #3004

Переменная #3004 обходит некоторые функции управления при выполнении.
Первый разряд отключает функцию Feed Hold (Остановка подачи). Если остановка подачи во время 

116

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

назначить переменной #3004 значение 1. После этого фрагмента кода присвойте переменной #3004 

значение 0 для восстановления функции кнопки Feed Hold (Остановка подачи). Например:

Код подвода 

(Остановка подачи разрешена)

#3004=1;  

(Отключает кнопку Feed Hold)

Непрерываемый код 

(Остановка подачи запрещена)

#3004=0;  

(Включает кнопку Feed Hold)

Код отвода 

(Остановка подачи разрешена)

Ниже приводится схема разрядов переменной #3004 и соответствующие функции обхода.

E - Включено D - Выключено

#3004

Остановка 

подачи

Коррекция скорости 

подачи

Проверка абсолютной 

остановки

0

Е

Е

Е

1

D

Е

Е

2

Е

D

Е

3

D

D

Е

4

Е

Е

D

5

D

Е

D

6

Е

D

D

7

D

D

D

#3006 Программируемый останов

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

и ожидает нажатия кнопки Cycle Start. После нажатия кнопки Cycle Start (Запуск цикла) программа 

продолжится с блока, следующего за #3006. В следующем примере в левой нижней части экрана будут 

показаны первые 15 знаков комментария.
IF [#1 EQ #0] THEN #3006=101 (здесь комментарий);

#4001-#4021 Групповые коды последнего блока (модальные)

Группирование G-кодов позволяет повысить эффективность обработки. G-коды с близкими функциями 

обычно объединяются в одну группу. Например, G90 и G91 находятся в группе 3. Эти переменные 

хранят последний код или G-код по умолчанию для одной из 21 групп. При чтении группового кода 

макропрограмма может изменить поведение G-кода. Если в 4003 содержится 91, макропрограмма 

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

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

#4101-#4126 Адресные данные последнего блока (модальные)

Адресные коды от А до Z (исключая G) рассматриваются как модальные значения. Информация, 

представленная в последней строке кода, интерпретируемого в процессе опережающего просмотра, 

содержится в переменных с 4101 по 4126. Числовое соответствие номеров переменных алфавитным 

адресам такое же, как описано в разделе о соответствии алфавитных адресов. Например, значение 

ранее интерпретированного адреса D находится в #4107, а последнее интерпретированное значение 

I - #4104. При совмещение имен макросов М-коду нельзя передавать переменные в макропрограмму, 

используя переменные 1-33. Вместо этого в макропрограмме следует использовать значения из 4101-

4126.

#5001-#5005 Последняя заданная позиция

Через переменные #5001-#5005, X, Y, Z, A и B, соответственно, можно получить доступ к последней 

запрограммированной точке последнего блока перемещения. Значения даются в текущей рабочей 

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

117

Переменные положения осей

#5021 ось X 

#5022 ось Y 

#5023 ось Z

#5024 ось A 

#5025  Ось B  #5026 ось C

#5021-#5025 Текущие координаты станка

Текущее положение координат станка можно получить с помощью #5021-#5025, X, Y, Z, A и B, 

соответственно. Эти значения НЕЛЬЗЯ прочитать, когда станок находится в движении. Значение #5023 

(Z) дается с учетом коррекции на длину инструмента.

#5041-#5045 Текущие рабочие координаты

 Текущее положение в текущих рабочих координатах можно получить с помощью #5041-#-5045, X, Y, Z, 

A и B, соответственно. Эти значения нельзя прочитать, когда станок находится в движении. Значение 

#5043 (Z) дается с учетом коррекции на длину инструмента.

#5061-#5069 Текущая позиция сигнала пропуска

Позицию, в которой сработал последний сигнал пропуска, можно получить с помощью #5061-#5069 X, 

Y, Z, A, B, C, U, V и W, соответственно. Значения даются в текущей рабочей системе координат и могут 

использоваться, когда станок находится в движении. Значение #5063 (Z) дается с учетом коррекции на 

длину инструмента.

#5081-#5085 Коррекция на длину инструмента

Возвращает текущее значение коррекции на длину инструмента. Сюда входит геометрия инструмента, 

определяемая текущим модальным значением, заданным в H (#4008), плюс значение износа.

ПРИМЕЧАНИЕ:  Соответствие осей следующее: x=1, y=2, … b=5. Например, системная переменная 

координаты Z будет #5023.

#6996-#6999 Доступ к параметрам при помощи макропеременных

Программа может обращаться к параметрам 1 - 1000 и любому из битов параметра следующим 

образом:

#6996: Номер параметра

#6997: Номер бита (необязательный)

#6998: Содержит значение номера параметра в переменной 6996

#6999: Содержит значение бита (0 или 1) бита параметра, указанного в переменной 6997.

ПРИМЕЧАНИЕ:  Переменные 6998 и 6999 - только для чтения.

Использование

Для получения доступа к значению параметра номер этого параметра копируется в переменную 6996, 

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

6998, как показано ниже:

#6996=601 (Задать параметр 601)
#100=#6998 (Копировать значение параметра 601 в переменную #100)

Для получения доступа к конкретному биту параметра номер параметра копируется в переменную 

6996, а номер бита копируется в макропеременную 6997. Значение бита этого параметра становится 

доступным при использовании макропеременной 6999, как показано ниже:

#6996=57 (Задать параметр 57)

#6997=0 (Задать нулевой бит)

#100=#6999 (Копировать бит 0 параметра 57 в переменную #100)

ПРИМЕЧАНИЕ:  Биты параметра имеют номера от 0 до 31. 32-битные параметры выводятся на экран 

с форматированием, бит 0 - вверху слева, бит 31 - справа внизу..

118

УАСС

Состояние спутников, на устройстве автоматической смены спутников проверяется при помощи 

следующих переменных:

#7501-#7506 

Приоритет спутника

#7601-#7606 

Состояние спутника

#7701-#7706 

Номера программ обработки детали, назначенных спутникам

#7801-#7806 

Подсчет использования спутника

#3028 

Номер спутника, загруженного на приемник

Смещения

В выражении макроса можно прочитать и задать все значения коррекции на инструмент и коррекции 

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

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

из значений коррекции очередь опережающей интерпретации останавливается до выполнения этого 

блока.

#5201-#5205 

Значения коррекции G52 X, Z, Y, A, B

#5221-#5225 

G54 “  “ “ “  “   “      “

#5241-#5245 

G55 “  “ “ “  “   “      “

#5261-#5265 

G56 “  “ “ “  “   “      “

#5281-#5285 

G57 “  “ “ “  “   “      “

#5301-#5305 

G58 “  “ “ “  “   “      “ 

#5321-#5325 

G59 “  “ “ “  “   “      “

#7001-#7005 

Значения коррекции G110 X, Z, Y, A, B

   “     “ 

    “  “ “ “  “   “       “  

#7381-#7385 

Значения коррекции G129 X, Z, Y, A, B

#8550-#8567

Эти переменные обеспечивают информацию об инструменте. Установите переменную #8550 на 

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

инструмента / группы инструментов с помощью макросов только для чтения 8551-8564. При задании 

номера группы инструмента выбранный инструмент будет следующим инструментом в группе.

и

спользование

 

переменных

Обращение ко всем переменным выполнятся с помощью знака «фунт» (#) и следующего за ним 

положительного числа: #1, #101, #501.
Переменные - это десятичные значения, представленные в виде числе с плавающей точкой. Если 

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

на то, что переменная еще не использовалась. Переменной можно присвоить неопределенное 

значение с помощью специальной переменной #0. Переменная #0 имеет неопределенное значение 

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

можно задавать, заключая номер переменной в скобках. #[<выражение>]
Выражение вычисляется и его результат становится номером переменной. Например:

#1=3;

#[#1]=3.5 + #1;

Это выражение присваивает переменной #3 значение 6.5.
Переменные можно использовать вместо адресов G-кодов, когда «адреса» обращаются к буквам А-Z.
В блоке N1 G0 G90 X1.0 Y0; переменным можно присвоить следующие значения:

#7=0;

#11=90;

#1=1.0;

#2=0.0;

119

и заменить блок на: N1 G#7 G#11 X#1 Y#2; Значения переменных во время выполнения программы 

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

п

одсТановка

 

адреса

Обычно для задания управляющих адресов A-Z используется адрес с числом после него. Например:

G01 X1.5 Y3.7 F20. ;

Задает адресам G, X, Z и F значения 1, 1.5, 3.7 и 20.0, соответственно, и таким образом дает указание 

системе управления перемещаться линейно, G01, к позиции X=1.5 Y=3.7 со скоростью подачи 

20 дюймов в минуту. Синтаксис макропрограммы позволяет заменять значение адреса на любую 

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

#1=1;

#2=.5;

#3=3.7;

#4=20;

G#1 X[#1+#2] Y#3 F#4 ;

Допустимый синтаксис адресов A-Z (исключая N и O) таков:

<адрес><-><переменная> 

A-#101

<адрес><->[<выражение>] 

Y[#5041+3.5]

<адрес><->[<выражение>] 

Z-[SIN[#1]]

Если значение переменной не соответствует диапазону адреса, система управления выдаст сигнал 

об ошибке. Например, следующий код приведет к аварийному сообщению о неправильном диапазоне, 

потому что значения диаметров инструментов лежат в диапазоне 0-50.

#1=75;
D#1;

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

до наименьшего значимого разряда. Если #1=.123456, то G1X#1 переместит инструмент станка к 

позиции .1235 по оси X. Если система управления работает в метрическом режиме. инструмент будет 

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

игнорируется. Например, если переменная #1 не определена, то блок

G00 X1.0 Y#1 ;

Становится

G00 X1.0.

Перемещения по оси Y не происходит.

Макрооператоры

Макрооператоры - это строки кода, позволяющие программисту манипулировать системой управления, 

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

входят функции, операторы, условные и арифметические выражения, операторы присваивания и 

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

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

120

работу программиста.

Функции

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

следующую форму: <имя_функции> [аргумент], и возвращают десятичные значения с плавающей 

точкой. В систему управления HAAS включены следующие функции:

Функция

Аргумент

Возвращает

Примечания

SIN[ ]

Градусы

Десятичное

Синус

COS[ ]

Градусы

Десятичное

Косинус

TAN[ ]

Градусы

Десятичное

Тангенс

ATAN[ ]

Десятичное

Градусы

Арктангенс То же что и FANUC 

ATAN[ ]/[1]

SQRT[ ]

Десятичное

Десятичное

Квадратный корень

ABS[ ]

Десятичное

Десятичное

Модуль числа

ROUND[ ]

Десятичное

Десятичное

Округление десятичной дроби

FIX[ ]

Десятичное

Целочисленное Отбрасывание младших 

разрядов

ACOS[ ]

Десятичное

Градусы

Арккосинус

ASIN[ ]

Десятичное

Градусы

Арксинус

#[ ]

Целочисленное

Целочисленное Разыменование переменной

DPRNT[ ]

Текст в кодировке 

ASCII

Внешний вывод

Примечания по использованию функций

Функция округления (Round) может работать по-разному в зависимости от контекста, в котором она 

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

большей или равной .5 округляется до следующего целого числа, в остальных случаях дробная часть 

отсекается от числа.

#1= 1.714 ;

#2= ROUND[#1] ; (#2 присваивается значение 2.0)

#1= 3.1416 ;

#2= ROUND[#1] ; (#2 присваивается значение 3.0)

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

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

размеров точность по умолчанию - четыре знака.

#1= 1.00333 ;

G0 X[ #1 + #1 ] ;

(Стол перемещается к 2.0067) ;

G0 X[ ROUND[ #1 ] + ROUND[ #1 ] ] ;

(Стол перемещается к 2.0066) ;

G0 A[ #1 + #1 ] ;

(Ось перемещается к 2.007) ;

G0 A[ ROUND[ #1 ] + ROUND[ #1 ] ] ;

(Ось перемещается к 2.006) ;

D[1.67] 

(Диаметр 2 делается текущим) ;

Разница между функциями Fix и Round

 #1=3.54; #2=ROUND[#1]; #3=FIX[#1].  #2 получит значение 4, а #3 - значение 3.

Операторы

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

121

Арифметические операторы

Арифметические операторы состоят из обычных унарных и бинарных операторов. Это

- Унарный плюс 

+1.23

- Унарный минус 

-[COS[30]] 

- Бинарное сложение  #1=#1+5

- Бинарное вычитание #1=#1-1

- Умножение 

#1=#2*#3 

- Деление 

#1=#2/4

MOD 

- Остаток 

#1=27 MOD 20 (#1 содержит 7)

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

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

Макропеременные являются числами с плавающей точкой. При применении логических операторов к 

макропеременным используется только целая часть числа с плавающей точкой. Логические операторы 

бывают следующими:

OR - логическое ИЛИ для двух значений

XOR - исключающее ИЛИ для двух значений

AND - логическое И для двух значений

Примеры:

#1=1.0; 0000 0001
#2=2.0; 0000 0010
#3=#1 OR #2; 0000 0011

Здесь после выполнения операции ИЛИ (OR) переменная #3 

будет иметь значение 3.0.

#1=5.0;
#2=3.0;
IF [[#1 GT 3.0] AND [#2 LT 10]] GOTO1 

В этом случае система управления перейдет к блоку 1, 

поскольку «#1 GT 3.0» дает в результате 1.0, а «#2 LT 10» 

дает 1.0, в результате 1.0 AND 1.0 равно 1.0 (ИСТИНА), значит 

выполняется команда перехода GOTO.

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

использованию логических операторов.

Булевы операторы

Булевы операторы всегда дают в результате 1.0 (ИСТИННО) или 0.0 (ЛОЖНО). Существует шесть 

булевых операторов. Чаще всего они используются в условных выражениях, но не ограничиваются 

ими. Это

EQ - равно

NE - не равно

GT - больше чем

LT - меньше чем

GE - больше чем или равно

LE - меньше чем или равно

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

Пример

Пояснения

IF [#1 EQ 0.0] GOTO100;

Перейти к блоку 100, если переменная #1 равна 0.0.

WHILE [#101 LT 10] DO1;

Пока переменная #101 меньше 10, повторять цикл DO1..END1.

#1=[1.0 LT 5.0];

Переменной #1 присвоено значение 1.0 (ИСТИННО).

IF [#1 AND #2 EQ #3] GOTO1 

Если результат выполнения логического И к переменным #1 и #2 равен 

значению переменной #3, то произойдет переход к блоку 1.

122

Выражения

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

в квадратные скобки «[» и «]». Существует два типа выражений: условные и арифметические. 

Условные выражения возвращают значения ЛОЖНО (0.0) или ИСТИННО (любое отличное от нуля). 

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

Условные выражения

ВСЕ выражения в системе управления HAAS задают условное значение. Это значение равно либо 0.0 

(ЛОЖНО), либо не равно нулю (ИСТИННО). Контекст, в котором используется выражение, определяет, 

является ли оно условным. Условные выражения используются в операторах IF и WHILE, а также 

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

истинности или ложности условия.
Условный оператор M99 используется только в системе управления Haas. Без макропрограмм М99 

в системе управления HAAS способен выполнять обязательный (безусловный) переход к любой 

строке в текущей подпрограмме, помещая в эту строку код Р. Например: 

N50 M99 P10;

 выполняет 

переход к строке N10. Команда не возвращает управление вызывающей подпрограмме. При 

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

условного перехода. Чтобы выполнить переход, когда переменная #100 меньше 10, можно составить 

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

N50 [#100 LT 10] M99 P10;

В этом случае переход произойдет, только когда #100 будет меньше 10. В противном случае 

продолжается выполнение следующей строки программы. В вышеприведенном примере условный 

оператор М99 можно заменить на: 

N50 IF [#100 LT 10] GOTO10;

Арифметические выражения

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

Арифметическое выражение возвращает некоторое значение. Обычно арифметические выражения 

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

#101=#145*#30;

#1=#1+1;

X[#105+COS[#101]];

#[#2000+#13]=0;

Операторы присваивания

Операторы присваивания позволяют программисту изменять значения переменных. Формат оператора 

присваивания: 

<выражение>=<выражение>

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

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

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

O0300

(Инициализация массива переменных) ;

N1 IF [#2 NE #0] GOTO2

(B=базовая переменная) ;

#3000=1

(Базовая переменная не дается) ;

N2 IF [#19 NE #0] GOTO3

(S=размер массива);

#3000=2

(Размер массива не дается) ;

N3 WHILE [#19 GT 0] DO1 ;
#19=#19-1

(Обратный отсчет) ;

#[#2+#19]=#22

(V=значение для присвоения переменным массива) ;

END1 ;
M99;

123

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

переменных следующим образом:

G65 P300 B101. S20 (INIT 101..120 TO #0) ;

G65 P300 B501. S5 V1 (INIT 501..505 TO 1.0) ;

G65 P300 B550. S5 V0 (INIT 550..554 TO 0.0) ;

В B101. и далее потребуется десятичная точка.

Управляющие операторы

Управляющие операторы позволяют программисту выполнять как условные, так и безусловные 

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

Безусловный переход (GOTOnnn и M99 Pnnnn)

Система управления HAAS позволяет использовать два способа безусловного перехода. Безусловный 

переход всегда осуществляется к указанному блоку. Команда M99 P15 выполнит безусловный к блоку 

номер 15. M99 можно использовать как с макропрограммами, так и без них, поскольку эта команда 

является традиционным способом безусловного перехода в системе управления Haas. Команда 

GOTO15 выполняет то же самое, что M99 P15. В системе управления Haas команда GOTO может 

использоваться в одной строке с другими G-кодами. GOTO исполняется после всех других команд, как 

М-коды.

Вычисляемый переход (GOTO#n и GOTO [выражение])

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

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

[выражение] Кроме того, блок можно указать с помощью локальной переменной, как например, в 

форме GOTO#n.
Команда GOTO округляет переменную или результат выражения, связанного с вычисляемым 

переходом. Например, если переменная #1 равна 4.49 и выполняется команда GOTO#1, система 

управления попытается перейти к блоку, содержащему N4. Если #1 равна 4.5, то управление будет 

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

следующую структуру кода:

O9200

(Гравировка цифры в текущей позиции).

;
(D=Десятичная цифра для гравировки);
IF [[#7 NE #0] AND [#7 GE O] AND [#7 LE 9]] GOTO99;
#3000=1

(Неправильная цифра)

;
N99
#7=FIX[#7]

(Отсекание дробной части)

;
GOTO#7

(Теперь гравировать цифру)

;
N0

(Гравировка цифры "ноль")

...
M99
;
N1

(Гравировка цифры "один")

;
M99
;

124

N2

(Гравировка цифры "два")

;
...
;
(и т.д.)

Используя приведенную выше подпрограмму можно выгравировать цифру пять следующим образом: 

G65 P9200 D5;
Вычисляемые переходы GOTO с использованием выражения можно использовать для ветвления 

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

программы:

GOTO [[#1030*2]+#1031]; 

НЕТ (1030=0, 1031=0); 

...

M99;

N1  (1030=0, 1031=1); 

...

M99;

N2  (1030=1, 1031=0); 

...

M99;

N3  (1030=1, 1031=1); 

...

M99;

При чтении дискретных входных сигналов всегда получается значение 0 или 1. GOTO[выражение] 

выполнит переход к соответствующей строке кода, основываясь на состоянии двух дискретных входов 

#1030 и #1031.

Условный переход (IF и M99 Pnnnn)

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

подпрограмме. Условный переход может использоваться, только когда разрешено использование 

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

способами.

IF [<условное выражение>] GOTOn

Как говорилось выше, <условное выражение> - это любое выражение, использующее какой-либо из 

шести булевых операторов: EQ, NE, GT, LT, GE или LE. Выражение обязательно заключается в скобки. 

Для системы управления Haas включать эти операторы нет необходимости. Например: IF [#1 NE 0.0] 

GOTO5; или же может быть: IF [#1] GOTO5;
В этом операторе, если значение переменной #1 не равно 0.0 или не является неопределенным #0, то 

произойдет переход к блоку 5; в противном случае будет выполняться следующий блок.
Условное выражение для системы управления Haas может также иметь формат M99 Pnnnn. Например:

G0 X0 Y0 [#1EQ#2] M99 P5;

Здесь условие относится только к части M99. Инструменту дается команда X0, Y0 вне зависимости от 

того, является выражение истинным или ложным. В зависимости от значения выражения выполняется 

125

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

вариант IF GOTO.

Условное выполнение (IF THEN)

Выполнение управляющих операторов может также осуществляться с помощью конструкции IF THEN. 

Формат:

IF [<условное выражение>] THEN <оператор>;

Примечание:  

Для сохранения совместимости с синтаксисом FANUC оператор THEN нельзя 

использовать с GOTOn.

Этот формат традиционно используется для условных операторов присваивания, например:

IF [#590 GT 100] THEN #590=0.0 ;

Переменной #590 присваивается значение "ноль", когда значение #590 превышает 100.0. В системе 

управления Haas, если условие является ЛОЖНЫМ (0.0), то оставшаяся часть блока IF игнорируется. 

Это значит, что для управляющих операторов также можно задавать условия, например:

IF [#1 NE #0] THEN G1 X#24 Y#26 F#9 ;

При этом линейное перемещение будет выполняться только в том случае, если переменной #1 было 

присвоено значение. Другой пример:

IF [#1 GE 180] THEN #101=0.0 M99 ;

В этом примере, если значение переменной #1 (адрес A) больше или равно 180, то переменной #101 

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

инициализирована и имеет какое-либо значение. В противном случае обработка продолжится и 

будет выдано аварийное сообщение. Помните, что при выдаче аварийного сообщения выполнение 

программы прерывается.

N1 IF [#9NE#0] GOTO3 (ПРОВЕРКА ЗНАЧЕНИЯ В F) ;

N2 #3000=11(НЕТ СКОРОСТИ ПОДАЧИ) ;

N3 (ПРОДОЛЖЕНИЕ) ;

Повторение / использование циклов (WHILE DO END)

Важной характеристикой любого языка программирования является способность исполнять 

последовательности операторов заданное число раз или выполнять циклы операторов до достижения 

некоторого условия. Традиционное программирование с помощью G-кодов позволяет делать это, 

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

M98 P2000 L5;

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

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

конструкцию WHILE-DO-END. Например:

WHILE [<условное выражение>] DOn; 

<операторы>; 

ENDn;

Эта программа выполняет выражения, заключенные между DOn и ENDn, пока условное выражение 

остается истинным. Скобки в выражении обязательны. Если выражение становится ложным, то 

следующим выполняется блок, следующий за ENDn. Вместо WHILE можно использовать краткое 

написание WH. Команды DOn-ENDn являются парными. Значение n равно 1-3. Это значит, что в 

126

подпрограмме может быть не более трех вложенных циклов. Хороший пример вложенного построения 

циклов WHILE для определения матрицы:

#101= 3; 

#102= 4; 

G0 X#101 Y4. ;

F2.5; 

WH [#101 GT 0] DO1; 

 #102= 4; 

WH [#102 GT 0] DO2; 

G81 X#101 Y#102 Z-0.5; 

#102= #102 - 1; 

END2; 

#101= #101 - 1; 

END1 ; 

 

;

M30;

Эта программа сверлит матрицу отверстий 3 x 4.
Несмотря на то что вложенность операторов WHILE не может превышать трех уровней, фактически 

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

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

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

индекс вложенности. Например:

#3001=0 (ЖДАТЬ 500 МИЛЛИСЕКУНД); 

WH [#3001 LT 500] DO1; 

END1 ;

<Другие операторы>

#3001=0 (ЖДАТЬ 300 МИЛЛИСЕКУНД);

WH [#3001 LT 300] DO1;

END1 ;

Для выхода из фрагмента, ограниченного DO-END, можно использовать GOTO, но с помощью GOTO 

нельзя перейти внутрь цикла. Переход в пределах цикла, ограниченного DO-END, с помощью GOTO 

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

DO1; 

<операторы>

END1 ; 

выполнение продолжается до нажатия кнопки RESET (сброс).

ВНИМАНИЕ! Избегайте следующей ошибки: WH [#1] D01; 
END1 ;
В приведенном выше примере выдается сигнал об ошибке, указывающий, что «Then» не обнаружено; 

«Then» относится к D01. Замените D01 (ноль) на DO1 (буква O).

g65 в

ызов

 

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

Команда G65 вызывает подпрограмму и может передавать ей аргументы. Используется следующий 

формат:
G65 Pnnnn [Lnnnn] [аргументы];
Все, что выделено курсивом в квадратных скобках, является необязательным. Команда G65 требует 

127

Р-адреса, соответствующего номеру программы, находящейся в текущий момент в памяти системы 

управления. При использовании L-адреса обращение к макрокоманде повторяется заданное число раз. 

В Примере 1 подпрограмма 1000 вызывается один раз без передачи ей условий. Вызовы G65 близки 

к вызовам M98, но не идентичны им. Вызовы G65 могут иметь вложение до 9 уровней, это значит, что 

программа 1 может вызвать программу 2, программа 2 может вызвать программу 3, а программа 3 

может вызвать программу 4.

Пример 1:
G65 P1000;

(Вызов подпрограммы 1000 как 

макропрограммы)

M30;

(Останов программы)

O1000;

(Макроподпрограмма)

...
M99;

(Возврат из макроподпрограммы)

В примере 2 подпрограмма 9010 предназначена для сверления последовательности отверстий вдоль 

линии, наклон которой определяется аргументами X и Y, которые ей передаются в строке команды 

G65. Глубина сверления Z передается как Z, скорость подачи передается как F, а количество отверстий 

передается как T. Линия отверстий сверлится начиная от текущего положения инструмента в момент 

вызова макроподпрограммы.

Пример 2:
G00 G90 X1.0 Y1.0 Z.05 S1000 M03;

(Расположение инструмента)

G65 P9010 X.5 Y.25 Z.05 F10. T10;

(Вызов 9010)

G28;
M30;
O9010;

(Диагональная схема отверстий)

F#9;

(F=Скорость подачи)

WHILE [#20 GT 0] DO1;

(Повторить T раз)

G91 G81 Z#26;

(Сверлить до глубины Z)

#20=#20-1;

(Обратный отсчет)

IF [#20 EQ 0] GOTO5;

(Все отверстия просверлены)

G00 X#24 Y#25;

(Двигаться вдоль наклона)

N5 END1; 
M99;

(Возврат к месту вызова)

Псевдонимы

Псевдоним - это способ назначить G-код или М-код последовательности G65 P#####. Например, в 

примере 2 было бы проще записать: G06 X.5 Y.25 Z.05 F10. T10;
При использовании псевдонимов переменная может передаваться с кодом G; переменная не может 

передаваться с кодом М.
Здесь был заменен неиспользуемый G-код: G06 вместо G65 P9010. Чтобы приведенный выше блок 

работал, необходимо присвоить параметру, связанному с подпрограммой 9010, значение 06 (Параметр 

91). Обратите внимание, что G00, G65, G66, и G67 не могут использоваться для совмещения имен. Все 

остальные коды от 1 до 255 могут использоваться для совмещения имен.
Номера программ от 9010 до 9019 зарезервированы для совмещения имен G-кодов. В следующей 

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

 

 

 

 

 

 

 

содержание      ..     6      7      8      9     ..