Страница 1 из 3

Вывод сообщений из HAL

Добавлено: 22 июл 2012, 22:13
Alex868
Здравствуйте!
Модернизирую токарный станок, решил максимально приблизить ЕМС к промышленным стойкам. Вопрос заключается в следующем: Как выводить сообщения об ошибках(неполадках) станка, либо о состоянии каких-либо исполнительных устройств, желательно кириллицей, и без перекомпиляции ЕМС?
Например: имеется входной пин, на который с серводрайвера Х подается сигнал о сбое. Нужно чтобы при появлении единицы на этом пине выдавалось сообщение оператору: "Сбой привода Х ". Конечно, индикацию готовности приводов можно сделать с помощью Pyvcp наставив индикаторов, но на станке довольно много параметров, которые при номальной работе станка не нужны, а необходимость в них появляется только при определенных случаях. На всех промышленных стойках ЧПУ практикуется система текстовых сообщений, в дополнение к графической системе диагностики, и зачастую с журналированием сообщений. Но как это сделать в ЕМС, информации по данному вопросу в интернете не нашел.

Re: Вывод сообщений из HAL

Добавлено: 22 июл 2012, 23:09
nkp
http://www.linuxcnc.org/docs/2.5/html/g ... messages_a
к любому пину легко цепляем любое сообщение

Re: Вывод сообщений из HAL

Добавлено: 22 июл 2012, 23:18
nkp
а если хочешь на весь экран -
то через М-файл:

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

#!/bin/bash
eog /home/ЮЗЕР/linuxcnc/nc_files/message.png
exit 0
где message.png файл с надписью 72-м шрифтом оранжевого цвета :)

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 11:04
Nick
Тут надо завязывать выполнение программы на пин, а не на Gкод...
Поэтому вариантов несколько - свой 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
Или можно воспользоваться PyVCP с виджетом Image u32 и туда запихать все варианты ошибок: http://linuxcnc.org/docs/html/hal/pyvcp.html#_images
Единственный минус - одновременно показать получится только 1 ошибку.

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 20:39
nkp
я имел в виду через MDI_COMMAND :

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

MDI_COMMAND = M134 
здесь папка с конфигом:
SherlineLathe-im.tar
не обращаем внимание на все лишнее
(220 КБ) 492 скачивания
http://youtu.be/kd2SdzSqpFg

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 20:49
nkp
здесь любой свой пин , на который приходит сигнал ошибки (или любой другой) соеденяем
с halui.mdi-command-XX
чем не вариант ? :)

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 21:03
Alex868
Вариант интересный, но желательно чтобы сообщение выводилось в правом углу, как стандартные сообщения ЕМС. Я изначально тоже думал сделать через halui.mdi-command, но проблема в том что во время исполнения УП в автоматическом режиме, она не будет отрабатываться. Еще команда не отработает, если не найдены начала.

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 21:13
nkp
какого размера монитор на пульте оператора?
в углу заметить сообщение можно только не сводя глаз с экрана

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 21:15
Alex868
Монитор 17 дюймов, сообщения видны вполне нормально. В случае остановки станка оператор в первую очередь посмотрит на сообщения в углу.
Но дело даже не в том, где именно будет выведено сообщение. Как сделать, чтобы сообщение выводилось независимо от режимов работы, и когда не найдены начала, и даже когда станок на АВОСТе?

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 21:34
nkp
Alex868 писал(а): и даже когда станок на АВОСТе?
интересно....

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 21:37
Alex868
Ну с АВОСТом я погорячился) А вот пока не установлены нули (не найдены начала), а так же во время выполнения УП, сообщения не выводятся все равно...

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 21:49
Alex868
Выдержка из мануала:
10.2.12 MDI
Иногда пользователь хочет добавить более сложную задачу для выполения при активации пина HAL. Это возмонжо при использовании следующей схемы оманд MDI:
MDI_COMMAND добавляется в секцию [HALUI] в файл ini.

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

[HALUI]
MDI_COMMAND = G0 X0
Когда зпускается 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, а затем снова вернет в ручной режим.

Не пойдет этот вариант. Нужно что-то другое, чтобы работало независимо от режимов работы.

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 22:10
nkp
ну тогда через компонент,как писал Ник
только наверно пинов создать побольше- под все задачи

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 22:16
Alex868
Честно говоря не совсем понял, куда нужно копировать этот код, и как подключать его к пину. В программировании не силен.

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 22:42
nkp
сверху добавь в код

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

 #!/usr/bin/python
и сохрани в папку с конфигом name.py
в хал добавь :

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

loadusr -Wn name python name.py
должны появиться объявленные пины

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 22:55
Alex868
Ругается на код:

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

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

Re: Вывод сообщений из HAL

Добавлено: 23 июл 2012, 23:06
nkp
Да
не разбирался с кодом -просто убрал пока эту строчку

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

#!/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
запустилось
(для просмотра содержимого нажмите на ссылку)
Выделение(018).png (3496 просмотров) <a class='original' href='./download/file.php?id=6725&mode=view' target=_blank>Загрузить оригинал (62.12 КБ)</a>
поправим код

Re: Вывод сообщений из HAL

Добавлено: 24 июл 2012, 00:12
Nick
Надо добавить строчку
last = h[:]
после try с таким же отступом как while.

И на каждую ошибку добавить свой пин... в общем завтра допишу...

А на счет pyvcp + image u32 не думал?

Re: Вывод сообщений из HAL

Добавлено: 24 июл 2012, 09:53
Nick
Оказывается Psha практически все это сделал еще в далеком 2011 :).
Сейчас попробуем туда проверку пинов hal прикрутить...

http://psha.org.ru/cgit/psha/emc-notify/

Re: Вывод сообщений из HAL

Добавлено: 24 июл 2012, 12:56
Alex868
попробовал добавить строчку last = h[:] вылетает с ошибкой:

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

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
Если удалить строку как сделал nkp, то ЕМС не запускается совсем, умирает, не выводя никаких ошибок.
На счет pyvcp + image u32 пока еще не разбирался, надо будет почитать.