Funktion set_DT

Begonnen von Mr. Spok, 30. Oktober 2007, 07:16:42

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 5 Gäste betrachten dieses Thema.

Mr. Spok

Hallo und guten Morgen,

ich benutze die EasyControl ECP4 von Moeller die mit CoDeSys programmiert wird.
Ich habe die Funktion set_DT eingebunden doch leider verrechnet sich die Steuerung irgendwie.(siehe Anhang)
Woran kann das liegen?

Bin für jede Hilfe dankbar.

mfG Jan

[gelöscht durch Administrator]

hugo

das ganze funktioniert bei uns siehe anhang

kannst du uns noch mehr inputs liefern?
welche version der oscat lib benutzt du?
bekommst du dasselbe ergebnis in der simulation?
schreibt eine andere routine noch auf die gleiche variable?

kannst du uns eventuell das projekt senden dann koennen wir es sicher nachvolluziehen.


[gelöscht durch Administrator]

Mr. Spok

Hallo hugo,

hier die Infos:

Ich benutze die oscat.lib 2.2, die CoDeSys 2.3.5.8, in der Simulation ist die Berechnung immer o.k.
Desweiteren habe ich festgestellt, daß die Berechnung auch in der Steuerung o.k. ist solange wie die Stunden der Uhrzeit nicht zweistellig werden. Also ab 10 Uhr rechnetÃÆ'ââ,¬Å¡Ãƒâ€šÃ,´s nichtmehr richtig.

Im Anhang mein Testprogramm.

mfG Jan



[gelöscht durch Administrator]

Mr. Spok

#3
Hallo an alle,

ich habe die Programmzeile  der Funktion set_DT geändert:

set_DT := DWORD_TO_DT(DATE_TO_DWORD(set_Date(year, month, day)) + second + minute * 60 +(INT_TO_DWORD(hour)) * 3600)

Jetzt funktioniert es auch mit der ECP4 von Moeller.
Der Grund lag in einer Wertebereichsüberschreitung für den Typ INT bei dieser Steuerung: INT = -32768 bis 32767

hour = 9  d.h. 9 * 3600  = 32400 ist noch im Wertebereich von INT
hour = 10  d.h. 10 * 3600  = 36000 ist nicht mehr im Wertebereich von INT


Scheinbar wird bei der Steuerung irgendwie anders gerechnet ??? ??? ??? .

mfG Jan

hugo

danke das werden wir in der nächsten release aufnehmen.
wenn dir bei möller noch weitere dinge auffallen nehmen wir dies gerne mit auf.
leiner haben wir keine möller zum testen bei uns

Mr. Spok

Hallo und guten Tag,

des Weiteren mußte ich bei Verwendung der oscat.lib mit der ECP4 von Moeller die Funktion Ltime_to_UTC löschen, da sonst CoDeSys abgestürzt ist. Habe die Funktion nun geändert damits funktioniert:

FUNCTION Ltime_to_UTC : DT
VAR_INPUT
   Ltime : DT;
   DST : BOOL;
   Time_Zone_Offset : TIME;
END_VAR
VAR
   DST_Differenz: TIME :=T#1h;
END_VAR


IF DST THEN Ltime_to_UTC := Ltime - Time_Zone_Offset - DST_Differenz; ELSE Ltime_to_UTC := Ltime -
Time_Zone_Offset; END_IF;


sobald ich in der ST-Anweisung direkt mit T#1h gearbeitet habe wollte es nicht, aber wenn ich es deklariere als Variable funktionierts.

mfG Jan 

hugo

danke das sollte zwar so gehen, und wir benutzen häufig literal constants aber wir ändern das natürlich.
vielen dank, solche hinweise sind für uns sehr wichtig und tragen dazu bei das oscat eine wirklich plattformunabhängige lib wird

HeHo

Hallo,

ist zwar schon eine ganze Weile her, aber in der aktuellen "BASIC LIB 332 CODESYS2" besteht das Problem bei "LTIME_TO_UTC" nach wie vor!?

Gruß Horst

Zitat
revision history
hm 5.11.2007      rev 1.1
   replaced literal constant with variable because of error in möller ecp4 compiler