ModbusRTU
- Войдите на сайт для отправки комментариев
Втр, 08/02/2022 - 18:41
Здравствуйте. Прошу помощи. Пытаюсь подружить 16-ти канальный мультиплексор с Arduino Slave по ModbusRTU(RS485);
Суть в том чтобы выводить в SIG на мультиплексоре только тот аналоговый вход, номер которого пришел от Мастера по модбас.
Всего будет 2 мультиплексора, но я пытаюсь подружить пока 1.
Вот код который получился:
#include<ModbusRtu.h> Modbus bus; uint16_t modbus_array[4]; int multi1; int multi2; #define EN 3 #define S0 4 #define S1 5 #define S2 6 #define S3 7 void setup() { Serial.begin(9600); bus = Modbus(100,1,10); bus.begin(9600); pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); digitalWrite(S0, LOW); digitalWrite(S1, LOW); digitalWrite(S2, LOW); digitalWrite(S3, LOW); pinMode(EN, OUTPUT); digitalWrite(EN, LOW); } void loop() { bus.poll(modbus_array,sizeof(modbus_array)/sizeof(modbus_array[0])); multi1 = modbus_array[2]; Serial.print("multiplexor1"); Serial.print("-"); Serial.println(multi1); SetMuxAddress(multi1); delay(100); multi2 = modbus_array[3]; Serial.print("multiplexor2"); Serial.print("-"); Serial.println(multi2); delay(100); } void SetMuxAddress(int address) { digitalWrite(S0, (address >> 0) & 0x1); digitalWrite(S1, (address >> 1) & 0x1); digitalWrite(S2, (address >> 2) & 0x1); }
В порт ничего не выводится. Подключено все паем - правильно!
Может дело в том что ваш порт уже используется?
Я использую Arduino Mega. RS подключено к RX0.TX0; Вы про это? Нужно перепаять на RX1 и TX1? Если да, то как тогда поменять код прошивки под RX1, TX1?
Ляпнул :)
А можете рассказать, что у вас в 15 строке за такое..... ?
Инициализируем подключение указываем адресс, по мему режим и пин подключения.
У меня подключен Rs - так:
AB-AB
DI-TX
DE-D10
RE-D10
VCC-VCC
GND-GND
В Сериал выводит:
Но ничего не приходит.
Не знаю как добавить условие обработки запроса модбас и вывода в терминал, только когда что то пришло.
Не знаю как добавить условие обработки запроса модбас и вывода в терминал, только когда что то пришло.
функция bus.poll() имеет возвращаемое значение, при успешном приеме пакета это значение, по-моему, должно быть > 4 . посмотрите в описании.
Да. все верно.
Попробовал использовать другой пример, но видимо увы... я слаб для таких примеров...
Вот чего добился.
В сериал выводится : "нет информации".
Что сделано помимо?
В библиотеке ModbusRtu Изменил следующие строки:
на
И
на
Комментарий по последней замене:
У ардуино Мега RX - 18; TX-19;
Но увы.
В библиотеке ничего менять не нужно.
RX и TX не перепутали местами?
Вообще не понял, что написали.
ТС, похоже, мировой чемпион по генерации чуши.
ТС, похоже, мировой чемпион по генерации чуши.
Есть такое.
Венул все в исходное состояние - перепаял RO - RX(0), DI-TX(1);
Скетч:
Но теперь появилась проблема. Начинает сильно греться чип. В прошлый раз тоже самое было. Поэтому и менял модуль. Теперь и этот начал греться. При том я с ним провозился час примерно. И он начал греться! Судя по всему придется ехать завтра за новым.
Каждый час новый модуль?
Ну Вы уж закупите хотя бы штук 720, чтобы на месяц хватило.
Каждый час новый модуль?
Ну Вы уж закупите хотя бы штук 720, чтобы на месяц хватило.
Сарказм - дело хорошее.
Только вот не могу понять почему горят эти модули! Подключено все напрямую. A(RS485) - A(Устройство); B(RS485) - B(Устройство); Земли не соединял! Неужели паразитное питание?!
У меня тоже один китайский счетчик работал-работал по 485 через модуль для ардуины, а потом как херакнул что-то в линию, модуль как нагрелся... и потом стал чушь выдавать ардуине.
Это же не промышленные изделия, а так - для учебы.
Полностью согласен. Но мне даже в учебном варианте не справиться =)
Acuma, так куда в итоге у вас подключен Модбас на ардуине - к каким пинам? Если к обычному Сериал - то не ясно, где вы сообщаете библиотеке, что надо использовать этот порт?
Acuma, так куда в итоге у вас подключен Модбас на ардуине - к каким пинам? Если к обычному Сериал - то не ясно, где вы сообщаете библиотеке, что надо использовать этот порт?
Использую Arduino Mega.
Подключено все так:
Маршрутизатор A - RS485 A;
Маршрутизатор B - RS485 B;
RS485 RO - Arduino RX(0);
RS485 DI - ArduinoTX(1);
RS485 DE и RE - Arduino D10;
RS485 VCC - Arduino 5v;
RS485 GND - Arduino GND;
В прошивке подключение к сериалу идет командой:
В библиотеке эта команда, как я понял, расписана так:
Дак вам же сказали - перенесите 485 с Serial на другой порт. Например, на Serial2. И проверьте RX-TX у Serial2 - бывает, что на меге с алиэкспресса подписаны неправильно входы/выходы.
Библиотеку вообще трогать не надо. У тысяч людей она работает нормально, а у вас порченная что ли?
Спасибо. Буду пробовать.
ни в библитеке, ни в примерах нет такого описания обьекта:
откуда вы это взяли?
подробнее - на амперке
Дак вам же сказали - перенесите 485 с Serial на другой порт. Например, на Serial2. И проверьте RX-TX у Serial2 - бывает, что на меге с алиэкспресса подписаны неправильно входы/выходы.
Библиотеку вообще трогать не надо. У тысяч людей она работает нормально, а у вас порченная что ли?
в первую очередь ему надо разобраться с конструктором, у него сейчас в коде чушь написана. А там может и не придется Сериал менять, если все сделать правильно.