Организация MyGUI: различия между версиями
Вopoн226 (обсуждение | вклад) |
Вopoн226 (обсуждение | вклад) |
||
| (не показано 14 промежуточных версий этого же участника) | |||
| Строка 5: | Строка 5: | ||
Папка MyGUI в папке <имя_пользователя>/linuxcnc/configs | Папка MyGUI в папке <имя_пользователя>/linuxcnc/configs | ||
| + | Для удобства отладки и легкого переноса конфигурации на станок расположим все файлы конфигурации и файл описания панели в одной папке. | ||
В этой папке находятся: | В этой папке находятся: | ||
MyGUI.ini | MyGUI.ini | ||
MyGUI.hal | MyGUI.hal | ||
mode.hal (прописаны связи пинов панели, пинов halui и пинов linuxcnc) | mode.hal (прописаны связи пинов панели, пинов halui и пинов linuxcnc) | ||
| − | dist.py (пользовательский компонент | + | dist.py (пользовательский компонент. Может быть и другой либо другие, либо отсутствовать вообще) |
tool.tbl | tool.tbl | ||
| + | mygui (файл, в котором прописаны установки и расположение файла визуальной панели) | ||
| + | mygui.glade (визуальная панель, написанная в редакторе Glade) | ||
== Файл MyGUI.ini == | == Файл MyGUI.ini == | ||
Прописываем в файле MyGUI.ini | Прописываем в файле MyGUI.ini | ||
[DISPLAY] | [DISPLAY] | ||
| − | DISPLAY = mygui | + | DISPLAY = ./mygui |
| − | INTRO_GRAPHIC = img001.JPG | + | #Говорит о том, что скрипт запуска Вашей панели находится в текущей для процесса папке |
| − | INTRO_TIME = 5 | + | #LinuxCNC устроен так, что в самом начале в качестве текущего назначает каталог с ini файлом |
| − | PROGRAM_PREFIX = /home/ | + | INTRO_GRAPHIC = img001.JPG |
| + | #картинка заставки | ||
| + | INTRO_TIME = 5 | ||
| + | #время показа заставки | ||
| + | PROGRAM_PREFIX = /home/<имя_пользователя>/linuxcnc/nc_files | ||
| + | #адрес исполняемых файлов | ||
[HAL] | [HAL] | ||
HALFILE = MyGUI.hal | HALFILE = MyGUI.hal | ||
| − | + | HALUI = halui | |
| − | + | #при использовании halui | |
[HALUI] | [HALUI] | ||
| − | MDI_COMMAND = G92 X0 Y0 Z5 | + | MDI_COMMAND = G92 X0 Y0 Z5 |
| − | MDI_COMMAND = M102 | + | #при использовании MDI-команд |
| + | MDI_COMMAND = M102 | ||
| + | #MDI-команда с пользовательской M-командой | ||
== Файл mygui == | == Файл 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 == | ||
| − | Файл mygui.glade в | + | Файл mygui.glade - файл визуальной панели, написанный в редакторе Glade. Описание как панели, так и самого редактора не является задачей этой темы. |
| + | |||
| + | При повторном запуске нашей панели можем наткнуться на ошибку - панель не желает запускаться... | ||
| + | |||
| + | В Glade добавим к нашему окну: Элементы - window1 - Сигналы: сигнал " on_window1_destroy ". | ||
| + | |||
| + | Теперь при запуске start мы будем пользовать нашу панель. | ||
== Файл start == | == Файл start == | ||
| − | Файл start в папке <имя_пользователя>/linuxcnc- | + | Файл start в папке <имя_пользователя>/linuxcnc |
| + | |||
| + | Пример содержимого файла старта нашей конфигурации: | ||
| + | |||
| + | #!/bin/bash | ||
| + | cd /home/<имя_пользователя>/linuxcnc | ||
| + | . scripts/rip-environment | ||
| + | cd /home/<имя_пользователя>/linuxcnc/configs/MyGUI | ||
| + | linuxcnc MyGUI.ini | ||
| − | + | cохранить в файл start без расширения в папке /home/<имя_пользователя>/linuxcnc, | |
| + | сделать его исполняемым (ПКМ по файлу - свойства - права - поставить галку "разрешить исполнять ....") и его запускать двойным кликом. | ||
| + | |||
| + | Для запуска конфигурации при включении компьютера в Система — Параметры — Запускаемые приложения прописываем автозагрузку start | ||
== Использование halshow == | == Использование halshow == | ||
| Строка 46: | Строка 103: | ||
Далее в терминале выполняем | Далее в терминале выполняем | ||
| − | cd linuxcnc | + | cd /usr/lib/tcltk/linuxcnc/bin |
wish halshow.tcl | wish halshow.tcl | ||
| + | |||
Появляется окно halshow, в котором можно посмотреть всё, что есть в нашем станке. | Появляется окно halshow, в котором можно посмотреть всё, что есть в нашем станке. | ||
== Использование пользовательской M-команды == | == Использование пользовательской M-команды == | ||
| − | Если используем пользовательскую M-команду, то размещаем её, например, файл M102, в папке <имя_пользователя>/linuxcnc | + | Если используем пользовательскую M-команду, то размещаем её, например, файл M102, в папке <имя_пользователя>/linuxcnc/nc_files |
Главное условие, чтобы место, где размещен M-код совпадало с адресом, прописанным в INI-файле: | Главное условие, чтобы место, где размещен M-код совпадало с адресом, прописанным в INI-файле: | ||
| Строка 58: | Строка 116: | ||
в данном случае: | в данном случае: | ||
[DISPLAY] | [DISPLAY] | ||
| − | PROGRAM_PREFIX = <имя_пользователя>/linuxcnc | + | PROGRAM_PREFIX = <имя_пользователя>/linuxcnc/nc_files |
Чтобы для выполнения команды не требовалось вводить пароль администратора необходимо исправить /etc/sudoers . | Чтобы для выполнения команды не требовалось вводить пароль администратора необходимо исправить /etc/sudoers . | ||
| Строка 88: | Строка 146: | ||
NO_FORCE_HOMING = 1 | NO_FORCE_HOMING = 1 | ||
И теперь M-код будет исполняться в любой момент, даже если у вас нет home. | И теперь M-код будет исполняться в любой момент, даже если у вас нет home. | ||
| + | |||
| + | == ЗАКЛЮЧЕНИЕ == | ||
| + | Теперь Вы можете копировать Вашу конфигурацию на другой компьютер или станок, и эта конфигурация заработает без специальных настроек системы и адресов... | ||
| + | |||
| + | Это позволяет на одном компьютере держать любое количество конфигураций, которые не будут мешать друг другу. | ||
Текущая версия на 21:01, 29 мая 2014
В этой статье попробую коротко описать структуру 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.
ЗАКЛЮЧЕНИЕ
Теперь Вы можете копировать Вашу конфигурацию на другой компьютер или станок, и эта конфигурация заработает без специальных настроек системы и адресов...
Это позволяет на одном компьютере держать любое количество конфигураций, которые не будут мешать друг другу.