![]() |
|
|
|
|
#1 |
|
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1606 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Мои эксперименты с Modbus
В arduino залита следующая программа: Код:
/*
Test Modbus RTU - Arduino
Для простоты и уменьшения потребления памяти
поддерживается только две следующие функции Modbus:
- read holding registers (0x03)
- write multiple registers (0x10)
*/
#include <SoftwareSerial.h>
#include <Modbusino.h>
const int RL0 = 22;
const int RL1 = 24;
const int RL2 = 26;
const int RL3 = 28;
const int rl_arr[] = {RL0,RL1,RL2,RL3};
const int regs = 10; // количество регистров
const int ID_slave = 25;
uint16_t tab_reg[regs]; //задаем массив регистров
// Инициализация SLAVE, идентификатор (адрес) в сети ID = 25
ModbusinoSlave modbusino_slave(ID_slave);
// на цифр. выходы сразу записываем значение регистров
// любое значение > 0 это HIGH, 0 - LOW
void SetRelay() {
int i;
for (i = 0; i < 4; i++) {
digitalWrite(rl_arr[i], tab_reg[i]);
}
}
void setup() {
modbusino_slave.setup(115200);
pinMode(RL0, OUTPUT); // установка цифровых вх/вых в режим выхода
pinMode(RL1, OUTPUT);
pinMode(RL2, OUTPUT);
pinMode(RL3, OUTPUT);
}
void loop() {
modbusino_slave.loop(tab_reg, regs);
SetRelay();
tab_reg[9] = analogRead(A0); //запись аналогового значения в 9-ый регистр
}
здесь я щелкаю реле а здесь читаю аналоговый вход На время эксперимента я специально подключился с помощью стороннего преобразователя TTL-USB к serial порту RX0, TX0 т.к. планирую сделать TTL-RS485 преобразователь на MAX485. Чтобы все было "по взрослому" ![]() вот планируемая схема ttl-rs485.zip Последний раз редактировалось andr128; 17.12.2012 в 05:50. |
|
|
|
|
|
#2 |
|
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Савсем не могу понять как это будет работать!
Вот к примеру у меня дома на каждое помещение стоит по ардуине. Прихожая, ванна, кухня, две комнаты. Итого пять штук. Это к примеру!!! В прихожей стоит мегаардуина, она будет главной и подключена к домашнему серверу. Сначала думал сервером будет роутер, но потом решил что будет роутер, а за ним полноценный комп-сервер, формфактор пока неважен (ноутбук например), просто хочу чтоб в прихожей на стене был монитор с тачскрином. На нём будет включаться/отключаться сигнализация и выводится всякие данные. Также вся инфа и управление будет доступна через инет (web-браузер), чтоб можно было и с андройдтелефона и с айпада всем рулить откуда угодно.Так же планируется пара IP-вебкамер, и в прихожей камера напрямую к серверу подключенная. В общем здесь всё просто, соединить мегаардуину с сервером, написать веб интерфейс, настроить apache. GSM-сигнализация, подключается к мегаардуине. В случае отключения электроэнергии ноутбуку-серверу это не повредит, равно как и мегаардуине подключённой к нему по USB, вот для остальных ардуин и GSM нужно делать автономное питание, какой-то аккумулятор. Я немного отвлёкся от протокола, но с другой стороны от части из организации железа вытекает понимание как всё это связать. Ардуины размещённые в разных помещениях следят за разными датчиками, показаниями и управляют устройствами (свет, жалюзи, медия, розетки и ещё чёрте что). Квартира у меня сейчас находится в затяжной стадии ремонта, посему с проводами проблем нет! Но вот как проложить эти самые провода? А больше всего интересует как все ардуины будут общаться меж собой по RS-485? Вот предположим все они находятся в режиме приёма. Выключатель на кухне ( к примеру инфракрасный ) http://cyber-place.ru/showthread.php?t=237 ,работает через "кухонную ардуину" , он дал сигнал и свет зажёгся. По идее "кухонная ардуина" должна сообщить об этом основной мегаардуине. (тут наверно ещё стоит добавить базу MySQL на сервер, чтоб мегаардуина записала в неё что свет на кухне включен). (хотя всё можно и в мегаардуине хранить без базы, но с базой мне кажется лучше, значения никуда не потеряются в случае чего.....) А "ванная ардуина" в этот момент пытается сообщить мегаардуине что протечка воды. И в тот же момент, жена сидя в комнате, нажимает кнопку на айпаде выключить свет. Этот сигнал идёт на сервер, с сервера на мегаардуину, а та в свою очередь пытается отправить сигнал на "комнатную ардуину", чтоб та выключила свет. После чего "комнатная ардуина" выключая свет пытается отправить сигнал на мегааардуину о том , что она выключила свет, далее мегаардуина должна сообщить серверу что, свет в комнате погашен и чтоб сервер отправил сигнал об этом жене на айпад! Тут тоже получается , что страница должна постоянно обновляться или как-то по другому? А я в тот же момент со своего андройдфона, выключаю свет в другой комнате, после чего произойти должно тоже что и у жены на айпаде. Конечно некоторые действия могут подождать чутка, но другие требуют оперативности! И начинается такая чахорда от которой у меня голова кругом идёт))))) правда щас уже 7 утра , а я ещё не спал))))) Вопщем с этим RS-485 салат какой-то........))))) И это всего лишь маленькая-маленькая часть функций "умного дома" )))))))) Извиняйте за ошибки, спать охота.....)))) Последний раз редактировалось stD; 23.11.2012 в 08:12. |
|
|
|
|
|
#3 |
|
Senior Member
|
вот честно говоря все тоже самое у меня в голове сейчас происходит
|
|
|
|
![]() |
| Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|