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

Раздел 1

Pro/NC-GPOST Базовая информация

1-1
6. Введение в Factory Interface Language (FIL)

6.1. FIL Общая информация

FIL может использоваться для следующих задач:

 Альтернативный вывод команд в УП


 Добавление или модификация словарных слов
 Чтение и запись во внешние ASCII файлы (до 2-х файлов)
 Вызов других приложений

Эти задачи решаются путем написания файла фильтров под именем UNCL01.Fnn (для
токарных) и UNCX01.Fnn (для фрезерных, пробивных, эррозии), где nn номер станка или
файла параметров.

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


FIL – полноценное
добавление к
G-Post. Это
высоко

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


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

1-2
В FILе существуют:
 Переменные
 Метки
 Операторы
 Функции
 Функции работы со строками
 Логические операторы
 Макроопределения
 CL команды
 Файловый ввод/вывод
 Специальные функции постпроцессора (POSTF)

6.2. Синтаксис файла FIL


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

Синтаксис FIL процедуры:

CIMFIL / ON, major_word или CIMFIL / ON, type [ , subtype ]





CIMFIL / OFF

A major_word (главное слово) любая команда CL файла. Однако, major word может быть
определен как type (тип) CL записи или class (класс) (например. 2 для post записи, 3 для
движения по дуге, 5 для прямолинейного движения, 14 для команды FINI, и т.д.), и
опционально subtype (подтип). Если подтип опущен, процедура будет выполнена
только на тип записи.

Команда CIMFIL/OFF завершает процедуру и возвращает контроль GPost для


продолжения постпроцессирования CL файла.

Нет ограничения на количество процедур в FIL файле, кроме как на уникальность


процедур. Другими словами, не может быть двух процедур на одну и туже CL команду.

Перед чтением первой CL записи, FIL выполняет синтаксическую проверку программы.


Если обнаруживаются ошибки, CL файл постпроцессируется, но УП может содержать
множество непредвиденных результатов. Очень рекомендуется просматривать файл
отчета (LIST file) на возможные ошибки.

После синтаксической проверки, FIL выполняет все команды и операторы,


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

1-3
Следующий пример иллюстрирует это:

PRINT/ON $$ Оператор вне области процедур


FIRST=0 $$ выполняется единожды.
RESERV/A,10 $$ Декларация массива
Глобальная
область M1=MACRO $$ Создание макроса
.....
TERMAC

CIMFIL/ON,COOLNT $$ Начало FIL процедуры


Область $$
процедур $$ Эта процедура используется для игнорирования
$$ всех команд COOLNT в CL файле
$$
CIMFIL/OFF $$ Конец FIL процедуры

FIL постпроцессор считывает первые 72 символа в строке, любые данные


расположенные после 72 игнорируются.

Команда SYN (синоним) позволяет создавать новые FIL слова.

Формат:

SYN / новое слово, старое слово, новое слово, старое слово, …

Например:

SYN / CM, CIMFIL, MC, MACRO

6.3. Переменные

6.3.1. Основная информация

Язык FIL поддерживает следующие типы переменных:

 Real numbers (Вещественные числа) (12.1, 4, 0.1234, 1234)


 Strings (Строки) (‘PROGRAM NUMBER’, ‘1.000 END MILL’)
 Geometric symbols (Геометрические символы) (POINT - точка,
VECTOR - вектор)

Имена переменных состоят максимум из 6 букв и цифр, как минимум один должен
быть буквой. Например:

TOOLNM=TEXT/’1/4” BALL END MILL’


NTOOL=12
V1=VECTOR/0,0,1
P1=POINT/1,2,3

1-4
6.3.2. Определение строк

Оператор TEXT присваивает строку переменной. Переменная, оперделенная как


строка может быть использована в любых строковых данных, таких как PARTNO,
PPRINT и INSERT или других операторах TEXT. TEXT может быть задана как
одиночная строка или как последовательность из нескольких строк:

symbol=TEXT/строка
symbol=TEXT/строка_1, строка_2, ---, строка_n

Строка может быть задана тремя путями:

 Как литерная строка заключенная в апострофы.


 Как присвоение строковой переменной.
 Как вещественное число, преобразованное в строку.

Например:

T1=TEXT/’CHANGE TOOL’
T2=TEXT/’CHANGE ’,’TOOL’
T3=TEXT/T2,’ 12’

Модификатор REPEAT вызовет повторение символов n раз:

REPEAT, n, ‘characters’

Например, разместить 30 пробелов перед строкой:

T1=TEXT/REPEAT,30,’ ’,’START SPINDLE’

6.3.3. Определение массивов

Оператор RESERV инициализирует переменную как массив. Этот оператор может


быть расположен только в глобальной области FIL файла.

Формат оператора RESERV:

RESERV / имя переменной, размер массива, имя переменной, размер массива, ~

Например:

RESERV/TOOLID,30, TOOLNM,30
TOOLID(1)=1
TOOLNM(1)=TEXT/’1/2 BALL END MILL’

6.3.4. Модификация переменных

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


оператор REDEF.

1-5
REDEF / ON-OFF разрешает или запрещает изменение значений переменным.

6.3.5. Геометрические определения

Геометрические определения используются для создания CL точек и векторовв FIL


для использования постпроцессором. Формат:

имя переменной = POINT / x, y, z


имя переменной = VECTOR / x, y, z

Например:

P1=POINT/1,2,3
V1=VECTOR/0,1,0
RAPID
GOTO/P1,V1

6.3.6. CANON определения

В дополнение к обычным геометрическим определениям, существуют CANON


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

Тип / символ, CANON, элементы

В этом формате, тип определяет формат переменной - POINT или VECTOR.

Символ определяет имя переменной заданной предварительно.

Примеры:

P1=POINT/6,4,8
P2=POINT/P1, CANON,7 $$(P2 = 7, 4, 8)
P3=POINT/P1, CANON,,9 $$(P3 = 6, 9, 8)
P4=POINT/P1, CANON,,,3 $$(P4 = 6, 4, 3)

6.3.7. DATA оператор

Оператор DATA позволяет вводить данные различного типа в одном операторе.

Формат оператора DATA:

symbol = DATA / entry 1, entry 2,--, entry n

Минимальное число entries один; максимальное 82.

Каждый entry должен быть вещественным числом, словарным словом или


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

Примеры:

1-6
D1 = DATA / 9, 10, 11 $$ каноническая форма 9, 10, 11
D2 = DATA / 15, IPM $$ каноническая форма 15, IPM
D3 = DATA / D1, 20, 21 $$ каноническая форма 9, 10, 11,
$$ 20, 21

Извлечь данные из DATA можно с использованием OBTAIN или CANF.

Заданные значения в операторе DATA:

D1 = DATA / 1.5, 3.75, 2.5, 5, 6.2,10

Оператор OBTAIN присваивает переменным значения содержимого DATA:

OBTAIN, DATA / D1, A, B, C, D, E, F


(A=1.5, B=3.75, C=2.5, D=5, E=6.2, F=10)

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


точек. Примеры:
D1= DATA/1, 2, 3
P1=POINT/D1
эквивалентно
P1= POINT/1, 2, 3

SD= DATA/200, RPM, CLW


SPINDL/SD
эквивалентно
SPINDL/200, RPM, CLW

FD=DATA/.1, IPR
FEDRAT/FD
эквивалентно
FEDRAT/.1, IPR

RESERV / D, 4
D(1)=DATA/500,SFM
D(2)=DATA/CLW
D(3)=DATA/RANGE,2
D(4)=DATA/MAXRPM,3000

SPINDL/D(1, THRU, 4)
эквивалентно
SPINDL/500,SFM,CLW,RANGE,2,MAXRPM,3000

Вы можете выбрать некий диапазон значений из DATA:

RANGE, m, n

m номер первого элемента, n номер последнего.

Пример:

D1 = DATA/1, 5, 6.5, 10, IPM, 300


FEDRAT/D1, RANGE,4,5
эквивалентно

1-7
FEDRAT/10, IPM

SPINDL/D1, RANGE, 6,6


эквивалентно
SPINDL/300

6.3.8. OBTAIN оператор

Оператор OBTAIN может быть использован для извлечения значений из


канонической формы:

OBTAIN, type/canon symbol, scalar symbols

Type слово, определяющее тип - POINT, VECTOR или DATA.

Canon symbol переменная из которой извлекают значение.

Scalar symbols переменные, которым присваиваются значения.

Символы и элементы соответствуют их позициям, символ в первой позиции


назначается первому элементу и т.д.

Примеры:

P1 = POINT/3, 8, 5
OBTAIN, POINT/P1, A, B, C $$ (A=3, B=8, C=5)
OBTAIN, POINT/P1, A $$ (A=3)
OBTAIN, POINT/P1, A,, $$ (A=3)
OBTAIN, POINT/P1,,B $$ (B=8)
OBTAIN, POINT/P1,,B,C $$ (B=8, C=5)
OBTAIN, POINT/Pl,,,C $$ (C=5)

6.4. Labels (Метки)


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

Пример:

S1) GOTO/1,1,0
A) FEDRAT/01,IPM
456) B = 10 / 2 * (3+4)

1-8
6.5. Операторы

Следующие операторы поддерживаются:

 Присвоения: Symbol=Number
 Арифметические операторы: + - / * ** ( )
 Логические операторы: .AND. .OR. .GT. .GE. .LT. .LE. .EQ. .NE. .NOT.
 $$ комментарий, показывает конец оператора, стоящий до 72 символа. For example:
COOLNT/ON $$ Перехват охлаждения
 $ продолжение на следующей строке

6.6. Функции
Язык FIL имеет несколько встроенных функций:

Функция Описание Пример


ABSF(n) Абсолютное значение A=-30
B=ABSF(A) $$ B=30
ANGLF(point1,point2) Угол между двумя A=POINT/0,0,0
точками B=POINT/1,1,0
C=ANGLF(A,B) $$ C=45
ANGLF(vector) Угол вектора A = VECTOR/ 1 , 1 , 0
B = ANGLF(A) $$ (B = 45)

ATANF(tangent) Арктангенс A=1


B=ATANF(A) $$ B=45
ATAN2F(y,x) Арктангенс по двум A=ATANF(0,1) $$ A=0
аргументам A=ATANF(1,-1) $$ A=135
CANF(string,1) Длина строки T1=TEXT/’HELLO
N=CANF(T1,1) $$N=5
CANF(symbol,n) Возвращает n-й элемент P1=POINT/13,24,35
X1=CANF(P1,1) $$ X1=13
CMPRF(string1,string2) Сравнение двух строк TA=TEXT/’AB’
(0:не равны, 1:равны) TB=TEXT/’CD’
C=CMPRF(TA,TB) $$C=0
COSF(angle) Косинус (градусы) A=-30
B=COSF(A) $$ B=.86603
DISTF(point1,point2) Дистанция между двумя P1=POINT/1,4,0
точками P2=POINT/5,7,0
D1=DISTF(P1,P2) $$D1=5
DOTF(vector1,vector2) Скалярное произведение A=VECTOR/2,3,0
двух векторов B=VECTOR/4,1,0
D=DOTF(A,B) $$D=11
EXPF(real) Экспонента A=EXP(.69315) $$A=2
ICHARF(string) Код символа T=TEXT/’A’
(ASCII значение) V=ICHARF(T) $$V=65
ICODEF(word) Целое значение слова T=ICODEF(CLW) $$T=60
INDXF(string1,string2) Позиция подстроки T1=TEXT/’ABCD’
T2=TEXT/’C’
P=INDXF(T1,T2) $$P=3
INTF(real) Целое A=INTF(2.9999) $$A=2

1-9
A=INTF(-7.999) $$A=-7
LNTHF(vector) Длина вектора V1=VECTOR/3,0,0
A=LNTHF(V1) $$ A=3
LOGF(real) Натуральный логарифм A=LOGF(2) $$A=.69315
MAXF(real1, real2, …) Наибольшее значение A=4.7
B=-5.6
C=MAXF(A,B) $$C=4.7
MINF(real1,real2, …) Наименьшее значение A=2.3
B=-1
C=MINF(A,B) $$C=-1
MODF(real1,real2) Остаток A=123.45
B=MODF(A,10) $$B=3.45
SCALF(string1) Преобразование строки в TA=TEXT/’12.4’
число V=SCALF(TA)+1 $$V=13.4
SIGNF(real1,real2) Применение знака A=123.4
первого числа ко второму B=-12
C=SIGNF(A,B) $$C=-123.4
SINF(angle) Синус (градусы) A=30
B=SINF(30) $$ B=.5
SPWNF(string) Вызов внешней
программы
SQRTF(real) Квадратный корень A=100
B=SQRTF(A) $$B=10
TANF(angle) Тангенс (градусы) A=45
B=TANF(A) $$B=1

6.7. Строковые функции

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


манипуляции со строками.

6.7.1. Поиск и замена:

Функция MODIFY выполняет замену одной строки на другую. Синтаксис:

tl = TEXT/MODIFY,t2,t3,t4,n1

tl: Новая строка


t2: Старая строка
t3: Искомая строка
t4: Заменяемая строка
nl: Количество замен (используйте 0 для замены во всей строке)

Пример:

T2=TEXT/’N001G01X5C-4’
TA=TEXT/’C’
TB=TEXT/’B’
T1=TEXT/MODIFY,T2,TA,TB,0 $$ Замена C на B в строке T2

1-10
6.7.2. Удаление пробелов

Функция OMIT удаляет пробелы:

t1 = TEXT/OMIT,t2,n1

t1: Новая строка


t2: Старая строка
n1: Режим удаления

n1: = 1 удалить справа


n1: = 2 удалить слева
n1: = 3 удалить все

Пример удаления пробелов справа.

TA = TEXT/’ABCDE bbbbbbb ’
TB = TEXT/OMIT,TA,1 $$ TB will be 'ABCDE'

6.7.3. Извлечение подстроки

Модификатор RANGE извлекает подстроку:

t1 = TEXT/RANGE,t2,n1,n2

t1: Новая строка


t2: Старая строка
n1: Начальная позиция в t2
n2: Конечная позиция t2

Пример:

TA = TEXT/'ABCDEFGHIJK'
TB = TEXT/RANGE,TA,3,5 $$ TB = 'CDE'

6.7.4. Непечатные символы

Модификатор CONVS добавляет непечатные символы в строку:

T1 = TEXT/CONVS,n

n код ASCII.

Пример.

T1 = TEXT/’ABC’,CONVS,4 $$ EOT используемый Maho

1-11
6.7.5. Модификаторы преобразования строки (Форматирование текста)

Модификаторы строк CONVI, CONVF и CONVE используются для преобразования


числа в строку.

a) CONVI: Преобразует в целое

CONVI,scalar, n

CONVI преобразует scalar в строку длиной n символов. Число преобразуется в


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

Примеры:

A = 23
B = -7
C = 125.9

Определение Созданная строка

T1=TEXT/CONVI,A,2 23
T2=TEXT/CONVI,A,3 b23
T3=TEXT/CONVI,A,4 bb23
T4=TEXT/CONVI,B,3 b-7
T5=TEXT/CONVI,B,2 -7
T6=TEXT/CONVI,C,4 b125
T7=TEXT/CONVI,C,3 125
T8=TEXT/CONVI,C,2 **

b) CONVF: Преобразование в строку с плавающей точкой

 CONVF, scalar, n, d

CONVF округляет число до d знаков после запятой и преобразует в строку длиной n


символов. Значение в строке смещается вправо. If the scalar is negative, a minus sign
precedes the numeric characters. Для отрицательных чисел сохраняется знак минус, а
в положительных не сохраняется. Если строка длиннее n символов, строка
заполняется слева пробелами. Если требуется строка более n символов (включая
минус), n звездочек создается как ошибка.

Примеры:

A = 12.3456
B = -7.654321

TEXT definition Generated string

T1=TEXT/CONVF,A,7,4 12.3456
T2=TEXT/CONVF,A,8,4 b12.3456
T3=TEXT/CONVF,A,8,3 bb12.346
T4=TEXT/CONVF,A,10,5 bb12.34560
T5=TEXT/CONVF,B,9,6 -7.645321

1-12
T6=TEXT/CONVF,B,10,4 -7.6453
bbb
T7=TEXT/CONVF,B,6,4 ******

CONVF, scalar,n,d,sign option, decimal option,zero option

Расширенный формат CONVF позволяет контролировать появление знака,


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

Значения опций:

sign option =0 Выводить минус для отрицательных чисел,


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

decimal option =0 Выводить точку.


=1 Не выводить точку.

zero option = 0 Преобразовать нули слева в пробелы.


= 1 Подавить нули.
= 2 Подавить нули справа.
= 3 Подавить нули слева и сдвинуть строку влево.
= 4 Подавить все нули и сдвинуть сроку влево.

Примеры:

A = 12.3
T1 = TEXT/CONVF,A, 8, 4, 0, 0, ZOP

Пример предобразования при различных значениях ZOP:

ZOP Строка

0 b12.3000 Пробелы слева.


1 012.3000 Не подавлять нули.
2 012.3 Подавить нули справа.
3 12.3000Подавить нули слева и сместить строку влево.
4 12.3 Подавить все нули и сдвинуть строку влево.

c) CONVE: преобразование в экспоненциальную форму

CONVE, scalar, n, d

Строка содержит минус для отрицательного числа и не содержит плюс для


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

Строка будет прижата к правому краю. Место слева заполнят пробелы. Если
длина строки более n символов, будет выведено n звездочек. Число символов
должно быть от 5 и больше чем d включая знак, десятичную точку, знак
экспоненты и значение экспоненты.

Примеры:

1-13
A = .01236
B = -.01236
C = .1236
D = 1.236
E = 12360.4

TEXT definition Строка

T1=TEXT/CONVE, A, 12, 6 bb.123600-01


T2=TEXT/CONVE, B, 12, 6 b-.123600-01
T3=TEXT/CONVE, C, 11, 4 bbb.1236+00
T4=TEXT/CONVE, D, 11, 4 bbb.1236+01
T5=TEXT/CONVE, E, 11, 6 b.123604+05

6.7.6. Текущие дата и время

Модификатор TIMES.

Пример:

T1 = TEXT/TIMES

T1 содержит строку: 07/24/00 15:04:38

6.7.7. Имя CL файла

Модификатор PART преобразует имя CL файла в строку.

Пример:

Предположим, что имя обрабатываемого файла test.ncl.1 расположенного в


директории D:\proe_work\mfg\cldata. Переменная TPN определяется как:

TPN=TEXT/PART

Содержимое переменной: D:\proe_work\mfg\cldata\test.ncl.1

1-14
6.8. Логические операторы

6.8.1. Арифметический оператор IF

Формат:

IF (real) label1, label2, label3

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


label1, label2 или label3 если число отрицательное, ноль или положительное
соответственно. Пример:

IF (A) ST1, ST2, ST3



ST1)

ST2)

ST3)

6.8.2. Логический IF

IF (логическое выражение) оператор

IF (логическое выражение) оператор 1, ELSE, оператор 2

6.8.3. Логический IF-THEN-ELSE

IF (логическое выражение) THEN


операторы
ELSE
операторы
ENDIF

6.8.4. Логические выражения

Операторы соотношений:

.LT. <
.LE. <=
.EQ. =
.NE. != (не равно)
.GE. >=
.GT. >
.AND. и
.OR. или
.NOT. не

1-15
Примеры:

IF(X.GT.0.AND..NOT.(Y.GT.0.AND.Y.LE.10)) THEN
SPINDL/100,RPM
COOLNT/ON
ELSE
SPINDL/5600,SFM
COOLNT/ON
ENDIF

IF(A.GE.1)FEDRAT/10, ELSE, FEDRAT/20

IF(A.LT.B)JUMPTO/S10

6.8.5. Оператор CASE

Оператор CASE позволяет выполнять различные операторы в зависимости от


значения переменной (вещественное или строка). Похож на оператор IF, но более
гибкий.

CASE/переменная
WHEN/значение
операторы

WHEN/значение,THRU,значение
операторы

WHEN/OTHERS
операторы

ENDCAS

THRU – указывает на диапазон


OTHERS - прочее

6.8.6. DO Loops (Цикл)

Оператор DO loop предусматривает механизм повторения серии операторов.


Формат:
DO / метка, do_переменная=начальное_значение,
конечное_значение, [приращение]


метка)

Пример:

DO/S1, Y=1.5, 7.5, 2


DO/S1, X=2.5, 8.5, 1.5
GOTO/X, Y, 0
GODLTA/0, 0, -1
S1) GODLTA/0, 0, 1

1-16
Возможно использовать оператор JUMPTO для выхода из цикла. Когда это
произойдет, переменная DO сохранит значение, которое было привыходе из
цикла.

6.8.7. CONTIN Оператор

CONTIN (продолжить) не производит никаких действий FIL. Он используется для


использования совместно с меткой для корректного завершения цикла DO.
Пример:

RESERV/P,50
DO/S1,N=1,50,1
P(N) = POINT/(N*.5),0,0
S1)

DO/S2,N=1,50,1
T=CANF(P(N),1) $$ T = X VALUE OF POINT
IF(T.GT.10)THEN
JUMPTO/S3
ELSE
GOTO/P(N)
ENDIF
S2) CONTIN
S3) CONTIN

6.8.8. JUMPTO Оператор

Оператор JUMPTO испоьзуется для безусловного перехода в программе. Формат:

JUMPTO / метка

Пример:

IF( F-10 ) S1, S1, S2


S1) SPINDL/200
JUMPTO/S3
S2) SPINDL/250
S3)

Множественный оператор JUMPTO для перехода на метку в зависимости от


значения переменной. Формат:

JUMPTO / число, метка 1, метка 2, ---, метка n

Пример:

M=MACRO/N
JUMPTO/N, S1, S3, S8, S9

S1) -
-
S3) -
-
S8) -

1-17
-
S9) -
-
TERMAC

CALL/M, N=1 $$ JUMPTO S1
CALL/M,N=3 $$ JUMPTO S8
CALL/M,N=5 $$ ОШИБКА - НЕТ 5-Й МЕТКИ

6.8.9. TIMLIM оператор (Только для x86 платформ)

TIMLIM/t может быть использован для выявления и прерывания бесконечных циклов


в FIL. Значение t задается в минутах. Если значение t меньше одного, время на
циклы не ограничивается.

1-18
6.10. CL Команды

Язык FIL так же поддерживает команды постпроцессора.

Примеры:

RAPID
GOTO / P1 $$ P1 точка
FROM / 0,0,0
GOTO / 1,1,1
GODLTA/1,1,1
GODLTA/V3 $$ V3 вектор
GOTO / 1,2,ZVAL $$ ZVAL вещественное число
FEDRAT / FED * 1.5 $$ FED вещественное число
LOADTL/TOOL1,OSETNO,TL1+1 $$ TL1 вещественное число

Некоторые специальные команды так же доступны:

6.10.1. PPWORD команды

PPWORD позволяет добавлять слова в FIL.

PPWORD / word, IC

где word слово постпроцессора, а IC целое число.

6.10.2.PRINT команда

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

PRINT / ON-OFF

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


значению и канонической форме, когда она создается.

PRINT / OFF выключает предыдущую PRINT / ОN

6.10.3.Команда POSTN

Эта команда предоставляет для вставки или вывода выбранных переменных в файл.

POSTN / IN-OUT, a1, v1, a2, v2 ....., an, vn... [NEXT]

где:

a1-an необходимые адреса, которые должно содержать от 1 до 26 букв, от А до Z.

v1-vn требуемые значения для вывода с a1- an.

NEXT - выведет эти коды со следующим блоком.

1-19
Если некоторые данные уже есть для вывода, то POSTN будет комбинировать коды с
существующим блоком и OUT опция очистит текущий блок и начнет новый блок для POSTN.

6.10.4. The REPEAT Command

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

REPEAT / a1, a2, V [ON-OFF]

где:
a1: 1-26 значения от А до Z. Это регистры, которые используются, чтобы вывести дополнительные
регистры и значения вместе с ними.

a2: 1-26 дополнительные регистры для вывода.

V: значение, которое будет выводиться с а2.

ON: указывает, что а2 и V будут выводиться каждый раз, когда выводится а1. По умолчанию
условие, что а2 и V будут выводиться только один раз с a1.

OFF: останавливает выход а2 и V с a1.

REPEAT / a1,a2,a3,....,a25, t1, v1, ALL

Эта команда похожа на выше указанный REPEAT, за исключением того, что любой
адреса a1, a2, a3 ..., a25 может заставить вывести адрес t1 со значением v1. Эта команда не имеет
ON-OFF и используется для вывода дополнительных адресов и значений, когда конкретные адреса
выводятся.

a1, a2, a3, ..., a25: 1-26 регистры А до Z. Эти адреса используются в качестве меток для
принудительного вывода дополнительных регистров t1 и значений v1.

t1: 1-26 представляет дополнительные регистры для вывода.

v1: значение, которое будет выводиться с t1.

ALL: указывает, что любой адрес a1, a2, a3, ..., a25 заставит выход t1 и v1.

REPEAT/a1, v1

Эта команда будет выводить адреса a1 со значением v1 на каждом блоке пока не встретит
REPEAT / OFF.

a1: 1-26 (AZ), дополнительные регистры для вывода.

v1: значение, которое будет выводиться с a1.

REPEAT/OFF

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

Например, для вывода M8 со следующим Z: REPEAT / 26, 18, 8

1-20
6.10.5. The REPLAC Command

Заменяя собой команду FIL, которая позволяет пользователям редактировать / изменять кадры
выводящиеся постпроцессором.

Replac/ T1, T2, [N1, N2]

t1 = Строка которая должна быть изменена


t2 = строка которой заменить
N1 = количество раз замены в текущем кадре
N2 = количество кадров для замены
Если n1 = 0 или не указан, заменить все в текущем кадре
Если n 2 = 0 или не указан, заменить все во всех кадрах

Например, чтобы изменить все 360 0

$ $ Заменить все 360 на 0


T1 = TEXT / "A360.0"
Т2 = TEXT / "A0.0"
REPLAC/T1, T2

REPLAC / t1, t2, t3 [ , n1, n2 ]

t1 = строка которая должна быть изменена


t2 = строка которой заменить
t3 = знак, который будет использоваться
n1 = будет установлен в 1 шаблон вариант
n2 = количество кадров для замены

Например, чтобы изменить + или - 360 на 0:

$ $ ИЗМЕНЕНИЕ + или - 360 на 0


T1 = TEXT / 'А* 360,0 '
Т2 = TEXT / 'A0'
Т3 = TEXT / '*'
REPLAC/T1, T2, T3

Специальные варианты для Т1 и Т2 :

если (t1 = TEXT /' ничего'), t2 будет добавлена к началу блока


если (t1 = TEXT / ' * '), t2 будет добавлена в конец блока
если (t2 = TEXT / 'TO_PASTE_BUF'), текст будет сохранен.
если (t2 = TEXT / 'FROM_PASTE_BUF '), последний сохраненный текст будет вставлен.

Пример: Переключить c XY на YZ:

REPLAC/(TEXT/'X*'),(TEXT/'YTO_PASTE_BUF'),(TEXT/'*')
REPLAC/(TEXT/'Y*'),TEXT/'Y*XFROM_PASTE_BUF'),(TEXT/'*')

Если (t1 = TEXT / "anytext * '), которая заканчивается символом, то число после этого регистра
будет целевой текст.

Пример: Добавить к A C0B0.

T1 = TEXT / 'A*'

1-21
Т3 = TEXT / '*'
REPLAC/T1 (TEXT / 'C0B0A * '), Т3

REPLAC / t1, OFF

Выключение ранее указанной замены.

REPLAC / OFF

Выключит все замены.

Примечания:

REPLAC command является командой FIL, а не сообщение / CLfile команды.


Заменяемые строки должны быть текстовыми переменными.
REPLAC command может быть внутри или снаружи CIMFIL / ON-OFF пары.
REPLAC command применяются в определенном порядке.
Для звездочки REPLAC command, не может содержать подстановочные знаки.
REPLAC command выполняются последней и непосредственно перед выходом в УП.
Заменяемый кадр не может превышать 128 символов.
REPLAC command могут изменять только кадры, а не LST файл.
До 1000 заменяемых команд могут быть активны одновременно.
REPLAC/ OFF будет очищать и перезапускать таблицы замены.
Если стоит PRINT / ON, то таблица замен печатается в целях отладки.

Ниже приведены несколько примеров REPLAC command. REPLAC/ OFF не требуется несколько
изменений, он используется только для проверки различных вариантов в одном файле FIL.

PRINT/ON
REDEF/ON

$$ CHANGE D TO L
REPLAC/OFF
T1=TEXT/'D'
T2=TEXT/'L'
REPLAC/T1,T2

$$ ADD 0 TO ALL X VALUES


REPLAC/OFF
REPLAC/(TEXT/'X*'),(TEXT/'X*0'),(TEXT/'*')

$$ CHANGE C- TO C
REPLAC/OFF
REPLAC/(TEXT/'C-'),(TEXT/'C')

$$ CHANGE N-SEQ TO NOTHING


REPLAC/OFF
T1=TEXT/'N'
T2=TEXT/''
REPLAC/T1,T2,1

$$ CHANGE N-SEQ TO O-BLOCK IN THE 1ST TAPE BLOCK


T1=TEXT/'N'
REPLAC/OFF
T2=TEXT/'O'

1-22
REPLAC/T1,T2,1,1

$$ ADD / IN FRONT OF EACH BLOCK


REPLAC/OFF
T1=TEXT/''
T2=TEXT/'/'
REPLAC/T1,T2

$$ ADD / TO END OF EACH BLOCK


REPLAC/OFF
T1=TEXT/'*'
T2=TEXT/'*/'
REPLAC/T1,T2,(TEXT/'*')

$$ SWITCH XY TO YZ
REPLAC/OFF
REPLAC/(TEXT/'X*'),(TEXT/'YTO_PASTE_BUF'),(TEXT/'*')
REPLAC/(TEXT/'Y*'),TEXT/'Y*XFROM_PASTE_BUF'),(TEXT/'*')

6.10.6. The ALIAS Command

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

ALIAS /% nam1, nam2

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

Примечания:

nam1 должны начинаться с%


nam2 не может содержать%
nam1 и nam2 будет автоматически в верхнем регистре
nam2 должен быть действительным команда FIL
nam1 не может превышать 60 символов
nam2 не может превышать 512 символов (используйте CALL / MACRO)
$ nam2 будет продолжаться на следующей строке
$$ nam2 закончится на текущей строке
не допускаются пробелы в команде ALIAS
запятая должна использоваться для разделения nam1 и nam2
PRINT/ON,ALIAS, он же псевдонимом команды выведет перевод во время выполнения, после
отладки.

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

Определить псевдоним команды:

ALIAS/%Rotabl_Begin,cimfil/on,ROTABL
ALIAS/%Process_CL_Record,dmy=postf(13)
ALIAS/%Save_CL_Record,dmy=postf(20)
ALIAS/%Restore_Saved_CL_Record,dmy=postf(21)
ALIAS/%G,7
ALIAS/%Output,POSTN/OUT,

1-23
ALIAS/%End,cimfil/off

Use alias commands:

%Rotabl_Begin
%Save_CL_Record
%Output,%G,90
%Restore_Saved_CL_Record
%Process_CL_Record
%End

Same as:

CIMFIL/ON,ROTABL
DMY=POSTF(20)
POSTN/OUT,7,90
DMY=POSTF(21)
DMY=POSTF(13)
CIMFIL/OFF

6.11. The FILEF command

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

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


файлов: вспомогательный файл и перебором (см. POSTF (25, п)).

6.11.1. Команда FILEF

FILEF действует на внешние файлы.

rslt = FILEF (fn, ор, t1)

rslt: Результат работы

= 0 Требуемое действие выполнено - OK


= 1 Запрошенный файл операция не удалась - ошибка

fn: номер файла, который будет использоваться (0, 1, 2, 3 или 4). Если fn = 0, выход на терминал.

op: Операция будет выполнена

= 1 Записать строку в файл.


= 2 Открыть существующий файл, имя файла t1; fn должна быть 1 или 2.
= 3 Откройте новый файл, имя файла в t1; fn должна быть 1 или 2.
= 4 Перемотка файла; t1 не требуется; fn должна быть 1 или 2.
= 5 Закрыть файл, t1 не требуется; fn должна быть 1 или 2.
= 6 Закройте и удалите файл, t1 не требуется; fn должна быть 1 или 2.
= 7 Спросите, если файл существует; rslt будет установлен в 1, если файл уже существует,
в противном случае rslt будет установлен в fn, п должно быть 1 или 2.

1-24
Примеры:

Чтобы открыть существующий файл:

FN = TEXT / ‘TEST.PPR’ $$Имя файла


FEX = FILEF(1,7,FN) $$Проверка существует ли файл

IF(FEX .EQ. 1)THEN


DMY = FILEF(1,2,FN) $$ОТКРЫТЬ существующий файл FN как
логическое устройство

ELSE
FOPEN = FILEF(1,3,FN) $$Если файл не существует, создайте новый файл с
именем FN как логический _______ENDIF

Для открытия нового файла:

FN = TEXT / ‘TEST.PPR’ $$Имя файла


FEX = FILEF(1,7,FN) $$Проверка существует ли файл

IF(FEX .EQ. 1)THEN


DMY = FILEF(1,2,FN) $$ОТКРЫТЬ существующий файл FN как
логическое устройство

DMY = FILEF(1,6) $$ ЗАКРЫТЬ И УДАЛИТЬ логическое устройство


(FILE FN)

ENDIF
FOPEN = POSTF(1,3,FN) $$создайте новый файл с именем FN как
логический

Чтобы закрыть и сохранить открытый файл:

IF(FOPEN .EQ. 0)THEN $$ FOPEN это переменная, устанавливается во время


открытия файла.
DMY = FILEF(1,5) $$ Закрыть и сохранить
ENDIF

Чтобы закрыть и удалить открытый файл:

IF(FOPEN .EQ. 0)THEN $$ FOPEN это переменная, устанавливается во время


открытия файла.
DMY = FILEF(1,6) $$ Закрыть и удалить
ENDIF

Чтобы написать текст строки открытого файла:

IF(FOPEN .EQ. 0)THEN $$ FOPEN это переменная, устанавливается во время


открытия файла
T1=TEXT/’THIS IS A TEXT’
DMY=FILEF(1,1,T1) $$Записать строку T1
ENDIF

1-25
Чтобы создать текстовую строку на терминал:
T1=TEXT/’ENTER TOOL NUMBER -> ’ $$ Текстовая строка
MY=FILEF(0,1,T1) $$ Записать строку и вывести на терминал

6.11.2. Чтение из внешнего файла

t1 = ТЕКСТ / READ, fn

t1: переменная, содержащая текстовую строку читают


fn: 0,1 или 2 (регистрационный номер открыт с предыдущей функцией FILEF)

READ опция читает следующую запись из файла. Если READ достигает конца файла, t1
содержит ' ERROR $ EOF' текстовой строки для указания конца файла.

Если fn = 0, то вход читать с терминала

6.11.3. Чтение из вспомогательного файла для печати

TEXT/READ,PRINT читает следующую запись из вспомогательных файлов на


печать.Вспомогательный файл печати создается с помощью POSTF (25, п) команды. Если
READ,PRINT достигает конца файла, t1 содержит ' ERROR $ EOF' текстовой строки для указания
конца файла.

t1 = TEXT/READ,PRINT

t1: переменная, содержащая текстовую строку

6.11.4. Чтение из вспомогательного файла PUNCH

TEXT/READ,PUNCH читает следующую запись из вспомогательного


файла.Вспомогательный файл создается с помощью POSTF (25, п) команды. Если
READ,PUNCH достигает конца файла, t1 содержит 'ERROR $ EOF' в текстовой строке для
указания конца файла.

t1 = TEXT / READ, PUNCH

t1: переменная, содержащая текстовую строку

6.12. POSTF команды (Функции постпроцессора)

Первичное использование POSTF - получение доступа к внутренним переменным


постпроцессора. Синтаксис:

rslt = POSTF( function_type, arg1, arg2, arg3, argn )

rslt результат функции. Для команд POSTF использующие текстовые функции rslt будет
строка.

function_type номер функции. Число аргументов зависит от типа функции.

1-26
Function type Syntax & description RSLT Arguments
Post 01 POSTF(01,a1,a2) Значение a1 = тип (1=int, 2=rel, 3=dbl)
Common (Извлечь переменную) a2 = положение
02 POSTF(02,a1,a2,a3) 0 a1 = тип (1=int, 2=rel, 3=dbl )
(Задать переменную) a2 = положение
a3 = значение
03 POSTF(03,a1,a2) 0 a1 = тип (1=int, 2=rel, 3=dbl)
(Очистить переменную) a2 = положение
04 POSTF(04,a1,a2) 0=не a1 = тип (1=int, 2=rel, 3=dbl)
(Проверка на ноль) пустая a2 = положение
1=пустая
19 POSTF(19)
(Вывод кадра)
22 POSTF(22) Номер
(Номер станка) станка
23 POSTF(23,a1,a2,a3) 0 a1 = тип (1=int, 2=rel, 3=dbl)
(переместить значение a2 = новое положение
переменной) a3 = существующее положение
25 POSTF(25,a1) 0 a1 = флаг вывода
(Перенаправление вывода) 0=УП
1=Вспомогательный файл
2=Перемотать вспом.файл
Get CL Info 05 POSTF(05) число слов
(число слов в CL записи)
06 POSTF(06,a1) 0= mnr wrd a1 = положение
(Тип слова в CL записи ) 1= scalar
2= text
07 POSTF(07,a1) значение a1 = положение
(извлечь слово из CL
записи)
08 TEXT/CLW текстовая
(Извлечь текстовое строка 66
значение из CL записи) знаков
Load CL 09 POSTF(9,a1,a2) 0 a1 = положение
Info (Загрузка minor word) a2 = слово
10 POSTF(10,a1,a2) 0 a1 = положение
(Загрузка значения) a2 = число
12 POSTF(12,a1) 0 a1 = число слов
(Задать число слов в CL
записи)
13 POSTF(13) 0
(Обработать CL запись)
20 POSTF(20) 0
(Сохранить CL запись)
21 POSTF(21) 0
(Восстановить CL запись)
CL File 14 POSTF(14,a1) 0=OK a1 = возвращает целое число
(Считать следующую CL 1=Ошибка
запись)
15 POSTF(15,a1) 0=OK a1 = номер CL записи
(Задать позицию в CL 1=Ошибка
файле)
30 rslt = POSTF(30,arg1,arg2) 0=OK
rslt=POSTF(30,arg,arg2,arg3) 1=Ошибка
(Считать следующую CL
запись)
26 POSTF(26,a1,a2,a3) 0 a1 = тип CL записи
(Управляет CIMFIL/ON) a2 = подтип CL записи
a3 = 0 Отключено
a3 = 1 Включено

1-27
Debug 24 POSTF(24,a1) 0 a1 = 0 Выключить трассировку
(Трассировка вкл./выкл.) a1 = 1 Включить трассировку

Функция POSTF(30) читает следующую CL запись из CL файла. Заменяет комбинацию


POSTF(14) и POSTF(15)

rslt = POSTF(30,arg1,arg2) (короткая форма)

arg1: тип записи (например, 1031 для SPINDL)


arg2: 0 = позиционирование в CL файле на оригинальную CL запись.
1 = оставить указатель в CL файле около новой CL записи. GPost будет
читать и обрабатывать запись.
2 = оставить указатель в CL файле около следующей CL записи
GPost пропустит и не обработает эту запись.

rslt: 0 = ОК
1 = Ошибка

Примечание: для arg1 вы можете использовать целое число (1031 для SPINDL) или
функцию ICODEF(SPINDL).

rslt = POSTF(30,arg1,arg2,arg3) (длинный формат)

arg1: тип CL записи (например, 2 для команд поста).


arg2: подтип CL записи (например 1031 для SPINDL).
arg3: 0 = позиционирование в CL файле на оригинальную CL запись.
1 = оставить указатель в CL файле около новой CL записи. GPost будет
читать и обрабатывать запись.
2 = оставить указатель в CL файле около следующей CL записи
GPost пропустит и не обработает эту запись.

rslt: 0 = ОК
1 = Ошибка

Примечание: для arg2 вы можете использовать целое число (1031 для SPINDL) или
функцию ICODEF(SPINDL).

Пример:

Пример CL файла:

PARTNO TEST
MACHIN/UNCX01,1
SPINDL/10
FEDRAT/10
LOADTL/1
COOLNT/ON
RAPID
GOTO/10,10,10
CYCLE/DRILL,1,10,IPM,.1
GOTO/2,2,2
GOTO/1,1,1
CYCLE/OFF
RAPID

1-28
GOTO/10,10,10
FINI

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


SPINDL.

CIMFIL/ON,SPINDL
DMY=POSTF(13) $$ PROCESS SPINDL RECORD
WRD=ICODEF(LOADTL)
FLG=POSTF(30,WRD,0) $$ LOAD THE CL WITH LOADTL RECD
IF(FLG .EQ. 0) THEN $$ FOUND LOADTL OK
TLN=POSTF(7,4) $$ GET TOOL NUMBER
PPRINT/'NEXT TOOL NEEDED =',TLN
ENDIF
CIMFIL/OFF

Указатель на CL запись установлен после SPINDL arg3=0.

2. Если частота вращения больше 1000, прервать работу.

CIMFIL/ON,SPINDL
SPD=POSTF(7,4) $$ GET SPEED
IF(SPD .GT. 1000) THEN
PPRINT/'YOU ARE GOING TOO FAST!, STOP'
FLG=POSTF(30,14,0,1) $$ FIND FINI
ENDIF
CIMFIL/OFF

Мы хотим, чтобы FINI была следующей записью CL FLG=POSTF(30,(ICODEF(FINI)),1).

3. Найти команду после LOADTL/cmd и обработать ее.

CIMFIL/ON,SPINDL
DMY=POSTF(13) $$ PROCESS SPINDL RECORD
WRD=ICODEF(LOADTL)
FLG=POSTF(30,WRD,2) $$ LOAD THE CL WITH LOADTL RECD
IF(FLG .EQ. 0) THEN $$ FOUND LOADTL OK
TLN=POSTF(7,4) $$ GET TOOL NUMBER
PPRINT/'SKIP TO CMD AFTER NEXT TOOL =',TLN
ENDIF
CIMFIL/OFF

Указатель в CL файле установлен на команде после LOADTL arg3=2. GPost обработает


COOLNT/ON как следующую команду.

_MCDWT Macro
1-29
Определение:

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


записью в выходной файл. Есть два типа выходных файлов, LST файл и MCD.

Чтобы включить _MCDWT макрос, INTCOM(1920) должен быть установлен на 2.


Это может быть установлено в Option File Generator на вкладке "General" в "Start /
End Program" панели или он может быть установлен непосредственно в файле FIL с
помощью команды: RSLT=POSTF(2,1,1920,2) для включения и
RSLT=POSTF(2,1,1920,0) для отключения. После установки, _MCDWT макрос
должен находиться где-то в файле FIL, и будет вызыаться всякий раз, когда G-
POST готова вывести блок выходных файлов.

Реализация:
Эти две текстовых команды, T1=TEXT/LAST,3(.LST Block) и
T2=TEXT/LAST,4(MCD Block) которые используются, чтобы получить
содержимое выходного блока. См. раздел этого руководства для более подробной
информации.

t1=TEXT/LAST,3

t1:Текстовая строка для текущего вывода LIST файлов

Опция LAST,3 считывает текущий выходной буфер для LST файлов. Это строка, которая
была бы написана в LIST файл, если _MCDWT макрос не был вызван FIL.

t1=TEXT/LAST,4

t1:Текстовая строка для текущего вывода MCD файлов

Опция LAST,4 считывает текущий выходной буфер для MCD файлов. Это строка,
которая была бы написана в MCD файл, если _MCDWT макрос не был вызван FIL.

Макрос должен быть определен в пределах текущего файла FIL.

1-30

Оценить