Организация MyGUI: различия между версиями
Вopoн226 (обсуждение | вклад) |
Вopoн226 (обсуждение | вклад) |
||
| Строка 40: | Строка 40: | ||
== Файл 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 == | ||
Версия 19:09, 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 в папку <имя_пользователя>/linuxcnc-dev/share/linuxcnc
Файл start
Файл start в папке <имя_пользователя>/linuxcnc-dev
В Система — Параметры — Запускаемые приложения прописываем автозагрузку start
Использование halshow
Если у Вас в файле mygui прописан полноэкранный режим, а Вам необходимо проверить, как работают пины Вашей конфигурации станка,то необходимо сделать следующее:
Ctrl + Alt + T - вызвать терминал
Далее в терминале выполняем
cd linuxcnc-dev/tcl/bin wish halshow.tcl
Появляется окно halshow, в котором можно посмотреть всё, что есть в нашем станке.
Использование пользовательской M-команды
Если используем пользовательскую M-команду, то размещаем её, например, файл M102, в папке <имя_пользователя>/linuxcnc-dev/nc_files
Главное условие, чтобы место, где размещен M-код совпадало с адресом, прописанным в INI-файле:
[DISPLAY] PROGRAM_PREFIX = <адрес папки с M-кодом>
в данном случае:
[DISPLAY] PROGRAM_PREFIX = <имя_пользователя>/linuxcnc-dev/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.