FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Понедельник, 20.11.2017, 16:26
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: support, Сергей, Олег, Anydy 
Форум » Основной » Спросить у знатоков » Обмен данных между несколькими arduino по протоколу ModBus (Вопрос по двустор. обмену переменными с несколькими ардуино)
Обмен данных между несколькими arduino по протоколу ModBus
HurryUp Дата: Понедельник, 10.07.2017, 14:09 | Сообщение # 1
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Всем доброго времени суток!
У меня вот такая задача.

использую Arduino Mega2650 + W5100 по витой паре

протокол ModBus

Master TCP

Slave_1
Slave_2
Slave_3

Slave_n

Master собирает переменные со всех Slave 

Это все работает, но проблема вот в чем я не могу понять как мне реализовать
получение и запись данных на мастер в переменную отправленную другим Slave`ом
То есть у меня есть данные переданные на Master с Slave_1 о состоянии насоса (включен/выключен)
Я должен иметь возможность видеть это состояние на других контроллерах (на дисплей) и по необходимости
оправить команду на вкл/выкл этого насоса с любого Slave.

Знающие люди подскажите как это реализовать.
Нужна информация только по обмену переменными.

Спасибо!

PS Если я не правильно создал тему, то прошу прощения (это мой первый пост)
 
starshoy81 Дата: Вторник, 11.07.2017, 00:03 | Сообщение # 2
Подполковник
Группа: Проверенные
Сообщений: 217
Награды: 1
Репутация: 0
Статус: Offline
HurryUp,  на мастере заведите локальную переменную в неё пишете состояние насоса, а затем считываете эту переменную в холдинг регистр мастера. Такой же регистр должен быть у всех слейвов.
 
HurryUp Дата: Вторник, 11.07.2017, 07:59 | Сообщение # 3
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Было бы классно увидеть пример в FLProg

С одним мастером и два-три слейва.
Я вроде представляю о чем идет речь, но все же.
Да и думаю не одного меня этот вопрос может посетить.

Конечно если не затруднительно для Вас.

Заранее благодарен.

Добавлено (11.07.2017, 07:59)
---------------------------------------------
И вот этот момент по подробнее

"а затем считываете эту переменную в холдинг регистр мастера. Такой же регистр должен быть у всех слейвов."

Спасибо

 
starshoy81 Дата: Вторник, 11.07.2017, 11:10 | Сообщение # 4
Подполковник
Группа: Проверенные
Сообщений: 217
Награды: 1
Репутация: 0
Статус: Offline
HurryUp,  по позже покажу пример, сейчас компании нет под руками
 
Sancho Дата: Вторник, 11.07.2017, 11:15 | Сообщение # 5
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
Смотрите, пробуйте.
Кнопки на общиий, в проге инвертированы, т.е. не нажата - вход 1, в регистр 0.
R-Тригеры в мастере от зависаний слэйвов, возможны варианты.
Слэйвы различаются IP & ID, остальное одинаково. Настроите сами под свою сеть.
Прикрепления: Mega_2560_maste.flp(134Kb) · Mega_2560_slave.flp(75Kb)


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
Sancho Дата: Вторник, 11.07.2017, 11:39 | Сообщение # 6
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
В предыдущем посте насос на мастере, теперь на 1 слэйве.
Главное - уловите идею....

Добавлено (11.07.2017, 11:39)
---------------------------------------------
Одновибраторы для защиты от зависаний при обрыве связи с каким-нибудь слэйвом, если он был в этот момент в 1. Я не знаю, какие значения остаются в Меге ТСР регистрах при потере связи - старые или обнуляются.
Отличия в проектах - во втором варианте при "связи хана" - локальное управление остаётся.

Прикрепления: 7668398.flp(120Kb) · 3773548.flp(103Kb) · 5908084.flp(76Kb)


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
HurryUp Дата: Вторник, 11.07.2017, 15:15 | Сообщение # 7
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Sancho, спасибо!

Уже что-то проясняется. Хотя тема интересная и я далеко не все еще понял.
Буду рад если эту тему более подробно развернут, хотя твои примеры я посмотрел и мысль мне понятна.
Что бы мне посоветовали прочитать по данному направлению.

Спасибо

Добавлено (11.07.2017, 13:59)
---------------------------------------------
starshoy81, спасибо!

Буду рад получить информацию и от тебя.

Спасибо

Добавлено (11.07.2017, 15:15)
---------------------------------------------
И еще есть ли разница TCP и RTU с точки зрения: скорость передачи данных, стабильности, ограничения по количеству переменных?

Если я правильно понимаю, то RTU не более 32 устройств, не более 1200 м
                                               TCP ограничение только в наличии кабеля UTP (витой пары) ?

А еще какая разница для проекта в деревне с множеством контроллеров (Mastet и 8 Slave) ?

Спасибо.

PS Если вопрос не особо умный, то извините.

 
Sancho Дата: Вторник, 11.07.2017, 15:55 | Сообщение # 8
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
Цитата HurryUp ()
И еще есть ли разница TCP и RTU с точки зрения: скорость передачи данных, стабильности, ограничения по количеству переменных?
Скрость - разница СУЩЕСТВЕННАЯ!!!
Стабильность - прямые руки при монтаже(RTU), наличие промежуточных свичей, переходов между сетями оптика-кабель(ТСР).
Количество переменных -ограничено размером выделенной для этого памяти устройств.
Цитата HurryUp ()
Если я правильно понимаю, то RTU не более 32 устройств, не более 1200 м
32 на сектор, иногда меньше, зависит от конструкции 485 в устройстве, потом повторитель, плюсуем дальше.
При необходимости кладём RTU на ТСР IP(с помощью шлюза, не меняя протокол) - гоняем по оптике/кабелю.
Есть конверторы протоколов, которые образуют мост RTU<->TCP.

Добавлено (11.07.2017, 15:55)
---------------------------------------------

Цитата HurryUp ()
А еще какая разница для проекта в деревне с множеством контроллеров (Mastet и 8 Slave) ?
Цена драйвера 485/ethernet, важность скорости получения данных(ТСР можно опрашивать чаще 1сек, хотя эффект 50/50),  ethernet(lan) сеть может быть готова - создаёшь свою с другими IP...


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
HurryUp Дата: Вторник, 11.07.2017, 15:59 | Сообщение # 9
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Sancho, спасибо.

То есть скорость по TCP выше чем в RTU ?

Значит имеет смысл в проектах со множеством переменных использовать
шилд W5100, а не модуль MAX485 (TTL в RS485)
Я правильно понимаю ?
 
Sancho Дата: Вторник, 11.07.2017, 16:47 | Сообщение # 10
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
Цитата HurryUp ()
То есть скорость по TCP выше чем в RTU ?Значит имеет смысл в проектах со множеством переменных использовать шилд W5100, а не модуль MAX485 (TTL в RS485)
Скорость и множество переменных - не обязательно связанные между собой критерии.
Я более чем уверен, что спустя две недели ты вообще забудешь какая скорость, какой тип протокола, особенно при RTU 115200.
В системе важно правильно распределить слэйв узлы.
Например, на одном из них висит датчик наружной температуры, которая(температура) передаётся постредством мастера трём другим для их алгоритмов. В данном случае скорость, в плане быстроты, не важна, т.к. не меняется быстро, а если вдруг данные не будут приходить, будет использовано последнее принятое значение..
Необходимо, по мере возможности, стараться распределить задачи в формате - один узел - максимум законченых алгоритмов с входами выходами, чтобы при падении сети они продолжили полноценно выполнять свои задачи.
Надёжность - вот главный критерий любой системы.
ИМХО.


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
HurryUp Дата: Среда, 12.07.2017, 08:40 | Сообщение # 11
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Sancho, спасибо за развернутый ответ.

А если с мастера всем слейвам передавать по модбасу время с часов установленных на мастере,
по в какую переменную писать правильнее в: Input Registers или Holding Registers?

И правильно ли будет передать с мастера на слейв (например каждую секунду) время, а затем при каждом событии с слейва на мастер вернуть событие в связке с временем и писать в лог файл на SD?
Или не заморачиваться и "плюсовать" время к каждому событию на мастере, а не гонять информацию о времени туда-сюда?
 
Sancho Дата: Среда, 12.07.2017, 11:24 | Сообщение # 12
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
Цитата HurryUp ()
Или не заморачиваться и "плюсовать" время к каждому событию на мастере, а не гонять информацию о времени туда-сюда?
Вот рациональное мышление при решении задачи smile


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
starshoy81 Дата: Четверг, 13.07.2017, 13:46 | Сообщение # 13
Подполковник
Группа: Проверенные
Сообщений: 217
Награды: 1
Репутация: 0
Статус: Offline
Цитата HurryUp ()
Буду рад получить информацию и от тебя.

Общая идея такая:

На слейве1 включение насоса пишется в дискретинпут регистр, этот регистр читается мастером и пишется в локальную переменную на мастере "состояние насоса". Далее мастер читает эту переменную и пишет её значение в койл флаг слейва2. Слейв2, в свою очередь, получая от мастера состояние этого койл флага выполняет какую-либо операцию.
Далее в обратную сторону - слейв2 читает состояние своей "кнопки" и пишет его в дискретинпут, мастер, читая этот регистр из слейва2, пишет его в локальную переменную "запрос на запуск", далее мастер читает эту локальную переменную и пишет её состояние в койл флаг слейва1. Слейв1 получает от мастера состояние этого койл флага включает или выключает насос.
Прикрепления: 8170792.png(63Kb) · 3308720.png(47Kb) · 2900368.png(50Kb)


Сообщение отредактировал starshoy81 - Четверг, 13.07.2017, 13:50
 
Форум » Основной » Спросить у знатоков » Обмен данных между несколькими arduino по протоколу ModBus (Вопрос по двустор. обмену переменными с несколькими ардуино)
Страница 1 из 11
Поиск:

FLProg © 2017
Яндекс.Метрика