Страница 11 из 14
[WIKI] Создание конфигурации простого автомата от чайника
Добавлено: 15 окт 2014, 11:40
Ворон226
Часто возникает необходимость создания конфигурации простого автомата на LinuxCNC.
Попробую сделать это тут для новичков (к коим и себя отношу).
А начнем с постановки задачи.
Задача.
Сконфигурировать простой автомат "Планшетный широкоформатный сканер" на базе LinuxCNC со своей панелью управления и встроенной перепрограммируемой программой обработки заготовки.
Для начала определим необходимые направления работы:
1. Описание логики работы сканера
2. Создание файла INI
3. Создание визуальной панели
4. Создание связей между HAL, визуальной панелью и программами/подпрограммами
5. Создание HAL
6. Написание программы сканирования
7. Способы проверки и тестирования конфигурации
Продолжу вечером...
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 02 ноя 2014, 08:31
nkp
попробуй в файл , который запускается по умолчанию(skan.ngc) опять же записать простенькое перемещение:
у меня с этим кодом запускается...
=============
ну и пока не прикручен механизм вывода ошибок и сообщений к панели - запускать из терминала ,
дабы видеть - что там не так...
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 02 ноя 2014, 08:37
nkp
любую другую программу можно загружать для проверки:
при запущеном емс открываешь отдельный терминал,
там:
Код: Выделить всё
python
>>> import linuxcnc
>>> c = linuxcnc.command()
>>> c.program_open('/home/nkp/emc2-dev-80db2a2/configs/MyGUI/comm.ngc')
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 12 ноя 2014, 19:06
Ворон226
С кнопкой ПУСК пока не разобрался... А вот на что нарвался, пробуя конфигурацию сканера, "прикрученную" к Axis-у:
Выезжаю в точку начала сканирования - запоминаю координаты.
Выезжаю в конечную точку сканирования - запоминаю координаты.
Нажимаю кнопку ПУСК в меню AXIS - головка поехала отрабатывать сканирование...
Первая строка: первая точка - пауза - вторая точка - пауза ... последняя точка - пауза - переезд на вторую строчку...
Вторая строка и т.д.
И тут замечаю, что при переезде в начало второй строки, головка сместилась по Х !!!
В третьей строке - ещё дольше смещение!
И в четвертой. И в пятой!
Искал причину - не нашел!
Подумал, что, возможно переменные, сохраненные в emc.var, меняют свое значение?
Но проверить не успел - вспомнил, что на станке установлена версия 2.5
Взял домой материнку с винтом и переставил на версию 2.6
Сегодня запустил сканер и РАБОТАЕТ!
Получается, что LinuxCNC 2.5 многое чего не умел

Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 15 ноя 2014, 20:15
Ворон226
Подключаю пользовательский компонент skanerform... А это у меня уже второй пользовательский компонент.
Код: Выделить всё
93 loadusr -Wn enrun python enrun.py
94 loadusr -Wn skanform python skanform.py
(нумерация строк в редакторе)
LinuxCNC ругается так:
Код: Выделить всё
skaner.hal:94: python exited without becoming ready
Пока не умею распознать такую реакцию... Что это может быть?
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 15 ноя 2014, 20:28
nkp
Ворон226 писал(а):LinuxCNC ругается так:
там ( в тексте ошибки) может быть информативной предыдущая строка...
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 15 ноя 2014, 20:41
Ворон226
Полностью текст ниже:
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 15 ноя 2014, 21:09
Serg
Ворон226 писал(а):Пока не умею распознать такую реакцию... Что это может быть?
Забавное имя... Там случаем какой графики нет?..
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 15 ноя 2014, 21:24
Ворон226
Так ведь автомат-сканер

И компонент, который по сигналам LCNC делает снимки и корректирует их, складывая в папочку под разными именами

Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 15 ноя 2014, 21:28
Serg
Имелось в виду кнопки, поля ввода и т.п.
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 15 ноя 2014, 21:41
Ворон226
Там только несколько кнопок: Установка нуля, Установка МАХ и ПУСК. И Три кнопки режимов сканирования, которые пока не задействованы.
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 15 ноя 2014, 22:50
torvn77
мой опыт использования LinuxCNC,пусть и эксперементальной версии показывает,что включение сохранения переменых в файле
приводит к тому,что если в работе возникла ощибка.то она потом и в этот файл сохранится.
В общем через раз этот файл лучше удалять.
Ято можно сделать?
1)файл /usr/bin/linuxcnc является скриптом bash,ну взять и дописать в него копирование эталонного файла var из кладовочки
2)Почему бы просто не сделать отдельную функцию-фаил machine_config.ngc?
3)Я не пробовал,но может можно с помошью (LOGOPEN,) (LOG) выводить переменные во внешний фаил,
если получится то просто пересоздавая machine_config.ngc.
Если это не получится,то в /usr/bin/linuxcnc добавить вызов скрипта,который на основе этого лога пересоздаст machine_config.ngc
Update
Это мой ответ на пост
#40
Не посмотрел на номер страницы..
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 00:41
Ворон226
torvn77 писал(а):мой опыт использования LinuxCNC,пусть и эксперементальной версии показывает,что включение сохранения переменых в файле
приводит к тому,что если в работе возникла ощибка.то она потом и в этот файл сохранится.
А откуда ты взял про сохраненные ошибки?
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 00:58
torvn77
Просто наблюдение,в процессе функционирования LinuxCNC 2.7/2.8 в один прекрасный момент начинает глючить.
глюки как я понимаю крутятся вокруг базовых координатных систем G53-G59.3 и их влияния на визуализацию.
Так вот,если LinuxCNC перезапустить без сноса var,то глюки продолжатся,а если я удаляю var и файл с сохранёнными координатами,
то программа перезапускается нормальной.
Что именно сохраняет глюки var или координаты я не выяснял.
Но и на 2,5/2,6 затрагивать переключения изменения систем координат было не безопасно.
Вообще тогда у меня возникло такое подозрение,что в LinuxCNC нет обработки ошибок и всё хорошо пока нет выхода за сценарии правильной работы.
Тогда у меня могла даже ос рухнуть.сейчас rtpreempt стабильнее,так себе иногда встану в лужу,но это не страшно,так как мне известно её местонахождение.
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 01:30
Serg
Ворон226 писал(а):Там только несколько кнопок: Установка нуля, Установка МАХ и ПУСК. И Три кнопки режимов сканирования, которые пока не задействованы.
Ну и где оно должно эти кнопки нарисовать? В сегменте разделяемой памяти?
У HAL компонентов нет доступа ни к дисплею, ни к событиям мыши и клавы.
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 01:43
Ворон226
UAVpilot писал(а):Ворон226 писал(а):Там только несколько кнопок: Установка нуля, Установка МАХ и ПУСК. И Три кнопки режимов сканирования, которые пока не задействованы.
Ну и где оно должно эти кнопки нарисовать? В сегменте разделяемой памяти?
У HAL компонентов нет доступа ни к дисплею, ни к событиям мыши и клавы.
Это я уже проходил

и частично прописал в ВИКИ по теме. Но повториться не трудно:
Кнопочки и "светодиодики" прописал в файле custom_posgui.hal (сейчас обкатываю компонент на версии skaner-axis):
Код: Выделить всё
net on gladevcp.hal_button1 halui.machine.on
net stop gladevcp.hal_button2 halui.estop.activate
net mdi1 gladevcp.hal_button3 halui.mdi-command-00
net mdi2 gladevcp.hal_button4 halui.mdi-command-01
net mdi3 gladevcp.hal_button5 halui.mdi-command-02
net godk gladevcp.hal_button6
net go gladevcp.hal_button7
net levdk gladevcp.hal_button8
net lev gladevcp.hal_button9
net prav gladevcp.hal_button10
net pravdk gladevcp.hal_button11
net zad gladevcp.hal_button12
net zaddk gladevcp.hal_button13
#net start gladevcp.hal_button14 halui.program.run
net led1 gladevcp.hal_led1
net led2 gladevcp.hal_led2
net led3 gladevcp.hal_led3
net dpi1 gladevcp.hal_togglebutton1 gladevcp.hal_led4
net dpi2 gladevcp.hal_togglebutton2 gladevcp.hal_led5
net dpi3 gladevcp.hal_togglebutton3 gladevcp.hal_led6
net osv gladevcp.hal_togglebutton4
Компонент skanform.py подсоединил к пинам HAL в файле skaner.hal:
Код: Выделить всё
loadusr -Wn skanform python skanform.py
...
net led1 skanform.photo motion.digital-out-00
net led2 skanform.line motion.digital-out-01
net led3 skanform.end motion.digital-out-02
net dpi1 skanform.pdi1
net dpi2 skanform.pdi2
net dpi3 skanform.pdi3
net digin0 skanform.rem1 motion.digital-in-00
net digin1 skanform.rem2 motion.digital-in-01
net digin2 skanform.skill motion.digital-in-02
Так на что ругается LCNC ? (до того ругался на ошибки в файле компонента, но, вроде, на данном этапе все "плюхи" выловил)
Код: Выделить всё
#!/usr/bin/python
import hal
from subprocess import call
import time
h=hal.component("skanform")
h.newpin("photo", hal.HAL_BIT, hal.HAL_IN)
h.newpin("line", hal.HAL_BIT, hal.HAL_IN)
h.newpin("end", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi1", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi2", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi3", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rem1", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("rem2", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("skill", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("enable", hal.HAL_BIT, hal.HAL_IN)
h.ready()
try:
if h['enable']==1:
h['skill'] = 0
NN = MM = 1
if h['photo']==1:
sCommand = '/usr/bin/fswebcam --save /home/sun/webcam%02d%02d.png -d /dev/video0 -r 640x480 --png 0' % (NN, MM)
rc = call(sCommand)
sCommand = '/usr/bin/convert /home/sun/webcam%02d%02d.png 100x100+270+190 /home/sun/cropwebcam%02d%02d.png' % (NN, MM, NN, MM)
rc = call(sCommand)
MM = MM + 1
h['rem1'] = 1
time.sleep(1.5)
else:
h['rem1'] = 0
if h['line']==1:
NN = NN + 1
MM = 1
h['rem2']=1
time.sleep(1.5)
else:
h['rem2'] = 0
if h['end']==1:
h['skill'] = 1
else:
h['skill'] = 0
except KeyboardInterrupt:
raise SystemExit
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 01:57
Serg
Вот сразу-бы показал прогу - давно б уже всё работало.
У тебя твой компонент работает без ошибок! Т.е. как и написано один раз исполняется и завершается.

Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 02:01
Ворон226
Ясно... Нужно кольцевать... Спасибо!
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 02:50
torvn77
Ворон226 писал(а):А вот с этим:
[RS274NGC]
PARAMETER_FILE = emc.var
SUBROUTINE_PATH = /home/sun/linuxcnc/configs/skaner-mygui
USER_M_PATH = /home/sun/linuxcnc/configs/skaner-mygui
попытка засчитана? Или просто пропустили?
Судя по отсутствию этих опций в вики они так и не освоены.
По крайней мере опция для указания местонахождения суброутинусов SUBROUTINE_PATH точно работает,
так как я её активно использую.
Да и тест USER_M_PATH в своё время тоже был положительный.
Заполняются они так
Код: Выделить всё
[RS274NGC]
PARAMETER_FILE = ENV/linuxcnc.var
SUBROUTINE_PATH = NC-Subroutinus
USER_M_PATH = M-Codes
#RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92 G94 G97 G98
Соответственно в корневой папке конфига создаём директории NC-Subroutinus , M-Codes и ENV
Так же полезно прописать и прочие создаваемые файлы в папку ENV,чтобы не засоряли основную директорию.
Код: Выделить всё
[TRAJ]
#POSITION_FILE = ENV/position.txt
[EMCIO]
TOOL_TABLE = ENV/tool.tbl
А вот параметр [DISPLAY]PROGRAM_PREFIX всего лишь задаёт путь по умолчанию для диалогового окна выбора УП.
Его имеет смысл переписать так
Код: Выделить всё
[DISPLAY]
PROGRAM_PREFIX = ~/Documents/NC_Projects
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 03:05
torvn77
Вот тебе ещё мой суброутинус для примера:
Код: Выделить всё
O<init_machine> sub
(MSG,Start init_machine subroutine )
#<_machine_tool_sensor_position-x> = 0
#<_machine_tool_sensor_position-y> = 0
#<_machine_tool_sensor_position-z> = 0
#<_machine_tool_sensor_position-a> = 0
#<_machine_tool_sensor_position-b> = 0
#<_machine_toolchange_position-x> = 700
#<_machine_toolchange_position-y> = 150
#<_machine_toolchange_position-z> = 0
#<_machine_toolchange_position-a> = 0
#<_machine_toolchange_position-b> = 0
#<_machine_home_position-x> = 350
#<_machine_home_position-y> = 800
#<_machine_home_position-z> = 0
#<_machine_home_position-a> = 0
#<_machine_home_position-b> = 0
#<_machine_safe_z> = 0
#<_machine_start_shpindle_pause> = 8
#<_machine_stop_shpindle_pause> = 8
G21G90G91.1G17G54G40G49
G53 G0 Z#<_machine_safe_z> A#<_machine_home_position-a> B#<_machine_home_position-b>
(T0M6)
O<init_machine> endsub
M02
Строка (MSG,Start init_machine subroutine ) выводит в область сообщений LinuxCNC сообщение о старте программы
Вместо MSG можно использовать DEBUG если надо вывести значения переменной,в том числе и именной,
или LOG,предварительно создав лог через LOGOPEN .
Прочитать об этом можно здесь
http://linuxcnc.org/docs/devel/html/gco ... c:messages
Суброутинус делается как отдельный фаил с именем init_machine.ngc
И менно так,так как имя файла обязательно должно совпадать с именем функции.
И ещё,я тут подумал что вызывая функцию хорошо бы указывать как её параметр строку вызова:
Тогда текст самой функции будет
Код: Выделить всё
O<example_func> sub
(DEBUG, Start func example_func from xtring number = #1 Current line #<_line>)
O<example_func> endsub
M02
Работает:

- Screenshot.png (5.87 КБ) 3157 просмотров
Re: [WIKI] Создание конфигурации простого автомата от чайник
Добавлено: 16 ноя 2014, 09:18
Ворон226
torvn77 писал(а):Соответственно в корневой папке конфига создаём директории NC-Subroutinus , M-Codes и ENV
Так же полезно прописать и прочие создаваемые файлы в папку ENV,чтобы не засоряли основную директорию.
Если это все делается для "порядка" в корневой папке, то у меня, на сегодня, корневая папка может "засориться" только файлами элементов визуальной панели (хочется научиться делать свою "шкуру" и объемные кнопочки для панели). Так как меня сейчас увлекают больше простые автоматы на базе LinuxCNC, то никакого мусора в корневой папке у меня нет - два десятка файлов на одном уровне. Это вполне нормально.
torvn77 писал(а):Вот тебе ещё мой суброутинус для примера:
Суброутинус для меня пока экзотичен. Не вижу я явной причины к его использованию. Более того, пока вижу больше "мусора" в наличии ОГРОМНОГО количества переменных, которые я и использовать-то буду раз-два за включение станка. Пока в сторону...
torvn77 писал(а):вызывая функцию хорошо бы указывать как её параметр строку вызова
Чтобы самому не заблудиться?
torvn77 писал(а):Вместо MSG можно использовать DEBUG если надо вывести значения переменной,в том числе и именной,
или LOG,предварительно создав лог через LOGOPEN .
DEBUG работает в Axis, закрывая правую часть окна сообщениями, которые нужно удалять. А именно в правой части экрана (в Axis) обычно располагаются пользовательские органы управления станком. Неудобно. Вот если бы сообщения сами исчезали через несколько секунд. Но тут нужно ещё учиться и учиться.