-> 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:
FB 243 Programmlogik:
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
Zuletzt bearbeitet: