LinuxCNC Integrators Manual Глава XII - Virtual Control Panel - Виртуальная панель управления

Материал из cnc-club
Перейти к: навигация, поиск

= LinuxCNC Integrators Manual Глава XII - Virtual Control Panel - Виртуальная панель управления = Курсивное начертание

Содержание

Virtual Control Panel - Виртуальная панель управления

12.1 Введение

PyVCP (python Virtual Control Panel) разработана для того, чтобы дать станкостроителю возможность настраивать интерфейс AXIS под себя, добавляя кнопки индикаторы и выполнять специализированные задачи. Аппаратные панели управления станками могут использовать много пинов входа/выхода и могут быть дорогостоящими. Вот где проявляются преимущества pyVCP, т.к. создать панель pyVCP ничего не стоит. Виртуальная панель управления может быть использована для проверки, мониторинга, временной замены реальных устройств ввода вывода для отладки Ladder Logic, или для эмулирования аппаратной панели до того как вы ее построите и подключите.

Следующее изображение демонстрирует множество виджетов pyVCP.


12.2 Создание панели pyVCP

Схема панели pyVCP задается при помощи XML файла, который содержит виджеты между тэгами <pyvcp> и </pyvcp>. Например:


<pyvcp>
 
	<label text="This is a LED indicator"/>
 
	<led/>
 
</pyvcp>

Если вы поместите этот текст в файл tiny.xml и выполните в консоле:

[cmd]halrun -I loadusr pyvcp -c mypanel tiny.xml[/cmd]

pyVCP создаст панель для вас, которая будет включать два виджета, Ярлык (label) с текстом "This is a LED indicator", и LED (свето диод) использующийся для отображения состояния битового (bit) сигнала HAL. pyVCP также создаст компонент HAL под названием "mypanel" (все виджеты в этой панели присоединены к пинам начинающимся с "mypanel."). Т.к. тэга <halpin> нет внутри тега <led>, pyVCP автоматически называет пин HAL для виджета LED mypanel.led.0.

Для получения списка виджетов и их опций, см. описание ниже.

Как только вы создали панель, присоединение сигналов HAL к пинам pyVCP выполняется при помощи halcmd:

net <signal-name> <pin-name> <opt-direction> <opt-pin-name>signal-name

Если вы только начинаете изучение HAL, глава начало HAL Руководства Станкостроителя это хорошее место для начала.


12.3 Безопасность

Части файлов pyVCP обрабатываются как код Python, и могут выполнять любые действия который можно выполнить программа написанная на Python. Используйте файлы .xml pyVCP только из доверенных источников.


12.4 AXIS

Т.к. AXIS использует такой же набор инструментов (toolkit), что и pyVCP (Tkinter), панель pyVCP можно добавить на правую часть пользовательского интерфейса AXIS. Типичный пример описан ниже.

Поместите ваш pyVCP XML файл описывающий панель в одну директорию с ini файлом. Скажем, мы хотим отображать текущее значение скорости шпинделя используя виджет Bar. Поместите следующее в фал под названием spindle.xml:


<pyvcp>
 
	<label>
 
		<text>"Spindle speed:"</text>
 
	</label>
 
	<bar>
 
		<halpin>"spindle-speed"</halpin>
 
		<max_>5000</max_>
 
	</bar>
 
</pyvcp>


Так мы сделали панель с виджетом Lablel и Bar, задав, что пин HAL присоединенный к Bar должен быть назван "spindle-speed", и задав максимальное значение Bar в 5000 (см. описание виджета ниже). Чтобы предупредить Axis об этом файле и чтобы он вызвал его при запуске, нам нужно задать следующее в разделе [DYSPLAY] в ini файле:


PYVCP = spindle.xml


Чтобы заставить виджет действительно показывать скорость шпинделя, он должен быть привязан к соответствующему сигналу HAL. Файл hal, который будет выполняться после запуска AXIS и pyVCP может быть указан в разделе [HAL] в ini файле:


POSTGUI_HALFILE = spindle_to_pyvcp.hal


Это изменение запустит команды HAL, находящиеся в "spindle_to_pyvcp.hal". В нашем примере содержание файла может выглядеть следующим образом:


net spindle-rpm-filtered => pyvcp.spindle-speed


Подразумевается, что сигнал под названием "spindle-rpm-filtered" уже существует. Отметьье, что при работе одновременно с AXIS, все пины виджетов pyVCP имеют имена начинающиеся с "pyvcp.".

Вот как только что созданная панель pyVCP должна выглядеть в AXIS. Конфигурация sim/lathe уже настроена таким же образом.


12.5 Stand Alone - Отдельный запуск

Этот раздел описывает как панель pyVCP может быть отображена сама по себе или без EMC2.

Для загрузки отдельной панели pyVCP вместе ECM используйте следующие команды:

[cmd]loadusr -Wn mypanel pyvcp -g WxH+X+Y -c mypanel <path/>panel_file.xml[/cmd]

Вы должны использовать жто для загрузки плавающей (не привязанной) панели pyVCP или панели pyVCP совместно с GUI отличным от AXIS.

-Wn panelname заставляет HAL подождать пока компонент "panelname" закончит загружаться ("become ready" - станет готов в терминах HAL) перед продолжением выполнения следущих команд hal. Это важно потому, что панели pyVCP экспортируют пины HAL, и другим компонентам HAL они будут нужны, для того, чтобы к ним присоединиться.

Отметьте, что W заглавная, а n - строчная. Если вы используете опцию -Wn, вы должны использовать опцию -c для названия панели.

[cmd]pyvcp <-g> <-c> panel.xml[/cmd] строит панель с заданной геометрией и/или названием панели из xml файла панели. panel.xml может иметь любое имя оканчивающееся на .xml. Файл .xml является файлом описывающем как создать панель. Вы должны задать путь к файлу, если панель находится не в том же директории, что и скрипт HAL.

-g <WxH><+X+Y> определяет геометрию которая будет использована при создании панели.

Синтаксис:

"Width"x"Height"+"X Anchor"+"Y Anchor" ("Ширина"x"Высота"+"Привязка X"+"Привязка Y"). Вы можете указать положение или размер или оба параметра. Привязка указывает на положение верхнего левого угла панели. Например, -g 250x500+800+0 задаст панель шириной 250px, высостой 500 пикселов, находящуюся в X800Y0.

-c panelname говорит pyVCP как назвать компонент и как озаглавить окно панели. Название панели может быть любым, без пробелов.

Чтобы загрузить stand alone (отдельную) панель pyVCP без EMC2 используйте следующую команду:

[cmd]loadusr -Wn mypanel pyvcp -g 250x500+800+0 -c mypanel mypanel.xml[/cmd]

Минимальная команда, чтобы загрузить панель pyVCP:

[cmd]loadusr pyvcp mypanel.xml[/cmd]

Вам может понадобится это, если вы хотите отдельную панель без EMC2, такую как тестовая панель или отдельный DRO.

Команда loadusr используется когда выагружаете компонент, который предотвратит завершение HAL, до тех пор пока он не завершится. Если вы загрузили панель и потом запустили ClassicLadder, используя -w ClassicLadder, ClassicLadder будет держать HAL открытым (и панель) до тех пор, пока вы не закроете ClassicLadder.

Не обязательная команда, если вы хотите чтобы ваша панель остановила выполнение любых команд HAL или закрытие HAL. После загрузки всех других компонентов вам нужно будет выполнить команду HAL:

[cmd]waituser panelname[/cmd] - это скажет HAL, подождать до закрытия компонента "panelname", перед выполнением других команд HAL. Это обычно используется как последняя команда, таким образом HAL закрывается когда панель закрывается.


12.6 Виджеты (Widgets)

Сигналы HAL бывают двух типов - bit и number. Bit сигнал типа вкл/выкл. Number может быть "float", "s32" или "u32". Для бодее подробной информации по типам данных HAL, см. раздел 6.2. Виджет PyVCP может либо отображать значение сигнала при помощи виджета индикатора (indicator widget) или изменять значение сигнала при помощи управляющего виджета (control widget). Таким образом, есть 4 класса виджетов PyVCP которые вы можете присоединить к сигналам HAL. Пятый класс - вспомогательные виджеты (helper widgets) которые позволяют организовывать и подписывать вашу панель.


  1. Виджеты для индикации состояния сигнала типа "bit": led, rectled
  1. Виджеты для управления сигналами типа "bit": button, checkbutton, radiobutton
  1. Виджеты для индикации состояния сигнала типа "number": number, s32, u32, bar, meter
  1. Виджеты для управления сигналами типа "number": spinbox, scale, jogwheel
  1. Вспомогательные виджеты: hbox, vbox, table, label, labelframe


Синтаксис

Каждый виджет описан кратко, за описанием следует пример и скриншот. Все тэги внутри основного тэга виджета опциональны.

Общее замечание

В настоящее время, поддерживаются оба типа синтаксиса tag-based и attribute-based. Для примера, следующие фрагменты XML воспринимаются одинаково:


<led halpin="my-led"/>

и

<led><halpin>"my-led"</halpin></led>

Когда используется синтаксис основанный на атрибутах, применяются следующие правила для преобразования значения атрибута в значение переменной Python:


  1. Если первый символ один из следующих, это значение трактуется как выражение на языке Python: {(["’
  1. Если строка принимается оператором int(), значение считается целым числом.
  1. Если строка принимается оператором float(), значение считается числом с плавающей запятой.
  1. Иначе значение считается строкой.

Когда используется синтаксис основанный на тэгах, текст внутри тэга всегда считается выражением на языке Python.

Примеры ниже показывают смешанные форматы.

Комментарии

Чтобы добавить комментарий используйте синтаксис xml.


Редактирование XML файлов

Редактируйте XML файлы при помощи текстовых редакторов. В большинстве случаев, вы можете нажать правой кнопкой на файле и выбрать "Открыть при помощи текстового редактора".

Цвета

Цвета могут задаваться при помощи X11 rgb colors, по имени "gray75" или в шестнацатеричном значении "#0000ff”. Полный список цветов находится здесь:http://sedition.com/perl/rgb.html.

Часто встречающиеся цвета (цвета с числами обозначают темные оттенки того же цвета)


  • white
  • black
  • blue and blue1-4
  • cyan and cyan1-4
  • green and green1-4
  • yellow and yellow1-4
  • red and red1-4
  • purple and purple1-4
  • gray and gray0-100

Пины HAL

Пины HAL представляют возможность "соединения" виджета с чем-либо. Как только вы создали пин HAL для вашего виджета, вы можете "присоединить" его к другому пину HAL использую команду "net" в .hal файле. Для более подробной информации по команде net, см. раздел команды HAL (6.1).

12.6.1 Ярлык (Label)

Label это кусок текста на вашей панели.

Label имеет опциональный пин disable который создается, если вы добавляете <disable_pin>True</disable_pin>.


<label>
  
 	<text>"This is a Label:"</text>
  
 	<font>("Helvetica",20)</font>
  
 </label>


Код выше создает такой пример.


12.6.2 LEDs (светодиоды)

LED используется для отображения состояния пина hal типа bit. Цвет LED будет равен on_color когда пин равен true, и off_color в противном случае.

<halpin> задает имя пина, по умолчанию "led.n", где n это целое число.

<size> устанавливает размер led, по умолчанию 20.

<on_color> устанавливает цвет LED когда пин равен true, по умолчанию "green".

<off_color> устанавливает цвет LED когда пин равен false, по умолчанию "red".

<disable_pin> если равен true добавляет пин disable к led.

<disabled_color> устанавливает цвет LED когда пин выключен (disabled).


12.6.2.1 Круглый LED

<led>
 
	<halpin>"my-led"</halpin>
 
	<size>50</size>
 
	<on_color>"green"</on_color>
 
	<off_color>"red"</off_color>
 
</led>


Код выше создает такой пример.


12.6.2.2 Прямоугольный LED

Это вариант виджета "led".


<vbox>
 
	<relief>RIDGE</relief>
 
	<bd>6</bd>
 
	<rectled>
 
		<halpin>"my-led"</halpin>
 
		<height>"50"</height>
 
		<width>"100"</width>
 
		<on_color>"green"</on_color>
 
		<off_color>"red"</off_color>
 
	</rectled>
 
</vbox>


Код выше создает такой пример.

Также показан vertical box с рельефом.


12.6.3 Buttons (Кнопки)

Button используется для управления пином типа BIT. Пин будет равен True когда кнопка нажата и удерживается и False когда кнопка отпущена. Button может использовать следующие опции форматирования:

<padx>n</padx> где "n" это размер дополнительного горизонтального пространства.

<pady>n</pady> где "n" это размер дополнительного вертикального пространства.

<activebackground>"color"</activebackground> цвет когда курсор находится над кнопкой.

<bg>"color"</bg> цвет кнопки


12.6.3.1 Text Button (Текстовая кнопка)

Текстовая кнопка контролирует bit halpin. Пин равен false до тех пор пока кнопка не нажата. Кнопка - это мгновенная кнопка. Текстовая кнопка имеет опциональный пин отключения, который создается если вы добавите <disable_pin>True</disable_pin>.


<button>
 
	<halpin>"ok-button"</halpin>
 
	<text>"OK"</text>
 
</button>
 
<button>
 
	<halpin>"abort-button"</halpin>
 
	<text>"Abort"</text>
 
</button>


Код выше создает такой пример.


12.6.3.2 Checkbutton (Залипающая кнопка)

Checkbutton управляет пином типа "bit". Пин будет равен True когда кнопка нажата, и false когда кнопка отжата. Checkbutton это кнопка типа переключатель.


<checkbutton>
 
	<halpin>"coolant-chkbtn"</halpin>
 
	<text>"Coolant"</text>
 
</checkbutton>
 
<checkbutton>
 
	<halpin>"chip-chkbtn"</halpin>
 
	<text>"Chips     "</text>
 
</checkbutton>


Код выше создает такой пример.

Сoolant checkbutton нажата.

Отметьте дополнительные пробелы в параметре text кнопки Chips, они нужны чтобы сохранить выравнивание.


12.6.3.3 Radiobutton (Кнопка выбора, тумблер)

Radiobutton устанавливает один из пинов в true. Остальные пины равны false.


<radiobutton>
 
	<choices>["one","two","three"]</choices>
 
	<halpin>"my-radio"</halpin>
 
</radiobutton>


Код выше создает такой пример.

Отметьте, что пины HAL в примере будут называться my-radio.one, my-radio.two, и my-radio.three. В изображении сверху, выбрано значение "one".


12.6.4 Number Displays (Числовые дисплеи)

Числовые дисплеи могут испольщовать следующи опиции форматирования:


  • - шрифт, где "n" это размер шрифта.
  • <width>n</width> где "n" это общая ширина используемого пространства
  • <justify>pos</justify> - выравнивание, где "pos" либо LEFT, CENTER, либо RIGHT (не работает)
  • <padx>n</padx> где "n" это размер дополнительного пространства по ширине
  • <pady>n</pady> где "n" это размер дополнительного пространства по высоте


12.6.4.1 Number

Отображает значения сигнала с плавающей запятой (float).


<number>
 
	<halpin>"my-number"</halpin>
 
	<font>("Helvetica",24)</font>
  
 	<format>"+4.4f"</format>
  
 </number>


Код выше создает такой пример.

Шрифт и размер задаются спецификацией Tkinter. Один из шрифтов, который можнт отображаться как минимум до 200-го размера это "courier 10 pitch", таким образом, для действительно большого виджета Number вы можете задать:

 ("courier 10 pitch",100)

<format> это формат "C-style", определяющий, как будет отображаться число.

12.6.4.2 s32 Number

Виждет s32 number отображает значение числа типа s32. Синтаксис такой же как и у "number" за исключением названия, которое <s32>. Убедитесь, что значение width (ширины) достаточно большое, чтобы отобразить самое большое число, которое вы ожидаете увидеть.


<s32>
 
	<halpin>"my-number"</halpin>
 
	<font>("Helvetica",24)</font>
  
 	<format>"6d"</format>
  
 	<width>6</width>
  
 </s32>


Код выше создает такой пример.


12.6.4.3 u32 Number

Виджет u32 number отображает значение числа типа u32. Синтаксис такой же как и у "number", кроме названия <img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":)" title="Smile" />.


12.6.4.4 Bar (полоса)

Виджет bar отображает значение сигнала FLOAT графически и численно.


<bar>
 
	<halpin>"my-bar"</halpin>
 
	<min_>0</min_>
 
	<max_>123</max_>
 
	<bgcolor>"grey"</bgcolor>
 
	<fillcolor>"red"</fillcolor>
 
</bar>


Код выше создает такой пример.


12.6.4.5 Meter

Виджет Meter отображает значение сигнала FLOAT используя традиционный часовой индикатор.


<meter>
 
	<halpin>"mymeter"</halpin>
 
	<text>"Battery"</text>
 
	<subtext>"Volts"</subtext>
 
	<size>250</size>
 
	<min_>0</min_>
 
	<max_>15.5</max_>
 
	<majorscale>1</majorscale>
 
	<minorscale>0.2</minorscale>
 
	<region1>(14.5,15.5,"yellow")</region1>
 
	<region2>(12,14.5,"green")</region2>
 
	<region3>(0,12,"red")</region3>
 
</meter>


Код выше создает такой пример.


12.6.5 Number Inputs (ввод чисел)

12.6.5.1 Spinbox

Spinbox контролирует пин FLOAT. Вы можете увеличить или уменьшить значение пина, нажимая стрелки или наведя на spinbox курсор мыши прокручивая колесо.


<spinbox>
 
	<halpin>"my-spinbox"</halpin>
 
	<min_>-12</min_>
 
	<max_>33</max_>
 
	<resolution>0.1</resolution>
 
	<format>"2.3f"</format>
 
	<font>("Arial",30)</font>
  
 </spinbox>


Код выше создает такой пример.


12.6.5.2 Scale (интервал)

Scale контролирует пин float или s32. Вы можете увеличивать или уменьшать значение пин перетаскивая ползунок, или прокручивая колесико мышки. К "halpin" будут добавлены оба "-f" и "-i" чтобы сформировать пины float и s32. Width (ширина) это ширина ползунка для вертикального интервала и высота для горизонтального.


<scale>
 
	<font>("Helvetica",16)</font>
  
 	<width>"25"</width>
  
 	<halpin>"my-hscale"</halpin>
  
 	<resolution>0.1</resolution>
  
 	<orient>HORIZONTAL</orient>
  
 	<initval>-15</initval>
  
 	<min_>-33</min_>
  
 	<max_>26</max_>
  
 </scale>
  
 <scale>
  
 	<font>("Helvetica",16)</font>
  
 	<width>"50"</width>
  
 	<halpin>"my-vscale"</halpin>
  
 	<resolution>1</resolution>
  
 	<orient>VERTICAL</orient>
  
 	<min_>100</min_>
  
 	<max_>0</max_>
  
 </scale>


Код выше создает такой пример.


12.6.5.3 Dial (поворотная ручка)

Dial выводит HAL пин типа float и реагирует на перетаскивание и прокручивание мышки. Двойной клик левой кнопкой мыши увеличивает разрешение, а правой кнопкой мышки уменьшает разрешение на один разряд. Вывод ограничен максимальным и минимальным значением. Значение <cpr> задает количество отметок на внешней стороне кольца (аккуратнее с большими значениями).


<dial>
 
	<size>200</size>
 
	<cpr>100</cpr>
 
	<min_>-15</min_>
 
	<max_>15</max_>
 
	<text>"Dial"</text>
 
	<initval>0</initval>
 
	<resolution>0.001</resolution>
 
	<halpin>"anaout"</halpin>
 
	<dialcolor>"yellow"</dialcolor>
 
	<edgecolor>"green"</edgecolor>
 
	<dotcolor>"black"</dotcolor>
 
</dial>


Код выше создает такой пример.


12.6.5.4 Jogwheel

Jogwheel имитирует реальный jogwheel выдавая FLOAT pin который изменяется вверх или вниз, при прокручивании колеса мышки или перетаскивании ручки.


<jogwheel>
 
	<halpin>"my-wheel"</halpin>
 
	<cpr>45</cpr>
 
	<size>250</size>
 
</jogwheel>


Код выше создает такой пример.


12.6.6 Images (изображения)

Image отображает только изображения формата .gif. Все изображения должны быть одинакового размера. Изображения должны находится в тоже директории, что и ini файл (или в текущей директории, при запуске из командной строки через halrun/halcmd).


12.6.6.1 Image Bit

Виджет "image_bit" переключает между двумя картинками, в зависимости от значения пина, true или false.


<image name=’fwd’ file=’fwd.gif’/>
 
<image name=’rev’ file=’rev.gif’/>
 
<vbox>
 
	<image_bit halpin=’selectimage’ images=’fwd rev’/>
 
</vbox>


Код выше создает такой пример.

Используются два изображения: fwd.gif и rev.gif.

FWD показывается, когда "selectimage" равен false, а REV когда "selectimage" равен true.


12.6.6.2 Image u32

Виджет "image_u32" тоже самое, что и "image_bit" за исключением того, что вы имеете неограниченное количество изображений, и "выбираете" изображение устанавливая значение пина в 0 для первого изображения, 1 для второго и т.д.


<image name=’stb’ file=’stb.gif’/>
 
<image name=’fwd’ file=’fwd.gif’/>
 
<image name=’rev’ file=’rev.gif’/>
 
<vbox>
 
	<image_u32 halpin=’selectimage’ images=’stb fwd rev’/>
 
</vbox>


Код выше создает такой пример.

Отметьте, что значение по умолчанию всегда равно min, даже если оно больше max, только если min не меньше нуля.


12.6.7 Containers (Контейнеры)

Контейнеры это виджеты которые содержат другие виджеты. Контейнеры используются для группировки виджетов.


12.6.7.1 Borders (Границы)

Границы контейнеров задаются двумя тэгами используемыми вместе. Тэг <relief> задает тип границы, а <bd> задает ее ширину.

<relief>type</relief> где "type" это FLAT, SUNKEN, RAISED, GROOVE, или RIDGE (плоская, утопленная, поднятая или бордюр)

<bd>n</bd> где "n" это толщина границы.


<hbox>
 
	<button>
 
		<relief>FLAT</relief>
 
		<text>"FLAT"</text>
 
		<bd>3</bd>
 
	</button>
 
	<button>
 
		<relief>SUNKEN</relief>
 
		<text>"SUNKEN"</text>
 
		<bd>3</bd>
 
	</button>
 
	<button>
 
		<relief>RAISED</relief>
 
		<text>"RAISED"</text>
 
		<bd>3</bd>
 
	</button>
 
	<button>
 
		<relief>GROOVE</relief>
 
		<text>"GROOVE"</text>
 
		<bd>3</bd>
 
	</button>
 
	<button>
 
		<relief>RIDGE</relief>
 
		<text>"RIDGE"</text>
 
		<bd>3</bd>
 
	</button>
 
</hbox>


Код выше создает такой пример.


12.6.7.2 Hbox (горизонтальная коробка)

Используйте HBox, когда вы хотите составить виджеты один за одним горизонтально.


<hbox>
 
	<relief>RIDGE</relief>
 
	<bd>6</bd>
 
	<label><text>"a hbox:"</text></label>
 
	<led></led>
 
	<number></number>
 
	<bar></bar>
 
</hbox>


Код выше создает такой пример.

Внутри Hbox вы можете использовать тэги <boxfill fill=""/>, <boxanchor anchor=""/>, и <boxexpand

expand=""/> для выбора как элементы будут вести себя, когда изменяется размер окна. Более подробно о том, как веду себя fill, anchor, и expand см. в страницах справки Tk pack, pack(3tk). По-умолчанию, fill="y", anchor="center", expand="yes".


12.6.7.3 Vbox (вертикальная коробка)

Используйте Vbox когда хотите составить виджеты один за другим вертикально.


<vbox>
 
	<relief>RIDGE</relief>
 
	<bd>6</bd>
 
	<label><text>"a vbox:"</text></label>
 
	<led></led>
 
	<number></number>
 
	<bar></bar>
 
</vbox>


Код выше создает такой пример.

Внутри Hbox вы можете использовать такие же тэги для задания оформления как и в HBox.


12.6.7.4 Labelframe

Виждет labelframe это рамка с названием в левом верхнем углу.


<labelframe text="Group Title">
 
	<font>("Helvetica",16)</font>
  
 	<hbox>
  
 	<led/>
  
 	<led/>
  
 	</hbox>
  
 </labelframe>


Код выше создает такой пример.


12.6.7.5 Table (таблица)

Таблица это контейнер, который позволяет создавать раскладку в виде строчек и столбцов. Каждая строчка начинается с тэга <tablerow/>. Большой виджет может простираться на несколько строчек или столбцов, для этого используете тэг <tablespan rows= cols=/>. Стороны ячеек, к которым будут "прилипать" содержащиеся виджеты могут быть настроены при помощи тега <tablesticky sticky=/>. Таблица расширяется за счет ее эластичных строк и столбцов.

Пример:


<table flexible_rows="[2]" flexible_columns="[1,4]">
  
 	<tablesticky sticky="new"/>
  
 	<tablerow/>
  
 		<label>
  
 			<text>" A (cell 1,1) "</text>
  
 			<relief>RIDGE</relief>
  
 			<bd>3</bd>
  
 		</label>
  
 		<label text="B (cell 1,2)"/>
  
 			<tablespan columns="2"/>
  
 		<label text="C, D (cells 1,3 and 1,4)"/>
  
 	<tablerow/>
  
 		<label text="E (cell 2,1)"/>
  
 		<tablesticky sticky="nsew"/>
  
 		<tablespan rows="2"/>
  
 		<label text="’spans\n2 rows’"/>
  
 		<tablesticky sticky="new"/>
  
 		<label text="G (cell 2,3)"/>
  
 		<label text="H (cell 2,4)"/>
  
 	<tablerow/>
  
 		<label text="J (cell 3,1)"/>
  
 		<label text="K (cell 3,2)"/>
  
 		<u32 halpin="test"/>
  
 </table>


Код выше создает такой пример.

Добавить в 8.4.3 Пины

(bit) stepgen.<chan>.enable -- обеспечивает выходные шаги step - если false, никаких шагов не генерируются.


Оглавление книги LinuxCNC Integrators Manual

Глава Название
Глава 1 LinuxCNC Integrators Manual Глава I - Важные определения
Глава 2 LinuxCNC Integrators Manual Глава II - Аппаратное обеспечение (Hardware)
Глава 3 LinuxCNC Integrators Manual Глава III - Конфигурационные файлы
Глава 4 Доделать! LinuxCNC Integrators Manual Глава IV - Файл INI
Глава 5 Доделать! LinuxCNC Integrators Manual Глава V - LinuxCNC и HAL
Глава 6 Доделать! LinuxCNC Integrators Manual Глава VI - Основы HAL
Глава 7 Доделать! LinuxCNC Integrators Manual Глава VII - Настройка шаговых двигателей
Глава 8 Доделать! LinuxCNC Integrators Manual Глава VIII - Компонетны HAL
Глава 9 Забыли перевести! LinuxCNC Integrators Manual Глава IX - Параллельный порт
Глава 10 Доделать! LinuxCNC Integrators Manual Глава X - Пользовательский интерфейс HAL (Halui)
Глава 11 Доделать! LinuxCNC Integrators Manual Глава XI - Примеры HAL
Глава 12 Доделать! LinuxCNC Integrators Manual Глава XII - Virtual Control Panel - Виртуальная панель управления