Решаю такую задачку. К Ардуино Мега по 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 помогите навести порядок, что я не так делаю
Согластно инструкции читает 9 регистров (информацию) PZEM, начиная с 0x0000 (информация о напряжении)
Ммм да "Правильно заданный вопрос является частью ответа" искал не нашёл с примера взята "если есть ответ" тогда выполняется условие( библиотека ModbusMaster.h)
Попробуйте вставить в конец цикла, который от 1 до 2, delay(1000). Если поможет, то судя по всему спамите в rs485. Если нет, то нужно лезть лог. анализатором и узнать что возвращают используемые процедуры.
там есть delay. УУ дальше космос, в каком-то обзоре слышал что эти PZEM-016 имеет проблемы с всплесками "мусора"