в канпютерах, абычна, младший байт хранится по младшему адресу. (Intel, AVR и тд) Подробнее: читать за big-endian и little-endian
Еще возможно сам тройка модуль RS-485 не правильно работает.... сегодня попробую собрать микросеть из двух Ардуин .... из примера на сайте Амперки... проверю.... а то может дело было не в бобине...
И это правильно,что байты местами поменяны. Так калькулятор устроен ихний,наоборот. Не обращайтесь на Это внимание. Вычисляйте контрольную сумму,по калькулятору. Меняйте байты местами. И вставляйте в Свою программу. Дабы убедится в моей правоте. Сделайте следующее. Найдите в интернете любую модбасовскую команду с контрольной суммой. Вставьте её в онлайн калькулятор. И сверьте. Там тоже Будет контрольная сумма ,но байты поменяны местами
Все равно производителей этого устройства. давайте зажмем в угол. Сделаем следующее. Производители грешат на Вашу некорректную программную реализацию. Они Вам выдали команду с их просчитанной ими контрольной суммой. Поэтому Вам необходимо получить от них программный код,запустив который ,Вы получите положительный результат. В противном случае- выбросте на помойку их термометр.
Дайте в студию реквизиты производителя. Я с ними сам пообщаюсь.И решу Ваши проблемы. Иначе-век воли не видать. И у меня есть опыт в решении подобных проблем.Приедут и все наладят.
Разумеется. Такие штуки надо отлаживать на компьютерных эмуляторах модбаса. То бишь уарт заворачиваешь в комп на ком порт и смотришь, что приходит. А уже потом пенять на производителей и обязывать их к чему либо. Программ -эмуляторов в сети немного есть.
Начал с проверки Тройка модулей RS-485.... работают.... дальше подключил осцилограф... он правда у меня программный... в итоге не получилось посмотреть, на выходных у ребят на "внешнем" осцилографе посмотрим! Но дальше, больше.... решил проверить передачу комбинации байт с Мастера на Слэйв... и вот тут-то и начались чудеса. Приходила какая-то абракадабра. После продолжительных тренировок, выяснил, что передавая типом Char... приходит то что надо... Код (C++): Serial1.print(char(1)); Я уж обрадовался.... но дальше возникла другая проблема.... реальная зависимость при переключении режима ПЕРЕДАЧА/ПРИЕМ от delay()!!! Подобрал delay(10).... вроде и передача идет и массив не разваливается.... но опять датчик не завелся... Вообщем нужно реально смотреть на осцилографе или анализаторе.... и подкручивать delay.
Вы бы скинули ссылку на устройство, может что то понятнее бы стало. А почему не хотите попробовать что то типа библиотеки ModbusMaster ? Там можно определить функции preTransmission() и postTransmission(), которые будут включать передачу и выключать после завершения передачи последнего байта.
Я только За использование готовой Рабочей библиотеки!.... но в начале поста я как раз и описывал проблему с библиотекой ModBus (другой)... Если вы с ней работали... и у вас реально считывалось..... напишите пожалуйста как правильно ее использовать.
УРРРРааааа!!! Заработала!!!! Заработала на той библиотеке, что в начале указал... Проблема оказалась в том, что в самой библиотеке принудительно установлена скорость порта 19200. Поменял на 57600... и сразу же датчик стал отдавать значение температуры!!!
А я же теперь делал с помощью библиотеки, поэтому только указал: адрес устройства, функцию, начальный адрес регистра и длину..... а остальное библиотека сама высчитала.