[WIKI] Интерфейс Gmoccapy с нуля.

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение verser »

plotik писал(а):Обнаружил баг. Если файл большой,у меня 10Мб,то он как-бы прогружается,картинку показывает,а вот g-code не отоброжает. После нажатия плэй Zет тупо едет вниз--на кнопку стоп не реагирует--еле успел на грибок шлёпнуть--так бы гравёру :silent:
Думаю, что с такими тяжелыми программами лучше в Axis работать.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение Nick »

С такими программами лучше без визуализации работать.
Не знаю как gmocappy, но в axis есть (AXIS,hide), если его написать в Gкоде - то после него отрисовка остановится..
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение Lexxa »

Lexxa писал(а):Когда активен G95 (подача в мм/об), gmoccapy некорректно отображает значение подачи в окне G-code.
Например, делаем
s500 m3
g1 x10 f0.1
Значение подачи остается нулем, при том что в окне регулировки подачи показывается верно.
Обошел это неудобство заменив в строке feed_str на " %.2f" % real_feed
Было
self.widgets.lbl_active_feed.set_label(feed_str)
стало
self.widgets.lbl_active_feed.set_label( " %.2f" % real_feed )
Лучше сделать так:
в функции def _update_vel
оригинал:

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

    def _update_vel( self ):
        # self.stat.program_units will return 1 for inch, 2 for mm and 3 for cm
        real_feed = float( self.stat.settings[1] * self.stat.feedrate )
        if self.stat.program_units != 1:
            self.widgets.lbl_current_vel.set_text( "%d" % ( self.stat.current_vel * 60.0 * self.faktor ) )
            if "G95" in self.active_gcodes:
                feed_str = "%d" % self.stat.settings[1]
                real_feed_str = "F  %.2f" % real_feed
            else:
                feed_str = "%d" % self.stat.settings[1]
                real_feed_str = "F  %.d" % real_feed
        else:
            self.widgets.lbl_current_vel.set_text( "%.3f" % ( self.stat.current_vel * 60.0 * self.faktor ) )
            if "G95" in self.active_gcodes:
                feed_str = "%d" % self.stat.settings[1]
                real_feed_str = "F %.4f" % real_feed
            else:
                feed_str = "%.3f" % self.stat.settings[1]
                real_feed_str = "F %.3f" % real_feed

        # converting 0.0 to string brings nothing, so the string is empty
        # happens only on start up
        if not real_feed:
            feed_str = "0"

        self.widgets.lbl_active_feed.set_label( feed_str )
        self.widgets.lbl_feed_act.set_text( real_feed_str )
исправленная:

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

    def _update_vel( self ):
        # self.stat.program_units will return 1 for inch, 2 for mm and 3 for cm
        real_feed = float( self.stat.settings[1] * self.stat.feedrate )
        if self.stat.program_units != 1:
            self.widgets.lbl_current_vel.set_text( "%d" % ( self.stat.current_vel * 60.0 * self.faktor ) )
            if "G95" in self.active_gcodes:
                feed_str = "%s" % self.stat.settings[1]
                real_feed_str = "F  %s" % real_feed
            else:
                feed_str = "%d" % self.stat.settings[1]
                real_feed_str = "F  %.d" % real_feed
        else:
            self.widgets.lbl_current_vel.set_text( "%.3f" % ( self.stat.current_vel * 60.0 * self.faktor ) )
            if "G95" in self.active_gcodes:
                feed_str = "%s" % self.stat.settings[1]
                real_feed_str = "F %s" % real_feed
            else:
                feed_str = "%.3f" % self.stat.settings[1]
                real_feed_str = "F %.3f" % real_feed

        # converting 0.0 to string brings nothing, so the string is empty
        # happens only on start up
        if not real_feed:
            feed_str = "0"
            real_feed_str = "F  0"

        self.widgets.lbl_active_feed.set_label( feed_str )
        self.widgets.lbl_feed_act.set_text( real_feed_str )
т.е.
feed_str = "%d" % self.stat.settings[1] меняем на feed_str = "%s" % self.stat.settings[1]
real_feed_str = "F %.2f" % real_feed меняем на real_feed_str = "F %s" % real_feed
real_feed_str = "F %.4f" % real_feed меняем на real_feed_str = "F %s" % real_feed

и подписать feed_str = "0" в условие if not real_feed

В результате
Вложения
1.png (6401 просмотр) <a class='original' href='./download/file.php?id=79059&mode=view' target=_blank>Загрузить оригинал (110.83 КБ)</a>
:bender:
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение Lexxa »

Заметил такой баг:
при записи в postgui_halfile.hal

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

net halui.spindle.stop <= hw_button_stop
net halui.spindle.forward <= hw_button_fwd
net net halui.spindle.reverse <= hw_button_rev
где hw_button_x - кнопки, подсоединенные через 7i70

Пуск, стоп и реверс шпинделя от hw кнопок работает криво:
если нажали fwd - запускает шпиндель, после нажатия rev должен произойти резкий реверс. шпиндель же просто дергается и останавливается. при этом заданная скорость шпинделя = 0, кнопка реверс в gmocappy нажата, стоп отпущена. нажатие стоп срабатывает при этом через раз-два.

если те же действия выполнять из GUI, все работает корректно.

Думаю, если в gmocappy для кнопок fwd, stop и rev сделать hal пины и hw_button завести на нее, то проблема решится.
Сложность (для меня) в том, что эти кнопки в gmoccapy сделаны на radiobutton и как к ним прикрутить hal пины я не знаю.

Какие мысли, коллеги?
p.s. если файл настроек .pref gmoccapy удалить, то первое время глючит меньше...
:bender:
_SERGEY_
Новичок
Сообщения: 14
Зарегистрирован: 21 сен 2016, 12:01
Репутация: -1
Настоящее имя: Сергей
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение _SERGEY_ »

Всем привет! Помогите разобраться, почему не хочет отображать реальные обороты? Оси бегают, шпиндель включается, а программа не видит оборотов. Датчик на холле висит на шпинделе с 4-ю метками на 15пине LPT. Конфигурацию проводил через stepconfig wiz. Пробовал шпиндель индекс, энкодер-фаза-А. Результат - не видит оборотов. В хал скопе сигнал виден. Или с одним датчиком "индекса" это невозможно?
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение verser »

plotik писал(а):Прогнал УП. Z никак не меняется в процессе обработки. Всё делал по инструкции. :thinking:
PS у меня mesa 7i76--может с ней как-то связано.
Уп прилагаю.
Дело не в mesa 7i76. Предварительное сканирование было проведено в прямоугольнике c X=1 по X=49, с Y=1 по Y=49, а программа фрезеровки работает совсем в стороне, в другой зоне по X: X=-36 по X=-2, (с Y всё нормально). Зона фрезеровки должна геометрически вписываться в зону сканирования. Скорее всего Вам перед началом следует отменить все отступы по G92 и проч. Ну а мне подумать, как в будущем добавить возможность работать с отступами :).
plotik
Мастер
Сообщения: 428
Зарегистрирован: 10 май 2012, 15:30
Репутация: 33
Настоящее имя: Евгений
Откуда: Rostov-on-Don
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение plotik »

Перемещал я в MDI по g92. Загружал другую УП которая с разу попадает в зону гравировки--та же история.compensation_z.hal у меня другой немного т.к. hostmot и в двух местах изменено

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

unlinkp hm2_5i25.0.stepgen.02.position-cmd
net zpos-cmd-res sum2.1.out => hm2_5i25.0.stepgen.02.position-cmd
может питоновский скрипт не видит чтот-то?
"Ты не дрыгайся! Показывай свою гравицаппу. Если фирменная вещь — возьмём!"
"А этот паца́к все время говорит на языках, продолжения которых не знает!"
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение verser »

plotik писал(а):compensation_z.hal у меня другой немного т.к. hostmot и в двух местах изменено
Можно для начала проверить в HAL Show есть ли реакция на zpos-cmd-res при проезде через отсканированную площадь. Возможно переподключение stepgen не произошло (пока не знаю как правильно, может, кто подскажет), неплохо бы глянуть исправленный compensation_z.hal
plotik
Мастер
Сообщения: 428
Зарегистрирован: 10 май 2012, 15:30
Репутация: 33
Настоящее имя: Евгений
Откуда: Rostov-on-Don
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение plotik »

Реакции на zpos-cmd-res при проезде через отсканированную площадь нет.
Вложения
compensation_z.hal
(3.11 КБ) 1035 скачиваний
Снимок экрана - 15.11.2016 - 11%3A16%3A39.png (5645 просмотров) <a class='original' href='./download/file.php?id=94924&mode=view' target=_blank>Загрузить оригинал (285.83 КБ)</a>
"Ты не дрыгайся! Показывай свою гравицаппу. Если фирменная вещь — возьмём!"
"А этот паца́к все время говорит на языках, продолжения которых не знает!"
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение verser »

А должен реагировать, независимо от того mesa у вас или встроенный stepgen. Сейчас немного некогда разбираться дальше, готовлю анонс обновлений центроискателей :). Просмотрите реакцию на проезд через отсканированную площадь всех соединений-участников из этого места

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

# New Z = (Manual compensation Z) + (Auto compensation Z from filename) + (Z abs)
net sum-adj compensation_z.adj_comp_scale => sum2.0.in0
net sum-comp compensation_z_math.out => sum2.0.in1
net zpos-cmd-comp sum2.0.out => sum2.1.in0
net zpos-cmd  => sum2.1.in1
net zpos-cmd-res sum2.1.out => hm2_5i25.0.stepgen.02.position-cmd
plotik
Мастер
Сообщения: 428
Зарегистрирован: 10 май 2012, 15:30
Репутация: 33
Настоящее имя: Евгений
Откуда: Rostov-on-Don
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение plotik »

Как сделать 0 в дельте и откуда берутся эти значения никак не пойму--всё время разные. Ноль по Z у меня уже есть.
Вложения
2.png (5596 просмотров) <a class='original' href='./download/file.php?id=94934&mode=view' target=_blank>Загрузить оригинал (277.52 КБ)</a>
"Ты не дрыгайся! Показывай свою гравицаппу. Если фирменная вещь — возьмём!"
"А этот паца́к все время говорит на языках, продолжения которых не знает!"
x-zim
Новичок
Сообщения: 1
Зарегистрирован: 15 дек 2016, 15:21
Репутация: 0
Настоящее имя: Юрий

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение x-zim »

Доброго времени суток! Подскажите пожалуйста как облегчить gmoccapy правильно. Дело в том, что взял старенькую машину (пентиум 2ггц, 1гб озу, 20гб диск) но управление выведу на отдельную механическую клавиатуру, таким образом некоторые виджеты станут просто ненужны. А насколько я понял чем больше их, тем больше все тормозит. Вопрос в чем, достаточно ли их скрыть в glade или надо удалять и вычищать все упоминания? И еще вопрос есть, вывел веб-камеру (mplayer) на вкладку, по светодиоду на камере вижу, что камера работает постоянно. Можно ли активировать содержимое вкладки только когда она активна?
#RussiaIsATerroristState
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение verser »

В файле gmoccapy.py можно подсмотреть что обновляется каждые 100мс и попробовать ненужное отключить

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

    # every 100 milli seconds this gets called
    # check linuxcnc for status, error and then update the readout
    def _periodic( self ):
        self.stat.poll()
        error = self.error_channel.poll()
        if error:
            self._show_error( error )

        if self.gcodes != self.stat.gcodes:
            self._update_active_gcodes()
        if self.mcodes != self.stat.mcodes:
            self._update_active_mcodes()

        if self.lathe_mode:
            if "G8" in self.active_gcodes and self.diameter_mode:
                self._switch_to_g7( False )
            elif "G7" in self.active_gcodes and not self.diameter_mode:
                self._switch_to_g7( True )

        self._update_vel()
        self._update_coolant()
        self._update_spindle()
        self._update_halui_pin()

        self.widgets.lbl_time.set_label( strftime( "%H:%M:%S" ) + "\n" + strftime( "%d.%m.%Y" ) )

        # keep the timer running
        return True
Фрост
Мастер
Сообщения: 393
Зарегистрирован: 28 окт 2013, 00:18
Репутация: 23
Настоящее имя: Сергей
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение Фрост »

Помогите подключить внешний резистор к ползункам скорости.
Что имею на данный момент - scale out значения в диапазоне от 0 до 1, а дальше перепробовал разные найденные здесь варианты, или ошибка, или нет никакой реакции.
На какой пин gmoccapy должны поступать значения со scale?
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение verser »

Gmoccapy - это лишь интерфейс с пользователем, подключение внешних устройств здесь идет по общим для linuxcnc правилам. У Вас подготовлен scale.N.out - аналоговый программный выход. У параллельного порта, к примеру, цифровые выходы, поэтому можно, например, использовать ШИМ модуляцию для управления переменным резистором, например, компонент pwmgen, в этом случае предполагается, что резистор понимает управление ШИМ сигналом. Далее scale.N.out на аналоговый вход pwmgen, а цифровой ШИМ выход pwmgen на пин параллельного порта и далее к ножке ШИМ управления резистора.
Фрост
Мастер
Сообщения: 393
Зарегистрирован: 28 окт 2013, 00:18
Репутация: 23
Настоящее имя: Сергей
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение Фрост »

Наверно немного не так объяснил - у меня собрана схема через сом-порт такого типа http://www.cnc-club.ru/forum/viewtopic. ... 55#p172855
Вращая резистор я уже получаю изменение значений в scale.N.out в халметре. Мне нужно связать эти изменения с ползунком, вот тут я и застопорился
Фрост
Мастер
Сообщения: 393
Зарегистрирован: 28 окт 2013, 00:18
Репутация: 23
Настоящее имя: Сергей
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение Фрост »

Накидал такое

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

loadrt serport io=0x3f8
addf serport.0.read base-thread
addf serport.0.write base-thread
	
loadrt encoder num_chan=2
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.counter-mode 1
setp encoder.1.counter-mode 1

loadrt lowpass count=2
addf lowpass.0 servo-thread
addf lowpass.1 servo-thread
setp lowpass.0.gain 0.005
setp lowpass.1.gain 0.005

loadrt conv_float_s32  count=2
addf conv-float-s32.0 servo-thread
addf conv-float-s32.1 servo-thread

setp halui.feed-override.count-enable 0
# setp halui.feed-override.counts 705
setp halui.feed-override.scale 0.0029
net f-vfc serport.0.pin-1-in => encoder.0.phase-A
net f-freq encoder.0.velocity => lowpass.0.in
net f-lpf lowpass.0.out => conv-float-s32.0.in
net f-count halui.feed-override.counts  <= conv-float-s32.0.out  

setp halui.spindle-override.count-enable 0
# setp halui.spindle-override.counts 664
setp halui.spindle-override.scale 0.0014
net s-vfc serport.0.pin-6-in => encoder.1.phase-A
net s-freq encoder.1.velocity => lowpass.1.in
net s-lpf lowpass.1.out => conv-float-s32.1.in
net s-count halui.spindle-override.counts  <= conv-float-s32.1.out  
и в postgui

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

setp halui.feed-override.count-enable 1  
setp halui.spindle-override.count-enable 1
но все равно при запуске не определяет положение резистора, включает почти на максимум, хотя в халметре значения counts соответствуют положению. Если повернуть от упора до упора, до перезапуска все хорошо. Если раскомментировать, тогда ставит на 100% независимо от положения.
В чем косяк?
Фрост
Мастер
Сообщения: 393
Зарегистрирован: 28 окт 2013, 00:18
Репутация: 23
Настоящее имя: Сергей
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение Фрост »

Вопрос решил через

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

# Ползунки скорости
gmoccapy.feed-override.analog-enable = 1
net feed2 scale.0.out gmoccapy.feed-override.direct-value

gmoccapy.spindle-override.analog-enable = 1
net spin2 scale.1.out gmoccapy.spindle-override.direct-value
ну и соответственно убрал преобразование в s32, scale.x.out выставлены в диапазон от 0 до 1
Теперь как оставил, на том же значении и запускается.
Аватара пользователя
Cross
Опытный
Сообщения: 166
Зарегистрирован: 21 июл 2015, 18:29
Репутация: 4
Настоящее имя: Артем
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение Cross »

Скажите, что я не так делаю? Не хочет вызывать подпрограмму Auto Tool Measurement, ругается...
Вложения
IMG_20170604_214219.jpg (4302 просмотра) <a class='original' href='./download/file.php?id=113417&mode=view' target=_blank>Загрузить оригинал (1.77 МБ)</a>
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: [WIKI] Интерфейс Gmoccapy с нуля.

Сообщение verser »

Хорошо бы глянуть ваши файлы конфигурации (архив папки sim.gmoccapy)
Ответить

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