TIA FUP Zwangswechsel zweier Pumpen und Zeiterfassung.

SPS-Sloth

Level-2
Beiträge
51
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss im Automatikbetrieb zwei Pumpen im stündlichen Wechsel laufen lassen – außer der Druckmesser schlägt an, weil der Druck zu hoch ist.


Des Weiteren soll im Störungsfall einer Pumpe die jeweils andere sofort anspringen.


Außerdem benötige ich eine Laufzeiterfassung in Sekunden, Minuten und Stunden. Ich habe versucht, das mithilfe des Clock_1Hz-Bausteins umzusetzen, indem ich ihn auf einen Zähler führe, der sich nach Erreichen von 60 über einen Merker am Ausgang selbst zurücksetzt (auf 0), um dann weiterzuzählen.


In der Simulation mit PLCSIM zählt der Zähler zwar bis 60, und der Merker wird in der Diagnosesicht grün angezeigt – aber weder in PLCSIM noch am Reset-Eingang des Zählers wird der Wert als True erkannt. Das Ergebnis ist, dass der Zähler unendlich weiterzählt und ich dadurch keinen funktionierenden Minuten- oder Stundentakt erhalte.
 
Und wie üblich fehlt mal wieder ein Großteil der Infos.
Welche TIA Version, welche Steuerung, die simuliert wird, welche Firmware Version.
Dann zeig doch mal Dein Programm, vielleicht sieht man so schon wo es hackt.
Statt einem Zähler könnte eventuell auch ein TON helfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss im Automatikbetrieb zwei Pumpen im stündlichen Wechsel laufen lassen – außer der Druckmesser schlägt an, weil der Druck zu hoch ist.


Des Weiteren soll im Störungsfall einer Pumpe die jeweils andere sofort anspringen.


Außerdem benötige ich eine Laufzeiterfassung in Sekunden, Minuten und Stunden. Ich habe versucht, das mithilfe des Clock_1Hz-Bausteins umzusetzen, indem ich ihn auf einen Zähler führe, der sich nach Erreichen von 60 über einen Merker am Ausgang selbst zurücksetzt (auf 0), um dann weiterzuzählen.


In der Simulation mit PLCSIM zählt der Zähler zwar bis 60, und der Merker wird in der Diagnosesicht grün angezeigt – aber weder in PLCSIM noch am Reset-Eingang des Zählers wird der Wert als True erkannt. Das Ergebnis ist, dass der Zähler unendlich weiterzählt und ich dadurch keinen funktionierenden Minuten- oder Stundentakt erhalte.
Wie sieht dein Programm aus?

Es sieht so aus, dass du den Merker im Programm mehrmals nutzt und er deswegen im nächsten Zyklus keine 1 mehr meldet und den Zähler zurück setzt.

Anhand deiner Beschreibung alleine kann man dir wenig helfen.
 
1744286428709.pngDas habe ich gemacht. Mit TIA V17
1744286858995.pngIn der Simulation mit PLC SIM zählt der Zähler auch (hab die zählzahl mal auf 10 und 6 gestellt damit es nicht ewig dauert.
1744286981471.pngUnd da haben wir schon den ersten Fehlerfall. Obwohl M Flanke 1 Min (%M3.2) "grün" ist gilt er am R von IEC_Counter_0_DB (%DB2) nicht als TRUE wie zu erwarten oder gehofft sondern FALSE und somit wird da nix zurückgesetzt was Mist ist.

Ab da verzweifel ich hab soviele Varianten ausprobiert auch schon mit Timern und so egal wie ich bekomme das nicht richtig hin.
Und ohne das auch kein Wechsel der Pumpen da sie zeitlich bedingt wechseln sollen.
 
Wie sieht dein Programm aus?

Es sieht so aus, dass du den Merker im Programm mehrmals nutzt und er deswegen im nächsten Zyklus keine 1 mehr meldet und den Zähler zurück setzt.

Anhand deiner Beschreibung alleine kann man dir wenig helfen.
Das klingt interessant. Entschuldige meine Unwissenheit aber was bedeutet das einen Merker im Programm mehrmals nutzt? Man erstellt doch Merker um diese mehrmals im Programm zu nutzen bzw. wieder abzufragen. Warum sollte das zu einem Fehler führen?
 
Also eigentlich hab ich ihn wirklich nur dort nur für den einen Fall verwendet. Und würde ihn dann auch nur noch 2 mal auslesen einmal bei Pumpe1 und bei Pumpe2 mehr sollte ursprünglich nicht passieren.
 
die Merker 3.1 und 3.2 werden für jeden Zähler als Flankenmerker hergenommen - die dürfen NATÜRLICH auch nur einmal benutzt werden. Also jeder weitere Zähler bekommt dann neue Merker . Das war das u.A. mit dem "nur einmal benutzen" ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1744288598849.png

Ja ausschließlich dort. Deswegen fuchst mich dieser Fehler auch so weil er mir einfach nicht logisch erscheint.

Ich habe diese Schaltung ja von einer anderen Schaltung die sogar industriel verwendet wird abgeschaut und selbst die komplette Schaltung hat anfangs funktioniert nach ein paar simulationen wieder nicht. Egal ob Tage später alles neu zum testen oder so ich bekam es nie wieder funktionstüchtig hin.
 
Obwohl M Flanke 1 Min (%M3.2) "grün" ist gilt er am R von IEC_Counter_0_DB (%DB2) nicht als TRUE wie zu erwarten oder gehofft sondern FALSE und somit wird da nix zurückgesetzt
Der Klassiker: Schreibt dein Programm vielleicht auf MB/MW/MD, die mit M3.2 überlappen? MB3, MW2, MW3, MD0, MD1, MD2, MD3
siehe z.B. in Programminformationen > Belegungsplan > Merker

PS: gewöhne dir das schnell wieder ab, in Variablennamen Leerzeichen zu verwenden. Das geht so nur bei Siemens, und auch da nicht überall.
 
Zuletzt bearbeitet:
PS: gewöhne dir das schnell wieder ab, in Variablennamen Leerzeichen zu verwenden. Das geht so nur bei Siemens, und auch da nicht überall.

Da stimme ich zu, lies dir den Styleguide durch und versuch dich weitgehend dran zu halten. Das ist nicht der Weisheit letzter Schluss, aber eine gute Ausgangsbasis und es erspart dir in deiner weiteren Laufbahn viele Diskussionen mit Kunden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PS: gewöhne dir das schnell wieder ab, in Variablennamen Leerzeichen zu verwenden. Das geht so nur bei Siemens, und auch da nicht überall.
Danke ich werde mir das abgewöhnen.
Da stimme ich zu, lies dir den Styleguide durch und versuch dich weitgehend dran zu halten. Das ist nicht der Weisheit letzter Schluss, aber eine gute Ausgangsbasis und es erspart dir in deiner weiteren Laufbahn viele Diskussionen mit Kunden.
Ich google mal nach dem Styleguide.
1744610628860.png
Werdet ihr daraus schlau?
Also ist das ein bekannter Fehler bei der SPS? also sind die MB wenn ich das richtig sehe Byte innerhalb der SPS und ein M ist dann ein Bit wenn also irgendwas das komplette Byte MB3 verwendet um dinge zu speichern werden zustände von M3.0 bis M3.7 komplett überschrieben und damit das ergebnis verfälscht?
Dann bedeuten wahrscheinlich auch das DWORD für die Druckwertskalierung und die normierter Wert jeweils 4 Byte belegen also von MB1 bis MB4 und MB6 bis MB9 also bleiben mir erst wieder Merker übrig die über M10.0 hinausgehen. Gibt es einen Maximalwert an Merkern?

Habe ich das ganze jetzt richtig verstanden?


PS.: GUTEN MORGEN EUCH ALLEN und DANKE für eure Hilfe
 
1744612573566.png
Habe es 1. Umformuliert und 2. auf "freie" Merker gesetzt mit M10 und jetzt funktioniert es so wie ich es wollte.

Ich teste das Programm jetzt noch ein wenig weiter und falls mir nochmal was auffällt schreibe ich das hier herein.
 
Anhang anzeigen 86684
Werdet ihr daraus schlau?

Also ist das ein bekannter Fehler bei der SPS? also sind die MB wenn ich das richtig sehe Byte innerhalb der SPS und ein M ist dann ein Bit wenn also irgendwas das komplette Byte MB3 verwendet um dinge zu speichern werden zustände von M3.0 bis M3.7 komplett überschrieben und damit das ergebnis verfälscht?
Dann bedeuten wahrscheinlich auch das DWORD für die Druckwertskalierung und die normierter Wert jeweils 4 Byte belegen also von MB1 bis MB4 und MB6 bis MB9 also bleiben mir erst wieder Merker übrig die über M10.0 hinausgehen. Gibt es einen Maximalwert an Merkern?

Habe ich das ganze jetzt richtig verstanden?
Naja, das ist kein bekannter "Fehler" der SPS.
Das ist ein Fehler deiner Seits, die SPS macht alles korrekt. -> Ein reiner Programmierfehler

Ob jetzt dein MD1 verfälscht wird oder deine Merkerbits, welche du aus dem MD1 nutzt hängt von deinem Programm ab.
Was zuletzt geschrieben/gesetzt wird.

Aber im Prinzip erzeugst du dir deinem Fall, egal wie, nur Probleme.

Es gibt Gründe die einzelnen Bits aus einem Doppelword auszuwerten, im Programm zu nutzen und auch zu "verfälschen".
Jedoch im Fall eines 0815-Programms ist das eher ungewünscht und erzeugt nur Probleme, wie du sie hattest.

Daher ist das bei deiner Fehlerbeschreibung der Regelfall, dass Merkerbereiche doppelt verwendet wurden.

Also für die Zukunft, darauf achten, dass du Merkerbereiche nicht doppelt verwendest.
 
Ja, in deinem Programm gibt es mindestens einen DWORD-Zugriff auf das MD1, und einige Bool-Zugriffe auf Bit-Merker in diesem MD1. Wenn auf das MD1 geschrieben wird, dann werden auch alle Bits (Bit-Merker M1.0 ... M4.7) innerhalb des MD1 überschrieben/plattgemacht. Also mal die Querverweise vom MD1 checken. In Step7 classic V5.x braucht man nur bei "Gehe zu Verwendungsstelle" einen Haken bei "überlappende Zugriffe" machen. Ob es bei TIA auch so eine nützliche Funktion gibt und wo die ggf. bei den Querverweisen versteckt ist, weiß ich jetzt nicht.

Also ist das ein bekannter Fehler bei der SPS? also sind die MB wenn ich das richtig sehe Byte innerhalb der SPS und ein M ist dann ein Bit wenn also irgendwas das komplette Byte MB3 verwendet um dinge zu speichern werden zustände von M3.0 bis M3.7 komplett überschrieben und damit das ergebnis verfälscht?
Das ist kein "Fehler" der SPS, sondern eine Bildungslücke des Programmierers, wenn der nicht weiß, dass z.B. die M3.0 ... M3.7 im Merkerbyte MB3 liegen, was wiederum ein Teil des MW2 und des MW3 und der MD0/MD1/MD2/MD3 ist. Mir als Programmierer mit > 25 Jahren Erfahrung mit S7 ist das so geläufig, dass ich gar nicht weiß, ob und wo das in der TIA Hilfe oder Handbüchern erklärt wird. Vielleicht mit Suchworten wie "direkte Adressierung", Speicherbereiche, Slice,, ...?

Gibt es einen Maximalwert an Merkern?
ja. Je nach CPU-Typ (und evt. Firmware-Version) ist die Größe des Speicherbereichs der Merker unterschiedlich groß und teilweise in der Gerätekonfig der CPU einstellbar. siehe technische Daten der verwendeten CPU. Z.B. deshalb ist es auch essentiell, dass man als Fragesteller angeben sollte, welche CPU man verwendet... Welche CPU verwendest du?
Die Größe und maximalen Nummern von CPU-Ressourcen kann man am einfachsten online in der CPU unter "Leistungsdaten" sehen. Zumindest bei S7-300/400. Bei S7-1200 und S-1500 weiß ich nicht sicher, ob TIA das da auch anzeigt.
 
Zurück
Oben