# Zähler in SCL



## Felse (9 März 2009)

Hallo zusammen,
ich habe folgendes Problem, ich möchte einen Vorwärts-/ Rückwärtszähler im SCL programmieren. Ich bekomm das aber einfach nicht hin, nach dem Übersetzen erhalte ich immer "Ungültiger oder fehlender Funktionstyp" in der letzten Zeile. Hat jemand ne Idee warum? 

```
S_CUD (C_NO:=Z1,
  CD:=E16.0,
  CU:=E16.1,
  S:= E16.4 AND E16.5,
  PV:=0,
  R:=FALSE,
  CV:=Wert);
```


----------



## Larry Laffer (9 März 2009)

Hallo Felse,
welchen Typ hat die Variable "Wert" in deinem Script ?
Und wo ist der Ausgang "Q" ?

Gruß
LL


----------



## Hotsch (9 März 2009)

Vielleicht hilft dir dieses Beispiel aus der SCL Hilfe:
Beispiele
//Beispiel für einen absoluten Aufruf:
S_CUD (C_NO:=Z12,
CD:=E0.0,
CU:=E0.1,
S:=E0.2 & E0.3,
PV:=120,
R:=FALSE,
CV:=binVal,
Q:=actFlag);

//Beispiel für einen dynamischen Aufruf: Bei jedem Durchlauf einer 
//FOR-Schleife wird ein anderer Zähler aufgerufen:
FUNCTION_BLOCK ZAEHL 
VAR_INPUT
Zaehl: ARRAY [1..4] of STRUCT
C_NO: INT;
PV : WORD;
END_STRUCT;
.
.
END_VAR
.
.
FOR I:= 1 TO 4 DO
S_CD(C_NO:=Zaehl_.C_NO, S:=true, PV:= Zaehl.PV);
END_FOR;

//Beispiel für einen dynamischen Aufruf bei Verwendung einer Variablen vom 
//Datentyp COUNTER:
FUNCTION_BLOCK ZAEHLER
VAR_INPUT
MeinZaehler:COUNTER;
END_VAR
.
.
CurrVal:=S_CD (C_NO:=MeinZaehler,.....);_


----------



## Felse (9 März 2009)

@ larry
Wert ist eine"word" Variable und Q? Tja, ich hab gelesen, dass man Q einfach weglassen kann...? Brauch ich die unbedingt wenn ich sowieso nur den Wert von CV zur Weiterverarbeitung benötige?
@hotsch
Die hab ich mir auch schon angesehen, bin aber nicht wirklich schlau geworden.


----------



## Larry Laffer (9 März 2009)

Hallo Felse,
die Zähler haben einen Rückgabewert. Schreib also mal :
	
	



```
Istwert := S_CUD (...) ;
```
dann sollte es gehen ...

Gruß
LL


----------



## Felse (9 März 2009)

Ja jetzt funktionierts... Danke


----------



## Larry Laffer (9 März 2009)

Ich finde es allerdings Klasse, dass man bei Siemens nicht in der Lage ist, in einem Beispiel darauf hinzuweisen ...
Die Jungs habe ich im Augenblick aber sowieso gefressen ... :sc6:


----------



## Felse (9 März 2009)

Ich hab das mit der Variable in einem Buch von Siemens gelesen...
Aber ne kleine Frage hab ich da noch: ich hab die Variable "C_NO" unter Var_input als "counter" festgelegt. Wenn ich die dann aber im OB1 aufrufe geht das nicht... "Element nicht gefunden". Was muss man da beachten?


----------



## Larry Laffer (9 März 2009)

was hast du denn hinter der Abfrage "Counter" eingetragen ? Dort muß dann natürlich z.B. "Z12" (oder so) hin ...


----------



## Felse (9 März 2009)

Ich dachte so:


```
Istwert := S_CUD ([COLOR=red]C_NO:=Z1[/COLOR],
  CD:=E16.0,
  CU:=E16.1,
  S:= E16.4 AND E16.5,
  PV:=0,
  R:=FALSE,
  CV:=CV);
```
 
OB1 hab ich im FUP (find ich dafür einfach schöner), da kann ich C_NO ja anwählen, aber der wird mir dann gleich rot angezeigt.


----------



## Larry Laffer (9 März 2009)

Nee ... so geht das nicht ...
In deinem SCL-Script mußt du einen IN-Parameter vom Typ COUNTER erstellen. Diesen Parameter legst du dann an den S_CUD und beim Aufruf dieses Bausteins beschaltest du deinen IN-Parameter mit der gewünschten Zähler-Nummer ...

Gruß
LL


----------



## Felse (9 März 2009)

Larry Laffer schrieb:


> Nee ... so geht das nicht ...
> Diesen Parameter legst du dann an den S_CUD und beim Aufruf dieses Bausteins beschaltest du deinen IN-Parameter mit der gewünschten Zähler-Nummer ...


Sorry Larry, das hab ich nicht ganz verstanden... An den S_CUD legen?  Kannst du dafür mal ne kurze Beispielzeile posten?


----------



## Larry Laffer (9 März 2009)

Na ... du machst es mir aber auch nicht leicht ... 

Also ... in deinem SCL-Baustein, den du da gerade schreibst erzeugst du eine Variable im INPUT-Bereich :
	
	



```
VAR_INPUT
   mein_Zaehler : COUNTER ;
END_Var ;
 
und im Code dann :
 
Akt_Wert := S_CUD (C_NO:=mein_Zaehler, ...) ;
```
wenn du nun den selbst-erstellten Baustein (von mir aus im OB1) aufrufst, dann wird nach mein_Zaehler gefragt und da trägst du dann den richtigen (von dir gewünschten) Zähler ein ...

Gruß
LL


----------



## Felse (9 März 2009)

Achso, das stand aber so nicht in meinem Buch... Jetzt gehts aber endgültig, Vielen Dank und bis zu nächsten Problemchen:wink:


----------

