Arduino -> ModBus -> LCNC

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение nkp »

solo писал(а):А че у меня такой проблема меня тоже это все удивляет
UAVpilot переключал из своего скетча ,так что с платой у тебя все в порядке скорей всего...
а косяк где то в коде(кто то криворукий написал :hehehe: ) - в работе его еще никто не проверял (может aftaev?)
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение solo »

провел небольшое тестирование
На выход ардуино прицепил через транзисторный ключ релюшку на вывод 50 в хеле соединил
net digout100 motion.digital-out-00 arduino.Dout3-50
, контакты реле замыкаю вход ардуино 20 , которы отслеживается по Ж38.2 в хеле соединил
net 2digin20 arduino.Din1-20 gladevcp.hal_led1 motion.digital-in-00 motion.probe-input
по данной схеме я так понимаю у меня проходит двойной обмен по модбусу
запускаю ж код
G0X0
M64 P00 (посылаем на цифровой выход 50 ардуино "1" на реле срабатывает)
G38.2 F100 X100 (еду до сработки контактов реле)
G4P0.2
M65 P00
M2
По перемещению по оси Х оцениваю скорость модбуса
результат минимальное время (перемещение ) 0.113 мах 0.702
Может у кого то есть предложение на счет другого Ж кода или как то по другому провести тест.

какие из показателей загрузки LCNC могут влиять на скорость по модбусу , хочется разброс уменьшить хотя бы в 2 раза
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение solo »

может у меня все таки немного кривовата ардуина .
У мена светодиоды RX TX на плате горят интенсивно но не очень равномерно - мерцают , что наверное сигнализирует о не равномерном обмене по модбус.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Impartial »

Может попробовать оценить быстродействие подключив модбас просто к терминальной программе?
Сразу станет видно где косяк с быстродействием. Скорее всего проблема с ЕМС, и неразрешимая.
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение solo »

Мне бы если бы объяснили по доступней чего куда втыкать на какие пимпочки жимить а то я :monkey: :hammer:
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Impartial »

solo писал(а):Мне бы если бы объяснили по доступней чего куда втыкать на какие пимпочки жимить а то я
Так все же работает. Значит правильно все подключено. А вот задержки - это результат работы драйвера модбас в пользовательском потоке.
Нужен драйвер работающий в потоке реального времени. Тут уже были советы перенести его туда, но как это сделать толком никто не знает. Я, например, не знаю возможно ли это вообще.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Serg »

Дело не столько в драйвере (порт в компе полностью аппаратный), сколько в ответном компоненте, написанном на Питоне.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение solo »

Так может общими усилиями можно сотворить "ответный компонент" который будет работать более стабильно . с меня :beer_blow: и тестирование :rail:
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Impartial »

UAVpilot писал(а):Дело не столько в драйвере (порт в компе полностью аппаратный), сколько в ответном компоненте, написанном на Питоне.
Не увидел, где на питоне написано. Все вроде на С.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Serg »

solo писал(а):Так может общими усилиями можно сотворить "ответный компонент" который будет работать более стабильно . с меня :beer_blow: и тестирование :rail:
Лично я не хочу тратить время на RTAI. Как будет хотя-бы предрелиз на другом RT, то будет видно...
Impartial писал(а):Не увидел, где на питоне написано. Все вроде на С.
Я внимательно не смотрел - вроде встречались тут какие-то скрипты на питоне...
Ну если ошибаюсь, то значит ситуация чуток лучше. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Impartial »

solo писал(а):Так может общими усилиями можно сотворить "ответный компонент" который будет работать более стабильно . с меня и тестирование
nkp вроде все разложил по полочкам. Лучше не получится.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение nkp »

Impartial писал(а):Нужен драйвер работающий в потоке реального времени. Тут уже были советы перенести его туда, но как это сделать толком никто не знает. Я, например, не знаю возможно ли это вообще.
я уже писал:
можно попробовать исключить юсб, используя Serial1 , на стороне емс - ладдер в реалтайме но со своим более медленым потоком...
(вроде бы предварительно пришли к выводу - что в 1мс не влезем)
а тут - 0.1с - может получиться...
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Impartial »

Есть в этом одно НО. Последовательный порт эффективно можно обрабатывать только по прерываниям. Ни один компонент или драйвер, в ЕМС, работать с прерываниями не может. А иначе останутся те же самые проблемы и в реалтайме.
Например скорость модбас 19200. это значит в самом минимуме передача ведется со скоростью 1920 байт/сек.
Вопрос: какую скорость опроса регистра состояния приемника выбрать? Ведь неизвестно когда начнется и закончится прием. Поэтому в драйвере ставятся большие значения таймаутов в надежде, что пакет придет полностью за это время.
А вот чтобы сделать работу по прерываниям нужно лезть в ядро линукса.
Я чем дальше разбираюсь с линуксом, тем больше уважаю микрософт.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Serg »

Impartial писал(а):Последовательный порт эффективно можно обрабатывать только по прерываниям.
Можно для начала DMA задействовать - формировать сразу всю посылку на передачу и сливать за один раз. С приёмом чуток сложнее, но тоже решабельно.
Во всяком случае для собственно передачи/приёма процессор вообще не понадобится, а нагрузку на шину вообще никто не заметит. А в юзерспейсе останется разбор протокола.
Impartial писал(а):А вот чтобы сделать работу по прерываниям нужно лезть в ядро линукса.
Не надо никуда лезть, всё доступно в userspace.
Impartial писал(а):Я чем дальше разбираюсь с линуксом, тем больше уважаю микрософт.
Поинтересуйся на досуге почему wince на arm появилась почти мгновенно, а настоящую многозадачную ОС только в win8 асилили... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Сергей Саныч »

UAVpilot писал(а):Можно для начала DMA задействовать
Можно проще. У нынешних COM-портов есть FIFO минимум по 16 байт на прием и передачу. Вполне достаточно, чтобы целиком поместились небольшие пакеты modbus. Так что, если разрешить FIFO, можно выплевывать пакет целиком и не заботиться о переполнении буферов. То же и с приемом. Можно изредка (в сервоцикле) опрашивать наличие данных. Как появятся - выгребать.
Вопрос только в том, что всё это надо делать. Готовых кубиков вроде бы пока нету.
Можно взять за основу serport и переделать, чтобы использовать его не только как ногодрыгалку, а как полноценный драйвер последовательного порта.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Serg »

FIFO задействовано по дефолту.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Impartial »

UAVpilot писал(а):Можно для начала DMA задействовать - формировать сразу всю посылку на передачу и сливать за один раз. С приёмом чуток сложнее, но тоже решабельно.
Ком порт в стандартной архитектуре IBM не подключен к ДМА. Так что обмен по ДМА невозможен.
Сергей Саныч писал(а):Можно проще. У нынешних COM-портов есть FIFO минимум по 16 байт на прием и передачу.
Не поможет. Заполнение фифо все равно нужно опрашивать. И какая разница в этом случае каждый байт или фифо полностью.
UAVpilot писал(а):Поинтересуйся на досуге почему wince на arm появилась почти мгновенно, а настоящую многозадачную ОС только в win8 асилили...
Мы находимся на форуме любителей и говорить загадками, по моему , не очень хороший вариант.
Подобные утверждения нужно хоть как то обосновать.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Сергей Саныч »

Impartial писал(а): Заполнение фифо все равно нужно опрашивать. И какая разница в этом случае каждый байт или фифо полностью.
Существенная. Имея аппаратный FIFO, можно быстро загнать туда целый пакет и не спеша, раз в сервоцикл или еще реже опрашивать готовность приема. Достаточный размер буферов фифо (больше пакета) гарантирует отсутствие потери данных.
UAVpilot писал(а):FIFO задействовано по дефолту
Системой. Мы же планируем отобрать порт у ОС и работать с ним сами. В serport это как-то сделано, но я пока не вникал, как именно. Потом можно порт перенастроить под свои нужды.
Чудес не бывает. Бывают фокусы.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение nkp »

Impartial писал(а):Есть в этом одно НО
после прочтения нескольких постов выше мне показалось ,что есть потенциал (по крайней мере у вас троих ))
"порвать" этот компорт+модбас+емс :hehehe:
как бы там не обстояли дела , но не лучше ли в любом случае исключить юсб??
вот solo выше говорил о помехах,вырубающих модбас...
возможно ,при непосредственной коммутации через компорт проблема снимется...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Arduino -> ModBus -> LCNC

Сообщение Сергей Саныч »

nkp писал(а):но не лучше ли в любом случае исключить юсб??
По USB всяко полнО неопределенностей, даже при безупречной работе адаптеров. Работать с USB, не используя драйверы ОС - это нереально (практически). COM-порт же - довольно простая железяка.
nkp писал(а):вот solo выше говорил о помехах,вырубающих модбас...
У меня такое тоже было (USB адаптер на базе FT-232). Вылечилось исключением кабелей USB (адаптер втыкается прямо в материнку).
Но у меня через модбас подключен только инвертор, а там быстродействие особое не требуется.
Чудес не бывает. Бывают фокусы.
Ответить

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