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

    Show / Hide Table of Contents

    PPFUN - Постпроцессорная функция

    Отображение команды

    Как команда отображается в списке команд CLData:

    PPFUN PPFUN(500)|STARTSUB(50)|ENDSUB(51)|CALLSUB(52)|REPSTART(53)|REPEND(54)|JUMP(55)|
          TECHINFO(58)|ENDTECHINFO(59)|WEDMConditions(56)|WEDMPassItem(57) {, a} {, b} ...
    

    Постпроцессорная функция PPFUN — это многоцелевая команда генератора постпроцессоров. Команда PPFUN может использоваться для представления различных видов данных и параметров обработки. Фактический тип команды PPFUN определяется первым параметром массива CLData — CLD[1] (CLD.SubCode). Остальные параметры массива CLD (CLD[2] – CLD[257]) могут иметь различный смысл в зависимости от типа команды PPFUN.

    Доступ из sppx

    Обработчик: program PPFun

    Массив cld читается по индексу или по имени — в sppx по типизированному короткому имени (например, cld.X), в .NET по тому же имени в виде строкового ключа (например, cld["X"]).

    Параметр Массив CLD Имя CLD Описание
    PPFUN(500)
    STARTSUB(50)
    ENDSUB(51)
    CALLSUB(52)
    REPSTART(53)
    REPEND(54)
    JUMP(55)
    TECHINFO(58)
    WEDMConditions(56)
    WEDMPassItem(57)
    CLD[1] CLD.SubCode Тип постпроцессорной функции
    a, b, c, d... CLD[2] – CLD[257] Список необязательных параметров. Структура списка параметров определяется конкретной постпроцессорной функцией

    Список типов постпроцессорных функций включает:

    • PPFUN PPFUN(500) - команда контроля стойкости инструмента
    • PPFUN STARTSUB(50) - команда начала подпрограммы УП
    • PPFUN ENDSUB(51) - команда конца подпрограммы УП
    • PPFUN CALLSUB(52) - команда вызова подпрограммы УП
    • PPFUN TECHINFO(58) - команда задаёт технологические параметры операции
    • PPFUN ENDTECHINFO(59) - конец технологической информации операции
    • PPFUN WEDMConditions(56) - команда задаёт условия электроэрозионной обработки
    • Свойства прохода проволочной электроэрозионной обработки PPFun WEDMPassItem(57)

    Пример (из постпроцессора Fanuc (30i)_Mill):

    program PPFun
      case CLD.SubCode of
        50: begin ! StartSub
          OutBlock;
          Output ""
          Output "%"
          ProgNum = MainProgramID + CLD[2]; ProgNum@ = MaxReal
          if CLData$<>"" then
            Output OutStr$ + " (" + UPCASE(CLData$) + ")"
          OutBlock
          Interp_ = MaxReal; Interp_@ = Interp_
          Feed_ = MaxReal; Feed_@ = Feed_
        end
        51: begin ! EndSub
          OutBlock
          MSub = 99; MSub@ = MaxReal
          OutBlock
          Output "%"
        end
        52: begin ! CallSub
          OutBlock
          MSub = 98; MSub@ = MaxReal
          P = MainProgramID + CLD[2]; P@ = MaxReal
          OutBlock
        end
        58: begin ! TechInfo
          case cld[60] of
            1: OperationIsLathe = 0 !– фрезерование,
            2: OperationIsLathe = 1 !– точение,
            else OperationIsLathe = 3 ! прочее
          end
          CSOnCount = 0
          NeedKorDl = 0
          WasLoadTool = 0
          KorDl = 0; KorDl@ = KorDl
          H = cld[31]; H@ = H
          Zcycle = 0; Zcycle@ = Zcycle
          ZClear = 0; ZClear@ = ZClear
          QStep = 0; QStep@ = QStep
          !MC = 9; MC@ = Mc;
          Interp_ = MaxReal; Interp_@ = Interp_
          FEED_ = MaxReal; FEED_@ = FEED_
        end;
        59: begin ! EndTechInfo
          if Cmd.Int["PPFun(EndTechInfo).Enabled"]>0 then begin
            if CLDFile.CurrentFile <> CLDFile.FileCount - 1 then begin
              Output "M1"
            end
            Output " "
          end
          call CheckSwitchOffLocalCS
        end
      end
    end
    

    Доступ из .NET

    Помимо базового OnPPFun, каркас вызывает обработчики, специфичные для подкодов:

    public override void OnPPFun(ICLDPPFunCommand cmd, CLDArray cld)                                    // базовый
    public override void OnStartTechOperation(ICLDTechOperation op, ICLDPPFunCommand cmd, CLDArray cld) // TECHINFO(58)
    public override void OnFinishTechOperation(ICLDTechOperation op, ICLDPPFunCommand cmd, CLDArray cld)// ENDTECHINFO(59)
    public override void OnStartNCSub(ICLDSub sub, ICLDPPFunCommand cmd, CLDArray cld)                  // STARTSUB(50)
    public override void OnFinishNCSub(ICLDSub sub, ICLDPPFunCommand cmd, CLDArray cld)                 // ENDSUB(51)
    public override void OnCallNCSub(ICLDSub sub, ICLDPPFunCommand cmd, CLDArray cld)                   // CALLSUB(52)
    

    Наследование: ICLDPPFunCommand : ICLDCommand.

    Читайте параметры из строго типизированного объекта cmd (рекомендуется); также доступны «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные помощники cmd["..."]. В таблице перечислены члены команды, включая унаследованные от её базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в разделе Модель доступа к CLData.

    Свойство Тип Описание
    cmd.SubCode int Числовой код подтипа PPFUN. Стандартные подтипы перечислены выше, но код может иметь любое произвольное значение, заданное разработчиком постпроцессора.
    cmd.TechInfo IPPFunTechInfo Для TECHINFO(58)/ENDTECHINFO(59) — дополнительная информация об операции.

    IPPFunTechInfo предоставляет Enabled (истина, если операция использует инструмент, отличный от предыдущего), SetupStage (Index, Name), Tool (Number, ConnectorIndex, RevolverID), Workpiece (ConnectorID) и Part (Index, Number, Name).

    Пример — OnPPFun (из постпроцессора AgieCharmilles_WireEDM_DN):

    public override void OnPPFun(ICLDPPFunCommand cmd, CLDArray cld)
    {
        switch (cmd.SubCode)
        {
            case 58: // TechInfo
                nc.WriteLine("(Rapid level       = " + Str((double)cld[9]) + ")");
                nc.WriteLine("(Upper guide level = " + Str((double)cld[47]) + ")");
                nc.WriteLine("(Upper work level  = " + Str((double)cld[10]) + ")");
                nc.WriteLine("(Lower work level  = " + Str((double)cld[11]) + ")");
                nc.WriteLine("(Lower guide level = " + Str((double)cld[48]) + ")");
                nc.WriteLine("(Wire diameter     = " + Str((double)cld[27]) + ")");
                break;
    
            case 56: // WEDMConditions
                nc.H.Show(cld[4]); // код коррекции
                nc.HValue.Show(cld[5]); // значение коррекции
                nc.Block.Out();
                break;
    
            case 50: // STARTSUB
                nc.BlockN.Show(nc.ProgN + cld[2]);
                nc.Block.Out();
                break;
    
            case 51: // ENDSUB
                if (wireInserted)
                {
                    BreakWire();
                }
                nc.MSub.Show(99);
                nc.Block.Out();
                nc.WriteLine();
                break;
    
            case 52: // CALLSUB
                nc.MSub.Show(98);
                nc.SubN.Show(nc.ProgN + cld[2]);
                nc.Block.Out();
                // холостой вызов подпрограммы
                // TODO: NCSub.Output(cld[2], 0)
                break;
        }
    }
    

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

    • Модель доступа к CLData
    In this article