ORIGIN - Исходные координаты
Отображение команды
Как команда отображается в списке команд CLData:
ORIGIN X x, Y y, Z z, PPFUN f, N n, A a, B b, C c
Команда ORIGIN задаёт систему координат, в которой выводится последующий код управляющей программы.
Фактически у команды Origin есть два режима.
В первом режиме команда Origin используется для активации одной из предопределённых систем координат заготовки (G54-G59). Режим определяется параметром CLD[4] (CLD.PPFun), равным нулю. Номер активируемой системы координат задаётся параметром CLD[5] (CLD.N).
Во втором режиме команда Origin используется для определения преобразования системы координат заготовки (Sinumeric TRANS, ROT, Heidenhain CYCLE7, CYCLE19, PLANE SPATIAL|AXIAL, Fanuc G52, G68 и т. д.). Режим определяется параметром CLD[4] (CLD.PPFun), равным PPFun(1079). Преобразование задаётся смещением по осям XYZ (CLD[1], CLD[2], CLD[3]) и поворотом вокруг тех же осей (CLD[6], CLD[7], CLD[8]).
Доступ из sppx
Обработчик: program Origin
Массив cld читается по индексу или по имени - в sppx по типизированному короткому имени (например, cld.X), в .NET по тому же имени как строковому ключу (например, cld["X"]).
| Параметр | Массив CLD | Имя CLD | Описание |
|---|---|---|---|
| x y z |
CLD[1] CLD[2] CLD[3] |
CLD.X CLD.Y CLD.Z |
Смещения локальной системы вдоль осей X, Y и Z соответственно. |
| f | CLD[4] | CLD.PPFun | Режим определения системы координат: 0 - команда задаёт одну из стандартных систем; PPFun(1079) - преобразование локальной системы координат. |
| n | CLD[5] | CLD.N | Номер выбранной стандартной системы координат: 54 (G54), 55 (G55), 59 (G59) и так далее. |
| a b c |
CLD[6] CLD[7] CLD[8] |
CLD.A CLD.B CLD.C |
Углы поворота вокруг осей X, Y и Z соответственно. Порядок поворотов вокруг осей (нотация углов Эйлера) может различаться и определяется настройками схемы станка. |
Доступ по имени параметра (вспомогательные операторы)
Параметры, доступные через оператор cmd (одинаково в sppx и .NET):
| TCLDOrigin: ComplexType | Команда определения системы координат |
|---|---|
| OriginType: Integer | cmd.Int["OriginType"] - Тип команды определения системы координат: 0 (SelectStandardLCS) - команда выбора стандартной системы координат заготовки (G54-G59), 1 (TransformLCS) - команда преобразования локальной системы координат. |
| CSNumber: Integer | cmd.Int["CSNumber"] - Номер стандартной системы координат заготовки: 54 (G54), 55 (G55), 59 (G59) и так далее. |
| MCS: ComplexType | cmd.Ptr["MCS"] - Параметры новой системы координат |
| OriginPoint: ComplexType | cmd.Ptr["MCS.OriginPoint"] - Смещение исходной точки системы координат |
| X: Double | cmd.Flt["MCS.OriginPoint.X"] - смещение по X |
| Y: Double | cmd.Flt["MCS.OriginPoint.Y"] - смещение по Y |
| Z: Double | cmd.Flt["MCS.OriginPoint.Z"] - смещение по Z |
| RotAngles: ComplexType | cmd.Ptr["MCS.RotAngles"] - Углы поворота системы координат вдоль осей (в градусах). Порядок поворотов вокруг осей (нотация углов Эйлера) может различаться и определяется настройками схемы станка. |
| A: Double | cmd.Flt["MCS.RotAngles.A"] - угол поворота вокруг оси X |
| B: Double | cmd.Flt["MCS.RotAngles.B"] - угол поворота вокруг оси Y |
| C: Double | cmd.Flt["MCS.RotAngles.C"] - угол поворота вокруг оси Z |
| WCS: ComplexType | cmd.Ptr["WCS"] - Параметры новой системы координат. Параметры, задающие преобразование новой системы координат относительно подвижной системы координат заготовки. Включает геометрические (пространственные) координаты. |
| OriginPoint: ComplexType | cmd.Ptr["WCS.OriginPoint"] - Смещение начала системы координат |
| X: Double | cmd.Flt["WCS.OriginPoint.X"] - смещение по X |
| Y: Double | cmd.Flt["WCS.OriginPoint.Y"] - смещение по Y |
| Z: Double | cmd.Flt["WCS.OriginPoint.Z"] - смещение по Z |
| RotAngles: ComplexType | cmd.Ptr["WCS.RotAngles"] - Углы поворота системы координат вдоль осей (в градусах). Порядок поворотов вокруг осей (нотация углов Эйлера) может различаться и определяется настройками схемы станка. |
| A: Double | cmd.Flt["WCS.RotAngles.A"] - угол поворота вокруг оси X |
| B: Double | cmd.Flt["WCS.RotAngles.B"] - угол поворота вокруг оси Y |
| C: Double | cmd.Flt["WCS.RotAngles.C"] - угол поворота вокруг оси Z |
| Axes: Array, Key="AxisID" | cmd.Ptr["Axes"] - Массив записей "Axes". Задаёт положения реальных (станочных) осей, соответствующих определяемой системе координат. Команда Origin может содержать положения для нескольких осей. |
| Axis: ComplexType | cmd.Ptr["Axes"].Item[Index] или cmd.Ptr["Axes(AxisName)"] - Элемент массива Axes. Содержит положение одной оси станка. Доступ к элементу массива возможен по индексу или по ключевому полю. Здесь AxisName - значение ключевого поля, которое должно совпадать со значением поля AxisID. |
| AxisID: String | cmd.Str["Axes(AxisName).AxisID"] - Идентификатор оси станка, для которой задано положение. Описывается в схеме станка. |
| Value: Double | cmd.Flt["Axes(AxisName).Value"] - Положение оси. |
| IsSpatial: Integer | cmd.Int["IsSpatial"] - параметр, определяющий, что имеет приоритет - геометрические координаты (A,B,C) или оси станка. Возможны два значения: 0 - приоритет имеют оси станка, заданные массивом Axes; 1 - приоритет имеют геометрические координаты, заданные MCS и WCS. |
| PositioningMode: Integer | cmd.Int["PositioningMode"] - параметр, определяющий, генерирует ли эта команда реальные перемещения осей станка или только задаёт локальную систему координат внутри ЧПУ без каких-либо перемещений. Возможны три значения: 0 - STAY - преобразование не создаёт реальных перемещений станка; 1 - TURN - преобразование перемещает только поворотные оси станка; 2 - MOVE - преобразование перемещает все необходимые оси, чтобы сохранить прежнее положение вершины инструмента в новой системе координат. |
Некоторые системы ЧПУ требуют определения локальных систем координат через пространственные углы, тогда как другие поддерживают определение локальных систем координат только через реальные углы осей станка. Команда ORIGIN включает всю информацию, необходимую для обоих способов определения. Свойства cmd.Ptr["MCS"] и cmd.Ptr["WCS"] содержат пространственные углы (A, B, C) локальной системы координат, а массив cmd.Ptr["Axes"] содержит соответствующие координаты поворотных осей станка. Главное преимущество свойства cmd.Ptr["Axes"] в том, что оно задаёт локальную систему координат однозначно, тогда как для cmd.Ptr["WCS"] обычно существует два возможных решения. Для систем ЧПУ, требующих пространственные углы для определения локальной системы координат, для разрешения неоднозначных случаев можно использовать углы осей станка (см. пример ниже).
Примечание: пространственные углы задаются относительно локальной системы координат, активной на момент определения команды ORIGIN.
Если система ЧПУ поддерживает оба способа определения локальной системы координат, желаемый формат вывода команды ORIGIN можно задать в CAM-системе в настройках параметров системы ЧПУ. В постпроцессоре желаемый формат вывода доступен в свойстве cmd.Int["IsSpatial"] команды ORIGIN.
Некоторые системы ЧПУ поддерживают различные режимы позиционирования команды ORIGIN. CAM-система предлагает следующие режимы позиционирования локальной системы координат.
cmd.Int["PositioningMode"]=STAY. Команда origin не перемещает оси станка.
cmd.Int["PositioningMode"]=TURN. Команда origin поворачивает оси станка так, чтобы направление оси инструмента совпало с осью Z локальной системы координат
cmd.Int["PositioningMode"]=MOVE. Команда origin поворачивает оси станка так, чтобы совместить ось инструмента с осью Z локальной системы координат, и перемещает линейные оси так, чтобы положение вершины инструмента относительно заготовки осталось прежним
Системы ЧПУ определяют локальную систему координат относительно некоторой базовой системы координат заготовки (G54). В зависимости от используемой системы ЧПУ для определения локальной системы координат следует использовать либо матрицу MCS, либо матрицу WCS.
Современные системы ЧПУ знают о кинематике станка. На таких системах ЧПУ система координат заготовки поворачивается вместе с поворотным столом. Поэтому на таких системах ЧПУ можно определять локальную систему координат относительно поворачивающейся системы координат заготовки. В этом случае удобно использовать матрицу WCS.
Старые системы ЧПУ ничего не знают о кинематике станка и не могут поворачивать систему координат заготовки вместе с поворотным столом. Для таких систем ЧПУ для определения преобразования локальной системы координат следует использовать матрицу MCS.
На приведённых ниже рисунках показано различие между базовыми системами координат для матриц MCS и WCS. Предпочтительнее использовать матрицу WCS, так как она не зависит от установки заготовки, тогда как MCS сильно от неё зависит.

Настройки локальной системы координат CAM-системы.
В CAM-системе настройки команды ORIGIN задаются в файле конфигурации станка.
SCType ID="MachineName" type="AbstractMachine"
...
<ControlData>
...
<LocalCS>
<IsSpatial DefaultValue="True"/>
<PositioningMode DefaultValue="Stay"/>
</LocalCS>
...
</ControlData>
...
<SCType>
Эти параметры также доступны из графического интерфейса, в разделе "Параметры системы ЧПУ" параметров станка.

Примеры кода для команды ORIGIN.
Пример - смещение начала координат G54-G59 / G52:
program Origin
if cmd.Int["OriginType"]=0 then begin !G54-G59
Output "G" + cmd.Str["CSNumber"]
end else begin !G52 X Y Z
X = cmd.Flt["MCS.OriginPoint.X"]
Y = cmd.Flt["MCS.OriginPoint.Y"]
Z = cmd.Flt["MCS.OriginPoint.Z"]
Output "G52 X" + Str(X) + " Y" + Str(Y) + " Z" + Str(Z)
end
end
Пример - смещение начала координат и рабочая плоскость в стиле Heidenhain CYCL DEF:
program Origin
if CLD[4]=0 then begin ! Выбор стандартной LCS (G54-G59)
! Для Heidenhain ничего не делать
end else if CLD[4]=1079 then begin ! Преобразование LCS
Output "CYCL DEF 7.0 DATUM SHIFT"
Output "CYCL DEF 7.1 X" + Str(cmd.Flt["WCS.OriginPoint.X"])
Output "CYCL DEF 7.2 Y" + Str(cmd.Flt["WCS.OriginPoint.Y"])
Output "CYCL DEF 7.3 Z" + Str(cmd.Flt["WCS.OriginPoint.Z"])
if (abs(cmd.Flt["WCS.RotAngles.A"])>0.0001) or
(abs(cmd.Flt["WCS.RotAngles.B"])>0.0001) or
(abs(cmd.Flt["WCS.RotAngles.C"])>0.0001)
then begin
Output "CYCL DEF 19.0 WORKING PLANE"
if cmd.Int["IsSpatial"]>0 then begin ! Пространственные координаты
Output "CYCL DEF 19.1 A" + str(cmd.Flt["WCS.RotAngles.A"]) +
" B" + str(cmd.Flt["WCS.RotAngles.B"]) +
" C" + str(cmd.Flt["WCS.RotAngles.C"])
end else begin ! Оси станка
OutStr$ = "CYCL DEF 19.1"
if cmd.Ptr["Axes(AxisBPos)"]<>0 then begin
OutStr$ = OutStr$ + " B" + str(cmd.Flt["Axes(AxisBPos).Value"])
end
if cmd.Ptr["Axes(AxisCPos)"]<>0 then begin
OutStr$ = OutStr$ + " C" + str(cmd.Flt["Axes(AxisCPos).Value"])
end
Output OutStr$
end
end
end
end
Доступ из .NET
Обработчики - помимо базового OnOrigin, платформа вызывает OnWorkpieceCS для случая G54-G59 и
OnLocalCS для преобразования локальной системы координат; ORIGIN также является командой перемещения, поэтому срабатывают скобки группы перемещений:
public override void OnOrigin(ICLDOriginCommand cmd, CLDArray cld) // базовый диспетчер
public override void OnWorkpieceCS(ICLDOriginCommand cmd, CLDArray cld) // G54-G59
public override void OnLocalCS(ICLDOriginCommand cmd, CLDArray cld) // преобразование локальной СК
public override void OnBeforeMovement(ICLDMotionCommand cmd, CLDArray cld)
public override void OnAfterMovement(ICLDMotionCommand cmd, CLDArray cld)
Наследование: ICLDOriginCommand : ICLDMultiMotionCommand : ICLDMotionCommand : ICLDCommand.
Читайте параметры из строго типизированного объекта cmd (рекомендуется); также доступны «сырой» массив cld[i] (те же индексы, что и в sppx) и именованные обёртки cmd[...]. В таблице перечислены члены команды, включая унаследованные от базовых интерфейсов; общие члены ICLDCommand (навигация, CLD, CLDFile, TechOperation, ...) описаны в Модели доступа к CLData.
| Свойство | Тип | Описание |
|---|---|---|
cmd.OriginType |
CLDOriginType |
Выбор стандартной системы координат заготовки (G54-G59) или переключение на конкретную локальную систему координат (G68.2, PLANE SPATIAL, Cycle800). |
cmd.IsWorkpieceCScmd.IsLocalCS |
bool | True, если это команда выбора системы координат заготовки / переключения локальной системы координат. |
cmd.IsOncmd.IsOff |
bool | True, если это команда включения / выключения переключения системы координат. |
cmd.CSNumber |
double | Номер стандартной системы координат заготовки для активации. |
cmd.MCS |
TInpLocation |
Декартовы координаты новой системы координат относительно базы станка. |
cmd.WCS |
TInpLocation |
Декартовы координаты новой системы координат относительно заготовки (может поворачиваться вместе с ней). |
cmd.QMCScmd.QWCS |
TInpQuaternion |
Кватернион ориентации новой системы координат относительно базы станка / заготовки. |
cmd.Convention |
TInpComplexRotationConvention |
Соглашение об углах Эйлера, используемое внутри MCS и WCS. |
cmd.IsSpatial |
bool | True, если для определения новой системы координат следует предпочесть декартовы координаты, а не физические оси станка. |
cmd.PositioningMode |
CLDOriginPositionMode |
Как изменяются оси станка при переключении системы координат: Stay, Turn или Move. |
Плюс унаследованные члены ICLDMultiMotionCommand (EN, MSFlags, Time, AxesCount, Axis, Axes,
HasAxis) и EP - их описание см. в MULTIGOTO.
Пример - OnWorkpieceCS (из постпроцессора Fanuc (30i)_Mill_DN):
public override void OnWorkpieceCS(ICLDOriginCommand cmd, CLDArray cld)
{
nc.GWCS.v = cmd.CSNumber; // G54..G59
}
Пример - OnLocalCS (из постпроцессора Fanuc (30i)_Mill_DN):
public override void OnLocalCS(ICLDOriginCommand cmd, CLDArray cld)
{
if (cmd.IsOn) {
nc.GLCS.Show(68.2);
nc.X.Show(cmd.WCS.P.X);
nc.Y.Show(cmd.WCS.P.Y);
nc.Z.Show(cmd.WCS.P.Z);
nc.I.Show(cmd.WCS.N.A);
nc.J.Show(cmd.WCS.N.B);
nc.K.Show(cmd.WCS.N.C);
nc.Block.Hide(nc.GInterp);
nc.Block.Out();
nc.Block.Reset(nc.X, nc.Y, nc.Z);
nc.OutWithN("G53.1");
} else {
nc.GLCS.Show(69);
nc.Block.Out();
}
}