Разработка постпроцессоров
  • Разработка постпроцессоров
v20.0.1
Search Results for

    Show / Hide Table of Contents

    Просмотр команд 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).

    Сопутствующие ссылки

    • Текущая команда (оператор Cmd)
    • Файлы CLData (оператор CLDFile)
    • Функции и операторы доступа к CLData
    In this article