CIRCLE - Движение по окружности
Отображение команды
Как команда отображается в списке команд CLData:
CIRCLE XC xc, YC yc, ZC zc, R r, XE xe, YE ye, ZE ze
Команда CIRCLE осуществляет перемещение по дуге окружности. Параметры CIRCLE - это центр дуги, конечная точка дуги и радиус дуги. Знак радиуса определяет направление дуги. Если радиус положительный, дуга направлена против часовой стрелки (круговая интерполяция G03). Если радиус отрицательный, дуга направлена по часовой стрелке (круговая интерполяция G02). Плоскость дуги (G17/G18/G19) определяется текущей плоскостью обработки, заданной командой PLANE.
Доступ из sppx
Обработчик: program Circle
Массив cld читается по индексу или по имени - в sppx по типизированному короткому имени (например, cld.X), в .NET по тому же имени как строковому ключу (например, cld["X"]).
| Параметр | Массив CLD | Имя CLD | Описание |
|---|---|---|---|
| xc yc zc |
CLD[1] CLD[2] CLD[3] |
CLD.Xc CLD.Yc CLD.Zc |
Координаты X, Y и Z центра дуги. |
| r | CLD[4] | CLD.R | Радиус дуги. Если CLD.R > 0, дуга направлена против часовой стрелки (G03), если CLD.R < 0 - по часовой стрелке (G02). |
| xe ye ze |
CLD[5] CLD[6] CLD[7] |
CLD.Xe CLD.Ye CLD.Ze |
Координаты X, Y и Z конечной точки дуги. |
| xs ys zs |
CLD[8] CLD[9] CLD[10] |
CLD.Xs CLD.Ys CLD.Zs |
Координаты X, Y и Z начальной точки дуги |
| XcInc YcInc ZcInc |
CLD[11] CLD[12] CLD[13] |
CLD.XcInc CLD.YcInc CLD.ZcInc |
Координаты X, Y и Z центра дуги относительно начальной точки (I, J и K) |
| RAbs | CLD[14] | CLD.RAbs | Абсолютное значение радиуса дуги |
| RIso | CLD[15] | CLD.RIso | Радиус дуги в варианте ISO - положительный, если угол дуги меньше 180 градусов, и отрицательный в противном случае |
| Dir | CLD[16] | CLD.Dir | Направление дуги: 2 - по часовой стрелке, 3 - против часовой стрелки относительно плоскости ISO G17-G19 |
| Plane | CLD[17] | CLD.Plane | Плоскость дуги, может принимать 6 значений: 17, 18, 19, -17, -18, -19. Соответствует плоскостям ISO G17-G19. Отрицательное значение означает, что нормаль плоскости дуги обратна относительно стандартной плоскости ISO. |
| Length | CLD[18] | CLD.Length | Длина дуги в текущих линейных единицах |
| Ang | CLD[19] | CLD.Ang | Угол дуги в градусах (от 0 до 360 градусов) |
| SAng | CLD[20] | CLD.SAng | Начальный угол дуги относительно первой оси текущей плоскости |
| EAng | CLD[21] | CLD.EAng | Конечный угол дуги относительно первой оси текущей плоскости |
| HelixAng | CLD[22] | CLD.HelixAng | Угол наклона спирали в градусах. Ноль для плоской окружности, положительное значение для поднимающейся спирали, отрицательное - для опускающейся спирали. |
Пример (из постпроцессора Fanuc (30i)_Mill):
program Circle
RSign: Integer
if cld[4] > 0 then INTERP_ = 3 else INTERP_ = 2 ! G3/G2
X = cld[5] ! X,Y,Z в абсолютных значениях
Y = cld[6]
Z = cld[7]
if CirclesThroughRadius>0 then begin
call CheckCircleAngle(RSign)
Rc = RSign*abs(CLD.R); Rc@ = MaxReal
end else begin
XC_ = cld[1] - XT_ ! I,J,K всегда в приращениях
YC_ = cld[2] - YT_
ZC_ = cld[3] - ZT_
XC_@ = MaxReal; ZC_@ = MaxReal
if OperationIsLathe<>1 then
YC_@ = MaxReal
case Plane of
17: ZC_@ = ZC_;
18: YC_@ = YC_;
19: XC_@ = XC_;
end
end
case Plane of
17: begin
X@ = MaxReal;
Y@ = MaxReal
end
18: begin
X@ = MaxReal;
Z@ = MaxReal
end
19: begin
Y@ = MaxReal
Z@ = MaxReal
end
end
if IsRotaryInterpolation = 2 then begin
Y = -Y/CylR/Pi*180
end
OutBlock ! вывод кадра УП
XT_ = cld[5] ! сохранить текущие координаты
YT_ = cld[6]
ZT_ = cld[7]
end
Доступ из .NET
Обработчики (конкретный обработчик плюс скобки группы перемещений, которые срабатывают для любой команды движения):
public override void OnCircle(ICLDCircleCommand cmd, CLDArray cld)
public override void OnBeforeMovement(ICLDMotionCommand cmd, CLDArray cld) // перед любым перемещением
public override void OnAfterMovement(ICLDMotionCommand cmd, CLDArray cld) // после любого перемещения
Наследование: ICLDCircleCommand : ICLDMotionCommand : ICLDCommand.
Читайте параметры из строго типизированного объекта cmd (рекомендуется); также доступны «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные помощники cmd[...]. В таблице перечислены члены команды, включая унаследованные от базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в разделе Модель доступа к CLData.
| Свойство | Тип | Описание |
|---|---|---|
cmd.EP |
TInp3DPoint |
Конечная точка (X, Y, Z) перемещения. (унаследовано от ICLDMotionCommand) |
cmd.SP |
TInp3DPoint |
Начальная точка дуги (X, Y, Z). |
cmd.Center |
TInp3DPoint |
Центр дуги (X, Y, Z), абсолютное значение. |
cmd.IncCenter |
TInp3DPoint |
Центр дуги (I, J, K), приращение относительно начальной точки. |
cmd.R |
double | Радиус дуги; положительный для CCW (G03), отрицательный для CW (G02). |
cmd.RAbs |
double | Абсолютное значение радиуса дуги. |
cmd.RIso |
double | Радиус в стандарте ISO: положительный, если угол дуги < 180 градусов, отрицательный, если > 180 градусов. |
cmd.Dir |
int | Код направления ISO: 2 = по часовой стрелке (G2), 3 = против часовой стрелки (G3). |
cmd.Plane |
int | Плоскость дуги: 17, 18, 19, -17, -18, -19 (ISO G17-G19; отрицательное значение - обратная нормаль). |
cmd.Length |
double | Длина дуги в текущих линейных единицах. |
cmd.Ang |
double | Угол дуги в градусах (от 0 до 360). |
cmd.SAngcmd.EAng |
double | Начальный / конечный угол дуги относительно первой оси текущей плоскости. |
cmd.HelixAng |
double | Угол наклона спирали в градусах (0 - плоская окружность, >0 - подъём, <0 - спуск). |
Пример (из постпроцессора Fanuc 30i mill):
public override void OnCircle(ICLDCircleCommand cmd, CLDArray cld)
{
nc.GInterp.Show(cmd.Dir); // G02 / G03
nc.X.v = cmd.EP.X; nc.Y.v = cmd.EP.Y; nc.Z.v = cmd.EP.Z;
switch (Abs(cmd.Plane)) // центр дуги как приращение I, J, K
{
case 17:
nc.I.v = cmd.IncCenter.X; nc.J.v = cmd.IncCenter.Y;
nc.Block.Show(nc.X, nc.Y, nc.I, nc.J);
break;
case 18:
nc.I.v = cmd.IncCenter.X; nc.K.v = cmd.IncCenter.Z;
nc.Block.Show(nc.X, nc.Z, nc.I, nc.K);
break;
case 19:
nc.J.v = cmd.IncCenter.Y; nc.K.v = cmd.IncCenter.Z;
nc.Block.Show(nc.Y, nc.Z, nc.J, nc.K);
break;
}
}