Timer

Flo

Level-1
Beiträge
133
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus nochmal,

hab jetzt schon öfters Probleme bei Anlagen gehabt, das mir die Timer (S5Timer) nicht reichen. Die SFB's für Ton und Tof möchte ich aber eigentlich nicht verwenden, also hab ich mir folgendes überlegt:

Einschaltverzögerung:
NW1:
//Takt mit VKE1 vorbesetzt
//"Zykluszeit" aus OB1. #OB1_PREV_CYCLE gelesen
U #In
U #Takt
U(
L #Istzeit
L #SollZeit
<=D
)
SPBNB _001
L #Istzeit
L "Zykluszeit"
+D
T #Istzeit
_001: NOP 0


NW2:
UN #In
SPBNB _002
L T#0MS
T #Istzeit
_002: NOP 0

NW3:
U #In
U(
L #Istzeit
L #SollZeit
>=D
)
= #Out
END


Ähnliches habe ich auch für die AV prog.
Verwendung sollen diese selbstgebastelten Timer in Situationen finden, bei denen eine Genauigkeit von +/- 2Zyklen reicht (Meine SPS'n laufen bis max.10ms;Vipa).
Was haltet ihr davon?

MfG,
Flo
 
Zuletzt bearbeitet:
... nicht schlecht ...
Aber wo ist nun der Unterschied zum SFB4 / 5 ...?
Das was du erstellt hast braucht auch Speicherplatz und kann letztlich auch nicht mehr ...
Was ist der Vorteil ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Grundsätzlich gibts am TON, TOf kein Problem. Was mir allerdings nicht gefällt, ist der Instanz-DB. Entweder hab ich für jede Zeit nen eigenen DB oder wenn ich Sie Zusammenfasse verliert man (meiner Meinung nach) sehr schnell den Überblick.
 
vielleicht ist es ja ein FC ... da entfallen dann die instanzen (während ich das hier schreibe, bestätigt Flo meine vermutung) ... naja, zykluszeiten addieren is nix für mich :rolleyes: aber das kann man hier und hier nachlesen ...
 
Geschmackssache ...
Ich muss dir allerdings gestehen, dass diese Timer bei mir auch hauptsächlich in FB's zum Einsatz kommen, wo ich sie dann einfach in die schon vorhandene Instanz (den I-DB) mit integriere ...

Ansonsten spricht grundsätzlich nichts gegen deine Idee mit einem eigenen Timer-Baustein ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das sehe ich ähnlich wie Flo, daher ist bei Standardbausteinen für Ventile etc. eine Laufzeitüberwachung auch über ein, mit einem Takt hochzuzählendes, DW inkl. Vergleicher gelöst.

PS: Ich nutze dazu den Taktmerker aus der Hardwarekonfig (100ms).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hier noch die AV die ich mir zusammengebastelt habe.
Und jetzt sogar in 3D:ROFLMAO:
Code:
NW1:
 
UN #In
U #Takt
U( 
L #Istzeit
L #Sollzeit
<=D 
) 
SPBNB _001
L #Istzeit
L "Zykluszeit"
+D 
T #Istzeit
_001: NOP 0
 
NW2:
 
U #In
SPBNB _002
L T#0MS
T #Istzeit
_002: NOP 0
 
NW3:
 
O #In
O 
U #Out
U( 
L #Istzeit
L #Sollzeit
<=D 
) 
= #Out
 
... es gibt auch noch die Möglichkeit mit der Systemzeit. Da könntest du dir einen Baustein erstellen, der die jeden Zyklus ausliest. Da müßtest du dir dann nur die Systemzeit beim Start deines Timers "merken", womit du dann wieder bei einer Art Instanz landen könntest.
Zu dem Thema gab es auch schon mal einen Beitrag, wo jemand dafür einen Mehrfach-FB mit eigenem Index geschrieben hat ... Ich schaue gleich mal nach, ob ich den noch wiederfinde ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du schon Feierabend, oder was? aber was ist daran so lustig?

schon is gut, am ersten tag nachn urlaub ... egal ... beides hängt von der zykluszeit ab, warum also mit krummen werten rechnen, wenn man mit 100ms oder 1s oder 2s rechnen kann und die genauigkeit in etwa die selbe bleibt? du hast selber gesagt, du würdest das nur verwenden, wenn es nicht genau sein muß ... wenn es auf die millisekunde ankommt hilft sowieso nur ein interrupt PUNKT
 
Das mit dem Taktmerker hatte ich auch schon im Kopf, aber das war mir dann wieder zu ungenau.

Was ist daran zu ungenau? Die Ungenauigkeit liegt in diesem Falle bei exakt max. 100ms. Wenn du es genauer brauchst, hilft in dem Falle wirklich nur der OB35, der 10ms-Takt (oder was war der kleinste Takt, 25???) könnte schon zu fix sein, wenn die Zykluszeit etwas steigt. Außerdem kommt es auf das Problem an, eine Laufzeit von 5 Sekunden als Fehler melden, da tun mir 100 ms nicht weh :ROFLMAO: !
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ist daran zu ungenau? Die Ungenauigkeit liegt in diesem Falle bei exakt max. 100ms. Wenn du es genauer brauchst, hilft in dem Falle wirklich nur der OB35, der 10ms-Takt (oder was war der kleinste Takt, 25???) könnte schon zu fix sein, wenn die Zykluszeit etwas steigt. Außerdem kommt es auf das Problem an, eine Laufzeit von 5 Sekunden als Fehler melden, da tun mir 100 ms nicht weh :ROFLMAO: !

Das ist richtig. Aber wenn ich nicht täusche dann würde es bei meinem Versuch aber doch nur auf eine Ungenauigkeit von 1nem Zyklus kommen, oder (bei einer Zykluszeit die sich im Bereich von 5-15ms aufhält)?
Gibt es denn bei einer SPS etwas (zeitlich gesehen) was nach Ende Zyklus 1 und vor Start Zyklus 2 liegt?
 
@Flo

Ah, das mit der geforderten Genauigkeit von 1-2 Zyklen hatte ich überlesen, das geht natürlich gut mit der Zeit aus dem OB1.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, in der Zeit beschäftigt sich die SPS mit sich selbst (Prozessabbild aktualisieren , Kommunikation etc.)

sorry, glaub das hab ich jetzt falsch rüber gebracht.
Der OB1 gibt mir einen Wert aus, der als Wert in ms letzte Zykluszeit beschrieben wird.
1. zyklus x wird gestartet, abgearbeitet.
2. zyklus x endet.
3. Passiert hier was (PG-Kommunikation, lesen/schreiben irgendwelcher peripherien, "Arbeiten" am Rückwandbus,CPU-interne Vorgänge (ich hab keine Ahnung was so ne CPU alles tut), usw.)?
4. zyklus x+1 startet.

Wenn in Punkt 3 etwas passiert, ist das im Ergebnis des Wertes OB1.OB1_PREV_CYCLE schon eingerechnet?
Falls das nicht der Fall wäre, dann wär nä(h)mlich mein Versuch ein Fall für die Tonne!!!

MfG,
Flo

Edit: Ihr wisst ja wie das mit den Rechtschreibfehlern ist.
 
... ich vermute mal, das OB1_Prev_Cycle die Zeit von Aufruf OB1 bis Aufruf OB1 ist. Ich kann dazu jetzt allerdings keine Quelle benennen, aber alles andere würde (für mich) keinen Sinn machen ...
 
Zurück
Oben