Timer (Array?)

amw

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
und zwar wollte ich fragen ob ich diese Einschaltverzögerung auch in eine For-Schleife machen kann?

Zeitwert[1]:= S_ODT(T_NO:=T1, S:=X[1],TV:=T#1s,Q:=Status[1]);
Zeitwert[2]:= S_ODT(T_NO:=T2, S:=X[2],TV:=T#1s,Q:=Status[2]);
Zeitwert[3]:= S_ODT(T_NO:=T3, S:=X[3],TV:=T#1s,Q:=Status[3]);
Zeitwert[4]:= S_ODT(T_NO:=T4, S:=X[4],TV:=T#1s,Q:=Status[4]);

Ich habe Probleme mit dem " T_NO:=T? ", denn das möchte ich am liebsten in ein Array schreiben, damit ich eine For-Schleife erstellen kann.Ich stell mir das wie folgt vor:

For i:=1 to 4 do
Zeitwert:= S_ODT(T_NO:=T, S:=X,TV:=T#1s,Q:=Status);
End_For;

Doch so klappt es nicht mit dem " T ".
Könnt ihr mir vielleicht helfen, warum es nicht klappt und wie ich es richtig machen kann?

Liebe Grüße
Torsten
 
RTFM :rolleyes:

Siemens-Hilfe zu SCL T_ODT (Aufruf von Zeitfunktionen):


Zeitfunktionen werden aufgerufen wie Funktionen. Die Funktionsbezeichnung kann überall anstelle eines Operanden in einen Ausdruck eingesetzt werden, solange der Typ des Funktionsergebnisses mit dem des ersetzten Operanden kompatibel ist.
Der Funktionswert (Rückgabewert) der an die Aufrufstelle zurückgegeben wird, ist ein Zeitwert vom DatentypS5TIME.
Absoluter oder dynamischer Aufruf
Beim Aufruf können Sie als Nummer der Zeitfunktion einen absoluten Wert (z. B. T_NO:=T10) vom Datentyp TIMER eingeben. Ein solcher Wert kann allerdings zur Laufzeit nicht mehr verändert werden.
Anstelle der absoluten Nummer können Sie auch eine Variable oder eine Konstante vom Datentyp INT angeben. Das hat den Vorteil, dass Sie den Aufruf dynamisch gestalten können, indem Sie der Variablen bei jedem Aufruf eine andere Nummer zuweisen.
Eine weitere Möglichkeit des dynamischen Aufrufs ist die Angabe einer Variablen vom Datentyp TIMER.
Beispiele
//Beispiel für einen absoluten Aufruf:
CurrTime:=S_ODT (T_NO:=T10,
S:=TRUE,
TV:=T#1s,
R:=FALSE,
BI:=biVal,
Q:=actFlag);

//Beispiel für einen dynamischen Aufruf: Bei jedem Durchlauf
//einer FOR-Schleife wird eine andere Zeitfunktion aufgerufen:
FUNCTION_BLOCK ZEIT
VAR_INPUT
MEINE_ZEIT: ARRAY [1..4] of STRUCT
T_NO: INT;
TV : WORD;
END_STRUCT;
.
.
END_VAR
.
.
FOR I:= 1 TO 4 DO
CurrTime:= S_ODT(T_NO:=MEINE_ZEIT.T_NO, S:=true,
TV:= MEINE_ZEIT.TV);
END_FOR;

//Beispiel für einen dynamischen Aufruf bei Verwendung einer
//Variablen vom Datentyp TIMER:
FUNCTION_BLOCK ZEITGEBER
VAR_INPUT
meineZeit:TIMER;
END_VAR
.
.
CurrTime:=S_ODT (T_NO:=meineZeit,.....);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke erstmal für die Hilfe,
aber das klappt nicht so ganz wie das in der Hilfe beschrieben ist.
Außerdem ist "TV" nicht vom Datentyp "Word" sondern vom Datentyp "S5TIME",also kann das schonmal nicht so klappen.

Also meine Fragen wären:
1. Wie kann ich einer Variable ein Zeitwert vom Datentyp "S5TIME" zuweisen?
2. Hast du vielleicht ein Programm, wo du schon einmal so eine Einschaltverzögerung mit einer For-Schleife dynamisch aufgerufen hast?

Denn irgendwie klappt das nicht ganz mit der Kennnummer "T_NO".
Mit einer Einschaltverzögerung geht das, jedoch wenn ich 2 Einschaltverzögerung habe,dann geht es schon nicht mehr!

Liebe Grüße
Torsten
 
Geht doch eigentlich:

Code:
FUNCTION FC96 : INT
Title = 'ST_Modul'
//
// 4 unterschiedliche Zeiten starten
//
Version : '1.0'
author  : Ralle
name    : ST_MOD
family  : MODUL
// Bausteinparameter
VAR_INPUT
  // Eingangsparameter
  MEINE_ZEIT: ARRAY [1..4] OF STRUCT
  T_NO: INT;
  TV : s5Time;
  END_STRUCT;
END_VAR
VAR_IN_OUT
  // In-OUT-Parameter  
  END_VAR
VAR_TEMP
  // temporäre Variablen
  i: INT;
  CurrTime: S5TIME;
 END_VAR
FOR I:= 1 TO 4 DO
CurrTime:= S_ODT(T_NO:=MEINE_ZEIT[i].T_NO, S:=true, 
TV:= MEINE_ZEIT[i].TV);
END_FOR;
  ;
  FC96 := 100;
END_FUNCTION

Außen an den FC muß das Array ran (z.Bsp, die Struct nochmal in einem DB definieren). Die Timernummern die du dort einträgst dürfen nur einmal vergeben werden sonst ein Timer mehrmals gestartet wird. Es gibt noch die IEC-Timer, damit ginge es evt. besser, die nutze ich selbst aber nie.
 
Zurück
Oben