04-02-2025, 13:07
Cześć,
Mam problem z odczytem rejestrów po Modbusie RTU via moduł MAX485 - Arduino Nano.
Skonfigurowałem jak w poniższym kodzie, za pomocą biblioteki ArduinoModbus i ArduinoRS485, nie mam już pomysłu co robię nie tak, siedzę nad tym od rana, chyba trzeba będzie swoją bibliotekę napisać.
Serial wyświetla mi, że dane zostały wpisane z powodzeniem, na płytce mruga dioda TX, ale za chiny symulatorze nie mogę nic odczytać, ani się z nim połączyć.
RI podłączone do RX, DI do TX, już nawet zdefiniowałem te piny, bo myślałem, że tam coś jest nie tak. DE i RE mam zmostkowane, nie chciałem ich używać, ale potem już próbowałem podłączenie ich pod PIN 2 i inne, ale również bezskutecznie. Są jakieś "haczyki" w komunikacji Nano po RS485 protokołem Modbus?
Napisałem możliwie najprostszy kod, żeby tylko zobaczyć jakąkolwiek odpowiedź, ale nic.
Z góry dziękuję
Mam problem z odczytem rejestrów po Modbusie RTU via moduł MAX485 - Arduino Nano.
Skonfigurowałem jak w poniższym kodzie, za pomocą biblioteki ArduinoModbus i ArduinoRS485, nie mam już pomysłu co robię nie tak, siedzę nad tym od rana, chyba trzeba będzie swoją bibliotekę napisać.
Serial wyświetla mi, że dane zostały wpisane z powodzeniem, na płytce mruga dioda TX, ale za chiny symulatorze nie mogę nic odczytać, ani się z nim połączyć.
RI podłączone do RX, DI do TX, już nawet zdefiniowałem te piny, bo myślałem, że tam coś jest nie tak. DE i RE mam zmostkowane, nie chciałem ich używać, ale potem już próbowałem podłączenie ich pod PIN 2 i inne, ale również bezskutecznie. Są jakieś "haczyki" w komunikacji Nano po RS485 protokołem Modbus?
Napisałem możliwie najprostszy kod, żeby tylko zobaczyć jakąkolwiek odpowiedź, ale nic.
Z góry dziękuję

Kod:
#include <ArduinoRS485.h>
#include <ArduinoModbus.h>
#include <SoftwareSerial.h>
SoftwareSerial RS485Serial(0, 1);
const int numCoils = 1;
const int numHoldingRegisters = 1;
void setup() {
Serial.begin(9600);
while(!Serial);
Serial.println("Modbus RTU server");
if (!ModbusRTUServer.begin(1, 9600)) {
Serial.println("Blad serwera Modbus RTU");
while(1);
}
ModbusRTUServer.configureCoils(0x00, numCoils);
ModbusRTUServer.configureHoldingRegisters(0x00, numHoldingRegisters);
}
void loop() {
ModbusRTUServer.poll();
bool bul;
int liczba;
bul = 1;
liczba = 23;
if (ModbusRTUServer.coilWrite(0, bul)) {
Serial.println("Coil write successful");
} else {
Serial.println("Coil write failed");
}
if (ModbusRTUServer.holdingRegisterWrite(0, liczba)) {
Serial.println("Holding register write successful");
} else {
Serial.println("Holding register write failed");
}
delay(100);
}