ScriptName " Convert Float" ScriptAuthor "(dA)" ScriptVersion "20" // Beschreibung // Die Zahlendarstellung erfolgt in 4 Byte (32 Bit) gemäss IEEE-754-standard SetErrorHandler ( :ErrorAddress ) ; Var v1:byte; Var v2:long; Var v3:long; Var v4:long; Var v5:word; Var v6:buffer[14]; Var v7:buffer[20]; Var v8:buffer[20]; : start; MoveConst(v1, 0x28); MoveConst(v2, 0xFFFFFFFF); MoveConst(v3, 0); MoveConst(v4, 0); MoveConst(v5, 65535); MoveConst(v6[0], "-1234.5678"); // Pfad: math -> data conversion // Convert ( v1 , Byte , v3 , Float ) ; // /* Info aus Libary.h unter " // Definitionen verwendeten Opcodes: "*/ // v1 = source data // v3 = target data // Parameter Typ (b=Byte, w=Word,l=Long, B=Buffer) und Beschreibung // Feldbus-Seite // RS-Seite // Intern -> Ja // min value = // max value = // Beispiel: Alle Variablen im Fenster anzeigen lassen // v1, v2, v4, v5 in Dez // v3 in Hex // v6, v7, v8 in ASCII // Vorher Convert ( v1 , Byte , v3 , Float ) ; // and backwarts Convert ( v3 , Float , v4 , Long ) ; MoveConst(v3, 0); Convert ( v5 , Word , v3 , Float ) ; MoveConst(v3, 0); Convert ( v2 , Long , v3 , Float ) ; Convert ( v6[0] , ASCII_DEZ_9 , v3 , Float ) ; // und zurück // um eine Fehler zu vermeiden sollte hier mind. ASCII_DEZ_10 gewählt werden Convert ( v3 , Float , v7[0] , ASCII_DEZ_14 ) ; // Erklärung hierzu: // Bei der Wandlung von Float nach ASCII wird die ASCII-Länge folgendermassen aufgeteilt: // 1 Zeichen für Vorzeichen (+/-) // 1 Zeichen für Dezimalpunkte // Je die Hälfte der verbleibenden Zeichen für Vor- und Nachkommastellen // Wird z.B eine ASCII-Länge von 14 Zeichen gewählt ergibt sich folgender Aufbau bei einem Wert 1234.5678: // "+001234.567800" Convert ( v3 , Float , v7[0] , ASCII_DEZ_8 ) ; // Hier entsteht ein Fehler 47 Range-Check, EXEC_CONVERT_OVERFLOW 0x2F Convert ( v3 , Float , v7[0] , ASCII_DEZ_10 ) ; // So ist es besser Convert ( v3 , Float , v8[0] , Dynamic_ASCII_DEC ) ; // Hiermit sind alle ASCII Zeichen enthalten // Erklärung zu Dynamic_ASCII_DEC // Bei der Wandlung Float nach ASCII wird auch der Typ "VAR_TYPE_ASC_DEC_DYN" zugelassen. // Der ASCII-String wird dann in der Länge optimiert. Ein führende '+' wird NICHT dargestellt. // z.B. // 123.456 => "123.456" // -123.456 => "-123.456" // 123 => "123" // -123 => "-123" // .123 => "0.123" jump :start ; : ErrorAddress; // do anything return;