Вывод сообщений из HAL
- 
				Alex868
 - Новичок
 - Сообщения: 18
 - Зарегистрирован: 22 июл 2012, 21:39
 - Репутация: 0
 - Контактная информация:
 
Вывод сообщений из HAL
Здравствуйте!
Модернизирую токарный станок, решил максимально приблизить ЕМС к промышленным стойкам. Вопрос заключается в следующем: Как выводить сообщения об ошибках(неполадках) станка, либо о состоянии каких-либо исполнительных устройств, желательно кириллицей, и без перекомпиляции ЕМС?
Например: имеется входной пин, на который с серводрайвера Х подается сигнал о сбое. Нужно чтобы при появлении единицы на этом пине выдавалось сообщение оператору: "Сбой привода Х ". Конечно, индикацию готовности приводов можно сделать с помощью Pyvcp наставив индикаторов, но на станке довольно много параметров, которые при номальной работе станка не нужны, а необходимость в них появляется только при определенных случаях. На всех промышленных стойках ЧПУ практикуется система текстовых сообщений, в дополнение к графической системе диагностики, и зачастую с журналированием сообщений. Но как это сделать в ЕМС, информации по данному вопросу в интернете не нашел.
			
			
									
									
						Модернизирую токарный станок, решил максимально приблизить ЕМС к промышленным стойкам. Вопрос заключается в следующем: Как выводить сообщения об ошибках(неполадках) станка, либо о состоянии каких-либо исполнительных устройств, желательно кириллицей, и без перекомпиляции ЕМС?
Например: имеется входной пин, на который с серводрайвера Х подается сигнал о сбое. Нужно чтобы при появлении единицы на этом пине выдавалось сообщение оператору: "Сбой привода Х ". Конечно, индикацию готовности приводов можно сделать с помощью Pyvcp наставив индикаторов, но на станке довольно много параметров, которые при номальной работе станка не нужны, а необходимость в них появляется только при определенных случаях. На всех промышленных стойках ЧПУ практикуется система текстовых сообщений, в дополнение к графической системе диагностики, и зачастую с журналированием сообщений. Но как это сделать в ЕМС, информации по данному вопросу в интернете не нашел.
- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
http://www.linuxcnc.org/docs/2.5/html/g ... messages_a
к любому пину легко цепляем любое сообщение
			
			
									
									
						к любому пину легко цепляем любое сообщение
- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
а если хочешь на весь экран   -
то через М-файл:
где message.png  файл с надписью  72-м шрифтом оранжевого цвета 
			
			
									
									
						то через М-файл:
Код: Выделить всё
#!/bin/bash
eog /home/ЮЗЕР/linuxcnc/nc_files/message.png
exit 0- Nick
 - Мастер
 - Сообщения: 22776
 - Зарегистрирован: 23 ноя 2009, 16:45
 - Репутация: 1735
 - Заслуга: Developer
 - Откуда: Gatchina, Saint-Petersburg distr., Russia
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Тут надо завязывать выполнение программы на пин, а не на Gкод... 
Поэтому вариантов несколько - свой user-space компонент на питоне.
в нем
Или можно воспользоваться PyVCP с виджетом Image u32 и туда запихать все варианты ошибок: http://linuxcnc.org/docs/html/hal/pyvcp.html#_images 
Единственный минус - одновременно показать получится только 1 ошибку.
			
			
									
									
						Поэтому вариантов несколько - свой user-space компонент на питоне.
в нем
Код: Выделить всё
import hal, time
h = hal.component("serial-out")
h.newpin("msg-0-in", hal.HAL_BIT, hal.HAL_IN)
h.ready()
try:
	while 1:
		time.sleep(1)
		if h["msg-0-in"]== 1 and last["msg-0-in"] == 0 :
			print "error!!!"
		last["msg-0-in"]=h["msg-0-in"]
			
		
except KeyboardInterrupt:
    raise SystemExit
Единственный минус - одновременно показать получится только 1 ошибку.
- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
я имел в виду через MDI_COMMAND :
здесь папка с конфигом:
http://youtu.be/kd2SdzSqpFg
			
			
									
									
						Код: Выделить всё
MDI_COMMAND = M134 - 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
здесь любой свой пин , на который приходит сигнал ошибки (или любой другой) соеденяем 
с halui.mdi-command-XX
чем не вариант ?
			
			
									
									
						с halui.mdi-command-XX
чем не вариант ?
- 
				Alex868
 - Новичок
 - Сообщения: 18
 - Зарегистрирован: 22 июл 2012, 21:39
 - Репутация: 0
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Вариант интересный, но желательно чтобы сообщение выводилось в правом углу, как стандартные сообщения ЕМС. Я изначально тоже думал сделать через halui.mdi-command, но проблема в том что во время исполнения УП в автоматическом режиме, она не будет отрабатываться. Еще команда не отработает, если не найдены начала.
			
			
									
									
						- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
какого размера монитор на пульте оператора?
в углу заметить сообщение можно только не сводя глаз с экрана
			
			
									
									
						в углу заметить сообщение можно только не сводя глаз с экрана
- 
				Alex868
 - Новичок
 - Сообщения: 18
 - Зарегистрирован: 22 июл 2012, 21:39
 - Репутация: 0
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Монитор 17 дюймов, сообщения видны вполне нормально. В случае остановки станка оператор в первую очередь посмотрит на сообщения в углу.
Но дело даже не в том, где именно будет выведено сообщение. Как сделать, чтобы сообщение выводилось независимо от режимов работы, и когда не найдены начала, и даже когда станок на АВОСТе?
			
			
									
									
						Но дело даже не в том, где именно будет выведено сообщение. Как сделать, чтобы сообщение выводилось независимо от режимов работы, и когда не найдены начала, и даже когда станок на АВОСТе?
- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
интересно....Alex868 писал(а): и даже когда станок на АВОСТе?
- 
				Alex868
 - Новичок
 - Сообщения: 18
 - Зарегистрирован: 22 июл 2012, 21:39
 - Репутация: 0
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Ну с АВОСТом я погорячился) А вот пока не установлены нули (не найдены начала), а так же во время выполнения УП, сообщения не выводятся все равно...
			
			
									
									
						- 
				Alex868
 - Новичок
 - Сообщения: 18
 - Зарегистрирован: 22 июл 2012, 21:39
 - Репутация: 0
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Выдержка из мануала:
10.2.12 MDI
Иногда пользователь хочет добавить более сложную задачу для выполения при активации пина HAL. Это возмонжо при использовании следующей схемы оманд MDI:
MDI_COMMAND добавляется в секцию [HALUI] в файл ini.
Когда зпускается halui он прочитает поле MDI_COMMAND из файла ini, и экспортирует пин от 00 до количества записей MDI_COMMAND найденных в ini (максимум 64 команды).
halui.mdi-command-<nn> (bit, in) - halui попытается послать MDI команду заданную в ini файле. Это не всегда будет получаться в зависимости от тогов каком режие находится emc2 (например во время нахождения в режиме AUTO halui не может успешно послать комманду MDI). Если команда прошла успешно halui переключит EMC2 в режим MDI, а затем снова вернет в ручной режим.
Не пойдет этот вариант. Нужно что-то другое, чтобы работало независимо от режимов работы.
			
			
									
									
						10.2.12 MDI
Иногда пользователь хочет добавить более сложную задачу для выполения при активации пина HAL. Это возмонжо при использовании следующей схемы оманд MDI:
MDI_COMMAND добавляется в секцию [HALUI] в файл ini.
Код: Выделить всё
[HALUI]
MDI_COMMAND = G0 X0
halui.mdi-command-<nn> (bit, in) - halui попытается послать MDI команду заданную в ini файле. Это не всегда будет получаться в зависимости от тогов каком режие находится emc2 (например во время нахождения в режиме AUTO halui не может успешно послать комманду MDI). Если команда прошла успешно halui переключит EMC2 в режим MDI, а затем снова вернет в ручной режим.
Не пойдет этот вариант. Нужно что-то другое, чтобы работало независимо от режимов работы.
- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
ну тогда через компонент,как писал Ник
только наверно пинов создать побольше- под все задачи
			
			
									
									
						только наверно пинов создать побольше- под все задачи
- 
				Alex868
 - Новичок
 - Сообщения: 18
 - Зарегистрирован: 22 июл 2012, 21:39
 - Репутация: 0
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Честно говоря не совсем понял, куда нужно копировать этот код, и как подключать его к пину. В программировании не силен.
			
			
									
									
						- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
сверху добавь в код
и сохрани  в папку с конфигом name.py
в хал добавь :
должны появиться объявленные пины
			
			
									
									
						Код: Выделить всё
 #!/usr/bin/pythonв хал добавь :
Код: Выделить всё
loadusr -Wn name python name.py- 
				Alex868
 - Новичок
 - Сообщения: 18
 - Зарегистрирован: 22 июл 2012, 21:39
 - Репутация: 0
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Ругается на код:
			
			
									
									
						Код: Выделить всё
Debug file information:
Can not find -sec MOT -var MOT -num 1 
Can not find -sec IO -var IO -num 1 
Can not find -sec LINUXCNC -var NML_FILE -num 1 
Can not find -sec EMC -var NML_FILE -num 1 
Traceback (most recent call last):
  File "name.py", line 15, in <module>
    last["msg-0-in"]=h["msg-0-in"]
NameError: name 'last' is not defined
- 
				nkp
 - Мастер
 - Сообщения: 8340
 - Зарегистрирован: 28 ноя 2011, 00:25
 - Репутация: 1589
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Да 
не разбирался с кодом -просто убрал пока эту строчку
запустилось
поправим код
			
			
									
									
						не разбирался с кодом -просто убрал пока эту строчку
Код: Выделить всё
#!/usr/bin/python
import hal, time
h = hal.component("serial-out")
h.newpin("msg-0-in", hal.HAL_BIT, hal.HAL_IN)
h.ready()
try:
   while 1:
      time.sleep(1)
      if h["msg-0-in"]== 1 and last["msg-0-in"] == 0 :
         print "error!!!"
         
      
except KeyboardInterrupt:
    raise SystemExit- Nick
 - Мастер
 - Сообщения: 22776
 - Зарегистрирован: 23 ноя 2009, 16:45
 - Репутация: 1735
 - Заслуга: Developer
 - Откуда: Gatchina, Saint-Petersburg distr., Russia
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Надо добавить строчку 
last = h[:]
после try с таким же отступом как while.
И на каждую ошибку добавить свой пин... в общем завтра допишу...
А на счет pyvcp + image u32 не думал?
			
			
									
									
						last = h[:]
после try с таким же отступом как while.
И на каждую ошибку добавить свой пин... в общем завтра допишу...
А на счет pyvcp + image u32 не думал?
- Nick
 - Мастер
 - Сообщения: 22776
 - Зарегистрирован: 23 ноя 2009, 16:45
 - Репутация: 1735
 - Заслуга: Developer
 - Откуда: Gatchina, Saint-Petersburg distr., Russia
 - Контактная информация:
 
Re: Вывод сообщений из HAL
Оказывается Psha практически все это сделал еще в далеком 2011 
. 
Сейчас попробуем туда проверку пинов hal прикрутить...
http://psha.org.ru/cgit/psha/emc-notify/
			
			
									
									
						Сейчас попробуем туда проверку пинов hal прикрутить...
http://psha.org.ru/cgit/psha/emc-notify/
- 
				Alex868
 - Новичок
 - Сообщения: 18
 - Зарегистрирован: 22 июл 2012, 21:39
 - Репутация: 0
 - Контактная информация:
 
Re: Вывод сообщений из HAL
попробовал добавить строчку last = h[:] вылетает с ошибкой:
Если удалить строку как сделал nkp, то ЕМС не запускается совсем, умирает, не выводя никаких ошибок.
На счет pyvcp + image u32 пока еще не разбирался, надо будет почитать.
			
			
									
									
						Код: Выделить всё
Debug file information:
Can not find -sec MOT -var MOT -num 1 
Can not find -sec IO -var IO -num 1 
Can not find -sec LINUXCNC -var NML_FILE -num 1 
Can not find -sec EMC -var NML_FILE -num 1 
Traceback (most recent call last):
  File "name.py", line 11, in <module>
    last = h[:]
TypeError: expected string or Unicode object, slice found
miu-mill.hal:12: python exited without becoming ready
6700
На счет pyvcp + image u32 пока еще не разбирался, надо будет почитать.
