Probleme mit FB Aufruf Überschneidung

stoag

Level-2
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

vorab meine Systeminfos:

Simatic Manager Version 5.4 + SP4
CPU Siemens CPU 416-2

Situation:

Ich habe Einen Behälter mit Verschiedenen Klopferbatterien.

Jede Batterie bestzeht aus ein bis max. drei Rüttler.
Die Rüttler sollen nacheinander mit einer eingestellten Impuls/Pausezeit angesteuert werden.

Da es mehrer Rüttlergruppen (Batterien) gibt habe ich den FB 243 erstellt siehe Code unten.


Den FB 242 habe ich mehrfach aufgerufen jeweils mit einen eigenen Instanz DB.

Problem:

Das Proble zeigt wie folgt...

Der Merker 6.1 Auto_Ein kommt für beide aufrufe.
Der Merker 6.0 Ist ein Impulsmerker ( 1 Impuls/sek)
R_Anzahl = Anzahl der angeschlossenen Rüttler
R1_ein = Rüttlerausgang
R1_ist_ein = Rückmeldung für Visu
Hand_Impuls = Impulszeit für Hand und AUTO
Hand_Pause = Pausenzeit für Hand und AUTO

Nun sollen die einzelnen Batterien mit der eingestellten Zeit Rütteln. Beim ersten aufruf funktioniert das ganze TipTop beim zweiten Aufruf im nächten Netzwerk funktioniert es nicht die Rüttler die im zweiten Aufruf nach anderen zeiten rütteln sollten orientieren sich irgendwie anden für den ersten Aufruf eingestellten Zeiten und sind aber total aus der Reihe. Es sieht so aus wi wenn es da eine Überschneidung gäbe. Wenn ich den FB 243 als FB244 kopiere und die zweite Batterie über den FB 244 anspreche dann funktioniert das ganze.

...so ganz schön viel Text - hier der Code:

FB213 Aufrufe:

Code:
 Netzwerk 1:
 
 
CALL FB 243 , DB130
R_Auto_Ein :=M6.1
R_Hand_Ein :=DB104.DBX33.7
R_Anzahl :=3
Impuls_1s :=M6.0
Hand_Impuls:=DB153.DBW42
Hand_Pause :=DB153.DBW44
R1_ein :=A67.3
R2_ein :=A67.4
R3_ein :=A66.6
R1_ist_ein :=DB104.DBX36.4
R2_ist_ein :=DB104.DBX37.7
R3_ist_ein :=DB104.DBX37.6
 
 
Netzwerk 2:
 
CALL FB 243 , DB129
R_Auto_Ein :=M6.1
R_Hand_Ein :=DB104.DBX33.6
R_Anzahl :=2
Impuls_1s :=M0.6
Hand_Impuls:=DB153.DBW46
Hand_Pause :=DB153.DBW48
R1_ein :=A67.5
R2_ein :=A67.6
R3_ein :=
R1_ist_ein :=DB104.DBX39.2
R2_ist_ein :=DB104.DBX39.3
R3_ist_ein :=

FB 243 Programmlogik:

Code:
Netzwerk 1 / Impulszeit - Pausenzeit Rüttler:
 
//---Zähler IMPULSZEIT
//----------------------------------
U( 
O #R_Hand_Ein
O #R_Auto_Ein
) 
UN #HM_Hand_Pausezeit
U #Impuls_1s
FP #flanke_time_imp
= #imp_sp
U #imp_sp
SPBN m01
L #Zeit
L 1
+I 
T #Zeit // Zeit erhöhen wenn Impuls da ist
L #Zeit // Zeit Vergleichen mit Impulszeit
L #Hand_Impuls
>I 
SPBN m01
//------ Pausezeit setzen wenn zeit abgelaufen ist
SET 
S #HM_Hand_Pausezeit
L 0
T #Zeit
SPA ende // Sprung ans Ende des NW
m01: NOP 0
//--- Zähler PAUSEZEIT
//----------------------------------
U( 
O #R_Hand_Ein
O #R_Auto_Ein
) 
U #HM_Hand_Pausezeit
U #Impuls_1s
FP #flanke_time_pause
= #pause_sp
U #pause_sp
SPBN m02
L #Zeit
L 1
+I 
T #Zeit // Zeit erhöhen wenn Impuls da ist
L #Zeit // Zeit Vergleichen mit Pauseszeit
L #Hand_Pause
>I 
SPBN m02
//------ Pausezeit zurücksetzen
SET 
R #HM_Hand_Pausezeit
L 0
T #Zeit
m02: NOP 0
// Zähler zurücksetzen wenn keine Handbedienung
UN #R_Hand_Ein
UN #R_Auto_Ein
SPBN ende
SET 
R #HM_Hand_Pausezeit
L 0
T #Zeit
ende: NOP 0
 
 
Netzwerk 2 / Rüttler Impulszeit Auto/Handbetrieb:
 
U #R_Hand_Ein
UN #HM_Hand_Pausezeit
O 
U #R_Auto_Ein // Impulszeit von Phase
UN #HM_Hand_Pausezeit
= #HM_Ruettler_Impulszeit
 
 
Netzwerk 3 / Auswahl 1,2 oder 3 Rüttler:
 
L #R_Anzahl
L 1
==I 
= #HM_1_Ruettler
L #R_Anzahl
L 2
==I 
= #HM_2_Ruettler
L #R_Anzahl
L 3
==I 
= #HM_3_Ruettler
 
Netzwerk 4 / Rüttler 1 ein:
 
U #HM_Ruettler_Impulszeit
UN #HM_Ruettler1_ist_fertig
= #R1_ein // Ausgang
= #R1_ist_ein // Anzeige Visu
// Merken dass Rüttler ein war
U #R1_ein
FN #HM_FN_Ruetttler1_fertig
S #HM_Ruettler1_ist_fertig
 
Netzwerk 5 / Rüttler 2 ein:
 
U #HM_Ruettler_Impulszeit
UN #HM_Ruettler2_ist_fertig
U #HM_Ruettler1_ist_fertig
= #R2_ein // Ausgang
= #R2_ist_ein // Anzeige Visu
// Merken dass Rüttler ein war
U #R2_ein
FN #HM_FN_Ruetttler2_fertig
S #HM_Ruettler2_ist_fertig
 
 
Netzwerk 6 / Rüttler 3 ein:
 
U #HM_Ruettler_Impulszeit
UN #HM_Ruettler3_ist_fertig
U #HM_Ruettler1_ist_fertig
U #HM_Ruettler2_ist_fertig
= #R3_ein // Ausgang
= #R3_ist_ein // Anzeige Visu
// Merken dass Rüttler ein war
U #R3_ein
FN #HM_FN_Ruetttler3_fertig
S #HM_Ruettler3_ist_fertig
 
 
Netzwerk 7 / Bits zurücksetzen:
 
U #HM_Ruettler3_ist_fertig
O 
U #HM_2_Ruettler
U #HM_Ruettler2_ist_fertig
O 
U #HM_1_Ruettler
U #HM_Ruettler1_ist_fertig
R #HM_Ruettler1_ist_fertig
R #HM_Ruettler2_ist_fertig
R #HM_Ruettler3_ist_fertig 
 
[CODE/]
 

Anhänge

  • spsforum.zip
    150,3 KB · Aufrufe: 1
Zuletzt bearbeitet:
Hallo,
Ich habe jetzt nicht den Code im Einzelnen durch-akadiert ... aber ...
wo in dem FB sind die ganzen Hilfs- und Flankenmerker definiert ?
Im Bereich TEMP oder im Bereich STAT ? Wenn du welche (oder alle) davon im TEMP-Bereich definiert hast, dann schieb die doch mal in den STAT-Bereich ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

auf die Schnelle ist mir gerade aufgefallen, dass du im NW2 den Takteingang mit 0.6 und nicht mit 6.0 belegt hast...

Randbemerkung, wenn du den Takt für alle gleich hälst, könntest du dir auch den Eingang sparen und den Takt im FB direkt mit M6.0 verwenden, nur so Allgemein.
 
Hallo,

auf die Schnelle ist mir gerade aufgefallen, dass du im NW2 den Takteingang mit 0.6 und nicht mit 6.0 belegt hast...

Randbemerkung, wenn du den Takt für alle gleich hälst, könntest du dir auch den Eingang sparen und den Takt im FB direkt mit M6.0 verwenden, nur so Allgemein.

Ich würde trotzdem den Input für den Taktmerker vorziehen.
 
Ich würde trotzdem den Input für den Taktmerker vorziehen.

machen wir Firmen intern auch ähnlich, allerdings sehe ich persönlich bei sowas wenig Sinn, wir haben mehrere Standardmerker die ich bei zahlreichen Aufrufen als Input eingeben muss... Wenn ich schon einen Standardmerker habe würde ich den persönlich auch fest reinschreiben, für das eine Prozent der Projekte wo man die Merker abändern muss finde ich die Inputs überflüssig...
 
Zurück
Oben