Страница 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 писал(а):Надо ему новый сигнал приделать...
это пока мне сложно реализовать
хотел через ладдер обойти....
но не тут то было.
дело в том ,что пишу функцию , ну например :
цепляю его на вновь созданный пин
и уже при загрузке скрипта функция отрабатывает
надо как то все это поправить
некоторые вещи можно и с помощью 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, ())}
а вот дальше куда?
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()
Ник ,
есть подозрение , что у тебя уже все написано , и ты по кусочку тут выдаешь
чем же еще объяснить такие точные попадания))))))
(надо конечно потестировать во всех режимах - но подвижки явные - при загрузке тишина!!)
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