ModBus Master

Тема в разделе "Arduino & Shields", создана пользователем DLS74, 2 июн 2019.

  1. DetSimen

    DetSimen Guest

    в канпютерах, абычна, младший байт хранится по младшему адресу. (Intel, AVR и тд)
    Подробнее: читать за big-endian и little-endian
     
  2. DLS74

    DLS74 Гик

    Еще возможно сам тройка модуль RS-485 не правильно работает.... сегодня попробую собрать микросеть из двух Ардуин .... из примера на сайте Амперки... проверю.... а то может дело было не в бобине...
     
  3. parovoZZ

    parovoZZ Гуру

    Такая же дурь и в IP, ARP и прочих тырнетах)
     
  4. DetSimen

    DetSimen Guest

    шта.jpg
     
  5. parovoZZ

    parovoZZ Гуру

    ты ваще капец какой не модный модно так
    шта.png
     
  6. znamen

    znamen Guest

    И это правильно,что байты местами поменяны. Так калькулятор устроен ихний,наоборот. Не обращайтесь на
    Это внимание. Вычисляйте контрольную сумму,по калькулятору. Меняйте байты местами. И вставляйте в
    Свою программу. Дабы убедится в моей правоте. Сделайте следующее. Найдите в интернете любую модбасовскую команду с контрольной суммой. Вставьте её в онлайн калькулятор. И сверьте. Там тоже
    Будет контрольная сумма ,но байты поменяны местами
     
  7. DLS74

    DLS74 Гик

    Так я так и проверил на многих командах... все сходится.... но у меня не работает...
     
  8. znamen

    znamen Guest

    Все равно производителей этого устройства. давайте зажмем в угол. Сделаем следующее. Производители
    грешат на Вашу некорректную программную реализацию. Они Вам выдали команду с их просчитанной ими
    контрольной суммой. Поэтому Вам необходимо получить от них программный код,запустив который ,Вы
    получите положительный результат. В противном случае- выбросте на помойку их термометр.
     
  9. znamen

    znamen Guest

    Дайте в студию реквизиты производителя. Я с ними сам пообщаюсь.И решу Ваши проблемы.
    Иначе-век воли не видать. И у меня есть опыт в решении подобных проблем.Приедут и
    все наладят.
     
    Последнее редактирование модератором: 4 июн 2019
  10. parovoZZ

    parovoZZ Гуру

    Товарищ под шафе или очень близок к этому.
     
  11. parovoZZ

    parovoZZ Гуру

    Разумеется. Такие штуки надо отлаживать на компьютерных эмуляторах модбаса. То бишь уарт заворачиваешь в комп на ком порт и смотришь, что приходит. А уже потом пенять на производителей и обязывать их к чему либо. Программ -эмуляторов в сети немного есть.
     
    Последнее редактирование: 4 июн 2019
  12. DLS74

    DLS74 Гик

    Начал с проверки Тройка модулей RS-485.... работают.... дальше подключил осцилограф... он правда у меня программный... в итоге не получилось посмотреть, на выходных у ребят на "внешнем" осцилографе посмотрим!
    Но дальше, больше.... решил проверить передачу комбинации байт с Мастера на Слэйв... и вот тут-то и начались чудеса. Приходила какая-то абракадабра. После продолжительных тренировок, выяснил, что передавая типом Char... приходит то что надо...
    Код (C++):
    Serial1.print(char(1));
    Я уж обрадовался.... но дальше возникла другая проблема.... реальная зависимость при переключении режима ПЕРЕДАЧА/ПРИЕМ от delay()!!!
    Подобрал delay(10).... вроде и передача идет и массив не разваливается.... но опять датчик не завелся...
    Вообщем нужно реально смотреть на осцилографе или анализаторе.... и подкручивать delay.
     
  13. SergeiL

    SergeiL Оракул Модератор

    Вы бы скинули ссылку на устройство, может что то понятнее бы стало.

    А почему не хотите попробовать что то типа библиотеки ModbusMaster ?
    Там можно определить функции preTransmission() и postTransmission(), которые будут включать передачу и выключать после завершения передачи последнего байта.
     
  14. DLS74

    DLS74 Гик

    Я только За использование готовой Рабочей библиотеки!.... но в начале поста я как раз и описывал проблему с библиотекой ModBus (другой)...
    Если вы с ней работали... и у вас реально считывалось..... напишите пожалуйста как правильно ее использовать.
     
  15. DLS74

    DLS74 Гик

    УРРРРааааа!!! Заработала!!!!
    Заработала на той библиотеке, что в начале указал...
    Проблема оказалась в том, что в самой библиотеке принудительно установлена скорость порта 19200.
    Поменял на 57600... и сразу же датчик стал отдавать значение температуры!!!
     
  16. parovoZZ

    parovoZZ Гуру

    Строка запроса в итоге какая?
     
  17. DLS74

    DLS74 Гик

    А я же теперь делал с помощью библиотеки, поэтому только указал: адрес устройства, функцию, начальный адрес регистра и длину..... а остальное библиотека сама высчитала.
     
  18. SergeiL

    SergeiL Оракул Модератор

    Поздравляю!
    Думаю проблема была с некорректным переключением передача / прием.
     
  19. parovoZZ

    parovoZZ Гуру

    Кстати, а что за датчик?
     
  20. DLS74

    DLS74 Гик