Текущая команда (оператор Cmd)
Текущая команда — это команда CLData, обработчик которой выполняется. Помимо числового массива CLD, постпроцессор может прочитать код, имя, текстовые данные команды и любой из её именованных параметров (включая вложенные). Это обеспечивают оператор Cmd в sppx и строго типизированный объект cmd в .NET.
Доступ из sppx
Оператор Cmd предоставляет гибкий механизм работы с текущей командой CLData. Он возвращает ссылку на текущую команду, у которой можно запросить код, имя и параметры этой команды. Формат доступа к конкретным данным команды следующий.
Cmd.Code — возвращает уникальный числовой код команды CLData. Каждая команда однозначно определяется этим кодом. Список кодов команд приведён в описании технологических команд.
Cmd.Name — возвращает текстовое имя команды или параметра команды.
Cmd.Data — для отдельных команд CLData, имеющих единственный строковый параметр (таких как Comment, PartNo и т. п.), возвращает строковое значение. Для остальных команд возвращает строковое представление команды — в точности то, что отображается на вкладке CLData главного окна.
Cmd.Data[Index] — альтернативный способ доступа к массиву числовых параметров команды CLD. Возвращает вещественное значение элемента массива параметров с индексом Index.
Ниже приведено несколько языковых конструкций, дающих доступ к параметрам команды CLData по имени параметра. Подробнее см. раздел Именованные параметры CLData. Каждая команда CLData может характеризоваться собственным набором именованных параметров. Имена параметров с описанием для каждой команды перечислены в описании технологических команд. Имена параметров видны на вкладке CLData внизу главного окна.
Cmd.Str["ParameterName"] — возвращает значение параметра команды с именем ParameterName в виде текстовой строки String.
Cmd.Int["ParameterName"] — возвращает значение параметра команды с именем ParameterName в виде целого числа Integer.
Cmd.Flt["ParameterName"] — возвращает значение параметра команды с именем ParameterName в виде вещественного числа Real (числа с плавающей точкой).
Cmd.Ptr["ParameterName"] — возвращает ссылку на параметр команды с именем ParameterName.
Рассмотрим несколько примеров использования параметров команды CLData.
Пример 1. Внутри обработчика команды загрузки инструмента LoadTl вывести в управляющую программу строку с адресом T, номером инструмента и именем револьверной головки в скобках.
program LoadTl
Output "T" + Cmd.Int["ToolID"] + "(" + Cmd.Str["RevolverID"] + ")"
end
Возможный результат вывода в управляющую программу: T3 (TopTurret)
Пример 2. Пример обработки команды MultiGoto с использованием различных способов доступа к элементам параметра-массива Axes.
program MultiGoto
i: Integer
AxisName: String
for i = 1 to Cmd.Ptr["Axes"].ItemCount do begin
AxisName = cmd.Ptr["Axes"].Item[i].Str["AxisID"]
if AxisName="AxisXPos" then begin
X = cmd.Ptr["Axes"].Item[i].Flt["Value"]
end else
if AxisName="AxisYPos" then begin
Y = cmd.Ptr["Axes("+Str(i)+")"].Flt["Value"]
end else
if AxisName="AxisZPos" then begin
Z = cmd.Flt["Axes("+Str(i)+").Value"]
end else
if cmd.Ptr["Axes(AxisCPos)"]<>0 then begin
C = cmd.Flt["Axes(AxisCPos).Value"]
end
end
OutBlock
end
Пример 3. Пример обработки команды настройки системы координат Origin. Анализируется значение свойства OriginType. Если оно равно нулю, выводится стандартная команда выбора системы координат заготовки G54-G59. Номер системы координат берётся из параметра CSNumber. Иначе формируется команда переноса локальной системы координат G92 X Y Z. Значения смещений по осям системы координат берутся разными способами из соответствующих дочерних свойств параметра MCS.OriginPoint.
program Origin
if Cmd.Int["OriginType"]=0 then begin !G54-G59
Output "G" + Cmd.Str["CSNumber"]
end else begin !G92 X Y Z
X = Cmd.Flt["MCS.OriginPoint.X"]
Y = Cmd.Ptr["MCS.OriginPoint.Y"].Flt
Z = Cmd.Ptr["MCS.OriginPoint"].Flt["Z"]
Output "G92 X" + Str(X) + " Y" + Str(Y) + " Z" + Str(Z)
end
end
Оператор Cmd (параметры с уникальным кодом)
Для измерительных циклов параметры могут записываться в массив CLD в другом порядке. Каждый параметр имеет уникальный код, по которому можно получить значение параметра.
Синтаксис доступа к параметрам команды CLData по числовому коду:
CmdPrm.ItemCount— число параметров команды;CmdPrm.Flt[Code]— возвращает значение параметра по его коду в виде Double;CmdPrm.Int[Code]— возвращает значение параметра по его коду в виде Integer;CmdPrm.Str[Code]— возвращает значение параметра по его коду в виде String;CmdPrm.Bol[Code]— возвращает значение параметра по его коду в виде Boolean;CmdPrm.IndexOfCode(Code)— найти индекс параметра по его коду;CmdPrm.Item[i].ItemType— тип параметра по индексу (String, Integer, Double, Boolean);CmdPrm.Item[i].Flt— значение параметра по индексу в виде Double;CmdPrm.Item[i].Int— значение параметра по индексу в виде Integer;CmdPrm.Item[i].Str— значение параметра по индексу в виде String;CmdPrm.Item[i].Bol— значение параметра по индексу в виде Boolean;CmdPrm.Item[i].Code— числовой код параметра по индексу.
Доступ из .NET
В .NET текущая команда — это первый аргумент обработчика, строго типизированный интерфейс (ICLDCircleCommand, ICLDGotoCommand, ...), производный от ICLDCommand. Чтение типизированных свойств (cmd.EP.X, cmd.R, ...) — рекомендуемый способ; перечисленные ниже члены покрывают ту же информацию, что и оператор Cmd в sppx:
| sppx | .NET (ICLDCommand) |
Описание |
|---|---|---|
Cmd.Code |
cmd.CmdTypeCode |
уникальный числовой код типа команды |
| - | cmd.CmdType |
тип команды как перечисление CLDCmdType |
Cmd.Name |
cmd.Caption |
имя команды, как оно отображается в окнах |
Cmd.Data |
cmd.CLDataS |
текстовые данные команды (или её строковое представление) |
Cmd.Data[i] |
cmd.CLD[i] |
i-й числовой параметр (см. Массив CLD) |
| - | cmd.Index |
индекс команды в её файле CLData |
Доступ к именованным параметрам (Str / Int / Flt / Ptr) идентичен, поскольку ICLDCommand реализует общую модель именованных свойств:
public override void OnLoadTl(ICLDLoadTlCommand cmd, CLDArray cld)
{
nc.OutWithN("T" + cmd.Int["ToolID"] + "(" + cmd.Str["RevolverID"] + ")");
}
Вложенные и массивные параметры используют cmd.Ptr["Name"], .Arr["Name"], .Item[i] и составной синтаксис имён "Group.Sub.Param" / "Array(Key)", в точности как в sppx — см. Именованные параметры CLData.
Параметры с уникальным кодом. В .NET-постпроцессорах почти всё так же, но доступ выполняется через ключевое слово cmd.Prm (cmd.Prm.Flt[code], cmd.Prm.Int[code], cmd.Prm.IndexOfCode(code), cmd.Prm.Item[i]...).