ich bräuchte bitte Eure Hilfe.
Und zwar lese ich in IPS per Modbus TCP zwei Word 16 Bit Variablen ein. Die kommen von einer Wago SPS und sind ursprünglich ein (Real) Temperaturwert. Die Varieble wurde in der SPS schon in 2 Wörter geteilt, dann gehts weiter zu IPS.
Aber wie kann ich in IPS jetzt diese 2 Wörter zu einem 32 Bit (Real) Float zusammenfügen???
Somit hätte ich wieder anständige Prozesswerte.
Danke schon mal.
Danke für die Info. Aber ich wollte mit der Modbuslib die Kommunikation aufbauen. Zwischen den Controllern klappt das wunderbar, da wandle ich words in real mit einer Union.
Naja dann werde ich die Verbindung zu IP Symcon wohl über den Konfigurator aufbauen.
Wenn die 2 Words sauber einen Real abbilden, kannst du in IP-Symcon weiterhin einen Real auslesen. Falls das nicht geht, macht deine Union etwas nicht korrekt. (Hast du evtl. MSW/LSW Swap falsch aktiv?)
Also die Wörter kann ich drehen wie ich will, macht er nicht. @paresy:Mit einer Union arbeite ich zwischen Wago Controllern.
Die Bausteine die ich da verwende sind von Wago, diese übertragen die Werte strikt als 16 bit Word.
Wenn ich jetzt vom Controller einen Real Wert an IPS zum Lesen sende (FC3) den wandle ich den Real Wert in zwei Words und mappe ihn über ein Array (von Wago im Baustein) auf FC3 Register z.B. 32000.
Ich kann auf Register 32000 keinen Real legen Wert legen, das ist das Problem.
Deswegen hatte ich nach einer Funktion gefragt wo ich 2 Words z.B Register 32000 und 32001 in IPS als 16 Bit Word einlese und dann auf Real(Float) konvertiere.
Das ist genau das, was tobiasr und ich dir erklären wollten. IP-Symcon liest immer 2 Words aus zwei aufeinander folgenden Registern und setzt diese zusammen und macht einen Float daraus. Wenn der Wert bei IP-Symcon also nicht korrekt ankommt, dann ist die Übertragung über die Unions der Wago kein echtes IEEE754 welches nur zerlegt wurde sondern muss irgendwie anders sein.
Lies dir mal die Words in zwei Modbus Instanzen und konvertiere es manuell z.B. über PHP: unpack - Manual