Конфигурация LCNC для простого автомата с MYGUI: различия между версиями
Вopoн226 (обсуждение | вклад) |
Вopoн226 (обсуждение | вклад) |
||
| Строка 252: | Строка 252: | ||
raise SystemExit | raise SystemExit | ||
| + | [[Файл:Блокировка.png|обрамить]] | ||
| Строка 266: | Строка 267: | ||
| + | Схема блокировки входных датчиков: | ||
| − | |||
| − | |||
Версия 21:30, 18 октября 2014
Часто возникает необходимость создания конфигурации простого автомата на LinuxCNC. (обсуждение статьи на форуме Создание конфигурации простого автомата от чайника)
Содержание
Постановка задачи.
Сконфигурировать простой автомат "Планшетный широкоформатный сканер" на базе LinuxCNC со своей панелью управления и встроенной перепрограммируемой программой обработки заготовки.
Необходимые направления работы:
1. Описание логики работы сканера
2. Создание файла INI
3. Создание визуальной панели
4. Создание связей между HAL, визуальной панелью и программами/подпрограммами
5. Создание HAL
6. Написание программы сканирования
7. Способы проверки и тестирования конфигурации
В задачу данной темы не входят вопросы конструкции, электроники, программ обработки графической информации!
Логика работы автомата
1. Включение автомата и начальные установки:
- при включении автомата загружается визуальная панель, программа сканирования;
- перевести автомат в рабочий режим нажатием кнопки "ВКЛ" визуальной панели, проверка состояния E-STOP, концевых датчиков (если сработал один из датчиков крайнего положения - автомат выходит из крайнего положения самостоятельно; если сработали сразу два противоположных датчика положения - авария)
2. Вывести сканирующую головку в начальную точку сканирования, пользуясь соответствующими кнопками визуальной панели и задать начальную точку сканирования нажатием кнопки "Уст-ка нуля" визуальной панели.
3. Вывести сканирующую головку в крайнюю точку сканирования и задать крайние координаты сканирования нажатием кнопки "Уст-ка MAX".
4. Установить необходимое фокусное расстояние вручную.
5. Установить необходимое разрешение сканирования выбором соответствующего режима сканирования кнопками визуальной панели.
6. Включить лампу освещения зоны сканирования нажатием соответствующей кнопки визуальной панели.
7. Запустить процесс сканирования нажатием кнопки "ПУСК" визуальной панели.
8. После работы выключить автомат нажатием кнопки "ВЫКЛ" визуальной панели.
INI-файл
Так как установка фокусного расстояния осуществляется вручную, то мы должны сконфигурировать двухкоординатный автомат.
Итак, файл skaner.ini :
[EMC] MACHINE = skaner DEBUG = 0 [DISPLAY] DISPLAY = mygui
... говорит о том, что мы будем использовать собственную визуальную панель для управления автоматом.
Если хотим положить файл в саму папку с конфигурацией, то строка должна выглядеть так:
DISPLAY = ./mygui
Далее:
POSITION_OFFSET = RELATIVE POSITION_FEEDBACK = ACTUAL MAX_FEED_OVERRIDE = 1.2 PROGRAM_PREFIX = /home/sun/linuxcnc/configs/skaner
(указали адрес, по которому находятся исполняемые файлы и программы)
OPEN_FILE = /home/sun/linuxcnc/configs/skaner/skan1.ngc
(указали адрес и имя загружаемой программы по умолчанию)
[FILTER] PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image PROGRAM_EXTENSION = .py Python Script png = image-to-gcode gif = image-to-gcode jpg = image-to-gcode py = python [TASK] TASK = milltask CYCLE_TIME = 0.005 [RS274NGC] PARAMETER_FILE = emc.var [EMCMOT] EMCMOT = motmod COMM_TIMEOUT = 1.0 COMM_WAIT = 0.010 BASE_PERIOD = 50000 SERVO_PERIOD = 1000000 [HAL] HALFILE = skaner.hal HALUI = halui [HALUI] [TRAJ] AXES = 2 COORDINATES = X Y MAX_ANGULAR_VELOCITY = 0.10 DEFAULT_ANGULAR_VELOCITY = 0.01 LINEAR_UNITS = mm ANGULAR_UNITS = degree CYCLE_TIME = 0.010 DEFAULT_VELOCITY = 50.00 MAX_LINEAR_VELOCITY = 200.00 NO_FORCE_HOMING = 1 [EMCIO] EMCIO = io CYCLE_TIME = 0.100 TOOL_TABLE = tool.tbl [AXIS_0] TYPE = LINEAR HOME = 0.0 MAX_VELOCITY = 250.0 MAX_ACCELERATION = 600.0 STEPGEN_MAXACCEL = 650.0 SCALE = 67.86 FERROR = 1 MIN_FERROR = 0.25 MIN_LIMIT = -0.001 MAX_LIMIT = 1500.0 HOME_OFFSET = 0.0 [AXIS_1] TYPE = LINEAR HOME = 0.0 MAX_VELOCITY = 150.0 MAX_ACCELERATION = 200.0 STEPGEN_MAXACCEL = 250.0 SCALE = 67.86 FERROR = 1 MIN_FERROR = 0.25 MIN_LIMIT = -0.001 MAX_LIMIT = 2700.0 HOME_OFFSET = 0.0
(тут нет ничего особенного - просто следуй LinuxCNC Integrators Manual Глава IV - Файл INI )
Визуальная панель
Из раздела "Логика работы автомата" ясен состав кнопок визуальной панели:
Кнопки без фиксации: ВКЛ, СТОП, ВЫКЛ, Уст-ка нуля, Уст-ка MAX, Кнопки движения по координатам (4 штуки).
Кнопки с фиксацией: Три кнопки режима сканирования, кнопка включения освещения зоны сканирования.
Для удобства управления автоматом и загрузки сканируемых объектов можно добавить четыре кнопки без фиксации для перемещения автомата в крайние положения.
Нарисуем панель в Glade, используя, по возможности, элементы HAL Python . Получилась вот такая панель:
Таблица соответствия названия кнопок и их имен:
ВКЛ - hal_button1 СТОП - hal_button2 ВЫКЛ - hal_button3 Уст-ка нуля - hal_button4 Уст-ка MAX - hal_button5 назад до конца - hal_button6 ^ - назад - hal_button7 влево до конца - hal_button8 < - влево - hal_button9 > - направо - hal_button10 направо до конца - hal_button11 v - вперед - hal_button12 вперед до конца - hal_button13 ПУСК - hal_button14 Режим 1 - hal_togglebutton1 Режим 2 - hal_togglebutton2 Режим 3 - hal_togglebutton3 Освещение - hal_togglebutton4
(по мере необходимости будем убирать или добавлять элементы визуальной панели)
HAL-файл
Файл skaner.hal в первой своей части ничего уникального не представляет - обычный набор необходимых конструкций и нужные пины LPT-порта.
(для совсем "молодых" чпу-шников посоветую сначала почитать LinuxCNC для чайников )
Во второй части файла skaner.hal пропишем следующие функции:
Движение по осям X и Y от кнопок визуальной панели;
Начальная блокировка сигналов от датчиков положения;
Анализатор состояний датчиков автомата.
Движение по осям X и Y от кнопок визуальной панели
Рассмотрим движение по оси X (вправо-влево). Движение по оси Y выполнено аналогично.
Имеем:
кнопки визуальной панели: Влево до конца, Влево, Вправо, Вправо до конца;
датчики: левый край, правый край.
Управление движением будем осуществлять через halui.jog.0.analog
halui.jog.<n>.analog (float, in) - ввод для аналогового задания скорости ручного перемещения (полезно при использовании джойстиков или других аналоговых устройств)
Также следует заметить, что кнопки перемещений нужно блокировать при выполнении сканирования.
Блок схема движения по оси X:
Движение по оси намеренно выполнено с плавным (линейным) нарастание скорости для того, чтобы можно было более точно подвести сканирующую головку к точкам начала и конца сканирования.
Параметры движения должны быть изменены для конкретной конструкции автомата. На схеме вывод mux8.in2 - скорость движения в крайнее левое положение (в данном примере = 25), выводы mux8.in4...7 - скорость выхода из зоны датчика крайнего левого положения (в данном примере = -25), вывод mux4.in1 скорость движения в крайнее правое положение (в данном примере = -25), выводы mux4.in2 и mux4.in3 - скорость выхода из зоны датчика крайнего правого положения (в данном примере = 25).
Начальная блокировка сигналов от датчиков положения
Если при включении конфигурации LinuxCNC один из датчиков уже будет включен, то реакции на этот датчик возможно и не последует (по наблюдениям реальной конфигурации широкоформатного планшетного принтера). Поэтому во избежание таких ситуаций в конфигурацию введена схема начальной блокировки входных сигналов. Её задача: задержать подключение входных датчиков крайних положений на одну секунду после включения автомата.
Для этого был написан пользовательский компонент enrun (файл enrun.py)
#!/usr/bin/python
import hal
h=hal.component("enrun")
h.newpin("in1", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in2", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in3", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in4", hal.HAL_BIT, hal.HAL_IN)
h.newpin("out1", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out2", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out3", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out4", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("enable", hal.HAL_BIT, hal.HAL_IN)
h.ready()
try:
while 1:
if h['enable']==0:
h['out1']=0
h['out2']=0
h['out3']=0
h['out4']=0
else:
h['out1']=h['in1']
h['out2']=h['in2']
h['out3']=h['in3']
h['out4']=h['in4']
except KeyboardInterrupt:
raise SystemExit
Схема блокировки входных датчиков:
Осталось добавить, что необходимо обязательно прописать в файле skaner.hal следующую процедуру:
loadusr -Wn enrun python enrun.py
, а сам файл enrun.py положить в папку с конфигурацией автомата.
Анализатор состояний датчиков автомата
Нельзя обойти вниманием ситуацию возникновения непредсказуемых ситуаций при неисправности входных датчиков либо при обрыве сигнальных цепей или целей питания датчиков.
Это может проявиться в ситуации, когда мы получаем одновременно два сигнала: либо Датчик ЛЕВЫЙ КРАЙ и Датчик ПРАВЫЙ КРАЙ, либо Датчик БЛИЖНИЙ КРАЙ и Датчик ДАЛЬНИЙ КРАЙ.
В этих ситуациях нужно блокировать движение автомата до устранения неисправности. О неисправности необходимо оповестить оператора либо индикатором, либо звуковым сигналом, либо и тем, и другим.
Подобная схема не представляет особого интереса, потому не приводится.


