ein Wertüberschreitungsfehler in SCL

Rose

Level-1
Beiträge
58
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen,

auf die Zeile Fehler_CODE := REAL_TO_DINT((a-11*10000)/ 10); tretet es ein Fehler auf: Wertüberschreitung in der Konstanten. ich weiß nicht wie kann ich die Zeile korrigieren, kann jemand hier mir hilfen?


FUNCTION FC1200 : VOID
VAR
DB_INDEX : INT;
a : DINT;
FEHLER_CODE : DINT;
FEHLER_ANZAHL : INT;
m : INT;
n : INT;
c : INT;
END_VAR

BEGIN
DB_INDEX := 0;
a := 0;
FEHLER_CODE := 0;
FEHLER_ANZAHL := 0;
m := 0;
n := 0;
c := 0;

FOR DB_INDEX := 0 TO FEHLER_ANZAHL*4 BY 4 DO
a := DWORD_TO_DINT(DB1100.DD[DB_INDEX]);
Fehler_CODE := REAL_TO_DINT((a-11*10000)/ 10);
m := REAL_TO_INT(FEHLER_CODE / 8 );
n := REAL_TO_INT(FEHLER_CODE - m * 8 );
IF DB900.DX[m,n] = 0 THEN
FOR c := DB_INDEX TO FEHLER_ANZAHL*4 BY 4 DO
DB1100.DD[c] := DB1100.DD[c+4];
END_FOR;
FEHLER_ANZAHL := FEHLER_ANZAHL-1;
END_IF;
IF DB_INDEX = FEHLER_ANZAHL*4 THEN
DB_INDEX := 0;
END_IF;
END_FOR;

END_FUNCTION


MFG,
Rose
 
Ich weiss nicht wie SCL reagiert, aber aus Erfahrung mit anderen Programmiersprachen:
mal versuchen die Konstanen (10, 11 bzw. 10000) einfach durch 10.0, 11.0 bzw. 10000.0 als Gleitpunktzahl anzugeben. Ansonsten wird wahrscheinlich mit INT gerechnet, was zum Überlauf führt.
 
Zurück
Oben