TIA Taktgeber läuft nach SPS Start nicht

Beiträge
64
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,

Ich habe hier ein seltsames Problem:
In meinem FB für einen Motor mit Umrichter habe ich einen Takt erstellt. Dafür benutze ich ein TON-Timer und ein TOF-Timer als Multiinstanz (Siehe Bild). Immer wenn die SPS neu gestartet ist läuft der TON-Timer nicht ab? Wenn ich aber einmal ein "false" vor dem Timer setze -> übertrage, ihn dann wieder lösche und übertrage funktioniert das wie gewünscht.
Der Motor Baustein wird eben falls 3x als Multiinstanz in einem FB aufgerufen. In anderen Bausteinen wird der Takt genauso programmiert und macht keinen ärger?

Takt.PNG


Habt ihr eine Idee woran das liegen kann?
 
Ist denn dein flag_first_scan mal true? Sodass der Eingang an dem ersten Timer auch false ist?

Die Timer benötigen eine steigende Flanke um zu starten, wenn der Eingang beim ersten Aufruf schon true ist, laufen die Timer nicht los.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo PP_Programmierer,

dieses Problem gibt es seit S5 (S3) Zeiten. Wenn du mehrere Zeitglieder verschaltets musst du eine Variable (Merkerbit oder Datenbit) dazwischenschalten.
Aber wenn du nur einen Blinktakt benötigst, warum fragst du nicht einfach ein Bit deines Taktmerkerbytes ab.
 
Ist denn dein flag_first_scan mal true? Sodass der Eingang an dem ersten Timer auch false ist?

Die Timer benötigen eine steigende Flanke um zu starten, wenn der Eingang beim ersten Aufruf schon true ist, laufen die Timer nicht los.
Der sollte bei einem Neustart für einen Zyklus "eins" sein.

FirstScan.PNG


rufe den Ausgang auf.
Also #ton_TMR_Clock.q auf eine variable

oder einen -(TON)- verwenden
Wie meinst du das?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo PP_Programmierer,

dieses Problem gibt es seit S5 (S3) Zeiten. Wenn du mehrere Zeitglieder verschaltets musst du eine Variable (Merkerbit oder Datenbit) dazwischenschalten.
Aber wenn du nur einen Blinktakt benötigst, warum fragst du nicht einfach ein Bit deines Taktmerkerbytes ab.
Dann wundert es mich aber warum das in einem anderen FB (z.B. Betriebsstundenzähler) funktioniert.
Wir machen das in unserer Bibliothek so, weil wir Kunden haben, die das Taktmerkerbyte nicht zulassen.
 

TL/DR: "Also die Rückführung von Instanzsignalen ist keine gute Idee. War es noch nie und wird es auch nie sein."

Es ist aber empfehlenswert, den Beitrag trotzdem ganz zu lesen.
 
1) Hast du vielleicht den Startwert für IN in der Timerdeklaration des TON auf TRUE gesetzt? Vielleicht eine Momentaufnahme vom DB mit der Timer-Instanz gemacht und wieder in die CPU geladen?
Ganz fies: wenn die TON-Instanz remanent ist und TON.IN beim Ausschalten TRUE war. Oder wenn jemand DB-Aktualdaten von DB mit Timer-Instanzen aus der CPU sichert und wieder in die CPU lädt. Oder eine Momentaufnahme von DBs mit Timer-Instanzen macht und in die Startwerte kopiert. Oder wenn TIA beim Hochrüsten einfach selbständig Häkchen bei "Einstellwerte" setzt: https://www.sps-forum.de/threads/iec-timer-phänomen-tia-v15-1.99199/
Also: TON.IN am besten immer mit FirstScan verknüpfen oder im Anlauf mit FALSE aufrufen.

2) Wo kommt dein #Flag_First_Scan her? Ist das vielleicht in Temp?

Alternative: Anstatt selbst einen 1Hz-Takt zu basteln, könntest du auch einfach eine Kopie vom Bit 5 des CPU-Taktmerkerbyte verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1) Hast du vielleicht den Startwert für IN in der Timerdeklaration des TON auf TRUE gesetzt? Vielleicht eine Momentaufnahme vom DB mit der Timer-Instanz gemacht und wieder in die CPU geladen?


2) Wo kommt dein #Flag_First_Scan her? Ist das vielleicht in Temp?

Alternative: Anstatt selbst einen 1Hz-Takt zu basteln, könntest du auch einfach eine Kopie vom Bit 5 des CPU-Taktmerkerbyte verwenden.
ZU1
nein, da ist alles sauber :(

ZU2
die sind Statisch
 
Ich habe jetzt einfach die Antriebsfreigabe vor den Timer gesetzt. Das funktioniert jetzt.

Also gehe ich jetzt davon aus das es einfach an der steigenden Flanke liegt. Warum das in den anderen Bausteinen funktioniert bleibt wohl erst mal ein Geheimnis :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nochmal: wie genau erzeugst du das #Flag_First_Scan? Ist der von dir in #7 gezeigte Code alles?
Ich würde das Flag nicht mit einem P_TRIG erzeugen, weil "philosophisch gesehen" kann man ein Flag "First_Scan" nicht mit einer steigenden Flanke erzeugen (jetzt 1 und war vorher 0), weil es keinen Zustand "vorher" gibt ;)
Man kann natürlich "unphilosophisch" tricksen und irgendwas basteln, da muss man dann aber sehr genau aufpassen, dass da keine Remanenz reingrätscht... Stellt deine geheimnisvolle/unbekannte CPU keine Information zur Verfügung, wann der First_Scan ist?

PS: gib dir beim Beitrag schreiben mal bitte Mühe und schreibe nicht deine Beiträge komplett innerhalb von Zitaten. Dann kann man die nämlich nicht zitieren...
 
Also, das Problem wie ich jetzt festgestellt habe, ist die Sache mit der steigenden Flanke am Eingang des TON. Das ist darauf zurückzuführen das ich meinen FirstScan nicht sauber Programmiert habe.
Zusätzlich habe ich jetzt auch noch die Antriebsfreigabe mit reingenommen, so das ich definitiv eine steigende Flanke bekomme.

Danke an allen für eure Hinweise
 
Zurück
Oben