SCL S_ODT: Status der Zeit woanders abfragen

lindnerlars

Level-1
Beiträge
39
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS-Gemeinde,

wollte gern wissen, ob ich den Ausgang Q der Funktion S_ODT auch woanders in meinem Programm-Code abfragen kann? Sprich, ob ich den Status des Timers auch an einer anderen Stelle im Code abfragen kann?

Oder MUSS ich den Ausgang Q bei Aufruf von S_ODT versorgen, weshalb er deshalb implizit immer bei der Timer-Behandlung mit behandelt wird?!

der neugierige Lars
 
Hallo "neugieriger" Lars,
ich glaube, auf diese Frage hast du (zumindestens von mir) schon x mal Antwort erhalten. Was war daran unverständlich gewesen ? Ich erkläre es ggf. gerne auch noch einmal ...

Gruß
LL

PS:
Pass auf, dass ich dich nicht an 4L empfehle für seinen "Spezial-Thread".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo "Erklärbär" Larry,

ich hatte gestern die gleiche Frage schon mal gestellt und da hast du mir geantwortet, dich aber auf den SFB4 bezogen und nicht auf die Siemens eigene Funktion S_ODT !

Jetzt handelt sichs aber um S_ODT und darauf war meine Frage gerichtet ;)

der weiterhin neugierige Lars :)
 
OK ...

der S_ODT, wie auch die anderen SCL-Zeitglieder sind nur Importe der aus der Step7-AWL-Ebene bekannten Zeitglieder. Sie beziehen sich sogar auf diese. Es sind also im Grunde wieder absolute Adressierungen. Die bekommst du dann natürlich auch überall in deinem restlichen Programm abgefragt. Vorsicht bei Überschneidungen ... T xyz ist T xyz ...

Gruß
LL
 
mmhmm Ok, danke, aber so war meine Frage nicht gemeint...

Ich meinte, wenn ich S_ODT derart aufrufe:

Code:
 "currTime" :=  S_ODT (T_NO := T0 , S := "Start_Timer" , TV := TimeIn , Q := "Timeout_Timer");
dann wird doch "Timeout_Timer" genau DANN gesetzt, wenn ich in der Code-Zeile bin UND der Timer schon abgelaufen ist!

Ich möchte aber in einer ANDEREN Code-Zeile schon (vor dem Timer) das "Timeout_Timer" setzen!
(Voraussetzung natürlich, dass der Timer schon abgelaufen ist!)

Das spielt für mich deshalb eine Rolle, da ich das Verhalten des gleichen Codes aus einer anderen Programmiersprache nachbilden möchte und dort die Timer-Abfrage schon VOR der Timer-Behandlung stattfindet!

Grüße
Lars

PS: ich denke aber nicht, dass das mit S_ODT geht, da ich ja den Ausgang Q versorgen MUSS und damit automatisch das Signal für "Timeout_Timer" in dieser Code-Zeile geschrieben wird?!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... wenn "TimeOut_Timer" eine STAT-Variable des Bausteins oder eine absolute Variable (Merker) ist, dann kann du die abfragen, wie du es vorhast. Ob du das mit dem Zustand des Timers in gleicher Weise kannst, habe ich noch nicht probiert ...
 
Hallo Linderlars,

du kannst alle Variablen eines FBs, außer Temp_Vars, immer und überall abfragen. Auch beschreiben wäre immer und überall möglich. Diese Variablen liegen ja in einem Instanz-DB und sind wie ganz normale Daten zu behandeln.

Die Daten eines FBs, speziell wenn es IEC-Timer Werte sind, werden sich natürlich nur ändern, wenn auch der FB-Code gelegentlich aufgerufen wird.

D.h. wenn der FB nicht gecalled wird, dann wird auch die entspr. Zeit nie ablaufen und ein Abfragen der Zeit oder des "Zeitausgangs" ist relativ sinnlos.

mfG. klaly
 
Hallo Larry und klaly,

mhmm, ihr zwei bestätigt im Endeffekt meine Anmerkung im PS...soll heißen, dass das eigentliche Signal vom Ausgang Q dann und nur dann abgefragt werden kann, wenn ich den den Timer auch wirklich behandle, sprich ich kann den Ausgang Q nicht aus meiner Funktion S_ODT an eine andere Stelle im Code herausziehen...

PS: die Abfrage auf Zustand von T0 ist mir auch schon gekommen, das wäre eine Möglichkeit, wie ich es auch in AWL machen würde, doch T0 ist ja jetzt vom Datentyp TIME und wenn man das auf logisches UND abfragt, kommt natürlich die Fehlermeldung, dass T0 nicht BOOL ist!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@klaly:
wenn du so deine Programme schreibst, dann viel Spaß denen, die damit leben müssen beim Fehler-Suchen - vor allen Dingen dann, wenn man den FB mal ein bißchen geändert hat (z.B. im IN, IN_OUT, OUT, Stat-Bereich).

@Lars:
Das wäre dann wieder einen Fall für den SFB4 (z.B.), da du dort ja direkt an die Schnittstelle herankommst. Den anderen beschriebenen Fall würde ich (um Klimmzüge zu vermeiden) in AWL lassen. Oder du beschaltest den Ausgang, wie von mir vorgeschlagen. Das kommt im Ergebnis auf das Gleiche heraus ...
---
Vielleicht wäre es doch mal an der Zeit, dass du dein Vorhaben mal etwas konkretisierst. Vielleicht gibt es für das was du eigentlich bezweckst aus eine "schöne" Lösung ...
 
Zurück
Oben