lindnerlars
Level-1
- Beiträge
- 39
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo Leute,
In meinem SCL-Code definiere ich FB1, der vom OB1 aufgerufen wird und wiederum FB2 aufruft. In den statischen Variablen von FB1 habe ich (jetzt nur zum Test) zwei Bool-Variablen definiert, die dann ja im DB1 liegen, da der DB1 der Instanz-Datenbaustein von FB1 ist. Im FB2 möchte ich auf die Daten im DB1 zugreifen. Folgender Code:
Das Problem ist nun, dass, wenn ich vorher NICHT alle Bausteine manuell unter Bausteine im SIMATIC Manager angelegt habe, der Compiler obige Fehlermeldung ausgibt, da er beim ersten Zugriff auf den DB1 diesen noch nicht kennt. Folgende Zwickmühle:
1. Im SCL-Handbuch steht, dass in einer SCL-Quelle alle aufgerufenen Bausteine VOR den aufrufenden Bausteinen stehen müssen!
2. Ebenfalls steht dort drin, dass ein Instanz-DB automatisch erzeugt wird, sobald der FB im Anwenderprogramm aufgerufen wird.
Ergo müsste der Compiler (bei nicht angelegten Bausteinen) im ersten Durchlauf den DB1 anlegen und im zweiten diesen dann kennen und ohne Probleme durchlaufen. MACHT ER ABER NICHT!!!
Selbst wenn ich die Bausteine manuell anlege, muss ich erst zweimal kompilieren, bis der Durchlauf ohne Fehler beendet wird. Was mache ich falsch?
vielen Dank Leute und viele Grüße
Lars
In meinem SCL-Code definiere ich FB1, der vom OB1 aufgerufen wird und wiederum FB2 aufruft. In den statischen Variablen von FB1 habe ich (jetzt nur zum Test) zwei Bool-Variablen definiert, die dann ja im DB1 liegen, da der DB1 der Instanz-Datenbaustein von FB1 ist. Im FB2 möchte ich auf die Daten im DB1 zugreifen. Folgender Code:
Code:
FUNCTION_BLOCK FB2
IF (DB1.Test1) THEN
DB1.Test2 := TRUE;
END_IF;
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB1
VAR
Test1 : BOOL := 0;
Test2 : BOOL := 0;
END_VAR
FB2.DB2();
END_FUNCTION_BLOCK
ORGANIZATION_BLOCK OB1
VAR_TEMP
// reserviert
info : ARRAY[0..19] OF BYTE;
// temporäre Variablen
END_VAR
BEGIN
FB1.DB1();
END_ORGANIZATION_BLOCK
Das Problem ist nun, dass, wenn ich vorher NICHT alle Bausteine manuell unter Bausteine im SIMATIC Manager angelegt habe, der Compiler obige Fehlermeldung ausgibt, da er beim ersten Zugriff auf den DB1 diesen noch nicht kennt. Folgende Zwickmühle:
1. Im SCL-Handbuch steht, dass in einer SCL-Quelle alle aufgerufenen Bausteine VOR den aufrufenden Bausteinen stehen müssen!
2. Ebenfalls steht dort drin, dass ein Instanz-DB automatisch erzeugt wird, sobald der FB im Anwenderprogramm aufgerufen wird.
Ergo müsste der Compiler (bei nicht angelegten Bausteinen) im ersten Durchlauf den DB1 anlegen und im zweiten diesen dann kennen und ohne Probleme durchlaufen. MACHT ER ABER NICHT!!!
Selbst wenn ich die Bausteine manuell anlege, muss ich erst zweimal kompilieren, bis der Durchlauf ohne Fehler beendet wird. Was mache ich falsch?
vielen Dank Leute und viele Grüße
Lars