Настройка EMC2 на работу с COM(RS-232) портом
-
Andradio
- Новичок
- Сообщения: 21
- Зарегистрирован: 05 ноя 2010, 22:02
- Репутация: 0
- Контактная информация:
Настройка EMC2 на работу с COM(RS-232) портом
Имеется самодельная плата для управления тремя осями, заточена под униполярные шаговые двигатели. Программа для него писалась сама, но так как я не селен в программировании то программа получилась примитивная и не умеет читать файлы векторной графики. Было решение переделать плату для работы с ЕМС2 через lpt, но я вспомнил что уже обсуждал HAL в теме http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=106 и решил открыть новую тему с надеждой что как то можно настроить HAL на работу ЕМС2 через порт rs232.
С нетерпением жду предложений по настройке ЕМС2 на RS232.
На плате контролер который понимает такие команды переданные в ASCI:
Х0 - двигатель оси "Х" назад на один шаг;
Х1 - двигатель оси "Х" вперед на один шаг;
Y0 - двигатель оси "Y" назад на один шаг ;
Y1 - двигатель оси "Y" вперед на один шаг;
Z0 - двигатель оси "Z" назад на один шаг;
Z1 - двигатель оси "Z" вперед на один шаг.
С нетерпением жду предложений по настройке ЕМС2 на RS232.
На плате контролер который понимает такие команды переданные в ASCI:
Х0 - двигатель оси "Х" назад на один шаг;
Х1 - двигатель оси "Х" вперед на один шаг;
Y0 - двигатель оси "Y" назад на один шаг ;
Y1 - двигатель оси "Y" вперед на один шаг;
Z0 - двигатель оси "Z" назад на один шаг;
Z1 - двигатель оси "Z" вперед на один шаг.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Ок. приступим.
1. Нужен модуль который будет писать в RS232.
2. Нужно настроить HAL на
2.1 При изменении направления, сохранять его в отдельном пине.
2.2 При шаге подавать сигнал на RS232 через подключенный модуль в зависимости от состояния пина направления.
Сейчас попробую накидать команд...
1. Нужен модуль который будет писать в RS232.
2. Нужно настроить HAL на
2.1 При изменении направления, сохранять его в отдельном пине.
2.2 При шаге подавать сигнал на RS232 через подключенный модуль в зависимости от состояния пина направления.
Сейчас попробую накидать команд...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Хммм.... с ком портом засада прямо какая-то...
На сколько я понял, HAL не поддерживает на прямую вывод в ком порт, т.к. ... (уже писал). Поэтому нужен внешний компонент, который будет контролировать состояние HAL.
Например можно использовать скрипт на Python который будет проверять состояние пинов step.
На сколько я понял, HAL не поддерживает на прямую вывод в ком порт, т.к. ... (уже писал). Поэтому нужен внешний компонент, который будет контролировать состояние HAL.
Например можно использовать скрипт на Python который будет проверять состояние пинов step.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Хотя, нашел способ лучше. Можно написать свой компонент для HAL.
Возьмем пример компонента sincos :
Делаем что-то подобное.
Возьмем пример компонента sincos :
Код: Выделить всё
component sincos;
pin out float sin_;
pin out float cos_;
pin in float theta;
function _;
license "GPL";
;;
#include <rtapi_math.h>
FUNCTION(_) { sin_ = sin(theta); cos_ = cos(theta); }
Код: Выделить всё
component rs232;
pin in bit step;
pin in bit dir;
variable bool step_done;
param rw unsigned axis;
license "GPL";
;;
if (not step_done && step) {
step_done=true;
if (dir) {
/*здесь функция вывода значения параметра axis +0*/
}
else {
/*здесь функция вывода значения параметра axis +1*/
}
}
-
Andradio
- Новичок
- Сообщения: 21
- Зарегистрирован: 05 ноя 2010, 22:02
- Репутация: 0
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Спасибо, если разберусь куда код писать то попробую. 
- ubey_bobra
- Кандидат
- Сообщения: 75
- Зарегистрирован: 21 ноя 2010, 21:56
- Репутация: 0
- Откуда: г. Сосновый Бор Ленинградская обл.
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
может имеет смысл поискать какой нибудь быстрый паралельно-последовательный преобразователь?
ограничением скорости я думаю будет только скорость приема данных твоим драйвером, будешь с лпт забирать сигнал, преобразовывать его в последовательный код, и кормить своему драйверу.
есть конечно еще вариант написать на каком нить языке промежуточную программку: которая будет из виртуального порта читать данные, преобразовывать их в последовательный код и отдавать на рс232, но тут боюсь может случиться затык с частотой движения.
ограничением скорости я думаю будет только скорость приема данных твоим драйвером, будешь с лпт забирать сигнал, преобразовывать его в последовательный код, и кормить своему драйверу.
есть конечно еще вариант написать на каком нить языке промежуточную программку: которая будет из виртуального порта читать данные, преобразовывать их в последовательный код и отдавать на рс232, но тут боюсь может случиться затык с частотой движения.
p.s. Все гениальное просто, тогда когда оно известно и популярно. А в свое время людей жгли на костре, за то что они утверждали что земля круглая.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Самое плохое, что любое не realtime приложение может висеть долго без действия, если вдруг EMC2 будет чего-то не хватать.
Да, говорят, что нужен будет пакет emc2-dev. Если ты устанавливал emc2 по этой инструкции, то для dev можно поставить командой sudo apt-get install emc2-dev.
Вот ссылка http://linuxcnc.org/docs/html/hal_comp.html .
Сорри, забыл дать ссылку на ман. Там такая штука, все компоненты HAL компилируются вместе с EMC2. Т.е. создаешь файл rs232.comp и сохраняешь его в нужное место и комплиш EMC2, а потом в hal файле станка нужно будет написать вызов этого компонента и присоединить к нему нужные пины.Спасибо, если разберусь куда код писать то попробую.
Да, говорят, что нужен будет пакет emc2-dev. Если ты устанавливал emc2 по этой инструкции, то для dev можно поставить командой sudo apt-get install emc2-dev.
Вот ссылка http://linuxcnc.org/docs/html/hal_comp.html .
-
Andradio
- Новичок
- Сообщения: 21
- Зарегистрирован: 05 ноя 2010, 22:02
- Репутация: 0
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Пока все уперлось в установку Linux. Пробовал разные дистрибутивы, пробовал с диска с флешки, все один результат. Доходит до половины копирования файлов и останавливается по ошибке копирования. Уже не знаю на что думать. Не ставятся даже дистрибутивы которые раньше ставил. Не могу понять в чем дело. 
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
1. проверить диск, при запуске с диска выбрать пункт проверки - он проверит целостность всех файлов.
2. проверить md5 образа.
3. проверить винчестер.
А как у тебя разбит винчестер? И какой дистрибутив устанавливаешь?
2. проверить md5 образа.
3. проверить винчестер.
А как у тебя разбит винчестер? И какой дистрибутив устанавливаешь?
-
Andradio
- Новичок
- Сообщения: 21
- Зарегистрирован: 05 ноя 2010, 22:02
- Репутация: 0
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Проверял только один диск, - ошибок не нашел.root писал(а):1. проверить диск, при запуске с диска выбрать пункт проверки - он проверит целостность всех файлов.
Тоже не всё проверял. Если найду мд5 то проверю.root писал(а):2. проверить md5 образа.
Попробую если найду прогу которая с винды увидит разделы Линукса.root писал(а):3. проверить винчестер.
root писал(а):А как у тебя разбит винчестер?
На одном винчестере (общий объем 40ГБ) есть два раздела под фатом. Так же два раздела под линукс: подкачка =3ГБ, и /= 10ГБ.
Самый лучший вариант Ubuntu 10.10 (или 10.04 чтоб ЕМС2 пошло) под AMD64.root писал(а):И какой дистрибутив устанавливаешь?
Пробовал ставить:
ubuntu-8.04-desktop-emc2-aj13-i386
ubuntu-10.04-linuxcnc1-i386
KNOPPIX_V5.3.1DVD-2008-03-26-EN
Ураинскую сборку Груша (на базе убунты)
Может еще что - не помню уже.
Сейчас качаю Ubuntu 10.10 AMD64 и думаю ее ставить, а потом на нее пробовать ставить ЕМС2. (Так и не разобрался где скачать под амд64 уже с ЕМС2.)
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
EMC2 на Ubuntu 10.10
Таких я думаю нет. Придется самому ставить.(Так и не разобрался где скачать под амд64 уже с ЕМС2.)
Кстати, тебе в любом случае придется ядро пересобирать если хочешь, чтобы EMC2 шел под 64 бит. Ибо при установки при помощи скрипта, скачивается обычное ядро с поддержкой RTAI.
Позавчера поставил себе Ubuntu 10.10. EMC2 встал без проблем, если не считать вечной моей проблемы с видео карточкой от ATI, для которой нет драйверов.
md5 обычно есть рядом с образами. Хотя если ты проверил диск на целостность, то наверняка все в порядке, т.к. эта процедура считает md5 для каждого файла.
Наверняка проблема с винчестером. Под виндой можно просто стереть раздел линуха обычным fdisk. Но лучше запустить проверку либо от MHDD либо внутреннюю проверку диска при помощи SMART (ее можно запустить с LiveCD при помощи smartctl из пакета smartmontools).
-
Andradio
- Новичок
- Сообщения: 21
- Зарегистрирован: 05 ноя 2010, 22:02
- Репутация: 0
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Проверил винчестер HDDScan-ом первый раз он завис чегото, второй раз поставил вторую половину сканировать - все в норме. Попробую еще с LiveCD.
По поводу амд64 читал на http://www.linuxcnc.org/content/view/21/4/
П.С. про сборку ядра под амд64 нашел на http://wiki.linuxcnc.org/cgi-bin/emcinf ... it_systems
По поводу амд64 читал на http://www.linuxcnc.org/content/view/21/4/
но про Hardy Heron не слышал и по быстрому не нашел.If you prefer to start with the distributed Ubuntu CD, you can install EMC2 yourself with these instructions:
* Step 1: Install Ubuntu 10.04 Lucid Lynx (for 32-bit) or 8.04 Hardy Heron (for 32- or 64-bit). Other versions of Ubuntu will not work with EMC2 as there are no packages designed to work with them.
П.С. про сборку ядра под амд64 нашел на http://wiki.linuxcnc.org/cgi-bin/emcinf ... it_systems
6.2. Realtime on 64-bit systems
Since emc2.3, emc2 now works on at least some x86-64 CPUs in 64-bit mode. These instructions were followed on an Ubuntu "Dapper" system. AMD X2 3800+ CPU, 2GB RAM, nvidia nforce-mcp51 chipset, X server using "vesa" driver.
* Download rtai "magma" CVS and linux kernel source 2.6.20.12
* Patch kernel with hal-linux-2.6.20-x86_64-1.0-08.patch
* Configure and install kernel (I used [these options]--but take care because the driver selections are specific to my hardware)
* Configure and install rtai (I used ./configure --enable-shm --enable-sched-up --enable-sched-lxrt --enable-fpu --enable-compat --disable-leds)
* Get the source code for emc, configure, and make (I used ./configure --enable-run-in-place)
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
2.6.20.хх это старое ядро для 8.04.
По Lucid пишут что есть пакеты дял 64 бит но только для режима симулятора.
Однако, есть и хорошие новости: где-то писали, что теперь rtai патч ядра унифицирован и подходит как для i386 так и для x86_64.
По Lucid пишут что есть пакеты дял 64 бит но только для режима симулятора.
Однако, есть и хорошие новости: где-то писали, что теперь rtai патч ядра унифицирован и подходит как для i386 так и для x86_64.
-
adif
- Кандидат
- Сообщения: 69
- Зарегистрирован: 02 дек 2010, 09:55
- Репутация: 18
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Какой еще rs232 и EMC. COM порт это последовательный порт а лпт это параллельный, не представляю как можно с COM порта управлять станком и при этом иметь реалтайм!? В последовательном порте все идет пакетами в которых команды идут одна за другой и как можно одновременно управлять двумя двигателями когда сначала приходит информация для одного двигателя а потом для другого. Это что то бредовое. Вот если сделать как для мача делают под USB http://forum.rcdesign.ru/f110/thread217727.html , только надо знать принцип работы EMC (в маче вот так вот из того же форума
, потом можно было бы на контроллере замутить устройство на USB а потом от него уже крутить движки.Мач при загрузке УП делает вычисление этого УП и создает по нему траекторию, что-то типа растровой картинки - только каждый элемент это точка не на плоскости а во времени - фактически постоянная скорость движения по каждой оси в данный момент времени.
Этот массив в последствии передается драйверу который делает из него шаговую последовательность - в случае ЛПТ этим занимается лпт-драйвер, в моем случае железо.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Это все понятно и обсуждали уже, но у Andradio осталась решимость сделать все как есть. Понятно, что никакого реалтайм и больших частот.
Наверняка можно вытащить из ЕМС2 траекторию в виде временной шкалы и отправить на ЧПУ станок по USB, но есть несколько моментов.
1. Есть некоторые вещи которые так не получится реализовать - обнуление осей при помощи датчиков, измерение длинны инструментов и т.д. Т.е. все операции которые требуют интерактивности в режиме realtime.
Сами разработчики EMC2 пишут по этому поводу следующее:
И, несмотря на то, что для хоббийных станков это не плохое решение, гораздо проще сделать опторазвязку на lpt порт и прямые выходы на драйверы двигателей.
Наверняка можно вытащить из ЕМС2 траекторию в виде временной шкалы и отправить на ЧПУ станок по USB, но есть несколько моментов.
1. Есть некоторые вещи которые так не получится реализовать - обнуление осей при помощи датчиков, измерение длинны инструментов и т.д. Т.е. все операции которые требуют интерактивности в режиме realtime.
Сами разработчики EMC2 пишут по этому поводу следующее:
Т.е. не рекомендуется использовать внешние девайсы, которые могли бы компенсировать недостаток компьютерного realtime, путем буферизации данных.2.2. No buffering
In other products, external buffers are used to compensate for lack of true realtime in the PC. Any external device which buffers up motion is a bad fit for emc2. While various ways to allow external buffering have been proposed, working code has never been submitted. With external buffering, some features will simply not work. This includes closing the PID loop in the PC, spindle synchronized moves, homing, and other items.
2.3. No externally-initiated reads or writes
Externally initiated reads and writes are similar to buffering. They introduce undesirable phase shift. Imagine that emc's servo loop runs at a nominal 1kHz, and so does an externally initiated read of feedback position. However, the actual periods are 990Hz and 1000Hz. The two frequencies will beat at 10Hz. At its worst, the new feedback value will come just after a new command value, causing the motor to seem to move as little as 1% as far as PID commanded it to. This variable phase shift might produce a completely untunable system; at best it will provide a difficult to tune system.
И, несмотря на то, что для хоббийных станков это не плохое решение, гораздо проще сделать опторазвязку на lpt порт и прямые выходы на драйверы двигателей.
-
adif
- Кандидат
- Сообщения: 69
- Зарегистрирован: 02 дек 2010, 09:55
- Репутация: 18
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Ну если можно подискутировать то могу так сказать, что реалтайм можно измерить каким то минимальным временем реагирования? т.е. интерактивность можно вычислить: вопрос - задержка - ответ, так вот время этой задержки есть внутри компьютера и от этого не избежать и при этом мы имеем реалтайм, я вот думаю о том что если даже мы буферизируем данные на очень короткое время может это и будет реалтайм, сложно объяснить ну типа время отклика системы. И вот если эти данные очень быстро передавать по USB то неужели не возможно получить реал тайм? (ну и намутил надеюсь хоть немного понятно)Т.е. все операции которые требуют интерактивности в режиме realtime.
Да в том то и дело что если надо больше входов и выходов то уже одним LPT не обойтись,гораздо проще сделать опторазвязку на lpt порт и прямые выходы на драйверы двигателей.
Мой блог http://adif-studio.blogspot.com/
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Да, но как тогда работать например с поиском 0?
Процедура такова:
1. Едем в сторону датчика. Это мы можем вычисляем траекторию и пишем в USB.
2. Как только нашли датчик, записываем положение, и сразу останавливаемся = меняем траекторию. В этом моменте возникнет проблема.
3...
На сколько я знаю, обычно, все эти функции выполняются целиком и полностью на уровне контроллера. Что делает его несколько сложнее.
http://www.ulmart.ru/goods/215780/
http://www.ulmart.ru/goods/220415/
Процедура такова:
1. Едем в сторону датчика. Это мы можем вычисляем траекторию и пишем в USB.
2. Как только нашли датчик, записываем положение, и сразу останавливаемся = меняем траекторию. В этом моменте возникнет проблема.
3...
На сколько я знаю, обычно, все эти функции выполняются целиком и полностью на уровне контроллера. Что делает его несколько сложнее.
PCI LPT стоит 340 рублей с одним портом и 420 рублей с двумя портами.Да в том то и дело что если надо больше входов и выходов то уже одним LPT не обойтись,
http://www.ulmart.ru/goods/215780/
http://www.ulmart.ru/goods/220415/
-
Impartial
Re: Настройка EMC2 на работу с COM(RS-232) портом
Подключить ЕМС к станку по по RS232 вернее по MODBUS возможно даже в случае применения сервопривода!
Для этого надо взять преобразователь USB->СОМ (FT232+что нибудь 485) на скорости 921600 и внешний генератор шагов, пид регулятор, квадратурные декодеры/счетчики на FPGA | CPLD все это влазит в EPM240. Как ни крути, а период выдачи управляющих сигналов с интерпретатора и хала, а также приём состояний энкодеров и сигналов с датчиков - 1мс. Просчет всей математики у процессора занимает мало времени.Все остальное время ЕМС либо простаивает, либо занимается дерганием пинов ЛПТ.
При указанной скорости передачи/приёма имеем битовую длину 921600/2/1000=460 откидываем старт/стоп 368.
Из ЕМС вытаскиваем только вектора скорости на период в 1 мс т.е сервоцикл, состояние выходов и всасываем состояние счетчиков энкодеров и входов.
Все это хозяйство плюс адресация MODBUS отлично помещается в эти 368 бит. И это в самом тяжелом случае - сервопривода на 5 осей.
Плюс всей этой городули еще и в том, что управление каждой координатой выносится по двум проводам MODBUS прямо к месту привязки (двигателю, концевику итд).
Для этого надо взять преобразователь USB->СОМ (FT232+что нибудь 485) на скорости 921600 и внешний генератор шагов, пид регулятор, квадратурные декодеры/счетчики на FPGA | CPLD все это влазит в EPM240. Как ни крути, а период выдачи управляющих сигналов с интерпретатора и хала, а также приём состояний энкодеров и сигналов с датчиков - 1мс. Просчет всей математики у процессора занимает мало времени.Все остальное время ЕМС либо простаивает, либо занимается дерганием пинов ЛПТ.
При указанной скорости передачи/приёма имеем битовую длину 921600/2/1000=460 откидываем старт/стоп 368.
Из ЕМС вытаскиваем только вектора скорости на период в 1 мс т.е сервоцикл, состояние выходов и всасываем состояние счетчиков энкодеров и входов.
Все это хозяйство плюс адресация MODBUS отлично помещается в эти 368 бит. И это в самом тяжелом случае - сервопривода на 5 осей.
Плюс всей этой городули еще и в том, что управление каждой координатой выносится по двум проводам MODBUS прямо к месту привязки (двигателю, концевику итд).
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
А передача на скорости 921600 идет равномерно? Информация посылается непрерывно или в виде пакетов?
И нам требуется отправлять по два пакета каждый период - один с вектором скоростей в сторону контроллера и второй с показаниями датчиков в сторону EMC2.
И это для серв. А для шаговых двигателей базовый период по-меньше.
И нам требуется отправлять по два пакета каждый период - один с вектором скоростей в сторону контроллера и второй с показаниями датчиков в сторону EMC2.
И это для серв. А для шаговых двигателей базовый период по-меньше.
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: Настройка EMC2 на работу с COM(RS-232) портом
Конечно пакетами и неравномерно, многозадачность в rtai никто не отменял. Да и RS-485 вносит свои заморочки, ведь моноконал.
Но эта равномерность и не нужна, главное обеспечить полный обмен за период сервоцикла, а он одинаков хоть на серве, хоть на шаговиках.
Но эта равномерность и не нужна, главное обеспечить полный обмен за период сервоцикла, а он одинаков хоть на серве, хоть на шаговиках.
