Hallo, ich versuche mit einer Symbox über modbus RTU Daten aus einer Wetterstation auszulesen.
Es kommt der fehler " | TimerPool | ModBus Gerät (UpdateTimer): Messwerte-auslesen: Zeitüberschreitung beim Warten auf Antwort"
Der Hersteller der Wetterstation schreibt folgendes:
Die Geräte sind Modbus-Slaves mit RS485-Schnittstelle und RTU-Protokoll. Modbus-
Master, wie z. B. PC, SPS oder MC, können mit „Function 04h (Read Input Register)“
die Messwerte der Wetterstationen P03/3-Modbus(-GPS) auslesen.
Der Anfragestring dazu hat 8 Bytes:
Beispiel Anfragestring für das Auslesen aller Daten:
0x01 0x04 0x00 0x00 0x00 0x11 0x30 0x06
Du mußt schon Deine Modbus Instanz und die Modbus Instanz Konfiguration der Modbus Gerät ADR 3 und Daten wie Slave ADRESSE real wie Du sie im Baum hast angeben, Beispiel String aus dem PDF hilft nicht.
Im Debug der Instanz ist der tatsächlich Anfrage String, der ist eher hilfreich.
Hast Du Adresse 1 drin?
Danke für die Antwort, hilft etwa weiter… Hier mal der Debug, aber ich bin mir nichtmal sicher ob die Grundeinstellung passt. Woher weiss ich denn was ich bei der Instanzkonfiguration für eine „Einheit“ einstellen muss? Ausser dem Befehl „04H“ zum lesen des Registers (ich hoffe mal das entspricht „04“ bei der Symbox), steht da nicht viel bei der Modbus-beschreibung der Wetterstation dabei…
Laut Deiner Daten ist deine Geräte ID(ADR) die 3 und Lesen versuche mal Modus ADR 0.
Ich würde Int16 Vorzeichen behaftet mal versuchen, weil es sind 2 Byte =16 Bit
Das sollte die Aussentemp sein.
Nein, aber dazu muss sie auch überhaupt antworten. Was sie, nach deinem Screenshot vom Debug Reiter, nicht macht.
Auch fehlt da in der Konfig der Name der Variable für das Register mit der Adresse 1.
Michael
Hast Du eine Symbox mit eingebauter RTU/TTL Schnittstelle oder externem Wandler?
A und B und GND angeschlossen? A und B mal getauscht`
Die Modbus Gateway Splitter Instanz richtig parametriert? da scheint Geräte-ADR 3 drin zustehen?
Also ich hab eine Symbox direkt mit Modbus serieller Schnittstelle die direkt mit Wetterstation verbunden ist. Nachdem ich gestern nochmal entnervt gegoogelt und festgestellt habe das die Portbezeichnungen A/B gar nicht standardisiert sind hab ich die Drähte getauscht und schon bekomme ich Daten aus der Wetterstation, die sehe ich am Modbus Gateway und am Modbus Serial Port (am Modbus Gerät sehe ich keine Daten).
Sorry für die blöde Frage: Die Variable füge ich beim serial-Port oder beim Gerät dazu? Was trage ich für einen Wert ein bzw. was muss ich noch machen?
Wie hinzufügen?
Also anlegen als Objekt im Objektbaum musst du gar keine Variable.
Die werden in der Liste der Modus Gerät Instanz eingetragen. Name, Einheit, Funktion, Adresse usw…
Michael
Mittlerweile hab ich es doch tatsächlich geschafft das die Aussentemperatur richtig angezeigt wird. Alle anderen Werte sind falsch oder werden mit „0“ wieder gegeben.
Ich vermute mal das die Aussentemperatur „zufällig“ passt, da diese die Registeradresse 0 hat.
Hab alle möglichen Kombinationen von Einstellungen schon probiert. Hat noch jemand einen Hinweis für mich?
UINt16 geht bei der Temperatur, aber nicht beim Wind. Ich bin mir halt nicht sicher ob ich nicht doch ein KonfigProblem in der Symbox habe. Ich teste jetzt erstmal die Wetterstation mit einer Prüfsoftware des Herstellers, bzw. sprech mal mit den Support von Elsner. Was meinst Du denn mit „word, mit vorzeichen“??
Deine Modbus Registerinhalte sind mit 16 Bit Inhalt beschrieben (mit Word), kann also nicht 8bit sein.
Und in Deinem PDF ist ein Beispiel, in dem 16 Adressen mit einem mal ausgelesen werden.
Zitat:
Beispiel Anfragestring für das Auslesen aller Daten:
0x01 0x04 0x00 0x00 0x00 0x11 0x30 0x06
Da wird nicht plötzlich eine andere Zeichenform gebastelt, es muss also Word sein, ich meine mit Vorzeichen.
Und wenn Du es ohne die Symbox testen willst, dann müsstest Du eine USB / TTL zu RTU Wandler extern an Deinen Rechner und an DEin Gerät anschließen , hast Du sowas?
ja, dem Adapter habe ich. Versprech mir davon wenig, die Wetterstation ist neu und es will mir nicht in den Kopf warum Adresse 0 mit der Temperatur ausgelesen werden kann und der Rest nicht.
Ich probiere weiter…
ABER:
Die Variablen werden nun auch in regelmässigen Abständen auch mit den nicht korrekten Werten befüllt, wenn ich in der Instanzkonfiguration irgend was ändere funktioniert es überhaupt nicht mehr. Musste die Einträge also so belassen.
Als Workaround haben ich das Intervall extrem nach oben gestellt (gelbe Markierung), damit werden die Variablen mit dem weiter oben eingestellten 1000ms Intervall befüllt: