Страница 29 из 47

Re: MyGUI

Добавлено: 06 янв 2013, 16:14
nkp
железная кнопка на вход 7и77
с входа 7и77 на вход ладдера
выход ладдера на созданый пин mygui.step
mygui.step привязан к функции step в скрипте

Re: MyGUI

Добавлено: 06 янв 2013, 16:56
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

Re: MyGUI

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

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

def abort (self):
      self.c.abort
цепляю его на вновь созданный пин
и уже при загрузке скрипта функция отрабатывает
надо как то все это поправить
некоторые вещи можно и с помощью halui решить - но рано или поздно этот вопрос всплывет однозначно...
Ник - хелп!!!!

Re: MyGUI

Добавлено: 06 янв 2013, 20:10
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)

Re: MyGUI

Добавлено: 06 янв 2013, 20:25
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 скачивания

Re: MyGUI

Добавлено: 06 янв 2013, 20:42
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
        

Re: MyGUI

Добавлено: 06 янв 2013, 20:44
Nick
Чутка подправил верхнее сообщение...

Re: MyGUI

Добавлено: 06 янв 2013, 21:09
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
загружается без ошибки
потестируем....

Re: MyGUI

Добавлено: 06 янв 2013, 21:23
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

Re: MyGUI

Добавлено: 06 янв 2013, 21:25
nkp
наверно отключать проверку сигналов не придется делать
поменял сигналы с 'value-changed' на 'raise' и при загрузке
соответтвующие функции не отрабатывают

Re: MyGUI

Добавлено: 06 янв 2013, 21:29
Nick
Главное Estop через такой пин не проводи - Estop только через realtime!

Re: MyGUI

Добавлено: 06 янв 2013, 21:41
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 ???

Re: MyGUI

Добавлено: 07 янв 2013, 02:13
Nick
вроде должно быть None<False<True, сейчас проверю

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


Можно добавить if tmp == None : return
можно это добавить только для новых сигналов...

Re: MyGUI

Добавлено: 07 янв 2013, 02:25
nkp
почему срабатывают cb-функции ???
ну не нормально это (работает функция ,которую мы не вызывали)
что то здесь не то...

Re: MyGUI

Добавлено: 07 янв 2013, 02:43
Nick
Какие функции?

Re: MyGUI

Добавлено: 07 янв 2013, 02:52
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 раз

Re: MyGUI

Добавлено: 07 янв 2013, 13:53
Nick
хм....
надо подумать...
как бы так отловить тот момент, когда все это происходит....
Попробуй перед connect добавить self.vtriggers[-1].update() может тогда он бросит сигнал и значение обновится. И самое главное задастся _prev.

Re: MyGUI

Добавлено: 07 янв 2013, 15:14
nkp
Nick писал(а):перед connect добавить self.vtriggers[-1].update()
Ник , :good:
есть подозрение , что у тебя уже все написано , и ты по кусочку тут выдаешь :hehehe:
чем же еще объяснить такие точные попадания))))))
(надо конечно потестировать во всех режимах - но подвижки явные - при загрузке тишина!!)

Re: MyGUI

Добавлено: 07 янв 2013, 15:27
Nick
Надо этот update сразу в __init__ пина записать! А то и правда вылезают всякие не нужные ивенты.

Re: MyGUI

Добавлено: 22 янв 2013, 14:51
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