Python + LPT

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Python + LPT

Сообщение DMexico »

Есть у меня один самодельный девайс, который я сделал еще в 2000 году.
Конфигурация такова: ДЕВАЙС (шаговики, реле, исполнительные механизмы) через самодельный КОНТРОЛЛЕР подключен к LPT старенького IBM 286. На 286-ом установлена DOS и гордость Билла - QBasic.
И вот прямо из интерпретатора QBasic, скрипт в 10-12 скроллов и управляет этим девайсом, опрашивая датчики и управляя исполнительными механизмами по замкнутому циклу.
Работает до сих пор. Проблем и нареканий нет.
И вот с недавних пор подумалось мне:
- самодельный контроллер заменить на контроллер Purelogic
- управляющую программулинку на Qbasic переписать на Python
Вот, что нашлось в сети из похожих проектов: http://www.zadevalov.com/lptboard
Может у кого еще есть похожие наработки LPT+Pithon ?
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

Что хотим получить в результате?
Используя Python скрипт, для начала например, управлять одним из реле на Purelogic контроллере PLС330

А что имеем?
1. Ubuntu 10.04 RT
2. Python, установленый по-умолчанию в Ubuntu
3. Среда разработки Geany, установленная из репозитория
4. Еще, как выясняется, понадобится модуль "pyparallel", который позволит нам иметь доступ к LPT. Его можно скачать с SourceForge http://pyserial.sourceforge.net/pyparallel.html или установить из-под консоли:

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

sudo apt-get install python-parallel
А вот, что нам настоятельно рекомендует "pyparallel" в примечаниях:

The lp(4) module must be unloaded,

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

rmmod lp
lp claims exclusive access to the port and other programs won’t be able to use it.
The ppdev(4) module needs to be loaded,

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

modprobe ppdev
. When udev is in use, (default with 2.6 kernels) this will create a /dev/parport0.
The user needs to have write permissions to /dev/parport0. Many distributions have an lp group that owns the device; the simplest is to add the user account to this group. Simply changing permissions on the device is not the best strategy as they will be reverted to their defaults next time the driver is loaded.

Авто перевод :
Lp(4) модуль должен быть выгружен, rmmod lp. LP претензий
эксклюзивный доступ к порту и другие программы не смогут его использовать.
Ppdev(4) модуль должен быть загружен, modprobe ppdev. Когда
udev, используется в (по умолчанию с ядер 2.6) это создаст
/ dev/parport0.
Пользователь должен иметь разрешения на запись для/dev/parport0. Многие
дистрибутивов имеют группу lp, которой принадлежит устройство; Самый простой заключается
Добавьте учетную запись пользователя в эту группу. Простое изменение разрешений
устройство не является наилучшей стратегией, поскольку они будут возвращены к их значения по умолчанию в следующий раз загружен драйвер.

Ну что ж, вроде, все понятно.
Попробуем разобраться на практике.
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python + LPT

Сообщение Nick »

О, какие люди :D!

Ну все в принципе так.
RT тебе не обязателен, все равно на питоне RealTime не выйдет.

По питону обращайся, есть опыт написания программ на питоне, но с параллельным портом не работал.

PS а что за устройство? Может его сразу на usb перевести тогда?
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

Салют НИК! Давно не общались у тебя на форуме.
Nick писал(а):По питону обращайся, есть опыт написания программ на питоне
Понятно что есть, ты ведь Gcode Tools на Питоне пишешь.
RT в Питоне не получится? Жаль. А мне нужно управлять двумя шаговиками и 4-мя пневмоклапанами.
Ну пневмоклапаны отработают то, а задвигать без дерганий и пропусков шагов шаговики Питоном, думаешь, не получится?
А чем светит работа от USB? Контроллер такой видел у москвичей, даже купить хотел. Но, как говорится, "работает - не трожь!", поэтому пока и не переделываю.
Пока читаю это: Мгновенный Питон http://www.eduhmao.ru/info/1/3646/34241/
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python + LPT

Сообщение Nick »

DMexico писал(а):RT в Питоне не получится? Жаль. А мне нужно управлять двумя шаговиками и 4-мя пневмоклапанами.
Не все так просто ;). Иначе бы каждый себе свой EMC2 написал. Весь вопрос в том, какие хочешь получить скорости на выходе. В принципе, можно управлять чем хочешь, но на других скоростях и с другой плавностью.
USB - сложнее, и опять же нет риалтайма. Я просто подумал раз ты пишешь про питон, то тебе риалтайм не нужен.
Вот так всегда бывает, когда человек не пишет, что он делает ;). Потом оказывается у него не только шаговики, а еще и клапана есть :hehehe:.

Можно делать примочки к EMC2 на питоне. Вот тогда будет и риалтайм при управлении и все, что угодно!
DMexico писал(а):Пока читаю это: Мгновенный Питон http://www.eduhmao.ru/info/1/3646/34241/
Питон - классная штука, в ней можно начать программировать практически сразу, но не смотря на это, я до сих пор отрываю для себя новые вещи :)!
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

Так, так, можно поподробнее о примочках к EMC2 ? На оффсайте есть об этом?
Кстати пробовал получить доступ к LPT из 11.10 и 10.04 RT EMC2
В EMC2 не получилось. Выдает что-то вроде что доступ к LPT только из под EMC2 conf
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python + LPT

Сообщение Nick »

Ну в общем случае ты можешь написать любую программу, которая будет общаться с пинами hal.

Вопрос в том, как будет устроенно управление твоим агрегатом, он должен ездить по заданной программе, или программа генерируется на ходу по мере поступления информации с датчиков?
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

Nick писал(а):Ну в общем случае ты можешь написать любую программу, которая будет общаться с пинами hal.

Вопрос в том, как будет устроенно управление твоим агрегатом, он должен ездить по заданной программе, или программа генерируется на ходу по мере поступления информации с датчиков?

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

IF кончился расходник or крепеж or упаковка then pause 0
В моем случае датчики работают просто на останов с громким сигналом.
Следовательно: от перемены настроения датчиков - сумма программного тела не меняется :hehehe:
Значит стоит почитать документацию к HAL. Не подскажешь в каком месте?
Вот чуяло мое сердце, что наилучшим вариантом будет взаимодействие с EMC2!
Последний раз редактировалось DMexico 21 дек 2011, 17:19, всего редактировалось 1 раз.
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python + LPT

Сообщение Nick »

Тупо берем присоединяем все датчики к кнопке останова.
net estop-ext parport.1.pin-10-in => iocontrol.0.emc-enable-in

Все :).
DMexico писал(а):Значит стоит почитать документацию к HAL. Не подскажешь в каком месте?
Вот отсюда можно начать :): EMC2 Integrators Manual Перевод на русский язык
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

Не получится писать напрямую в g-code. В нем нет ветвления, массивов, процедур с параметрами... Я тут почитал, то что ты давал выше. Оказывается много всяких приблуд пишется на Питоне для EMC2. Считаю, что наиболее "красивым" подходом к решению подобных задач, это именно взаимодействие с HAL, посредством скрипта на Питоне.
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python + LPT

Сообщение Nick »

Процедуры есть! Это О-коды o100 sub и o100 call. Что такое ветвление? Не if then else?

Опиши в общих чертах логику работы станка, например,
открыли такой-то клапан,
если датчик сработал , сделали то-то...
А я напишу тебе под это Gкод, или скажу как это можно реализовать другими способами.
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

Nick писал(а):Процедуры есть! Это О-коды o100 sub и o100 call. Что такое ветвление? Не if then else?

Опиши в общих чертах логику работы станка, например,
открыли такой-то клапан,
если датчик сработал , сделали то-то...
А я напишу тебе под это Gкод, или скажу как это можно реализовать другими способами.
Кажется эти О-коды подходящее решение. Сможешь написать код, который двигал бы движок с PLC-330 на шаг? На 10 шагов?
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

А что хочу сделать? Хочу приделать на стол станка поворотный стол, на 6 деталей. Столом должна управлять четвертая ось PLC-330. Детали укладываются (реле управляет подачей детали из бункера) на свободный сектор, в слот для детали, поворот на 1/6, исполнение G-code, следующий поворот на 1/6... Таким образом "бесчеловечный" рабочий цикл удлиняется на кол-во деталей в бункере. А их достаточно в бункере, цикл можно будет считать замкнутым! Понимаешь что это для производственного цикла? Это минус один работник. Цинично, но лудитов, среди работников нет. Могу быть спокоен за станок.
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python + LPT

Сообщение Nick »

Тогда делаем так:

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

#<num> = 10
#1 = 0
(начало цикла)
o101 while [#1 LT #<num>]
(смещаемся по оси А на ..., смещение относительное)
G91 (Incremental mode)
G00 A...
G90 (Absolute mode)

(... тут Gкод программы ...)

(конец цикла)
o101 endwhile
M2 
Все, Gкод будет выполняться num раз.
Ось А настраиваешь как бесконечную поворотную ось.
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

Понадобилось выставить задержку в выполнении кода. Нашел таковую в G-code.
Кто пробовал ее в деле с EMC2?
Вот что нашел я:

КОМАНДА ЗАДЕРЖКИ
G04 ЗАДЕРЖКА
P Время задержки в секундах или миллисекундах
Команда G04 используется для программируемой временной задержки выполнения программы или её приостановки на заданное время. Если запрограммирована в строке, содержащей команды перемещения G00, G01, G02 или G03, все перемещения будут приостановлены на заданное в параметре P значение. Если значение параметра P не содержит десятичную точку, время задержки выражается в миллисекундах (0.001 секунды), иначе в секундах. Приостанавливается только перемещение по координатным осям, шпиндель продолжает вращаться с заданной скоростью и охлаждение остаётся включенным.
G04 P___
Минимальное значение – P0.001 секунды
Максимальное значение – P1000.000 секунд

Задержка на 3 секунды в EMC2 имеет следующий синтаксис:
G04 P 3.0
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python + LPT

Сообщение Nick »

DMexico писал(а):G04 P 3.0
Должно работать, только судя по тексту это будет 3 миллисекунды, чтобы было 3 секунды надо G04 P3 - без точки.

А тебе именно временная задержка нужна, или до какого-то события?
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Python + LPT

Сообщение DMexico »

Читай внимательно: 3 сек. Нужна для того, чтобы вспышка накопила энергии. А вот с циклом не получилось у меня, который ты описал.
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python + LPT

Сообщение Nick »

хмм, а чего не получилось?
О, наверное цикл бесконечный вышел... там надо #1 = #1+1 добавить...
Ответить

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