Skocz do zawartości

Zaimpelemntowanie Modbusa RTU Slave przy wykorzystaniu RS485


Pomocna odpowiedź

Napisano

Cześć, 

Od kilku dni borykam się z problemem ponieważ nie wiem jak zaimplementować Modbusa tak żeby odbierał 2 dane po prostu. Te biblioteki są dla mnie nie zrozumiałe.

Potrzebuję odczytywać nawet 1 rejestr. Potrzebuję po prostu że jak przez symulator ModbusMaster wyślę wartośc 80 to arduino dobierze tą wartość. Ktoś ogarnia dobrze tego Modbusa?

 

 

#include <SoftwareSerial.h>
#include <ModbusRTUSlave.h>

#define TX 4
#define RX 5

#define MODBUS_BAUD 9600
#define MODBUS_CONFIG SERIAL_8N1
#define MODBUS_ID 1

SoftwareSerial RS485(RX, TX);

ModbusRTUSlave modbus(RS485);

const uint16_t numHoldingRegisters = 2;
uint16_t holdingRegisters[numHoldingRegisters];
const uint16_t numCoils = 10;
bool coils[numCoils];

void setup() {
  Serial.begin(4800);
  RS485.begin(9600);
  modbus.configureHoldingRegisters(holdingRegisters, numHoldingRegisters);
  modbus.configureCoils(coils, numCoils);
  modbus.begin(MODBUS_ID, MODBUS_BAUD, MODBUS_CONFIG);
}

void loop() {

 modbus.poll();
  Serial.print("Holding Register [0]: ");
  Serial.println(holdingRegisters[01]);

  Serial.print("Holding Register [1]: ");
  Serial.println(holdingRegisters[1]);

  Serial.print("Coils [1]: ");
  Serial.println(coils[01]);

  delay(1000); // Debugowanie co sekundę

}

 

  • Lubię! 1
  • 3 tygodnie później...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...