Bausteinaufruf in SCL

ritti

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

leider bin ich sonderlich bewandert in der ganzen SPS Geschichte, dennoch beschäftige ich während meines Studiums damit und habe derzeit ein größeres Projekt bei dem ich auf folgendes Problem gestoßen bin.

Ich hab Bausteine in SCL geschrieben in denen ich andere Bausteine aufrufen muss. Dazu wähle ich einfach unter Einfügen->Bausteinaufruf den entsprechenden Baustein aus.

Das ganze sieht dann so aus:
Code:
Bausteinname(
prog :=  // INOUT: STRUCT
, global :=  // INOUT: STRUCT
, data :=  // INOUT: STRUCT
 ); // VOID

Nun muss ich die INOUT Variablen mit denen belegen, die im aufgerufenen Baustein benötigt werden.
Übersichtshalber habe ich die einzelnen Variablen die thematisch bzw. von ihrer Aufgabe her zusammen gehören in einen UDT gepackt und einzelne UDTs in einem DB zusammen gefasst.

Das ganze sieht dann so aus:
Code:
Bausteinname(
prog := db1.prog,
global :=  db1.global,
data :=  db1.data
 ); // VOID

Als Fehlermeldung bekomme ich für jeden übergebenen UDT
Code:
Ungültiger Datentyp


Jetzt habe ich schon einiges darüber gelesen wie einzelne Wörter oder ähnliches übergeben werden, aber noch nicht wie komplette Strukturen, also UDTs, übergeben werden.

Zur Info hier noch der Baustein der aufgerufen werden soll:

Code:
FUNCTION Funktionsname: VOID

TITLE = 'Bausteintitel' 
VERSION : '1.0'
AUTHOR  : Name
NAME    : TKCP
FAMILY  : UEW

// eingangsvariablen
VAR_INPUT

END_VAR    

// ausgangsvariablen
VAR_OUTPUT

END_VAR

// ein- und ausgangsvariablen
VAR_IN_OUT
prog        : "UDT-TopKnifeProgram";
global      : "UDT-KnifeGlobal";
data        : "UDT-TopKnifeData";
set         : "UDT-TopKnifeSet";
bits        : "UDT-TopKnifeBits";   



END_VAR

// temporäre variablen
VAR_TEMP

    zaehler     : INT;      
    zaehler2    : INT;    
    position    : INT;       

  

END_VAR


BEGIN
.........

END_FUNCTION

Würde mich über einige Tipps freuen

Ritti
 
Hallo Ritti,
das geht genau so, wie du es vorhast ...
Der UDT, den du übergeben willst, muß dem SCL-Compiler bekannt sein.
Die Übergabe-Daten MÜSSEN von der erwarteten Struktur sein - in deinem Fall also muß DB1.prog vom Typ "UDT-TopKnifeProgram" sein (und entsprechend für die weiteren).

Du kannst dann im Script auf die einzelnen Struktur-Elemente zugreifen (nur den IN_OUT-Variablennamen mit einem "." voranstellen ...)

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

vielen Dank für die Antwort. Offenbar war wohl der Ansatz nicht ganz so falsch. Nachdem ich alle Quellen nochmals übersetzt habe sind die Fehler verschwunden. Lag anscheinend irgendwie daran.

Besten Dank
Ritti
 
Zurück
Oben