eine real zahl wird intern als 32bit wert im speicher abgelegt (nach IEEE754)
wenn du eine real zahl über modbus übertragen willst dann gibt es zwei möglichkeiten
du überträgst die zahl als text (string) was aber ziemlich umständlich ist
oder du nimmst den 32bit wert der real-variable und übergibst sie in zwei modbusregister (2x 16 bit)
und machst auf der anderen seite genau das gegenteil → aus 2x16bit wert eine echte real-zahl
damit du das machen kannst haben wir “vor langer” zeit schon in oscat basic die beiden bausteine REAL_TO_DW und DW_TO_REAL erfunden
real-wert mittels REAL_TO_DW in zwei 16bit worter konvertieren
dann über modbus übertragen
auf der anderen seite müssen die zwei 16 bit modbus werte wieder mittels DW_TO_REAL zurückwandeln
Hi, irgendwie ist es aber dennoch komisch. Denn sofern nicht gerundet wird, ist die Zahl korrekt im register. Wago stellt er ins codesys auch richtig dar.
Gibst du mir also recht, dass man mit der wago nicht runden kann, sofern man den Wert über modbus auslesen möchte.
Dann muss ich mit nen weg überlegen, es im Script zu runden.
Ich danke dir für die ausführliche Aufklärung. Dann werde ich das ganze in meiner Visualisierung entsprechend runden.
PS: Kannst du denn erklären, wieso der Wert vom Temperatur Sensor, welcher über 1wire als real kommt, Punktgenau (3 Stellen nach dem Komma) angezeigt und übertragen wird? Müsste er laut deiner Erklärung nicht dann auch n Nachkommastellen besitzen
den Grundsatz dahinter habe ich verstanden. Auch dass es in Codesys nicht angezeigt wird.
Übergebe ich dem Temperaturwert aber DIREKT an den register, dann erhalte ich dort den korrekten wert auf 4 Nachkommastellen genau. Da ist nicht mit 20 Nachkommastellen.
Das ist das, was mich wundert. Vielleicht denke ich auch zu kompliziert :