Просмотр команд CLData
Помимо текущей команды, постпроцессор может обращаться к другим командам файла — прочитать код текущей или следующей команды, заглянуть вперёд в поисках команды заданного типа или обойти весь файл. sppx предлагает для этого набор специальных функций; .NET делает то же самое через навигационные члены ICLDCommand и объект CLDFile. Коды/типы команд — связующая нить: sppx определяет тип команды числовым кодом (получаемым из имени функцией CodeOfCmd), .NET — перечислением CLDCmdType.
Доступ из sppx
Функция CurCode
Функция CurCode возвращает код текущей команды CLData. Каждая команда CLData имеет уникальный числовой идентификатор — код. Коды команд CLData перечислены в описании технологических команд. Пример функции внутри обработчика команды CIRCLE ниже.
program Circle
Print CurCode
end
В результате выполнения программы в окно отладки выводится число 15000.
Код следующей команды CLData можно получить функцией NextCode. Для получения кода произвольной команды по её текстовому имени следует использовать функцию CodeOfCmd.
Функция NextCode
Функция NextCode возвращает код технологической команды, расположенной непосредственно после текущей команды. Каждая команда CLData имеет уникальный числовой идентификатор — код. Коды команд CLData перечислены в описании технологических команд. Код текущей команды CLData можно получить функцией CurCode. Для получения кода произвольной команды по её текстовому имени следует использовать функцию CodeOfCmd.
if NextCode=CodeOfCmd("Fini") then
Output "M02"
Функция CodeOfCmd
CodeOfCmd(CommandName: String) возвращает код команды CLData, имя которой передано параметром. Каждая команда CLData имеет уникальный числовой идентификатор — код. Коды команд CLData перечислены в описании технологических команд. Функция имеет следующий формат.
CodeOfCmd(CommandName: String): Integer
CommandName — текстовое имя команды. Оно должно быть одним из имён команд, которые видны в списке CLData в левой части главного окна. Возвращаемое значение можно использовать с операторами вроде CurCode, NextCode, GetCLD, CLDFile[i].Cmd[j].Code (см. оператор CLDFile).
if NextCode=CodeOfCmd("Fini") then
Output "M02"
Функция CLDCounter
Функция CLDCounter возвращает номер текущей технологической команды в файле списка технологических команд. Для гибкого доступа к произвольной команде CLData по её индексу в файле можно использовать оператор CLDFile.
Функция GetCLD
Оператор GetCLD используется для просмотра команд CLData в порядке их следования в файле. Просмотр возможен только в прямом направлении. Синтаксис:
{CldCode =} GetCLD(i: Integer; a: Array of Real)
Здесь:
CldCode — GetCLD необязательно возвращает код полученной команды CLData.
i — относительный индекс запрашиваемой команды CLData:
- 0 — текущая команда,
- 1 — следующая команда,
- 2 — вторая команда от текущей и так далее.
a — динамический массив вещественных чисел, который получит данные полученной команды CLData. Он должен быть определён до вызова оператора.
Например, пусть список команд CLDATA следующий и пусть текущая команда — номер 9:
5: CUTCOM ON(71),LENGTH(9) 2,X 0,Y 0,Z 0,N 0,K 0,M 0,LEFT(8)
6: RAPID N 10000
7: GOTO.abs X 134.533,Y 99.684,Z 80
8: RAPID N 10000
9: GOTO.abs X 134.533,Y 99.684,Z 74.400
10: FEDRAT N 50,K 4,MMPM(315)
11: GOTO.abs X 134.533,Y 99.684,Z 73.400
12: FEDRAT N 200,K 0,MMPM(315)
13: PLANE XY(33)
Программа технологической команды GOTO.abs следующая:
program AbsMov
a: Array of Real ! Массив должен быть объявлен заранее
c: Integer ! В эту переменную будет записан код операции
c = GetCld(1, a) ! Получение данных следующей команды
if c = CodeOfCmd("FEDRAT") then
! Вывод значения первого элемента массива CLD
Print "FEDRAT.CLD[1]=", Str(a[1]) ! следующей команды
end
Результатом выполнения программы будет:
FEDRAT.CLD[1]=50.
Для доступа к параметрам произвольной технологической команды можно также использовать оператор CLDFile.
Функция GetCLDStr
GetCLDStr возвращает строковое представление текущей команды CLData с её параметрами, аналогичное тому, что показано в окне текстового представления CLData.
Например, внутри обработчика команды AbsMov функция может вернуть строку вроде следующей.
GOTO.abs X 134.533, Y 99.684, Z 80
Функция FindCld
Функция FindCld используется для поиска команды с именем CmdName в текущем файле CLData. Параметр StartIndex задаёт первую просматриваемую команду. StartIndex отсчитывается от первой команды в текущем файле CLData. Если параметр StartIndex опущен, оператор просматривает команды начиная с команды, непосредственно следующей за текущей. Возвращаемое значение — индекс найденной команды. Если команда не найдена, оператор возвращает -1. Параметр Data должен быть объявленным массивом вещественных чисел. Data получит значения из массива CLData найденной команды. Синтаксис:
N = FindCld({<StartIndex>, }<CmdName>, <Data>)
Например, пусть дана следующая CLDATA и пусть номер текущей команды равен 0.
0: PARTNO "Bottle"
1: PPFUN …..
2: COMMENT "Roughing Waterline"
3: LOADTL N 2,X 0,Y 0,Z 0,D 8….
4: SPINDL ON(71),NO 397.887,K 0,MODE RPM(0)
5: CUTCOM ON(71),LENGTH(9) 2,X 0,Y 0,Z 0,N 0,K 0,M 0,LEFT(8)
6: RAPID N 10000
7: GOTO.abs X 134.533,Y 99.684,Z 80
8: RAPID N 10000
Программа PartNo следующая:
program PartNo
V: Array of Real
NCircle: Integer
NGoto: Integer
NCircle = FindCld("CIRCLE", V)
NGoto = FindCld("GOTO.abs", V)
if NGoto > NCircle then
Print "The first movement is an arc"
else
Print "The first movement a cut"
End
В результате выполнения программы будет напечатано сообщение "The first movement a cut".
Для доступа к параметрам произвольной технологической команды можно также использовать оператор CLDFile.
Функция GFindCld
Функция GFindCld аналогична функции FindCLD, но она ищет команду с именем CmdName во всех файлах CLData. Параметр StartIndex задаёт первую просматриваемую команду. StartIndex отсчитывается от первой команды в первом файле CLData. Если параметр StartIndex опущен, оператор просматривает команды начиная с команды, непосредственно следующей за текущей. Возвращаемое значение — индекс найденной команды. Если команда не найдена, оператор возвращает -1. Параметр Data должен быть объявленным массивом вещественных чисел. Data получит значения из массива CLData найденной команды. Синтаксис:
N = GFindCld({<StartIndex>, }<CmdName>, <Data>)
Для доступа к параметрам произвольной технологической команды можно также использовать оператор CLDFile.
Доступ из .NET
В .NET нет функций просмотра из sppx; вместо этого каждая команда (ICLDCommand) знает своих соседей и может выполнять поиск от себя, а объект CLDFile ищет внутри файла. Типы команд задаются перечислением CLDCmdType, а не числовым кодом, полученным из имени.
| sppx | .NET | Описание |
|---|---|---|
CurCode |
cmd.CmdTypeCode / cmd.CmdType |
код типа / тип текущей команды |
CLDCounter |
cmd.Index |
индекс текущей команды в её файле |
CodeOfCmd("NAME") |
CLDCmdType.Name |
тип команды — именованное значение перечисления вместо искомого кода |
GetCLD(0, a) / GetCLD(1, a) |
cmd / cmd.Next |
текущая / следующая команда (cmd.Prev для предыдущей) |
| - | cmd.NextMotion / cmd.PrevMotion |
следующая / предыдущая команда перемещения |
NextCode |
cmd.Next?.CmdType |
тип следующей команды |
FindCld(name, data) |
cmd.FindNextCommand(type[, offset[, count]]) |
найти следующую команду типа в том же файле |
GFindCld(name, data) |
cmd.FindNextCommandOfProject(type[, ...]) |
найти следующую команду типа по всем файлам |
GetCLDStr |
cmd.CLDataS |
текстовое представление команды |
cmd.Next / Prev возвращают null за пределами файла; методы FindNext... возвращают null, когда ничего не найдено. Массив CLData найденной команды читается через её член CLD (см. Массив CLD), поэтому отдельный аргумент-массив для вывода не нужен.
// sppx: if NextCode = CodeOfCmd("Fini") then Output "M02"
if (cmd.Next != null && cmd.Next.CmdType == CLDCmdType.Fini)
nc.OutWithN("M02");
// sppx: NGoto = FindCld("GOTO.abs", V)
ICLDCommand goto = cmd.FindNextCommand(CLDCmdType.Goto);
if (goto != null) {
double firstParam = goto.CLD[1];
// ...
}
Чтобы обратиться к произвольной команде по индексу или обойти весь файл или проект, используйте объекты CLDFile / проект (FindCommand, IndexOfCmd).