Eine Frage zum Befehl "Call"

petzi

Level-1
Beiträge
255
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
folgendes einfaches Beispielprogramm sei gegeben:

FC1:

U M 10.0 // Taktmerker 1s
UN M 15.1
= M 15.0
S M 15.1
UN M 10.0
R M 15.1

U M 15.0
SPBN x000
CALL FC 2

x000: CALL FC 3


FC2:

L MB 12
+ 1
T MB 12


FC3:

U E 0.0
= A 0.0


Nun wird ja jede Sekunde zu dem Wert in MB12 eine 1 hinzuaddiert.

Meine Frage:

Die Funktion FC3 sollte doch auch nur jede Sekunde aufgerufen werden - nämlich immer dann, wenn der Merker M15.0 gerade nicht den Status 1 hat. Nur dann sollte doch zu der Sprungmarke x000 gesprungen werden.

Bei mir wird FC3 aber ständig aufgerufen; warum?

Danke

petzi
 
Zuletzt bearbeitet:
Du meinst das der FC2 nur sekündlich aufgerufen wird, oder? Denn der FC3 ist ja unabhängig vom Zustand des M15.0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Petzi
du überspringst den FC3 nicht sondern du überspringst nur den FC2.

Code:
FC1:
 
U M 10.0 // Taktmerker 1s 
UN M 15.1 
= M 15.0 
S M 15.1
UN M 10.0
R M 15.1
 
UN M 15.0  
UN M 15.3 
= M 15.2
S M 15.3
U M 15.0
R M 15.3
 
U M 15.0
SPBN x000
CALL FC 2
x000: NOP 0
 
U M 15.2
SPBN x001
CALL FC 3
x001: NOP 0
 
Zuletzt bearbeitet:
U M 15.0
SPBN x000
CALL FC 2

x000: CALL FC 3

Egal ob gesprungen wird oder nicht es wird immer FC 3 aufgerufen.
Einmal springst du direkt drauf wenn SPBN x000 den Call FC 2 ÜBERSPRINGT
und dann auch wenn über SPBN X000 FC2 aufgerufen wird ist der nächste Schritt auch call FC3.

peter(R)
 
Vielleicht dachte petzi auch, dass der call FC3 nur dann ausgeführt wird, wenn die Sprungbedingung erfüllt ist, da der Aufruf direkt hinter der Sprungmarke steht.

Dem ist ja aber nicht so.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und danke für euere Antworten.

Ja FC2 wird jede Sekunde aufgerufen - nämlich immer dann, wenn M15.0 den Status 1 hat.

Aber FC3 ist doch nicht unabhängig von M15.0 - oder?

Der Befehl SPBN wird doch immer dann ausgeführt, wenn M15.0 den Status 0 hat und nur dann sollte doch FC3 aufgerufen werden?

petzi
 
Der Call ist bedingungslos, d.h. unabhängig vom VKE. Es wird also bei jedem Durchlauf der FC 3 aufgerufen. Wenn er nur dann aufgerufen werden soll, wenn der FC 2 nicht aufgerufen wurde, dann nach dem FC 2-Aufruf ein SPA einbauen und den FC 3-Aufruf überspringen.
 
Hallo petzi,

du kannst nur etwas "überspringen". Alles was hinter deiner Sprungmarke (dem Ziel des Sprungs) steht wird ausgeführt. Nur das zwischen Start und Ziel des Sprungs nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
U M 15.0
SPBN x000
CALL FC 2

x000: CALL FC 3
...
Die Funktion FC3 sollte doch auch nur jede Sekunde aufgerufen werden - nämlich immer dann, wenn der Merker M15.0 gerade nicht den Status 1 hat. Nur dann sollte doch zu der Sprungmarke x000 gesprungen werden.
...

Deine Fragestellung irritiert mich ein wenig, verstehe ich das richtig das der FC2 einmalig aufgerufen werden soll wenn der Merker 15.0 eine "1" hat und der FC3 einmalig wenn der Merker 15.0 eine "0" hat?
 
Hallo ...
Wenn ich hier lese, dass Bausteine bedingt aufgerufen werden sollen, dann sträuben sich mir die Nackenhaare. Aber wie auch immer - es kann ja jeder sich seine Programme so vermurksen wie es ihm gefällt ...
Eines möchte ich hier nur zu beachten geben :
Wird ein Baustein nicht (mehr) bearbeitet, dann bleibt alles in dem Baustein zugewiesene in dem Zustand, in dem es sich zuletzt befunden hat. Das heißt, dass wenn der E0.0 den A0.0 aktiviert hat, weil der FC gerade bearbeitet wird dann kann der E0.0 ruhig weggehen, wenn der FC nicht mehr bearbeitet wird bleibt der A0.0 trotzdem aktiv.

Gruß
LL
 
Hallo ...
Wenn ich hier lese, dass Bausteine bedingt aufgerufen werden sollen, dann sträuben sich mir die Nackenhaare. Aber wie auch immer - es kann ja jeder sich seine Programme so vermurksen wie es ihm gefällt ...
.......

Dem kann ich pauschal so nicht zustimmen,weil es darauf ankommt welche Funktion der aufgerufene Baustein erfüllt.
Ich habe mir z.B. einen PT1-Filter in eine Funktion geschrieben, die sekündlich bedingt aufgerufen wird und kann keinen plausiblen Grund erkennen warum man das nicht so machen sollte.

Das Argument mit den gesetzten Ausgängen ist natürlich völlig richtig.
.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, vielen Dank für eure Hilfe!

Also - die Funktion FC2 wird nur dann aufgerufen, wenn der Merker M15.0 den Status 1 hat, während die Funktion FC3, unabhängig von M15.0, immer aufgerufen wird.

Stimmt's so?


Grüße

petzi
 
Zurück
Oben