AXIS — графический интерфейс для LinuxCNC

AXIS - графический интерфейс для LinuxCNC

AXIS — это графический интерфейс LinuxCNC с функцией просмотра в реальном времени и отображением заднего плана. Создан на Python, использует Tk и OpenGL для рендеринга интерфейса.

Если конфигурация еще не поддерживает AXIS, можно внести изменения в файл .ini. В разделе [DISPLAY] замените строку DISPLAY на DISPLAY = axis.

Пример настройки sim / axis.ini изначально готов к использованию интерфейса AXIS.

Пример работы

  1. Запустите LinuxCNC.
  2. Сбросьте аварийный останов (F1) и активируйте питание машины (F2).
  3. Задайте начальные позиции по осям.
  4. Загрузите файл с g-кодом.
  5. Проверьте программу в предварительном просмотре.
  6. Установите заготовку.
  7. Настройте смещения каждой оси, перемещая и используя Touch Off при необходимости.
  8. Запустите выполнение программы.
ПримечаниеЗапуск программы повторно зависит от настроек: может потребоваться загрузить материал и перенастроить смещения либо просто снова запустить программу.

Окно интерфейса 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-кода Открыть файл 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.

Границы программы AXIS
Границы программы
Индикатор инструмента

При отсутствии установленного инструмента положение указано индикатором инструмента. Индикатор инструмента не содержит информации о форме, длине или радиусе.

Когда инструмент загружен (например, через команду T1 M6), индикатор меняет форму на цилиндр, демонстрируя диаметр инструмента, указанный в таблице инструментов.

Отображение следа

Следы от движений станка видны в отображении следа. Различные типы движений имеют собственные цвета: для толчков используется желтый, для ускоренных движений – бледно-зеленый, для прямолинейных с подачей – красный, и пурпурный – для круговых движений с подачей.

Сетка

Сетка может быть включена в ортогональных видах через меню «Сетка» в разделе «Просмотр». При включенной сетке она отображается в верхней части экрана, и виды сверху поворачиваются. Если система координат остается в стандартном положении, сетка видна также спереди и сбоку. Настройки сетки определяются параметрами [DISPLAY]GRIDS в конфигурационном файле или по умолчанию составляют 10mm 20mm 50mm 100mm 1in 2in 5in 10in.

Очень мелкая сетка может снижать производительность.

Взаимодействие с элементами

Щелчок левой кнопкой мыши на элементе предварительного просмотра выделяет его на графическом и текстовом экранах. Щелчок по пустой области снимает выделение.

Перетаскивание с зажатой левой кнопкой мыши смещает изображение, а удержание Shift и левой кнопки или колесика мыши позволяет вращать его. Выделенная линия определяет центр вращения, в противном случае центр программы.

Увеличение и уменьшение можно выполнить колесиком мыши или правой кнопкой мыши.

Используя значки предустановленных видов или нажав V, можно выбрать несколько вариантов просмотра.

Текстовое отображение

Щелчок левой кнопкой мыши по строке программы выделяет ее в текстовом и графическом отображениях.

Во время выполнения программы текущая строка подсвечивается красным. Если ни одна строка не выбрана, текстовое окно автоматически прокручивается к текущей строке.

Текущие и выбранные строки AXIS
Текущие и выбранные строки

Ручное управление

При включенной, но не выполняющей программу машине элементы «Ручное управление» могут быть использованы для движения машины, управления шпинделем и охлаждением.

Когда программа активна или станок выключен, ручное управление становится недоступно.

Некоторые из функций могут отсутствовать на разных моделях станков. Например, если вывод 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, однако переменные не поддерживаются. Результирующее значение вводится как число.

Touch Off AXIS
Touch Off
Смещение инструмента Tool Touch Off

При нажатии Tool Touch Off текущее положение вершины инструмента устанавливается как введенная координата, тем самым корректируя длину и смещение загруженного инструмента.

Инструмент Touch Off AXIS
Инструмент Touch Off
Ограничение переопределений

При активации функции Override Limits станок временно может игнорировать физический концевой выключатель. Параметр Override доступен только при срабатывании концевого выключателя и сбрасывается после единственного толчкового движения. Если ось имеет отдельные положительные и отрицательные концевые выключатели, то в LinuxCNC толчок будет возможен только в правильном направлении. Мягкие пределы остаются активными, и отключить их можно только сняв ось с исходного положения.

Управление шпинделем

Первый ряд кнопок определяет направление вращения шпинделя: против часовой стрелки, остановка, по часовой стрелке. Против часовой стрелки отображается, только если шпиндель указан в конфигурации HAL. Во втором ряду можно регулировать скорость вращения, а флажок третьего ряда отвечает за включение и выключение тормоза шпинделя. На вашем устройстве могут быть не все элементы этой группы. При запуске вращения шпинделя начальная скорость S равна 1.

Система охлаждения

Две кнопки управляют функциями охлаждения Mist и Flood. В зависимости от конфигурации вашего станка возможна видимость лишь некоторых элементов этой группы.

Ввод MDI

MDI дает возможность ручного ввода команд G-кода. Если аппарат отключен или работает программа, MDI недоступен.

Вкладка MDI AXIS
Вкладка 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%.

В таблице ниже указаны самые часто используемые комбинации клавиш.

KeystrokeAction TakenMode
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
EndTouch 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Очистить backplotAuto/Manual
VЦикл между предустановленными представлениямиAuto/Manual
Shift-Left,RightБыстрое перемещение по оси XManual
Shift-Up,DownБыстрое перемещение по оси Y Manual
Shift-PgUp, PgDnБыстрое перемещение по оси ZManual
@Переключатель Actual/CommandedAny
#Переключатель Relative/MachineAny
Наиболее часто используемые комбинации клавиш

Показ текущего состояния LinuxCNC (linuxcnctop)

AXIS включает инструмент linuxcnctop, отображающий состояние LinuxCNC. Чтобы его запустить, перейдите в Machine > Show LinuxCNC Status.

AXIS Окно состояния LinuxCNC
Окно состояния LinuxCNC

Имена параметров указаны в левом столбце, а текущие значения — в правом. Если параметр недавно изменился, значение подсвечивается красным.

Интерфейс 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».
Окно смены инструмента вручную AXIS
Окно ручной смены инструмента

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 заменяются диаметром и радиусом.

Использование AXIS в токарном режиме
Работа с AXIS в токарном режиме

Нажатие клавиши V откроет весь файл, если он загружен.

В этом режиме отображается форма загруженного инструмента (если она задана).

форма загруженного инструмента AXIS

Чтобы переключить отображение на обратный токарный режим, добавьте LATHE = 1 и BACK_TOOL_LATHE = 1 в раздел [DISPLAY] файла ini. Вид изменится, и инструмент переместится на заднюю сторону оси Z.

AXIS

Режим Foam Cutting в AXIS

Включив параметр FOAM = 1 в секции [DISPLAY] ini-файла, AXIS перейдет в режим резки пенопласта. На предварительном просмотре оси XY и UV отображаются на разных плоскостях, а активные движения между плоскостями связаны линиями. Специальные команды (XY_Z_POS) и (UV_Z_POS) задают Z-координаты для этих плоскостей, по умолчанию они равны 0 и 1,5 единиц.

Foam Cutting mode AXIS
Режим Foam Cutting

Расширенная настройка

При запуске 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-код для сверления отверстий по окружности.

скрипт g-кода для сверления отверстий по окружности AXIS
Скрипт для сверления отверстий по окружности

Если установлена переменная окружения 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, включая создание кнопок, изменение меток и управление внутренними переменными. Используйте их как основу для разработки собственного интерфейса управления.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.