Передача данных EMC <--> COM

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Саша7892ХН
Новичок
Сообщения: 29
Зарегистрирован: 22 мар 2012, 21:15
Репутация: 0
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Саша7892ХН »

nkp писал(а):если надо попробовать прием-передачу в ком - в #50 сообщ рабочий конфиг
пробовал?
скопировал все файлы и также обозвал конфигурацию
запускается как обычная конфигурация
может что нетак делаю
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

s3301 писал(а):
billsmith писал(а): Даже при 10-ти портах и скорости 9600, в зависимости от времени ожидания, время запроса займёт ооочень мало времени.
А сколько времени будете ждать ответа на каждом порту?
А если помеха будет длится дольше?
billsmith писал(а): Но всё таки хочеться запустить вариант Nick`a как более универсальный. Тут подумал купить ещё пару ардуинок маленьких, да наконец сделать управление шпинделем, и может ещё чего придумаю.
Например управление вот для такого частотника, который многие используют:
http://www.ebay.com/itm/HIGH-QUALITY-VA ... 2eb9f3e030
:hehehe:
Я гонял ардуино часами на скорости 115200, при этом она непрерывно обрабатывала поступающий g-code, расчитывала траекторию и выдавала сигналы на шаговики, и не единой помехи. Так что ждать ответа например 0,01 сек было бы достаточно, и реализовать ответ за это время ардуине будет легко.
А у меня как раз такой частотник ;) . Но сначала пульт.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Serg »

billsmith писал(а): Я гонял ардуино часами на скорости 115200, при этом она непрерывно обрабатывала поступающий g-code, расчитывала траекторию и выдавала сигналы на шаговики, и не единой помехи. Так что ждать ответа например 0,01 сек было бы достаточно, и реализовать ответ за это время ардуине будет легко.
А у меня как раз такой частотник ;) . Но сначала пульт.
0.01 сек - это длительность одной полуволны промышленного переменного тока (50 Гц) - вполне потянет на помеху от недалеко расположенного силового кабеля в момент подключения к сети мощной нагрузки...
Дело не в том, что у кого-то нет не единой помехи, а в том, что они у кого-то другого обязательно будут и ваш протокол, не имеющий защиты от них окажется никому не нужен. Посему если протокол разрабатывается для себя и для соседа, то такой подход годится, а если в расчёте на широкое применение, то это совсем другое.
Опять-же зачем ограничивать себя количеством COM/USB портов в системе? Во многих системах для встраивания их всего 2-4 штуки. Или скорости 115200 не хватит для обслуживания нескольких устройств на шине? Тот-же modbus не дураки придумали и нарекли стандартом. ;)

Я не зря дал ссылку на этот частотник - он уже поддерживает modbus, зачем "лепить к нему ардуинку"?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

Саша7892ХН писал(а):скопировал все файлы и также обозвал конфигурациюзапускается как обычная конфигурация может что нетак делаю
Так какой вариант:
вкладки совсем нет?
вкладка есть-но пустая ?
Саша7892ХН
Новичок
Сообщения: 29
Зарегистрирован: 22 мар 2012, 21:15
Репутация: 0
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Саша7892ХН »

вкладки совсем нет
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

s3301 писал(а):
billsmith писал(а): Я гонял ардуино часами на скорости 115200, при этом она непрерывно обрабатывала поступающий g-code, расчитывала траекторию и выдавала сигналы на шаговики, и не единой помехи. Так что ждать ответа например 0,01 сек было бы достаточно, и реализовать ответ за это время ардуине будет легко.
А у меня как раз такой частотник ;) . Но сначала пульт.
0.01 сек - это длительность одной полуволны промышленного переменного тока (50 Гц) - вполне потянет на помеху от недалеко расположенного силового кабеля в момент подключения к сети мощной нагрузки...
Дело не в том, что у кого-то нет не единой помехи, а в том, что они у кого-то другого обязательно будут и ваш протокол, не имеющий защиты от них окажется никому не нужен. Посему если протокол разрабатывается для себя и для соседа, то такой подход годится, а если в расчёте на широкое применение, то это совсем другое.
Опять-же зачем ограничивать себя количеством COM/USB портов в системе? Во многих системах для встраивания их всего 2-4 штуки. Или скорости 115200 не хватит для обслуживания нескольких устройств на шине? Тот-же modbus не дураки придумали и нарекли стандартом. ;)

Я не зря дал ссылку на этот частотник - он уже поддерживает modbus, зачем "лепить к нему ардуинку"?
Ну с количеством USB проблем как раз нет, разветвители продаются на каждом углу. А вот лепить устройства на одну шину, это уже нужно подумать как лучше, как проще, мне лично паять очень напрягает (хотя в молодости сутками делал различные устройства). А этот вариант подкупает простотой, купил ардуинку за 15 баксов, воткнул её в USB, залил скетч, и готовое любое внешнее устройство.
Ну а по поводу помех. я например, работал с ардуиной по USB, которая была в одном ящике с пускателями для двигателей 5КВт и управляла ими, блок питания её лежал там же. На экран (2х строчный) при включении контакторов наводилась импульсная помеха, и он сбрасывался, а самой ардуиной связь не нарушалась. Я не говорю что ненужно делать проверку например по контрольной сумме, для надёжности. Я просто говорю что время опроса даже 10ти USB портов будет ничтожно мало, и этот опрос нужен только при запуске скрипта.
А тем ипульсником всё равно просто универсальным скриптом управлять не получиться:
1. Его нужно както подключить к компьютеру, желательно USB. Вот уже и нужен преобразователь.
2. Универсальный скрипт просто будет в порт кидать данные с выбраных пинов. Но частотник этого не поймёт, ему нужен свой формат данных.
И мне кажеться что преобразоватклем легко может стать ардуина. И в ней же пишем скетч для управления частотником.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

Саша7892ХН писал(а):вкладки совсем нет
У меня работает с убунта 10.04
емс 2.5
Саша7892ХН
Новичок
Сообщения: 29
Зарегистрирован: 22 мар 2012, 21:15
Репутация: 0
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Саша7892ХН »

у меня наверное все старше емс точно пишет 2.4.3
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение nkp »

обновиться до 2.5 делов 15 мин
(но это не к тому,что заработает)
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

Так в 50 посте вкладка на GladeVCP написана, а он вроде только в версии 2.5 появился
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Serg »

billsmith писал(а): Ну с количеством USB проблем как раз нет, разветвители продаются на каждом углу. А вот лепить устройства на одну шину, это уже нужно подумать как лучше, как проще, мне лично паять очень напрягает (хотя в молодости сутками делал различные устройства). А этот вариант подкупает простотой, купил ардуинку за 15 баксов, воткнул её в USB, залил скетч, и готовое любое внешнее устройство.
С двумя USB-устройствами подключенными через один разветвитель вы не сможете работать одновременно, ибо контроллер у них будт один. Чем это лучше нескольких устройств на одной шине? Количеством ардуинок? ;)
Попробуйте в один разветвитель воткнуть например USB-мышь и какую-нибудь быструю флешку, лучше USB-диск, запустите копирование файла с/на диск и попробуйте подвигать мышку...
billsmith писал(а):Ну а по поводу помех. я например, работал с ардуиной по USB, которая была в одном ящике с пускателями для двигателей 5КВт и управляла ими, блок питания её лежал там же. На экран (2х строчный) при включении контакторов наводилась импульсная помеха, и он сбрасывался, а самой ардуиной связь не нарушалась. Я не говорю что ненужно делать проверку например по контрольной сумме, для надёжности. Я просто говорю что время опроса даже 10ти USB портов будет ничтожно мало, и этот опрос нужен только при запуске скрипта.
Вы можете собрать ещё один точно такой-же ящик и получить совершенно иные помехи...
Максимальная длина USB-кабеля - 5 метров в идеальных условиях. Этого часто бывает мало даже в пределах одного станка. Хотя если изобретается протокол чисто для себя, то наверно хватит. В этом случае наверно и горячее подключение не нужно и можно опрашивать только при запуске.
billsmith писал(а): А тем ипульсником всё равно просто универсальным скриптом управлять не получиться:
1. Его нужно както подключить к компьютеру, желательно USB. Вот уже и нужен преобразователь.
2. Универсальный скрипт просто будет в порт кидать данные с выбраных пинов. Но частотник этого не поймёт, ему нужен свой формат данных.
И мне кажеться что преобразоватклем легко может стать ардуина. И в ней же пишем скетч для управления частотником.
Ещё как получается!
1. Ну да, вместе со всеми остальными устройствами через единственный адаптер USB-RS485.
2. А мне кажется, что быть преобразователем вполне способен уже имеющийся процессор компа, на котором запущена EMC2. ;)

P.S. Ладно, забейте, у меня не задачи переубедить вас в чём-то. В любом случае реализация задуманного пойдёт в копилку вашего опыта. :good:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Саша7892ХН
Новичок
Сообщения: 29
Зарегистрирован: 22 мар 2012, 21:15
Репутация: 0
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Саша7892ХН »

Как прописать чтобы из скрипта питон значение выводилось в pyvcp

не пинайте хочу со всем разобраться
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

s3301 писал(а):
С двумя USB-устройствами подключенными через один разветвитель вы не сможете работать одновременно, ибо контроллер у них будт один. Чем это лучше нескольких устройств на одной шине? Количеством ардуинок? ;)
Попробуйте в один разветвитель воткнуть например USB-мышь и какую-нибудь быструю флешку, лучше USB-диск, запустите копирование файла с/на диск и попробуйте подвигать мышку...

Ещё как получается!
1. Ну да, вместе со всеми остальными устройствами через единственный адаптер USB-RS485.
2. А мне кажется, что быть преобразователем вполне способен уже имеющийся процессор компа, на котором запущена EMC2. ;)

P.S. Ладно, забейте, у меня не задачи переубедить вас в чём-то. В любом случае реализация задуманного пойдёт в копилку вашего опыта. :good:
С двумя устройствами будем работать через разветвитель одновременно. Не забываем про разницу скоростей какие позволяет USB2.0 и какие нам необходимы.

По поводу дальности, если это так критично, ком порт при желании можно довольно сильно разнести. А вообще на примере пульта, так я вообще думал поставить какой нибудь блютуз модуль. Опять же к ардуине он цепляется элементарно.

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

Re: Передача данных EMC <--> COM

Сообщение Nick »

Саша7892ХН писал(а):loadusr -Wn rs232 python rs232.py
net rs232-exec <= pyvcp.send => rs232.exec
net rs232-in0 <= pyvcp.my-spinbox => rs232.in0
... exec не обязательно делать, в двух словах
loadusr - загрузить компонент в user space и подождать готовности компонента rs232, т.е. выполнить скрипт python rs232.py и дожжаться когда компонент rs232 скажет ready. Потом продолжить выполнение hal.

net - это уже непосредственное подключение пинов, exec был нужен для инициализации отправки сообщений, здесь все делается в цикле раз в timer.
Саша7892ХН писал(а):с консоли порт читается и пишется а выдает ошибку
inifile:warning:file contains DOS-style line endings.
python exited without becoming ready
Говорит, что файл содержит концы строки в стиле dos, питон похоже это не любит... в есть два типа конца строки - \n (new line) и - \r\n carrige return + \n.
Как ты сохранял файл?
Открой его в gedit, потом сохранить как и выбери тип конца строки Linux/Unix.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Nick »

s3301 писал(а):Дело не в том, что у кого-то нет не единой помехи, а в том, что они у кого-то другого обязательно будут и ваш протокол, не имеющий защиты от них окажется никому не нужен.
Оставлено место под CRC каждого пина. Пока не сделали, надо решить какую сумму считать.
s3301 писал(а):Опять-же зачем ограничивать себя количеством COM/USB портов в системе?
Вроде есть байт, а точнее даже не байт, а все до первого ":" на номер устройства.

Делаем свой, чтобы можно было просто прокинуть пины, чтобы не был необходимости каждый раз перекодировать их из численных названий и прочего.
Тут получится просто прописываем названия пинов, и также просто подсоединяем их в hal.
Кстати можно массивы пинов вынести в строкуу загрузки компонента loadusr.
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

Nick, может поможеш мне запустить твой скрипт http://cnc-club.ru/forum/viewtopic.php? ... =40#p25973?
А то не хочется сейчас сделать по своему, а потом переделывать скетч для ардуины под твой универсальный скрипт.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Nick »

похоже я пропустил твое сообщение, нужно после bit_in.split
добавить скобки, чтобы это был вызов функции, а не ссылка на него, т.е. надо
bit_in.split()
И в следующих строчках также изменить, если там нет скобок.
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

Сегодня снова вернулся к пульту.
Есть пара вопросов.
1. Как сделать чтоб при запуске(ну и во время работы желательно) скрипт проверял доступность данного порта? Если недоступен, выдавало окно и работало без скрипта. А ещё желательно при запуске чтоб посылало по всем доступным портам например ID и если получит в ответ "OK" то принимало его к работе. А то у меня сейчас ели пульт не подключил, LinuxCNC не запускается, так как скрипт матюкается что порт недоступен.
2. Как сделать чтоб при получении строки, питоновский скрипт запускал его как g-code или запускал например подпрограмму в которой записан g-code?
Заранее благодарю за помощь.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение Nick »

billsmith писал(а):. Как сделать чтоб при запуске(ну и во время работы желательно) скрипт проверял доступность данного порта? Если недоступен, выдавало окно и работало без скрипта. А ещё желательно при запуске чтоб посылало по всем доступным портам например ID и если получит в ответ "OK" то принимало его к работе. А то у меня сейчас ели пульт не подключил, LinuxCNC не запускается, так как скрипт матюкается что порт недоступен.
А как у тебя сейчас запускается скрипт?
проще всего сделать так:
в while скрипта добавить

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

if self.ready :
	.....
else :
	self.connect()
	
И в def connect(self) : уже описать процедуру инициализации порта.
billsmith писал(а):2. Как сделать чтоб при получении строки, питоновский скрипт запускал его как g-code или запускал например подпрограмму в которой записан g-code?
Хитрая задача...
как мне кажется можно через halui-mdi-command-XX + ocall <#custom_command> + переписывание файла custom_command.ngc...
Хотя может есть варианты по-проще...?
billsmith
Опытный
Сообщения: 128
Зарегистрирован: 04 июн 2012, 23:46
Репутация: 5
Контактная информация:

Re: Передача данных EMC <--> COM

Сообщение billsmith »

Запускаю из custom_postgui.hal

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

loadusr -Wn arduino ./arduino.py
Так как с питоном у меня туго, пока проблему с запуском при отключенном пульте решил так

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

try:
	ser = serial.Serial(PORT, 9600, timeout=2)
except serial.SerialException:
	pass
Правда нет проверки ID и порта. В примерах к питону есть пример scan.py, он выводит список доступных портов, но не видит usb конвертера.

Ещё возникла небольшое неудобство. Скрипт у меня в цикле посылает в порт данные, но насколько я понял делает это быстро, данные скапливаються в буфере. Из-за это показания отставали где-то на 1 секунду. Вариантом стало добавить в цикле time.sleep(.01), стало значительно лучше. Но мне так неподходит, так как нужно читать с порта без задержек. На ардуине я в таких случаях делал так

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

  //Обновление раз в 0.1сек
  if(millis() - previousMillis > 100) {
    previousMillis = millis(); 
    update_info();
    }
Ответить

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