Обмен данных между несколькими arduino по протоколу ModBus

Использование протокола Modbus
Ответить
HurryUp
Рядовой
Сообщения: 9
Зарегистрирован: 10 июл 2017, 14:01

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение HurryUp »

Всем доброго времени суток!
У меня вот такая задача.

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

протокол ModBus

Master TCP

Slave_1
Slave_2
Slave_3

Slave_n

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

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

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

Спасибо!

PS Если я не правильно создал тему, то прошу прощения (это мой первый пост)
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение starshoy81 »

HurryUp,  на мастере заведите локальную переменную в неё пишете состояние насоса, а затем считываете эту переменную в холдинг регистр мастера. Такой же регистр должен быть у всех слейвов.
HurryUp
Рядовой
Сообщения: 9
Зарегистрирован: 10 июл 2017, 14:01

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение HurryUp »

Было бы классно увидеть пример в FLProg

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

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

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

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

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

Спасибо
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение starshoy81 »

HurryUp,  по позже покажу пример, сейчас компании нет под руками
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение Sancho »

Смотрите, пробуйте.
Кнопки на общиий, в проге инвертированы, т.е. не нажата - вход 1, в регистр 0.
R-Тригеры в мастере от зависаний слэйвов, возможны варианты.
Слэйвы различаются IP & ID, остальное одинаково. Настроите сами под свою сеть.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение Sancho »

В предыдущем посте насос на мастере, теперь на 1 слэйве.
Главное - уловите идею....

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

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение HurryUp »

Sancho, спасибо!

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

Спасибо

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

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

Спасибо

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

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

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

Спасибо.

PS Если вопрос не особо умный, то извините.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение Sancho »

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...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
HurryUp
Рядовой
Сообщения: 9
Зарегистрирован: 10 июл 2017, 14:01

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение HurryUp »

Sancho, спасибо.

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

Значит имеет смысл в проектах со множеством переменных использовать
шилд W5100, а не модуль MAX485 (TTL в RS485)
Я правильно понимаю ?
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение Sancho »

HurryUp писал(а):То есть скорость по TCP выше чем в RTU ?Значит имеет смысл в проектах со множеством переменных использовать шилд W5100, а не модуль MAX485 (TTL в RS485)
Скорость и множество переменных - не обязательно связанные между собой критерии.
Я более чем уверен, что спустя две недели ты вообще забудешь какая скорость, какой тип протокола, особенно при RTU 115200.
В системе важно правильно распределить слэйв узлы.
Например, на одном из них висит датчик наружной температуры, которая(температура) передаётся постредством мастера трём другим для их алгоритмов. В данном случае скорость, в плане быстроты, не важна, т.к. не меняется быстро, а если вдруг данные не будут приходить, будет использовано последнее принятое значение..
Необходимо, по мере возможности, стараться распределить задачи в формате - один узел - максимум законченых алгоритмов с входами выходами, чтобы при падении сети они продолжили полноценно выполнять свои задачи.
Надёжность - вот главный критерий любой системы.
ИМХО.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
HurryUp
Рядовой
Сообщения: 9
Зарегистрирован: 10 июл 2017, 14:01

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение HurryUp »

Sancho, спасибо за развернутый ответ.

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

И правильно ли будет передать с мастера на слейв (например каждую секунду) время, а затем при каждом событии с слейва на мастер вернуть событие в связке с временем и писать в лог файл на SD?
Или не заморачиваться и "плюсовать" время к каждому событию на мастере, а не гонять информацию о времени туда-сюда?
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение Sancho »

HurryUp писал(а):Или не заморачиваться и "плюсовать" время к каждому событию на мастере, а не гонять информацию о времени туда-сюда?
Вот рациональное мышление при решении задачи
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

Обмен данных между несколькими arduino по протоколу ModBus

Сообщение starshoy81 »

HurryUp писал(а):Буду рад получить информацию и от тебя.
Общая идея такая:

На слейве1 включение насоса пишется в дискретинпут регистр, этот регистр читается мастером и пишется в локальную переменную на мастере "состояние насоса". Далее мастер читает эту переменную и пишет её значение в койл флаг слейва2. Слейв2, в свою очередь, получая от мастера состояние этого койл флага выполняет какую-либо операцию.
Далее в обратную сторону - слейв2 читает состояние своей "кнопки" и пишет его в дискретинпут, мастер, читая этот регистр из слейва2, пишет его в локальную переменную "запрос на запуск", далее мастер читает эту локальную переменную и пишет её состояние в койл флаг слейва1. Слейв1 получает от мастера состояние этого койл флага включает или выключает насос.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось starshoy81 13 июл 2017, 13:50, всего редактировалось 1 раз.
Ответить

Вернуться в «Modbus»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость