Всё делается гораздо проще: в "приёмнике" надо реагировать не просто на высокий уровень пина, а именно на перепад с низкого на высокий.Nick писал(а):Тогда пин гарантированно провисит этот sleep(1000), и любой rt компонент его схавает. Другое дело, что его может не увидеть другой userspace компонент...
[WIKI] Работа с центроискателем в LinuxCNC
- Serg
 - Мастер
 - Сообщения: 21923
 - Зарегистрирован: 17 апр 2012, 14:58
 - Репутация: 5183
 - Заслуга: c781c134843e0c1a3de9
 - Настоящее имя: Сергей
 - Откуда: Москва
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
						- Nick
 - Мастер
 - Сообщения: 22776
 - Зарегистрирован: 23 ноя 2009, 16:45
 - Репутация: 1735
 - Заслуга: Developer
 - Откуда: Gatchina, Saint-Petersburg distr., Russia
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Тогда возникнет проблема - надо гарантированно выключать пин 
			
			
									
									
						- Serg
 - Мастер
 - Сообщения: 21923
 - Зарегистрирован: 17 апр 2012, 14:58
 - Репутация: 5183
 - Заслуга: c781c134843e0c1a3de9
 - Настоящее имя: Сергей
 - Откуда: Москва
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Зато выключать можно будет не в какие-то конкретные моменты, а "когда делать нечего".Nick писал(а):Тогда возникнет проблема - надо гарантированно выключать пин
Ну или применить BIT_IO - кому надо, тот пусть и выключает.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
						- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Буду так оптимизировать .py.Nick писал(а):А чего ты для вот этого всего не сделал ... что-то типо вот такого:
Может, есть замечания по стилистике? А то много исправлять потом.
Код: Выделить всё
#  ..... New defs ...............
   def gcode(self, s, data = None): 
        for l in s.split("\n"):
            self.command.mdi( l )
            self.command.wait_complete()
            if self.error_poll() == -1:
                return -1
        return 0
    def ocode(self, s, data = None)	
        self.command.mdi(s)
        self.stat.poll()
        while self.stat.exec_state == 7 or self.stat.exec_state == 3 :
            if self.error_poll() == -1:
                return -1
            self.command.wait_complete()
            self.stat.poll()
        self.command.wait_complete()
        if self.error_poll() == -1:
            return -1
		return 0
		
#....Result...............................
    # Corners
    # Move Probe manual under corner 2-10 mm
    # X+Y+ 
    def on_xpyp_released(self, data = None):
        self.command.mode( linuxcnc.MODE_MDI )
        self.command.wait_complete()
        # move Y + edge_lenght
        s="""G91
        G0 Y%f
        G90""" % (self.spbtn1_edge_lenght.get_value() )        
        if self.gcode(s) == -1:
            return
        # Start xplus.ngc
        if self.ocode ("O<xplus> call") == -1:
            return
        # show X result
        a=self.stat.probed_position
        xres=float(a[0])+0.5*self.spbtn1_probe_diam.get_value()
        self.lb_probe_xp.set_text( "%.4f" % xres )
        self.lenght_x()
        # move X + edge_lenght
        s="""G91
        X%f Y-%f
        G90""" % (self.spbtn1_edge_lenght.get_value(),self.spbtn1_edge_lenght.get_value() )        
        if self.gcode(s) == -1:
            return
        # Start yplus.ngc
        if self.ocode ("O<yplus> call") == -1:
            return
        # show Y result
        a=self.stat.probed_position
        yres=float(a[1])+0.5*self.spbtn1_probe_diam.get_value()
        self.lb_probe_yp.set_text( "%.4f" % yres )
        self.lenght_y()
        # move to finded  point
        self.command.mdi( "G0 X%f Y%f" % (xres,yres))
        self.command.wait_complete()
        self.command.mode( linuxcnc.MODE_MANUAL )
        self.command.wait_complete()
- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Исправлена критическая ошибка для всех измерений изнутри (убран ошибочный переезд, строка 10, во всех четырёх ххх_in.ngc ). Если кто-то уже начал пользоваться приложением, обязательно обновите.
P.S. Этот "косяк" и предыдущий, на который указал nkp, появляются при перемещениях файлов с разных моих компьютеров друг на друга и в сеть. Запутываются версии. На моем рабочем компе этих багов нет. Пора открывать единое место размещения, например, на github
 .
			
			
									
									
						P.S. Этот "косяк" и предыдущий, на который указал nkp, появляются при перемещениях файлов с разных моих компьютеров друг на друга и в сеть. Запутываются версии. На моем рабочем компе этих багов нет. Пора открывать единое место размещения, например, на github
- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Крупное обновление.
1. Убрал "слепые" для error_poll() зоны, а именно, убрал перемещения на холостом ходу из ngc и перенес их в python c доп. проверкой error_poll(). Таким образом повысилась безопасность измерений. В результате этого также объединились ngc внешних и внутренних измерений.
2. Большущая оптимизация python кода в probe_screen.py.
3. Убрал переключения режима MDI -> MANUAL при каждом обмере. По-крайней мере в gmoccapy стало возможно нормально работать, не нужно после каждого обмера заново входить в Probe Screen.
4. Исходники Probe Screen теперь на github.
Протестировал все 19 операции, багов не обнаружил.
			
			
									
									
						1. Убрал "слепые" для error_poll() зоны, а именно, убрал перемещения на холостом ходу из ngc и перенес их в python c доп. проверкой error_poll(). Таким образом повысилась безопасность измерений. В результате этого также объединились ngc внешних и внутренних измерений.
2. Большущая оптимизация python кода в probe_screen.py.
3. Убрал переключения режима MDI -> MANUAL при каждом обмере. По-крайней мере в gmoccapy стало возможно нормально работать, не нужно после каждого обмера заново входить в Probe Screen.
4. Исходники Probe Screen теперь на github.
Протестировал все 19 операции, багов не обнаружил.
- Nick
 - Мастер
 - Сообщения: 22776
 - Зарегистрирован: 23 ноя 2009, 16:45
 - Репутация: 1735
 - Заслуга: Developer
 - Откуда: Gatchina, Saint-Petersburg distr., Russia
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
В 
И вызывать весь Gкод одной строчкой.
			
			
									
									
						можно засунуть:verser писал(а):def gcode(self, s, data = None):
Код: Выделить всё
if re.search("^\s*O.*call",l,re.I) :
   if ocode(l) == -1 :
     return -1- Nick
 - Мастер
 - Сообщения: 22776
 - Зарегистрирован: 23 ноя 2009, 16:45
 - Репутация: 1735
 - Заслуга: Developer
 - Откуда: Gatchina, Saint-Petersburg distr., Russia
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
И зачем там data=None?
			
			
									
									
						- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Nick писал(а):...И вызывать весь Gкод одной строчкой.
Спасибо. Внесу правкиNick писал(а):...И зачем там data=None?
- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Я так понял, что re.search мне вот так правильно будет в gcode() вставить
P.S. всё, ознакомился с "re".., python, как латекс, тяни под себя как хочешь  
			
			
									
									
						Код: Выделить всё
if re.search("^\s*O.*call",l,re.I) :
   if ocode(l) == -1 :
     return -1
   return 0
else:
# всё остальное из gcode() - Nick
 - Мастер
 - Сообщения: 22776
 - Зарегистрирован: 23 ноя 2009, 16:45
 - Репутация: 1735
 - Заслуга: Developer
 - Откуда: Gatchina, Saint-Petersburg distr., Russia
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Ненене, это все  в цикл построчной обработки. Если видим O...CALL - то запускаем ocode. 
Вообще, можешь спокойно добавить все вот это
вместо простого 
и убрать ocode вообще. 
ну будет + 5 комманд на каждый вызов mdi, это совсем не критично.
			
			
									
									
						Вообще, можешь спокойно добавить все вот это
Код: Выделить всё
self.stat.poll()
        while self.stat.exec_state == 7 or self.stat.exec_state == 3 :
            if self.error_poll() == -1:
                return -1
            self.command.wait_complete()
            self.stat.poll()
        self.command.wait_complete()
        if self.error_poll() == -1:
            return -1Код: Выделить всё
            if self.error_poll() == -1:
                return -1ну будет + 5 комманд на каждый вызов mdi, это совсем не критично.
- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
а-а, теперь понял... сделаю..Nick писал(а):Ненене, это все в цикл построчной обработки. Если видим O...CALL - то запускаем ocode.
Re: [WIKI] Работа с центроискателем
пожелание - сделайте индикацию текущей работы. хотя бы лампочку, что процесс идет.
а то он подвисает, потом чего то рывком. и не понятно, выполнил ли, получилось ли?
1. лампочка зеленая - процесс идет.
2. лампочка красная - нифига не нашел, измените параметры. и лучше бы ему вернуться в начальную точку.
3. лампочка какая-то - процесс закончен успешно, вот новые координаты/результаты обмерений.
п.с. 4 датчика сломал.
			
			
									
									
						а то он подвисает, потом чего то рывком. и не понятно, выполнил ли, получилось ли?
1. лампочка зеленая - процесс идет.
2. лампочка красная - нифига не нашел, измените параметры. и лучше бы ему вернуться в начальную точку.
3. лампочка какая-то - процесс закончен успешно, вот новые координаты/результаты обмерений.
п.с. 4 датчика сломал.
Re: [WIKI] Работа с центроискателем
интерфейс приятный, но логику нужно доработать.
опять сломал иглу, но это мусор, как раз для тестирования таких прог.
стартовая точка была близко к правому краю.
при измерении внутреннего центра по Х все отработало хорошо, но! для измерения вернулись в стартовую точку, а зачем? мы же знаем теперь центр по Х, давай вернемся в него и от него уже пойдем искать дальше.
			
			
									
									
						опять сломал иглу, но это мусор, как раз для тестирования таких прог.
стартовая точка была близко к правому краю.
при измерении внутреннего центра по Х все отработало хорошо, но! для измерения вернулись в стартовую точку, а зачем? мы же знаем теперь центр по Х, давай вернемся в него и от него уже пойдем искать дальше.
- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Ух ты, точно. Сейчас сделаю. Но только для измерения цилиндра, а не отверстия, с отверстием есть такой подъезд (см. "# move X to new center").pkasy писал(а): при измерении внутреннего центра по Х все отработало хорошо, но! для измерения вернулись в стартовую точку, а зачем? мы же знаем теперь центр по Х, давай вернемся в него и от него уже пойдем искать дальше.
Лампочку аварийного завершения сделаюpkasy писал(а):пожелание - сделайте индикацию текущей работы. хотя бы лампочку, что процесс идет.
а то он подвисает, потом чего то рывком. и не понятно, выполнил ли, получилось ли?
Хмм, что-то странно, что подвисает, хорошо бы по-подробнее эту ситуацию описать.
					Последний раз редактировалось verser 19 май 2015, 08:55, всего редактировалось 1 раз.
									
			
									
						- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
пока не поборол ошибки (бывает вылетает примерно такое:"Закончил движение без касания" )
пробую без mdi команд...
удобство в некоторой мере уйдет ...
потом может найду в чем косяк , а пока так: то есть просто используется интерфейс для запуска подпрограмм
("кусочек" взят из Features
 )
			
			
													пробую без mdi команд...
удобство в некоторой мере уйдет ...
потом может найду в чем косяк , а пока так: то есть просто используется интерфейс для запуска подпрограмм
("кусочек" взят из Features
					Последний раз редактировалось nkp 19 май 2015, 09:19, всего редактировалось 1 раз.
									
			
									
						- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Как же не хватает записи истории измерений! Вот бы сделать! Такое окошко строк на 5 с прокруткой, в котором отражены все произведенные замеры. Заодно и вопрос с индикацией аварии решился бы. 
Только не нашел такого виджета в gladevcp
 Может, есть идеи?
			
			
									
									
						Только не нашел такого виджета в gladevcp
- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
Любопытно как это на экране выглядит?nkp писал(а):а пока так
- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
выглядит так как ты сделалverser писал(а):Любопытно как это на экране выглядит?
панелька твоя - еще не подправлял...
или я не понял - про что речь?
вот эмулятор: "одинокая кнопка" (она все равно у меня без дела) - пока кнопка показа результата...
потом нужно это дело автоматизировать...
=========
вообще  - мне переделки не прихоть - просто я использую (пытаюсь прикрутить) это к станку с 
двумя осями (XY)
двумя осями (XY)
- verser
 - Мастер
 - Сообщения: 1903
 - Зарегистрирован: 21 июл 2013, 22:28
 - Репутация: 1282
 - Настоящее имя: Сергей
 - Откуда: Тбилиси
 - Контактная информация:
 
Re: [WIKI] Работа с центроискателем
а, я думал, что ты preview прямо к Probe Screen панельке прикрутил.nkp писал(а):или я не понял - про что речь?
