Организация MyGUI
В этой статье попробую коротко описать структуру MyGUI:
Содержание
Папка MyGUI
Папка MyGUI в папке <имя_пользователя>/linuxcnc/configs
Для удобства отладки и легкого переноса конфигурации на станок расположим все файлы конфигурации и файл описания панели в одной папке. В этой папке находятся:
MyGUI.ini MyGUI.hal mode.hal (прописаны связи пинов панели, пинов halui и пинов linuxcnc) dist.py (пользовательский компонент. Может быть и другой либо другие, либо отсутствовать вообще) tool.tbl mygui (файл, в котором прописаны установки и расположение файла визуальной панели) mygui.glade (визуальная панель, написанная в редакторе Glade)
Файл MyGUI.ini
Прописываем в файле MyGUI.ini
[DISPLAY] DISPLAY = ./mygui #Говорит о том, что скрипт запуска Вашей панели находится в текущей для процесса папке #LinuxCNC устроен так, что в самом начале в качестве текущего назначает каталог с ini файлом INTRO_GRAPHIC = img001.JPG #картинка заставки INTRO_TIME = 5 #время показа заставки PROGRAM_PREFIX = /home/<имя_пользователя>/linuxcnc/nc_files #адрес исполняемых файлов [HAL] HALFILE = MyGUI.hal HALUI = halui #при использовании halui [HALUI] MDI_COMMAND = G92 X0 Y0 Z5 #при использовании MDI-команд MDI_COMMAND = M102 #MDI-команда с пользовательской M-командой
Файл mygui
В файле mygui пишем:
#!/usr/bin/python import pygtk pygtk.require("2.0") import gtk import gladevcp.makepins from gladevcp.gladebuilder import GladeBuilder import hal import sys,os xmlname = "mygui.glade" # Говорит о том, что файл визуальной панели mygui.glade лежит в той же папке class Mygui(object): def on_window1_destroy(self, widget, data=None): print "quit++" gtk.main_quit() def __init__(self): self.builder = gtk.Builder() self.builder.add_from_file(xmlname) halcomp = hal.component("mygui") self.builder.connect_signals(self) self.window = self.builder.get_object("window1") self.window.show() self.window.fullscreen() panel = gladevcp.makepins.GladePanel( halcomp, xmlname, self.builder, None) if __name__ == "__main__": app = Mygui() res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-f", "./mode.hal"]) # Говорит о том, что файл с описанием пинов Вашей визуальной панели mode.hal лежит в той же папке if res: raise SystemExit, res gtk.main()
Файл mygui.glade
Файл mygui.glade - файл визуальной панели, написанный в редакторе Glade. Описание как панели, так и самого редактора не является задачей этой темы.
При повторном запуске нашей панели можем наткнуться на ошибку - панель не желает запускаться...
В Glade добавим к нашему окну: Элементы - window1 - Сигналы: сигнал " on_window1_destroy ".
Теперь при запуске start мы будем пользовать нашу панель.
Файл start
Файл start в папке <имя_пользователя>/linuxcnc
Пример содержимого файла старта нашей конфигурации:
#!/bin/bash cd /home/<имя_пользователя>/linuxcnc . scripts/rip-environment cd /home/<имя_пользователя>/linuxcnc/configs/MyGUI linuxcnc MyGUI.ini
cохранить в файл start без расширения в папке /home/<имя_пользователя>/linuxcnc, сделать его исполняемым (ПКМ по файлу - свойства - права - поставить галку "разрешить исполнять ....") и его запускать двойным кликом.
Для запуска конфигурации при включении компьютера в Система — Параметры — Запускаемые приложения прописываем автозагрузку start
Использование halshow
Если у Вас в файле mygui прописан полноэкранный режим, а Вам необходимо проверить, как работают пины Вашей конфигурации станка,то необходимо сделать следующее:
Ctrl + Alt + T - вызвать терминал
Далее в терминале выполняем
cd /usr/lib/tcltk/linuxcnc/bin wish halshow.tcl
Появляется окно halshow, в котором можно посмотреть всё, что есть в нашем станке.
Использование пользовательской M-команды
Если используем пользовательскую M-команду, то размещаем её, например, файл M102, в папке <имя_пользователя>/linuxcnc/nc_files
Главное условие, чтобы место, где размещен M-код совпадало с адресом, прописанным в INI-файле:
[DISPLAY] PROGRAM_PREFIX = <адрес папки с M-кодом>
в данном случае:
[DISPLAY] PROGRAM_PREFIX = <имя_пользователя>/linuxcnc/nc_files
Чтобы для выполнения команды не требовалось вводить пароль администратора необходимо исправить /etc/sudoers .
Для этого в терминале набираем:
sudo gedit /etc/sudoers
после ввода пароля откроется указанный файл в редакторе Gedit примерного содержания :
# /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # See the man page for details on how to write a sudoers file. # Defaults env_reset и т.д.
В конце нужно прописать строчку:
ALL ALL = NOPASSWD: /sbin/halt, /sbin/shutdown
и сохранить.
Теперь эту команду можно использовать как в программе для станка, так и через MDI-команды. Для этого прописываем в INI-файле:
[HALUI] MDI_COMMAND = <имя M-кода, например, M102>
А запуск этой команды "привязать" к кнопке вашей визуальной панели, например:
net mdi mygui.hal_button<N> halui.mdi-command-<номер команды в INI-файле, начиная с нуля>
Есть одно условие, которое быть выполнено, чтобы исполнить этот M-код - выставленные home по координатам. Если home не выставлен - исполнить эту команду не получится.
Что же делать, чтобы воспользоваться M-кодом, если на вашем станке координаты не имеют home?
Нужно в INI-файле прописать:
[TRAJ] NO_FORCE_HOMING = 1
И теперь M-код будет исполняться в любой момент, даже если у вас нет home.
ЗАКЛЮЧЕНИЕ
Теперь Вы можете копировать Вашу конфигурацию на другой компьютер или станок, и эта конфигурация заработает без специальных настроек системы и адресов...
Это позволяет на одном компьютере держать любое количество конфигураций, которые не будут мешать друг другу.