Страница 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() . пишем:

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

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 

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_STOP, 1)
похоже для инкрементальных перемещений:

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

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

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

c.feedrate(0.35)    0.35 - 35%

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 не продолжает далее ,а начинает с первого кадра.
для данного случая команда:

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

set_feed_hold

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()
Зачем?
почему это

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

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

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

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

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

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

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

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

print  s.axis[0]['input']

Re: MyGUI

Добавлено: 29 авг 2012, 19:15
Nick
emc.stat скорее всего класс или функция которая создает объект типа stat. Каждый раз в нее лазить не разумно, лучше просто сохранить этот объект. также объект может хранить какие-то параметры, например предыдущее состояние пинов или еще что-нибудь...

Re: MyGUI

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

Re: MyGUI

Добавлено: 29 авг 2012, 19:23
nkp

Re: MyGUI

Добавлено: 30 авг 2012, 14:20
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 прверяет -есть ли файл с таким именем