Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
(25.10.2013 13:14 )jg schrieb: Entschuldige die harten Worte, aber das ist doch jetzt "Blödsinn". Dein VI passt jetzt zufällig genau auf das 1 Bsp. im Dokument, nämlich auf die Abfrage der 2 Sollwerte auf Adresse 0x3100 und 0x3102. Und selbst hier hast du einen Fehler, die Rückmeldung ist 13 Byte lang, nicht 12.
Was machst du, wenn du 8 Register abfragen willst? Dein VI wird nicht funktionieren.
Harte Worte sind kein Thema
Ich will auch garkeine 8 Register abfragen. Ich will zunächst mal eines richtig auswerten!
Dein VI funktioniert und liefert auch die selben Werte die ich mir über einen Konverter außerhalb von LI "von Hand" berechnen. Vermutlich stimmt dann innerhalb des Jumo etwas nicht.
(25.10.2013 13:18 )GerdW schrieb: also wirklich...
Wenn du weiterhin auf die ModBus-VIs verzichtest, musst du halt selbst die passenden Bytes aus dem String ausschneiden und per TypeCast (wie schon mehrfach gezeigt und erläutert) in ein FLOAT aka SGL umwandeln!
Das sollte doch nun wirlich nicht so schwer sein nach all den Erläuterungen! Oder sollen wir hier für dich die dafür nötigen 3 oder 4 Funktionen in dein VI programmieren?
Ich erwarte nicht das mir jemand etwas programmiert, keine Sorge
Ich bin nur immernoch ein Neuling auf dem Gebiet und versuche mich durchzukämpfen.
Du kennst bestimmt auch das Zitat:"Nicht der, der fragt ist der Dumme, sondern der, der nicht fragt";)
Anzeige
25.10.2013, 16:02 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2013 16:03 von redhand.)
Zum Abschluss hier: Juhu ich habs
Ich hab das richtige Register gefunden und es geht, erstmal vielen Dank euch!!
Noch etwas zum Schluss weil ich es auch verstehen will:
Jens, du benutzt zur Umwandlung 1D-Array dezimieren -> 1D-Array überführen -> TypeCast (siehe Bild)
Was machen (vorallem die ersten 2 Elemente) mit dem Array. Lesen sich die VI's intelligent genau die Teile des Antwortstrings heraus welche ausgewertet werden müssen oder wie muss ich mir das vorstellen?
Und wie bekomme ich die "Holding String"-Konstante über dem Umwandler hin?
Das Register womit es jetzt funktioniert, funktioniert wie das Register mit der Adresse 0x3100 aus deiner Beispiellösung. Also 2 Werte sind aus dem Antwortstring zu entnehmen.
Vergleiche ich den Antwortstring des Registers womit es jetzt funktioniert (Analogeingang) mit dem Register, mit dem ich die ganze Zeit gearbeitet habe (Istwert), bekomme ich den selben Hex-Code als Antwort. (In meinem VISA-VI, wo ich den Hex-Code "von Hand" auswerten muss)
Wieso bekomme ich, wenn ich den Teil des Strings, welcher mir meinen Wert liefert, via IEE754 in einen Dezimalwert übersetzte nicht den selben Wert wie du in deinem VI?
Außerdem frage ich mich, warum das eine Register (mit dem es jetzt geht) in deinem VI richtig ausgelesen wird aber das andere, welches eigentlich die gleiche Hex-Antwort liefert nicht?
Beide Register sind Datentyp Float. Register mit dem es geht: Zugriff R/O; Anderes Register: Zugriff: W/O
(25.10.2013 16:02 )redhand schrieb: Zum Abschluss hier: Juhu ich habs
Ich hab das richtige Register gefunden und es geht, erstmal vielen Dank euch!!
Aha, das ist jetzt das erste Mal, dass du erwähnst, dass du eigentlich ein anderes Register als in der Doku auslesen willst. Und da wunderst du dich, dass du andere Werte als im Display des Jumo siehst.
Der Vollständigkeit halber, welche Register-Adresse fragst du ab?
(25.10.2013 16:02 )redhand schrieb: Jens, du benutzt zur Umwandlung 1D-Array dezimieren -> 1D-Array überführen -> TypeCast (siehe Bild)
Was machen (vorallem die ersten 2 Elemente) mit dem Array. Lesen sich die VI's intelligent genau die Teile des Antwortstrings heraus welche ausgewertet werden müssen oder wie muss ich mir das vorstellen?
Lies dir die Hilfe zu den "Array"-VIs durch. Das kaue ich jetzt nicht vor.
(25.10.2013 16:02 )redhand schrieb: Und wie bekomme ich die "Holding String"-Konstante über dem Umwandler hin?
Meinst du das "Single-Array" am Anschluß vom Typecast? Leeres Array anlegen. Dann eine Numeric-Konstante reinlegen. Dann Datentyp von Double auf Single ändern. Hast du schon die Links in Gerds Signatur gesehen?
(25.10.2013 16:02 )redhand schrieb: Das Register womit es jetzt funktioniert, funktioniert wie das Register mit der Adresse 0x3100 aus deiner Beispiellösung. Also 2 Werte sind aus dem Antwortstring zu entnehmen.
Logisch, ein FLOAT Wert muss in 2 Registern übertragen werden.
(25.10.2013 16:02 )redhand schrieb: Vergleiche ich den Antwortstring des Registers womit es jetzt funktioniert (Analogeingang) mit dem Register, mit dem ich die ganze Zeit gearbeitet habe (Istwert), bekomme ich den selben Hex-Code als Antwort. (In meinem VISA-VI, wo ich den Hex-Code "von Hand" auswerten muss)
Wieso bekomme ich, wenn ich den Teil des Strings, welcher mir meinen Wert liefert, via IEE754 in einen Dezimalwert übersetzte nicht den selben Wert wie du in deinem VI?
Mal schauen .... Mist, Kugel kaputt, ich habe leider keine Ahnung, was du ausgelesen hast und was du übersetzt hast.
(25.10.2013 16:02 )redhand schrieb: Außerdem frage ich mich, warum das eine Register (mit dem es jetzt geht) in deinem VI richtig ausgelesen wird aber das andere, welches eigentlich die gleiche Hex-Antwort liefert nicht?
Beide Register sind Datentyp Float. Register mit dem es geht: Zugriff R/O; Anderes Register: Zugriff: W/O
s.oben, ich habe keine Ahnung, mit welchen Registern du rumgespielt hast. R/O = Read-Only, hier musst du also mit Function 3 oder 4 (Read Input oder Read Holding Register) arbeiten. W/O = Write-Only, das Register lässt sich nicht lesen, sondern kann nur per Funtion Code 6 (bzw. 10) (Write Multiple Register) geschrieben werden.
Gruß, Jens
P.S.: Es ist löblich, Fragen zu stellen und auch das Protokoll zu verstehen. Aber etwas Eigeninitiative beim Nachlesen, was LabVIEW-Funktionen machen und vollständige Fragestellungen sind ebenso löblich.
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
(25.10.2013 16:30 )jg schrieb: Aha, das ist jetzt das erste Mal, dass du erwähnst, dass du eigentlich ein anderes Register als in der Doku auslesen willst. Und da wunderst du dich, dass du andere Werte als im Display des Jumo siehst.
Der Vollständigkeit halber, welche Register-Adresse fragst du ab?
Ich wusste ja nicht welches Register ich auslesen muss, dass ich die Werte auf dem Display sehe, deshalb musste ich rumprobieren.
Die Register-Adresse mit der ich jetzt die Display-Werte sehe ist: Signalbezeichnung: Analogeingang1: 0x0035 (FLOAT; R/O)
Wobei ein Wert die aktuelle Temperatur darstellt, wie auf dem Display. Der andere Wert ist konstant 200001.
(25.10.2013 16:30 )jg schrieb: Lies dir die Hilfe zu den "Array"-VIs durch. Das kaue ich jetzt nicht vor.
Ich hatte nur gefragt weil ich es nicht 100% verstanden habe. Ich versuch mir schon alles durchzulesen und es selbst herauszubekommen bevor ich überhaupt hier frage.
(25.10.2013 16:30 )jg schrieb: Meinst du das "Single-Array" am Anschluß vom Typecast? Leeres Array anlegen. Dann eine Numeric-Konstante reinlegen. Dann Datentyp von Double auf Single ändern. Hast du schon die Links in Gerds Signatur gesehen?
genau das, danke!
(25.10.2013 16:30 )jg schrieb: Mal schauen .... Mist, Kugel kaputt, ich habe leider keine Ahnung, was du ausgelesen hast und was du übersetzt hast.
Über VISA kriege ich folgenden Hex-Code als Antwort des Registers 0x0035: 0103 08F0 5C41 B350
01 03 08 steht ja hier für: Slave-Adresse, Funktion und Anzahl gelesener Bytes.
F05C 41B3 muss ich dann in den Temperatur-Wert umkonvertieren.
Mittlerweile weiß ich, dass wenn ich 41B3 F05C (also genau umgekehrt) umwandle, den richtigen Temperatur-Wert bekomme. Warum das so ist, kp..
(28.10.2013 09:38 )redhand schrieb: Über VISA kriege ich folgenden Hex-Code als Antwort des Registers 0x0035: 0103 08F0 5C41 B350
01 03 08 steht ja hier für: Slave-Adresse, Funktion und Anzahl gelesener Bytes.
F05C 41B3 muss ich dann in den Temperatur-Wert umkonvertieren.
Mittlerweile weiß ich, dass wenn ich 41B3 F05C (also genau umgekehrt) umwandle, den richtigen Temperatur-Wert bekomme. Warum das so ist, kp..
Weil das so in der Anleitung von Jumo steht! Hatten wir schon. Jumo überträgt/erwartet bei einem 4-Byte-Wert (also z.B. Single oder U32) zuerst das Low-Word und dann das High-Word, deshalb das Tauschen der Reihenfolge!
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!