Взаимодействие 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);
}
}
}
@Nikhil Nair, 👍1
Обсуждение1 ответ
Лучший ответ:
Теперь у вас есть 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
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Мониторинг контроллера Modbus RTU с помощью Arduino и модуля RS485
- Связь Arduino Uno и ESP32 с использованием RS485
- Когда дело доходит до связи UART-RS485, в чем разница между модулем "MAX485" и модулем "HW-0519"?
- Преобразование десятичных данных rtu Modbus в число с плавающей запятой
- Управление VFD с помощью ModBus RTU через RS485 и Arduino
- Использование Modbus-RTU с Arduino и контроллером температуры
- считывание данных с контроллера через RS485 Modbus rtu Arduino
идентификатор ведомого устанавливается в ведомом. идентификатор находится в документации датчика. это 1 (и может быть установлено в регистре 40063), @Juraj
@Juraj Спасибо за информацию о Slave ID. Извините, но не могли бы вы объяснить, что вы имели в виду во втором комментарии?, @Nikhil Nair
@Juraj Огромное спасибо. Итак, решение просто изменить его на Serial? Извините, если это глупый вопрос, но у меня нет большого опыта в этом., @Nikhil Nair