Две конфигурации с разными MyGUI на одном компе (РЕШЕНО)

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Две конфигурации с разными MyGUI на одном компе (РЕШЕНО)

Сообщение Ворон226 »

Хочется разобраться вот в каком вопросе:

Когда мы "собираем" станок на базе AXIS-а, то конфигурацию прописываем в файлах станок.ini, станок.hal и, иногда, в postgui.hal . Затем AXIS, в соответствии с нашими указаниями сам собирает визуальную панель. Это позволяет нам оегко писать и отрабатывать несколько различных конфигураций на одном компе.

Когда мы хотим самостоятельно написать визуальную панель для управления станком, используя, например, редактор Glade, то конфигурация собирается так:

1. В станок.ini пишем:
[DISPLAY]
DISPLAY = mygui

2. Рисуем панель в Glade и сохраняем её в usr/share/linuxcnc под именем mygui.glade

3. Пишем файл mygui загрузки панели, адрес с файлом пинов панели (например, mode.hal) и кладем его в /bin

4. Ну и, конечно, файлы конфигурации и стартовый файл соответственно в home/<имя>/linuxcnc/configs и в home/<имя>/linuxcnc

Вот и вопрос: А КАК ПОСТУПИТЬ СО ВТОРОЙ КОНФИГУРАЦИЕЙ? Что и в каком файле менять, чтобы на компе было несколько стартовых файлов, которые открывали разные панели и конфигурации? Достаточно ли в станок.ini прописать:
[DISPLAY]
DISPLAY = mygui2
а в /bin положить файл mygui2
и в usr/share/linuxcnc файл панели с именем mygui2.glade ???

Подскажите, пожалуйста!
Последний раз редактировалось Ворон226 25 май 2014, 17:33, всего редактировалось 3 раза.
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Две конфигурации станков с различными MyGUI на одном ком

Сообщение Serg »

Да, можно и так, если есть желание развести помойку в системе. :)

А можно и разложить всё по полочкам:
В home/<имя>/linuxcnc/configs/<имя станка>/ кладём все файлы конфигурации.
Скрипт mygui кладём в эту-же папку. В ini пишем:
DISPLAY = ./mygui
т.е. путь указываем относительный.
В самом скрипте, там, где загружается mygui.glade путь к файлу указываем относительный, а сам mygui.glade кладём рядом с ini и hal.

вобщем если всё правильно сделать, то все файлы, для конкретного станка будут находится в одном каталоге, каталог можно будет перемещать куда попало и всё будет работать даже независимо от того как установлен linuxcnc, из исходников или в систему.

В принципе в одном каталоге можно держать несколько вариантов конфигурации станка, но это уже сами разбирайтесь как - примеров полно. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Две конфигурации станков с различными MyGUI на одном ком

Сообщение Ворон226 »

А вот у меня в скрипте прописан путь так:

import sys,os
BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
datadir = os.path.join(BASE, "usr", "share", "linuxcnc")
xmlname = os.path.join(datadir,"mygui.glade")

Понимаю, что нужно прописать BASE как относительный адрес, но не соображу как...

Абсолютный я бы прописал так:

import sys,os
BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
datadir = os.path.join(BASE, "home", "sun", "linuxcnc", "configs", "skaner")
xmlname = os.path.join(datadir,"mygui.glade")
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Две конфигурации станков с различными MyGUI на одном ком

Сообщение Serg »

Наверно так:
xmlname = "mygui.glade"
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Две конфигурации станков с различными MyGUI на одном ком

Сообщение Ворон226 »

UAVpilot писал(а):Наверно так:
xmlname = "mygui.glade"
Тогда первые строчки вроде и не к чему?
Значит в общем должно выглядеть так?

import sys,os
xmlname = "mygui.glade"
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Две конфигурации станков с различными MyGUI на одном ком

Сообщение Serg »

Да. Если конечно они где-то дальше не используются.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Две конфигурации станков с различными MyGUI на одном ком

Сообщение Ворон226 »

Есть ещё похожее упонимание о файле, в котором описаны кнопки визуальной панели - mode.hal

Код: Выделить всё

if __name__ == "__main__":
	app = Mygui()
	res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-f", "/home/sun/linuxcnc/configs/skaner/mode.hal"])
	if res: raise SystemExit, res
	gtk.main() 
(я точно не стану Мастером Питона - мне бы на примерах уловить, хотя бы поверхностно... )
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Две конфигурации станков с различными MyGUI на одном ком

Сообщение Serg »

Вобщем идея проста: везде использовать относительные пути, относительно каталога с ini.

P.S. Я питон вообще не знаю. :think: Хотя разглядывая ваши потуги наверно уже смогу изобразить "Hello, world!". ;)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Две конфигурации станков с различными MyGUI на одном ком

Сообщение Ворон226 »

Проверил - работает!

ИТОГ:

Если нужно иметь на одном компе несколько конфигураций станков со своими визуальными панелями (mygui), то делать это нужно следующим образом:

1. Конфигурацию станка и все остальную файлы держать в отдельной папке вместе.
2. В .INI прописываем
[DISPLAY]
DISPLAY = ./mygui
# эта запись говорит о том, что скрипт запуска Вашей панели находится в текущей для процесса папке. LinuxCNC устроен так, что в самом начале в качестве текущего назначает каталог с ini файлом.

3. В файле mygui пишем:

Код: Выделить всё

#!/usr/bin/python

import pygtk
pygtk.require("2.0")
import gtk
import gladevcp.makepins
from gladevcp.gladebuilder import GladeBuilder
import hal

[b]import sys,os
xmlname = "mygui.glade"[/b]
# Говорит о том, что файл визуальной панели 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", [b]"./mode.hal"[/b]])
# Говорит о том, что файл с описанием пинов Вашей визуальной панели mode.hal лежит в той же папке
	if res: raise SystemExit, res
	gtk.main()
Теперь Вы можете копировать Вашу конфигурацию на другой комп и эта конфигурация заработает без специальных настроек системы и адресов...

Это позволяет на одном компе держать любое количество конфигураций, которые не будут мешать друг другу.
Последний раз редактировалось Ворон226 26 май 2014, 01:00, всего редактировалось 3 раза.
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Две конфигурации с разными MyGUI на одном компе (РЕШЕНО)

Сообщение Serg »

Ворон226 писал(а):находится в корневой папке
Не в корневой, а в текущей для процесса папке, буквально Current Work Directory.
Посмотреть CDW процесса в какой-то момент времени можно командой

Код: Выделить всё

ls -l /proc/<pid_процесса>/cwd
но нужно понимать, что процесс может в любой момент сменить CWD.
С LinuxCNC нам повезло, что оно в самом начале в качестве CWD назначает каталог с ini файлом и позже его не меняет.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Две конфигурации с разными MyGUI на одном компе (РЕШЕНО)

Сообщение Ворон226 »

Исправил. Если никаких дополнений и изменений в ближайшие дни не поступит - перенесу в первое сообщение. Спасибо!
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Две конфигурации с разными MyGUI на одном компе (РЕШЕНО)

Сообщение Serg »

Лучше вот так:
# эта запись говорит о том, что скрипт запуска Вашей панели находится в текущей для процесса папке. LinuxCNC устроен так, что в самом начале в качестве текущего назначает каталог с ini файлом.
Всё остальное это пояснения почему каталог называется именно текущим, это лучше в куда-нибудь про линуксы. Да и для винды это справедливо. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «LinuxCNC»