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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.11.2012, 22:59   #1
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312
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
По умолчанию

А ты сможешь набросать скетч на основе этой библиотеки, с тремя ардуинами, две ведомые, одна главная? А то пример который идёт вместе с библиотекой не совсем понятен!

PHP код:
#include <Modbusino.h>

/* Initialize the slave with the ID 1 */
ModbusinoSlave modbusino_slave(1);
/* Allocate a mapping of 10 values */
uint16_t tab_reg[10];

void setup() {
    
/* The transfer speed is set to 115200 bauds */
    
modbusino_slave.setup(115200);
}

void loop() {
    
/* Initialize the first register to have a value to read */
    
tab_reg[0] = 0x1234;
    
/* Launch Modbus slave loop with:
       - pointer to the mapping
       - max values of mapping */
    
modbusino_slave.loop(tab_reg10);

stD вне форума   Ответить с цитированием
Старый 24.11.2012, 23:01   #2
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312
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
По умолчанию

Есть ещё одна библиотека <ModbusMaster.h>.
Вот из неё пример:

PHP код:
#include <ModbusMaster.h>


// instantiate ModbusMaster object as slave ID 2
// defaults to serial port 0 since no port was specified
ModbusMaster node(2);


void setup()
{
  
// initialize Modbus communication baud rate
  
node.begin(19200);
}


void loop()
{
  static 
uint32_t i;
  
uint8_t jresult;
  
uint16_t data[6];
  
  
i++;
  
  
// set word 0 of TX buffer to least-significant word of counter (bits 15..0)
  
node.setTransmitBuffer(0lowWord(i));
  
  
// set word 1 of TX buffer to most-significant word of counter (bits 31..16)
  
node.setTransmitBuffer(1highWord(i));
  
  
// slave: write TX buffer to (2) 16-bit registers starting at register 0
  
result node.writeMultipleRegisters(02);
  
  
// slave: read (6) 16-bit registers starting at register 2 to RX buffer
  
result node.readHoldingRegisters(26);
  
  
// do something with data if read is successful
  
if (result == node.ku8MBSuccess)
  {
    for (
06j++)
    {
      
data[j] = node.getResponseBuffer(j);
    }
  }

stD вне форума   Ответить с цитированием
Старый 25.11.2012, 05:07   #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
По умолчанию

Цитата:
Сообщение от mebitek Посмотреть сообщение
А ты сможешь набросать скетч на основе этой библиотеки, с тремя ардуинами, две ведомые, одна главная? А то пример который идёт вместе с библиотекой не совсем понятен!
modbusino - Эта библиотека реализует только режим клиента.
на странице автора прямо так и написано Small Modbus slave, RTU (serial) for Arduino.

Вроде все расписал что не понятно? меняйте ID и будет вам другая ардуина в сети.

А что у вас будет делать ардуина работающая мастером? Её задача?

Последний раз редактировалось andr128; 25.11.2012 в 05:11.
andr128 вне форума   Ответить с цитированием
Старый 26.11.2012, 05:18   #4
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312
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
По умолчанию

Я хочу чтоб мастер отправлял данные ведомым, слушал от них ответ и общался с сервером.
stD вне форума   Ответить с цитированием
Старый 26.11.2012, 17:37   #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 Посмотреть сообщение
Я хочу чтоб мастер отправлял данные ведомым, слушал от них ответ и общался с сервером.
Здесь я не чего не понял. Кто, куда и что?
Цитата:
мастер отправлял данные ведомым
от кого?
Цитата:
слушал от них ответ
услышал ответ, а далее что?
Цитата:
и общался с сервером
С каким сервером? с Web?
Вы же понимаете что это лишнее звено.
На ардуино нужно будет задействовать уже 2-а сериальных порта.
Ваш сервер каким-то образом (посредством некой программы cgi, php?) через 2-й сериальный порт будет связываться с ардуиной-мастером, причем по отношению к серверу эта ардуина будет ведомой (т.е. инициатором соединения будет выступать сервер). По какому-то известному лишь вам протоколу.

Ну чтож попробуйте.
andr128 вне форума   Ответить с цитированием
Старый 30.11.2012, 19:05   #6
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312
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
По умолчанию

То что я хочу сделать, я попытался описать вот здесь: http://cyber-place.ru/showpost.php?p=2311&postcount=5

Как же без сервера, без него никак нельзя! )))))
stD вне форума   Ответить с цитированием
Старый 30.11.2012, 23:39   #7
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 Посмотреть сообщение
То что я хочу сделать, я попытался описать вот здесь: http://cyber-place.ru/showpost.php?p=2311&postcount=5
это я уже читал

Цитата:
Как же без сервера, без него никак нельзя! )))))
Я имел ввиду лишнее звено ардуино-мастер! а не web сервер.

Просто когда вы пишите "хотелки" вы должны четко представлять, последовательность обмена информацией.

В модбас инициатором соединения всегда выступает МАСТЕР для протокола modbus RTU (или КЛИЕНТ для протокола modbus TCP/IP). В данном случае мы рассматриваем протокол modbus rtu из чего следует:
все ардуины в сети будут помощниками (slave) которые, слушают, ожидают соединения от мастера. Они (slave) отвечают только в том случае если идет обращение непосредственно к ним (к нему) т.е. когда ID запроса от мастера соответствует ID slave. После этого происходит обмен информацией между мастером и помощником, либо чтение регистров (пременных), либо запись в зависимости от функции протокола модбас.

Я еще раз обращаю ваше внимание на то, что для понимания процесса обмена нужно прочитать хотя бы основы протокола modbus rtu. Можно не вникать в дебри самого протокола, но основное вы должны понять.

Почему я вам задаю вопрос зачем нужна ардуина-мастер, да потому что я не вижу и не понимаю её сущность.

Вот на мой взгляд приблизительный алгоритм работы:

У вас в сети modbus-rtu подключено (соединено) несколько ардуин-slave (2x проводная линия, витая пара с эл. интерфесом RS-485). Допустим их 3шт с ID=1, ID=2, ID=3.
Каждая из ардуин в цикле слушает и отвечает только на свой ID.
Причем в выше приведенном примере (пост №4) используются:
1. 10 регистров (переменных)
2. работают только функции 3 и 10 (что вполне хватает для нужд умного дома)

Каждая из этих ардуин-slave может выполнять различные функции, например:
- анализируя аналоговые входа измерять температуру и записывать эти значения в какой либо регистр модбас, который в последствии будет считываться мастером.
- изменять цифровые входа (для вкл. реле или тиристоров) считывая значения др. регистров, которые в свою очередь будут изменяться опять же мастером.
и т.д. (все зависит от назначения конкретной ардуины)

Мастером в этой сети служит роутер (mr3020)
- на роутере установлен WEB сервер.
- на роутере установлена программа modbus-мастер (бинарный файл).

В этом звене нужно обеспечить обмен между запросами от клиента (браузера) web-сервера и модбас-мастером.

Здесь я предполагаю несколько путей:
1. modbus-мастер может работать как CGI приложение.
Клиент-браузер периодически (через функции POST, GET) прередает CGI программе запрашиваемые или изменяемые параметры (переменные регистры) в свою очередь CGI приложение modbus-master связывается с соответствующим modbus-slave и получает или изменяет соответствующие регистры и возвращает результаты WEB клиенту.

2. modbus-мастер работает как демон (в фоне).
Он в цикле с определенной периодичностью опрашивает помщников (slave) и записывает состояние их регистров в файл данных, затем считывеет этот же файл и записывает снова в регистры slave.

При обращении к Web серверу вызывается программа (php скрипт) которая считывает этот файл данных интерпретирует и передает эти данные на web страницу клиента. При изменении каких то параметров происходит обратный процесс, php программа перезаписывает файл данных.

Ну как то так
andr128 вне форума   Ответить с цитированием
Старый 01.12.2012, 17:48   #8
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312
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
По умолчанию

Всё верно, просто я хочу поставить мегаардуину на случай выхода из строя сервера (завис например) , тогда "умный дом" всё равно будет работоспособен, в меге будут хранится те же данные что и на сервере. На сервере я планирую всё помещать в БД. В свою очередь, если зависнет мега, то после ресета она возьмёт данные из БД на сервере. Мега и сервер как бы дублируют друг друга.

Последний раз редактировалось stD; 01.12.2012 в 17:56.
stD вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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