|
17.04.2013, 12:09 | #1 |
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604 |
Да тоже виснет через xx мин.
Сейчас вроде добился стабильной работы с др. шлюзом mbusd + напрямую по USB Arduino. Через какое-то время повис. Но запустил с др. параметрами - что бы не писал свой лог в /var/log/mbus.log (это по сути /tmp/log/) т.е. память которая постепенно уменьшается. Может поэтому и повис. mbusd -L/dev/null -p/dev/ttyUSB0 -s19200 вот его хелп: Код:
mbusd-0.1.2 Copyright (C) 2002, 2003 Victor Antonovich <[email protected]> Usage: mbusd [-h] [-d] [-v level] [-L name] [-p name] [-s value] [-P number] [-C number] [-N number] [-R value] [-W value] [-T value] -h this help -d don't daemonize -v<level> set log level (0-9, default 2, 0 - errors only) -L<name> set log file name (default /var/log/mbus.log, value '-' forces log data output to STDOUT only if '-d' switch was given) -p<name> set serial port device name (default /dev/ttyS0) -s<value> set serial port speed (default 19200) -P<number> set TCP server port number (default 502) -C<number> set maximum number of simultaneous connections (1-128, default 32) -N<number> set maximum number of request retries установить максимальное количество попыток запроса (0-15, default 3, 0 - without retries) -R<value> set pause between requests in milliseconds установить паузу между запросами в миллисекундах (1-10000, default 100) -W<value> set response wait time in milliseconds установить время ожидания ответа в миллисекундах (1-10000, default 10) -T<value> set connection timeout value in seconds (0-1000, default 60, 0 - no timeout) Что мне в нем не нравится, почему то не хочет работать с ttyATH0 ? Рано обрадовался через ~60 мин подвис. php в отладке выдал такую хрень: Код:
Web site started: 16:14:09 readMultipleRegisters: START Connected Packet: bb2a00000006010300010001 Send Wait data ... Data received Packet: bb2a00000003018381 exception 'Exception' with message 'Modbus response error code: 129 (UNDEFINED FAILURE CODE)' in /www/Phpmodbus/ModbusMaster.php:203 Stack trace: #0 /www/Phpmodbus/ModbusMaster.php(507): ModbusMaster->responseCode('?*???????') #1 /www/Phpmodbus/ModbusMaster.php(443): ModbusMaster->readMultipleRegistersParser('?*???????') #2 /www/data.php(17): ModbusMaster->readMultipleRegisters(1, 1, 1) #3 {main} Код:
root@OpenWrt:~# killall mbusd root@OpenWrt:~# mbusd -L/null -p/dev/ttyUSB0 Код:
Web site started: 16:14:09 Время 17:20:00 Температура 24.4 ºC readMultipleRegisters: START Connected Packet: e8e300000006010300010001 Send Wait data ... Data received Packet: e8e300000005010302098b Modbus response error code: NOERROR Disconnected readMultipleRegisters: DONE Последний раз редактировалось andr128; 18.04.2013 в 20:41. |
17.04.2013, 18:54 | #2 |
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604 |
Сделал еще один фокус.
На линукс машине запустил http сервер, запрос с которого идет в роутер, ну и соответственно к ардуине. Проблема к сожалению не пропала. |
06.09.2013, 21:10 | #3 |
Member
Регистрация: 29.03.2013
Сообщений: 68
Вес репутации: 0 |
|
17.04.2013, 22:59 | #4 |
Junior Member
Регистрация: 04.02.2013
Сообщений: 19
Вес репутации: 0 |
В ожидании посылок решил заняться сильно напрягывшей проблемой и вот что вышло.
Напомню: искал возможность на 1 линии RS485 передавать данные с нескольких устройств, разнимать чтоб не подрались, с нормальной скоростью и не сильно требовательно к ресурсам. Велосипед собрал за пару вечеров за основу взяв CSMA/CD (помогла статейка) чуть перепилил и получилось. Работает шустро около 50 команд/сек с подтверждением и пр. формальностями. От процессора требуется 1.5 кб 2 прерывания и 1 таймер с прерыванием по переполнению и все! работает даже на Atmega 8 проверял. Для теста собрал 5 модулей: Ардуина передает команды, поступившие от компа по лану, Master 3 передает команды принятые от ИК пульта, Master 2 всех тролит 33 запроса/сек (было 100Гц - 1/3 просто для теста дает приличную нагрузку на линию), Module 1 выполняет все команды тут полноценная прошивка про него я писал, Module 2 берет на себя часть нагрузки по присмотру за линией и выдает разрешение на передачу. На правом фото крупно светодиоды: белый - устройство передает, зеленый - питание, переключатель выбирает встроенный RS485/внешний модуль(его нет), после включения троль начинает забивать линию, но все доходит и разруливается автоматом. По такой системе можно довешивать модули разного назначения, которые могут командовать другими, сообщать о чл с маленькой задержкой и тд. Опрос легко делается через лан цена вопроса не велика ENC28J60 - 150р + проц и мелочь. Что думаете по такой организации? |
17.04.2013, 23:33 | #5 |
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604 |
Не понял как это все работает, но красиво. Главное чтоб вас устраивало.
А вот это с релюшками что за зверь? |
18.04.2013, 16:13 | #6 |
Junior Member
Регистрация: 04.02.2013
Сообщений: 19
Вес репутации: 0 |
3 устройства, которые могут передавать данные: Master 1,2,3 (две левые платы и мега), правая верхняя плата выполняет адресованные ей команды от любого устройства, правая нижняя только следит за линией и выдает разрешение на использование линии. Master 2 задалбывает всех своими вопросами, и создает искусственную загрузку линии процентов на 70 (после включения переключателя запросы идут в RS485 и начинаются активные переговоры, видно по миганию белых светодиодов, до этого линия им не засоряется), Master 1 и 3 получив команду от сервера или ИК пульта соответственно заставляют правую верхнюю плату (Module 1) сделать чл. Для этого надо вклиниться на линию чтобы другим не помешать и самих не запинали и сказать что надо сделать модулю 1, а получив подтверждение, оставить его в покое. Обмен происходит в фоновом режиме по прерываниям и не сильно отрывает процессор от основной задачи.
Алгоритм похож на рис. 3 из приведенной статьи. Желающий передать ждет пока освободится линия, выжидает IPG (межпакетная щель), после этого имеет право послать запрос (здесь наибольшая вероятность коллизий), шлет запрос модулю 2, модуль 2 выдает разрешение на использование линии, происходит обмен и по истечению IPG в линию ломятся другие желающие. Все тонкости и сценарии развития описывать очень долго, если будет желание можно развить тему. Цель поста показать что на RS485 можно повесить много устройств, которые могут обмениваться между собой данными без сервера, с малой задержкой и обсудить такую структуру сети. Плюсы такой системы думаю понятны всем. Про зверя с релюшками писал здесь, это универсальный модуль собственной разработки. В 3 залита прошивка только для эксперимента и все что там наставлено не используется, а команды выполняет полноценный. |
18.04.2013, 20:23 | #7 |
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604 |
По моему по алгоритму на CAN bus смахивает.
|
18.04.2013, 20:34 | #8 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Цитата:
|
|
18.04.2013, 22:08 | #9 |
Junior Member
Регистрация: 04.02.2013
Сообщений: 19
Вес репутации: 0 |
Вероятность что 2 и более желающих начнут передавать в интервал 0,2мс (это время передачи 1 байта на 57600) крайне мала, но это случается если во время передачи одного находятся еще 2 желающих и дружно ждут IPG
но и тут нет проблем: первый запрос бьется и все желающие понимают это и встают в очередь уже на основе уникального ID или можно генерить случайную задержку, после чего повторяют попытку. и так пока не передадут или закончатся попытки. По ID дольше но проще и мне кажется чуть надежнее. Контроль целостности можно делать либо прослушивая линию в момент передачи (будет сильно грузить проц, другая схема включения драйвера, в железе так и не попробовал) либо по CRC (использовал этот вариант) тут в любом случае надо дожидаться конца пакета чтобы понять побился или нет. Это дольше но проц не перетруживается, нам не HD кидать, и так скорости хватит. при хорошей реакции человека 0,1 сек около 20мс на обмен не критично. Знаю о нескольких уязвимостях, но они крайне маловероятны и можно исправить ести не жалко еще чуть места. по алгоритму на многое смахивает. они все похожи. CAN нет во многих процах! я уже пожалел что не взялся за жирную СТМку (но может тогда и не осилил бы). Задачу ставил найти способ обмена данными с дешевыми дохлыми устройствами без сервера (кл устройство на 8 меге) Можно делать законченное, простое, более надежное устройство, которое по событию может сообщить всем что случилось или управлять несколькими модулями. Кстати, может кто подскажет как по уму посылать из веб страницы пакет в виде байт на IP Устройства (к примеру массив 128,255,128,255) |
18.04.2013, 22:21 | #10 |
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604 |
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|