CoDeSys: Programmbearbeitung Simulation und WAGO PLC?

El Cattivo

Level-2
Beiträge
157
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich bin vor kurzen auf ein Problem gestoßen bei dem ich nicht so richtig weiter gekommen bin. Vieleicht könnt Ihr mir helfen.

Ich habe folgendes Programm:
Code:
VAR
    DURCHFAHRZEIT: TIME;
    STRECKE: INT:= 20;
    GESCHWINDIGKEIT: INT:=30;
END_VAR

DURCHFAHRZEIT:=INT_TO_TIME(STRECKE*3600/GESCHWINDIGKEIT);

In der Simulation bekomme ich das mathematisch richtige Ergebnis T#2s400ms.
Lade ich das Ganze auf meine PLC (WAGO750-819) bekomme ich das logisch richtige Ergebnis T#225ms (wegen des überlauf der INT Variable).

Warum bekomme ich im CoDeSys kein Typenkonflikt bzw. warum rechnet die Simulation "falsch".
 
Einfach keinen "Überlauf" erzeugen :)
Der Simu traue ich sowieso nie. Ich hab hier meine kleine DEMO Station, die ich zum "simulieren" nutze,
 
Warum bekomme ich im CoDeSys kein Typenkonflikt bzw. warum rechnet die Simulation "falsch".

Es gibt keinen Typkonflikt:
STRECKE => INT
3600 => INT
GESCHWINDIGKEIT => INT

Alle Operationen werden im Datentyp INT vorgenommen. D.h. du bist dafür verantwortlich dass deine Operanden den Wertebereich einhalten.
Ich glaube das Überlaufverhalten ist bei ST / IEC ähnlich festgelegt wie bei C, nämlich "undefiniert". D.h. es kann alles passieren.
 
Es gibt keinen Typkonflikt:
STRECKE => INT
3600 => INT
GESCHWINDIGKEIT => INT

Alle Operationen werden im Datentyp INT vorgenommen. D.h. du bist dafür verantwortlich dass deine Operanden den Wertebereich einhalten.
Ich glaube das Überlaufverhalten ist bei ST / IEC ähnlich festgelegt wie bei C, nämlich "undefiniert". D.h. es kann alles passieren.

und nicht nur das:
es sind zwei INT, das resultat ist aber eine float immer.
also
Code:
DURCHFAHRZEIT:=INT_TO_TIME(STRECKE*3600/GESCHWINDIGKEIT);

eigentlich 
soll 3600 auch ein INT sein
stunde = 3600 :INT;
und dann strecke*stunde gibt ein stundstrecke : INT;
dann stundstrecke/gesschwindigkeit gibt eine REAL
und dan den REAL_TO_TIME soll immer die richtige geben.
 
Zurück
Oben