Umgang mit indirekt adressierten Timern

mkd

Level-2
Beiträge
197
Reaktionspunkte
30
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

da ich in einem selbst erstellten FC´s einen Timer benötige, kam mir die Idee die Timeradresse indirekt zu adressieren. Ich lege aussen am FC dann nur noch ein Int an.

Im FC lade ich dann die IN Variable in eine temporäre und weise diese dann dem Timer zu:

Code:
//indirekte Zeitadresse laden
      L     #ADR_TIMER
      T     #ADR_TIMER_TMP


 L     #TIME_VERZ_FEHLER
      SE    T [#ADR_TIMER_TMP]



 U     T [#ADR_TIMER_TMP]

//tu was...
Leider ist der verwendete Timer so nicht mehr den Referenzdaten zu entnehmen. Der spätere Anwender müsste dann also genau wissen was er macht (z.B. bei Programmänderungen...) um nicht einen schon benutzten Timer ein zweites mal zu benutzen.

Was haltet ihr davon / wie haltet ihr das in der Praxis?


Der Variablentyp IN: TIMER bringt leider keine Abhilfe.
Der Timer läuft dann einfach nicht los.
Vielleicht mache ich da auch einen großen Fehler ?
Bei einem Test mit einem FB statt FC funktioniert die TIMER Variable auch nicht :cry:


Über Tips, Meinungen und Kniffe würde ich mich sehr freuen!


Daniel


Simatic Manager V5.4 SP4
CPU 313C, 3152-DP
PLCSIM
 
ein vorschlag:

in FBs die IEC-timer verwenden z.B. SFB4 "TON" und als multiinstanz einbinden.

in FCs bau ich mir die timer gern selber über den cpu-takt ...

...so und jetz können die anderen über sinn und unsinn von s5-timern referrieren :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
das wäre nicht mein Fall ...

Wenn du es unbedingt so machen willst, warum übergibst du dem FC den Timer nicht als IN-Parameter ? Also :
Code:
Var_Input 
   Timer_Nr  : Timer ;
Dann hättest du das Ding auch wieder in den Querverweisen.

Eine weitere Möglichkeit wäre mit den IEC-Timern zu arbeiten (z.B. SFB4). Das ist aber eigentlich eher etwas in einem FB, da man den Timer dort mit in die Instanz einbinden kann ...


Nachsatz:
4L war etwas schneller ...

Gruß
LL
 
Hallo,

ein vorschlag:

in FCs bau ich mir die timer gern selber über den cpu-takt ...

referrieren :rolleyes:

O.K. dann brauche ich aber doch auch noch eine Puffer Variable vom Typ IN_OUT in der ich im Sekundentakt zähle, somit würde ich unter Umstäden wieder einen FB mitschleppen.

Oder verstehe ich dich falsch?
 
nein, verstehst das nicht falsch, aber ich schreib lieber eine variable mehr als inout, als gefahr zu laufen, dass irgendwer daher kommt und die timer die ich verwende an anderer stelle nochmal verwendet ... bevor ich eine globale programmierung ändere guck ich auch erst, ob die adressen, die ich verwenden möchte schon benutzt sind, bei indirekter timer und zähleradressierung ist das nicht möglich, außer du legst dir eine liste an, in der alle indirekt verwendeten aufgelistet sind ...

[edit] habs jetzt nicht getestet, aber ich glaube ich hab bullshit erzählt, wenn ich T23 am IN übergebe, wird das natürlich auch referenziert, oder? dann gilt obiges nur für merker und andere indirekte zugriffe [/edit]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
hi,

mit IN-Timer sollte das klappen.
Folgendes läuft bei mir:

Code:
FUNCTION FC 1 : VOID
TITLE =
{ S7_language := '7(1) Deutsch (Deutschland)  16.08.2008  13:59:15' }
VERSION : 0.1
 
VAR_INPUT
  START : BOOL ; 
  ZEITGLIED : TIMER ; 
END_VAR
VAR_OUTPUT
  QZEIT : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =
      L     S5T#10S; 
      U     #START; 
      SE    #ZEITGLIED; 
      U     #ZEITGLIED; 
      =     #QZEIT; 
END_FUNCTION

Gruß

Micha
 
Hallo,
das wäre nicht mein Fall ...

Wenn du es unbedingt so machen willst, warum übergibst du dem FC den Timer nicht als IN-Parameter ? Also :
Code:
Var_Input 
   Timer_Nr  : Timer ;
Dann hättest du das Ding auch wieder in den Querverweisen.

Eine weitere Möglichkeit wäre mit den IEC-Timern zu arbeiten (z.B. SFB4). Das ist aber eigentlich eher etwas in einem FB, da man den Timer dort mit in die Instanz einbinden kann ...


Nachsatz:
4L war etwas schneller ...

Gruß
LL

Der Timer als IN Parameter funktioniert nicht :confused:
Ich lege einfach eine IN Variable vom Typ Timer an, und schreibe dann:

Code:
 Var_Input 
   Timer_Nr  : Timer ;

L S5T#3s
SE T Timer_Nr
//usw.

Am Bausteinaufruf gebe ich dann Timer_Nr z.B. T20.

Kann mir jemand sagen was ich falsch mache?
 
Zurück
Oben