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();
}