FB Stern/Dreieck

Max4

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

kurz vor dem Nervenzusammenbruch poste ich nun doch mal ein paar Fragen zu FB`s......;)

Folgende Lage :

Sechzig Rührwerke (7,5kw Motoren) sollen in Stern/Dreieck anlaufen. Alle 3h soll ein Paddel eine pastöse Masse für 5min umrühren.

Die S/D Umschaltung mit TON`s (SFB4) im FB funktioniert dank der Foruminfos sehr gut. Multiistanz hab ich hinbekommen.

Ich hab nun für jedes Paddel ein Netzwerk wo der FB aufgerufen wird.
Mein Problem ist wenn ich Paddel 1 starte, laufen die anderen 59 auch los..:D unabhängig vom Status des Starteingangs.

Wenn ich das ganze mit einem FC und S_EVERZ funktioniert die ganze Geschichte.

Wäre klasse wenn da mal jemand drüber gucken könnte.

Gruß
Max



FUNCTION_BLOCK "Stern_Dreieck"
TITLE =Stern/Dreieck Motorstarter
VERSION : 0.1


VAR_INPUT
Ein : BOOL ;
Aus : BOOL ;
Schutz : BOOL ;
Laufzeit : TIME ;
SD_Pause : TIME ;
END_VAR
VAR_OUTPUT
K_Netz : BOOL ;
K_Stern : BOOL ;
K_Dreieck : BOOL ;
END_VAR
VAR
T_Stern : "TON"; //Laufzeit Sternschaltung
T_Pause : "TON"; //Pausenzeit Stern AUS ==> Dreieck EIN
END_VAR
VAR_TEMP
Temp_TStern : BOOL ;
Temp_TPause : BOOL ;
Temp_Stern : BOOL ;
Temp_Netz : BOOL ;
Temp_Dreieck : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =K_Stern

U #Ein;
S #K_Stern;
U( ;
O #T_Stern.Q;
O #Aus;
O #Schutz;
) ;
R #K_Stern;
NOP 0;
NETWORK
TITLE =K_Netz

U #K_Stern;
S #K_Netz;
U( ;
O #Aus;
O #Schutz;
) ;
R #K_Netz;
U #K_Netz;
= #Temp_Netz;
NETWORK
TITLE =T_Stern
//Laufzeit Stern
U #Temp_Netz;
= L 1.0;
BLD 103;
CALL #T_Stern (
IN := L 1.0,
PT := #Laufzeit);

NOP 0;
NETWORK
TITLE =Temp_TStern

U #T_Stern.Q;
= #Temp_TStern;
NETWORK
TITLE =T_Pause
//Pausenzeit für die Umschaltung von Stern nach Dreieck
//
U #Temp_TStern;
= L 1.0;
BLD 103;
CALL #T_Pause (
IN := L 1.0,
PT := #SD_Pause);

NOP 0;
NETWORK
TITLE =Temp_TPause

U #T_Pause.Q;
= #Temp_TPause;
NETWORK
TITLE =#K_Dreieck

U #Temp_TPause;
S #K_Dreieck;
U( ;
O #Aus;
O #Schutz;
) ;
R #K_Dreieck;
NOP 0;
END_FUNCTION_BLOCK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
so wie ich das verstehe, brauchst du 60 multiinstanzen

Echt ?

Ich hab das ganze natürlich erstmal in drei NW getestet, und vorher die Last von den Schützen abgeklemmt.

In jedem NW hab ich immer den einen FB aufgerufen, und natürlich jeweils die IN/OUT Beschaltung angepasst.

Gruß
Max
 
Hallo Max,
wie hast du den deine Multiinstanz erzeugt, das würde mich mal
intressieren. Hast du vlt. für jeden Bausteinaufruf den selben
Instanz-DB genommen?

Was ich auch nicht so schön finde ist das du deine Temp. Lokaldaten direkt
ansprichst, aber auch variablen im Temp Bereich deklariert hast.
War das absicht oder kommt das vom wandeln FUP -> AWL?

Code:
FUNCTION_BLOCK "Stern_Dreieck"
TITLE =Stern/Dreieck Motorstarter
VERSION : 0.1
 
 
VAR_INPUT
Ein : BOOL ; 
Aus : BOOL ; 
Schutz : BOOL ; 
Laufzeit : TIME ; 
SD_Pause : TIME ; 
END_VAR
VAR_OUTPUT
K_Netz : BOOL ; 
K_Stern : BOOL ; 
K_Dreieck : BOOL ; 
END_VAR
VAR
T_Stern : "TON"; //Laufzeit Sternschaltung
T_Pause : "TON"; //Pausenzeit Stern AUS ==> Dreieck EIN
END_VAR
VAR_TEMP
Temp_TStern : BOOL ; 
Temp_TPause : BOOL ; 
Temp_Stern : BOOL ; 
Temp_Netz : BOOL ; 
Temp_Dreieck : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =K_Stern
 
U #Ein; 
S #K_Stern; 
U( ; 
O #T_Stern.Q; 
O #Aus; 
O #Schutz; 
) ; 
R #K_Stern; 
NOP 0; 
NETWORK
TITLE =K_Netz
 
U #K_Stern; 
S #K_Netz; 
U( ; 
O #Aus; 
O #Schutz; 
) ; 
R #K_Netz; 
U #K_Netz; 
= #Temp_Netz; 
NETWORK
TITLE =T_Stern
//Laufzeit Stern 
U #Temp_Netz; 
[COLOR=red]= L 1.0; 
[/COLOR]BLD 103; 
CALL #T_Stern (
IN := L 1.0,
PT := #Laufzeit);
 
NOP 0; 
NETWORK
TITLE =Temp_TStern
 
U #T_Stern.Q; 
= #Temp_TStern; 
NETWORK
TITLE =T_Pause
//Pausenzeit für die Umschaltung von Stern nach Dreieck
//
U #Temp_TStern; 
[COLOR=red]= L 1.0;[/COLOR] 
BLD 103; 
CALL #T_Pause (
IN := L 1.0,
PT := #SD_Pause);
 
NOP 0; 
NETWORK
TITLE =Temp_TPause
 
U #T_Pause.Q; 
= #Temp_TPause; 
NETWORK
TITLE =#K_Dreieck
 
U #Temp_TPause; 
S #K_Dreieck; 
U( ; 
O #Aus; 
O #Schutz; 
) ; 
R #K_Dreieck; 
NOP 0; 
END_FUNCTION_BLOCK

gruß Helmut
 
Hi,

ich denke, dass dein Problem nicht vom geposteten Baustein kommt.
Eher von den 60 Aufrufen!

Da sollten 60 Instanz DBs angelegt sein.
Oder wieder Multiinstanz...

Micha
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du vlt. für jeden Bausteinaufruf den selben
Instanz-DB genommen?

Ja.......:oops:

War das absicht oder kommt das vom wandeln FUP -> AWL

ähm....weder noch. Das ist wohl von meinem ganzen ausprobieren übrig geblieben. Bevor das in die Maschine geht wollt ich das noch schön schick machen.
 
Ja.......:oops:



ähm....weder noch. Das ist wohl von meinem ganzen ausprobieren übrig geblieben. Bevor das in die Maschine geht wollt ich das noch schön schick machen.

funktionieren wird das mit deinen Lokaldaten da du bisher noch keine
überneidung hast, ich würde das aber nicht so nutzen. Mach es doch so.
Code:
U #K_Netz; 
= #Temp_Netz; 
NETWORK
TITLE =T_Stern
//Laufzeit Stern 
CALL #T_Stern (
IN := #Temp_Netz; 
PT := #Laufzeit);

was auch geht wäre so.
Code:
U #K_Netz; 
= #T_Stern.IN; 
NETWORK
TITLE =T_Stern
//Laufzeit Stern 
CALL #T_Stern (
IN :=  
PT := #Laufzeit);
 
Ja dasselbe Problem hatte ich auch schon mal.
Bei mir war es eine Graph-Schrittkette die ich mehrfach aufgerufen haben, was aber bedeutet dass ich jedes Mal einen anderen InstanzDB brauchte.

Also wenn du jeweils einen eigenen InstanzDB zuordnest ist alles wieder IO.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mann, Mann - da hab ich mich wie ein Propeller im Kreis gedreht......

Jetzt funktioniert die Geschichte wie geplant.

Herzlichen Dank für eure schnelle und kompetenten Antworten.

Gruß
Max
 
Was ich auch nicht so schön finde ist das du deine Temp. Lokaldaten direkt
ansprichst, aber auch variablen im Temp Bereich deklariert hast.
War das absicht oder kommt das vom wandeln FUP -> AWL?

Kommt vom Wandeln KOP/FUP -> AWL. Stell kein Problem dar.
Erkennst du am BLD 103

Gruß
Dieter
 
Hallo Max

Du hast einen grundsätzlichen Fehler in der Schnittstelle

Code:
VAR_OUTPUT
K_Netz : BOOL ; 
K_Stern : BOOL ; 
K_Dreieck : BOOL ; 
END_VAR

Du musst diese Ausgänge als IN/Out deklarieren.
Da diese sonst im nächsten Zyklus einen undefinierten Zustand haben.
Das kommt daduch zustande das du das Beschreiben der Ausgänge nur unter besimmten Bedingungen machst.
Darum sollte man bei Out Variabeln auf Setzen, Rücksetzen und Srungbefehle verzichten (es sei denn es ist sichergestellt das die in jedem Zyklus eindeutig zugewiesen werden) oder diese als IN/Out deklarieren (Dann wird der letzte Zustand beim neuen Zyklus wieder eingelesen).

Darum fuktioniert auch die Lösung von Helmut, weil duch = die Ausgänge in jedem Zyklus eindeutig beschrieben werden
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Fragnurmal:
das, was du schreibst stimmt, wenn es um die Verwendung eines FC geht - in dem Fall ist jedoch von einem FB die Rede - und der kann sich das über den Instanz-DB auch so merken (die OUT's gehören ja auch mit zur Instanz).

Gruß
LL
 
Bei Multiinstanzen brauche ich keinen Instanz-DB (deshalb Multiinstanz). Die Daten werden auf dem Instanz-DB des aufrufenden Bausteins gespeichert.

Natürlich brauche ich für jede eigenständig laufende Zeit eine eigene Multiinstanz!
 
Hallo Max,
wie hast du den deine Multiinstanz erzeugt, das würde mich mal
intressieren. Hast du vlt. für jeden Bausteinaufruf den selben
Instanz-DB genommen?

So wie ich das verstanden habe hat er gar keiner multiinstanz gemacht,
sondern einfach einen FB den mehrmals aufgerufen hat, aber nicht mit
unteschiedlichen Instanzbausteinen. Also eigendlich keine Multiinstanz.

@Bimbo
was eine Multiinstanz ist und wie sie funktioniert weiß ich und setze diese
funktion sogar öfters ein :rolleyes:
Aber trotzdem vielen Dank für die Aufklärungsversuche.

gruß helmut
 
Les dir den Beitrag nochmal durch, und entscheiden dann nochmal ob LL recht hat oder nicht.
Alles was da steht bestätigt nämlich die Aussage von LL.

Hmm ... Nachdem ich meine CPU kaltgestartet und die Kamera justiert habe, muss ich gestehen das ich heut morgen wohl was anderes verstanden, als gelesen habe....

:!: LL hat natürlich Recht :!: ... gebs ja zu
 
Zurück
Oben