Оператор Cmd


Оператор <Cmd> предоставляет гибкий механизм для работы с текущей командой CLData. Он возвращает ссылку на текущую команду CLData, по которой можно запросить код, имя и параметры данной команды. Формат доступа к конкретным данным команды следующий.

<Cmd.Code> - возвращает уникальный числовой код команды CLData. Каждая команда однозначно идентифицируется таким кодом. Список кодов команд приведен в приложении.

<Cmd.Name> - возвращает текстовое имя команды либо параметра команды.

<Cmd.Data> - для отдельных команд CLData, которые имеют единственный строковый параметр (например Comment, PartNo и др.), возвращает значение данного строкового параметра. Для остальных команд возвращается строковое представление команды, точно такое, какое отображается на закладке CLData главного окна.

<Cmd.Data[Index]> - представляет собой альтернативный способ доступа к массиву числовых параметров команды CLD. Возвращает вещественное значение элемента массива параметров с индексом Index.

Следующие ниже несколько конструкций позволяют получить доступ к параметрам команды CLData по имени параметра. В качестве имени параметра в них могут выступать не только строковые константы, как показано здесь, но и строковые переменные и выражения. Каждая команда CLData может характеризоваться собственным именованным набором параметров. Имена параметров с описанием для каждой команды приведены в приложении. Имена параметров можно увидеть на закладке CLData в нижней части главного окна.

<Cmd.Str["ParameterName"]> - возвращает значение параметра команды с именем ParameterName в виде строки.

<Cmd.Int["ParameterName"]> - возвращает значение параметра команды с именем ParameterName в виде целого числа (Integer).

<Cmd.Flt["ParameterName"]> - возвращает значение параметра команды с именем ParameterName в виде вещественного числа (Real, либо, как его еще называют, число с плавающей точкой - Float).

<Cmd.Ptr["ParameterName"]> - возвращает ссылку на параметр команды с именем ParameterName. Если параметра с таким именем в данной команде не существует, то оператор вернет значение 0, а иначе число отличное от нуля. По полученной ссылке через точку может быть получен доступ либо к значению данного параметра, либо к одному из дочерних параметров. Для этого нужно после точки снова указать одну из описаных здесь команд: Str, Int, Flt, Ptr, Item, ItemCount, Code, Name. Если при этом после инструкции не указывается имя параметра, то значит, что она относится к самому параметру. Например, инструкция Cmd.Ptr["Parameter1"].Int означает взять значение самого параметра с именем <Parameter1> в виде целого числа. А запись Cmd.Ptr["Parameter1"].Int["SubParameter1"] означает взять в виде целого числа значение дочернего параметра <SubParameter1> внутри параметра <Parameter1>.

<Cmd.Item[Index]> - возвращает ссылку на дочерний параметр по индексу. Индексация параметров начинается с 1.

<Cmd.ItemCount> - возвращает количество дочерних параметров в списке.

 

Параметры команд CLData могут  представлять собой не только элементы простого типа (String, Integer, Real), но и более сложные структуры (комплексные параметры и массивы). Каждый параметр характеризуется своим уникальным именем и типом. Имеются следующие типы параметров.

Строковые (String) - параметры данного типа имеют значение в виде текстовой строки и не могут иметь дочерних параметров.

Целые числа (Integer) - параметры данного типа имеют значение в виде целого числа и не могут иметь дочерних параметров.

Дробные числа (Double) - параметры данного типа имеют значение в виде дробного числа с плавающей точкой (Float) и не могут иметь дочерних параметров.

Комплексные параметры (ComplexType) - параметры данного типа не имеют собственного значения, но они могут иметь дочерние свойства любого из описанных здесь типов. Данный тип необходим для объединения нескольких параметров в группу. Каждый из дочерних параметров обладает уникальным именем. Для доступа к дочерним параметрам необходимо последовательно через точку указать имена параметров от родительского до самого вложенного дочернего.
Например, инструкция
 
Cmd.Flt["MCS.OriginPoint.X"]
 
означает взять у свойства <MCS> текущей команды дочерний параметр с именем <OriginPoint>, в котором найти дочернее свойство с именем <X>; результат вернуть в виде дробного числа.

Массивы (Array). Параметры-массивы как и комплексные не обладают собственными значениями и могут иметь дочерние свойства. Однако дочерние свойства массивов, как правило, имеют общий тип и, следовательно, одинаковое имя. Поэтому доступ к дочерним свойствам массивов осуществляется не по имени, а по индексу. Для доступа к дочернему свойству массива с номером 4 нужно написать либо
 
Cmd.Ptr["ArrayName"].Item[4], либо
Cmd.Ptr["ArrayName(4)"].
 
Здесь <ArrayName> - имя параметра-массива.
Кроме индексного, доступ к дочернему параметру массива в некоторых случаях может быть осуществлен по ключу. Если у массива определен параметр Key, который задает имя поля-ключа в дочерних параметрах, то для получения доступа к конкретному элементу массива необходимо после имени массива в круглых скобках указать значение ключа. Например, инструкция
 
Cmd.Ptr["ArrayName(KeyValue)"]
 
означает взять у текущей команды параметр <ArrayName>, в котором найти дочернее свойство с ключевым полем равным <KeyValue>

 

Рассмотрим несколько примеров использования параметров команд 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

 

 

 

Сопутствующие ссылки:

Функции и операторы работы с CLData