[WIKI] Создание конфигурации простого автомата от чайника

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

[WIKI] Создание конфигурации простого автомата от чайника

Сообщение Ворон226 »

Часто возникает необходимость создания конфигурации простого автомата на LinuxCNC.
Попробую сделать это тут для новичков (к коим и себя отношу).

А начнем с постановки задачи.

Задача.
Сконфигурировать простой автомат "Планшетный широкоформатный сканер" на базе LinuxCNC со своей панелью управления и встроенной перепрограммируемой программой обработки заготовки.

Для начала определим необходимые направления работы:
1. Описание логики работы сканера
2. Создание файла INI
3. Создание визуальной панели
4. Создание связей между HAL, визуальной панелью и программами/подпрограммами
5. Создание HAL
6. Написание программы сканирования
7. Способы проверки и тестирования конфигурации

Продолжу вечером...
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение nkp »

попробуй в файл , который запускается по умолчанию(skan.ngc) опять же записать простенькое перемещение:

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

G21
g91
g1 f1 X10
y12
M2
у меня с этим кодом запускается...
=============
ну и пока не прикручен механизм вывода ошибок и сообщений к панели - запускать из терминала ,
дабы видеть - что там не так...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение nkp »

любую другую программу можно загружать для проверки:
при запущеном емс открываешь отдельный терминал,
там:

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

python
>>> import linuxcnc
>>> c = linuxcnc.command()
>>> c.program_open('/home/nkp/emc2-dev-80db2a2/configs/MyGUI/comm.ngc')
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон226 »

С кнопкой ПУСК пока не разобрался... А вот на что нарвался, пробуя конфигурацию сканера, "прикрученную" к Axis-у:

Выезжаю в точку начала сканирования - запоминаю координаты.
Выезжаю в конечную точку сканирования - запоминаю координаты.
Нажимаю кнопку ПУСК в меню AXIS - головка поехала отрабатывать сканирование...
Первая строка: первая точка - пауза - вторая точка - пауза ... последняя точка - пауза - переезд на вторую строчку...
Вторая строка и т.д.
И тут замечаю, что при переезде в начало второй строки, головка сместилась по Х !!!
В третьей строке - ещё дольше смещение!
И в четвертой. И в пятой!

Искал причину - не нашел!
Подумал, что, возможно переменные, сохраненные в emc.var, меняют свое значение?

Но проверить не успел - вспомнил, что на станке установлена версия 2.5
Взял домой материнку с винтом и переставил на версию 2.6

Сегодня запустил сканер и РАБОТАЕТ!

Получается, что LinuxCNC 2.5 многое чего не умел ;)
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон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
Пока не умею распознать такую реакцию... Что это может быть?
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение nkp »

Ворон226 писал(а):LinuxCNC ругается так:
там ( в тексте ошибки) может быть информативной предыдущая строка...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон226 »

Полностью текст ниже:
Вложения
ошибки03.txt
(2.53 КБ) 966 скачиваний
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Serg »

Ворон226 писал(а):Пока не умею распознать такую реакцию... Что это может быть?
Забавное имя... Там случаем какой графики нет?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон226 »

Так ведь автомат-сканер ;) И компонент, который по сигналам LCNC делает снимки и корректирует их, складывая в папочку под разными именами ;)
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Serg »

Имелось в виду кнопки, поля ввода и т.п.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон226 »

Там только несколько кнопок: Установка нуля, Установка МАХ и ПУСК. И Три кнопки режимов сканирования, которые пока не задействованы.
Хочешь быть счастливым? Будь им!
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение 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
Не посмотрел на номер страницы..
Последний раз редактировалось torvn77 16 ноя 2014, 02:15, всего редактировалось 1 раз.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон226 »

torvn77 писал(а):мой опыт использования LinuxCNC,пусть и эксперементальной версии показывает,что включение сохранения переменых в файле
приводит к тому,что если в работе возникла ощибка.то она потом и в этот файл сохранится.
А откуда ты взял про сохраненные ошибки?
Хочешь быть счастливым? Будь им!
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение torvn77 »

Просто наблюдение,в процессе функционирования LinuxCNC 2.7/2.8 в один прекрасный момент начинает глючить.
глюки как я понимаю крутятся вокруг базовых координатных систем G53-G59.3 и их влияния на визуализацию.
Так вот,если LinuxCNC перезапустить без сноса var,то глюки продолжатся,а если я удаляю var и файл с сохранёнными координатами,
то программа перезапускается нормальной.
Что именно сохраняет глюки var или координаты я не выяснял.
Но и на 2,5/2,6 затрагивать переключения изменения систем координат было не безопасно.
Вообще тогда у меня возникло такое подозрение,что в LinuxCNC нет обработки ошибок и всё хорошо пока нет выхода за сценарии правильной работы.
Тогда у меня могла даже ос рухнуть.сейчас rtpreempt стабильнее,так себе иногда встану в лужу,но это не страшно,так как мне известно её местонахождение.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Serg »

Ворон226 писал(а):Там только несколько кнопок: Установка нуля, Установка МАХ и ПУСК. И Три кнопки режимов сканирования, которые пока не задействованы.
Ну и где оно должно эти кнопки нарисовать? В сегменте разделяемой памяти? :hehehe:
У HAL компонентов нет доступа ни к дисплею, ни к событиям мыши и клавы.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон226 »

UAVpilot писал(а):
Ворон226 писал(а):Там только несколько кнопок: Установка нуля, Установка МАХ и ПУСК. И Три кнопки режимов сканирования, которые пока не задействованы.
Ну и где оно должно эти кнопки нарисовать? В сегменте разделяемой памяти? :hehehe:
У 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
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Serg »

Вот сразу-бы показал прогу - давно б уже всё работало. :)

У тебя твой компонент работает без ошибок! Т.е. как и написано один раз исполняется и завершается. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон226 »

Ясно... Нужно кольцевать... Спасибо!
Хочешь быть счастливым? Будь им!
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение 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
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение 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> call [#<_line>]
Тогда текст самой функции будет

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

O<example_func> sub
(DEBUG, Start func example_func from xtring number = #1 Current line #<_line>)
O<example_func> endsub
M02
Работает:
Screenshot.png
Screenshot.png (5.87 КБ) 2930 просмотров
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: [WIKI] Создание конфигурации простого автомата от чайник

Сообщение Ворон226 »

torvn77 писал(а):Соответственно в корневой папке конфига создаём директории NC-Subroutinus , M-Codes и ENV
Так же полезно прописать и прочие создаваемые файлы в папку ENV,чтобы не засоряли основную директорию.
Если это все делается для "порядка" в корневой папке, то у меня, на сегодня, корневая папка может "засориться" только файлами элементов визуальной панели (хочется научиться делать свою "шкуру" и объемные кнопочки для панели). Так как меня сейчас увлекают больше простые автоматы на базе LinuxCNC, то никакого мусора в корневой папке у меня нет - два десятка файлов на одном уровне. Это вполне нормально.
torvn77 писал(а):Вот тебе ещё мой суброутинус для примера:
Суброутинус для меня пока экзотичен. Не вижу я явной причины к его использованию. Более того, пока вижу больше "мусора" в наличии ОГРОМНОГО количества переменных, которые я и использовать-то буду раз-два за включение станка. Пока в сторону...
torvn77 писал(а):вызывая функцию хорошо бы указывать как её параметр строку вызова
Чтобы самому не заблудиться?
torvn77 писал(а):Вместо MSG можно использовать DEBUG если надо вывести значения переменной,в том числе и именной,
или LOG,предварительно создав лог через LOGOPEN .
DEBUG работает в Axis, закрывая правую часть окна сообщениями, которые нужно удалять. А именно в правой части экрана (в Axis) обычно располагаются пользовательские органы управления станком. Неудобно. Вот если бы сообщения сами исчезали через несколько секунд. Но тут нужно ещё учиться и учиться.
Хочешь быть счастливым? Будь им!
Ответить

Вернуться в «LinuxCNC»