Step 7 Zeit zählen

GurkenBrannt

Level-1
Beiträge
30
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja hi unzwar bin fast am verzweifeln kann mir da jemand bitte helfen.. Ich hab mein programm in AWL geschrieben bin soweit fertig.. ich muss nurnoch die zeit messen wie lang ein Signal ansteht. Wie mache ich das am besten ? Habe eine CPU313C. Danke schonmal im vorraus
 
Um welchen Zeitbereich geht es? Millisekunden? Minuten? Stunden?

Du könntest
- S7-Timer oder IEC-Timer laufen lassen und die abgelaufene Zeit verrechnen
- oder mit Flankenerkennung und SFC64 die Start- und Endzeitpunkte erfassen und subtrahieren
- oder OB1_PREV_CYCLE addieren
- oder ...

Hier ist ein Beispiel für eine Zeiterfassung mit OB1_PREV_CYCLE in AWL. Im letzten Netzwerk "Info: Calculate time duration..."
Für #REQ_get müßtest Du Dein Signal einsetzen und statt SPBN müßtest Du SPB nehmen, dann erfasst der Code die Zeitdauer, wie lange ein Signal 1-Zustand hat. Wenn Du den Code nicht im OB1 platzierst, dann noch im OB1 die Lokalvariable #OB1_PREV_CYCLE auf eine globale Variable kopieren (z.B. auf ein Merkerwort).

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle antwort.
Also ich habe ein band es fahren palletten die nicht immer gleich lang sind darauf und ich habe einen optischen sensor. Ich möchte da jetzt das wenn der sensor die pallete erkennt eine zeit startet und wenn die pallette vorbei kommt soll sie aufhören zu zählen und das band soll stoppen dann soll die zeit durch 2 geteilt werden und es soll die geteilte zeit wieder zurück fahren. Rechnen und alles kann ich nur wie schreibe ich das mit zeit starten und stoppen ? Ich glaub du hast den falschen link gewält komme da bei bus raus
 
OK, Lesehilfe :cool::
Hier ist ein Beispiel für eine Zeiterfassung mit OB1_PREV_CYCLE in AWL. Im letzten Netzwerk "Info: Calculate time duration..."
Das meint diesen Code:
Code:
NETWORK
TITLE =Info: Calculate time duration of 1 communication cycle

      L     #ComTime_Counter ;

      U     #REQ_get ;
      SPBN  CNT ;
      T     #ComTime_Last ;
      L     0 ;
      T     #ComTime_Counter ;

CNT:  L     "OB1_PREV_CYCLE" ; //MW8: Copy of #OB1_PREV_CYCLE
      +I    ;
      T     #ComTime_Counter ;

//watch ComTime_Last (ms)
      L     #ComTime_Last ;

END_FUNCTION_BLOCK



Inklusive der 2 beschriebenen Änderungen sollte Dein Code etwa so aussehen:
Code:
NETWORK
TITLE =Info: Calculate the duration of  a 1-signal

      L     #Time_Counter ;

      U     #MySignal ;
      SPB   CNT ;
      T     #Time_Last ;
      L     0 ;
      T     #Time_Counter ;

CNT:  L     "OB1_PREV_CYCLE" ; //MW8: Copy of #OB1_PREV_CYCLE
      +I    ;
      T     #Time_Counter ;

//watch Time_Last (ms)
      L     #Time_Last ;

Harald
 
Du müßtest Dir noch ein Wegkopieren des #Time_Counter oder #Time_Last bei fallender Flanke von #MySignal einbauen, das Zählergebnis ist nur 1 Zyklus lang vorhanden und danach sind beide Variablen 0. Das Beispiel zeigt aber das Prinzip des Addierens der Zykluszeit in AWL.

Harald
 
Zurück
Oben