WAIT - Ожидание точки синхронизации
Отображение команды
Как команда отображается в списке команд CLData:
WAIT ID(<SynchPointID>), Index(<SynchPointIndex>)
Команда WAIT используется для синхронизации нескольких параллельных потоков управления (нескольких управляющих программ, каждая из которых может управлять отдельным рабочим элементом станка). Для этой команды в управляющую программу следует добавлять кадры (метки), реализующие приостановку программы до достижения аналогичной метки в другой (параллельной) программе.
Доступ из sppx
Обработчик: program Wait
Параметры, доступные через оператор cmd
| TCLDSyncPoint: ComplexType | Команда ожидания точки синхронизации |
|---|---|
| SyncPointID: String | cmd.Str["SyncPointID"] - уникальный идентификатор точки синхронизации, заданный пользователем. |
| Index: Integer | cmd.Int["Index"] - порядковый номер точки синхронизации, автоматически формируемый системой. |
Если в проекте применяется операция «Токарного перехвата», которая должна быть синхронизирована с операцией «Токарной отрезки», то в командах меток ожидания параметр SyncPointID имеет свои строго определённые значения:
- Takeover1: метка ожидания с таким идентификатором выводится непосредственно после команд PPFUN TECHINFO (58) обеих операций. Оба канала ожидают взаимной синхронизации.
- Takeover2: с достижением метки ожидания с таким идентификатором операция «Токарного перехвата» перемещается к главному шпинделю и захватывает деталь в нём. Операция «Токарной отрезки» при этом находится в состоянии ожидания до достижения метки ожидания с идентификатором Takeover3.
- Takeover3: с достижением метки ожидания с таким идентификатором операция «Токарной отрезки» выполняет отрезку готовой детали из главного шпинделя. Операция «Токарного перехвата» в состоянии захвата отрезаемой детали ждёт окончания отрезки, то есть метки ожидания с идентификатором Takeover4.
- Takeover4: с достижением метки ожидания с таким идентификатором операция «Токарного перехвата» начинает отвод противошпинделя с захваченной отрезанной деталью. Операция «Токарной отрезки» ожидает, пока не будет выполнен отвод противошпинделя на расстояние подачи возврата, что обозначается меткой ожидания с идентификатором Takeover5.
- Takeover5: по достижении этой метки ожидания операция «Токарной отрезки» выполняет отвод инструмента (при необходимости), операция «Токарного перехвата» отводит противошпиндель в исходное положение.
| SyncPointID | Операция «Токарной отрезки» | Операция «Токарного перехвата» |
|---|---|---|
| Takeover1 | Ожидание взаимной синхронизации | Ожидание взаимной синхронизации |
| Takeover2 | Находится в состоянии ожидания до достижения метки Takeover3. | Перемещается к главному шпинделю и захватывает деталь в нём. |
| Takeover3 | Выполняет отрезку готовой детали из главного шпинделя. | В состоянии захвата отрезаемой детали ждёт окончания отрезки (метки Takeover4). |
| Takeover4 | Ожидает, пока не будет выполнен отвод противошпинделя на расстояние подачи возврата (метка Takeover5). | Начинает отвод противошпинделя с захваченной отрезанной деталью. |
| Takeover5 | Выполняет отвод инструмента (при необходимости). | Отводит противошпиндель в исходное положение. |
Пример (из постпроцессора PUMA MX series):
program Wait
Call OutBl
if NextCode= CodeOfCmd("PPFUN") then begin
output "M01";
NeedM1 =0;
end
i : integer;
i = Cmd.Int["Index"];
call AddWait(i);
end
Доступ из .NET
Обработчик:
public override void OnSyncWait(ICLDSyncWaitCommand cmd, CLDArray cld)
Наследование: ICLDSyncWaitCommand : ICLDCommand.
Читайте параметры из строго типизированного объекта cmd (рекомендуется); доступны также «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные обёртки cmd["..."]. В таблице перечислены члены команды, включая унаследованные от базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в разделе Модель доступа к CLData.
| Член | Тип | Описание |
|---|---|---|
cmd.PointIndex |
int |
Порядковый номер точки синхронизации, автоматически формируемый системой. |
cmd.PointID |
string |
Уникальный текстовый идентификатор точки синхронизации, заданный пользователем. |
Пример - OnSyncWait (из постпроцессора HanwhaSwissType):
public override void OnSyncWait(ICLDSyncWaitCommand cmd, CLDArray cld)
{
int PntN = 0;
if (NCFiles.OutputDisabled)
return;
if (cmd.PointID.Contains("SubAxial2"))
return; //Средняя метка в ожидании операции главного шпинделя.
if (SameText(cmd.PointID, "Takeover1")) return;
if (SameText(cmd.PointID, "Takeover2")) {
PntN = 2;
SynchPoints.OutPrev(cmd.PointIndex,1);
if (nc==nc1)
{
SyncSpindles(true);
}
} else if (SameText(cmd.PointID, "Takeover3")) {
PntN = 3;
if (activeChannel>0)
outClamp(false,true);
SynchPoints.OutPrev(cmd.PointIndex,1);
nc.WriteLine(GetSyncZCode(true));
} else if (SameText(cmd.PointID, "Takeover4")) {
PntN = 4;
SynchPoints.OutPrev(cmd.PointIndex,2);
nc.WriteLine(GetSyncZCode(false));
if (nc==nc1) {
SyncSpindles(false);
} else {
IncrementalMove=true;
}
SynchPoints.OutPrev(cmd.PointIndex,1);
if (nc==nc1) {
nc.WriteLine("S0");
} else {
nc.WriteLine("S40");
}
} else if (SameText(cmd.PointID, "Takeover5")) {
PntN = 5;
IncrementalMove=false;
}
SynchPoints.Add(cmd.PointIndex);
if (PntN==4)
OutDetectBrokenTool();
if ((nc==nc2) && (PntN==2)) {
outAirBlower(0);
outClamp(false, false);
}
if ((nc==nc2) && (PntN==5)) {
nc.WriteLine("M95");
nc.WriteLine("/M91");
nc.WriteLine("M96");
}
}