Zähler in SCL

Felse

Level-1
Beiträge
221
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
Code:
 S_CUD (C_NO:=Z1,
  CD:=E16.0,
  CU:=E16.1,
  S:= E16.4 AND E16.5,
  PV:=0,
  R:=FALSE,
  CV:=Wert);
 
Hallo Felse,
welchen Typ hat die Variable "Wert" in deinem Script ?
Und wo ist der Ausgang "Q" ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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,.....);
 
@ 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.
 
Zuletzt bearbeitet:
Hallo Felse,
die Zähler haben einen Rückgabewert. Schreib also mal :
Code:
Istwert := S_CUD (...) ;
dann sollte es gehen ...

Gruß
LL
 
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 ... :ROFLMAO::sc6:
 
Ich hab das mit der Variable in einem Buch von Siemens gelesen...:p
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?
 
Ich dachte so:

Code:
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.
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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? :confused: Kannst du dafür mal ne kurze Beispielzeile posten?
 
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 :
Code:
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
 
Achso, das stand aber so nicht in meinem Buch...:p Jetzt gehts aber endgültig, Vielen Dank und bis zu nächsten Problemchen:wink:
 
Zurück
Oben