MyGUI

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: MyGUI

Сообщение Lexxa »

nkp, беру свои слова обратно)
:bender:
psha
Опытный
Сообщения: 147
Зарегистрирован: 28 фев 2011, 11:11
Репутация: 1
Контактная информация:

Re: MyGUI

Сообщение psha »

1) вместо добавления путей рекомендуется всё же использовать . scripts/rip-environment (то, что раньше называлось emc-environment)
2) посмотри на hal_glib и gstat, если писать гуй с использованием gtk очень облегчает жизнь, не надо крутиться в цикле самому
root, доделай конвертацию! :)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

теперь рассмотрим принцип подачи команд .
в модуле емс (linuxcnc) используем функцию command() . пишем:

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

import linuxcnc
c = linuxcnc.command() 
или соответственно:

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

import emc
c = emc.command() 
теперь примеры команд:

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

c.home(-1) - все в home
c.unhome(-1)
переключение режимов:

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

c.mode(1)   - ручн
c.mode(2) -   авто
c.mode(3) -   MDI 

еще важная команда -ждать завершения выполнения посланной команды (задаем время ожидания -по дефолту-1с)

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

c.wait_complete(3)
команда MDI :

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

c.mdi("G0 X10 Z30")
управление вращением шпинделя:

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

 c.spindle(1,300)  -  cw S300
c.spindle(-1,300)   -  cw S300
c.spindle(0)  -   off 
Последний раз редактировалось nkp 29 авг 2012, 11:14, всего редактировалось 3 раза.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

nkp писал(а):еще важная команда -ждать завершения выполнения посланной команды (задаем время ожидания -по дефолту-1с)
Это значит, что через 1с ожидание закончится, даже если команда еще не выполнилась?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Движение.
непрерывное:

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

c.jog(linuxcnc.JOG_CONTINUOUS, 0, 1*2)
где:
JOG_CONTINUOUS - непрерывное
0  - axis [0]
1*2    1-положительное направление(-1 - отр)  * 2 - скорость движ
стоп по axis[1]:

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

c.jog(linuxcnc.JOG_STOP, 1)
похоже для инкрементальных перемещений:

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

c.jog(linuxcnc.JOG_INCREMENT, 1, 1*1, 5)
только последним пропишем инкремент (в данном случае - 5)
подача :

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

c.feedrate(0.35)    0.35 - 35%
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Команды изменения состояния машины :

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

c.state(linuxcnc.STATE_ESTOP_RESET)
c.state(linuxcnc.STATE_ESTOP)
c.state(linuxcnc.STATE_ON)
c.state(linuxcnc.STATE_OFF)
программа:

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

c.auto(linuxcnc.AUTO_RUN, 45)  45- с какой строки стартуем (если 0 - с начала)
c.auto(linuxcnc.AUTO_STEP)
c.abort()
по поводу abort():
команда посылает планировщику стоп (EMC_TASK_ABORT) , а в документации написано - что программа в режиме ожидания
отсюда у некоторых удивление - когда после стоп во время выполнения , run не продолжает далее ,а начинает с первого кадра.
для данного случая команда:

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

set_feed_hold
psha
Опытный
Сообщения: 147
Зарегистрирован: 28 фев 2011, 11:11
Репутация: 1
Контактная информация:

Re: MyGUI

Сообщение psha »

Nick писал(а):Это значит, что через 1с ожидание закончится, даже если команда еще не выполнилась?
У неё разное возвращаемое значение, в зависимости от того выполнена команда или нет
root, доделай конвертацию! :)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

вот с командай c.set_feed_hold(1) какой то ступор -и 0 (1) (-1) писал и True и ON\OFF хотя в документации (int) - подача не обнуляется(не отключается) ????
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: MyGUI

Сообщение Алексс »

я так понял эта ф-я разрешает или запрешает hold
ничего не останавливает

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

void ENABLE_FEED_HOLD()
{
    EMC_TRAJ_SET_FH_ENABLE set_feed_hold_msg;
    flush_segments();
    
    set_feed_hold_msg.mode = 1;
    interp_list.append(set_feed_hold_msg);
}

void DISABLE_FEED_HOLD()
{
    EMC_TRAJ_SET_FH_ENABLE set_feed_hold_msg;
    flush_segments();
    
    set_feed_hold_msg.mode = 0;
    interp_list.append(set_feed_hold_msg);
}
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: MyGUI

Сообщение Алексс »

nkp писал(а):подача не обнуляется
полазил еще по коду - я так понимаю это должно остановить выполнение программы.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

команда должна устанавливать нулевую подачу
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: MyGUI

Сообщение Алексс »

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

    if ( enables & FH_ENABLED ) {
	/* read feed hold HAL pin */
	if ( *emcmot_hal_data->feed_hold ) {
	    scale = 0;
	}
    }
эта команда устанавливает FH_ENABLED бит.
чтобы остановить подачу, нужно дополнительно установить motion.feed-hold пин
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

motion.feed-hold уже сама устанавливает подачу 0
так что тут как то по другому.........
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: MyGUI

Сообщение Lexxa »

FeedHold не должна быть паузой. feed hold должна делать подачу нулевой и никак иначе. Вообще никаких пауз в станке быть не должно.
к программе должны относиться 4 кнопки, три из которых должны использоваться и в ручном режиме и в режиме mdi

CycleStart - работает во всех режимах. В ручном при выходе в ноль должна включать homing выбранной оси. В режиме mdi она должна запускать введенную в поле ввода mdi команду. В автоматическом режиме - пуск программы. В автоматическом покадровом режиме - запускать на отработку следующий кадр.
Step - в автоматическом режиме устанавливает флаг "покадровый режим"
feed hold - во всех режимах останавливает любое движение осей
adort - во всех режимах отменяет отрабатываемую операцию. В автоматическом режиме отменяет выполнение программы. Т.е. для того чтобы остановить программу надо включить feed hold и сделать abort. Подобным образом и для остальных режимов.
Эти функции должны работать так и никак иначе. Это так сказать стандарт.
:bender:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

тут просто с внутренней командой закавыка
не хочет работать
понятно - что использовать motion.feed-hold и нет проблем
но я просто по всем командам проходился- а эта не функционирует
будет время - попробуй у себя
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: MyGUI

Сообщение Lexxa »

курсы по питону тут открывали?
nkp писал(а):s = emc.stat()
Зачем?
почему это

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

s.poll()
стало функцией обновления параметра?

я правильно понимаю, что
import emc - подгрузили модуль emc
В этом моуле есть класс stat
зачем делать

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

s = emc.stat()
почему нельзя всегда обращаться

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

emc.stat.poll()
?
не вкурил в эту строку:

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

print  s.axis[0]['input']
:bender:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

emc.stat скорее всего класс или функция которая создает объект типа stat. Каждый раз в нее лазить не разумно, лучше просто сохранить этот объект. также объект может хранить какие-то параметры, например предыдущее состояние пинов или еще что-нибудь...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Lexxa писал(а):почему нельзя всегда обращаться
Выделение(021).png (3020 просмотров) <a class='original' href='./download/file.php?id=7791&mode=view' target=_blank>Загрузить оригинал (43.31 КБ)</a>
Lexxa писал(а):стало функцией обновления параметра?
функция обновления параметров машины
Последний раз редактировалось nkp 29 авг 2012, 19:23, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

добавим в скрипт несколько строк которые позволят загружать форму из папки конфигурации (если она там присутствует)
добавим путь к папке с нашим конфигом:

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

CONFIGPATH = os.environ['CONFIG_DIR']
а в __init__ :

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

  def __init__(self):
    global xmlname
    localglade = os.path.join(CONFIGPATH,"mygui.glade")
    if os.path.exists(localglade):
        print " MyGUI INFO:  Загружаем файл glade %s "% localglade
        xmlname = localglade
    else:
        print " MyGUI INFO:  Загружаем файл glade %s " % xmlname
здесь мы формируем путь к нашему локальному файлу:

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

 localglade = os.path.join(CONFIGPATH,"mygui.glade")
os.path.join - объеденяет путь к папке с именем файла
Далее os.path.exists прверяет -есть ли файл с таким именем
Ответить

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