SCL: Übergabe Instanz-DB (für FB in FC)

IchBinsNur

Level-1
Beiträge
12
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
So...
nach langem Suchen (ehrlich!) im Forum ist mir leider die Lösung nicht in den Schoß gefallen. Daher muss ich mal nachfragen.

Also: Ich habe in AWL einen FC, der intern den WRREC (SFB53) aufruft. Den nötigen Instanz-DB übergebe ich als Parameter. Der funktionierende Aufruf sieht dann so aus:

CALL SFB53, #INSTANZ_DB (
REQ := ACTV,
ID := ID,
INDEX := DS_NR,
LEN := DS_LEN,
DONE := Done,
BUSY := SFB_BUSY,
ERROR := ERROR,
STATUS := ERRORCode,
RECORD := SRC_INT);
Allerdings will es mir in SCL nicht gelingen! Es wird mir immer der Instanz-DB "angemeckert".

WRREC.INSTANZ_DB(
REQ := ACTV,
ID := ID,
INDEX := DS_NR,
LEN := DS_LEN,
RECORD := SRC_INT);

DONE := DBxxx.DONE; // <--- xxx Soweit bin ich ja noch nicht!
BUSY := DBxxx.BUSY;
ERROR := DBxxx.ERROR;
ERRORCode := DBxxx.STATUS;
Also... Wo ist mein Fehler? Und: Gibt es in SCL eine Lösung?
Danke vorab!
 
Hallo,
ich hätte da noch 2 Fragen :

1. Wo kommt "#Instanz_DB" weg ? (INPUT-Var ?)
2. Baust du dir da einen FC oder einen FB ?

Gruß
LL

Nachsatz:
Du baust einen FC - hast du ja geschrieben.
"#Instanz_DB" sollte vom Typ BLOCK_DB sein ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1. Wo kommt "#Instanz_DB" weg ? (INPUT-Var ?)
- Jau, ist ein VAR_INPUT und ein BLOCK_DB
2. Baust du dir da einen FC oder einen FB ?
- Ist eine FC

Es ist ein Umbau von AWL (funktioniert!) nach SCL (ist ja vieeeelll schöner). Ich hab auch schon (anscheinend nur fast) alle Möglichkeiten versucht:

WRREC.DB[BLOCK_DB_TO_WORD(INSTANZ_DB)],
WRREC.DB.WORD_TO_INT(BLOCK_DB_TO_WORD(INSTANZ_DB)
WRREC.INSTANZ_DB,
WRREC.BLOCK_DB_TO_WORD(INSTANZ_DB),
WRREC.WORD_TO_INT(BLOCK_DB_TO_WORD(INSTANZ_DB))
...
...
Auch mit internen Variablen und so... ich raff es einfach nicht :sm23:
 
Du musst dich da schon an die Syntax halten - tut mir leid.
Mach deinen INPUT-Parameter zu einem BLOCK-DB oder baue keinen FC sondern einen FB und mach den SFB zum Bestandteil der Instanz. Damit kannst du das Problem dann auch umgehen.
 
Also aus der FC einen FB machen geht definitiv nicht, da die FC ja u.U. mehrere (max.100) Male aufgerufen werden soll. Den Instanz-DB will ich deswegen auch nur einmal benutzen (Die Abarbeitung koordiniere ich schon innerhalb der FC).
Keine Frage, es gibt ja Möglichkeiten "mein Problem" in den Griff zu bekommen, aber aus Kompatibilitätsgründen sollten die FCs schon gleich bleiben.
Ich könnte jetzt die Bausteine, die einen Instanz-DB als Parameter besitzen in AWL belassen, aber SCL verstehen sogar die frischen INGs. Und da wäre eine einheitliche Sprache schon besser, oder?
Mir stellt sich nur die Frage: Warum funktioniert es in AWL und nicht in SCL?

@LL: Aus Deiner Antwort schliesse ich, dass die SCL-Variante NICHT umsetzbar ist, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist nicht so umsetzbar, wie du es vorhast ...
Warum du in SCL keinen BLOCK-DB als TEMP-Variable erzeugen kannst, das weiss ich auch nicht. Da bin ich auf schon mal darüber gestolpert ...

Ich verstehe dein Argument gegen einen FB nicht ... Du kannst einen FB mit dem gleichen I-DB auch 100mal aufrufen. Du musst dich dann nur (wie auch bei dem FC) extern darum kümmern, dass da nichts "in die Hose geht". Vielleicht ist das dann ja doch noch ein Ansatz ...

Gruß
LL
 
OK... LL, hast mich inspiriert ! (DANKE)

Ich hab mich also mal drangesetzt daraus einen FB zu machen.
Ist zwar nicht mehr aufrufkompatibel und die Instanz-DB-Daten sind auch verschoben, aber dafür liest sich der Code einfacher als in AWL.

FUNCTION_BLOCK FBxxx
...
...
VAR
Write_Rec : SFB53;
END_VAR
...
...
Write_Rec(
REQ := ACTV,
ID := ID,
INDEX := DS_NR,
LEN := DS_LEN,
RECORD := SRC_INT);
DONE := Write_Rec.DONE;
BUSY := Write_Rec.BUSY;
ERROR := Write_Rec.ERROR;
ERRORCode := Write_Rec.STATUS;
...
...
Eine Frage wäre da noch! - Wenn der Compiler es ermöglichen würde, dass man ihm sagt -"Jetzt kommt eine AWL-Sequenz"- dann wäre doch so manches Problem lösbar, oder??
Das kennt der Eine oder Andere evtl. noch aus Pascal-Tagen :ROFLMAO:. Da konnte man eine Hex-Sequenz einfügen...
 
Das "jetzt kommt eine AWL-Sequenz" ala Pascal-ASM geht (leider ?) nicht.
Ich muß dir aber gestehen, dass ich beim SCL-programmieren bisher noch keinen vermißt habe ... bisher ging alles ohne (bis auf dein spezielles Problem, dass wird aber nun auch gelößt haben).

Was ist der Hintergrund deiner Frage ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ist der Hintergrund deiner Frage ?
Naja, wie im Eingangsposting beschrieben, müsste ja dann der AWL-Aufruf des SFB53 funktionieren. Aber "jetzt kommt eine AWL-Sequenz" geeeeht jaaaa niiiicht.
Aber egal... Ich hab den Baustein als FB jetzt fertig und das "Problem" damit ad akta gelegt.
Danke nochmals für die Unterstützung...
 
Zurück
Oben