Организация MyGUI

Материал из cnc-club
Перейти к навигации Перейти к поиску

В этой статье попробую коротко описать структуру 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.

ЗАКЛЮЧЕНИЕ

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

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