Step 7 S5Timer ist nach dem Laden nicht sofort ansprechbar

blubbb

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

stehe vor folgendem Problem, ich habe eine Programm geschrieben mit mehreren Timern welches auch funktioniert.
Alle Timer wurden nur einmal benutzt und funktionieren auch.

Jedoch der erste Timer funktioniert nur nachdem ich die CPU einmal auf STOP und dann wieder auf RUN stelle dann klappt alles ohne Probleme.
Halt nur nach dem ersten Laden der Bausteine bzw. ersten CPU Start.

Hat jemand eine Idee was es sein könnte oder hatte schon mal jemand so ein Problem?

Lieben Gruß und besten Dank
 
Wie wär's mit einem Codeauszug?
Zumindest meine Kristallkugel ist leider gerade defekt.
;)


PS: Meist sind irgendwelche Sprünge, die die Flankenerkennung verhindern, schuld.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
,
Timer benötigen eine steigende Flanke
am S-Eingang.

Prüfe mal dieses Signal !

Der Timer MUSS erstmal ein "0"-Signal
erkennen und anschliessend das "1"-
Signal, auch bei einem CPU-Start.

Du setzt das Signal bei CPU-Start vielleicht
schon vor dem ersten Timer-Aufruf auf "1",
d.h. er sieht kein "0"-Signal bei seinem ersten
Aufruf.
Dann erkennt er natürlich keine steigende
Flanke mehr im nächsten Zyklus an seinem
S-Eingang.
 
@Softmachine
Solange der Timer nicht remanent ist, ist alles für den Timer eine steigende Flanke nach dem CPU start.

Auch das würde funktionieren:
SET
L S5t#10s
SE T0

Mfg
Manuel
 
//Zeitbaustein und Taktsignalerzeugung
Zeit1_1:= S_PEXT(T_NO:=Zeitbaustein_Nocke, S:=Zeit_Merker, TV:=Zeit_umgewandelt, Q=>Zeit_Merker_Inv);

IF Zeit_Merker_Inv =TRUE AND Zeit_Merker=TRUE
THEN Zeit_Merker :=FALSE;

ELSIF Zeit_Merker_Inv =FALSE
THEN Zeit_Merker :=TRUE;

END_IF;
 
hallo blubb,

wenn ich es richtig verstehe, willst du das die Zeit abläuft und danach wieder startet und wieder abläuft.

Leider kenn i den S_PEXT Timer nicht bzw. diesen Ausdruck. Aber wenn es eine speichernde Einschaltverzögerung ist, bleibt Q solange aktiv, bis du ihn resetierst. Da hilft auch kein erneutes starten.

mfg
Kapo
 
So sollte es funktionieren:
Code:
//Zeitbaustein und Taktsignalerzeugung
Zeit1_1:= S_PEXT(T_NO:=Zeitbaustein_Nocke, S:=Zeit_Merker, TV:=Zeit_umgewandelt, Q=>Zeit_Merker_Inv);
Zeit_Merker := NOT Zeit_Merker_Inv;

So finde ich es besser:
Code:
//Zeitbaustein und Taktsignalerzeugung
Zeit1_1:= S_ODT(T_NO:=Zeitbaustein_Nocke, S:=Zeit_Merker, TV:=Zeit_umgewandelt, Q=>Zeit_Merker_Inv);
Zeit_Merker := NOT Zeit_Merker_Inv;

//Auswertung bei Bedarf:
zeit_laeuft := Zeit_Merker AND NOT Zeit_Merker_Inv;
zeit_fertig_puls := Zeit_Merker_Inv;

Harald
 
Das Problem besteht weiter hin erst nach einem einmaligen Neustart der CPU nach dem ersten laden funktioniert dieser Timer.

Auch PN/DP´s Lösung funktioniert genau wie meine.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also um mal ganz ehrlich zu sein, kapier ich noch nicht mal was nicht funktionieren soll!

Funktioniert der Timer nun nach dem Baustein Laden? Wie Oft?
Funktioniert der Timer nach dem CPU-Neustart? Wie Oft?
Ab wann funktioniert er nicht mehr, und falls ja wie glaubst du das zu erkennen.

Kannst du auch mal eine Frage formulieren die ein normaldenkender Mensch überhaupt versteht?
 
Also ich lade das komplette Programm in den Simulator, dann funktioniert der Timer beim ersten mal nicht . Erst wenn ich die CPU einmal Stoppe und wieder einschalte dann funktioniert dieser wieder ohne irgendwelche Änderungen im Programm.

Der Timer sollte von Anfang an laufen mit seiner eingestellten Zeitvorgabe. Das tut er allerdings erst nach dem Neustart der CPU.

Code:
//Zeitbaustein und Taktsignalerzeugung
Zeit1_1:= S_PEXT(T_NO:=Zeitbaustein_Nocke, S:=Zeit_Merker, TV:=Zeit_umgewandelt, Q=>Zeit_Merker_Inv);
Zeit_Merker := NOT Zeit_Merker_Inv;
 
Dann zeige mal mehr von Deinem Programm:
- Deklaration aller Variablen
- Aufruf Deines Programms
- Deklaration der Aufrufparameter
- ist Dein Programm ein FC oder FB? (FB --> mal den Instanz-DB neu generieren und laden)
- welchen Wert haben die Variablen Zeitbaustein_Nocke und Zeit_umgewandelt
- ...

Kann es sein, daß Zeitbaustein_Nocke, Zeit_Merker oder Zeit_umgewandelt in TEMP liegen und nicht in jedem Zyklus vor dem Timeraufruf etwas zugewiesen wird?

In meiner PLCSIM-Simulation in einem FC funktioniert der Timer wie er soll. Ohne CPU-Stop. Auch wenn ich den Baustein in x-beliebigen Situationen nachlade.

Kannst Du eventuell das Programm auf einen Baustein und den Baustein-Aufruf zusammenkürzen, bei dem das Problem reproduzierbar auftritt?

Harald
 
Also das Problem ist behoben. Allerdings erst durchs reduzieren des Projekts danke an PN/DP.

Da der Timer sofort losläuft und am Anfang nach dem Laden die Zeit noch keinen Wert also 0ms hat, denke ich das der Timer dadurch einen weg bekommt.

Nach dem man eine Eingabe getätigt hat schreibt er ja den Wert in die Zeitvorgabe und nach anschließendem Laden steht auch sofort ein Wert in der Zeitvorgabe bei Programmstart.

Ich habe die Zeile ergänzt durch die Bedingung das ein Wert in Zeit_umgewandelt stehen muss bis der Timer überhaupt startet:

Code:
//Zeitbaustein und Taktsignalerzeugung
Zeit1_1:= S_PEXT(T_NO:=Zeitbaustein_Nocke, S:=Zeit_Merker, TV:=Zeit_umgewandelt, Q=>Zeit_Merker_Inv);
Zeit_Merker := NOT Zeit_Merker_Inv AND (Zeit_umgewandelt > 0);

Danke an PN/DP und alle anderen für eure Hilfe.
 
Also das Problem ist behoben.
Da muß ich Dich leider enttäuschen, die eigentliche Ursache Deines Problems ist nicht behoben, nur ein halbfertiger Workaround gefunden, der meistens (aber nicht immer) hilft.

Wenn Du ein Starten des Timers mit T#0s sicher verhindern willst, dann muß Du "Zeit_umgewandelt" VOR dem Timeraufruf prüfen.

So funktioniert der Timer S_PEXT: bei steigender Flanke von "Zeit_Merker" an S_PEXT.S wird der Zeitwert von "Zeit_umgewandelt" an S_PEXT.TV übernommen und danach nicht mehr weiter beachtet.


Doch wo ist die Ursache Deines Problems, daß Du die CPU nach Laden des Programmbausteins in Stop setzen mußt?

Nur dadurch daß Du einen Programmbaustein in die CPU lädst wird nicht der aktuelle Wert in der Variablen "Zeit_umgewandelt" geändert. Hat die Variable einen Wert vor dem Laden, dann hat sie ihn auch noch nach dem Laden. Es sei denn, die Variable "Zeit_umgewandelt" liegt in TEMP oder OUT (eines FC) - dann ist deren Wert nach dem Laden unbestimmt! Dies mußt Du überprüfen.
Oder die Variable liegt in einem (Instanz-)DB und Du lädst auch den DB? Dann gib der Variable einen vernünftigen Anfangswert und Aktualwert im offline-DB.

Also wenn Du willst, daß wir die Ursache Deines Problems finden, dann zeige uns mehr von Deinem Programm und beantworte die Fragen aus #17

Harald
 
Zurück
Oben