MyGUI
Re: MyGUI
1) вместо добавления путей рекомендуется всё же использовать . scripts/rip-environment (то, что раньше называлось emc-environment)
2) посмотри на hal_glib и gstat, если писать гуй с использованием gtk очень облегчает жизнь, не надо крутиться в цикле самому
2) посмотри на hal_glib и gstat, если писать гуй с использованием gtk очень облегчает жизнь, не надо крутиться в цикле самому
root, доделай конвертацию! 
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
теперь рассмотрим принцип подачи команд .
в модуле емс (linuxcnc) используем функцию command() . пишем:
или соответственно:
теперь примеры команд:
переключение режимов:
еще важная команда -ждать завершения выполнения посланной команды (задаем время ожидания -по дефолту-1с)
команда MDI :
управление вращением шпинделя:
в модуле емс (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)Код: Выделить всё
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
Это значит, что через 1с ожидание закончится, даже если команда еще не выполнилась?nkp писал(а):еще важная команда -ждать завершения выполнения посланной команды (задаем время ожидания -по дефолту-1с)
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
Движение.
непрерывное:
стоп по axis[1]:
похоже для инкрементальных перемещений:
подача :
непрерывное:
Код: Выделить всё
c.jog(linuxcnc.JOG_CONTINUOUS, 0, 1*2)
где:
JOG_CONTINUOUS - непрерывное
0 - axis [0]
1*2 1-положительное направление(-1 - отр) * 2 - скорость движ
Код: Выделить всё
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
Команды изменения состояния машины :
программа:
по поводу abort():
команда посылает планировщику стоп (EMC_TASK_ABORT) , а в документации написано - что программа в режиме ожидания
отсюда у некоторых удивление - когда после стоп во время выполнения , run не продолжает далее ,а начинает с первого кадра.
для данного случая команда:
Код: Выделить всё
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()команда посылает планировщику стоп (EMC_TASK_ABORT) , а в документации написано - что программа в режиме ожидания
отсюда у некоторых удивление - когда после стоп во время выполнения , run не продолжает далее ,а начинает с первого кадра.
для данного случая команда:
Код: Выделить всё
set_feed_holdRe: MyGUI
У неё разное возвращаемое значение, в зависимости от того выполнена команда или нетNick писал(а):Это значит, что через 1с ожидание закончится, даже если команда еще не выполнилась?
root, доделай конвертацию! 
- Алексс
- Почётный участник

- Сообщения: 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 писал(а):подача не обнуляется
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
- Алексс
- Почётный участник

- Сообщения: 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;
}
}
чтобы остановить подачу, нужно дополнительно установить motion.feed-hold пин
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: MyGUI
FeedHold не должна быть паузой. feed hold должна делать подачу нулевой и никак иначе. Вообще никаких пауз в станке быть не должно.
к программе должны относиться 4 кнопки, три из которых должны использоваться и в ручном режиме и в режиме mdi
CycleStart - работает во всех режимах. В ручном при выходе в ноль должна включать homing выбранной оси. В режиме mdi она должна запускать введенную в поле ввода mdi команду. В автоматическом режиме - пуск программы. В автоматическом покадровом режиме - запускать на отработку следующий кадр.
Step - в автоматическом режиме устанавливает флаг "покадровый режим"
feed hold - во всех режимах останавливает любое движение осей
adort - во всех режимах отменяет отрабатываемую операцию. В автоматическом режиме отменяет выполнение программы. Т.е. для того чтобы остановить программу надо включить feed hold и сделать abort. Подобным образом и для остальных режимов.
Эти функции должны работать так и никак иначе. Это так сказать стандарт.
к программе должны относиться 4 кнопки, три из которых должны использоваться и в ручном режиме и в режиме mdi
CycleStart - работает во всех режимах. В ручном при выходе в ноль должна включать homing выбранной оси. В режиме mdi она должна запускать введенную в поле ввода mdi команду. В автоматическом режиме - пуск программы. В автоматическом покадровом режиме - запускать на отработку следующий кадр.
Step - в автоматическом режиме устанавливает флаг "покадровый режим"
feed hold - во всех режимах останавливает любое движение осей
adort - во всех режимах отменяет отрабатываемую операцию. В автоматическом режиме отменяет выполнение программы. Т.е. для того чтобы остановить программу надо включить feed hold и сделать abort. Подобным образом и для остальных режимов.
Эти функции должны работать так и никак иначе. Это так сказать стандарт.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
тут просто с внутренней командой закавыка
не хочет работать
понятно - что использовать motion.feed-hold и нет проблем
но я просто по всем командам проходился- а эта не функционирует
будет время - попробуй у себя
не хочет работать
понятно - что использовать motion.feed-hold и нет проблем
но я просто по всем командам проходился- а эта не функционирует
будет время - попробуй у себя
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: MyGUI
курсы по питону тут открывали?
почему это
стало функцией обновления параметра?
я правильно понимаю, что
import emc - подгрузили модуль emc
В этом моуле есть класс stat
зачем делать
почему нельзя всегда обращаться ?
не вкурил в эту строку:
Зачем?nkp писал(а):s = emc.stat()
почему это
Код: Выделить всё
s.poll()я правильно понимаю, что
import emc - подгрузили модуль emc
В этом моуле есть класс stat
зачем делать
Код: Выделить всё
s = emc.stat()Код: Выделить всё
emc.stat.poll()не вкурил в эту строку:
Код: Выделить всё
print s.axis[0]['input']- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: MyGUI
emc.stat скорее всего класс или функция которая создает объект типа stat. Каждый раз в нее лазить не разумно, лучше просто сохранить этот объект. также объект может хранить какие-то параметры, например предыдущее состояние пинов или еще что-нибудь...
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
добавим в скрипт несколько строк которые позволят загружать форму из папки конфигурации (если она там присутствует)
добавим путь к папке с нашим конфигом:
а в __init__ :
здесь мы формируем путь к нашему локальному файлу:
os.path.join - объеденяет путь к папке с именем файла
Далее os.path.exists прверяет -есть ли файл с таким именем
добавим путь к папке с нашим конфигом:
Код: Выделить всё
CONFIGPATH = os.environ['CONFIG_DIR']Код: Выделить всё
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.exists прверяет -есть ли файл с таким именем
