Autor Thema: Funktion set_DT  (Gelesen 9913 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Mr. Spok

  • Newbie
  • *
  • Beiträge: 14
    • Profil anzeigen
Funktion set_DT
« am: 30. Oktober 2007, 07:16:42 »
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]

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Funktion set_DT
« Antwort #1 am: 30. Oktober 2007, 18:23:29 »
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]

Offline Mr. Spok

  • Newbie
  • *
  • Beiträge: 14
    • Profil anzeigen
Re: Funktion set_DT
« Antwort #2 am: 01. November 2007, 06:29:33 »
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]

Offline Mr. Spok

  • Newbie
  • *
  • Beiträge: 14
    • Profil anzeigen
Re: Funktion set_DT
« Antwort #3 am: 01. November 2007, 08:39:05 »
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
« Letzte Änderung: 01. November 2007, 10:16:26 von Mr. Spok »

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Funktion set_DT
« Antwort #4 am: 01. November 2007, 13:26:52 »
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

Offline Mr. Spok

  • Newbie
  • *
  • Beiträge: 14
    • Profil anzeigen
Re: Funktion set_DT
« Antwort #5 am: 05. November 2007, 12:43:36 »
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 

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Funktion set_DT
« Antwort #6 am: 05. November 2007, 15:13:53 »
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

  • Gast
Re: Funktion set_DT
« Antwort #7 am: 15. November 2011, 20:13:22 »
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