Problem mit FB-Aufruf in SCL

puehri

Level-2
Beiträge
44
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo habe ien Problem mit einem FB Aufruf in SCL! :twisted:

Habe einen FB als In deklariert:

VAR_INPUT
// Eingangsparameter
FB_SIMODRIVE_CONTR : BLOCK_FB; //FB zur Ansteuerung der SIMODRIVE Control

.

.
END_VAR

In den statischen Vraiablen möchte ich diesennun zuweisen um in aufrufen zu können

VAR
// statische Variablen
STAT_FB_ACHSCONTR: FB_SIMODRIVE_CONTR;

END_VAR

Bekomme allerdings dann die Fehlermeldung: "Der Baustein ... konnte nicht gefunden oder kopiert werden"

Wenn ich allerdings schreibe:
VAR
// statische Variablen
STAT_FB_ACHSCONTR: FB83;

END_VAR

funktioniert alles einwandfrei!

Wie kann ich nun diesen Aufruf gestalten damit SCL meine AUfruf als FB 83 interpretieren kann?

Vielen Dank für eure Hilfe
 
Hallo puehri,
wenn du den FB im STAT-Bereich anlegst, dann benutzt du Instanz des FB's in dem du ihn anlegst.
Wenn du den FB im IN-Bereich anlegst, dann muss er als Instanz schon existieren (inkl. seines DB) und du benutzt nur eine Art Pointer auf den FB ...

Ich hoffe, du konntest verstehen, was ich zu erklären versucht habe ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, ich denke schon, Es wäre mir nur wichtig gewesen diesen Baustein flexibel zu halten, da man sonst immer im SCL Bausten den FB eintragen muss!

Aber ich verstehe warum das so nicht funktioniert!

Also gibt es hier keine Möglichkeit (so wie bei DB) auf diesen FB zuzugreifen??
 
... nein,
auf einen DB kannst du eigentlich auch nicht flexibel zugreifen. Du must immer auch dessen innere Struktur kennen um sinnvoll damit arbeiten zu können.
Was hast du denn vor mit diesem (flexiblen) Aufruf ?
 
Hallo,

ich glaube ich habe mich schlecht ausgedrückt!

Die Struktur eines DBs muss ich kennen, das ist mir klar.

Es geht eigentlich um Folgendes, das wir oft Erweiterungen haben im Moment. Jetzt kann es sein das in einem Projekt zum Beispiel der DB31 gebraucht wird dieser jedoch im nächsten Projekt nschon vorhanden ist.

Jetzt kann ich in SCL als In-Deklaration eine INT Variable mit der DB- Nummer anlegen.

Im SCL - Baustein wird dann der DB z.B.: mit
WORD_TO_BLOCK_DB(INT_TO_WORD(DB_NR)).DX211.6
aufgerufen. Dies dient nur dazu damit der SCL-Baustein nicht verändert werden muss.

Und genau das gleiche soll auch mit einem FB gehen. Nur kann SCL bei diesem indirekten Aufruf nicht den Bezug zum FB herstellen und somit auch nicht die In-/ Out Variablen anlegen.

Und daher meine Frage ob dies überhaupt möglich ist oder ob ich was falsch gemacht habe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du mal versucht den FB mit symbolischem Namen anzugeben und und der Symboliktabelle dann dafür die gewünschte FB-Nummer einzutragen?
 
Habs mal probiert, das ginge:

Code:
VAR
Test2: BOOL; 
TestFB: "Struct";
END_VAR
und in der Symolikdatei:

Struct FB 32 FB 32
 
Danke für den Tipp!

Habe ich gerade, versucht! Hat geklappt!

Wenn ich meinem Statischen FB den Symbolname zuweise funktionierts!

Nur ist das halt auch noch nicht ganz die Lösung, Wenn jetzt die Symbolik geändert wird funktioniert der SCL-Baustein wieder nicht!

Daher war mein Grundgedankt den FB von "aussen" in den SCl_Baustein zu bringen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für den Tipp!

Habe ich gerade, versucht! Hat geklappt!

Wenn ich meinem Statischen FB den Symbolname zuweise funktionierts!

Nur ist das halt auch noch nicht ganz die Lösung, Wenn jetzt die Symbolik geändert wird funktioniert der SCL-Baustein wieder nicht!

Daher war mein Grundgedankt den FB von "aussen" in den SCl_Baustein zu bringen

Das stimmt natürlich, ist aber wohl der einzige gangbare Weg.

Was übrigens ginge:

Code:
CC    FB [#Test] //Test: Word
Die Frage ist dann, wie kommt der FB an seine Instanzdaten und wo nimmt er die her? Da könnte man mal experimentieren. Da SCL nicht weiß welcher FB später gemeint ist, kann es die Instanzdaten ja nicht in den Multiinstanz-DB einlagern!
 
Zurück
Oben