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

    Show / Hide Table of Contents

    Файлы CLData (оператор CLDFile)

    CLData проекта CAM разбита на файлы — по одному на технологическую операцию, плюс файлы подпрограмм УП и файл уровня проекта. Постпроцессор может обратиться к любой команде любого файла (не только текущего), чтобы заглянуть вперёд, собрать списки инструментов и т. д. В sppx это делается оператором CLDFile; в .NET — списком ICLDProject.CLDFiles объектов ICLDFile.

    Доступ из sppx

    Оператор CldFile предназначен для получения доступа к данным файлов CLData из кода постпроцессора. Он предоставляет информацию только для чтения, то есть может находиться только справа от оператора присваивания. Синтаксис:

    • CldFile.FileCount — возвращает число загруженных файлов CLData;
    • CldFile.CurrentFile — индекс текущего файла CLData (файлы CLData индексируются начиная с номера 0);
    • CldFile.FirstEnabledFile — индекс первого файла CLD (операции), включённого в списке на вкладке CLData;
    • CldFile.LastEnabledFile — индекс последнего файла CLD (операции), включённого в списке на вкладке CLData;
    • CldFile.CurrentCmd — индекс текущей команды CLData в текущем файле CLData (индексы 1-based);
    • CldFile[<FileIndex>].Enabled — возвращает 1, когда файл номер FileIndex включён, 0 — файл отключён;
    • CldFile[<FileIndex>].FileType — возвращает тип файла CLData: 0 — технологическая операция, 1 — подпрограмма УП, 2 — настройки проекта CAM;
    • CldFile[<FileIndex>].IsNCSub — возвращает 1, когда файл является файлом подпрограммы УП, 0 — когда файл не является подпрограммой УП;
    • CldFile[<FileIndex>].CmdCount — число команд в файле CLData номер FileIndex;
    • CldFile[<FileIndex>].Cmd[<CmdIndex>] — возвращает ссылку на команду CLData с номером CmdIndex в файле с индексом FileIndex. После этой команды через точку допустимо указать любую из инструкций, определённых для оператора Cmd. Например: CldFile[<FileIndex>].Cmd[<CmdIndex>].Code — код команды CLData с номером CmdIndex;
    • CldFile[<FileIndex>].Cmd[<CmdIndex>].Data — возвращает строковые данные команды CLData с номером CmdIndex (например, строку комментария). Если команда не содержит строковых данных, возвращает её строковое представление.
    • CldFile[<FileIndex>].Cmd[<CmdIndex>].Data[<CldIndex>] — значение элемента массива CLD с номером CldIndex.
    • CldFile[<FileIndex>].Cmd[<CmdIndex>].Name — имя команды CLData или параметра команды CLData;
    • CldFile[<FileIndex>].Cmd[<CmdIndex>].Str |.Int |.Flt |.Ptr — значение параметра команды по его имени в соответствующей форме; подробнее см. раздел Именованные параметры CLData

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

    sub PrintAllTools
      i: Integer
      j: Integer
      for i = 0 to CLDFile.FileCount-1 do begin
        if (CldFile[i].Enabled>0) and (CldFile[i].IsNCSub=0) then begin
          for j = 1 to CldFile[i].CmdCount do begin
            ! Если данная команда — "LoadTl"
            if CldFile[i].Cmd[j].Code = CodeOfCmd("LoadTl") then begin
              ! Печать идентификатора револьверной головки
              Print "RevolverID = " + CldFile[i].Cmd[j].Str["RevolverID"]
              ! Печать номера инструмента
              Print "Tool number = ", CldFile[i].Cmd[j].Data[1]
              ! Печать комментария инструмента
              if CldFile[i].Cmd[j+1].Code = CodeOfCmd("Comment") then
                Print "Tool comment: " + CldFile[i].Cmd[j+1].Data
            end
          end
        end
      end
    subend
    

    Доступ из .NET

    Список файлов достигается из объекта проекта как CLDProject.CLDFiles (ICLDFileList); текущий файл доступен напрямую как CurrentFile. Каждый элемент — это ICLDFile. Обратите внимание, что индекс команды в файле в .NET 0-based ([0..CmdCount-1]), тогда как индекс команды CLDFile[f].Cmd[c] в sppx 1-based.

    ICLDFileList:

    sppx .NET Описание
    CldFile.FileCount CLDProject.CLDFiles.FileCount число загруженных файлов
    CldFile[f] CLDProject.CLDFiles[f] файл с индексом f
    CldFile.CurrentFile CurrentFile обрабатываемый файл

    ICLDFile:

    sppx .NET Описание
    CldFile[f].CmdCount file.CmdCount число команд в файле
    CldFile[f].Cmd[c] file.Cmd[c] / file[c] команда с индексом c (0-based)
    CldFile[f].Cmd[c].Code file.GetCommandType(c) тип команды с индексом c (CLDCmdType)
    CldFile[f].Enabled file.Enabled обрабатывается ли файл
    CldFile[f].FileType file.FileType тип файла (CLDFileType.TechOperation / NCSub / CAMProject)
    CldFile[f].IsNCSub file.FileType == CLDFileType.NCSub является ли файл подпрограммой УП
    - file.Caption / file.ID краткое описание / уникальный идентификатор файла
    - file.Index индекс файла в проекте
    - file.Project проект, которому принадлежит файл
    - file.IndexOfCmd(type, from, to) индекс первой команды типа в диапазоне (-1, если нет)
    - file.IndexOfCmdName(name, from, to) то же, по имени типа
    - file.FindCommand(type, from[, to]) первая команда типа в диапазоне (null, если нет)

    Тот же обход «печать всех инструментов» в .NET:

    foreach... // по CLDProject.CLDFiles
    for (int f = 0; f < CLDProject.CLDFiles.FileCount; f++) {
        ICLDFile file = CLDProject.CLDFiles[f];
        if (!file.Enabled || file.FileType == CLDFileType.NCSub)
            continue;
        for (int c = 0; c < file.CmdCount; c++) {
            ICLDCommand command = file.Cmd[c];
            if (command.CmdType == CLDCmdType.LoadTl) {
                nc.OutWithN("RevolverID = " + command.Str["RevolverID"]);
                nc.OutWithN("Tool number = " + command.CLD[1]);
                ICLDCommand next = file.Cmd[c + 1];
                if (next != null && next.CmdType == CLDCmdType.Comment)
                    nc.OutWithN("Tool comment: " + next.CLDataS);
            }
        }
    }
    

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

    • Именованные параметры CLData
    • Текущая команда (оператор Cmd)
    • Просмотр команд CLData
    • Информация о проекте (оператор Project)
    • Функции и операторы доступа к CLData
    In this article