Обмен данных между несколькими arduino по протоколу ModBus
Обмен данных между несколькими arduino по протоколу ModBus
Всем доброго времени суток!
У меня вот такая задача.
использую Arduino Mega2650 + W5100 по витой паре
протокол ModBus
Master TCP
Slave_1
Slave_2
Slave_3
Slave_n
Master собирает переменные со всех Slave
Это все работает, но проблема вот в чем я не могу понять как мне реализовать
получение и запись данных на мастер в переменную отправленную другим Slave`ом
То есть у меня есть данные переданные на Master с Slave_1 о состоянии насоса (включен/выключен)
Я должен иметь возможность видеть это состояние на других контроллерах (на дисплей) и по необходимости
оправить команду на вкл/выкл этого насоса с любого Slave.
Знающие люди подскажите как это реализовать.
Нужна информация только по обмену переменными.
Спасибо!
PS Если я не правильно создал тему, то прошу прощения (это мой первый пост)
У меня вот такая задача.
использую Arduino Mega2650 + W5100 по витой паре
протокол ModBus
Master TCP
Slave_1
Slave_2
Slave_3
Slave_n
Master собирает переменные со всех Slave
Это все работает, но проблема вот в чем я не могу понять как мне реализовать
получение и запись данных на мастер в переменную отправленную другим Slave`ом
То есть у меня есть данные переданные на Master с Slave_1 о состоянии насоса (включен/выключен)
Я должен иметь возможность видеть это состояние на других контроллерах (на дисплей) и по необходимости
оправить команду на вкл/выкл этого насоса с любого Slave.
Знающие люди подскажите как это реализовать.
Нужна информация только по обмену переменными.
Спасибо!
PS Если я не правильно создал тему, то прошу прощения (это мой первый пост)
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Обмен данных между несколькими arduino по протоколу ModBus
HurryUp, на мастере заведите локальную переменную в неё пишете состояние насоса, а затем считываете эту переменную в холдинг регистр мастера. Такой же регистр должен быть у всех слейвов.
Обмен данных между несколькими arduino по протоколу ModBus
Было бы классно увидеть пример в FLProg
С одним мастером и два-три слейва.
Я вроде представляю о чем идет речь, но все же.
Да и думаю не одного меня этот вопрос может посетить.
Конечно если не затруднительно для Вас.
Заранее благодарен.
Добавлено (11.07.2017, 07:59)
---------------------------------------------
И вот этот момент по подробнее
"а затем считываете эту переменную в холдинг регистр мастера. Такой же регистр должен быть у всех слейвов."
Спасибо
С одним мастером и два-три слейва.
Я вроде представляю о чем идет речь, но все же.
Да и думаю не одного меня этот вопрос может посетить.
Конечно если не затруднительно для Вас.
Заранее благодарен.
Добавлено (11.07.2017, 07:59)
---------------------------------------------
И вот этот момент по подробнее
"а затем считываете эту переменную в холдинг регистр мастера. Такой же регистр должен быть у всех слейвов."
Спасибо
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Обмен данных между несколькими arduino по протоколу ModBus
HurryUp, по позже покажу пример, сейчас компании нет под руками
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 1 раз
- Контактная информация:
Обмен данных между несколькими arduino по протоколу ModBus
Смотрите, пробуйте.
Кнопки на общиий, в проге инвертированы, т.е. не нажата - вход 1, в регистр 0.
R-Тригеры в мастере от зависаний слэйвов, возможны варианты.
Слэйвы различаются IP & ID, остальное одинаково. Настроите сами под свою сеть.
Кнопки на общиий, в проге инвертированы, т.е. не нажата - вход 1, в регистр 0.
R-Тригеры в мастере от зависаний слэйвов, возможны варианты.
Слэйвы различаются IP & ID, остальное одинаково. Настроите сами под свою сеть.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 1 раз
- Контактная информация:
Обмен данных между несколькими arduino по протоколу ModBus
В предыдущем посте насос на мастере, теперь на 1 слэйве.
Главное - уловите идею....
Добавлено (11.07.2017, 11:39)
---------------------------------------------
Одновибраторы для защиты от зависаний при обрыве связи с каким-нибудь слэйвом, если он был в этот момент в 1. Я не знаю, какие значения остаются в Меге ТСР регистрах при потере связи - старые или обнуляются.
Отличия в проектах - во втором варианте при "связи хана" - локальное управление остаётся.
Главное - уловите идею....
Добавлено (11.07.2017, 11:39)
---------------------------------------------
Одновибраторы для защиты от зависаний при обрыве связи с каким-нибудь слэйвом, если он был в этот момент в 1. Я не знаю, какие значения остаются в Меге ТСР регистрах при потере связи - старые или обнуляются.
Отличия в проектах - во втором варианте при "связи хана" - локальное управление остаётся.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Обмен данных между несколькими arduino по протоколу ModBus
Sancho, спасибо!
Уже что-то проясняется. Хотя тема интересная и я далеко не все еще понял.
Буду рад если эту тему более подробно развернут, хотя твои примеры я посмотрел и мысль мне понятна.
Что бы мне посоветовали прочитать по данному направлению.
Спасибо
Добавлено (11.07.2017, 13:59)
---------------------------------------------
starshoy81, спасибо!
Буду рад получить информацию и от тебя.
Спасибо
Добавлено (11.07.2017, 15:15)
---------------------------------------------
И еще есть ли разница TCP и RTU с точки зрения: скорость передачи данных, стабильности, ограничения по количеству переменных?
Если я правильно понимаю, то RTU не более 32 устройств, не более 1200 м
TCP ограничение только в наличии кабеля UTP (витой пары) ?
А еще какая разница для проекта в деревне с множеством контроллеров (Mastet и 8 Slave) ?
Спасибо.
PS Если вопрос не особо умный, то извините.
Уже что-то проясняется. Хотя тема интересная и я далеко не все еще понял.
Буду рад если эту тему более подробно развернут, хотя твои примеры я посмотрел и мысль мне понятна.
Что бы мне посоветовали прочитать по данному направлению.
Спасибо
Добавлено (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
Скрость - разница СУЩЕСТВЕННАЯ!!!HurryUp писал(а):И еще есть ли разница TCP и RTU с точки зрения: скорость передачи данных, стабильности, ограничения по количеству переменных?
Стабильность - прямые руки при монтаже(RTU), наличие промежуточных свичей, переходов между сетями оптика-кабель(ТСР).
Количество переменных -ограничено размером выделенной для этого памяти устройств.
32 на сектор, иногда меньше, зависит от конструкции 485 в устройстве, потом повторитель, плюсуем дальше.HurryUp писал(а):Если я правильно понимаю, то RTU не более 32 устройств, не более 1200 м
При необходимости кладём RTU на ТСР IP(с помощью шлюза, не меняя протокол) - гоняем по оптике/кабелю.
Есть конверторы протоколов, которые образуют мост RTU<->TCP.
Добавлено (11.07.2017, 15:55)
---------------------------------------------
Цена драйвера 485/ethernet, важность скорости получения данных(ТСР можно опрашивать чаще 1сек, хотя эффект 50/50), ethernet(lan) сеть может быть готова - создаёшь свою с другими IP...HurryUp писал(а):А еще какая разница для проекта в деревне с множеством контроллеров (Mastet и 8 Slave) ?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Обмен данных между несколькими arduino по протоколу ModBus
Sancho, спасибо.
То есть скорость по TCP выше чем в RTU ?
Значит имеет смысл в проектах со множеством переменных использовать
шилд W5100, а не модуль MAX485 (TTL в RS485)
Я правильно понимаю ?
То есть скорость по TCP выше чем в RTU ?
Значит имеет смысл в проектах со множеством переменных использовать
шилд W5100, а не модуль MAX485 (TTL в RS485)
Я правильно понимаю ?
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 1 раз
- Контактная информация:
Обмен данных между несколькими arduino по протоколу ModBus
Скорость и множество переменных - не обязательно связанные между собой критерии.HurryUp писал(а):То есть скорость по TCP выше чем в RTU ?Значит имеет смысл в проектах со множеством переменных использовать шилд W5100, а не модуль MAX485 (TTL в RS485)
Я более чем уверен, что спустя две недели ты вообще забудешь какая скорость, какой тип протокола, особенно при RTU 115200.
В системе важно правильно распределить слэйв узлы.
Например, на одном из них висит датчик наружной температуры, которая(температура) передаётся постредством мастера трём другим для их алгоритмов. В данном случае скорость, в плане быстроты, не важна, т.к. не меняется быстро, а если вдруг данные не будут приходить, будет использовано последнее принятое значение..
Необходимо, по мере возможности, стараться распределить задачи в формате - один узел - максимум законченых алгоритмов с входами выходами, чтобы при падении сети они продолжили полноценно выполнять свои задачи.
Надёжность - вот главный критерий любой системы.
ИМХО.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Обмен данных между несколькими arduino по протоколу ModBus
Sancho, спасибо за развернутый ответ.
А если с мастера всем слейвам передавать по модбасу время с часов установленных на мастере,
по в какую переменную писать правильнее в: Input Registers или Holding Registers?
И правильно ли будет передать с мастера на слейв (например каждую секунду) время, а затем при каждом событии с слейва на мастер вернуть событие в связке с временем и писать в лог файл на SD?
Или не заморачиваться и "плюсовать" время к каждому событию на мастере, а не гонять информацию о времени туда-сюда?
А если с мастера всем слейвам передавать по модбасу время с часов установленных на мастере,
по в какую переменную писать правильнее в: Input Registers или Holding Registers?
И правильно ли будет передать с мастера на слейв (например каждую секунду) время, а затем при каждом событии с слейва на мастер вернуть событие в связке с временем и писать в лог файл на SD?
Или не заморачиваться и "плюсовать" время к каждому событию на мастере, а не гонять информацию о времени туда-сюда?
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 1 раз
- Контактная информация:
Обмен данных между несколькими arduino по протоколу ModBus
Вот рациональное мышление при решении задачиHurryUp писал(а):Или не заморачиваться и "плюсовать" время к каждому событию на мастере, а не гонять информацию о времени туда-сюда?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Обмен данных между несколькими arduino по протоколу ModBus
Общая идея такая:HurryUp писал(а):Буду рад получить информацию и от тебя.
На слейве1 включение насоса пишется в дискретинпут регистр, этот регистр читается мастером и пишется в локальную переменную на мастере "состояние насоса". Далее мастер читает эту переменную и пишет её значение в койл флаг слейва2. Слейв2, в свою очередь, получая от мастера состояние этого койл флага выполняет какую-либо операцию.
Далее в обратную сторону - слейв2 читает состояние своей "кнопки" и пишет его в дискретинпут, мастер, читая этот регистр из слейва2, пишет его в локальную переменную "запрос на запуск", далее мастер читает эту локальную переменную и пишет её состояние в койл флаг слейва1. Слейв1 получает от мастера состояние этого койл флага включает или выключает насос.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось starshoy81 13 июл 2017, 13:50, всего редактировалось 1 раз.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость