Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Открытый проект умного дома

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.05.2013, 10:08   #1
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1605
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию Smart Home modbus web project

Долго мучил сторонний шлюз Modbus RTU - Modbus TCP и в конце-концов решил написать свой шлюзовый сервер Modbus RTU - TCP Client. Хочу сразу отметить на стороне TCP клиента, сервер использует свой протокол и не является Modbus TCP протоколом!

шлюз TCP to Modbus RTU
-------------------------
Программа написана специально для работы с Arduino по протоколу Modbus RTU.
Для слэйв устройств является мастером, для TCP клиентов соответственно - сервером.

Используются только 2-е функции Modbus RTU:
- Modbus function code 0x03 (03) - чтение всех регистров
- Modbus function code 0x10 (16) - запись всех регистров
(в данном проекте запись идет только одного регистра)

Получает запросы от клиента (php) по TCP протоколу и преобразует полученную
строку параметров в протокол Modbus RTU для обмена со слэйв устройством.

Программа работает максимум с 20-ю регистрами на устройство.
Пока думаю хватит

Итак для затравки картинка web страницы.
Название: web.png
Просмотров: 15744

Размер: 25.8 Кб
Конечно страница больше тестовая и полностью не отражает работу умного дома. Но на данном этапе я и не стремился делать все и сразу. Это как пример реализации управления, мониторинга. Дальше нужна только фантазия...


Что можно делать.
- Опрашивать устройства меняя их ID.
- Устанавливать значения регистров, при установке checkbox в "авто" - в реальном режиме постоянно читать состояние устройства, опрос идет раз в сек.
Слева в полях на сером фоне показаны текущие значения состояния регистров (не редактируются). Справа - заносятся новые значения. Кнопка "очистить" - очищает эти поля.

Строится все по такой схеме:


Схема для подключения Arduino по RS485
Нажмите на изображение для увеличения
Название: arduino_rs485.png
Просмотров: 3975
Размер:	19.5 Кб
ID:	1005
Вот еще вариант подключения с обвязкой

Схема для подключения датчика температуры к Arduino
Нажмите на изображение для увеличения
Название: DS18B20.png
Просмотров: 2896
Размер:	5.8 Кб
ID:	1006

Экспериментировал с 2-мя ардуинами. Ардуины подключены к роутеру через max485. В роутер вмонтирован преобразователь ttl-rs232 далее подключен преобразователь rs232-rs485.
Нажмите на изображение для увеличения
Название: arduino_web_project01.jpg
Просмотров: 2657
Размер:	277.8 Кб
ID:	1026

Возможно подключение к роутеру через преобразователь USB-RS485 (не "коверкая" роутер).
Нажмите на изображение для увеличения
Название: arduino_web_project02.jpg
Просмотров: 1318
Размер:	275.8 Кб
ID:	1027
Одна ардуина имеет ID=1, другая ID=2. К ардуине с ID=1 подключен температурный датчик. Значение температуры заносится в регистр 1. Т.к. температура имеет дробное значение, а регистры целочисленные чтобы сохранить дробую часть, я умножил это значение на 100 и привел его к целочисленному. На web странице я не делал обратного преобразования.
Поэтому вместо значения например: 27.45 будет видно 2745.

На ID=2 просто в регистр 0 раз в секунду записывается счетчик (для наглядности динамики), если в регистр 1 записать не нулевое значение счетчик сбрасывается в 0. Регистр 9 на обоих ардуинах привязан к тестовому светодиоду led13.
Все это легко понять посмотрев простые тестовые скетчи к Arduino.
Разумеется Вы можете привязать регистры к любым вх/выходам Arduino, в том числе аналоговым.
В ардуинах я задейсвовал по 10 регистров-переменных. Соответственно Web страница написана тоже под 10 регистров. Шлюз написан на поддержку максимум 20 регистров.

Регистры представляют собой массив переменных из uint16_t. Хоть тип переменной uint16_t, принимает знач. без знака, перевод знака происходит в шлюзе, путем привидения переменной к типу int16_t (целочисленное значение со знаком). Поэтому вы можете записывать как отрицательные, так и положительные значения не превышая абсолютное значение 32767.

Web страница использует JavaScript (JQuery) и технологию AJAX, что позволило не перезагружать страницу и дает эффект как будто вы работаете в программе. Данные принимаются от Web клиента в формате JSON строки. PHP интерпретатор передает эти данные шлюзу через сокет, ответные данные от шлюза передаются обратно Web клиенту (браузеру).

Протокол обмена между php и шлюзом подробно описан в readme.txt к шлюзу.

Для повторения потребуется:
- Установка OpenWrt на роутер
- Установка USB диска
- Установка Web сервера

Для ардуино используется библиотека simple-modbus
в архиве:
- Тестовые программы для ардуины
- Web страница
- Шлюзовый сервер
- Исходники шлюза

В общем все крутится и светится
Тест постоянного чтения в течении 8 часов прошел удачно
Корректная работа в браузерах: Opera, Mozilla, Chrome (IE работает "криво")

Буду рад прокомментировать если у кого-то возникнут вопросы.

02.09.13
- изменен алгоритм работы шлюза v 03a и web клиента
- обновлена библиотека для arduino SimpleModbusSlave ver 5
Вложения
Тип файла: zip modbus_web_project03.zip (535.0 Кб, 1589 просмотров)

Последний раз редактировалось andr128; 02.09.2013 в 07:50. Причина: обновление
andr128 вне форума   Ответить с цитированием
Старый 21.05.2013, 12:01   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Огромное спасибо!
Буду пробовать
Пакеты в архиве для какой версии ?
Admin вне форума   Ответить с цитированием
Старый 21.05.2013, 17:04   #3
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1605
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию

Компилировал для mr3020 (пакет программ под trunk r33482), но думаю заведется и на 703.

установка:
скопировать в /tmp
opkg install /tmp/libmodbus_3.0.2-2_ar71xx.ipk
opkg install /tmp/mbserv_1.0.0-3_ar71xx.ipk

Последний раз редактировалось andr128; 26.05.2013 в 20:52.
andr128 вне форума   Ответить с цитированием
Старый 24.05.2013, 18:24   #4
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

А что такое Master Modbus (ID=0) ?
А можно обойтись без переходников rs232 ?
stD вне форума   Ответить с цитированием
Старый 24.05.2013, 22:00   #5
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1605
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от mebitek Посмотреть сообщение
А что такое Master Modbus (ID=0) ?
id=0 по положению модбас это адрес мастера.
Цитата:
А можно обойтись без переходников rs232 ?
Без проблем можете соединить одну ардуину подключив напрямую в USB порт (в случае со стандартной ардуиной с USB портом). В этом случае нужно изменить в программе инициализацию модбас.
modbus_configure(speed, ID_Slave, numpin_set_for_max485, MB_REGS, tab_reg);
speed - скорость обмена, стандартный ряд 9600 ..
ID_Slave - идентификатор устройства
numpin_set_for_max485 - pin для управления max485, если не используется (в случае подкл. напрямую) нужно ставить 0 или 1, тогда не будет исп. упр. пин.
MB_REG - кол-во используемых регистров
tab_reg - массив регистров (значений регистров)

Сама концепция modbus rtu подразумевает работу по rs485. Но все зависит от ваших желаний. Можно организовать работу по эфиру или через переходник USB-RS485
Название: USB_to_RS485.jpg
Просмотров: 15185

Размер: 14.6 Кб
,а на ардуино использовать max485, для преобразования uart в rs485, в этом случае сеть строится конечно по проводам.

Последний раз редактировалось andr128; 24.05.2013 в 22:18.
andr128 вне форума   Ответить с цитированием
Старый 24.05.2013, 22:21   #6
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

Цитата:
id=0 по положению модбас это адрес мастера.
Извиняюсь, я имел в виду, что это за устройство?
stD вне форума   Ответить с цитированием
Старый 24.05.2013, 22:31   #7
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

Цитата:
А можно обойтись без переходников rs232 ?
А можно подключить роутер напрямую к max485 ? То есть /dev/ttyATH0 к max485.

Последний раз редактировалось stD; 24.05.2013 в 22:34.
stD вне форума   Ответить с цитированием
Старый 25.05.2013, 07:53   #8
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1605
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию

Подключить можно, но нужно как-то управлять режимом переключения RX-TX в MC MAX485. Можно попробовть собрать такую схему.
http://www.cyber-place.ru/showthread.php?t=296&page=5
andr128 вне форума   Ответить с цитированием
Старый 25.05.2013, 12:29   #9
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

А у Тебя к UARTу роутера подключен преобразователь ttl-rs232, как ты им управляешь?
Обьясни поподробнее пожалуйста!
stD вне форума   Ответить с цитированием
Старый 25.05.2013, 21:38   #10
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1605
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию

Я не совсем понял вопрос.
К роутеру к UART подключен преобразователь TTL-RS232 далее RS232-RS485.
Преобразователь RS232-RS485 аппаратно сам переключает режим. Собственно в первом посту я это описал.

Преобразователь TTL-RS232 используется лишь как промежуточное звено т.к. преобразователей TTL-RS485 с аппаратным переключением направления в продаже я не встречал. Есть либо USB-RS485, либо RS232-RS485.
Еще раз повторюсь, что можно собрать самому ссылки на схемы я приводил выше.

Последний раз редактировалось andr128; 25.05.2013 в 21:58.
andr128 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 5 (пользователей: 0 , гостей: 5)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 01:59. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика