Call, cc, uc, auf

corvus

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich bereite mich gerade auf eine Prüfung über Step7 vor. Es gibt da so ein paar Fragen, die ich nicht beantworten kann:

Kann man mit dem CC/UC-Befehl auch SFCs und SFBs aufrufen?
Kann man mit dem Befehl AUF Parameter-Übergaben ausführen?
Kann man mit dem Befehl AUF auch noch anderes außer DBs aufrufen?

Vielen Dank.
 
Hallo,

ich bereite mich gerade auf eine Prüfung über Step7 vor. Es gibt da so ein paar Fragen, die ich nicht beantworten kann:

Kann man mit dem CC/UC-Befehl auch SFCs und SFBs aufrufen?
Kann man mit dem Befehl AUF Parameter-Übergaben ausführen?
Kann man mit dem Befehl AUF auch noch anderes außer DBs aufrufen?

Vielen Dank.

Bei UC SFC kommt bei mir die Meldung:
Anweisung nicht erlaubt für SFC Operanten

Welche Parameter möchtest du beim Öffnen eines DB noch mitgeben?
Was willst du außer einem DB noch aufschlagen?

bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man mit dem CC/UC-Befehl auch SFCs und SFBs aufrufen?
Nein!
Kann man mit dem Befehl AUF Parameter-Übergaben ausführen?
Ja, aber nicht direkt mit dem Befehl AUF sondern als Anyzeiger:
P#DB1.DBX 0.0 Byte 20
// Durch die Übergabe vom DB1 wird dann dieser geöffnet und es werden 20 Byte ab Adresse 0.0 übergeben
Kann man mit dem Befehl AUF auch noch anderes außer DBs aufrufen?
Nein!
Allerdings brauchst du zum direkten öffnen eines DB's nicht unbedingt den Befehl auf, bei folgender Anweisung wird der DB ebenfalls geöffnet.
Code:
   L DB1.DBW10
Der AUF - Befehl wird für indirekte Adressierung verwendet:
Code:
   L 15
   T MW 10
   AUF DB[MW10] // ausgeführt wird : AUF DB15
 
Danke für eure Antworten.

Ich habe in meinem Skript so ein Beispiel gefunden, in dem steht:
UC SFC43 (Kommentar: ohne Parameter).
Das hatte ich vorher nicht gesehen. Das scheint also irgendwie doch zu gehen!?

Wenn ich aber sage
UC FB1
dann kann ich ja keine Parameter übergeben. Aber brauch ein FB nicht einen Instanz-DB?
 
Ich habe in meinem Skript so ein Beispiel gefunden, in dem steht:
UC SFC43 (Kommentar: ohne Parameter).
Das hatte ich vorher nicht gesehen. Das scheint also irgendwie doch zu gehen!?
Gerade noch mal nachgelesen (F1)
CC geht für FC und FB aber ohne Parameter
UC geht für FC, SFC, FB, SFB ebenfalls ohne Parameter.
Wenn ich aber sage
UC FB1
dann kann ich ja keine Parameter übergeben. Aber brauch ein FB nicht einen Instanz-DB?
Ja, habe ich auch gerade probiert und obwohl ich Statische Variablen verwende.
Der Aufruf geht, allerdings geht die CPU gnadenlos in den Stopp, die will halt den DB, was ja auch verständlich ist.

Wenn keine Statischen Variablen angelegt sind bleibt die CPU beim Aufruf von UC FB1 ohne DB im RUN
Aber dann bräuchte man ja kein FB nehmen.

Also vergiss CC und UC, Siemens schlägt selber vor CALL zu verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke. Ich habe das mit dem F1 auch mal probiert. Aber irgendwie finde ich diese Info nicht.
Erst F1, dann unter "Suchen": CALL CC
Das hat etwas gebracht, aber nicht diese Info
 
Gerade noch mal nachgelesen (F1)
CC geht für FC und FB aber ohne Parameter
UC geht für FC, SFC, FB, SFB ebenfalls ohne Parameter.

Ja, habe ich auch gerade probiert und obwohl ich Statische Variablen verwende.
Der Aufruf geht, allerdings geht die CPU gnadenlos in den Stopp, die will halt den DB, was ja auch verständlich ist.

Wenn keine Statischen Variablen angelegt sind bleibt die CPU beim Aufruf von UC FB1 ohne DB im RUN
Aber dann bräuchte man ja kein FB nehmen.

Also vergiss CC und UC, Siemens schlägt selber vor CALL zu verwenden.

Wenn Ich vorher den DB mit

AUF DIxx

aufmache, geht aber auch UC oder CC bei FB!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Jochen,
welchen DIxx willst du denn öffnen wenn ich wirklich einen FB ohne InstanzDB anlegen und auf die Statischen Variablen zugreifen will?

Wer sagt denn das Ich keinen IDB anlegen will, aber vielleicht will ja jemand z.B. CC statts Calls verwenden um Jumps zu vermeiden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke. Ich habe das mit dem F1 auch mal probiert. Aber irgendwie finde ich diese Info nicht.
Erst F1, dann unter "Suchen": CALL CC
Das hat etwas gebracht, aber nicht diese Info
Am besten du gehst mit der Maus auf den Befehl / Baustein von dem du Hilfe benötigst und drückst dann F1.
Meine Beschreibung von dem Aufruf mit und ohne DB steht nirgends, das habe ich ausprobiert. ;)

Das Siemens aber empfiehlt CALL zu nehmen kann man ganz unten raus lesen.
 
Hi,

spannend.

Code:
      AUF   DI     1
      TAR2  LD    21
      LAR2  P#DBX 0.0
      UC    FB     1
      LAR2  LD    21

das macht die S7-Steuerung aus einem

Code:
CALL FB1,DB1

hab das mal so wie es oben steht probiert, geht auch. ;)

Gruss Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich aber sage
UC FB1
dann kann ich ja keine Parameter übergeben. Aber brauch ein FB nicht einen Instanz-DB?

Wenn ich sage
UC FC1
dann kann ich wirklich keine Parameter übergeben, zumindest wüsste ich nicht wie.

Beim Aufruf
UC FB1
wird der gerade aktive Inhalt des DI-Registers als Instanz-DB benutzt. Also das, was mit AUF DIxx geladen wird. "Keinen" Instanz-DB gibt es also nicht. Wenn da nichts sinnvolles drin steht, geht die SPU natürlich auf STOP.

Das Adressregister AR2 muss auch korrekt initialisiert werden.

Normale Aufrufe macht man natürlich weiter mit CALL, aber wenn man die Links von vierlagig verfolgt, sieht man, wann UC benötigt wird.

Noch ein Stil-Trick: Ich benutze (wenn überhaupt) nicht direkt AUF DIxx, sondern:
AUF "db_mit_namen"
TDB
Das lädt den gewünschten DB ins DI-Register, und der symbolische Name taucht im Code auf.

Zurück zu den Fragen:
1. 2 widersprüchliche Antworten, selbst ausprobieren
2. Damit kann der Instanz-DB zu einem FB übergeben werden, der mit UC aufgerufen wird. Insofern kann der AUF-Befehl bei Parameterübergaben eine Rolle spielen.
3. Nicht dass ich wüsste. Ich sage mal nein ;)

Vielleicht wird aber bei der Prüfung erwartet, solche Antworten zu geben, wie sie im Unterricht gelehrt wurden. D.h. wenn der Programmierstil mit UC als nicht akzeptabel bezeichnet wird, wird vielleicht zu Frage 2 einfach "Nein" gefordert.
 
Zurück
Oben