Взаимодействие NodeMCU Modbus с Multi-Switch давления

Я пытался установить интерфейс между NodeMCU и мультипереключателем давления Dotech DPX200 через Modbus RS485, используя модуль MAX485 для последние несколько недель, безуспешно просматривая почти все сообщения Modbus на этом сайте. Поскольку мой доступ к мультипереключателю иногда может быть ограничен, я также пытался использовать несколько симуляторов, таких как ModScan64, Simply Modbus Master/Slave, Modbus Poll и т. д., но ни один из них не работал.

Я хотел бы знать, нужно ли устанавливать идентификатор ведомого устройства Modbus на самом устройстве или на NodeMCU? Кроме того, чтобы получить «Отображение значения низкого давления», в руководстве указан адрес 40023. Как мне написать код NodeMCU для считывания этого значения, используя ModbusRtu, ModbusMaster или любую другую подходящую библиотеку?


Я добавил ключевое поле Руководство по DPX200 свяжите с моим сценарием NodeMCU и схемой подключения, и буду признателен за любую вашу помощь.

Схема подключения

#include <ModbusMaster.h>
#define MAX485_TX_ENABLE  12

int myInts[6];
ModbusMaster node;

void preTransmission(){
  digitalWrite(MAX485_TX_ENABLE, 1);
}

void postTransmission(){
  digitalWrite(MAX485_TX_ENABLE, 0);
}

void setup(){
  Serial.begin(9600);
  Serial1.begin(9600, SERIAL_8N1);
  pinMode(MAX485_TX_ENABLE, OUTPUT);
  digitalWrite(MAX485_TX_ENABLE, 0);
}

void loop(){
  uint16_t k = 0,Status;
  node.begin(1, Serial1); //Идентификатор подчиненного устройства = 1?
  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);
  Serial.println(i);   
  Status = node.readHoldingRegisters(0x0023, 5); //Поскольку адрес 40023 до 40027
  if ( (Status == node.ku8MBSuccess) ){
     Serial.print("\nIDK: ");
     //Serial.println(node.getResponseBuffer(0));
     for (k = 0; k <= 5; k++ ){
        Status = node.readHoldingRegisters(k, 1);
        Serial.println(node.getResponseBuffer(0));
        delay(0);
     }
  }
}

, 👍1

Обсуждение

идентификатор ведомого устанавливается в ведомом. идентификатор находится в документации датчика. это 1 (и может быть установлено в регистре 40063), @Juraj

@Juraj Спасибо за информацию о Slave ID. Извините, но не могли бы вы объяснить, что вы имели в виду во втором комментарии?, @Nikhil Nair

@Juraj Огромное спасибо. Итак, решение просто изменить его на Serial? Извините, если это глупый вопрос, но у меня нет большого опыта в этом., @Nikhil Nair


1 ответ


Лучший ответ:

0

Теперь у вас есть node.begin(1, Serial1), но вы не можете использовать Serial1 для RS485, потому что у Serial1 нет вывода RX

Согласно рисунку, вы подключили адаптер к контакту RX/TX последовательного порта, но эти контакты на плате подключены к USB для связи с компьютером (загрузка и последовательный монитор). Вы не можете использовать адаптер Serial for RS485, пока используете его для отладочной печати.

Вы можете использовать SoftwareSerial для примера на D1/D2 для RS485.

Или, если у вас есть адаптер USB-to-TTL-Serial, вы можете использовать Serial1 для отладочной печати и Serial для RS485

,