Hallo,
bin neu auf dem Gebiet und versuche einen Modbus Temperatursensor über RS485 mit einem Arduino UNO anzusprechen.
Das ist das Shield was ich für die RS485 Kommunikation nutze:
https://www.amazon.de/LinkSprite-RS485-Shield-V2-1-Arduino/dp/B00T2WLY2A/ref=lp_10159974031_1_2?srs=10159974031&ie=UTF8&qid=1508964761&sr=8-2
Leider schaffe ich es nicht den Temperatursensor anzusprechen und Daten auszulesen. Wenn ich den Sensor über einen RS485 zu USB Adapter mit meinem PC verbinde und ihn über das Programm ComTestPro (kann man mit Modbusgeräten kommunizieren) auslese funktioniert es, mit meinem Arduino jedoch nicht. Ich verwende die ModbusMaster Library.
#include <ModbusMaster.h>
// pin used for TX and RX
#define MAX485_DE 3
#define MAX485_RE_NEG 2
ModbusMaster node;
void setup() {
// set pins to output
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
// baud rate
Serial.begin(9600);
// slave ID 1
node.begin(1, Serial);
}
void loop() {
//set pins pre transmission to high
digitalWrite(MAX485_RE_NEG, HIGH);
digitalWrite(MAX485_DE, HIGH);
uint8_t result;
// read 1 HoldingRegister at address 1
result = node.readHoldingRegisters(1, 1);
delay(1000);
// set pins post transmission to low
digitalWrite(MAX485_RE_NEG, LOW);
digitalWrite(MAX485_DE, LOW);
if (result == node.ku8MBSuccess)
{
Serial.print("TEMPERATURE: ");
// print 1 Register of ResponseBuffer to Serial Monitor
Serial.println(node.getResponseBuffer(1) / 100.0f);
}
delay(1000);
}
Ich habe alles Erdenkliche probiert, sehe aber meinen Fehler nicht. Einstellungen sind genauso wie in ComTestPro - 9600 Baud, Device 1, Register 1, #Register 1, Function 3, welche bei Modbus ja readHoldingRegisters entspricht. Habs auch schon mit readInputRegisters probiert wie in dem ModbusMaster RS485 Example.
Egal ob mit oder ohne Shield auf den Arduino aufgesetzt, kriege ich im SerialMonitor das Gleiche zu sehen, irgendwelchen Unsinn. Da gibt er dann bereits bei result = node.readHoldingRegisters(1, 1); irgendwelche Hieroglyphen aus, was eh schon seltsam genug ist, weil ich da ja gar kein Serial.print mache. Das würde ich wirklich gerne verstehen.
Zu Serial.println(node.getResponseBuffer(1) / 100.0f); kommt er gar nicht erst, weil result scheinbar =! node.ku8MBSuccess ist, was wenn ich das richtig verstehe soviel heißt wie, dass readHoldingRegisters fehlgeschlagen ist. Und da liegt der Hund begraben - warum? Mit ComTestPro funktioniert es doch auch.
Mit Voltmeter Spannung am Sensor gecheckt, liegt an.
Weiß da jemand Rat zu? Ich bin für jede Hilfe dankbar.
Viele Gruesse
Winterwurst