call, cc, uc Anfängerfrage

dos-punktos

New member
Beiträge
4
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen bin neu hier. Mein Name ist Holger und ich bin so gerade am Anfang mit der S7 Programmierung.

Und hier ist schon gleich meine Frage.

Ich möchte FC´s aufrufen bei bestimmten Bedingungen. Jetzt hab ich mal was an einer Test SPS (S7-315) probiert und verstehe das mit call und cc nicht mehr.
Ich schreib hier mal das kleine Testprogramm rein.
( OB1 )

L MW1
L 1
==I
CALL FC1

L MW1
L 2
==I
CALL FC2

In den FC´s hab ich einfach nur Ausgänge zugewiesen.

( FC1 )
= A0.0

( FC2 )
= A0.1

jetzt passiert folgendes,
wenn MW1 = 0 kein FC kein Ausgang
wenn MW1 = 1 FC1 Ausgang A0.0
wenn MW1 = 2 FC2 Ausgang A0.0 geht aus und Ausgang A0.1 geht an

Wenn ich Call durch CC ersetze passiert folgendes

wenn MW1 = 0 kein FC kein Ausgang
wenn MW1 =1 FC1 Ausgang A0.0 geht an
wenn Mw1 = 2 FC2 Ausgang A0.1 geht an und Ausgang A0.0 bleibt aber auch an.

Das ist bei meiner Test SPS so.

Bei der Richtigen SPS verhält sich das aber irgendwie umgekehrt. Da ist allerdings auch mehr in den FC reingeschriebe. Und dann kommt mein Programm durcheinander.

Kann mir das einer erklären ??

Danke und schöne Grüße
Holger
 

Tigerente1974

Well-known member
Beiträge
1.815
Punkte Reaktionen
289
1. Wenn Du CALL oder CC markierst und die magische Taste F1 drückst, kommt die Hilfe zu den Befehlen. In der Hilfe steht, dass der Befehl CALL unabhängig vom VKE durchgeführt wird. Ganz im Gegensatz zum Befehl CC. Demnach hat die Abfrage des MW1 nur in Verbindung mit CC eine Auswirkung auf den Aufruf.

2. Aufrufe von Merkerwörtern sollten niemals ungerade sein. Sehr schnell kommt es dann zu Fehlern, weil versehentlich Bereiche angesprochen wurden, die eigentlich gar nicht gemeint waren. Also besser MW2 oder MW4 oder...

3. Bedingte Bausteinaufrufe lösen oft "ganz komische" Dinge aus. Z.B. wird im Code ein Ausgang durch eine Zuweisung auf TRUE geschaltet. Wird der Baustein dann nicht mehr aufgerufen, bleibt der Ausgang auf TRUE. Das ist oft so nicht gewollt....
 
Zuletzt bearbeitet:

Tigerente1974

Well-known member
Beiträge
1.815
Punkte Reaktionen
289
Zuviel Werbung?
->Hier kostenlos registrieren
Und noch ein kleiner Nachtrag als Erklärung der "Phänomene" sofern im FC wirklich nur die Zuweisung auf den Ausgang steht:

Die Zuweisung "=" fragt das VKE ab. Das VKE geht je nach Erfüllung der Abfrage des MW vor dem Bausteinaufruf auf TRUE.
Deswegen gehen die Ausgänge in der 1. Variante auch an und aus.

In der 2. Variante geschieht, was ich oben beschrieben habe. Wurde der Baustein erst einmal aufgerufen, bleiben die Ausgänge für immer auf TRUE.
 

Move

Well-known member
Beiträge
485
Punkte Reaktionen
56
Hi,

noch "sauberer" wäre
OB1:
call FC1
call FC2

FC1:
L MW0 // nicht MW1
L 1
==I
= A0.0
BE

FC2:
L MW0 // nicht MW1
L 2
==I
= A0.1
BE

So werden die FC's zyklisch bearbeitet und die
Effekte treten erst garnicht auf
Dieses abwürgen der FC-Aufrufe im OB1
ist immer nicht ganz ohne.

Gruß Move
 
OP
D

dos-punktos

New member
Beiträge
4
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
danke schon mal für die Antworten. Das mit der F1 und Hilfe kannte ich schon. Das man immer Call nehmen sollte hab ich auch schon mal gelesen, ist aber bei meinem Programm nicht möglich da dann alle Bausteine aufgerufen werden.

Die Merkerwortvergleiche benutze ich als Programmanwahl um verschiedene Abläufe zu Starten. Es ist quasi ein Grundgestell wo verschiedene auswechselbare Montagestationen angebaut werden können. Und jede Montagestation hat eine Programmnummer.

Mit dem Call CC und UC hab ich das so verstanden, das:

Call FC ruft immer auf, egal ob Irgend eine Bedingung davor steht
CC FC ruft nur auf, wenn die Bedingung die davor steht erfüllt ist.
UC FC ruft auch immer auf.



Wenn ich im OB1 schreibe

Call FC 1
Call FC 2

und die FC´s sind wie im Beispiel oben, dann wird gar kein Ausgang gesetzt, also wird doch dann auch kein FC aufgerufen oder? Obwohl Call doch absoluter Aufruf heißt ?

Wenn ich im OB1 schreibe

CC FC1
Call FC2

wird nur der Ausgang der im FC 2 steht angesteuert. Klar, weil FC1 wohl eine Bedingung braucht. Aber dann Fuktioniert Call bei FC2

Gruß
Holger
 

Tigerente1974

Well-known member
Beiträge
1.815
Punkte Reaktionen
289
Das mit den Bausteinaufrufen hast Du noch nicht ganz verinnerlicht. Mit den bedingten Aufrufen "CC" wirst Du aber vermutlich mehr Probleme bekommen, als Dir lieb ist. Vielleicht noch mal für das Verständnis: Bei dem Bausteinaufruf wird der Code in dem aufgerufenen Baustein abgearbeitet und danach wieder an die aufrufende Stelle gesprungen. Hier der OB1. Die Bausteincontainer sollen doch nur der Übersicht dienen. Prinzipiell könnte auch alles im OB1 stehen. (was man natürlich nicht macht). Hier mal der Code für einen OB1 ohne Aufrufe, der aber GENAU DAS GLEICHE macht:

Code:
L MW0
L 1
==I
= A0.0

L MW0 
L 2
==I
= A0.1

Demnach werden die Ausgnänge auch eingeschaltet, wenn die Abfrage des MW0 das VKE=TRUE bringt.
 
OP
D

dos-punktos

New member
Beiträge
4
Punkte Reaktionen
0
Alles klar das mit den FC hab ich ja denke ich verstanden. Ist wegen der Übersicht und so.

Aber wenn mein OB1 so aus sieht:

CALL FC1
CALL FC2

Und die FC´s sehen so aus:

(FC1)

=a0.0


(FC2)

=a0.1

Meinem Verständnis nach gehen so beide Ausgänge an.

Bei meiner Test SPS blieben die Ausgänge aber aus.
 
OP
D

dos-punktos

New member
Beiträge
4
Punkte Reaktionen
0
Ach so, der FC wurde zwar aufgerufen, aber vor der = zuweisung steht nichts und darum ist das VKE false.
Und mit SET macht man das VKE true.

Ich glaub da liegt der Hund begraben. Und weil im richtigen Programm in den FC´s richtige Programmierungen drin sind sah es nur so aus als ob es sich umgekehrt verhält.

Ich glaub meine Welt ist wieder in Ordnung, Danke!:ROFLMAO:
 
Oben