Понедельник, 02 ноября 2020 17:50

Ошибка работы Modbus

Автор
Оцените материал
(2 голосов)

Что то странное твориться с моим Modbus. В сарае у кур и уток стоят датчики температуры и влажности DHT22,

а так же водонепроницаемый датчик температуры DS18b20. DHT22 измеряют температуру и влажность в помещении, а DS18b20 измеряет температуру на улице.

Датчики подключены к двум контроллерам Arduino UNO. По Modbus показания датчиков передаются на OPC-сервери далее в Simple-Scada. Так вот! До определенного времени все работало нормально, температура и влажность отображалась на мониторе компьютера. Сейчас отображается только температура на улице, а в помещении все по нулям. Шина Modbus - витая-пара без экрана. Возможно такая ситуация из-за того что я взял две перевитые жилы как А и ещё две как В, чтобы толще было. На выходных переделаю. 

Немного теории:

Принцип передачи по витой паре простой: по одной жиле подаётся сигнал, а по другой противоположный сигнал, в приёмнике стоит сумматор, который проверяет, что сумма сигналов обеих жил нулевая. Если на кабель действует помеха, то она действует на обе жилы, смещая сигнал, сумма получается ненулевая, и приёмник понимает, что передаваемый сигнал повреждён. Если жилы не перевиты, то проверка не работает. Поэтому берём кабель FTP и используем из него две перевитые между собой жилы.

Есть в Modbus большой минус — скорость обмена данными не так велика, как хотелось бы. Хотелось бы, конечно, чтобы всё работало мгновенно, но работает не совсем так. Объясню как могу просто. В Modbus всегда есть устройство-ведущий (он же master) и одно или много устройств-ведомых (они же slave). Ведомое устройство не может никак инициировать связь с ведущим. Ведущий постоянно по очереди опрашивает всех ведомых на предмет изменения их входов. Если выключатель подключен на вход модуля ввода-вывода, и мы на него нажали, то модуль никак не может сам сообщить контроллеру-мастеру о том, что изменилось состояние входа, он должен дождаться опроса контроллером состояния входов, передать в ответ состояния входов контроллеру, который уже сам увидит, что вход изменился.

Этот опрос занимает некоторое время. Мастеру надо последовательно опросить все входы всех ведомых устройств, а потом, чтобы, например, включить свет, отправить на нужное устройство команду на изменение состояния выхода. На самом деле, всё происходит быстро, но задержка может быть заметна. Чем больше ведомых устройств, тем больше задержка.

Прочитано 207 раз

Комментарии  

Микола
0 #2 Микола 04.11.2020 18:44
Все таки что то происходит. Датчики DHT22 не показывает температуру, а связь есть по Modbus. Буду искать далее.
Цитировать
Микола
0 #1 Микола 03.11.2020 23:05
Все работает! Все дело в шине, а именно в кабеле. Я взял одну пару, на А-один провод коричневый и на В-один провод светло-коричневый! А было две пары А-коричневый и светлокоричневый и В-голубой и светлоголубой.
Цитировать

Добавить комментарий


Защитный код
Обновить