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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.11.2012, 05:17   #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
По умолчанию

Цитата:
3. Главный ПК работает в режиме - мастер. По его инициативе происходит периодический опрос и управление помощниками. Он в цикле перебирает всех помощников сохраняет переменные их состояния в свою базу (таблицу переменных), а также по инициативе пользователя либо по алгоритму меняет состояние выходов помощников т.е. управляет ими.
Это и есть протокол Modbus ?

Получается ардуины должны работать в режиме "помощник", а главный должен непрерывно опрашивать их. А как же тогда они будут отвечать?
...............
Или нужно так:
Главный отправляет ардуине №1 , в запросе: стартовый байт > ID-устройства > разрешение на отправку данных и переключается на приём, принимает данные от ардуины.
Что дальше? Отправлять запрос на следующую ардуину или отправлять инфу принятую от первой ардуины на сервер?
Или:
Главный отправляет ардуине №1 , какую-то инфу с сервера: стартовый байт > ID-устройства > инфа.
Что дальше?

Последний раз редактировалось stD; 24.11.2012 в 05:30.
stD вне форума   Ответить с цитированием
Старый 24.11.2012, 11:19   #2
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1606
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 Посмотреть сообщение
Это и есть протокол Modbus ?
В принципе да, это и есть протокол Modbus. Естественно всю "кухню" я не расписывал. Контрольные суммы, сам формат кадра и прочую низкоуровневую фигню. Зачем выдумывать свой велосипед, если уже есть все готовое..

Цитата:
Получается ардуины должны работать в режиме "помощник", а главный должен непрерывно опрашивать их. А как же тогда они будут отвечать?
...
Для того чтобы понять механизм обмена вам нужно почитать как работает этот протокол. У Modbus есть различные функции чтения и записи т.н. регистров. При использовании готовых библиотек этот обмен происходит автоматом и как бы скрыт явно.

Для начала посмотрите в этой ветке пост №4.
В основном цикле вызывается функция, которая отвечат за механизм обмена между мастером и помощником. Естественно она обслуживает только запросы на свой ID.
Код:
// Инициализация SLAVE, идентификатор в сети ID_slave = 25
ModbusinoSlave modbusino_slave(ID_slave)
Код:
...
modbusino_slave.loop(tab_reg, regs);
...
Под регистры отводится массив переменных, это данные которые вы можете интерпретировать как хотите, может это будет значение температуры, а может состояние реле.

В этом примере я (задал массив) использовал лишь 10 регистров
Код:
uint16_t tab_reg[regs]; //задаем массив из 10-и 16 битовых значений (регистров)
Мы только лишь читаем и пишем в нужные нам регистры, а сам обмен происходит как бы автоматом. И нам не нужно уже беспокоится о низкоуровневых операциях. На то она и библиотека , чтобы облегчить нам жизнь. При желании механизм ее работы можно посмотреть в исходниках.

Я лишь кратко упоминал, что мастером нужно использовать роутер либо компьютер. Здесь есть некоторые "трудности" - нужно компилировать программу-демона под роутер или ПК, который будет управлять ардуинами. Я склоняюсь к роутеру. В принципе я уже прошел этот путь (компиляции программ). Выше я писал, что есть уже библиотеки ModBus под наш роутер (OpenWrt). Почему я выбираю роутер, да потому что это автономное устройство с достаточными ресурсами. Которое может работать сутками, потребляет мало эл.энергии, к которому можно подключиться по сети как угодно (хоть по Wi-Fi, хоть по Ethernet) и разумеется через интернет, на нем можно установить Web сервер и управлять нашими ардуинами в сети т.е. нашим умным домом.

А выдумывать свой протокол.. не это не по мне.

Последний раз редактировалось andr128; 24.11.2012 в 21:34.
andr128 вне форума   Ответить с цитированием
Старый 24.11.2012, 22:59   #3
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   #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
По умолчанию

Есть ещё одна библиотека <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   #5
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1606
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   #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
По умолчанию

Я хочу чтоб мастер отправлял данные ведомым, слушал от них ответ и общался с сервером.
stD вне форума   Ответить с цитированием
Старый 26.11.2012, 17:37   #7
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1606
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   #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
По умолчанию

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

Как же без сервера, без него никак нельзя! )))))
stD вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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