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

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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.05.2013, 10:08   #1
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
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
Просмотров: 15681

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


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

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


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

Схема для подключения датчика температуры к Arduino
Нажмите на изображение для увеличения
Название: DS18B20.png
Просмотров: 2889
Размер:	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
Просмотров: 1317
Размер:	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 Кб, 1546 просмотров)

Последний раз редактировалось andr128; 02.09.2013 в 07:50. Причина: обновление
andr128 вне форума   Ответить с цитированием
 


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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


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


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