In ein paar Wochen werde ich einen Sensor mit einer Modbus-Schnittstelle (RS485) für meine Arbeit erhalten. Leider habe ich keine Erfahrung in der Modbus-Programmierung. Ich habe versucht, mich zu dokumentieren und habe dieses Programm geschrieben. Mein Arduino wird als Master und der Sensor als Slave verwendet. Ich möchte an Adresse 0x0001 den Wert des Wasserdurchflusses auslesen. Im Datenblatt steht: "Lesen Sie die entsprechenden Register mit Funktionscode 4 (0x04) aus (Read Input Registers)".
Bin ich auf dem richtigen Weg oder gibt es Verbesserungen, bis ich den Sensor zurückbekomme?
//#include <ArduinoRS485.h>
//#include <ArduinoModbus.h>
#include <ModbusMaster.h>
#define MAX485_DE 3 // Pin names that are connected between the MAX485 TTL to RS-485 converter module and Arduino UNO.
#define MAX485_RE_NEG 2
ModbusMaster node; //object node for class ModbusMaster
// preTrasnmission() and postTrasmission() for making the Pins RE and DE of Max485 TTL to RS-485 convertor module high or low to Transmit or Receive data
void preTransmission()
{
digitalWrite(MAX485_RE_NEG, 1);
digitalWrite(MAX485_DE, 1);
}
void postTransmission()
{
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
}
void setup() {
// put your setup code here, to run once:
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
// intit receive mode
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
Serial.begin(9600);
node.begin(1, Serial);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop() {
// put your main code here, to run repeatedly:
float valueSensor;
valueSensor = node.readInputRegisters(0x0001, 1);
delay(1000);
}