AXIS — графический интерфейс для LinuxCNC
AXIS — это графический интерфейс LinuxCNC с функцией просмотра в реальном времени и отображением заднего плана. Создан на Python, использует Tk и OpenGL для рендеринга интерфейса.
Если конфигурация еще не поддерживает AXIS, можно внести изменения в файл .ini. В разделе [DISPLAY] замените строку DISPLAY на DISPLAY = axis.
Пример настройки sim / axis.ini изначально готов к использованию интерфейса AXIS.
Пример работы
- Запустите LinuxCNC.
- Сбросьте аварийный останов (F1) и активируйте питание машины (F2).
- Задайте начальные позиции по осям.
- Загрузите файл с g-кодом.
- Проверьте программу в предварительном просмотре.
- Установите заготовку.
- Настройте смещения каждой оси, перемещая и используя Touch Off при необходимости.
- Запустите выполнение программы.
Примечание | Запуск программы повторно зависит от настроек: может потребоваться загрузить материал и перенастроить смещения либо просто снова запустить программу. |
Окно интерфейса AXIS
Элементы интерфейса AXIS включают:
- Экран просмотра, где отображается:
- предварительный просмотр текущего файла (например, axis.ngc) и текущее положение управляемой точки станка. Отображается также пройденный путь backplot.
- крупный дисплей, показывающий положение и все смещения.
- Меню и панель инструментов для управления действиями.
- Вкладка «Ручное управление» — позволяет двигать станок, управлять шпинделем и охлаждением.
- Вкладка MDI — ввод вручную команд G-кода и отображение активных G-кодов.
- Переопределение подачи — регулировка скорости движений (максимум по умолчанию 120%, настраивается в ini-файле).
- Переопределение шпинделя — настройка скорости шпинделя.
- Скорость толчкового режима — настройка в пределах, указанных в ini-файле.
- Максимальная скорость — ограничение скорости всех программных движений, кроме синхронизированных движений шпинделя.
- Текстовый экран, отображающий загруженный G-код.
- Строка состояния, отображающая статус машины (например, питание включено, инструмент не вставлен, положение относительное и фактическое).
Меню элементов
Некоторые пункты меню могут быть недоступны, в зависимости от настроек файла .ini. Подробнее — в главе INI.
Меню «Файл»
- Открыть… — стандартное окно для загрузки файла AG-кода в AXIS. Если активирован фильтр, он также доступен. Подробнее — в разделе «ФИЛЬТР».
- Последние файлы — список недавно открытых файлов.
- Изменить… — открыть файл G-кода для редактирования в указанном редакторе ini-файла.
- Перезагрузить — перезагрузить текущий файл G-кода после редактирования или для нового запуска.
- Сохранить g-код как… — сохранить файл под новым именем.
- Свойства — суммарное время движения без учета ускорений и траекторий.
- Редактировать таблицу инструментов… — редактирование таблицы инструментов при наличии редактора.
- Перезагрузить таблицу инструментов — перезагрузка таблицы после изменений.
- Редактор релейной логики — редактирование релейной схемы (классическая релейная схема). Подробнее — в главе Classicladder.
- Выход — завершение сеанса LinuxCNC.
Меню «Машина»
- Переключить аварийный останов F1 — изменение состояния аварийного останова.
- Переключить питание машины F2 — активация питания при выключенном аварийном останове.
- Запуск программы — старт текущей программы с начала.
- Запуск с выбранной строки — выполнение программы с указанной строки (внимание: инструмент перемещается в соответствующую позицию перед началом выполнения).
Внимание | Не используйте «Запуск из выбранной строки», если программа содержит подпрограммы. |
- Шаг — пошаговое выполнение программы.
- Пауза — временная остановка программы.
- Возобновить — продолжить выполнение после паузы.
- Стоп — остановка выполнения программы; перезапуск начнет программу сначала.
- Остановить на M1 — пауза программы при достижении M1.
- Пропуск строк с «/» — строки, начинающиеся с «/», пропускаются.
- Очистить историю MDI — очистка истории команд MDI.
- Копировать из истории MDI — копирование истории в буфер обмена.
- Вставить в историю MDI — вставка из буфера в историю MDI.
- Калибровка — запуск мастера калибровки (emccalib.tcl) для настройки параметров.
- Конфигурация HAL — окно для наблюдения за параметрами и сигналами HAL.
- HAL Meter — окно для мониторинга одного вывода или сигнала HAL.
- HAL Scope — виртуальный осциллограф для отображения значений HAL.
- Статус LinuxCNC — отображение состояния системы LinuxCNC.
- Уровень отладки — окно для настройки уровня отладки.
- Homing — возврат осей на начальную позицию.
- Unhoming — выход осей из начальной позиции.
- Обнуление системы координат — сброс смещений в текущей системе координат.
- Сохранить смещение (Touch Off) — установка текущей позиции в качестве смещения.
Обзор
Раздел Вид в меню выбора дисплея AXIS позволяет выбрать ракурсы сверху, спереди и сбоку. Эти ориентации актуальны при вертикальной оси Z, направленной вверх, что типично для фрезерных и электроэрозионных станков, а также вертикальных токарных станков с револьверной головкой, где заготовка вращается под инструментом.
Однако термины Верхний, Передний и Боковой могут запутать при использовании на других станках с ЧПУ, например, на стандартных токарных станках с горизонтальной осью Z, горизонтальных фрезерных или перевернутых вертикальных станках с револьверной головкой, где ось Z направлена вниз.
Помните, что положительное направление оси Z (почти всегда) удаляется от заготовки. Учитывайте конструкцию вашего станка и адаптируйте настройки дисплея соответственно.
- Отображение в дюймах — отображение AXIS в дюймах.
- Отображение в мм — отображение AXIS в миллиметрах.
- Скрыть программу — возможность отключить предварительный просмотр загруженной программы G-кода.
- Скрыть ускорение программы — возможность отключить отображение быстрых ходов (G0), отображаемых голубым цветом.
- Альфа-смешение программы — улучшает визуализацию сложных программ, но может замедлить отображение.
- График в реальном времени — возможность отключения выделения путей скорости подачи при перемещении инструмента.
- Скрыть инструмент — возможность скрыть отображение инструмента (конуса/цилиндра).
- Показать границы — отображение максимального хода по каждой оси.
- Скрыть смещения — отключение отображения смещений, установленных функцией Homing.
- Показать скорость — отображение текущей скорости станка для мониторинга.
- Скрыть расстояние до точки назначения — отключение индикатора расстояния до точки назначения после отладки программы.
- Очистить график — очищает пути кода G перед повторным выполнением программы.
- Позиция команды — показывает координаты, к которым LinuxCNC попытается переместить станок.
- Фактическая позиция — показывает текущее положение, замеренное энкодерами.
- Позиция станка — текущая позиция станка без учета смещений, установленных Homing.
- Относительная позиция — позиция станка с учётом смещений G5x, G92 и G43.
Помощь
- Об Axis — общая информация.
- Краткий справочник — список клавишных комбинаций.
Панель инструментов
На панели инструментов дисплея Axis, слева направо, расположены кнопки (клавиши для быстрого доступа указаны в скобках):
- Аварийный останов [F1]
- Включение машины [F2]
- Открыть файл G-кода [O]
- Обновить текущий файл [Ctrl-R]
- Выполнить текущий файл [R]
- Выполнить следующую строку [T]
- Приостановить выполнение [P] Продолжить выполнение [S]
- Остановить выполнение [ESC]
- Пропустить строки [Alt-M- /]
- Необязательная пауза [Alt-M-1]
- Приблизить
- Уменьшить
- Вид сверху
- Повернутый вид сверху
- Вид сбоку
- Передний план
- Перспективный вид
- Режимы перетаскивания и поворота [D]
- Очистить график в реальном времени [Ctrl-K]
Графическая область
Отображение координат
В левом верхнем углу отображаются координаты по каждой оси. Если ось установлена в начальное положение, рядом с числом отображается соответствующий символ.
Символ ограничения появляется рядом с числом координатной позиции, если ось достигает предела.
Целевая и фактическая позиция
На дисплее фактическая позиция станка отличается от целевой позиции. Если инструмент движется, значения могут отличаться, так как из-за инерции и свойств сервоприводов позиции слегка расходятся.
Отображение программы
Сверху можно видеть G-коды, загруженные в AXIS. Строка G-кода, выполняющаяся в данный момент, подсвечена красным цветом.
Предварительный просмотр
После загрузки файла его изображение можно увидеть в окне визуализации. Линии для перемещений без нагрузки (G0) показаны голубым цветом, а движения с подачей (G1) отмечены сплошными белыми линиями. Ожидания (например, по команде G4) отображаются как маленькие розовые метки X.
Плавные переходы без нагрузки перед движениями с подачей не отображаются в предварительном просмотре. Быстрые ходы, следующие после смены инструмента T «n», также не будут видны до первого движения с подачей. Для отключения этой функции можно задать команду G1 без параметров перемещения перед командой G0.
Границы программы
Минимальные и максимальные координаты программы указаны на концах осей. В центре отображается разница между координатами.
Когда какая-то из координат выходит за мягкие ограничения в файле .ini, соответствующая величина выделяется другим цветом и заключена в рамку. На рисунке ниже, например, по оси X превышен максимальный предел, что указано рамкой вокруг значения. Минимальное перемещение программы по оси X составляет -1,95, максимальное — 1,88, а для выполнения программы требуется 3,83 дюйма по оси X. Чтобы сохранить программу в пределах рабочей зоны, необходимо сместить ее и заново установить касание X.
Индикатор инструмента
При отсутствии установленного инструмента положение указано индикатором инструмента. Индикатор инструмента не содержит информации о форме, длине или радиусе.
Когда инструмент загружен (например, через команду T1 M6), индикатор меняет форму на цилиндр, демонстрируя диаметр инструмента, указанный в таблице инструментов.
Отображение следа
Следы от движений станка видны в отображении следа. Различные типы движений имеют собственные цвета: для толчков используется желтый, для ускоренных движений – бледно-зеленый, для прямолинейных с подачей – красный, и пурпурный – для круговых движений с подачей.
Сетка
Сетка может быть включена в ортогональных видах через меню «Сетка» в разделе «Просмотр». При включенной сетке она отображается в верхней части экрана, и виды сверху поворачиваются. Если система координат остается в стандартном положении, сетка видна также спереди и сбоку. Настройки сетки определяются параметрами [DISPLAY]GRIDS
в конфигурационном файле или по умолчанию составляют 10mm 20mm 50mm 100mm 1in 2in 5in 10in
.
Очень мелкая сетка может снижать производительность.
Взаимодействие с элементами
Щелчок левой кнопкой мыши на элементе предварительного просмотра выделяет его на графическом и текстовом экранах. Щелчок по пустой области снимает выделение.
Перетаскивание с зажатой левой кнопкой мыши смещает изображение, а удержание Shift и левой кнопки или колесика мыши позволяет вращать его. Выделенная линия определяет центр вращения, в противном случае центр программы.
Увеличение и уменьшение можно выполнить колесиком мыши или правой кнопкой мыши.
Используя значки предустановленных видов или нажав V, можно выбрать несколько вариантов просмотра.
Текстовое отображение
Щелчок левой кнопкой мыши по строке программы выделяет ее в текстовом и графическом отображениях.
Во время выполнения программы текущая строка подсвечивается красным. Если ни одна строка не выбрана, текстовое окно автоматически прокручивается к текущей строке.
Ручное управление
При включенной, но не выполняющей программу машине элементы «Ручное управление» могут быть использованы для движения машины, управления шпинделем и охлаждением.
Когда программа активна или станок выключен, ручное управление становится недоступно.
Некоторые из функций могут отсутствовать на разных моделях станков. Например, если вывод spindle.0.brake не подключен, то кнопка «Остановка» не будет доступна. Установка переменной AXIS_NO_AUTOCONFIGURE покажет все элементы независимо от конфигурации.
Группа осей
Элемент Axis позволяет вручную двигать станок. Сначала выберите ось, затем нажмите + или — для направления движения. Первые четыре оси можно также контролировать клавишами (стрелки для X и Y, PAGE UP и PAGE DOWN для Z, а также [ и ] для A).
Выбор «Непрерывный» позволяет двигаться, пока удерживается кнопка. При других значениях станок переместится на заданное расстояние при каждом нажатии. Доступные значения по умолчанию – 0,1000, 0,0100, 0,0010, 0,0001.
Параметр [KINS] JOINTS в конфигурации определяет количество соединений. Каждое соединение может быть настроено для установки начальной точки. Последовательности исходных точек задают порядок для исходных положений.
При всех настроенных последовательностях кнопка возврата укажет Home All. Нажатие Home All или Ctrl-HOME начнет возврат в исходное положение всех осей. Кнопка HOME настроит выбранную ось независимо от последовательности.
Если не все оси имеют последовательности, кнопка покажет Home Axis, и каждая ось будет устанавливаться вручную.
В меню «Станок / Направление» можно также настраивать оси и снимать их с исходного положения.
Функция самонаведения (некалиброванная кинематика)
Этот процесс аналогичен Identity Kinematics, но для каждого соединения применяется индивидуальный выбор номера. При возврате на домашнюю позицию, если все соединения настроены и последовательности исходных положений определены, на кнопке будет надпись Home All. В противном случае на кнопке будет отображаться Home Joint, и возврат произойдет индивидуально для каждого соединения.
Кнопка Touch Off
Нажатие Touch Off или END задает новое смещение G5x для выбранной оси, при этом текущие координаты оси устанавливаются на заданное значение. Можно использовать выражения по стандартам rs274ngc, однако переменные не поддерживаются. Результирующее значение вводится как число.
Смещение инструмента Tool Touch Off
При нажатии Tool Touch Off текущее положение вершины инструмента устанавливается как введенная координата, тем самым корректируя длину и смещение загруженного инструмента.
Ограничение переопределений
При активации функции Override Limits станок временно может игнорировать физический концевой выключатель. Параметр Override доступен только при срабатывании концевого выключателя и сбрасывается после единственного толчкового движения. Если ось имеет отдельные положительные и отрицательные концевые выключатели, то в LinuxCNC толчок будет возможен только в правильном направлении. Мягкие пределы остаются активными, и отключить их можно только сняв ось с исходного положения.
Управление шпинделем
Первый ряд кнопок определяет направление вращения шпинделя: против часовой стрелки, остановка, по часовой стрелке. Против часовой стрелки отображается, только если шпиндель указан в конфигурации HAL. Во втором ряду можно регулировать скорость вращения, а флажок третьего ряда отвечает за включение и выключение тормоза шпинделя. На вашем устройстве могут быть не все элементы этой группы. При запуске вращения шпинделя начальная скорость S равна 1.
Система охлаждения
Две кнопки управляют функциями охлаждения Mist и Flood. В зависимости от конфигурации вашего станка возможна видимость лишь некоторых элементов этой группы.
Ввод MDI
MDI дает возможность ручного ввода команд G-кода. Если аппарат отключен или работает программа, MDI недоступен.
- История — отображает команды, введенные ранее в этом сеансе.
- Команда MDI — ввод команды g-кода для выполнения. Нажмите Enter или кнопку Go для исполнения.
- Активные G-коды — показывает модальные коды, находящиеся в памяти интерпретатора. Например, G54 указывает, что все координаты будут учитывать смещение G54. В режиме Auto активные коды соответствуют интерпретатору после упреждающего чтения.
Регулировка подачи
Этот ползунок позволяет изменить скорость подачи. Если в программе указана скорость F60, а ползунок установлен на 120%, то фактическая скорость подачи будет 72.
Настройка скорости шпинделя
С помощью ползунка можно изменить скорость шпинделя. Если в программе стоит значение S8000, а ползунок установлен на 80%, то конечная скорость шпинделя будет 6400. Элемент появляется только при подключении spindle.0.speed-out в конфигурации HAL.
Регулятор подачи
Регулируя этот ползунок, можно управлять скоростью подачи. Например, при установке на 1 дюйм в минуту толчковое движение на 0,01 дюйма займет около 0,6 секунды или 1/100 минуты. Левое положение соответствует медленным подачам, правое – быстрым, что позволяет настраивать широкий диапазон скоростей с точностью там, где это необходимо.
Если есть поворотная ось, появляется дополнительный ползунок для управления скоростью подачи на оси A, B и C.
Ограничение максимальной скорости
Этот ползунок позволяет установить верхний предел скорости. Он будет ограничивать максимальную скорость перемещения для всех операций, кроме тех, которые требуют синхронизации со шпинделем.
Клавиатурное управление
В системе AXIS почти все функции могут выполняться с клавиатуры. Полный список горячих клавиш доступен в AXIS Quick Reference, который можно открыть через меню «Справка» > «Краткий справочник». Некоторые комбинации недоступны в режиме MDI.
Клавиши коррекции подачи
В ручном режиме клавиши коррекции подачи работают по-иному. Клавиши 12345678 позволяют выбрать ось, если она настроена. Например, для трех осей будут доступны 0, 1 и 2. В остальных случаях цифровые клавиши изменяют подачу. Во время выполнения программы клавиши 1234567890 задают коррекцию подачи от 0% до 100%.
В таблице ниже указаны самые часто используемые комбинации клавиш.
Keystroke | Action Taken | Mode |
---|---|---|
F1 | Переключить аварийный останов | Any |
F2 | Включение / выключение машины | Any |
`, 1.. 9, 0 | Установите коррекцию подачи от 0% до 100% | Varies |
X, ` | Активировать первую ось | Manual |
Y, 1 | Активировать вторую ось | Manual |
Z, 2 | Активировать третью ось | Manual |
A, 3 | Активировать четвертую ось | Manual |
I | Выберите шаг | Manual |
C | Непрерывное перемещение | Manual |
Control-Home | Выполнить последовательность наведения | Manual |
End | Touch off: установить смещение G5x для активной оси. | Manual |
Left, Right | Перемещение первой оси | Manual |
Up, Down | Перемещение второй оси | Manual |
Pg Up, Pg Dn | Перемещение третей оси | Manual |
[, ] | Перемещение четвертой оси | Manual |
O | Открыть файл | Manual |
Ctrl -R | Перезагрузить файл | Manual |
R | Запустить файл | Manual |
P | Приостановить выполнение | Auto |
S | Возобновить выполнение | Auto |
ESC | Остановить выполнение | Auto |
Ctrl-K | Очистить backplot | Auto/Manual |
V | Цикл между предустановленными представлениями | Auto/Manual |
Shift-Left,Right | Быстрое перемещение по оси X | Manual |
Shift-Up,Down | Быстрое перемещение по оси Y | Manual |
Shift-PgUp, PgDn | Быстрое перемещение по оси Z | Manual |
@ | Переключатель Actual/Commanded | Any |
# | Переключатель Relative/Machine | Any |
Показ текущего состояния LinuxCNC (linuxcnctop)
AXIS включает инструмент linuxcnctop, отображающий состояние LinuxCNC. Чтобы его запустить, перейдите в Machine > Show LinuxCNC Status.
Имена параметров указаны в левом столбце, а текущие значения — в правом. Если параметр недавно изменился, значение подсвечивается красным.
Интерфейс MDI
AXIS также предоставляет программу mdi
, которая позволяет вводить MDI-команды в текстовом формате. Для запуска откройте терминал и введите:
mdi
После запуска отображается приглашение MDI>. Пустая строка выводит текущее положение, а введенная команда отправляется на выполнение в LinuxCNC.
Пример сеанса mdi:
$ mdi
MDI>
(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
MDI> G1 F5 X1
MDI>
(0.5928500000000374, 0.0, 0.0, 0.0, 0.0, 0.0)
MDI>
(1.0000000000000639, 0.0, 0.0, 0.0, 0.0, 0.0)
Внешний интерфейс Axis
AXIS предлагает программу Axis-remote для отправки определенных команд. Для получения доступных команд запустите axis-remote —help. Среди команд: проверка состояния (—ping), загрузка файла, перезагрузка активного файла (—reload), завершение работы (—exit).
Ручная замена инструмента
LinuxCNC поддерживает HAL-компонент hal_manualtoolchange для пользовательского пространства, который отображает окно подсказки, указывающее, какой инструмент необходимо заменить при активации команды M6. После подтверждения действия нажатием «OK» программа продолжает работу.
Компонент hal_manualtoolchange содержит контакт HAL для кнопки, которая может быть подключена к физической клавише, чтобы завершить процесс смены инструмента и закрыть окно (hal_manualtoolchange.change_button).
Файл конфигурации HAL lib / hallib / axis_manualtoolchange.hal содержит необходимые команды HAL для работы с этим компонентом.
hal_manualtoolchange доступен для использования даже без интерфейса AXIS, и особенно удобен, если у вас настроены заранее установленные инструменты и вы применяете таблицу инструментов.
Примечание | Корректировка не будет видна в предварительном просмотре после команды T «n» до следующего движения подачи после M6. Это может запутать пользователя. Чтобы деактивировать функцию для текущей смены инструмента, установите команду G1 без перемещения после T «n». |
Python модули
AXIS поддерживает набор Python-модулей, полезных для других применений. Для получения дополнительной информации об отдельном модуле можно использовать команду pydoc «имя модуля» или ознакомиться с исходным кодом. Доступные модули:
- emc предоставляет доступ к каналам команд, статуса и ошибок LinuxCNC.
- gcode позволяет работать с интерпретатором rs274ngc.
- rs274 предлагает вспомогательные средства для работы с файлами rs274ngc.
- hal поддерживает создание пользовательских HAL-компонентов на Python.
- _togl предлагает виджет OpenGL для приложений на базе Tkinter.
- minigl обеспечивает доступ к используемому в AXIS набору команд OpenGL.
Для использования модулей в собственных сценариях убедитесь, что путь к каталогам модулей добавлен в путь Python. При запуске установленной версии LinuxCNC это происходит автоматически. Если вы запускаете версию вместе, установите scripts / rip-environment.
Работа с AXIS в токарном режиме
Добавив строку LATHE = 1 в раздел [DISPLAY] файла ini, AXIS переключится в токарный режим. Ось Y не будет отображаться, вид будет скорректирован: ось Z расположится горизонтально, а ось X — по вертикали внизу экрана. При этом будут скрыты некоторые элементы управления (например, для просмотра). Показания X заменяются диаметром и радиусом.
Нажатие клавиши V откроет весь файл, если он загружен.
В этом режиме отображается форма загруженного инструмента (если она задана).
Чтобы переключить отображение на обратный токарный режим, добавьте LATHE = 1 и BACK_TOOL_LATHE = 1 в раздел [DISPLAY] файла ini. Вид изменится, и инструмент переместится на заднюю сторону оси Z.
Режим Foam Cutting в AXIS
Включив параметр FOAM = 1 в секции [DISPLAY] ini-файла, AXIS перейдет в режим резки пенопласта. На предварительном просмотре оси XY и UV отображаются на разных плоскостях, а активные движения между плоскостями связаны линиями. Специальные команды (XY_Z_POS) и (UV_Z_POS) задают Z-координаты для этих плоскостей, по умолчанию они равны 0 и 1,5 единиц.
Расширенная настройка
При запуске AXIS создает HAL-контакты GUI, а затем выполняет HAL-файл, указанный как [HAL] POSTGUI_HALFILE в ini-файле. Только один файл GUI доступен для использования. Все команды HAL, взаимодействующие с GUI-контактами, должны размещаться в post gui файле.
Для дополнительной информации о параметрах ini, которые настраивают работу AXIS, обратитесь к секции «Отображение» документации по настройке INI.
Фильтры программ
AXIS позволяет обрабатывать загруженные файлы с помощью программных фильтров. Эти фильтры могут выполнять задачи любой сложности: от проверки завершения файла командой M2 до преобразования изображения в G-код.
Работа фильтров настраивается секцией [FILTER] ini-файла. Сперва укажите PROGRAM_EXTENSION для каждого типа файла, затем определите программу для каждого расширения. Она получает имя файла как первый аргумент и выводит rs274ngc-код в стандартный вывод, отображаемый в текстовой области. Следующий пример добавляет поддержку преобразования изображений в G-код:
[FILTER]
PROGRAM_EXTENSION =.png,.gif Greyscale Depth Image
png = image-to-gcode
gif = image-to-gcode
Также можно указать переводчик:
PROGRAM_EXTENSION =.py Python Script
py = python
С помощью этой опции можно запускать любой Python-скрипт, вывод которого будет рассматриваться как g-код. Один из примеров сценариев доступен по адресу nc_files / holecircle.py, он создает g-код для сверления отверстий по окружности.
Если установлена переменная окружения AXIS_PROGRESS_BAR, строки, записываемые в stderr в формате
FILTER_PROGRESS=%d
установят индикатор прогресса AXIS на указанный процент. Эта функция полезна для фильтров с продолжительным выполнением.
База данных ресурсов X
Настройка цветов большинства элементов интерфейса AXIS осуществляется через базу данных ресурсов X. Например, файл axis_light_background меняет цвета в окне фоновой диаграммы, устанавливая темные линии на белом фоне, а также является источником для индивидуальных настроек в области отображения. Файл axis_big_dro увеличивает размер шрифта для отображения позиции. Чтобы применить эти файлы, выполните следующие команды:
xrdb -merge /usr/share/doc/emc2/axis_light_background
xrdb -merge /usr/share/doc/emc2/axis_big_dro
Современные рабочие среды автоматически применяют некоторые настройки из базы данных ресурсов X, что может негативно сказаться на работе AXIS. Чтобы игнорировать эти настройки по умолчанию и позволить параметрам базы данных ресурсов X переопределять стандартные настройки AXIS, добавьте следующую строку в ваши X-ресурсы:
*Axis*optionLevel: widgetDefault
Это приведет к созданию встроенных параметров на уровне widgetDefault, что позволит ресурсам X (уровень userDefault) переопределять их.
~ /.axisrc
Если файл ~/.axisrc
существует, его содержимое выполняется как код Python сразу перед загрузкой интерфейса AXIS. Содержимое этого файла может изменяться в процессе разработки.
Пример добавления сочетания клавиш Control-Q для выхода:
root_window.bind("<Control-q>", "destroy.")
help2.append(("Control-Q", "Quit"))
Пример, который отключает диалоговое окно «Вы действительно хотите выйти?»:
root_window.tk.call("wm","protocol",".","WM_DELETE_WINDOW","destroy.")
USER_COMMAND_FILE
Python-скрипт, зависящий от конфигурации, может быть указан с помощью настройки файла ini: [DISPLAY] USER_COMMAND_FILE = filename.py. Как и файл ~/.axisrc
, этот скрипт запускается перед отображением интерфейса AXIS. Этот файл относится к настройкам ini-файла, а не к домашнему каталогу пользователя. Если этот файл указан, существующий ~/.axisrc
будет проигнорирован.
user_live_update ()
В интерфейсе AXIS имеется функция-заполнитель с именем user_live_update (), которая вызывается по завершении функции update () класса LivePlotter. Эта функция может быть реализована в скрипте ~/.axisrc
или в скрипте Python, указанном в [DISPLAY] USER_COMMAND_FILE, и использоваться для выполнения пользовательских периодических действий. Возможности этой функции зависят от конкретной реализации интерфейса AXIS и могут изменяться в процессе разработки.
user_hal_pins ()
В графическом интерфейсе AXIS также имеется функция-заполнитель под названием user_hal_pins ().
Она вызывается сразу после обработки файла ~/.axisrc
и перед инициализацией панелей / встроенных вкладок gladevcp.
Эта функция может быть добавлена в скрипт ~/.axisrc
или в файл [DISPLAY] USER_COMMAND_FILE для создания пользовательских выводов HAL с использованием префикса axisui.
Используйте comp как ссылку на экземпляр компонента HAL.
Функция HAL comp.ready () вызывается сразу после возвращения из этой функции.
Внешний редактор
Опции в меню File> Edit… и File> Edit Tool Table… становятся доступны после определения редактора в разделе ini [DISPLAY]. Полезные варианты включают EDITOR = gedit и EDITOR = gnome-terminal -e vim. Для более подробной информации обратитесь к разделу «Отображение» в руководстве по конфигурации INI.
Виртуальная панель управления
AXIS может отображать настраиваемую виртуальную панель управления на правой стороне. Вы можете программировать кнопки, индикаторы, дисплеи данных и многое другое. Для получения дополнительной информации ознакомьтесь с разделами о PyVCP и GladeVCP.
Предварительный просмотр
Вы можете добавить специальные комментарии в G-код, чтобы управлять поведением функции предварительного просмотра в AXIS. Если необходимо ограничить область предварительного просмотра, используйте эти специальные указатели. Все содержимое, заключенное между (AXIS,hide) и (AXIS,show), не будет отображаться во время предварительного просмотра. Пары (AXIS,hide) и (AXIS,show) должны использоваться последовательно, при этом (AXIS,hide) должен идти первым. Все, что находится после (AXIS,stop), также не будет видно в процессе предварительного просмотра.
Эти комментарии весьма полезны для упрощения предварительного просмотра, особенно когда нужно отладить обширный файл g-кода, отключив отображение частей, которые уже функционируют корректно.
- (AXIS,hide) — Приостанавливает предварительный просмотр (должен быть первым)
- (AXIS,show) — Возобновляет предварительный просмотр (должен следовать за командой hide)
- (AXIS,stop) — Останавливает предварительный просмотр от этой точки до конца файла.
- (AXIS, notify, the_text) — Показывает the_text как информационное сообщение. Это уведомление может оказаться полезным в предварительном просмотре AXIS, когда обычные комментарии (для отладки или информации) не отображаются.
Штифты Axisui
Для улучшения взаимодействия AXIS с физическими поворотными колесами, текущая выбранная настройка в интерфейсе оси также представляется с именем, например, axisui.jog.x. Один из этих выводов будет ИСТИННЫМ, а остальные — ЛОЖНЫМИ. Это предназначено для управления контактами активации режима толчкового движения.
Штифты Axisui
Axis предоставляет контакты Hal для обозначения активного переключателя jog на вкладке Ручное управление.
Type Dir Name
bit OUT axisui.jog.x
bit OUT axisui.jog.y
bit OUT axisui.jog.z
bit OUT axisui.jog.a
bit OUT axisui.jog.b
bit OUT axisui.jog.c
bit OUT axisui.jog.u
bit OUT axisui.jog.v
bit OUT axisui.jog.w
Также Axis имеет контакт Hal для указания шага толчкового движения, выбранного на вкладке «Ручное управление».
Type Dir Name
float OUT axisui.jog.increment
У Axis имеется выходной контакт Hal, который сигнализирует о том, что произошло прерывание. Штифт axisui.abort будет иметь значение TRUE и вернется к FALSE через 0.3 мс.
Type Dir Name
bit OUT axisui.abort
У Axis также есть выходной контакт Hal, указывающий на возникновение ошибки. Штифт axisui.error останется TRUE, пока не будут обработаны все сообщения об ошибках.
Type Dir Name
bit OUT axisui.error
Axis имеет входные контакты Hal, предназначенные для удаления всплывающих уведомлений об ошибках и информационных сообщений.
Type Dir Name
bit IN axisui.notifications-clear
bit IN axisui.notifications-clear-error
bit IN axisui.notifications-clear-info
Также есть входной контакт Hal, который включает или отключает функцию паузы / возобновления.
Type Dir Name
bit IN axisui.resume-inhibit
Советы по настройке оси
Система Axis представляет собой довольно объемный и сложный код, что способствует поддержанию его стабильности, но затрудняет настройку.
В этом разделе мы представим фрагменты кода для изменения поведения или визуальных эффектов интерфейса. Обратите внимание, что внутренний код AXIS может периодически изменяться.
Функционирование этих фрагментов не гарантируется — может потребоваться их корректировка.
Функция обновления
В системе Axis присутствует функция под названием user_live_update, которая вызывается при каждом обновлении AXIS. Вы можете использовать эту функцию для обновления собственных возможностей.
# функция непрерывного обновления def user_live_update(): print 'я печатаюсь при каждом обновлении...'
Отключение диалога закрытия
# отключить диалог о закрытии root_window.tk.call("wm","protocol",".","WM_DELETE_WINDOW","destroy.")
Изменение шрифта текста
# изменить шрифт font = 'sans 11' fname,fsize = font.split() root_window.tk.call('font','configure','TkDefaultFont','-family',fname,'-size',fsize) # обновить текст в вкладках для изменения размера с новым шрифтом root_window.tk.call('.pane.top.tabs','itemconfigure','manual','-text',' Manual - F3 ') root_window.tk.call('.pane.top.tabs','itemconfigure','mdi','-text',' MDI - F5 ') root_window.tk.call('.pane.top.right','itemconfigure','preview','-text',' Preview ') root_window.tk.call('.pane.top.right','itemconfigure','numbers','-text',' DRO ') # шрифт gcode независим root_window.tk.call('.pane.bottom.t.text','configure','-foreground','blue') #root_window.tk.call('.pane.bottom.t.text','configure','-foreground','blue','-font',font) #root_window.tk.call('.pane.bottom.t.text','configure','-foreground','blue','-font',font,'-height','12')
Настройка быстрой скорости с помощью сочетаний клавиш
# используйте комбинацию клавиш control + ` или 1-0 для настройки скорости перемещения и оставьте ` или 1-0 для скорости подачи # также добавляет текст для быстрого доступа в помощи help1.insert(10,("Control+ `,1..9,0", _("Установить быструю переопределение от 0% до 100%")),) root_window.bind('<Control-Key-quoteleft>',lambda event: set_rapidrate(0)) root_window.bind('<Control-Key-1>',lambda event: set_rapidrate(10)) root_window.bind('<Control-Key-2>',lambda event: set_rapidrate(20)) root_window.bind('<Control-Key-3>',lambda event: set_rapidrate(30)) root_window.bind('<Control-Key-4>',lambda event: set_rapidrate(40)) root_window.bind('<Control-Key-5>',lambda event: set_rapidrate(50)) root_window.bind('<Control-Key-6>',lambda event: set_rapidrate(60)) root_window.bind('<Control-Key-7>',lambda event: set_rapidrate(70)) root_window.bind('<Control-Key-8>',lambda event: set_rapidrate(80)) root_window.bind('<Control-Key-9>',lambda event: set_rapidrate(90)) root_window.bind('<Control-Key-0>',lambda event: set_rapidrate(100)) root_window.bind('<Key-quoteleft>',lambda event: set_feedrate(0)) root_window.bind('<Key-1>',lambda event: set_feedrate(10)) root_window.bind('<Key-2>',lambda event: set_feedrate(20)) root_window.bind('<Key-3>',lambda event: set_feedrate(30)) root_window.bind('<Key-4>',lambda event: set_feedrate(40)) root_window.bind('<Key-5>',lambda event: set_feedrate(50)) root_window.bind('<Key-6>',lambda event: set_feedrate(60)) root_window.bind('<Key-7>',lambda event: set_feedrate(70)) root_window.bind('<Key-8>',lambda event: set_feedrate(80)) root_window.bind('<Key-9>',lambda event: set_feedrate(90)) root_window.bind('<Key-0>',lambda event: set_feedrate(100))
Чтение файла INI
# извлечение элемента из ini файла machine = inifile.find('EMC','MACHINE') print 'название машины =',machine
Получение статуса linuxcnc
# статус linuxcnc можно считывать из s. print s.actual_position print s.paused
Изменение текущего вида
# установка вида предварительного просмотра # допустимые виды: view_x, view_y, view_y2, view_z, view_z2, view_p commands.set_view_z()
Создание новых выводов AXISUI HAL
def user_hal_pins(): comp.newpin('my-new-in-pin', hal.HAL_BIT, hal.HAL_IN) comp.ready()
Создание нового компонента и его выводов HAL
# создание компонента mycomp = hal.component('my_component') mycomp.newpin('idle-led',hal.HAL_BIT,hal.HAL_IN) mycomp.newpin('pause-led',hal.HAL_BIT,hal.HAL_IN) mycomp.ready() # подключение контактов hal.new_sig('idle-led',hal.HAL_BIT) hal.connect('halui.program.is-idle','idle-led') hal.connect('my_component.idle-led','idle-led') # установка контакта hal.set_p('my_component.pause-led','1') # получение контакта 2,8+ ответвление value = hal.get_value('halui.program.is-idle') print 'значение =',type(value),'значение:',value
Переключение вкладок с помощью HAL контактов
# hal контакты из панели GladeVCP не будут готовы при выполнении user_live_update # для чтения их нужно поместить в блок try/except # следующий пример предполагает наличие 5 HAL кнопок в панели GladeVCP, используемых для переключения # вкладок в экране Axis. # названия кнопок: 'manual-tab', 'mdi-tab', 'preview-tab', 'dro-tab', 'user0-tab' # вкладка user_0, если она существует, будет первой встроенной вкладкой GladeVCP # для ветки linuxCNC 2.8+ def user_live_update(): try: if hal.get_value('gladevcp.manual-tab'): root_window.tk.call('.pane.top.tabs','raise','manual') elif hal.get_value('gladevcp.mdi-tab'): root_window.tk.call('.pane.top.tabs','raise','mdi') elif hal.get_value('gladevcp.preview-tab'): root_window.tk.call('.pane.top.right','raise','preview') elif hal.get_value('gladevcp.numbers-tab'): root_window.tk.call('.pane.top.right','raise','numbers') elif hal.get_value('gladevcp.user0-tab'): root_window.tk.call('.pane.top.right','raise','user_0') except: pass
Добавление кнопки для возврата на главную страницу
def navigate_home(axis): if s.interp_state == linuxcnc.INTERP_IDLE: home = inifile.find('JOINT_' + str(inifile.find('TRAJ', 'COORDINATES').upper().index(axis)), 'HOME') mode = s.task_mode if s.task_mode != linuxcnc.MODE_MDI: c.mode(linuxcnc.MODE_MDI) c.mdi('G53 G0 ' + axis + home) # создать кнопку для возврата оси Y на ноль root_window.tk.call('button','.pane.top.tabs.fmanual.homey','-text','Вернуться на Y','-command','navigate_home Y','-height','2') # разместить кнопку root_window.tk.call('grid','.pane.top.tabs.fmanual.homey','-column','1','-row','7','-columnspan','2','-padx','4','-sticky','w') # любая функция, вызываемая из tcl, должна быть добавлена в TclCommands TclCommands.navigate_home = navigate_home commands = TclCommands(root_window)
Создание кнопки в ручной панели
# создаем новую кнопку и помещаем ее на панель управления root_window.tk.call('button','.pane.top.tabs.fmanual.mybutton','-text','Моя кнопка','-command','mybutton_clicked','-height','2') root_window.tk.call('grid','.pane.top.tabs.fmanual.mybutton','-column','1','-row','6','-columnspan','2','-padx','4','-sticky','w') # вышеуказанная команда вызывает "mybutton_clicked" при нажатии # другие варианты включают привязку команд нажатия или отпускания (или обоих) к кнопке # эти команды могут добавляться дополнительно или заменять команду нажатия # если замена, удалите '-command','mybutton_clicked' из первой строки # Button-1 = левая кнопка мыши, 2 = правая, 3 = средняя root_window.tk.call('bind','.pane.top.tabs.fmanual.mybutton','<Button-1>','mybutton_pressed') root_window.tk.call('bind','.pane.top.tabs.fmanual.mybutton','<ButtonRelease-1>','mybutton_released') # функции, вызываемые кнопками def mybutton_clicked(): print 'кнопка mybutton была нажата' def mybutton_pressed(): print 'кнопка mybutton была нажата' def mybutton_released(): print 'кнопка mybutton была отпущена' # любая функция, вызываемая из tcl, должна быть добавлена в TclCommands TclCommands.mybutton_clicked = mybutton_clicked TclCommands.mybutton_pressed = mybutton_pressed TclCommands.mybutton_released = mybutton_released commands = TclCommands(root_window)
Получение значений внутренних переменных
# следующие переменные могут быть считаны из экземпляра vars print vars.machine.get() print vars.emcini.get()
active_codes = StringVar
block_delete = BooleanVar
brake = BooleanVar
coord_type = IntVar
display_type = IntVar
dro_large_font = IntVar
emcini = StringVar
exec_state = IntVar
feedrate = IntVar
flood = BooleanVar
grid_size = DoubleVar
has_editor = IntVar
has_ladder = IntVar
highlight_line = IntVar
interp_pause = IntVar
interp_state = IntVar
ja_rbutton = StringVar
jog_aspeed = DoubleVar
jog_speed = DoubleVar
kinematics_type = IntVar
linuxcnctop_command = StringVar
machine = StringVar
max_aspeed = DoubleVar
max_maxvel = DoubleVar
max_queued_mdi_commands = IntVar
max_speed = DoubleVar
maxvel_speed = DoubleVar
mdi_command = StringVar
metric = IntVar
mist = BooleanVar
motion_mode = IntVar
on_any_limit = BooleanVar
optional_stop = BooleanVar
override_limits = BooleanVar
program_alpha = IntVar
queued_mdi_commands = IntVar
rapidrate = IntVar
rotate_mode = BooleanVar
running_line = IntVar
show_distance_to_go = IntVar
show_extents = IntVar
show_live_plot = IntVar
show_machine_limits = IntVar
show_machine_speed = IntVar
show_program = IntVar
show_pyvcppanel = IntVar
show_rapids = IntVar
show_tool = IntVar
show_offsets = IntVar
spindledir = IntVar
spindlerate = IntVar
task_mode = IntVar
task_paused = IntVar
task_state = IntVar
taskfile = StringVar
teleop_mode = IntVar
tool = StringVar
touch_off_system = StringVar
trajcoordinates = StringVar
tto_g11 = BooleanVar
view_type = IntVar
Скрытие виджетов
# скрыть виджет # используйте 'grid' или 'pack' в зависимости от изначального размещения root_window.tk.call('grid','forget','.pane.top.tabs.fmanual.jogf.zerohome.tooltouch')
Изменение метки виджета
# изменить текст на виджете root_window.tk.call('setup_widget_accel','.pane.top.tabs.fmanual.mist','Поток воздуха') # убедитесь, что он виден (это необходимо только если кнопка mist была скрыта) root_window.tk.call('grid','.pane.top.tabs.fmanual.mist','-column','1','-row','5','-columnspan','2','-padx','4','-sticky','w')
Перенаправление существующей команды
# захват существующей команды # изначально кнопка mist вызывает функцию mist root_window.tk.call('.pane.top.tabs.fmanual.mist','configure','-command','intercepted_command') # новая функция def intercepted_command(): print 'команда mist была перехвачена' # добавьте функцию в TclCommands TclCommands.intercepted_command = intercepted_command commands = TclCommands(root_window)
Изменение интерфейса управления
# изменить экран DRO root_window.tk.call('.pane.top.right.fnumbers.text','configure','-foreground','green','-background','black')
Модификация кнопок панели инструментов
# модификация кнопки стиля root_window.tk.call('.pane.top.tabs.fmanual.tooltouch','configure','-relief','raised')
Удаление кнопок
# удалить кнопку, чтобы она не отображалась root_window.tk.call('grid','remove','.pane.top.tabs.fmanual.tooltouch')
Изменение цвета кнопок
# изменение цвета кнопки root_window.tk.call('.pane.top.tabs.fmanual.tooltouch','configure','-background','green','-foreground','black')
Установка значений по умолчанию для переменных
# установка значений по умолчанию для переменных active_codes.set('S') block_delete.set(False) brake.set(False) coord_type.set(0) display_type.set(0) dro_large_font.set(0) emcini.set('/home/machine/ini') exec_state.set(0) feedrate.set(0) flood.set(False) grid_size.set(0.5) has_editor.set(0) has_ladder.set(0) highlight_line.set(0) interp_pause.set(0) interp_state.set(0) ja_rbutton.set('off') jog_aspeed.set(0.0) jog_speed.set(0.0) kinematics_type.set(0) linuxcnctop_command.set('') machine.set('LinuxCNC') max_aspeed.set(0.0) max_maxvel.set(0.0) max_queued_mdi_commands.set(0) max_speed.set(0.0) maxvel_speed.set(0.0) mdi_command.set('') metric.set(0) mist.set(False) motion_mode.set(0) on_any_limit.set(False) optional_stop.set(False) override_limits.set(False) program_alpha.set(0) queued_mdi_commands.set(0) rapidrate.set(0) rotate_mode.set(False) running_line.set(0) show_distance_to_go.set(0) show_extents.set(0) show_live_plot.set(0) show_machine_limits.set(0) show_machine_speed.set(0) show_program.set(0) show_pyvcppanel.set(0) show_rapids.set(0) show_tool.set(0) show_offsets.set(0) spindledir.set(0) spindlerate.set(0) task_mode.set(0) task_paused.set(0) task_state.set(0) taskfile.set('') teleop_mode.set(0) tool.set('') touch_off_system.set('manual') trajcoordinates.set('') tto_g11.set(False) view_type.set(0)
Заключение
Эти примеры предоставляют полезные советы по созданию и настройке пользовательского интерфейса с помощью Tkinter для LinuxCNC, включая создание кнопок, изменение меток и управление внутренними переменными. Используйте их как основу для разработки собственного интерфейса управления.