SCL Datenbaustein zu FB über Eingangsparameter

tarzipan7

Level-2
Beiträge
96
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Weiss jemand wie ich den Instanzdatenbaustein bei einem FB-Aufruf als Eingangsparameter übergeben kann?
Der Aufruf des FB's erfolgt im SCL in einer Funktion.

danke im voraus
martin
 
Hallo,
schau mal unter "Einfügen - Baustein-Aufruf" innerhaölb der SCL-Umgebung ...
Das müßte dir schon weiterhelfen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das scheint nicht vorgesehen zu sein, jedenfalls habe ich keinerlei Variante gefunden, die der Compiler zumindest passieren läßt. :confused:
Einzige, allerdings recht grobe Variante die mir da einfällt:

FB mit einem globalen Instanz-DB aufrufen (Das geht ja zumindest).
Vor dem FB Daten mit Blockmove von DBx in den globalen Instanz-DB umkopieren, nach dem FB wieder zurück. Aber schön ist das sicher nicht :???: .
 
Und wenn man sich mal ansieht, was aus so einem Aufruf wird:

Code:
FB41.DB41(stunde := 1 // IN: INT
           ,minute := 2 // IN: INT
           ,sekunde := 3 // IN: INT
           );


Code:
      L     1
      T     DB41.DBW    0
      L     2
      T     DBW    2
      L     3
      T     DBW    4
      LAR2  P#DBX 0.0
      TDB   
      UC    FB    41
      TDB   
      L     100
      T     #RET_VAL

Man könnte allenfalls hinterher im AWL-Code rumpoken, aber das ist ja auch kriminell.
 
@Ralle:
Warum nicht ?
Laut Siemens-Hilfe (SCL) "Aufruf und Parameterübergabe von FB's / FC's" :
Code:
FB10.DB20 (x1:=5 , x2:=10 , ... ) ;

Gruß
LL
 
Nein, er will jedesmal andere IDB mitgeben, also einmal DB20, dann DB21.
Das läßt SCL aber nicht zu.

Was aber evtl. geht: einen FC bauen, der alle IN, INOUT, OUT-Parameter des FB hat und den IDB als BLOCK-DB mitbekommt. Dieser FC wird in SCL aufgerufen, der FC selbst ruft den FB auf, quasi als Wrapper. AWL läßt jedenfalls den Aufruf eines FB mit einem Block-DB zu.
 
FC als Wrapper geht auch nicht, da läßt SCL dann auch keinen Block_DB als Input zu, nur eine direkte Angabe, also z.Bsp. DB41.
Bleibt erstmal nur die Blockmove-Variante. Nicht so toll.
 
...?
wäre dann nicht vielleicht Multi-Instanz ein Thema ?
Das wäre ja in SCL auch machbar und mach die Angelegenheit (vielleicht) durchschaubarer ...

Gruß
LL
 
Hallo
Das mit der Multiinstanz wird klappen im SCL, danke
Wie kann ich denn im SCL Temporäre Variablen in einem Loop beschreiben oder lesen?

AWL:

L 75 // Number of double-words
lp1: T #LoopCnt_IL
L DBD [AR1,P#0.0]
T LD [AR2,P#0.0]
+AR1 P#4.0
+AR2 P#4.0
L #LoopCnt_IL
LOOP lp1


danke und gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das geht in SCL mit FOR..TO

Beispiel :
Code:
VAR   //  (TEMP)
   i : INT ;  // Schleifen-Variable
END _VAR
 
For i:= 1 to 100 by 1 do
   Element [i] := i ;
END_FOR ;

Das wird aber auch in der SCL-Hilfe ganz schön beschrieben ...

Gruß
LL
 
Hi

Das habe ich verstanden, aber es gibt halt immer wieder spezielle Anforderungen, welche nicht der "Hilfe" entnommen werden können.

Die Bezeichnungen der Temporären Variablen sind z.B.

PMxZx_ManMode_BIL : Bool;
PMxZx_BypMode_BIL : Bool;
PMxZx_Setpoint_ROL : Real;
usw.

Da ich im folgenden Code diese Variablen verwenden will, kann ich nicht ein Array definieren, welches über einen Index beschrieben wird. Ist der Zugriff auf die Temporären Variablen (Lxx) auf eine andere Weise auch möglich?

gruss
 
Die Bezeichnungen der Temporären Variablen sind z.B.

PMxZx_ManMode_BIL : Bool;
PMxZx_BypMode_BIL : Bool;
PMxZx_Setpoint_ROL : Real;
usw.

Da ich im folgenden Code diese Variablen verwenden will, kann ich nicht ein Array definieren, welches über einen Index beschrieben wird.

Warum nicht ?
Du kannst doch definieren :
Code:
PMxZx_ManMode_BIL : ARRAY [1..32] of Bool ;
Das geht auch im TEMP-Bereich und ist sicher sinvoller als mit irgendwelchen Hilfs-Pointer unter SCL herumzubasteln. Das widerspräche dann auch eigentlich der SCL-Philosopie ...

Gruß
LL
 
Zurück
Oben