Главная Книги - Разные SINUMERIK 840D sl. Программирование ЧПУ. Руководство по программированию (2021 год)
поиск по сайту правообладателям
|
|
содержание .. 5 6 7 8 ..
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Граничные условия
Инициализирующее значение: Глобальные переменные пользователя (GUD)
• Для глобальных переменных пользователя (GUD) с областью действия ЧПУ в качестве
момента инициализации можно задавать только INIPO (Power On).
• Для глобальных переменных пользователя (GUD) с областью действия CHAN в
качестве момента инициализации наряду с INIPO (Power On), можно задавать
и INIRE (Reset) или INICF (NEWCONF).
• У глобальных переменных пользователя (GUD) с областью действия CHAN и моментом
инициализации INIRE (Reset) или INICF (NEWCONF) при сбросе ЧПУ, сбросе ГРР и
"Активация машинных данных" новая инициализация переменных выполняется
только в каналах, в которых были запущены названные события.
Инициализирующее значение: Тип данных FRAME
Для переменных типа данных FRAME инициализирующее значение не указывается.
Переменные типа данных FRAME всегда инициализируются не явно с фреймом по
умолчанию.
Инициализирующее значение: Тип данных CHAR
Для переменных типа данных CHAR вместо кода ASCII (0...255) может быть
запрограммирован и соответствующий символ ASCII в кавычках, например, "A"
Инициализирующее значение: Тип данных STRING
У переменных типа данных STRING строка символов должна быть заключена в кавычки,
например: ...= "MASCHINE_1"
Инициализирующее значение: Тип данных AXIS
Для переменных типа данных AXIS при расширенном написании адреса идентификатор
оси должен быть заключен в скобки, например: ...=(X3)
Инициализирующее значение: Системная переменная
Задача спец. инициализирующих значений пользователя для системных переменных
через переопределение невозможна. Инициализирующие значения системных
переменных фиксировано заданы системой. Но через переопределение можно
изменить момент времени (INIRE, INICF) реинициализации системной переменной.
Не явное инициализирующее значение: Тип данных AXIS
Для переменных типа данных AXIS используется следующее не явное
инициализирующее значение:
• Системные данные: "первая гео-ось"
• GUD синхронных действий (обозначение: SYG_A*), PUD, LUD:
идентификатор оси из машинных данных: MD20082
$MC_AXCONF_CHANAX_DEFAULT_NAME
Программирование ЧПУ
420
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Не явное инициализирующее значение: Данные инструментов и магазинов
Для данных инструментов и магазинов инициализирующие значения могут быть заданы
через следующие машинные данные: MD17520 $MN_TOOL_DEFAULT_DATA_MASK
Примечание
Синхронизация
За синхронизацию событий, запускающих реинициализацию глобальной переменной, с
чтением этой переменной в другом месте, отвечает исключительно пользователь /
изготовитель станка.
См. также
Переменные (Страница 399)
4.1.1.8
Атрибут: предельные значения (LLI, ULI)
Верхнее и нижнее предельное значение области определения может быть задано только
для следующих типов данных:
• INT
• REAL
• CHAR
Определение (DEF) переменных пользователя: Предельные значения и не явные
инициализирующие значения
Если при определении переменной пользователя одного из названных выше типов
данных явное инициализирующее значение не определяется, то переменная
устанавливается на не явное инициализирующее значение типа данных:
• INT: 0
• REAL: 0.0
• CHAR: 0
Если не явное инициализирующее значение выходит за пределы установленной через
запрограммированные предельные значения области определения, то переменная
инициализируется с предельным значением, наиболее близким к не явному
инициализирующему значению:
• Не явное инициализирующее значение < Нижнее предельное значение (LLI) ⇒
Инициализирующее значение = Нижнее предельное значение
• Не явное инициализирующее значение > Верхнее предельное значение (ULI) ⇒
Инициализирующее значение = Верхнее предельное значение
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
421
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Примеры:
Программный код
Комментарий
DEF REAL GUD1
; Нижнее предельное значение = Граница области определения
; Верхнее предельное значение = Граница области определения
; Инициализирующее значение не запрограммировано
; => Не явное инициализирующее значение = 0.0
DEF REAL LLI 5.0 GUD2
; Нижнее предельное значение = 5.0
; Верхнее предельное значение = Граница области определения
; => Инициализирующее значение = 5.0
DEF REAL ULI -5 GUD3
; Нижнее предельное значение = Граница области определения
; Верхнее предельное значение = -5.0
; => Инициализирующее значение = -5.0
Переопределение (REDEF) переменных пользователя: Предельные значения и актуальные
фактические значения
Если при переопределении предельных значений переменной пользователя они
изменяются таким образом, что актуальное фактическое значение лежит за пределами
новой области определения, то выводится ошибка и предельные значения не
применяются.
Примечание
Переопределение (REDEF) переменных пользователя
При переопределении предельных значений переменной пользователя следить за
непротиворечивым изменением следующих значений:
• Предельные значения
• Фактическое значение
• Инициализирующее значение при переопределении и при автоматической
реинициализации из-за INIPO, INIRE или INICF
См. также
Переменные (Страница 399)
4.1.1.9
Атрибут: Физическая единица (PHU)
Физическая единица может задаваться только для переменных следующих типов
данных:
• INT
• REAL
Программируемые физические единицы (PHU)
Физическая единица указывается как число с фиксированной запятой: PHU <единица>
Программирование ЧПУ
422
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Могут программироваться следующие физические единицы:
<Единица>
Значение
Физическая единица
0
Нет физической единицы
-
1
Линейная или угловая позиция 1)2)
[ мм ], [ дюйм ], [ градус ]
2
Линейная позиция 2)
[ мм ], [ дюйм ]
3
Угловая позиция
[ градус ]
4
Линейная или угловая скорость 1)2)
[ мм/мин ], [ дюймов/мин ], [ об/
мин ]
5
Линейная скорость 2)
[ мм/мин ]
6
Угловая скорость
[ об/мин ]
7
Линейное или угловое ускорение 1)2)
[ м/сек2 ], [ дюймов/сек2 ], [ об/
сек2 ]
8
Линейное ускорение 2)
[ м/сек2 ], [ дюймов/сек2 ]
9
Угловое ускорение
[ об/сек2 ]
10
Линейный или угловой рывок 1)2)
[ м/сек3 ], [ дюймов/сек3 ], [ об/
сек3 ]
11
Линейный рывок 2)
[ м/сек3 ], [ дюймов/сек3 ]
12
Угловой рывок
[ об/сек3 ]
13
Время
[ сек ]
14
Усиление регулятора положения
[ 16.667/сек ]
15
Окружная подача 2)
[ мм/об ], [ дюймов/об ]
16
Температурная компенсация 1)2)
[ мм ], [ дюйм ]
18
Сила
[ Н ]
19
Масса
[ кг ]
20
Момент инерции 3)
[ кгм2 ]
21
Процент
[ % ]
22
Частота
[ Гц ]
23
Напряжение
[ В ]
24
Ток
[ A ]
25
Температура
[ °C ]
26
Угол
[ градус ]
27
KV
[ 1000/мин ]
28
Линейная или угловая позиция 3)
[ мм ], [ дюйм ], [ градус ]
29
Скорость резания 2)
[ м/мин ], [ футов/мин ]
30
Окружная скорость 2)
[ м/сек ], [ футов/сек ]
31
Сопротивление
[ Ом ]
32
Индуктивность
[ мГн ]
33
Момент вращения 3)
[ Нм ]
34
Постоянная момента вращения 3)
[ Нм/А ]
35
Усиление регулятора тока
[ В/А ]
36
Усиление регулятора скорости 3)
[ Нм/(рад*сек) ]
37
Скорость
[ об/мин ]
42
Мощность
[ кВт ]
43
Ток, низкий
[ мкA ]
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
423
Расширенное программирование
4.1 Гибкое программирование ЧПУ
<Единица>
Значение
Физическая единица
46
Момент вращения, низкий 3)
[ мкНм ]
48
Промилле
-
49
-
[ Гц/сек ]
65
Расход
[ л/мин ]
66
Давление
[ бар ]
67
Объем 3)
[ см3 ]
68
Петлевой коэффициент 3)
[ мм/(В*мин) ]
69
Петлевой коэффициент регулятора усилия
[ Н/В ]
155
Шаг резьбы 3)
[ мм/об ], [ дюймов/об ]
156
Изменение шага резьбы 3)
[ мм/об / об ], [ дюймов/об / об ]
1) Физическая единица зависит от типа оси: линейная или круговая ось
2) Переключение системы единиц
G70/G71(дюймовая/метрическая)
После переключения основной системы (MD10240 $MN_SCALING_SYSTEM_IS_METRIC) с G70/G71
при доступах по записи/чтению к содержащим длины системным переменным и переменным
пользователя пересчет значений (фактическое значение, значение по умолчанию и предельные
значения не выполняется
G700/G710(дюймовая/метрическая)
После переключения основной системы (MD10240 $MN_SCALING_SYSTEM_IS_METRIC) с G700/
G710 при доступах по записи/чтению к содержащим длины системным переменным и перемен-
ным пользователя пересчет значений (фактическое значение, значение по умолчанию и пред-
ельные значения выполняется
3) Переменная не переводится автоматически в актуальную систему единиц ЧПУ (дюймовая/
метрическая). За перевод отвечает только пользователь / изготовитель станка.
Примечание
Переполнение уровней из-за преобразования форматов
Внутренним форматом хранения для переменных пользователя (GUD / PUD / LUD) с
содержащими длины физическими единицами является метрический формат.
Избыточное использование таких переменных в главном ходе NCK, к примеру, в
синхронных действиях, при переключении системы единиц может вызвать перегрузку
процессора на уровне интерполятора, ошибка 4240.
Примечание
Совместимость единиц
При использовании переменных (присваивание, сравнение, вычисление и т. п.),
контроль совместимости используемых единиц не осуществляется. За возможно
необходимый перевод отвечает только пользователь / изготовитель станка.
См. также
Переменные (Страница 399)
Программирование ЧПУ
424
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
4.1.1.10
Атрибут: Права доступа (APR, APW, APRP, APWP, APRB, APWB)
Обозначение
Обозначение атрибутов доступа AP... состоит из:
1. A: Access (доступ)
2. P: Protection (защита)
3. R / W: Read / Write (чтение / запись)
4. P / B: Program / BTSS (программа / BTSS)
Права доступа / степени защиты
Правам доступа соответствуют следующие, указываемые при программировании
степени защиты:
Право доступа
Степень защиты
Системный пароль
0
Пароль изготовителя станка
1
Сервисный пароль
2
Пароль пользователя
3
Положение кодового переключателя 3
4
Положение кодового переключателя 2
5
Положение кодового переключателя 1
6
Положение кодового переключателя 0
7
Определение (DEF) данных пользователя
Права доступа (APR... / APW...) могут быть определены для следующих данных:
• Глобальные данные пользователя (GUD)
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
425
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Переопределение (REDEF) системных и пользовательских данных
Права доступа (APR... / APW...) могут быть переопределены для следующих данных:
•
Системные данные
- Машинные данные
Примечание
Переопределение прав чтения машинных данных
Степень защиты для чтения машинных данных можно установить только с
кодовым словом APR совместно для программы обработки детали и BTSS.
При переопределении прав чтения кодовые слова APRP и APRB не поддерживаются
и вызывают вывод аварийного сообщения 12490 "Право доступа APRP/APRB
<уровень защиты> не настроено".
- Установочные данные
- Системная переменная
- Данные процесса
- Данные магазина
- Данные инструмента
•
Данные пользователя
- R-параметры
- Переменные синхронных действий ($AC_MARKER, $AC_PARAM, $AC_TIMER)
- GUD синхронных действий (SYG_xy[ ], где x=R, I, B, A, C, S и y=S, M, U, 4, ..., 9)
- Параметры EPS
- Данные инструмента OEM
- Данные магазина OEM
- Глобальные переменные пользователя (GUD)
Примечание
При переопределении право доступа к переменной между самой низкой степенью
защиты 7 и собственной степенью защиты, например, 1 (изготовитель станка)
может присваиваться свободно.
Переопределение (REDEF) языковых команд ЧПУ
Право доступа и выполнения (APX) может быть переопределено для следующих
языковых команд ЧПУ:
• G-команды / функции перемещения (Страница 177)
• Предопределенные функции (Страница 1350)
• Предопределенные вызовы подпрограмм
Программирование ЧПУ
426
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
• Оператор DO для синхронных действий
• Программные идентификаторы циклов
Цикл должен находиться в директории циклов и содержать оператор PROC.
Права доступа касательно программ ЧПУ и циклов (APRP, APWP)
Следствиями различных прав доступа для доступа в программе ЧПУ или цикле являются:
•
APRP 0 / APWP 0
- При выполнении программы ЧПУ должен быть установлен системный пароль
- Цикл должен находиться в директории _N_CST_DIR (система)
- Для директории _N_CST_DIR в MD11160 $MN_ACCESS_EXEC_CST право выполнения
должно быть установлено на систему
•
APRP 1 / APWP 1 или APRP 2 / APWP 2
- При выполнении программы ЧПУ должен быть установлен пароль изготовителя
станка или сервисный пароль
- Цикл должен находиться в директории _N_CMA_DIR (изготовитель станка) или
_N_CST_DIR
- Для директорий _N_CMA_DIR или _N_CST_DIR в машинных данных MD11161
$MN_ACCESS_EXEC_CMA или MD11160 $MN_ACCESS_EXEC_CST права выполнения
должны быть установлены как минимум на изготовителя станка
•
APRP 3 / APWP 3
- При выполнении программы ЧПУ должен быть установлен пароль пользователя
- Цикл должен находиться в директории _N_CUS_DIR (пользователь) или _N_CST_DIR
- Для директорий _N_CUS_DIR, _N_CMA_DIR или _N_CST_DIR в машинных данных
MD11162 $MN_ACCESS_EXEC_CUS, MD11161 $MN_ACCESS_EXEC_CMA или
MD11160 $MN_ACCESS_EXEC_CST права выполнения должны быть установлены
как минимум на пользователя
•
APRP 4...7 / APWP 4...7
- При выполнении программы ЧПУ должно быть установлено положение кодового
переключателя 3 ... 0
- Цикл должен находиться в директории _N_CUS_DIR, _N_CMA_DIR или _N_CST_DIR
- для директорий _N_CUS_DIR или _N_CMA_DIR или _N_CST_DIR в машинных данных
MD11162 $MN_ACCESS_EXEC_CUS, MD11161 $MN_ACCESS_EXEC_CMA или
MD11160 $MN_ACCESS_EXEC_CST права выполнения должны быть установлены
как минимум на соответствующее положение кодового переключателя
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
427
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Права доступа касательно BTSS (APRB, APWB)
Права доступа (APRB, APWB) ограничивают в равной мере доступ к системным
переменным и переменным пользователя через BTSS для всех системных компонентов
(HMI, PLC, внешние процессоры, службы EPS и т. д.).
Примечание
Локальные права доступа HMI
При изменениях прав доступа к системным данным необходимо следить за тем, чтобы
это не входило в противоречие с установленными через механизмы HMI правами
доступа.
Атрибуты доступа APR / APW
Из соображений совместимости атрибуты APR и APW не явно отображаются на атрибуты
APRP / APRB и APWP / APWB:
• APR x ⇒ APRP x APRB x
• APW y ⇒ APWP y APWB y
Права доступа через файлы ACCESS
При использовании файлов ACCESS для присваивания прав доступа, переопределения
прав доступа для системных данных, данных пользователя и языковых команд ЧПУ могут
осуществляться исключительно в файлах ACCESS. Исключением являются глобальные
данные пользователя (GUD). Для них переопределение прав доступа должно по-
прежнему выполняться в соответствующих файлах определений *_DEF.
Для сквозной защиты доступа необходимо непротиворечивое согласование машинных
данных для прав выполнения и защиты доступа соответствующих директорий.
Общий принцип действий:
1. Создание требуемых файлов определений:
- _N_DEF_DIR/_N_SACCESS_DEF
- _N_DEF_DIR/_N_MACCESS_DEF
- _N_DEF_DIR/_N_UACCESS_DEF
2. Параметрирование права записи для файлов определений на требуемое для
переопределения значение:
- MD11170 $MN_ACCESS_WRITE_SACCESS = <уровень защиты>
- MD11171 $MN_ACCESS_WRITE_MACCESS = <уровень защиты>
- MD11172 $MN_ACCESS_WRITE_UACCESS = <уровень защиты>
Программирование ЧПУ
428
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
3. Для доступа к защищенным элементам из циклов, необходимо согласовать права
выполнения и записи директорий циклов _N_CST_DIR, _N_CMA_DIR и _N_CST_DIR:
Права выполнения
- MD11160 $MN_ACCESS_EXEC_CST = <уровень защиты>
- MD11161 $MN_ACCESS_EXEC_CMA = <уровень защиты>
- MD11162 $MN_ACCESS_EXEC_CUS = <уровень защиты>
Права записи
- MD11165 $MN_ACCESS_WRITE_CST = <уровень защиты>
- MD11166 $MN_ACCESS_WRITE_CMA = <уровень защиты>
- MD11167 MN_ACCESS_WRITE_CUS = <уровень защиты>
Право выполнения должно быть установлен, на, по меньшей мере, ту же степень
защиты, что и макс. степень защиты используемого элемента.
Право записи как минимум должно быть установлено на ту же степень защиты, что и
право выполнения.
4. Права записи локальных директорий циклов HMI должны быть установлены на ту же
степень защиты, что и у локальных директорий циклов ЧПУ.
Вызовы подпрограмм в файлах ACCESS
Для дальнейшего структурирования защиты доступа, в файлах ACCESS возможен вызов
и подпрограмм (идентификатор SPF или MPF). При этом подпрограммы получают права
выполнения вызывающего файла ACCESS.
Примечание
В файлах ACCESS возможно переопределение только прав доступа. Все другие атрибуты,
как и прежде, должны программироваться или переопределяться в соответствующих
файлах определений.
См. также
Переменные (Страница 399)
4.1.1.11
Обзор определяемых и переопределяемых атрибутов
Таблицы ниже показывают, для каких типов данных какие атрибуты могут быть
определены (DEF) и/или переопределены (REDEF).
Системные данные
Тип данных
Иниц.значе-
Предельные
Физ. единица
Права доступа
Класс данных
ние
значения
(только 828D)
Машинные данные
---
---
---
REDEF
REDEF
Установочные данные
REDEF
---
---
REDEF
---
FRAME-данные
---
---
---
REDEF
---
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
429
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Тип данных
Иниц.значе-
Предельные
Физ. единица
Права доступа
Класс данных
ние
значения
(только 828D)
Данные процесса
---
---
---
REDEF
---
Комп. погрешности ходового вин-
---
---
---
REDEF
---
та (EEC)
Компенсация провисания (CEC)
---
---
---
REDEF
---
Компенсация квадрантных оши-
---
---
---
REDEF
---
бок (QEC)
Данные магазина
---
---
---
REDEF
---
Данные инструмента
---
---
---
REDEF
---
Защищенные области
---
---
---
REDEF
---
Ориентируемые инструменталь-
---
---
---
REDEF
---
ные суппорта
Кинематические цепочки
---
---
---
REDEF
---
Защищенные области 3D
---
---
---
REDEF
---
Ограничение рабочего поля
---
---
---
REDEF
---
Данные пользователя
Тип данных
Иниц.значе-
Предельные
Физ. единица
Права доступа
Класс данных
ние
значения
R-параметры
REDEF
REDEF
REDEF
REDEF
---
Переменные синхронных дей-
REDEF
REDEF
REDEF
REDEF
---
ствий ($AC_...)
GUD синхронных действий
REDEF
REDEF
REDEF
REDEF
---
((SYG_...)
Параметры EPS
REDEF
REDEF
REDEF
REDEF
---
Данные инструмента OEM
REDEF
REDEF
REDEF
REDEF
---
Данные магазина OEM
REDEF
REDEF
REDEF
REDEF
---
Глобальные переменные пользо-
DEF / REDEF
DEF
DEF
DEF / REDEF
DEF / REDEF
вателя (GUD)
Локальные переменные пользова-
DEF
DEF
DEF
---
---
теля (PUD / LUD)
См. также
Переменные (Страница 399)
Программирование ЧПУ
430
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
4.1.1.12
Определение и инициализация переменных поля (DEF, SET, REP)
Переменная пользователя может быть определена как 1- до макс. 3-мерное поле
(массив):
•
1-мерное: DEF <тип данных> <имя переменной>[<n>]
•
2-мерное: DEF <тип данных> <имя переменной>[<n>,<m>]
•
3-мерное: DEF <тип данных> <имя переменной>[<n>,<m>,<o>]
Примечание
Переменные пользователя типа данных STRING могут быть определены макс. как 2-
мерное поле.
Типы данных
Переменные пользователя могут быть определены как поля для следующих типов
данных: BOOL, CHAR, INT, REAL, STRING, AXIS, FRAME
Присваивание значения элементам поля
Значения элементам поля могут присваиваться в следующие моменты времени:
• при определении поля (инициализирующие значения)
• при выполнении программы
При этом значения могут присваиваться через:
• явное указание элемента поля
• явное указание элемента поля как стартового элемента и указание списка значений
(SET)
• явное указание элемента поля как стартового элемента и указание значения и
частоты его повторения (REP)
Примечание
Переменным пользователя типа данных FRAME не могут быть присвоены
инициализирующие значения.
Синтаксис (DEF)
DEF <тип данных> <имя переменной>[<n>,<m>,<o>]
DEF STRING[<длина строки>] <имя переменной>[<n>,<m>]
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
431
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Синтаксис (DEF...=SET...)
Использование списка значений:
• при определении:
DEF <тип данных> <имя переменной>[<n>,<m>,<o>] =
SET(<значение1>,<значение2>,...)
равнозначно:
DEF <тип данных> <имя переменной>[<n>,<m>,<o>] =
(<значение1>,<значение2>,...)
Примечание
При инициализации через список значений указание SET является опциональным.
• при присваивании значения:
<имя переменной>[<n>,<m>,<o>]=SET(<ЗНАЧЕНИЕ1>,<значение2>,...)
Синтаксис (DEF...=REP...)
Использование значения с повторением
• при определении:
DEF <тип данных> <имя переменной>[<n>,<m>,<o>]=REP(<значение>)
DEF <тип данных> <имя переменной>[<n>,<m>,<o>] = REP(<значение><число
элементов поля>)
• при присваивании значения:
<имя переменной>[<n>,<m>,<o>]=REP(<значение>)
<имя переменной>[<n>,<m>,<o>]=REP(<значение>,<число элементов поля>)
Значение
DEF:
Команда для определения переменных
<тип данных>:
Тип данных переменных
Диапазон значений:
• Для системных переменных:
BOOL, CHAR, INT, REAL, STRING, AXIS
• Для переменных GUD или LUD:
BOOL, CHAR, INT, REAL, STRING, AXIS, FRAME
<длина строки>:
Макс. число символов для типа данных STRING
<имя переменной>:
Имя переменной
[<n>,<m>,<o>]:
Размеры поля или индексы поля
<n>:
Размер поля или индекс поля для 1-й размерности
Тип:
INT (для системных переменных также AXIS)
Диапазон значе-
Макс. размер поля: 65535
ний:
Индекс поля: 0 ≤ n ≤ 65534
<m>:
Размер поля или индекс поля для 2-й размерности
Тип:
INT (для системных переменных также AXIS)
Диапазон значе-
Макс. размер поля: 65535
ний:
Индекс поля: 0 ≤ m ≤ 65534
Программирование ЧПУ
432
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
<o>:
Размер поля или индекс поля для 3-й Размерность
Тип:
INT (для системных переменных также AXIS)
Диапазон значе-
Макс. размер поля: 65535
ний:
Индекс поля: 0 ≤ o ≤ 65534
SET:
Присваивание значения через указанный список значе-
ний
(<значение1>,<значение2>,...):
Список значений
REP:
Присваивание значения через указанное <значение>
<значение>:
Значение, с которым элементы поля должны записы-
ваться при инициализации с REP.
<число элементов поля>:
Число элементов поля, которые должны записываться с
указанным <значение>. Для оставшихся элементов по-
ля, в зависимости от момента времени, действует:
• Инициализация при определении поля:
→ Оставшиеся элементы поля записываются с нулем
• Присваивание при выполнении программы:
→ Актуальные значения элементов поля остаются
без изменений.
Если параметр не запрограммирован, то все элементы
поля записываются с <значение>.
Если параметр равен нулю, то в зависимости от момента
времени действует:
• Инициализация при определении поля:
→ Все элементы предустанавливаются на ноль
• Присваивание при выполнении программы:
→ Актуальные значения элементов поля остаются
без изменений.
Индекс поля
Не явная последовательность элементов поля, к примеру, при присваивании значения
через SET или REP, достигается через итерацию индексов поля справа налево.
Пример: Инициализация 3-мерного поля с 24 элементами поля:
DEF INT FELD[2,3,4] = REP(1,24)
FELD[0,0,0] = 1
1. элемент поля
FELD[0,0,1] = 1
2. элемент поля
FELD[0,0,2] = 1
3. элемент поля
FELD[0,0,3] = 1
4. элемент поля
FELD[0,1,0] = 1
5. элемент поля
FELD[0,1,1] = 1
6. элемент поля
FELD[0,2,3] = 1
12. элемент поля
FELD[1,0,0] = 1
13. элемент поля
FELD[1,0,1] = 1
14. элемент поля
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
433
Расширенное программирование
4.1 Гибкое программирование ЧПУ
FELD[1,2,3] = 1
24. элемент поля
соответственно:
FOR n=0 TO 1
FOR m=0 TO 2
FOR o=0 TO 3
FELD[n,m,o] = 1
ENDFOR
ENDFOR
ENDFOR
Пример: Инициализация целых полей переменных
Актуальные значения см. рисунок.
Программный код
N10 DEF REAL FELD1[10,3]=SET(0,0,0,10,11,12,20,20,20,30,30,30,40,40,40,)
N20 FELD1[0,0]=REP(100)
N30 FELD1[5,0]=REP(-100)
N40 FELD1[0,0]=SET(0,1,2,-10,-11,-12,-20,-20,-20,-30, , , ,-40,-40,-50,-60,-70)
N50 FELD1[8,1]=SET(8.1,8.2,9.0,9.1,9.2)
Программирование ЧПУ
434
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
̯͔͋͌͑͘ ͖͕͒ͦ
1
̯͔͏͝͏͇͒͏͎͇͝͏ͦ ͖͗͏
1
1
̯͔͏͝͏͇͒͏͎͇͝͏ͦ ͘
1
1
͕͖͔͗͌͋͌͒͌͏͏
͕͋͏͔͇͕͉͓͑͢
̯͔͏͝͏͇͒͏͎͇͝͏ͦ ͘ ͇͎͔͓͗͢͏
͎͔͇͔͌͞͏͓͌
͎͔͇͔͌͞͏͓ͦ͏
͓͔͙̈́͒͌͌͢ ͖͕͒ͦ >
@
͓͔͙̈́͒͌͌͢ ͖͕͒ͦ >
@
͕͋ >
@ ͈͒͢͏
͕͋ >
@ ͈͒͢͏
͏͔͏͝͏͇͒͏͎͏͕͉͇͔͗͢ ͕͘
͏͔͏͝͏͇͒͏͎͏͕͉͇͔͗͢ ͕͘
͎͔͇͔͌͞͏͓͌ ͖͕ ͚͓͕͇͔͒͞͏ͥ
͎͔͇͔͌͞͏͓͌ ͖͕ ͚͓͕͇͔͒͞͏ͥ
͓͔͙̈́͒͌͌͢ ͖͕͒ͦ >
@
͕͋ >
@ ͕͙͇͒͘͏ͣ͘ ͈͎͌
͏͎͓͔͔͌͌͏͐
См. также
Определение и инициализация переменных поля (DEF, SET, REP) (Страница 431)
Переменные (Страница 399)
Дополнительная информация (SET)
Инициализация при определении
• Начиная с 1-го элемента поля, со значениями из списка инициализируется столько
элементов поля, сколько элементов запрограммировано в списке значений.
• Элементам поля без явно указанных значений в списке значений (пропуски в списке
значений) присваивается 0.
• Для переменных типа данных AXIS пропуски в списке значений запрещены.
• Если список значений содержит больше значений, чем определено элементов поля,
то отображается ошибка.
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
435
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Присваивание значения при выполнении программы
При присваивании значения при выполнении программы действуют описанные выше
для определения правила. Дополнительно существуют следующие возможности:
• В качестве элементов в списке значений разрешены и выражения.
• Присваивание значения начинается на запрограммированном индексе поля.
Благодаря этому возможно целенаправленное присваивание значений подполям.
Пример:
Программный код
Комментарий
DEF INT FELD[5,5]
; Определение поля
FELD[0,0]=SET(1,2,3,4,5)
; Присваивание значения первым 5 элементам поля [0,0] -
[0,4]
FELD[0,0]=SET(1,2, , ,5)
; Присваивание значения с пропуском первым 5 элементам
поля [0,0] - [0,4], элементам поля [0,2] и [0,3] = 0
FELD[2,3]=SET(VARIABLE,4*5.6)
; Присваивание значения с переменной и выражением от ин-
декса поля [2,3]:
[2,3] = VARIABLE
[2,4] = 4 * 5.6 = 22.4
Дополнительная информация (REP)
Инициализация при определении
• Все или указанное опционально число элементов поля инициализируются с
указанным значением (постоянная).
• Переменные типа данных FRAME не могут быть инициализированы.
Пример:
Программный код
Комментарий
DEF REAL varName[10]=REP(3.5,4)
; Определение поля и инициализация элементов поля [0] до
[3] со значением 3,5
Присваивание значения при выполнении программы
При присваивании значения при выполнении программы действуют описанные выше
для определения правила. Дополнительно существуют следующие возможности:
• В качестве элементов в списке значений разрешены и выражения.
• Присваивание значения начинается на запрограммированном индексе поля.
Благодаря этому возможно целенаправленное присваивание значений подполям.
Примеры:
Программный код
Комментарий
DEF REAL varName[10]
; Определение поля
varName[5]=REP(4.5,3)
; Элементы поля от [5] до [7] = 4,5
R10=REP(2.4,3)
; R-параметры от R10 до R12 = 2,4
DEF FRAME FRM[10]
; Определение поля
FRM[5]=REP(CTRANS(X,5))
; Элементы поля от [5] до [9] = CTRANS(X,5)
Программирование ЧПУ
436
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
См. также
Определение и инициализация переменных поля (DEF, SET, REP) (Страница 431)
4.1.1.13
Типы данных
Следующие типы данных имеются в ЧПУ:
Тип данных
Значение
Диапазон значений
INT
Целочисленное значение со знаком
-2147483648 ... +2147483647
REAL
Действительное число (LONG REAL по
±(∼2,2*10-308 … ∼1,8*10+308)
IEEE)
BOOL
Значение истинности TRUE (1) и FALSE (0)
1, 0
CHAR
Символы ASCII
Код ASCII 0 ... 255
STRING
Строка символов определенной длины
Макс. 200 символов (без специальных
символов)
AXIS
Идентификатор оси/шпинделя
Идентификатор оси канала
FRAME
Геометрические данные для статиче-
---
ской трансформации координат (смеще-
ния, вращения, масштабирования, отра-
жения)
Не явные преобразования типов данных
Следующие преобразования типов данных возможны и не явно выполняются при
присваиваниях и передачах параметров:
из ↓/ в →
REAL
INT
BOOL
REAL
x
o
&
INT
x
x
&
BOOL
x
x
x
x: возможно без ограничений
O: возможна потеря данных из-за превышения диапазона значений ⇒ ошибка;
округление: значение после запятой ≥ 0,5 ⇒ округлять в сторону увеличения, значение после
запятой < 0,5 ⇒ округлять в сторону уменьшения
&: значение ≠ 0 ⇒ TRUE, значение == 0 ⇒ FALSE
См. также
Переменные (Страница 399)
4.1.1.14
Минимум, максимум и диапазон переменных (MINVAL, MAXVAL и BOUND)
С помощью команд MINVAL и MAXVAL можно сравнить между собой значения двух
переменных. Как результат возвращается меньшее значение (при MINVAL) или большее
значение (при MAXVAL).
С помощью функции BOUND можно проверить, лежит ли значение контрольной
переменной в пределах определенного диапазона значений.
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
437
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Синтаксис
<меньшее значение>=MINVAL(<переменная1>,<переменная2>)
<большее значение>=MAXVAL(<переменная1>,<переменная2>)
<возвращаемое значение>=<BOUND>(<минимум>,<максимум>,<контрольная
переменная>)
Значение
MINVAL:
Определяет меньшее значение двух переменных
(<переменная1>, <переменная2>)
<меньшее значение>:
Переменная результата для команды MINVAL
Устанавливается на меньшее значение переменной.
MAXVAL:
Определяет большее значение двух переменных
(<переменная1>, <переменная2>)
<большее значение>:
Переменная результата для команды MAXVAL
Устанавливается на большее значение переменной.
BOUND:
Проверяет, лежит ли переменная (<контрольная переменная>) в
пределах определенного диапазона значений.
<минимум>:
Переменная, определяющая мин. значение диапазона значений
<максимум>:
Переменная, определяющая макс. значение диапазона значений
<возвращаемое
Переменная результата для команды BOUND
значение>:
Если значение контрольной переменной лежит в пределах опреде-
ленного диапазона значений, то переменная результата устанавли-
вается на значение контрольной переменной.
Если значение контрольной переменной больше макс. значения, то
переменная результата устанавливается на макс. значение области
определения.
Если значение контрольной переменной меньше мин. значения, то
переменная результата устанавливается на мин. значение области
определения.
Примечание
MINVAL, MAXVAL и BOUND могут программироваться и в синхронных действиях.
Примечание
Поведение при равенстве
При равенстве для MINVAL/MAXVAL выводится это равное значение. При BOUND снова
возвращается значение проверяемой переменной.
Пример
Программный код
Комментарий
DEF REAL rVar1=10.5, rVar2=33.7, rVar3, rVar4, rVar5, rValMin, rValMax, rRetVar
rValMin=MINVAL(rVar1,rVar2)
; rValMin устанавливается на значение 10.5.
rValMax=MAXVAL(rVar1,rVar2)
; rValMax устанавливается на значение 33.7.
Программирование ЧПУ
438
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
rVar3=19.7
rRetVar=BOUND(rVar1,rVar2,rVar3)
; rVar3 лежит в пределах границ, rRetVar устанавливается на
19.7.
rVar3=1.8
rRetVar=BOUND(rVar1,rVar2,rVar3)
; rVar3 лежит ниже мин. границы, rRetVar устанавливается на
10.5.
rVar3=45.2
rRetVar=BOUND(rVar1,rVar2,rVar3)
; rVar3 лежит выше макс. границы, rRetVar устанавливается на
33.7.
4.1.1.15
Проверка наличия переменной (ISVAR)
С помощью предварительно определенной функции ISVAR можно проверить, известна
ли в ЧПУ системная переменная / переменная пользователя (например, машинные
данные, установочные данные, системная переменная, общая переменная, например,
GUD).
Переменная
Запрашиваемая переменная может иметь следующее строение:
Безразмерная переменная:
<переменная>
Одноразмерная переменная без индекса
<переменная>[ ]
поля:
Одноразмерная переменная с индексом <переменная>[<n>]
поля n:
Двухразмерная переменная без индекса <переменная>[ , ]
поля:
Двухразмерная переменная с индексами <переменная>[<n>,<m>]
поля n и m:
Синтаксис
<результат>=ISVAR(<переменная>[<n>,<m>])
Объяснение
<результат>:
Возвращаемое значение
Тип данных:
BOOL
Диапазон значений:
1
Имеется переменная
0
Неизвестная переменная
ISVAR:
Проверяет, известна ли в ЧПУ указанная системная переменная / пере-
менная пользователя.
<переменная>:
Имя системной переменной / переменной пользователя
Тип данных:
STRING
<n>:
Индекс поля первой размерности (опция)
Тип данных:
INT
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
439
Расширенное программирование
4.1 Гибкое программирование ЧПУ
<m>:
Индекс поля второй размерности (опция)
Тип данных:
INT
Согласно передаваемому параметру, выполняются следующие проверки:
• Известно ли имя;
• Является ли переменная полем,
• Это одно- или двухразмерное поле
• Находится ли соответствующий индекс поля в разрешенном диапазоне.
Если все эти проверки положительные, возвращается TRUE (1).
Если одна из проверок отрицательна, или если обнаруживается синтаксическая ошибка,
возвращается FALSE (0).
Примеры
Программный код
Комментарий
DEF INT VAR1
DEF BOOL IS_VAR=FALSE
N10 IS_VAR=ISVAR("VAR1")
; IS_VAR в этом случае TRUE.
Программный код
Комментарий
DEF REAL VARARRAY[10,10]
DEF BOOL IS_VAR=FALSE
N10 IS_VAR=ISVAR("VARARRAY[,]")
; IS_VAR в этом случае TRUE, это двухразмерное
поле.
N20 IS_VAR=ISVAR("VARARRAY")
; IS_VAR = TRUE, переменная существует.
N30 IS_VAR=ISVAR("VARARRAY[8,11]")
; IS_VAR = FALSE, индекс поля запрещен.
N40 IS_VAR=ISVAR("VARARRAY[8,8")
; IS_VAR = FALSE, "]" отсутствует (синтаксиче-
ская ошибка).
N50 IS_VAR=ISVAR("VARARRAY[,8]")
; IS_VAR = TRUE, индекс поля разрешен.
N60 IS_VAR=ISVAR("VARARRAY[8,]")
; IS_VAR = TRUE, индекс поля разрешен.
Программный код
Комментарий
DEF BOOL IS_VAR=FALSE
N100 IS_VAR=ISVAR("$MC_GCODE_RESET_VALUES[1]"
; Передаваемый параметр это машинные
данные, IS_VAR = TRUE.
Программный код
Комментарий
DEF BOOL IS_VAR=FALSE
N10 IS_VAR=ISVAR("$P_EP")
; IS_VAR в этом случае TRUE.
N20 IS_VAR=ISVAR("$P_EP[X]")
; IS_VAR в этом случае TRUE.
Программирование ЧПУ
440
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
4.1.1.16
Чтение значений атрибута / типа данных (GETVARPHU, GETVARAP, GETVARLIM,
GETVARDIM, GETVARDFT, GETVARTYP)
С помощью предопределенных функций GETVARPHU, GETVARAP, GETVARLIM,
GETVARDIM и GETVARDFT можно считывать значения атрибутов системных переменных/
переменных пользователя, с помощью GETVARTYP можно считывать тип данных
системной переменной/переменной пользователя.
Чтение физической единицы
Синтаксис:
<результат>=GETVARPHU(<имя>)
Объяснение:
<результат>:
Числовое значение физической единицы
Тип данных:
INT
Диапазон зна-
см. таблицу в "Атрибут: Физическая единица (PHU) (Страни-
чений:
ца 422)"
В случае ошибки:
- 2
Указанное имя переменной не присвоено никакому
системному параметру и никакой переменной по-
льзователя.
GETVARPHU:
Чтение физической единицы системной переменной/переменной пользова-
теля
<имя>:
Имя системной переменной/переменной пользователя
Тип данных:
STRING
Пример:
ЧПУ содержит следующую GUD-переменную:
DEF CHAN REAL PHU 42 LLI 0 ULI 10000 electric
Программный код
Комментарий
DEF INT result=0
result=GETVARPHU("electric")
; Определить физическую единицу GUD-переменной.
IF (result < 0) GOTOF error
Как результат возвращается значение 42. Это соответствует физической единице [кВт].
Примечание
С GETVARPHU можно, например, проверить, имеют при присваивании переменной a = b
обе переменные ожидаемые физические единицы.
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
441
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Чтение права доступа
Синтаксис:
<результат>=GETVARAP(<имя>,<доступ>)
Объяснение:
<результат>:
Степень защиты для указанного <доступа>
Тип данных:
INT
Диапазон зна-
0 ... 7
См. "Атрибут: Права доступа (APR, APW, APRP, APWP,
чений:
APRB, APWB) (Страница 425)".
В случае ошибки:
- 1
не поддается записи (имеет значение только для ти-
пов доступа "WP" и "WB")
- 2
Указанное имя переменной не присвоено никакому
системному параметру и никакой переменной пользо-
вателя.
- 3
неправильное значение параметра <доступ>
GETVARAP:
Чтение права доступа к системной переменной/переменной пользователя
<имя>:
Имя системной переменной/переменной пользователя
Тип данных:
STRING
<доступ>:
Тип доступа
Тип данных:
STRING
Диапазон зна-
"RP"
Чтение через программу обработки детали
чений:
"WP"
Запись через программу обработки детали
"RB"
Чтение через BTSS
"WB"
Запись через BTSS
Пример:
Программный код
Комментарий
DEF INT result=0
result=GETVARAP("$TC_MAP8","WB")
; Определить защиту доступа для системного параметра
"Позиция магазина" касательно записи через BTSS.
IF (result < 0) GOTOF error
Как результат возвращается значение 7. Это соответствует положению кодового
переключателя 0 (= нет защиты доступа).
Примечание
С GETVARAP может быть, например, реализована проверочная программа,
проверяющая ожидаемые от приложения права доступа.
Программирование ЧПУ
442
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Чтение предельных значений
Синтаксис:
<состояние>=GETVARLIM(<имя>,<предельное значение>,<результат>)
Объяснение:
<состояние>:
Состояние функции
Тип данных:
INT
Диапазон зна-
1
o. k.
чений:
-1
Предельное значение не определено
(для переменных типа AXIS, STRING, FRAME)
-2
Указанное имя переменной не присвоено никакому си-
стемному параметру и никакой переменной пользова-
теля.
-3
Неправильное значение параметра <предельное значе-
ние>
GETVARLIM:
Чтение нижнего/верхнего предельного значения системной переменной/пере-
менной пользователя
<имя>:
Имя системной переменной/переменной пользователя
Тип данных:
STRING
<предельное
Указывает, какое предельное значение должно быть выгружено
значение>:
Тип данных:
CHAR
Диапазон зна-
"L"
Нижнее предельное значение
чений:
"U"
Верхнее предельное значение
<результат>:
Возврат предельного значения
Тип данных:
VAR REAL
Пример:
Программный код
Комментарий
DEF INT state=0
DEF REAL result=0
state=GETVARLIM("$MA_MAX_AX_VELO","L",result)
; Определить нижнее предельное значе-
ние для MD32000 $MA_MAX_AX_VELO.
IF (result < 0) GOTOF error
Считать значение размерности
Синтаксис:
<результат>=GETVARDIM(<имя>,<индекс>)
Объяснение:
<результат>:
Размер указанной в параметре <индекс> размерности
Тип данных:
INT
GETVARDIM:
Чтение размера 1-й, 2-й или 3-й размерности поля системной переменной/
переменной пользователя
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
443
Расширенное программирование
4.1 Гибкое программирование ЧПУ
<имя>:
Имя системной переменной/переменной пользователя
Тип данных:
STRING
<индекс>:
Индекс поля
Тип данных:
INT
Диапазон зна-
1 ... 3
чений:
1
Индекс для 1-й размерности поля
2
Индекс для 2-й размерности поля
3
Индекс для 3-й размерности поля
Пример:
Программный код
Комментарий
N5 DEF REAL myReal[5,4]
N10 R1=GETVARDIM("myReal",1)
; Определение размера 1-й размерности поля
; результат: R1 = 5
N15 R2=GETVARDIM("myReal",2)
; Определение размера 2-й размерности поля
; результат: R2 = 4
Чтение стандартного значения
Синтаксис:
<состояние>=GETVARDFT(<имя>,<результат>[,<индекс_1>,<индекс_2>, <индекс_3>])
Объяснение:
<состояние>:
Состояние функции
Тип данных:
INT
Диапазон зна-
1
o. k.
чений:
-1
Стандартное значение недоступно
(например, т. к. определение типа данных переменной
результата не подходит для типа данных системной пе-
ременной/переменной пользователя)
-2
Указанное имя переменной не присвоено никакому си-
стемному параметру и никакой переменной пользова-
теля.
-3
Неправильное значение параметра <индекс_1>, раз-
мерность меньше единицы (⇒ не поле, а скалярная пе-
ременная)
-4
Неправильное значение параметра <индекс_2>
-5
Неправильное значение параметра <индекс_3>
GETVARDFT:
Чтение стандартного значения системной переменной/переменной пользова-
теля
<имя>:
Имя системной переменной/переменной пользователя
Тип данных:
STRING
Программирование ЧПУ
444
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
<результат>:
Возврат стандартного значения
Тип данных:
VAR REAL
(при чтении стандартного значения переменных типов INT,
REAL, BOOL, AXIS)
VAR STRING
(при чтении стандартного значения переменных типов
STRING и CHAR)
VAR FRAME
(при чтении стандартного значения переменных типа FRAME)
<индекс_1>:
Индекс для 1-й размерности поля (опционально)
Тип данных:
INT
Не запрограммировано означает = 0
<индекс_2>:
Индекс для 2-й размерности поля (опционально)
Тип данных:
INT
Не запрограммировано означает = 0
<индекс_3>:
Индекс для 3-й размерности поля (опционально)
Тип данных:
INT
Не запрограммировано означает = 0
Пример:
Программный код
Комментарий
DEF INT state=0
DEF REAL resultR=0
; Переменная для записи стандартных значений
типов INT, REAL, BOOL, AXIS.
DEF FRAME resultF=0
; Переменная для записи стандартных значений
типов FRAME
IF (GETVARTYP("$MA_MAX_AX_VELO") <> 4) GOTOF error
state=GETVARDFT("$MA_MAX_AX_VELO",resultR, AXTOINT(X))
; Определить стандартное значение оси "X".
IF (resultR < 0) GOTOF error
IF (GETVARTYP("$TC_TP8") <> 3) GOTOF error
state=GETVARDFT("$TC_TP8", resultR)
IF (GETVARTYP("$P_UBFR")
<> 7) GOTOF error
state=GETVARDFT("$P_UBFR", resultF )
Чтение типа данных
Синтаксис:
<результат>=GETVARTYP(<имя>)
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
445
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Объяснение:
<результат>:
Тип данных указанной системной переменной/переменной пользователя
Тип данных:
INT
Диапазон зна-
1
= BOOL
чений:
2
= CHAR
3
= INT
4
= REAL
5
= STRING
6
= AXIS
7
= FRAME
В случае ошибки:
< 0
Указанное имя переменной не присвоено никакому си-
стемному параметру и никакой переменной пользовате-
ля.
GETVARTYP:
Чтение типа данных системной переменной/переменной пользователя
<имя>:
Имя системной переменной/переменной пользователя
Тип данных:
STRING
Пример:
Программный код
Комментарий
DEF INT result=0
DEF STRING name="R"
result=GETVARTYP(name)
; Определить тип R-параметра.
IF (result < 0) GOTOF error
Как результат возвращается значение 4. Это соответствует типу данных REAL.
4.1.1.17
Возможные преобразования типов
Постоянное числовое значение, переменная или выражение, присваиваемое
переменной, должно быть совместимо с типом этой переменной. Если это так, то при
присваивании тип преобразуется автоматически.
Возможные преобразования типов
к позиции
REAL
INT
BOOL
CHAR
STRING
AXIS
FRAME
из
REAL
да
да*
да1)
да*
-
-
-
INT
да
да
да1)
да2)
-
-
-
BOOL
да
да
да
да
да
-
-
CHAR
да
да
да1)
да
да
-
-
STRING
-
-
да4)
да3)
да
-
-
AXIS
-
-
-
-
-
да
-
FRAME
-
-
-
-
-
-
да
Программирование ЧПУ
446
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Пояснения
*
При преобразовании типа из REAL в INT дробное значение >= 0,5 округляется в
большую сторону, иные в меньшую сторону (см. функцию ROUND)
1)
Значение <> 0 соответствует TRUE, значение == 0 соответствует FALSE
2)
Если значение находится в допустимом числовом диапазоне
3)
Если только 1 символ
4)
Длина строки 0 = >FALSE, в иных случаях TRUE
Примечание
Если при преобразовании значение превышает конечный диапазон, то следует
сообщение об ошибке.
Если в одном выражении встречаются различные типы, то согласование типов
выполняется автоматически. Преобразования типов возможны и в синхронных
действиях, см. главу "Синхронные действия движения, не явное преобразование типов".
4.1.2
Косвенное программирование
4.1.2.1
Косвенное программирование адресов
При косвенном программировании адресов (Страница 1289) расширенный адрес
(<индекс>) заменяется на переменную подходящего типа.
Примечание
Косвенное программирование адресов невозможно для:
• N (номер кадра)
• L (подпрограмма)
• Настраиваемых адресов
(к примеру, X[1] вместо X1 запрещено)
Синтаксис
<АДРЕС>[<индекс>]
Объяснение
<АДРЕС>[...]:
Фиксированный адрес с расширением (индекс)
<индекс>:
Переменная, к примеру, для номера шпинделя, оси, ...
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
447
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Примеры
Пример 1: Косвенное программирование номера шпинделя
Прямое программирование:
Программный код
Комментарий
S1=300
; Число оборотов 300 об/мин для шпинделя с номером 1.
Косвенное программирование:
Программный код
Комментарий
DEF INT SPINU=1
; Определение переменной типа INT и присваивание значения.
S[SPINU]=300
; Число оборотов 300 об/мин для шпинделя, номер которого сохранен в
переменной SPINU (в этом примере это шпиндель с номером 1).
Пример 2: Косвенное программирование оси
Прямое программирование:
Программный код
Комментарий
FA[U]=300
; Подача 300 для оси "U".
Косвенное программирование:
Программный код
Комментарий
DEF AXIS AXVAR2=U
; Определение переменной типа AXIS и присваивание значения.
FA[AXVAR2]=300
; Подача 300 для оси , имя адреса которой сохранено в переменной с
именем AXVAR2.
Пример 3: Косвенное программирование оси
Прямое программирование:
Программный код
Комментарий
$AA_MM[X]
; Чтение измеренного значения щупа (MCS) оси "X".
Косвенное программирование:
Программный код
Комментарий
DEF AXIS AXVAR3=X
; Определение переменной типа AXIS и присваивание значения.
$AA_MM[AXVAR3]
; Чтение измеренного значения щупа (MCS) для оси, имя которой сохране-
но в переменной AXVAR3.
Пример 4: Косвенное программирование оси
Прямое программирование:
Программный код
X1=100 X2=200
Косвенное программирование:
Программный код
Комментарий
DEF AXIS AXVAR1 AXVAR2
; Определение двух переменных типа AXIS.
Программирование ЧПУ
448
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
AXVAR1=(X1) AXVAR2=(X2)
; Присваивание имен осей.
AX[AXVAR1]=100 AX[AXVAR2]=200
; Перемещение осей, имена адресов которых сохранены в
переменных с именами AXVAR1 и AXVAR2.
Пример 5: Косвенное программирование оси
Прямое программирование:
Программный код
G2 X100 I20
Косвенное программирование:
Программный код
Комментарий
DEF AXIS AXVAR1=X
; Определение переменной типа AXIS и присваивание значения.
G2 X100 IP[AXVAR1]=20
; Косвенное программирование указания центра для оси , имя адреса кото-
рой сохранено в переменной с именем AXVAR1
Пример 6: Косвенное программирование элементов поля
Прямое программирование:
Программный код
Комментарий
DEF INT FELD1[4,5]
; Определение поля 1.
Косвенное программирование:
Программный код
Комментарий
DEFINE DIM1 AS 4
; Для размерностей поля размеры поля должны указываться как фиксиро-
ванные значения.
DEFINE DIM2 AS 5
DEF INT FELD[DIM1,DIM2]
FELD[DIM1-1,DIM2-1]=5
Пример 7: Косвенный вызов подпрограммы
Программный код
Комментарий
CALL "L" << R10
; Вызов программы, номер которой стоит в R10 (соединение строк).
4.1.2.2
Косвенное программирование G-команд
Косвенное программирование G-команд (Страница 1302) обеспечивает эффективное
программирование циклов.
Синтаксис
G[<группа>]=<номер>
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
449
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Объяснение
G[...]:
G-команда с расширением (индекс)
<группа>:
Параметры индекса: G-группа
Тип:
INT
<номер>:
Переменная для номера G-команды
Тип:
INT или REAL
Примечание
Как правило, возможно косвенное программирование только не определяющих
синтаксис G-команд.
Из определяющих синтаксис G-команд возможна только группа G-команд 1.
Определяющие синтаксис G-команды групп G-команд 2, 3 и 4 невозможны.
Примечание
При косвенном программировании G-команды арифметические функции запрещены.
Необходимое вычисление номера G-команды должно быть выполнено в отдельной
строке программы обработки детали перед косвенным программированием в G-
командах.
Примеры
Пример 1: Настраиваемое смещение нулевой точки (группа G-команд 8)
Программный код
Комментарий
N1010 DEF INT INT_VAR
N1020 INT_VAR=2
N1090 G[8]=INT_VAR G1 X0 Y0
; G54
N1100 INT_VAR=INT_VAR+1
; Вычисление G-команды
N1110 G[8]=INT_VAR G1 X0 Y0
; G55
Пример 2: Выбор плоскости (группа G-команд 6)
Программный код
Комментарий
N2010 R10=$P_GG[6]
; Считывание активной G-команды группы G-ко-
манд 6
N2090 G[6]=R10
4.1.2.3
Косвенное программирование атрибутов позиций (GP)
Атрибуты позиций, например, инкрементальное или абсолютное программирование
позиции оси, в комбинации с кодовым словом GP могут программироваться косвенно
как переменные.
Программирование ЧПУ
450
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Использование
Косвенное программирование атрибутов позиций используется в циклах замещения,
т. к. здесь существует следующее преимущество по сравнению с программированием
атрибутов позиций как кодового слова (например, IC, AC, ...):
Благодаря косвенному программированию как переменной не нужен оператор CASE,
который выполняет ветвление через все возможные атрибуты позиций.
Синтаксис
<КОМАНДА ПОЗИЦИОНИРОВАНИЯ>[<ось/шпиндель>]=
GP(<позиция>,<атрибут позиции>)
<ось/шпиндель>=GP(<позиция>,<атрибут позиции>)
Объяснение
<КОМАНДА
Следующие команды позиционирования могут быть запро-
ПОЗИЦИОНИРОВАНИЯ>[]:
граммированы с кодовым словом GP:
POS, POSA,SPOS, SPOSA
Кроме этого возможны:
• Все имеющиеся в канале идентификаторы осей/шпин-
делей:
<ось/шпиндель>
• Переменный идентификатор оси/шпинделя AX
<ось/шпиндель>:
Ось/шпиндель, которая должна быть позиционирована
GP():
Кодовое слово для позиционирования
<позиция>:
Параметр 1
Позиция оси/шпинделя как постоянная или переменная
<атрибут позиции>:
Параметр 2
Атрибут позиции (к примеру, режим подвода к позиции) как
переменная (к примеру, $P_SUB_SPOSMODE) или как кодо-
вое слово (IC, AC, ...)
Выводимые переменными величины имеют следующее значение:
Вели-
Объяснение
Допускается для:
чина
0
Нет изменений атрибута позиции
1
AC
POS, POSA,SPOS, SPOSA,AX, адрес оси
2
IC
POS, POSA,SPOS, SPOSA,AX, адрес оси
3
DC
POS, POSA,SPOS, SPOSA,AX, адрес оси
4
ACP
POS, POSA,SPOS, SPOSA,AX, адрес оси
5
ACN
POS, POSA,SPOS, SPOSA,AX, адрес оси
6
OC
-
7
PC
-
8
DAC
POS, POSA,AX, адрес оси
9
DIC
POS, POSA,AX, адрес оси
10
RAC
POS, POSA,AX, адрес оси
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
451
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Вели-
Объяснение
Допускается для:
чина
11
RIC
POS, POSA,AX, адрес оси
12
CAC
POS, POSA
13
CIC
POS, POSA
14
CDC
POS, POSA
15
CACP
POS, POSA
16
CACN
POS, POSA
Пример
При активном соединении синхронных шпинделей между ходовым винтом S1 и
ведомым шпинделем S2 через команду SPOS в главной программе вызывается
следующий цикл замещения для позиционирования шпинделей.
Позиционирование осуществляется через оператор в N2230:
SPOS[1]=GP($P_SUB_SPOSIT,$P_SUB_SPOSMODE)
SPOS[2]=GP($P_SUB_SPOSIT,$P_SUB_SPOSMODE)
Позиция подвода считывается из системной переменной $P_SUB_SPOSIT, режим подвода
к позиции - из системной переменной $P_SUB_SPOSMODE.
Программный код
Комментарий
N1000 PROC LANG_SUB DISPLOF SBLOF
N2100 IF($P_SUB_AXFCT==2)
N2110
; Замещение команды SPOS / SPOSA / M19 при
активном соединении синхронных шпинделей
N2185 DELAYFSTON
; Начало области задержки останова
N2190 COUPOF(S2,S1)
; Деактивировать соединение синхронных шпинде-
лей
N2200
; Позиционирование ведущего и ведомого шпинделя
N2210 IF($P_SUB_SPOS==TRUE) OR
($P_SUB_SPOSA==TRUE)
N2220
; Позиционировать шпиндель со SPOS:
N2230
SPOS[1]=GP($P_SUB_SPOSIT,
$P_SUB_SPOSMODE)
SPOS[2]=GP($P_SUB_SPOSIT,
$P_SUB_SPOSMODE)
N2250 ELSE
N2260
; Позиционировать шпиндель с M19:
N2270 M1=19 M2=19
; Позиционирование ведущего и ведомого шпинделя
N2280 ENDIF
N2285 DELAYFSTOF
; Конец области задержки останова
N2290 COUPON(S2,S1)
; Активировать соединение синхронных шпинделей
N2410 ELSE
N2420
; Опрос на предмет других замещений
Программирование ЧПУ
452
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
N3300 ENDIF
N9999 RET
Граничные условия
В синхронных действиях косвенное программирование атрибутов позиций невозможно.
4.1.2.4
Косвенное программирование строк программы обработки детали
(EXECSTRING)
С помощью команды программы обработки детали EXECSTRING можно выполнить
созданную прежде переменную String как строку программы обработки детали.
Синтаксис
EXECSTRING программируется в отдельной строке программы обработки детали:
EXECSTRING (<переменная String>)
Значение
EXECSTRING:
Команда для выполнения переменной String как строки програм-
мы обработки детали
<переменная String>:
Переменная типа STRING, содержащая саму исполняемую строку
программы обработки детали
Примечание
С помощью EXECSTRING могут устанавливаться, за исключением управляющих
структур (Страница 491), все конструкции программы обработки детали, которые могут
быть запрограммированы в программном блоке программы обработки детали.
Исключением являются операторы PROC и DEF, а также использование в файлах INI и DEF.
Пример
Программный код
Комментарий
N100 DEF STRING[100] MY_BLOCK
; Определение переменной String для записи исполняемой
строки программы обработки детали.
N110 DEF STRING[10] MFCT1="M7"
N200 EXECSTRING(MFCT1 <<
; Выполнить строку программы обработки детали "M7 M4711".
"M4711")
N300 R10=1
N310 MY_BLOCK="M3"
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
453
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
N320 IF(R10)
N330 MY_BLOCK = MY_BLOCK <<
MFCT1
N340 ENDIF
N350 EXECSTRING(MY_BLOCK)
; Выполнить строку программы обработки детали "M3 M7".
4.1.3
Операции
4.1.3.1
Функции вычисления
Оператор / функция вычисле-
Значение
ния
+
Сложение
-
Вычитание
*
Умножение
/ 1)
Деление 1)
DIV 1)
Целочисленное деление 1)
MOD 1)
Деление по модулю (выдает остаток целочисленного деления) 1)
:
Связывающий оператор для переменных FRAME
SIN( )
Синус
COS()
Косинус
TAN()
Тангенс
ASIN()
Арксинус
ACOS()
Арккосинус
ATAN2(,) 1)
Арктангенс2 1)
SQRT()
Квадратный корень
ABS()
Значение
POT()
2-я степень (квадрат)
TRUNC()
Целая часть
Настраиваемая точность для команд сравнения с TRUNC (см.
"Коррекция точности при ошибках сравнения (TRUNC) (Страни-
ца 459)")
ROUND ()
Округление до целого
LN()
Натуральный логарифм
EXP()
Показательная функция
MINVAL()
Меньшее значение двух переменных
(см. "Минимум, максимум и диапазон переменных (MINVAL,
MAXVAL и BOUND) (Страница 437)" )
MAXVAL()
Большее значение двух переменных
(см. "Минимум, максимум и диапазон переменных (MINVAL,
MAXVAL и BOUND) (Страница 437)")
Программирование ЧПУ
454
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
BOUND()
Значение переменной, лежащее в определенном диапазоне
значений
(см. "Минимум, максимум и диапазон переменных (MINVAL,
MAXVAL и BOUND) (Страница 437)")
CTRANS()
Смещение
CROT()
Вращение
CSCALE()
Изменение масштаба
CMIRROR()
Отражение
1) См. абзац "Примеры"
Программирование
Для функций вычисления действует обычное математическое представление.
Приоритеты в выполнении устанавливаются посредством круглых скобок. Для
тригонометрических и их обратных функций действует указание градуса (прямой угол =
90°).
Примеры
Деление: /
(тип REAL) = тип INT или тип REAL) / (тип INT или тип REAL);
Пример: 3 / 4 = 0.75
Целочисленное деление: DIV
(тип INT) = (тип INT или REAL) / (тип INT или REAL);
Пример: 7 DIV 4.1 = 1
Деление по модулю (выдает остаток целочисленного деления): MOD
(тип REAL) = (тип INT или REAL) MOD (тип INT или REAL);
Пример: 7 MOD 4.1 = 2.9
Арктангенс2: ATAN2
Функция вычисляет ATAN2 из двух расположенных вертикально друг на друге векторов
угол суммарного вектора.
Результат находится в диапазоне четырех квадрантов (-180° < 0 < +180°).
Основой для угловой корреляции всегда является 2-е значение в положительном
направлении.
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
455
Расширенное программирование
4.1 Гибкое программирование ЧПУ
5
$7$1
̺͕͊͒
r
͉͙͕͌͑͗
5
$7$1
̺͕͊͒
r
͉͙͕͌͑͗
Примеры программирования
Программный код
Комментарий
R1=R1+1
; Новое R1 = старое R1 + 1
R1=R2+R3 R4=R5-R6 R7=R8*R9
R10=R11/R12 R13=SIN(25.3)
R14=R1*R2+R3
; Вычисление по правилам арифметики.
R14=(R1+R2)*R3
; Сначала вычисляются выражения в скобках.
R15=SQRT(POT(R1)+POT(R2))
; Сначала раскрываются внутренние скобки:
R15 = квадратный корень( (R1^2 + R2^2) )
RESFRAME=FRAME1:FRAME2
; FRAME-соединение со связывающим оператором
FRAME3=CTRANS(…):CROT(…)
Присваивание значения FRAME-компоненту
4.1.3.2
Операторы сравнения и логические операторы
Операции сравнения могут использоваться, к примеру, для формулировки условия
перехода. При этом возможно сравнение и сложных выражений.
Операции сравнения могут использоваться для переменных типа CHAR, INT, REAL и
BOOL . Для типа CHAR сравнивается кодовое значение.
Для типов STRING, AXIS и FRAME возможны: == и <>, которые для операций типа STRING
могут применяться и в синхронных действиях.
Результат сравнительных операций всегда имеет тип BOOL.
Логические операторы служат для связи значений истинности.
Логические операции могут применяться только для переменных типа BOOL. Через
внутреннее преобразование типов они могут использоваться и для типов данных CHAR,
INT, и REAL.
Программирование ЧПУ
456
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Для логических (булевых) операций для типов данных BOOL, CHAR,INT и REAL действует:
•
0 соответствует: false
• Отлично от 0 соответствует: TRUE
Побитовые логические операторы
С помощью переменных типа CHAR и INT могут выполняться и побитовые логические
операции. При необходимости преобразование типов выполняется автоматически.
Программирование
Оператор сравнения
Значение
==
равно
<>
не равно
>
больше
<
меньше
>=
больше или равно
<=
меньше или равно
Логический оператор
Значение
AND
И
OR
ИЛИ
NOT
Отрицание
XOR
исключающее ИЛИ
Побитовый логический оператор
Значение
B_AND
побитовый И
B_OR
побитовый ИЛИ
B_NOT
побитовое отрицание
B_XOR
побитовое исключающее ИЛИ
Примечание
В арифметических выражениях посредством круглых скобок можно устанавливать
последовательность выполнения всех операторов, отличную от обычных правил
приоритета.
Примечание
Между ЛОГИЧЕСКИМИ операндами и операторами необходимо вставлять пробелы.
Примечание
Оператор B_NOT относится только к одному операнду. Он стоит после оператора.
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
457
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Примеры
Пример 1: Операторы сравнения
IF R10>=100 GOTOF ZIEL
или
R11=R10>=100
IF R11 GOTOF ZIEL
Результат сравнения R10>=100 сначала буферизируется в R11.
Пример 2: Логические операторы
IF (R10<50) AND ($AA_IM[X]>=17.5) GOTOF ZIEL
или
IF NOT R10 GOTOB START
NOT относится только к одному операнду.
Пример 3: Побитовые логические операторы
IF $MC_RESET_MODE_MASK B_AND 'B10000' GOTOF ACT_PLANE
4.1.3.3
Приоритет операций
Каждому оператору соответствует приоритет. При обработке выражения всегда сначала
используются операторы с более высоким приоритетом. В случае равнозначных
операторов обработка выполняется слева направо.
В арифметических выражениях посредством круглых скобок можно устанавливать
последовательность выполнения всех операторов, отличную от обычных правил
приоритета.
Последовательность операторов
От высшего к низшему приоритету
1.
NOT, B_NOT
Отрицание, побитовое отрицание
2.
*, /, DIV, MOD
Умножение, деление
3.
+, -
Сложение, вычитание
4.
B_AND
Побитовое И
5.
B_XOR
Побитовое исключающее ИЛИ
6.
B_OR
Побитовое ИЛИ
7.
AND
И
8.
XOR
Исключающее ИЛИ
9.
OR
ИЛИ
10.
<<
Соединение строк, тип результата STRING
11.
==, <>, >, <, >=, <=
Операторы сравнения
Программирование ЧПУ
458
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Примечание
Связывающий оператор ":" для фреймов не может использоваться с другими
операторами в одном выражении. Поэтому градация приоритетов для этого оператора
не требуется.
Пример оператора If
If (otto==10) and (anna==20) gotof end
4.1.3.4
Коррекция точности при ошибках сравнения (TRUNC)
Команда TRUNC отрезает умноженный на коэффициент точности операнд.
Настраиваемая точность для команд сравнения
Внутреннее отображение данных программы обработки детали типа REAL
осуществляется в формате IEEE с 64 битами. Из-за такого формата десятичные числа
могут отображаться неточно, что при сравнении с идеально вычисленными значениями
может привести к нежелательным результатам.
Относительное равенство
Для того, чтобы обусловленные форматом отображения неточности, не сказывались
отрицательно на ходе программы, команды сравнения контролируются на предмет на
абсолютного, а относительно равенства.
Синтаксис
Коррекция точности при ошибках сравнения
TRUNC (R1*1000)
Значение
TRUNC:
Обрезание мест после запятой
Учтенное относительное равенство 10-12 при операциях
• Равенство: (==)
• Неравенство: (<>)
• Больше или равно: (>=)
• Меньше или равно: (<=)
• Больше/Меньше: (><) с абсолютным равенством
• Больше: (>)
• Меньше: (<)
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
459
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Совместимость
По соображениям совместимости проверка на предмет относительного равенства при
(>) и (<) может быть деактивирована через установку машинных данных MD10280 $MN_
PROG_FUNCTION_MASK Бит0 = 1.
Примечание
Поэтому сравнения с данными типа REAL по названным причинам всегда содержат
определенную неточность. В случае неприемлемых погрешностей необходимо перейти
на вычисление INTEGER, при этом операнды умножаются на коэффициент точности и
после обрезаются с TRUNC.
Синхронные действия
Описанное поведение команд сравнения распространяется и на синхронные действия.
Примеры
Пример 1: Анализ точности
Программный код
Комментарий
N40 R1=61.01 R2=61.02 R3=0.01
; присваивание начальных значений
N41 IF ABS(R2-R1) > R3 GOTOF FEHLER
; прежде переход был бы выполнен
N42 M30
; конец программы
N43 FEHLER: SETAL(66000)
R1=61.01 R2=61.02 R3=0.01
; присваивание начальных значений
R11=TRUNC(R1*1000) R12=TRUNC(R2*1000)
; коррекция точности
R13=TRUNC(R3*1000)
IF ABS(R12-R11) > R13 GOTOF FEHLER
; переход более не выполняется
M30
; конец программы
FEHLER: SETAL(66000)
Пример 2: Образование и обработка коэффициента двух операндов
Программный код
Комментарий
R1=61.01 R2=61.02 R3=0.01
; присваивание начальных значений
IF ABS((R2-R1)/R3)-1) > 10EX-5 GOTOF FEHLER
; переход не выполняется
M30
; конец программы
FEHLER: SETAL(66000)
4.1.3.5
Округления с избытком (ROUNDUP)
С помощью функции "ROUNDUP" вводные значения типа REAL (дробные числа с
десятичной точкой) могут быть округлены до следующего большего целого числа.
Синтаксис
ROUNDUP(<значение>)
Программирование ЧПУ
460
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Значение
ROUNDUP:
Команда для округления вводного значения
<значение>:
Вводное значение типа REAL
Примечание
Вводные значения типа INTEGER (целое число) возвращаются без изменений.
Примеры
Пример 1: Различные вводные значения и результаты их округления
Пример
Результат округления
ROUNDUP(3.1)
4.0
ROUNDUP(3.6)
4.0
ROUNDUP(-3.1)
-3.0
ROUNDUP(-3.6)
-3.0
ROUNDUP(3.0)
3.0
ROUNDUP(3)
3.0
Пример 2: ROUNDUP в программе обработки детали ЧПУ
Программный код
N10 X=ROUNDUP(3.5) Y=ROUNDUP(R2+2)
N15 R2=ROUNDUP($AA_IM[Y])
N20 WHEN X=100 DO Y=ROUNDUP($AA_IM[X])
4.1.4
Операции со строкой
Операции со строкой
Наряду с классическими операциями "Присваивание значения" и "Сравнение" возможны
следующие операции со строкой:
• Преобразование типов в STRING (AXSTRING) (Страница 462)
• Преобразование типов из STRING (NUMBER, ISNUMBER, AXNAME) (Страница 463)
• Соединение строк (<<) (Страница 464)
• Преобразование в строчные/прописные буквы (TOLOWER, TOUPPER) (Страница 465)
• Определение длины строки (STRLEN) (Страница 466)
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
461
Расширенное программирование
4.1 Гибкое программирование ЧПУ
• Поиск символа/строки в строке (INDEX, RINDEX, MINDEX, MATCH) (Страница 466)
• Выбор части строки (SUBSTR) (Страница 467)
• Чтение и запись отдельных символов (Страница 468)
• Форматирование строки (SPRINT) (Страница 469)
Специальное значение символа 0
Символ 0 внутренне интерпретируется на идентификатор конца строки. При замене
символа на символ 0 строка сокращается.
Пример:
Программный код
Комментарий
DEF STRING[20] STRG="Ось . остановлена"
STRG[6]="X"
MSG(STRG)
; Выводит сообщение "Ось X остановлена".
STRG[6]=0
MSG(STRG)
; Выводит сообщение "Ось".
4.1.4.1
Преобразование типов в STRING (AXSTRING)
Благодаря функции "Преобразование типа в STRING" возможно использование
переменных различного типа в качестве составной части сообщения (MSG).
Выполняется не явно при использовании оператора << для типов данных INT, REAL, CHAR
и BOOL (см. " Соединение строк (<<) (Страница 464) ").
Значение INT преобразуется в обычную читабельную форму. Для значений REAL
указывается до 10 мест после запятой.
С помощью команды AXSTRING возможно преобразование переменных типа AXIS в
STRING.
Синтаксис
<STRING_ERG> = << <bel._Typ>
<STRING_ERG> = AXSTRING(<идентификатор оси>)
Значение
<STRING_ERG>:
Переменная для результата преобразования типа
Тип:
STRING
<люб._тип>:
Типы переменных INT, REAL, CHAR, STRING и BOOL
AXSTRING:
Команда AXSTRING выводит указанный идентификатор оси как
строку.
<идентификатор оси>:
Переменная для идентификатора оси
Тип:
AXIS
Программирование ЧПУ
462
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Примечание
Переменные FRAME не могут быть преобразованы.
4.1.4.2
Преобразование типов из STRING (NUMBER, ISNUMBER, AXNAME)
С помощью команды NUMBER выполняется преобразование из STRING в REAL.
Возможность преобразования можно проверить с помощью команды ISNUMBER .
С помощью команды AXNAME строка преобразуется в тип данных AXIS.
Синтаксис
<REAL_ERG>=NUMBER("<строка>")
<BOOL_ERG>=ISNUMBER("<строка>")
<AXIS_ERG>=AXNAME("<строка>")
Значение
NUMBER:
Команда NUMBER возвращает представленное через <строка> число как
значение REAL.
<строка>:
Преобразуемая переменная типа STRING
<REAL_ERG>:
Переменная для результата преобразования типа с NUMBER
Тип:
REAL
ISNUMBER:
С помощью команды ISNUMBER можно проверить, может ли <строка> быть
преобразован в действительное число.
<BOOL_ERG>:
Переменная для результата опроса с ISNUMBER
Тип:
BOOL
Значе-
TRUE
ISNUMBER выводит значение TRUE, если <строка>
ние:
представляет действительное по правилам языка
число REAL.
false
Если ISNUMBER выводит значение FALSE, то при
вызове NUMBER с той же <строка> следует ошибка.
AXNAME:
Команда AXNAME преобразует указанную <строку> в идентификатор оси.
Примечание:
Если <строка> не может быть согласована с сконфигурированным иденти-
фикатором оси, то следует ошибка.
<AXIS_ERG>:
Переменная для результата преобразования типа с AXNAME
Тип:
AXIS
Пример
Программный код
Комментарий
DEF BOOL BOOL_ERG
DEF REAL REAL_ERG
DEF AXIS AXIS_ERG
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
463
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
BOOL_ERG=ISNUMBER("1234.9876Ex-7")
; BOOL_ERG == TRUE
BOOL_ERG=ISNUMBER("1234XYZ")
; BOOL_ERG == FALSE
REAL_ERG=NUMBER("1234.9876Ex-7")
; REAL_ERG == 1234.9876Ex-7
AXIS_ERG=AXNAME("X")
; AXIS_ERG == X
4.1.4.3
Соединение строк (<<)
Функция "Соединение строк" позволяет составить строку из отдельных частей.
Связь реализуется через оператор "<<". Конечным типом этого оператора для всех
комбинаций основных типов CHAR, BOOL, INT, REAL и STRING является STRING. Возможно
необходимое преобразование выполняется по существующим правилам.
Синтаксис
<люб._тип> << <люб._тип>
Объяснение
<люб._тип>:
Переменные типа CHAR, BOOL, INT, REAL или STRING
<< :
Оператор для соединения переменных (<люб._тип>) в составную строку сим-
волов (тип STRING).
Этот оператор доступен отдельно в качестве так называемого "унарного" ва-
рианта. Таким образом возможно явное преобразование типов в STRING (не
для FRAME и AXIS):
<< <люб._тип>
К примеру, таким образом можно составить сообщение или команду из текстовых
списков и вставить параметры (около одного имени блока):
MSG(STRG_TAB[LOAD_IDX]<<ИМЯ БЛОКА)
Примечание
Промежуточные результаты при соединении строк не могут превышать макс. длины
строки.
Примечание
Типы FRAME и AXIS не могут использоваться с оператором "<<".
Примеры
Пример 1: Соединение строк
Программный код
Комментарий
DEF INT IDX=2
DEF REAL VALUE=9.654
Программирование ЧПУ
464
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
DEF STRING[20] STRG="INDEX:2"
IF STRG=="Индекс:"<<IDX GOTOF NO_MSG
MSG("Индекс:"<<IDX<<"/значение:"<<VALUE)
; Индикация:
"Индекс:2/значение:9.654"
NO_MSG:
Пример 2: Явное преобразование типа с <<
Программный код
Комментарий
DEF REAL VALUE=3.5
<<VALUE
; Указанная переменная типа REAL преобразуется в тип STRING.
4.1.4.4
Преобразование в строчные/прописные буквы (TOLOWER, TOUPPER)
Функция "Преобразование в строчные/прописные буквы" позволяет преобразовать все
буквы строки символов в унифицированное представление.
Синтаксис
<STRING_ERG>=TOUPPER("<строка>")
<STRING_ERG>=TOLOWER("<строка>")
Значение
TOUPPER:
С помощью команды TOUPPER все буквы строки символов преобразуют-
ся в прописные буквы.
TOLOWER:
С помощью команды TOLOWER все буквы строки символов преобразуют-
ся в строчные буквы.
<строка>:
Строка символов, которая должна быть преобразована
Тип:
STRING
<STRING_ERG>:
Переменная для результата преобразования
Тип:
STRING
Пример
Так как также существует возможность запуска данных пользователя на интерфейсе, то
может быть достигнуто унифицированное представление со строчными или
прописными буквами:
Программный код
DEF STRING [29] STRG
IF "LEARN.CNC"==TOUPPER(STRG) GOTOF LOAD_LEARN
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
465
Расширенное программирование
4.1 Гибкое программирование ЧПУ
4.1.4.5
Определение длины строки (STRLEN)
С помощью команды STRLEN можно определить длину строки символов.
Синтаксис
<INT_ERG>=STRLEN("<СТРОКА>")
Значение
STRLEN:
С помощью команды STRLEN определяется длина указанной строки симво-
лов.
Возвращается число символов, которые - считая от начала строки символов
- не являются символами 0.
<строка>:
Строка символов, длина которой должна быть определена
Тип:
STRING
<INT_ERG>:
Переменная для результата определения
Тип:
INT
Пример
Функция в комбинации с доступом к отдельным символам позволяет определить конец
строки символов:
Программный код
IF (STRLEN(BAUSTEIN_NAME)>10) GOTOF FEHLER
4.1.4.6
Поиск символа/строки в строке (INDEX, RINDEX, MINDEX, MATCH)
Эта функция позволяет выполнять поиск отдельных символов или строки в другой
строке. Результат функции показывает, на какой позиции строки был найден символ/
строка в рассматриваемой строке.
Синтаксис
INT_ERG=INDEX(STRING,CHAR) ; Тип результата: INT
INT_ERG=RINDEX(STRING,CHAR) ; Тип результата: INT
INT_ERG=MINDEX(STRING,STRING) ; Тип результата: INT
INT_ERG=MATCH(STRING,STRING) ; Тип результата: INT
Семантика
Функции поиска: Они возвращают позицию в строке (первый параметр), где поиск был
успешным. Если символ/строка не найдены, то возвращается значение -1. При этом
первый символ имеет позицию 0.
Программирование ЧПУ
466
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Значение
INDEX:
Поиск указанного вторым параметром символа (сначала) в первом параметре.
RINDEX:
Поиск указанного вторым параметром символа (с конца) в первом параметре.
MINDEX:
Соответствует функции INDEX, за исключением того, что передается список сим-
волов (как строка), из которых возвращается индекс первого найденного симво-
ла.
MATCH:
Поиск строки в строке.
Таким образом, строки могут разбиваться по определенным критериям, к примеру, по
позициям с пробелом или разделительному символу пути ("/").
Пример
Разделение введенных данных по имени пути и блока
Программный код
Комментарий
DEF INT PFADIDX, PROGIDX
DEF STRING[26] EINGABE
DEF INT LISTIDX
EINGABE = "/_N_MPF_DIR/
_N_EXECUTE_MPF"
LISTIDX = MINDEX (EINGABE,
; Как значение в LISTIDX возвращается 3; т.к. "N" это
"M,N,O,P") + 1
первый символ в параметре EINGABE, из списка выбора
сначала.
PFADIDX = INDEX (EINGABE, "/") +1
; при этом: PFADIDX = 1
PROGIDX = RINDEX (EINGABE, "/") +1
; при этом: PROGIDX = 12
; С помощью введенной в следующем разделе функции
SUBSTR
переменная EINGABE может быть разбита на компонен-
ты ;"Путь";и "Блок":
VARIABLE = SUBSTR (EINGABE,
; выводит "_N_MPF_DIR"
PFADIDX, PROGIDX-PFADIDX-1)
VARIABLE = SUBSTR (EINGABE, PROGIDX)
; выводит "_N_EXECUTE_MPF"
4.1.4.7
Выбор части строки (SUBSTR)
С помощью функции SUBSTRING возможно чтение любых частей в рамках строки.
Синтаксис
<STRING_ERG>=SUBSTR(<строка>,<индекс>,<длина>)
<STRING_ERG>=SUBSTR(<строка>,<индекс>)
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
467
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Значение
SUBSTR:
Функция выводит из <строка> часть строки, исходя из <индекс> с указанной
<длина>.
Если параметр <длина> не указан, то функция выводит часть строки, исходя из
<индекс> до конца строки.
<индекс>:
Начальная позиция части строки в рамках строки. Если начальная позиция ле-
жит за концом строки, то возвращается пустая строка (" "). Первый символ стро-
ки: Индекс = 0
Диапазон значений: 0 ... (длина строки - 1)
<длина>:
Длина части строки. Если указывается слишком большая длина, то возвращает-
ся только часть строки до конца строки.
Диапазон значений: 1 ... (длина строки - 1)
Пример
Программный код
Комментарий
DEF STRING[29] ERG
;
1
;
0123456789012345678
ERG = SUBSTR("QUITTUNG: 10 до 99", 10, 2)
; ERG == "10"
ERG = SUBSTR("QUITTUNG: 10 до 99", 10)
; ERG == "10 до 99"
4.1.4.8
Чтение и запись отдельных символов
В рамках строки возможно чтение и запись отдельных символов.
При этом необходимо соблюдать следующие граничные условия:
• возможно только для определенных пользователем переменных, не для системных
переменных
• отдельные символы строки при вызовах подпрограмм передаются только "call by
value"
Синтаксис
<символ>=<строка>[<индекс>]
<символ>=<строка_массив>[<массив_индекс>,<индекс>]
<строка>[<индекс>]=<символ>
<строка_массив>[<массив_индекс>,<индекс>]=<символ>
Значение
<строка>:
Любая строка
<символ>:
Переменная типа CHAR
<индекс>:
Позиция символа в рамках строки.
Первый символ строки: Индекс = 0
Диапазон значений: 0 ... (длина строки - 1)
Программирование ЧПУ
468
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Примеры
Пример 1: Переменное сообщение
Программный код
Комментарий
;
0123456789
DEF STRING [50] MELDUNG = "Ось n достигла позиции"
MELDUNG [6] = "X"
MSG (MELDUNG)
; "Ось X достигла позиции"
Пример 2: Обработка системной переменной
Программный код
Комментарий
DEF STRING [50] STRG
; Буфер для системных переменных
STRG = $P_MMCA
; Загрузка системных переменных
IF STRG[0] == "E" GOTO ...
; Обработка системных переменных
Пример 3: Передача параметров "вызов по значению" и "вызов по ссылке"
Программный код
Комментарий
;
0123456
DEF STRING[50] STRG = "ось X"
DEF CHAR CHR
EXTERN UP_VAL(ACHSE)
; Определение подпрограммы с параметром "вы-
зов по значению"
EXTERN UP_REF(VAR ACHSE)
; Определение подпрограммы с параметром "вы-
зов по ссылке"
UP_VAL(STRG[6])
; Передача параметров "по значению"
CHR = STRG[6]
; Буферизация
UP_REF(CHR)
; Передача параметров "по ссылке"
4.1.4.9
Форматирование строки (SPRINT)
С помощью предопределенной функции SPRINT можно форматировать и, к примеру,
подготавливать строки символов для вывода на внешние устройства (см. также "Process
DataShare - Вывод на внешнее устройство/файл (EXTOPEN, WRITE, EXTCLOSE)
(Страница 1039)").
Синтаксис
"<результат_строка>"=SPRINT("<формат_строка>",<значение_1>,<значение_2>,...,
<значение_n>)
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
469
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Значение
SPRINT:
Идентификатор для предопределенной функции,
выводящей значение типа STRING.
"<формат_строка>":
Строка символов, содержащая постоянные и пе-
ременные части. Переменные части определяют-
ся знаком управления форматом % и последую-
щим описанием формата.
< значение_1>,< значение_2>,…,<
Значение в форме постоянной или переменной
значение_n>:
ЧПУ, вставляемое в месте, в котором стоит n-ный
знак управления форматом %, согласно описанию
формата в <формат_строка>.
"<результат_строка>":
Форматированная строка символов (макс. 400
байт)
Имеющиеся описания форматов
%B:
Преобразование в строку "TRUE", если преобразуемое значение:
• отлично от 0.
• не является пустой строкой (для значений String).
Преобразование в строку "FALSE", если преобразуемое значение:
• равно 0.
• является пустой строкой.
Пример:
N10 DEF BOOL BOOL_VAR=1
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF BOOL_VAR:%B", BOOL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF BOOL_VAR:TRUE".
%C:
Преобразование с символ ASCII.
Пример:
N10 DEF CHAR CHAR_VAR="X"
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF CHAR_VAR:%C",CHAR_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF CHAR_VAR:X".
%D:
Преобразование в строку с целочисленным значением (INTEGER).
Пример:
N10 DEF INT INT_VAR=123
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF INT_VAR:%D",INT_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF INT_VAR:123".
Программирование ЧПУ
470
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
%<m>D:
Преобразование в строку с целочисленным значением (INTEGER). Строка имеет
мин. длину в <m> символов. Отсутствующие места заполняются выровненны-
ми по левым разрядам символами пробела.
Пример:
N10 DEF INT INT_VAR=-123
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF INT_VAR:%6D",INT_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF INT_VAR:xx-123" ("x" в примере замещает символ пробела).
%F:
Преобразование в строку с десятичным числом с 6 местами после запятой.
Места после запятой при необходимости округляются или заполняются 0.
Пример:
N10 DEF REAL REAL_VAR=-1.2341234EX+03
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%F",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:-1234.123400".
%<m>F:
Преобразование в строку с десятичным числом с 6 местами после запятой и
общей длиной мин. в <m> символов. Места после запятой при необходимости
округляются или заполняются 0. Отсутствующие символы на всю длину <m>
заполняются выровненными по левым разрядам символами пробела.
Пример:
N10 DEF REAL REAL_VAR=-1.23412345678EX+03
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%15F",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR": xxx-1234.123457" ("x" в примере замещает символ про-
бела).
%.<n>F:
Преобразование в строку с десятичным числом с <n> местами после запятой.
Места после запятой при необходимости округляются или заполняются 0.
Пример:
N10 DEF REAL REAL_VAR=-1.2345678EX+03
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%.3F",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:-1234.568".
%<m>.<n>F:
Преобразование в строку с десятичным числом с <n> местами после запятой и
общей длиной мин. в <m> символов. Места после запятой при необходимости
округляются или заполняются 0. Отсутствующие символы на всю длину <m>
заполняются выровненными по левым разрядам символами пробела.
Пример:
N10 DEF REAL REAL_VAR=-1.2341234567890EX+03
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%10.2F",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:xx-1234.12" ("x" в примере замещает символ пробела).
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
471
Расширенное программирование
4.1 Гибкое программирование ЧПУ
%E:
Преобразование в строку с десятичным числом в экспоненциальном предста-
влении. Мантисса сохраняется нормализированной с одним местом перед за-
пятой и 6 местами после запятой. Места после запятой при необходимости ок-
ругляются или заполняются 0. Показатель начинается с кодового слова "EX". За
ним следует знак ("+" или "-") и двух- или трехзначное число.
Пример:
N10 DEF REAL REAL_VAR=-1234.567890
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%E",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:-1.234568EX+03".
%<m>E:
Преобразование в строку с десятичным числом в экспоненциальном предста-
влении с общей длиной мин. в <m> символов. Отсутствующие символы запол-
няются выровненными по левым разрядам символами пробела. Мантисса со-
храняется нормализированной с одним местом перед запятой и 6 местами по-
сле запятой. Места после запятой при необходимости округляются или запол-
няются 0. Показатель начинается с кодового слова "EX". За ним следует знак ("+"
или "-") и двух- или трехзначное число.
Пример:
N10 DEF REAL REAL_VAR=-1234,5
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%20E",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:xxxxxx-1.234500EX+03" ("x" в примере замещает символ
пробела)
%.<n>E:
Преобразование в строку с десятичным числом в экспоненциальном предста-
влении. Мантисса сохраняется нормализированной с одним местом перед за-
пятой и <n> местами после запятой. Места после запятой при необходимости
округляются или заполняются 0. Показатель начинается с кодового слова "EX".
За ним следует знак ("+" или "-") и двух- или трехзначное число.
Пример:
N10 DEF REAL REAL_VAR=-1234,5678
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%.2E",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:-1.23EX+03".
%<m>.<n>E:
Преобразование в строку с десятичным числом в экспоненциальном предста-
влении с общей длиной мин. в <m> символов. Отсутствующие символы запол-
няются выровненными по левым разрядам символами пробела. Мантисса со-
храняется нормализированной с одним местом перед запятой и <n> местами
после запятой. Места после запятой при необходимости округляются или за-
полняются 0. Показатель начинается с кодового слова "EX". За ним следует знак
("+" или "-") и двух- или трехзначное число.
Пример:
N10 DEF REAL REAL_VAR=-1234,5678
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%12.2E", REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:xx-1.23EX+03" ("x" в примере замещает символ пробела).
Программирование ЧПУ
472
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
%G:
Преобразование в строку с десятичным числом в десятичном или экспонен-
циальном представлении в зависимости от диапазона значений: если предста-
вляемое значение по величине меньше 1.0EX-04 или больше/равно 1.0EX+06,
то выбирается экспоненциальное представление, в остальных случаях десятич-
ное представление. Отображается макс. шесть значимых мест, при необходи-
мости выполняется округление.
Пример с десятичным представлением:
N10 DEF REAL REAL_VAR=1.234567890123456EX-04
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%G",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:0,000123457".
Пример с экспоненциальным представлением:
N10 DEF REAL REAL_VAR=1.234567890123456EX+06
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%G",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:1.23457EX+06".
%<m>G:
Преобразование в строку с десятичным числом в десятичном или экспонен-
циальном представлении в зависимости от диапазона значений (как %G). Строка
имеет общую длину мин. в <m> символов. Отсутствующие символы заполня-
ются выровненными по левым разрядам символами пробела.
Пример с десятичным представлением:
N10 DEF REAL REAL_VAR=1.234567890123456EX-04
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%15G",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:xxxx0.000123457" ("x" в примере замещает символ про-
бела).
Пример с экспоненциальным представлением:
N10 DEF REAL REAL_VAR=1.234567890123456EX+06
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%15G",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:xxx1.23457EX+06" ("x" в примере замещает символ про-
бела).
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
473
Расширенное программирование
4.1 Гибкое программирование ЧПУ
%.<n>G:
Преобразование в строку с десятичным числом в десятичном или экспонен-
циальном представлении в зависимости от диапазона значений. Отображается
макс. <n> значимых мест, при необходимости выполняется округление. если
представляемое значение по величине меньше 1.0EX-04 или больше/равно
1.0EX(+<n>), то выбирается экспоненциальное представление, в остальных слу-
чаях десятичное представление.
Пример с десятичным представлением:
N10 DEF REAL REAL_VAR=1.234567890123456EX-04
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%.3G",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:0,000123".
Пример с экспоненциальным представлением:
N10 DEF REAL REAL_VAR=1.234567890123456EX+03
N20 DEF STRING[80] RESULT
N30 RESULT = SPRINT("CONTENT OF REAL_VAR:%.3G",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:1.23EX+03".
%<m>.<n>G:
Преобразование в строку с десятичным числом в десятичном или экспонен-
циальном представлении в зависимости от диапазона значений (как %.<n>G).
Строка имеет общую длину мин. в <m> символов. Отсутствующие символы за-
полняются выровненными по левым разрядам символами пробела.
Пример с десятичным представлением:
N10 DEF REAL REAL_VAR=1.234567890123456EX-04
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%12.4G",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:xxx0.0001235" ("x" в примере замещает символ пробе-
ла).
Пример с экспоненциальным представлением:
N10 DEF REAL REAL_VAR=1.234567890123456EX+04
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF REAL_VAR:%12.4G",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF REAL_VAR:xx1.235EX+06" ("x" в примере замещает символ пробе-
ла).
Программирование ЧПУ
474
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
%.<n>P:
Преобразование REAL-значения в INTEGER-значение с учетом <n> мест после
запятой. INTEGER-значение выводится как 32-битное двоичное число. Если пре-
образуемое значение не может быть представлено в 32 бит, то обработка от-
меняется с ошибкой.
Т.к. созданная с оператором спецификации формата %.<n>P байтовая после-
довательность может содержать и двоичные нули, то созданная таким образом
общая строка более не соответствует условным обозначениям типа данных ЧПУ
STRING. Поэтому она не может быть ни сохранена в переменную типа STRING, ни
подвергнута дальнейшей обработке с помощью строковых команд языка ЧПУ.
Единственным возможным применением является передача параметров на
команду WRITE с выводом на соответствующее внешнее устройство (см. при-
мер ниже).
Как только <формат_строка> содержит описание формата типа %P, вся строка,
за исключением сгенерированного с %.<n>P двоичного числа, выводится
согласно MD10750 $MN_SPRINT_FORMAT_P_CODE в символьном коде ASCII, ISO
(DIN6024) или EIA (RS244). При программировании символа, который не может
быть преобразован, обработка отменяется с ошибкой.
Пример:
N10 DEF REAL REAL_VAR=123.45
N20 DEF INT ERROR
N30 DEF STRING[20] EXT_DEVICE="/ext/dev/1"
N100 EXTOPEN(ERROR,EXT_DEVICE)
N110 IF ERROR <> 0
; обработка ошибок
N200 WRITE(ERROR,EXT_DEVICE,SPRINT("INTEGER BINARY
CODED:%.3P",REAL_VAR)
N210 IF ERROR <> 0
… ; обработка ошибок
Результат: Строка "INTEGER BINARY CODED: 'H0001E23A'" передается на устрой-
ство вывода /ext/dev/1. Шестнадцатеричное значение 0x0001E23A соответ-
ствует десятичному значению 123450.
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
475
Расширенное программирование
4.1 Гибкое программирование ЧПУ
%<m>.<n>P:
Преобразование REAL-значения согласно установке в машинных данных
MD10751 $MN_SPRINT_FORMAT_P_DECIMAL в строку с:
• целым числом из <m> + <n> мест или
• десятичным числом макс. с <m> местами перед запятой и точно <n> места-
ми после запятой.
Как у описания формата %.<n>P вся строка сохраняется в определенный через
MD10750 $MN_SPRINT_FORMAT_P_CODE код символа.
Преобразование при MD10751 = 0:
Значение REAL преобразуется в строку с целым числом из <m> + <n> мест. При
необходимости места после запятой округляются до <n> мест или заполняются
нулями. Отсутствующие места перед запятой заполняются символами пробела.
Знак минус добавляется выровненным слева, вместо знака плюс вставляется
пробел.
Пример:
N10 DEF REAL REAL_VAR=-123.45
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("PUNCHED TAPE FORMAT:%5.3P",REAL_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"PUNCHED TAPE FORMAT:-xx123450" ("x" в примере замещает символ пробела).
Преобразование при MD10751 = 1:
Значение REAL преобразуется в строку с десятичным числом макс. <m> места-
ми перед запятой и точно <n> местами после запятой. При необходимости ме-
ста перед запятой обрезаются, а места после запятой округляются или запол-
няются нулями. Если <n> равно 0, то десятичная точка также не нужна.
Пример:
N10 DEF REAL REAL_VAR1=-123.45
N20 DEF REAL REAL_VAR2=123.45
N30 DEF STRING[80] RESULT
N40 RESULT=SPRINT("PUNCHED TAPE FORMAT:%5.3P VAR2:%2.0P",
REAL_VAR1,REAL_VAR2)
Результат: Строковая переменная RESULT описывается строкой символов
"PUNCHED TAPE FORMAT:-123.450 VAR2:23".
%S:
Вставка строки.
Пример:
N10 DEF STRING[16] STRING_VAR="ABCDEFG"
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF STRING_VAR:%S",STRING_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF STRING_VAR:ABCDEFG".
%<m>S:
Вставка строки мин. с <m> символами. Отсутствующие места заполняются сим-
волами пробела.
Пример:
N10 DEF STRING[16] STRING_VAR="ABCDEFG"
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF STRING_VAR:%10S",STRING_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF STRING_VAR:xxxABCDEFG" ("x" в примере замещает символ пробе-
ла).
Программирование ЧПУ
476
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
%.<n>S:
Вставка <n> символов строки (начиная с первого символа).
Пример:
N10 DEF STRING[16] STRING_VAR="ABCDEFG"
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF STRING_VAR:%.3S",STRING_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF STRING_VAR:ABC".
%<m>.<n>S:
Вставка <n> символов строки (начиная с первого символа). Созданная строка
имеет общую длину мин. в <m> символов. Отсутствующие места заполняются
символами пробела.
Пример:
N10 DEF STRING[16] STRING_VAR="ABCDEFG"
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("CONTENT OF STRING_VAR:%10.5S", STRING_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"CONTENT OF STRING_VAR:xxxxxABCDE" ("x" в примере замещает символ пробе-
ла).
%X:
Преобразование значения INTEGER в строку с шестнадцатеричным представле-
нием.
Пример:
N10 DEF INT INT_VAR='HA5B8’
N20 DEF STRING[80] RESULT
N30 RESULT=SPRINT("INTEGER HEXADECIMAL:%X",INT_VAR)
Результат: Строковая переменная RESULT описывается строкой символов
"INTEGER HEXADECIMAL:A5B8".
Примечание
Свойство языка ЧПУ, не делающего различий между прописным и строчным написанием
идентификаторов и кодовых слов, действует и для описаний форматов. Поэтому они
могут программироваться прописными или строчными буквами без различия в
функциях.
Возможности образования комбинаций
Таблица ниже показывает, какие типы данных ЧПУ могут комбинироваться с каким
описанием формата. Действуют правила для не явного преобразования типа данных
(см. "Типы данных (Страница 437)").
Типы данных ЧПУ
BOOL
CHAR
INT
REAL
STRING
AXIS
FRAME
%B
+
+
+
+
+
-
-
%C
-
+
-
-
+
-
-
%D
+
+
+
+
-
-
-
%F
-
-
+
+
-
-
-
%E
-
-
+
+
-
-
-
%G
-
-
+
+
-
-
-
%S
-
+
-
-
+
-
-
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
477
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Типы данных ЧПУ
BOOL
CHAR
INT
REAL
STRING
AXIS
FRAME
%X
+
+
+
-
-
-
-
%P
-
-
+
+
-
-
-
Примечание
Из таблицы видно, что типы данных ЧПУ AXIS и FRAME не могут использоваться напрямую
в функции SPRINT. Но можно:
• преобразовать тип данных AXIS с помощью функции AXSTRING в строку, которая
после может быть обработана со SPRINT.
• прочитать отдельные значения типа данных FRAME через доступ к фрейм-
компонентам. Благодаря этому получаются данные типа REAL, которые могут быть
подвергнуты дальнейшей обработке со SPRINT.
4.1.5
Переходы и ветвления в программе
4.1.5.1
Возврат на начало программы (GOTOS)
С помощью команды GOTOS для повторения программы можно вернуться на начало
главной или подпрограммы.
Через машинные данные можно установить, чтобы при каждом возврате на начало
программы:
• время выполнения программы устанавливалось бы на "0".
• подсчет деталей увеличивался бы на значение "1".
Синтаксис
GOTOS
Значение
GOTOS:
Оператор перехода с целью перехода "начало программы".
Выполнение управляется через интерфейсный сигнал ЧПУ/PLC:
DB21, ... DBX384.0 (управление ветвлением программы)
Значе-
Значение:
ние:
0
Нет возврата на начало программы. Выполнение программы продол-
жается на следующем после GOTOS кадре программы обработки де-
тали.
1
Возврат на начало программы. Программа обработки детали повтор-
яется.
Программирование ЧПУ
478
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Граничные условия
• GOTOS вызывает внутреннюю STOPRE (остановка предварительной обработки).
• В программе обработки детали с определениями данных (переменные LUD) с GOTOS
выполняется переход на первый кадр программы после раздела определения, т.е.
определения данных не осуществляются повторно. Таким образом, определенные
переменные сохраняют достигнутое в кадре GOTOS значение и не сбрасываются на
запрограммированные в разделе определения стандартные значения.
• Если программы с операторами перехода должны выполняться через функцию
"Выполнение с внешнего устройства" из внешней программной памяти, то цели
перехода должны находиться в пределах памяти догрузки.
Это условие, как правило, является проблемой для операторов перехода на начало
программы (GOTOS), так как программы обычно имеют большой размер для
помещения в память догрузки. При первой догрузке начало программы удаляется из
памяти догрузки. Если при дальнейшем выполнении программы потребуется
обработать оператор перехода на начало программы, тогда функция будет не в
состоянии найти цель перехода. Происходит отмена программы с выводом
аварийного сообщения 14000.
Примечание
Для выполнения внешних программ без ограничений в части запрограммированных
операторов перехода, рекомендуется вместо функции "Выполнение с внешнего
устройства" использовать опцию "Выполнение из внешней памяти (EES)".
• В синхронных действиях и технологических циклах команда GOTOS недоступна.
Пример
Программный код
Комментарий
N10 ...
; Начало программы.
N90 GOTOS
; Переход на начало программы.
4.1.5.2
Переходы на метки перехода (GOTOB, GOTOF, GOTO, GOTOC)
В программе могут быть установлены метки перехода (метки), на которые можно
переходить из других мест внутри одной программе с помощью команд GOTOF, GOTOB,
GOTO или GOTOC. После выполнение программы начинается на операторе, который
следует непосредственно за меткой перехода. Благодаря этому могут быть реализованы
ветвления внутри программы.
Наряду с метками перехода в качестве целей перехода возможны и номера главных и
вспомогательных кадров.
Если перед оператором перехода сформулировано условие перехода (IF ...), то переход
в программе осуществляется только при выполнении условия перехода.
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
479
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Синтаксис
GOTOB <цель перехода>
IF <условие перехода> == TRUE GOTOB <цель перехода>
GOTOF <цель перехода>
IF <условие перехода> == TRUE GOTOF <цель перехода>
GOTO <цель перехода>
IF <условие перехода> == TRUE GOTO <цель перехода>
GOTOС <цель перехода>
IF <условие перехода> == TRUE GOTOC <цель перехода>
Значение
GOTOB:
Оператор перехода с целью перехода в направлении начала программы.
GOTOF:
Оператор перехода с целью перехода в направлении конца программы.
GOTO:
Оператор перехода с поиском цели перехода. Поиск сначала выполняется
в направлении конца программы, потом в направлении начала програм-
мы.
GOTOC:
Действие аналогично GOTO с той разницей, что ошибка 14080 "Цель пере-
хода не найдена" подавляется.
Это означает, что выполнение программы в случае безрезультатного поис-
ка цели перехода не отменяется, а продолжается со следующей за
командой GOTOC строки программы.
<цель перехода>:
Параметры цели перехода
Возможными данными являются:
<метка перехода>:
Цель перехода это установленная в программе
метка перехода с пользовательским именем:
<метка перехода>:
<номер кадра>:
Цель перехода это номер главного или вспомога-
тельного кадра (к примеру: 200, N300)
Переменная типа
Переменная цель перехода. Переменная обозна-
STRING:
чает метку перехода или номер кадра.
IF:
Кодовое слово для формулирования условия перехода.
Условие перехода допускает все операции сравнения и логические опера-
ции (результат: TRUE или FALSE). Переход в программе выполняется, если
результат этой операции TRUE.
Программирование ЧПУ
480
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Примечание
Метки перехода (метки)
Метки перехода всегда стоят в начале кадра. Если имеется номер программы, то метка
перехода стоит непосредственно за номером кадра.
Для наименования меток перехода действуют следующие правила:
• Число символов:
- минимум 2
- максимум 32
• Разрешенными символами являются:
- буквы
- цифры
- символы подчеркивания
• Первыми двумя символами должны быть буквы или символы подчеркивания.
• После имени метки перехода следует двоеточие (":").
Граничные условия
• Целью перехода может быть только кадр с меткой перехода или номером кадра,
лежащий внутри программы.
• Оператор перехода без условия перехода должен быть запрограммирован в
отдельном кадре. Для операторов перехода с условиями перехода это ограничение не
действует. Здесь можно сформулировать несколько операторов перехода в одном
кадре.
• Для программ с операторами перехода без условий перехода конец программы M2/
M30 не обязательно должен стоять на конце программы.
• Если программы с операторами перехода должны выполняться через функцию
"Выполнение с внешнего устройства" из внешней программной памяти, то цели
перехода должны находиться в пределах памяти догрузки. В ином случае цель
перехода не будет найдена и происходит отмена программы с выводом аварийного
сообщения 14000.
Примечание
Для выполнения внешних программ без ограничений в части запрограммированных
операторов перехода, рекомендуется вместо функции "Выполнение с внешнего
устройства" использовать опцию "Выполнение из внешней памяти (EES)".
Примеры
Пример 1: Переходы на метки перехода
Программный код
Комментарий
N10 …
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
481
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
N20 GOTOF Label_1
; переход в направлении конца программы к
; метка перехода «Label_1».
N30 …
N40 Label_0: R1=R2+R3
; Метка перехода "Label_0" установлена.
N50 ...
N60 Label_1:
; Метка перехода "Label_1" установлена.
N70 …
N80 GOTOB Label_0
; переход в направлении начала программы
; к метке перехода «Label_0».
N90 …
Пример 2: Косвенный переход на номер кадра
Программный код
Комментарий
IF <условие> == TRUE
R10=100
; назначение цели перехода
ELSE
R10=110
; назначение цели перехода
ENDIF
; переход в направлении конца программы на кадр, номер которого стоит в R10
N10 GOTOF "N"<<R10
N90 ...
N100 ...
; Цель перехода
N110 ...
Пример 3: Переход на переменную цель перехода
Программный код
Комментарий
DEF STRING[20] ZIEL
IF <условие> == TRUE
ZIEL = "Marke1"
; назначение цели перехода
ELSE
ZIEL = "Marke2"
; назначение цели перехода
ENDIF
; переход в направлении конца программы к переменной цели перехода «Содержание ZIEL»
GOTOF ZIEL
Marke1: T="Bohrer1"
; цель перехода 1
Marke2: T="Bohrer2"
; цель перехода 2
Программирование ЧПУ
482
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Пример 4: Переход с условием перехода
Программный код
Комментарий
N40 R1=30 R2=60 R3=10 R4=11 R5=50 R6=20
; присваивание начальных значений
N41 LA1: G0 X=R2*COS(R1)+R5 Y=R2*SIN(R1)+R6
; метка перехода LA1
N42 R1=R1+R3 R4=R4-1
; IF условие перехода == TRUE
; THEN переход в направлении начала программы к метке перехода LA1
N43 IF R4>0 GOTOB LA1
N44 M30
; конец программы
4.1.5.3
Ветвление программы (CASE ... OF ... DEFAULT ...)
Функция CASE предлагает возможность проверки актуального значения (тип: INT)
переменной или функции вычисления и в зависимости от результата перейти на
различные места в программе.
Синтаксис
CASE(<выражение>) OF <постоянная_1> GOTOF <цель перехода_1>
<постоянная_2> GOTOF <цель перехода_2> ... DEFAULT GOTOF <цель перехода_n>
Значение
CASE:
Оператор перехода
<выражение>:
Переменная или функция вычисления
OF:
Кодовое слово для формулировки условных ветвлений программы
<постоянная_1>:
Первое указанное постоянное значение для переменной или функции
вычисления
Тип:
INT
<постоянная_2>:
Второе указанное постоянное значение для переменной или функции
вычисления
Тип:
INT
DEFAULT:
На тот случай, когда переменная или функция вычисления не прини-
мает ни одного из указанных постоянных значений, с помощью
оператора DEFAULT можно определить цель перехода.
Примечание:
Если оператор DEFAULT не запрограммирован, то в этом случае целью
перехода становится следующий за оператором CASE кадр.
GOTOF:
Оператор перехода с целью перехода в направлении конца програм-
мы.
Вместо GOTOF могут быть запрограммированы и все другие команды
GOTO (см. тему "Переходы в программе на метки перехода").
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
483
Расширенное программирование
4.1 Гибкое программирование ЧПУ
<цель перехода_1>:
Выполняется ветвление на эту цель перехода, если значение перемен-
ной или функции вычисления соответствует первой указанной по-
стоянной.
Цель перехода может быть указана следующим образом:
<метка перехода>:
Цель перехода это установленная в программе
метка перехода с пользовательским именем:
<метка перехода>:
<номер кадра>:
Цель перехода это номер главного или вспомо-
гательного кадра (к примеру: 200, N300)
Переменная типа
Переменная цель перехода. Переменная обо-
STRING:
значает метку перехода или номер кадра.
<цель перехода_2>:
Выполняется ветвление на эту цель перехода, если значение перемен-
ной или функции вычисления соответствует второй указанной по-
стоянной.
<цель перехода_n>:
Выполняется ветвление на эту цель перехода, если значение перемен-
ной не принимает ни одного из указанных постоянных значений.
Граничные условия
Выполнение с внешнего устройства
Если программы с функцией CASE должны выполняться через функцию "Выполнение с
внешнего устройства" из внешней программной памяти, то цели перехода должны
находиться в пределах памяти догрузки. В ином случае цель перехода не будет найдена
и происходит отмена программы с выводом аварийного сообщения 14000.
Примечание
Для выполнения внешних программ без ограничений в части запрограммированных
операторов перехода, рекомендуется вместо функции "Выполнение с внешнего
устройства" использовать опцию "Выполнение из внешней памяти (EES)".
Пример
Программный код
N20 DEF INT VAR1 VAR2 VAR3
N30 CASE(VAR1+VAR2-VAR3) OF 7 GOTOF Label_1 9 GOTOF
Label_2 DEFAULT GOTOF Label_3
N40 Label_1: G0 X1 Y1
N50 Label_2: G0 X2 Y2
N60 Label_3: G0 X3 Y3
Программирование ЧПУ
484
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Оператор CASE из N30 определяет следующие возможности ветвления программы:
1. Если значение функции вычисления VAR1+VAR2-VAR3 = 7, то перейти на кадр с
определением метки перехода "Label_1" (→ N40).
2. Если значение функции вычисления VAR1+VAR2-VAR3 = 9, то перейти на кадр с
определением метки перехода "Label_2" (→ N50).
3. Если значение функции вычисления VAR1+VAR2-VAR3 ни 7, ни 9, то перейти на кадр с
определением метки перехода "Label_3" (→ N60).
4.1.6
Повторение блока программы (REPEAT, REPEATB, ENDLABEL, P)
Повторение программного блока позволяет повторять уже записанные блоки
программы внутри программы в любом составе.
Повторяемые строки или области программы обозначаются метками перехода
(метками).
Примечание
Метки перехода (метки)
Метки перехода всегда стоят в начале кадра. Если имеется номер программы, то метка
перехода стоит непосредственно за номером кадра.
Для наименования меток перехода действуют следующие правила:
• Число символов:
- минимум 2
- максимум 32
• Разрешенными символами являются:
- буквы
- цифры
- символы подчеркивания
• Первыми двумя символами должны быть буквы или символы подчеркивания.
• После имени метки перехода следует двоеточие (":").
Синтаксис
1. Повторение отдельной строки программы:
<метка перехода>: ...
REPEATB <метка перехода> P=<n>
2. Повторение области программы между меткой перехода и оператором REPEAT:
<метка перехода>: ...
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
485
Расширенное программирование
4.1 Гибкое программирование ЧПУ
REPEAT <метка перехода> P=<n>
3. Повторение области между двумя метками перехода:
<стартовая метка перехода>: ...
<конечная метка перехода>: ...
REPEAT <стартовая метка перехода> <конечная метка перехода>
P=<n>
Примечание
Заключение оператора REPEAT с обеими метками перехода в скобки невозможно.
Если <стартовая метка перехода> найдена перед оператором REPEAT и <конечная метка
перехода> не достигается до оператора REPEAT, то выполняется повторение
между <стартовая метка перехода> и оператором REPEAT.
4. Повторение области между меткой перехода и ENDLABEL:
<метка перехода>: ...
ENDLABEL: ...
REPEAT <метка перехода> P=<n>
Примечание
Заключение оператора REPEAT с <метка перехода> и ENDLABEL в скобки невозможно.
Если <метка перехода> найдена перед оператором REPEAT и ENDLABEL не достигается
до оператора REPEAT, то выполняется повторение между <метка перехода> и
оператором REPEAT.
Значение
REPEATB:
Команда повторения строки программы
REPEAT:
Команда повторения области программы
Программирование ЧПУ
486
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
<метка перехода>:
<метка перехода> обозначает:
• повторяемую строку программы (при REPEATB)
или
• начало повторяемой области программы (при REPEAT)
Обозначенная с <метка перехода> строка программы может стоять до
или после оператора REPEAT/REPEATB. Поиск сначала выполняется в на-
правлении начала программы. Если метка перехода в этом направлении
не найдена, то выполняется поиск в направлении конца программы.
Исключение:
Если необходимо повторить область программы между меткой перехода
и оператором REPEAT (см. 2. в Синтаксисе), то обозначенная с <метка
перехода> строка программы должна стоять до оператора REPEAT, т.к. в
этом случае поиск выполняется только в направлении начала програм-
мы.
Если в кадре с <метка перехода> имеются дополнительные операторы, то
при каждом повторении они выполняются заново.
ENDLABEL:
Кодовое слово, обозначающее конец повторяемой области программы
Если строка с ENDLABEL содержит другие операторы, то при каждом по-
вторении они выполняются заново.
ENDLABEL может использоваться в программе многократно.
P:
Адрес для указания числа повторов
<n>:
Число повторов блока программы
Тип:
INT
Повторяемый блок программы повторяется <n> раз. После последнего
повторения программа продолжается на следующей за строкой REPEAT/
REPEATB строке.
Примечание:
Если P=<n> не указано, то повторяемый блок программы повторяется
точно один раз.
Примеры
Пример 1: Повторение отдельной строки программы
Программный код
Комментарий
N10 POSITION1: X10 Y20
N20 POSITION2: CYCLE(0,,9,8)
; Позиционный цикл
N30 …
N40 REPEATB POSITION1 P=5
; Выполнить КАДР N10 пять раз.
N50 REPEATB POSITION2
; Выполнить кадр N20 один раз.
N60 ...
N70 M30
Пример 2: Повторение области программы между меткой перехода и оператором
REPEAT
Программный код
Комментарий
N5 R10=15
N10 BEGIN: R10=R10+1
; Ширина
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
487
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
N20 Z=10-R10
N30 G1 X=R10 F200
N40 Y=R10
N50 X=-R10
N60 Y=-R10
N70 Z=10+R10
N80 REPEAT BEGIN P=4
; Выполнить область N10 до N70 четыре раза.
N90 Z10
N100 M30
Пример 3: Повторение области между двумя метками перехода
Программный код
Комментарий
N5 R10=15
N10 BEGIN: R10=R10+1
; Ширина
N20 Z=10-R10
N30 G1 X=R10 F200
N40 Y=R10
N50 X=-R10
N60 Y=-R10
N70 END: Z=10
N80 Z10
N90 CYCLE(10,20,30)
N100 REPEAT BEGIN END P=3
; Выполнить область N10 до N70 три раза.
N110 Z10
N120 M30
Пример 4: Повторение области между меткой перехода и ENDLABEL
Программный код
Комментарий
N10 G1 F300 Z-10
N20 BEGIN1:
N30 X10
N40 Y10
N50 BEGIN2:
N60 X20
N70 Y30
N80 ENDLABEL: Z10
N90 X0 Y0 Z0
N100 Z-10
N110 BEGIN3: X20
N120 Y30
N130 REPEAT BEGIN3 P=3
; Выполнить область N110 до N120 три раза.
N140 REPEAT BEGIN2 P=2
; Выполнить область N50 до N80 два раза.
N150 M100
Программирование ЧПУ
488
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
Расширенное программирование
4.1 Гибкое программирование ЧПУ
Программный код
Комментарий
N160 REPEAT BEGIN1 P=2
; Выполнить область N20 до N80 два раза.
N170 Z10
N180 X0 Y0
N190 M30
Пример 5: Фрезерная обработка, обработка позиции сверления с помощью
различных технологий
Программный код
Комментарий
N10 ZENTRIERBOHRER()
; Установить центровое сверло.
N20 POS_1:
; Позиции сверления 1
N30 X1 Y1
N40 X2
N50 Y2
N60 X3 Y3
N70 ENDLABEL:
N80 POS_2:
; Позиции сверления 2
N90 X10 Y5
N100 X9 Y-5
N110 X3 Y3
N120 ENDLABEL:
N130 BOHRER()
; Сменить сверло и цикл сверления.
N140 GEWINDE(6)
; Установить метчик M6 и цикл резьбы.
N150 REPEAT POS_1
; Повторить сегмент программы от POS_1 один раз до ENDLABEL.
N160 BOHRER()
; Сменить сверло и цикл сверления.
N170 GEWINDE(8)
; Установить метчик M8 и цикл резьбы.
N180 REPEAT POS_2
; Повторить сегмент программы от POS_2 один раз до ENDLABEL.
N190 M30
Дополнительная информация
Вложенность
Возможен вложенный вызов повторения блока программы. Каждый вызов занимает
один уровень подпрограммы.
M17 / RET
Если при обработке повторения блока программы программируется M17 или RET, то
повторение блока программы отменяется. Программа продолжается на следующем за
строкой REPEAT кадре.
Индикация программы
На актуальной индикации программы повторение блока программы отображается как
отдельный уровень подпрограммы.
Программирование ЧПУ
Руководство по программированию, 07/2021, 6FC5398-2EP40-0PA2
489
содержание .. 5 6 7 8 ..
|
||
|
|
|