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