Ардуино rs485 и два электросчётчика

Тема в разделе "Микроконтроллеры AVR", создана пользователем woow, 20 мар 2020.

  1. woow

    woow Гик

    Решаю такую задачку. К Ардуино Мега по RS485 подключены два электросчётчика. Славе адреса 0х01 и 0х02. Но результат получаю вот такой
    E counter 1: 220,3V
    E counter 2: Failed to read modbus

    если провод от 0х01 (E counter 1) отключаю тогда от 0х02 данные идут. Вот кусок скетча который думаю мне портит ситуацию:

    Код (C++):
    for (int pzemSlaveAddr = 1; pzemSlaveAddr < 3; pzemSlaveAddr++) {
      node.slaveid(pzemSlaveAddr);
      Serial.print("E counter ");
      Serial.print(pzemSlaveAddr);
      Serial.print(": ");
    result = node.readInputRegisters(0x0000, 9);
    if (result == node.ku8MBSuccess) {
    uint32_t tempdouble = 0x00000000;
    PZEMVoltage = node.getResponseBuffer(0x0000) / 10.0;
    Serial.print(PZEMVoltage, 1);
    Serial.print("V  ");
        }
      else{
      Serial.println("Failed to read modbus");
      }
      startMillisPZEM = currentMillisPZEM ;
    }
    Если сразу за этим куском ставлю такой же но с изменением в строке так вот:
    for (int pzemSlaveAddr = 2; pzemSlaveAddr < 3; pzemSlaveAddr++) {

    Результат такой,
    E counter 1: 220,3V
    E counter 2: Failed to read modbus
    E counter 2: 223,1V

    помогите навести порядок, что я не так делаю
     
  2. Daniil

    Daniil Гуру

    А чему равен result перед if?
     
  3. woow

    woow Гик

    Согластно инструкции читает 9 регистров (информацию) PZEM, начиная с 0x0000 (информация о напряжении)
     
  4. Daniil

    Daniil Гуру

    нет.
    Чему равен result и node.ku8MBSuccess?
     
  5. woow

    woow Гик

    Ммм да "Правильно заданный вопрос является частью ответа" искал не нашёл :(
    с примера взята "если есть ответ" тогда выполняется условие( библиотека ModbusMaster.h)
     
  6. Daniil

    Daniil Гуру

    Попробуйте вставить в конец цикла, который от 1 до 2, delay(1000).
    Если поможет, то судя по всему спамите в rs485.
    Если нет, то нужно лезть лог. анализатором и узнать что возвращают используемые процедуры.
     
  7. woow

    woow Гик

    там есть delay. УУ дальше космос, в каком-то обзоре слышал что эти PZEM-016 имеет проблемы с всплесками "мусора"
     
  8. Daniil

    Daniil Гуру

    задержку сделать между запросами
     
  9. woow

    woow Гик

    Оба помогло, спасибо за подсказку, паносувал этих делай куды попало и- вуаля заработало.
     
    Daniil нравится это.