Hallo erstmal :)
Benutze die "Oscat_basic_333" in PC Worx 6.30.601 und habe vor mir ein Baustein in ST zu bauen welcher das IST-Datum(RTC) mit einem eingestellten SOLL-Datum(Tag addieren mit DATE_ADD) vergleicht und falls das Datum überschritten wurde ein TRUE liefert.
So weit so gut... Womit ich nicht zurecht komme ist das iDate an dem Baustein DATE_ADD
Es muss vom Typ UDINT sein, aber es funktioniert einfach nicht :-\
ST Auszug:
12		Tag_String:=INT_TO_STRING(Tag_Ist,'%02d');
10		Monat_String:=INT_TO_STRING(Monat_Ist,'%02d');
2013		Jahr_String:=INT_TO_STRING(Jahr_Ist,'%04d');
1210		SC1:=CONCAT(Tag_String,Monat_String);
12102013	SC2:=CONCAT(SC1,Jahr_String);
12102013	Datum_UDINT:=STRING_TO_UDINT(SC2);
12528000	End_Datum_UDINT:=DATE_ADD(Datum_UDINT,Dauer,INT#0,INT#0,INT#0);
Eigentlich müsste bei End_Datum_UDINT 17102013 rauskommen(Dauer = INT#5) :)
Verstehe das nicht :-/
			
			
			
				hallo
so funktioniert das überhaupt nicht
du kannst nicht zeitelemente zu einen string machen und dann in eine zahl wandeln
zumindest so nicht
die umrechnung von zeitelemente (jahr,monat,tage usw) ist nicht linear da es schaltjahre gibt
monate mit verschieden vielen tagen usw...
deine rtc zeitelemente kannst du mit dem baustein set_date zu einen datum wandeln
der baustein macht dann sehr wohl eine serielle zahl draus, jedoch nach bestimmten formeln..)
und diese ergebnisse kannst du dann mit date_add verarbeiten
also immer DT,DATe usw.... mittels der fertigen bausteine konvertieren
			
			
			
				Hallo,
danke für die schnelle Antwort hab es jetzt hinbekommen.
Führen bekanntlich viele Wege nach Rom :)
ST-Code Auszug
(*Start-/ Enddatum setzen*)
Start_Datum:=Set_Date(Jahr,Monat,Tag);
End_Datum:=Date_Add(Start_Datum,Dauer,INT#0,INT#0,INT#0);
(* Überprüfen ob Datum unterschritten wurde mit Differenz*)
Differenz:=Days_Delta(Start_Datum,End_Datum);
			
			
				Mit negative Täge geht's nicht auf PcWorx, da DATE_ADD UDINT ist (kein DATE datatyp)
Hier meine Lösung:
day := D + W * 7;
IF day >= 0 THEN
    DATE_ADD := IDATE + INT_TO_UDINT(day) * UDINT#86400;
ELSE
    DATE_ADD := IDATE - INT_TO_UDINT(ABS(day)) * UDINT#86400;
END_IF;
yr := Y + YEAR_OF_DATE(DATE_ADD);
mo := M + MONTH_OF_DATE(DATE_ADD);
dm := DAY_OF_MONTH(DATE_ADD);
WHILE mo > 12 DO
   mo := mo - 12;
   yr := yr + 1;
END_WHILE;
WHILE mo < 1 DO
   mo := mo + 12;
   yr := yr - 1;
END_WHILE;
DATE_ADD := SET_DATE(yr, mo, dm);