-> Hier kostenlos registrieren
Hallo zusammen,
ich habe ein kleines, nicht ganz einfaches Problem in SCL. Ich möchte einen FB-Baustein schreiben der als Eingang einen ANY Parameter besitzt. Nun sollen diesem Baustein neben Merker oder DB-Variablen auch temporäre Variablen des aufrunden Bausteins übergeben werden können. Das mit der DB Geschichte und den Merkern funktioniert problemlos über den entsprechenden indirekten Zugriff. Wie kann ich aber auf die temporären Daten kommen, ich habe mir schon überlegt über SFC20 irgendetwas hinundher zu kopieren , jedoch erfolglos. Und ja es muss eine Möglichkeit geben, denn ein Kollege von mir hat es auch geschafft, er lässt mich aber noch zappeln. Es soll jetzt mal davon ausgegangen werden, dass nur Wörter als Paramter reinkommen, sonst wird es so viel Code zum schreiben
Noch kurz etwas die STruktur zum besseren Verständis:
FUNCTION BLOCK Test
CONST
OPERAND_DBX : W#16#84; //Operandenbereich Globaldaten
OPERAND_M : W#16#83; //Operandenbereich Merkern
OPERAND_V : W#16#87; //Operandenbereich temporäre Lokaldaten des //Vorgängerbausteins
END_CONST
VAR_INPUT
value : ANY
END_VAR
VAR
Data : ANY;
Data_value AT Data : STRUCT
ID : BYTE;
TYP : BYTE;
ANZ : INT;
DBN : WORD;
PTR : DWORD;
END_STRUCT;
DB_Nummer : WORD;
Adresse : INT;
Operand := BYTE;
y: INT;
END_VAR
BEGIN
Data := value;
Adresse := DWORD_TO_INT(SHR(IN := Data_value.PTR, N:= INT#3 ));
Operand := DWORD_TO_BYTE(ROL(IN := Data_value.PTR, N:= INT#8 ));
IF Operand = OPERAND_DBX THEN
y := WORD_TO_INT(WORD_TO_BLOCK_DB(Data_value.DBN).DW[Adresse]);
ELSIF Operand = OPERAND_M THEN
y := WORD_TO_INT(MW[Adresse]);
ELSIF Operand = OPERAND_V THEN
y := ????????????? HIER STEHEN DIE GROßEN FRAGEZEICHEN...
END_IF;
END_FUNCTION_BLOCK
//////////
Ich bin um jeden Hinweis dankbar
mfg
Markus
ich habe ein kleines, nicht ganz einfaches Problem in SCL. Ich möchte einen FB-Baustein schreiben der als Eingang einen ANY Parameter besitzt. Nun sollen diesem Baustein neben Merker oder DB-Variablen auch temporäre Variablen des aufrunden Bausteins übergeben werden können. Das mit der DB Geschichte und den Merkern funktioniert problemlos über den entsprechenden indirekten Zugriff. Wie kann ich aber auf die temporären Daten kommen, ich habe mir schon überlegt über SFC20 irgendetwas hinundher zu kopieren , jedoch erfolglos. Und ja es muss eine Möglichkeit geben, denn ein Kollege von mir hat es auch geschafft, er lässt mich aber noch zappeln. Es soll jetzt mal davon ausgegangen werden, dass nur Wörter als Paramter reinkommen, sonst wird es so viel Code zum schreiben

FUNCTION BLOCK Test
CONST
OPERAND_DBX : W#16#84; //Operandenbereich Globaldaten
OPERAND_M : W#16#83; //Operandenbereich Merkern
OPERAND_V : W#16#87; //Operandenbereich temporäre Lokaldaten des //Vorgängerbausteins
END_CONST
VAR_INPUT
value : ANY
END_VAR
VAR
Data : ANY;
Data_value AT Data : STRUCT
ID : BYTE;
TYP : BYTE;
ANZ : INT;
DBN : WORD;
PTR : DWORD;
END_STRUCT;
DB_Nummer : WORD;
Adresse : INT;
Operand := BYTE;
y: INT;
END_VAR
BEGIN
Data := value;
Adresse := DWORD_TO_INT(SHR(IN := Data_value.PTR, N:= INT#3 ));
Operand := DWORD_TO_BYTE(ROL(IN := Data_value.PTR, N:= INT#8 ));
IF Operand = OPERAND_DBX THEN
y := WORD_TO_INT(WORD_TO_BLOCK_DB(Data_value.DBN).DW[Adresse]);
ELSIF Operand = OPERAND_M THEN
y := WORD_TO_INT(MW[Adresse]);
ELSIF Operand = OPERAND_V THEN
y := ????????????? HIER STEHEN DIE GROßEN FRAGEZEICHEN...
END_IF;
END_FUNCTION_BLOCK
//////////
Ich bin um jeden Hinweis dankbar
mfg
Markus