TIA Wie programmiere ich richtig ein Timer oder Zähler in einen FB bei einer S7 1200

leix

Level-1
Beiträge
42
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
Ich habe folgendes Problem. In einen FB habe ich einen Timer und Zähler programmiert für eine Dosierpumpe in meinen Meerwassersbecken. So , wenn ich den FB einmal nutze läuft der Probelmlos. Wenn ich für zwei Pumpen den FB benutze läuft die zweie Pumpe zwar an aber es wird nicht gezählt und es läuft auch keine Zeit ab. Deswegen stoppt die Pumpe nicht.
Als Grundlage für die Programmierung habe ich das M3 Modul IEC- Zeiten und IEC- Zähler bei der SIMATIC S7-1200 verwendet.
Dabei schreibt Siemens....Einige Befehle wie Zeiten und Zähler verhalten sich wie Funktionsbausteine. Werden diese aufgerufen, so stellen sie ebenfalls Instanzen dar und benötigen einen zugeordneten
Speicherbereich z.B. in Form eines Instanz- Datenbausteins.
und genau hier ist bestimmt der Hund begaben!!!
Wenn ich also einen Timer/Zähler in einen FB programmiere so lege ich doch nur einen Intanzdatenbaustein an für den Timer/Zähler und nicht drei.
Meine Frage ist:
Wie muss ich nun den FB richtig programieren, damit ich ihn für drei/vier Pumpen benutzen kann:confused:. Also ein Aufruf FB für eine Pumpe.
Welche Information braucht ihr noch für meine Fragestellung:rolleyes:

Danke im voraus und ein Gruß von meinen Fischis ;-)

Gruß Jörg
 
Der Timer muss als Multiinstanz eingerichtet werden, damit der aufrufende FB mehrfach nutzbar ist.
PS: Und der aufrufende FB sollte möglichst nur Lokaldaten enthalten.

Ich denke, es wird einfacher, wenn Du mal einen Screenshot oder den pdf-Ausdruck von Deinem FB hier postest.
Oder noch besser das Projekt als Archiv, wenn es nicht der Geheimhaltung unterliegt.
 
In deinem Dosierbaustein (FB3) rufst du einen Timer auf dem du einen externen Instanzdb zuweist. Das darfst du tun. Dann darf FB3 aber nur ein einziges mal aufgerufen werden.

Wenn du FB3 wirklich öfter aufrufen willst. Darf in diesem KEIN FB mit einem Globalen DB aufgerufen werden, alle FB müssen im STAT Bereich des FB3 deklariert werden. Das hast du teilweise auch gemacht. Nämlich als IEC_TIMER_0_DB11 Unglücklicher Name aber okay. Diesen Namen gibst du statt des DB Namens beim Timeraufruf an.

Desweiteren empfehle ich dir keine FCs zur Programmkoordination zu nehmen. Ggfl brauchst du in deinem FC wo der FB3 aufgerufen wird ja diesen FB3 zweimal und dann doch nochmal n TON und vielleicht noch einen FB dann machst du in diesem FC diverse Aufrufe mit eigenen IDB. Diese könntest du viel schöner und übersichtlicher in der Schnittstelle eines FBs deklarieren der dann nur einen IDB für sich verwendet.


mfG René
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Rene, Hallo Leute,
Darf in diesem KEIN FB mit einem Globalen DB aufgerufen werden, alle FB müssen im STAT Bereich des FB3 deklariert werden. Das hast du teilweise auch gemacht. Nämlich als IEC_TIMER_0_DB11 Unglücklicher Name aber okay. Diesen Namen gibst du statt des DB Namens beim Timeraufruf an.

ok habe ich gemacht.....das gleiche:confused:

es nicht gezählt und es wird nicht gezeitet

oder muss ich jetzt den den FB drei mal unter anderen Namen aufrufen? Wo ist da der Sinn?

Gruß Jörg und bastel weiter:roll:
 
oder muss ich jetzt den den FB drei mal unter anderen Namen aufrufen? Wo ist da der Sinn?

Genau so. Jeder fb braucht natürlich seinen eigenen speicherbereich. Das ist der sinn dahinter.
Du brauchst t.b zwei zeiten in einem fb. Dann deklarierst du dieße im stat bereich dieses fb.
Diesen fb brauchst du jetzt z.b. Auch mehrmals. Dann braucht entweder jeder aufruf einen igenen instanzdb. Oder du deklarierst diesen wiederum im stat des aurufenden fbs. Erst dem obersten fb in dem alles andere drin ist, dem gibst du dann einen eigenen instanzdb.

Mfg René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Rene,
Ich habe in den drei FC(FC 13_Dosier1,FC 14_Dosier2,FC 15_Dosier3) den FB Dos_2 (FB4) aufgerufen und alles "beschaltet". Also habe ich auch an den Eingängen und Ausgängen für die Zeiten und Zähler meinen Datenbaustein(DE_PCL2) für Eingängen und meinen Datenbaustein (DA_PCL2) programmiert.
Jetzt wird gezählt und gezeitet aber sobald die erste Zeit oder der erste Zähler sein Endwert erreicht hat werden alle Ausgänge abgeschalten wenn alle zeitgleich eingeschalten wurden. Wenn sie nacheinander aktiviert , werden Dosierpumpe2 und Dosierpumpe3 nicht abgeschaltet.
Also mache ich etwas falsch. Aber was!

Ich mach jetzt noch ein paar Bilder von meinen Datenbausteinen

Gruß Jörg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Rene, Hallo Leute,
Ich habe den Fehler gefunden und mein Besen hat kein Stiel mehr:D.
Was habe ich falsch gemacht.
zuerst habe ich keinen Klick gemacht für die Multiinstanz. Bei Löschen des Netzwerkes bei Eingang des Zählers kein #Zählerimpuls gesetzt sondern voll I 0.4 eingehämmert:ROFLMAO: und dadurch wurde alles abgeschaltet wenn der Zähler von Dosierer 2 gezählt hat und seinen Endwert erreicht kann.

Ich danke euch alle für die Unterstützung

Gruß Jörg
 
Zurück
Oben