Страница 2 из 47
Re: MyGUI
Добавлено: 27 авг 2012, 22:07
Lexxa
nkp, беру свои слова обратно)
Re: MyGUI
Добавлено: 27 авг 2012, 22:55
psha
1) вместо добавления путей рекомендуется всё же использовать . scripts/rip-environment (то, что раньше называлось emc-environment)
2) посмотри на hal_glib и gstat, если писать гуй с использованием gtk очень облегчает жизнь, не надо крутиться в цикле самому
Re: MyGUI
Добавлено: 29 авг 2012, 07:44
nkp
теперь рассмотрим принцип подачи команд .
в модуле емс (linuxcnc) используем функцию command() . пишем:
или соответственно:
теперь примеры команд:
переключение режимов:
Код: Выделить всё
c.mode(1) - ручн
c.mode(2) - авто
c.mode(3) - MDI
еще важная команда -ждать завершения выполнения посланной команды (задаем время ожидания -по дефолту-1с)
команда MDI :
управление вращением шпинделя:
Код: Выделить всё
c.spindle(1,300) - cw S300
c.spindle(-1,300) - cw S300
c.spindle(0) - off
Re: MyGUI
Добавлено: 29 авг 2012, 08:42
Nick
nkp писал(а):еще важная команда -ждать завершения выполнения посланной команды (задаем время ожидания -по дефолту-1с)
Это значит, что через 1с ожидание закончится, даже если команда еще не выполнилась?
Re: MyGUI
Добавлено: 29 авг 2012, 11:37
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_INCREMENT, 1, 1*1, 5)
только последним пропишем инкремент (в данном случае - 5)
подача :
Re: MyGUI
Добавлено: 29 авг 2012, 12:27
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 не продолжает далее ,а начинает с первого кадра.
для данного случая команда:
Re: MyGUI
Добавлено: 29 авг 2012, 14:31
psha
Nick писал(а):Это значит, что через 1с ожидание закончится, даже если команда еще не выполнилась?
У неё разное возвращаемое значение, в зависимости от того выполнена команда или нет
Re: MyGUI
Добавлено: 29 авг 2012, 14:42
nkp
вот с командай c.set_feed_hold(1) какой то ступор -и 0 (1) (-1) писал и True и ON\OFF хотя в документации (int) - подача не обнуляется(не отключается) ????
Re: MyGUI
Добавлено: 29 авг 2012, 14:51
Алексс
я так понял эта ф-я разрешает или запрешает 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);
}
Re: MyGUI
Добавлено: 29 авг 2012, 15:02
Алексс
nkp писал(а):подача не обнуляется
полазил еще по коду - я так понимаю это должно остановить выполнение программы.
Re: MyGUI
Добавлено: 29 авг 2012, 15:54
nkp
команда должна устанавливать нулевую подачу
Re: MyGUI
Добавлено: 29 авг 2012, 16:02
Алексс
Код: Выделить всё
if ( enables & FH_ENABLED ) {
/* read feed hold HAL pin */
if ( *emcmot_hal_data->feed_hold ) {
scale = 0;
}
}
эта команда устанавливает FH_ENABLED бит.
чтобы остановить подачу, нужно дополнительно установить motion.feed-hold пин
Re: MyGUI
Добавлено: 29 авг 2012, 16:35
nkp
motion.feed-hold уже сама устанавливает подачу 0
так что тут как то по другому.........
Re: MyGUI
Добавлено: 29 авг 2012, 18:54
Lexxa
FeedHold не должна быть паузой. feed hold должна делать подачу нулевой и никак иначе. Вообще никаких пауз в станке быть не должно.
к программе должны относиться 4 кнопки, три из которых должны использоваться и в ручном режиме и в режиме mdi
CycleStart - работает во всех режимах. В ручном при выходе в ноль должна включать homing выбранной оси. В режиме mdi она должна запускать введенную в поле ввода mdi команду. В автоматическом режиме - пуск программы. В автоматическом покадровом режиме - запускать на отработку следующий кадр.
Step - в автоматическом режиме устанавливает флаг "покадровый режим"
feed hold - во всех режимах останавливает любое движение осей
adort - во всех режимах отменяет отрабатываемую операцию. В автоматическом режиме отменяет выполнение программы. Т.е. для того чтобы остановить программу надо включить feed hold и сделать abort. Подобным образом и для остальных режимов.
Эти функции должны работать так и никак иначе. Это так сказать стандарт.
Re: MyGUI
Добавлено: 29 авг 2012, 19:00
nkp
тут просто с внутренней командой закавыка
не хочет работать
понятно - что использовать motion.feed-hold и нет проблем
но я просто по всем командам проходился- а эта не функционирует
будет время - попробуй у себя
Re: MyGUI
Добавлено: 29 авг 2012, 19:11
Lexxa
курсы по питону тут открывали?
nkp писал(а):s = emc.stat()
Зачем?
почему это
стало функцией обновления параметра?
я правильно понимаю, что
import emc - подгрузили модуль emc
В этом моуле есть класс stat
зачем делать
почему нельзя всегда обращаться
?
не вкурил в эту строку:
Re: MyGUI
Добавлено: 29 авг 2012, 19:15
Nick
emc.stat скорее всего класс или функция которая создает объект типа stat. Каждый раз в нее лазить не разумно, лучше просто сохранить этот объект. также объект может хранить какие-то параметры, например предыдущее состояние пинов или еще что-нибудь...
Re: MyGUI
Добавлено: 29 авг 2012, 19:19
nkp
Lexxa писал(а):почему нельзя всегда обращаться
Lexxa писал(а):стало функцией обновления параметра?
функция обновления параметров машины
Re: MyGUI
Добавлено: 29 авг 2012, 19:23
nkp
Re: MyGUI
Добавлено: 30 авг 2012, 14:20
nkp
добавим в скрипт несколько строк которые позволят загружать форму из папки конфигурации (если она там присутствует)
добавим путь к папке с нашим конфигом:
а в __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 прверяет -есть ли файл с таким именем