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

    Show / Hide Table of Contents

    PPFUN CALLSUB(52) - Команда вызова подпрограммы УП

    Команда вызова подпрограммы УП PPFUN CALLSUB(52) используется, когда управляющая программа содержит несколько разных подпрограмм УП и в некоторый момент выполнения программы требуется передать управление другой подпрограмме. Для этого постпроцессор команды PPFUN CALLSUB(52) должен вызвать один из операторов вывода подпрограммы УП. При вызове этих операторов обрабатываются некоторые или все команды подпрограммы УП. В противном случае технологические команды подпрограмм УП игнорируются.

    Параметр CLD[2] содержит уникальный идентификатор подпрограммы УП.

    Доступ из sppx

    В sppx у PPFUN нет отдельного обработчика для каждого подкода. Все подкоды PPFUN обрабатываются в едином обработчике program PPFun с диспетчеризацией по cld[1] (CLD.SubCode); обработайте CALLSUB, добавив в него соответствующую ветку. Полный обработчик см. в разделе Постпроцессорная функция (PPFUN).

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

    program PPFun
      case cld[1] of
          52: begin ! CallSub
            OutBlock
            MSub = 98; MSub@ = MaxReal
            P = MainProgramID + CLD[2]; P@ = MaxReal
            OutBlock
          end
      end
    end
    

    Доступ из .NET

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

    public override void OnCallNCSub(ICLDSub sub, ICLDPPFunCommand cmd, CLDArray cld)
    

    Общая модель .NET (члены, индексация 1-based и 0-based) описана в разделе Постпроцессорная функция (PPFUN).

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

    public override void OnCallNCSub(ICLDSub cldSub, ICLDPPFunCommand cmd, CLDArray cld)
    {
        // 25 ;Top plane
        // 26 CALL LBL101
        cldSub.Tag = 100 + cldSub.SubCode;
        nc.OutText($"CALL LBL{cldSub.Tag}");
    
        // Сбросить состояние основных регистров, чтобы вывести их при первом присваивании. 
        nc.Block.Reset(nc.X, nc.Y, nc.Z, nc.Feed, nc.MoveType, nc.RCompens, nc.S, nc.MCoolant, nc.MSpindle);
    
        // Холостой прогон трансляции cldSub (с отключённой записью в nc-файл), чтобы заполнить регистры актуальным состоянием.
        NCFiles.DisableOutput();
        cldSub.Translate(false);
        NCFiles.EnableOutput();
    }
    

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

    • Постпроцессорная функция (PPFUN)
    • Модель доступа к CLData
    In this article