# Unterschied zwischen UC und Call



## Bitverbieger (22 Juli 2007)

Hallo liebe Experten,
kann mir mal jemand erklären anhand eines Beispiels wann man UC anstatt
Call benutzt. die Hilfe in Step7 ist etwas kurz.

Vielen Dank im Voraus

Bitverbieger


----------



## schwarzer_kater (22 Juli 2007)

Ganz sicher bin ich mir auch nicht, aber es liegt an der Variablenübergabe.

Mit UC kann ich einen Baustein aufrufen aber keine Variablen übergeben.
CALL kann das.

Beispiele

UC FC 1



CALL FC1
IN: Var_1
OUT: Var_2


Also das mit dem IN und OUT kann UC nicht

Wie gesagt. So habe ich das verstanden aber nie ausprobiert. Ich nehme immer CALL.


----------



## Bitverbieger (22 Juli 2007)

Ja, soweit kenne ich es auch.
Vieleicht hat ja einer ein Beispiel für UC?


----------



## MajorutyOfOne (22 Juli 2007)

*Doku AWL für S7-3007400*

Steht so in der Doku


----------



## schwarzer_kater (22 Juli 2007)

Beispiel 1

UC FC6 //Rufe die Funktion FC6 auf (ohne Parameter).


Beispiel 2


UC SFC43 //Rufe die Systemfunktion SFC43 auf (ohne Parameter).

  

Da gibst sonst nichts. Das ist völlig unspecktakulär.

Zu CC könnte man eher was schreiben. Aber auch das ist schnell erschöpft.


----------



## sps-concept (22 Juli 2007)

*Uc*

Hallo,

ein entscheidender Unterschied ist dass man mit UC einen FB ohne Insatnz-DB aufrufen kann. Manche programmieren (warum auch immer) in FB ohne IN, OUT, INOUT und statische Variablen zu nutzen. Hier wäre auch der Instanz-DB nutzlos. Mit UC kann man sich diesen sparen.

André


----------



## schwarzer_kater (22 Juli 2007)

Interessanter Blickwinkel.
Aber wie Du schon schreibst. Warum macht man denn sowas? (Ich meine einen FB als FC missbrauchen)


----------



## Approx (23 Juli 2007)

Das kommt bestimmt noch aus den "alten" S5-Zeiten. Da hat man ja gern mal nen FB oder SB als Ersatz für Programmbausteine verwendet, wenn die Grenze von 255 Bausteinen schon erschöpft war...


----------



## Longbow (24 Juli 2007)

Für die CPU gibt es keinen Call, sondern nur den UC xx.
Der Call wird durch den AWL-Editor in zahlreiche AWL-Anweisung umgewandelt die für die Parameterübergabe benötigt werden.
Demzufolge: Wenn es schnell gehen soll und man keine Parameter braucht:
UC xx

MfG


----------



## Fileplayer (24 Juli 2007)

*Re: Uc*

Hallo, ich sehe das anders :
(immer in AWL):

UC == Unconditionierter Call == absoluter Aufruf 


CC == conditionierter Call == Aufruf abhängig von VKE.

liege ich da richtig ?

Gruss Fileplayer


----------



## MatMer (25 Juli 2007)

Fileplayer schrieb:


> Hallo, ich sehe das anders :
> (immer in AWL):


was siehst du denn jetzt anders als er?

was du zu UC und CC sagst stimmt, aber Longbow sagt das der befehl Call in UC umgebaut wird und zusätzlich die parameter dran gehangen werden


----------



## Longbow (25 Juli 2007)

MatMer schrieb:


> was siehst du denn jetzt anders als er?
> 
> was du zu UC und CC sagst stimmt, aber Longbow sagt das der befehl Call in UC umgebaut wird und zusätzlich die parameter dran gehangen werden



Hallo,

ich bin mir nicht wirklich sicher, auf welchen Eintrag "Fileplayer" geantwortet hat. Aber UC und CC sind auch in der CPU (MC7) eigene Befehle. Wobei
es für CC und UC ja auch keine Parameterübergabe gibt! 
Wobei der S7-Editor es sogar zulässt einen solchen Baustein aufzurufen.

Gruß


----------



## RMA (25 Juli 2007)

*Was macht der Editor mit "CALL" eigentlich?*

Für die die Englisch lesen können, dieser Thread auf PLCtalk.net könnte interessant sein.


----------



## godi (17 August 2007)

Hallo!

Wie in der Hilfe steht können keine Parameter bei einem UC aufruf übergeben werden.
Habe da mal ein wenig herumprobiert und bin draufgekommen das es doch geht aber mit dem Vorteil das man die Parameter überall übergeben kann! :-D 

Habe hier einen Multiinstanzaufruf mit den UC Befehl Programmiert.
(Ist aber ein deutlich höherer aufwand als mit den CALL Befehl :???: )


```
FUNCTION_BLOCK FB 3
TITLE =
VERSION : 0.1
 
VAR
  Testvariable : BYTE ; 
  Timer_TON : SFB 4; 
END_VAR
BEGIN
NETWORK
TITLE =
 
//Einschaltbedienung für Timer
      U     M    220.0; 
      =     #Timer_TON.IN; 
 
//Time für Timer
      L     T#2S; 
      T     #Timer_TON.PT; 
 
//Timeraufruf
      L     P##Timer_TON; //Lade Pointer von Variable
      L     2#111111111111111111111111; 
      UD    ; //Maskiere Byte 0 von Pointer aus
      L     2#10000100; 
      SLD   24; 
      XOD   ; //Maskiere Pointer auf DB
      LAR2  ; //Pointer muss an das AR2 übergeben werden wegen Multiinstanz
      UC    SFB    4; //Bausteinaufruf
 
//Setze AR2 auf Operandenbereich DB und 0ffset von 0.0 weil die weiteren Variablen wie Timer_TON.ET auch mit dem AR2 arbeiten!
      L     P#0.0; 
      L     2#10000100; 
      SLD   24; 
      XOD   ; //Maskiere Pointer auf DB
      LAR2  ; 
 
//Lade Restliche Zeit
      L     #Timer_TON.ET; 
 
//Ausgabe von Timer
      U     #Timer_TON.Q; 
      CLR   ; 
 
END_FUNCTION_BLOCK
```
 
godi


----------



## thomass5 (17 August 2007)

Hallo, 

http://www.sps-forum.de/showthread.php?t=10019

dies wäre auch möglich.

Thomas


----------



## godi (17 August 2007)

thomass5 schrieb:


> Hallo,
> 
> http://www.sps-forum.de/showthread.php?t=10019
> 
> ...


 
Ja das mit der Übergabe eines Schmiermerkerbereiches finde ich nicht so gut da es dann doch nicht wirklich übersichtlich ist und bei SFB/SFC funktionierts auch nicht.

Obwohl das was ich da jetzt Programmiert habe war ja im Prinzip nur blöde spielerei und ist auch net Übersichtlich.
Wo man es eventuell brauchen könnte ist wenn man viele Input/Outputvariablen nicht belegt und die was man belegt gleich ins Programm integrieren will.

godi


----------



## thomass5 (17 August 2007)

Hallo,
hab mich verdrückt ausgekehrt. Ich meinte nicht den Schmiermerkerteil sondern den indirekten Aufruf von Bausteinen, der mit Deiner Spielerei vervollkomnet wird.

Thomas


----------



## godi (17 August 2007)

Stimmt!
http://www.sps-forum.de/showpost.php?p=57834&postcount=9
Naja hat halt Maxl noch ein Jahr warten müssen!  
Ich hoffe er hat es verkraften können!


----------

