ARRAY von Zeit im CoDeSys

Shokoo

Level-1
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich habe 2 Fragen:
1. Ist es möglich ein ARRAY von Zeit im CoDeSys zu Definieren? z.B:. T: ARRAY[1..65536] OF TIME;
2. Ist es möglich, um die aktuellen Uhrzeit mit einem Array von Zeit zu vergleichen?

Vielen dank im Voraus
 
Zuletzt bearbeitet:
...also meine Aufgabe ist , nach einem Fahrplan Sollwerte an eine Steuerung zu senden. dafür bekomme ich zwei Arrays von Daten als Eingänge. Eine ist eine Array von Sollwerten und der andere ist ein Array von Zeit, in der die Zeitpunkte zum Senden der Sollwerte gegeben ist. Jetzt denke ich, ich sollte die aktuelle Zeit mit jedem Element des Array von Zeit vergleichen und wenn die gleich sind, muss der nächste Sollwert an die Steuerung geschickt werden. aber ich weiß nicht, wie kann ich die Zeit mit dem solchen Array in CoDeSys vergleichen?...
 
Lies dir ein paar Hilfen zu Arrays durch, dann sollte es eigentlich klar werden.
Auf einen Wert im Array greifst du einfach direkt zu, z.B: arrMyArray[1]

Dein Vorhaben sollte aber wohl möglich sein!

Grüße,
Flo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... aber ganz grundsätzlich :
- Du erstellst dir für diese Aufgabe einen Baustein.
- Diesen Baustein rufst du z.B. zyklisch (oder später in einem festgelegten Intervall) auf.
- In dem Baustein programmierst du eine Schleife in der du überprüfst, ob die Istzeit mit der Vorgabezeit übereinstimmt (bzw. diese überschritten hat und du noch nicht darauf reagiert hast). Entsprechend lößt du die von dir gewünschte Aktion aus.

Gruß
Larry
 
Ich habe so geschrieben:

VAR
numPts: UINT;
N: INT;
Sollzeit: TIME;
pTIME: ARRAY [1..65535] OF TIME;
Wirksollakt: INT;
pVal: ARRAY [1..65535] OF REAL;
Val: REAL;
insTime: CurTime;
t64CurrTime : Systime64 := (ulLow:=0, ulHigh:=0);
END_VAR

und dann:

N:=0;
IF N< numPts THEN
Sollzeit:= pTIME [N];
insTime (SystemTime:= t64CurrTime);
IF (Sollzeit=insTime ) THEN
Val:= pVal[N];
Wirksollakt:= REAL_TO_INT (Val);
END_IF

N:=N+1;
END_IF

Ich bekomme aber 4011 fehlermeldung:"kann 'curTime' nicht in 'Time' convertieren."
weiß jemand wo ich fehler mache?
 
Ja verpolt, du hast recht. Ich habe es auch mit DWORD_TO_TIME (insTime) versucht, aber kommt wieder fehler :"Kann 'CurTime' nicht in 'Time' Konvertieren".

Es sollte eigentlich eine Lösung in CoDeSys zur Verfügung sein, um die current time zu lesen. Ich brauche dringend Hilfe:sad:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PROGRAM MAIN
VAR
Time_Array:ARRAY[0..10] OF TIME:=T#0m,T#1m,T#2m,T#3m,T#4m,T#5m,T#6m,T#7m,T#8m,T#9m,T#10m;(*Zeitpunkte, wo neuer Wert ausgegeben wird*)
Temperatur_Array:ARRAY[0..10] OF INT:=10,11,12,13,14,15,16,17,18,19,20;(*Ausabewerte*)
pt_Time:pOINTER TO ARRAY[0..10] OF TIME;
pt_Temperatur:pOINTER TO ARRAY[0..10] OF INT;
Prozesszeit:TON;
_Start_Process:BOOL;(*Startet Process*)
i:INT;
_time:TIME;
Solltemp:INT;(*Ausgabe*)
END_VAR

##############################################
Prozesszeit(IN:=_Start_Process,PT:=T#11m);

pt_Time:=ADR(Time_Array);
pt_Temperatur:=ADR(Temperatur_Array);

FOR i:=0 TO 10 BY 1 DO
IF Prozesszeit.ET=pt_Time^ THEN
Solltemp:=pt_Temperatur^;
END_IF;
END_FOR;
IF Prozesszeit.Q THEN
_Start_Process:=0;
Solltemp:=10;
END_IF;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe endlich die Antwort gefunden :) Es war gar nicht kompliziert nur musste ich die Bibliothek SysLibRTC.Lib nutzen:
VAR
dtRtc: DT;
End_VAR

dtRTC :=SysRtcGetTime(dummy);

so bekommt man die aktuelle Zeit mit Datumn

Viele Grüße und guten rutsch
Shokoo
 
Zurück
Oben