Всё делается гораздо проще: в "приёмнике" надо реагировать не просто на высокий уровень пина, а именно на перепад с низкого на высокий.Nick писал(а):Тогда пин гарантированно провисит этот sleep(1000), и любой rt компонент его схавает. Другое дело, что его может не увидеть другой userspace компонент...
[WIKI] Работа с центроискателем в LinuxCNC
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: [WIKI] Работа с центроискателем
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: [WIKI] Работа с центроискателем
Тогда возникнет проблема - надо гарантированно выключать пин
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: [WIKI] Работа с центроискателем
Зато выключать можно будет не в какие-то конкретные моменты, а "когда делать нечего".Nick писал(а):Тогда возникнет проблема - надо гарантированно выключать пин
Ну или применить BIT_IO - кому надо, тот пусть и выключает.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- verser
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
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
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
Re: [WIKI] Работа с центроискателем
Исправлена критическая ошибка для всех измерений изнутри (убран ошибочный переезд, строка 10, во всех четырёх ххх_in.ngc ). Если кто-то уже начал пользоваться приложением, обязательно обновите.
P.S. Этот "косяк" и предыдущий, на который указал nkp, появляются при перемещениях файлов с разных моих компьютеров друг на друга и в сеть. Запутываются версии. На моем рабочем компе этих багов нет. Пора открывать единое место размещения, например, на github .
P.S. Этот "косяк" и предыдущий, на который указал nkp, появляются при перемещениях файлов с разных моих компьютеров друг на друга и в сеть. Запутываются версии. На моем рабочем компе этих багов нет. Пора открывать единое место размещения, например, на github .
- verser
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
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
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
Re: [WIKI] Работа с центроискателем
Nick писал(а):...И вызывать весь Gкод одной строчкой.
Спасибо. Внесу правки .Nick писал(а):...И зачем там data=None?
- verser
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
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
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
Re: [WIKI] Работа с центроискателем
а-а, теперь понял... сделаю..Nick писал(а):Ненене, это все в цикл построчной обработки. Если видим O...CALL - то запускаем ocode.
Re: [WIKI] Работа с центроискателем
пожелание - сделайте индикацию текущей работы. хотя бы лампочку, что процесс идет.
а то он подвисает, потом чего то рывком. и не понятно, выполнил ли, получилось ли?
1. лампочка зеленая - процесс идет.
2. лампочка красная - нифига не нашел, измените параметры. и лучше бы ему вернуться в начальную точку.
3. лампочка какая-то - процесс закончен успешно, вот новые координаты/результаты обмерений.
п.с. 4 датчика сломал.
а то он подвисает, потом чего то рывком. и не понятно, выполнил ли, получилось ли?
1. лампочка зеленая - процесс идет.
2. лампочка красная - нифига не нашел, измените параметры. и лучше бы ему вернуться в начальную точку.
3. лампочка какая-то - процесс закончен успешно, вот новые координаты/результаты обмерений.
п.с. 4 датчика сломал.
Re: [WIKI] Работа с центроискателем
интерфейс приятный, но логику нужно доработать.
опять сломал иглу, но это мусор, как раз для тестирования таких прог.
стартовая точка была близко к правому краю.
при измерении внутреннего центра по Х все отработало хорошо, но! для измерения вернулись в стартовую точку, а зачем? мы же знаем теперь центр по Х, давай вернемся в него и от него уже пойдем искать дальше.
опять сломал иглу, но это мусор, как раз для тестирования таких прог.
стартовая точка была близко к правому краю.
при измерении внутреннего центра по Х все отработало хорошо, но! для измерения вернулись в стартовую точку, а зачем? мы же знаем теперь центр по Х, давай вернемся в него и от него уже пойдем искать дальше.
- verser
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
Re: [WIKI] Работа с центроискателем
Ух ты, точно. Сейчас сделаю. Но только для измерения цилиндра, а не отверстия, с отверстием есть такой подъезд (см. "# move X to new center").pkasy писал(а): при измерении внутреннего центра по Х все отработало хорошо, но! для измерения вернулись в стартовую точку, а зачем? мы же знаем теперь центр по Х, давай вернемся в него и от него уже пойдем искать дальше.
Лампочку аварийного завершения сделаю . А индикация, что процесс идет - это нажатая кнопка, она залипает и другим цветом отображаться должна.pkasy писал(а):пожелание - сделайте индикацию текущей работы. хотя бы лампочку, что процесс идет.
а то он подвисает, потом чего то рывком. и не понятно, выполнил ли, получилось ли?
Хмм, что-то странно, что подвисает, хорошо бы по-подробнее эту ситуацию описать.
Последний раз редактировалось verser 19 май 2015, 08:55, всего редактировалось 1 раз.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: [WIKI] Работа с центроискателем
пока не поборол ошибки (бывает вылетает примерно такое:"Закончил движение без касания" )
пробую без mdi команд...
удобство в некоторой мере уйдет ...
потом может найду в чем косяк , а пока так: то есть просто используется интерфейс для запуска подпрограмм
("кусочек" взят из Features )
пробую без mdi команд...
удобство в некоторой мере уйдет ...
потом может найду в чем косяк , а пока так: то есть просто используется интерфейс для запуска подпрограмм
("кусочек" взят из Features )
Последний раз редактировалось nkp 19 май 2015, 09:19, всего редактировалось 1 раз.
- verser
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
Re: [WIKI] Работа с центроискателем
Как же не хватает записи истории измерений! Вот бы сделать! Такое окошко строк на 5 с прокруткой, в котором отражены все произведенные замеры. Заодно и вопрос с индикацией аварии решился бы.
Только не нашел такого виджета в gladevcp Может, есть идеи?
Только не нашел такого виджета в gladevcp Может, есть идеи?
- verser
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
Re: [WIKI] Работа с центроискателем
Любопытно как это на экране выглядит?nkp писал(а):а пока так
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: [WIKI] Работа с центроискателем
выглядит так как ты сделалverser писал(а):Любопытно как это на экране выглядит?
панелька твоя - еще не подправлял...
или я не понял - про что речь?
вот эмулятор: "одинокая кнопка" (она все равно у меня без дела) - пока кнопка показа результата...
потом нужно это дело автоматизировать...
=========
вообще - мне переделки не прихоть - просто я использую (пытаюсь прикрутить) это к станку с
двумя осями (XY)
двумя осями (XY)
- verser
- Мастер
- Сообщения: 1885
- Зарегистрирован: 21 июл 2013, 22:28
- Репутация: 1278
- Настоящее имя: Сергей
- Откуда: Тбилиси
- Контактная информация:
Re: [WIKI] Работа с центроискателем
а, я думал, что ты preview прямо к Probe Screen панельке прикрутил.nkp писал(а):или я не понял - про что речь?