MyGUI

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

железная кнопка на вход 7и77
с входа 7и77 на вход ладдера
выход ладдера на созданый пин mygui.step
mygui.step привязан к функции step в скрипте
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

Хм.... а у GPin только один тип сигнала, что ли?
Надо ему новый сигнал приделать...
Добавить обработчик на value-changed, который будет проверять, значение стало 1, значит растущей фронт и будет кидать сигнал
self.emit('on-raise', self)

+ надо добавить сигнал on-raise, наверное что-то вроде
gobject.signal_new("signal-name", MyGObjectClass, gobject.SIGNAL_RUN_FIRST, None, (str, int))
http://stackoverflow.com/questions/6673 ... l-in-pygtk

http://www.pygtk.org/docs/pygobject/gob ... signal-new
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Nick писал(а):Надо ему новый сигнал приделать...
это пока мне сложно реализовать
хотел через ладдер обойти....
но не тут то было.
дело в том ,что пишу функцию , ну например :

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

def abort (self):
      self.c.abort
цепляю его на вновь созданный пин
и уже при загрузке скрипта функция отрабатывает
надо как то все это поправить
некоторые вещи можно и с помощью halui решить - но рано или поздно этот вопрос всплывет однозначно...
Ник - хелп!!!!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

А ты не знаешь, где этот glib.halpin описан в исходниках?
Надо ему прямо туда сигнал прописать.
Плюс можно на время __init__ проигнорировать все сигналы всех пинов.

см: (http://www.pygtk.org/pygtktutorial/ch-a ... gnals.html)
handler_id = object.connect(name, cb, cb_args)

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

Re: MyGUI

Сообщение nkp »

Nick писал(а):А ты не знаешь, где этот glib.halpin описан в исходниках?
а где такое встречается - "glib.halpin "
я думаю что это в hal_glib.py:

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

class GPin(gobject.GObject, hal.Pin):
    __gtype_name__ = 'GPin'
    __gsignals__ = {'value-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())}
а вот дальше куда?
hal_glib.py.rar
(1.47 КБ) 384 скачивания
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

Наверное как-то так должно сработать:
И после этого появятся два новых сигнала.

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

class GPin(gobject.GObject, hal.Pin):
    __gtype_name__ = 'GPin'
    __gsignals__ = {'value-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),
                    'raise': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),
                    'fall': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())}


#############
# трампампам
#############

    def update(self):
        tmp = self.get()
        if tmp != self._prev:
            self.emit('value-changed')
        if self.tmp > self._prev:
            self.emit('raise')
        else :    
            self.emit('fall')
        self._prev = tmp
        
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

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

Re: MyGUI

Сообщение nkp »

подправил:

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

    def update(self):
        tmp = self.get()
        if tmp != self._prev:
            self.emit('value-changed')
        elif tmp > self._prev:
            self.emit('raise')
        else :    
            self.emit('fall')
        self._prev = tmp
загружается без ошибки
потестируем....
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

Не, там нужно именно if, а вот во втором случае нужно подравить:
==========

Точнее даже не так, надо все под первый if завести:

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

    def update(self):
        tmp = self.get()
        if tmp != self._prev:
            self.emit('value-changed')
            if tmp > self._prev:
                self.emit('raise')
            else:
                self.emit('fall')
        self._prev = tmp
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

наверно отключать проверку сигналов не придется делать
поменял сигналы с 'value-changed' на 'raise' и при загрузке
соответтвующие функции не отрабатывают
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

Главное Estop через такой пин не проводи - Estop только через realtime!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Nick писал(а):Главное Estop через такой пин не проводи - Estop только через realtime!
Estop у меня на комп вообще не заведен
он просто будет отрубать питание
----------------
а вот с последними исправлениями скрипт опять начал при загрузке проверять пины
тут бы подразобраться :
как я понимаю - теперь пины имеют три состояния: None, True, и False
может None не нужен ?
а то получается проверка начинается с if tmp != self._prev:
что равнозначно if tmp != None :
получаем истину и сразу коннектимся к 'value-changed'
а потом второй if уже коннектит к 'raise'
или это так не работает
тогда почему срабатывают функции????
---------------------
upd
проверил убрав строки

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

        if tmp != self._prev:
            self.emit('value-changed')
работает и изменений нет
значит там не все так как я думал
или совсем не так :)
-----------
upd2
и такой вопрос:
получается в питоне False<None<True ???
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

вроде должно быть None<False<True, сейчас проверю

-----
так и есть
>>> None<False<True
True


Можно добавить if tmp == None : return
можно это добавить только для новых сигналов...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

почему срабатывают cb-функции ???
ну не нормально это (работает функция ,которую мы не вызывали)
что то здесь не то...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

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

Re: MyGUI

Сообщение nkp »

ну вот кусок твоего кода:

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

		for i in range(8) :
			self.vtriggers.append(hal_glib.GPin(self.halcomp.newpin('vbutton.%s'%i, hal.HAL_BIT, hal.HAL_IN)))
			self.vtriggers[-1].connect("raise",self.click_button_v, self.widgets.notebook2, i)
так вот при загрузке скрипта функция self.click_button_v отрабатывает 8 раз
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

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

Re: MyGUI

Сообщение nkp »

Nick писал(а):перед connect добавить self.vtriggers[-1].update()
Ник , :good:
есть подозрение , что у тебя уже все написано , и ты по кусочку тут выдаешь :hehehe:
чем же еще объяснить такие точные попадания))))))
(надо конечно потестировать во всех режимах - но подвижки явные - при загрузке тишина!!)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: MyGUI

Сообщение Nick »

Надо этот update сразу в __init__ пина записать! А то и правда вылезают всякие не нужные ивенты.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: MyGUI

Сообщение nkp »

Nick писал(а):class GPin(gobject.GObject, hal.Pin):    __gtype_name__ = 'GPin'    __gsignals__ = {'value-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),                    'raise': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),                    'fall': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())}
Ник!
а нельзя это продвинуть в емс вообще?
я было забыл что изменил этот модуль - потом час потратил после обновления пока
врубился в чем дело :)
сигналы вроде бы нужные ...
напомню - это в hal_glib.py
Ответить

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