SCL: FB Aufruf unter SCL mit Variablen DB

ThorstenK

Level-1
Beiträge
19
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, :)

nachdem ich nun schon einige Zeit mitlese möchte ich doch mal meine erste Frage hier ins Forum stellen.
Meine Problemstellung:

Ich möchte einen FB unter SCL mit einem variablen DB aufrufen.
Unter AWL mache ich dies wie folgt:

IN_Variablen:
DB : Typ = Block_DB

Programm:
call FB.#DB

Der gleiche Aufruf unter SCL:
VAar_Input
DB : Block_DB ;
END_Var_Input

FB.DB(Parameter);

Wenn ich diese vorhgehensweise unter SCL benutze bekomme ich eine Fehlermeldung.

Was mache ich Falsch???

Gruß Thorsten
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Scl

Hallo,

so gehts bei mir.

Code:
FB3.DB3(_DB :=DB100);

FB3 - aufgerufener FB
DB3 - IDB FB3
DB100 - variabler DB

wenn du nen variablen DB willst brauchste da extra nen IDB? Wie wärs mit nem FC?

André
 
Scl

übrigens wenn der Parameter DB heisst gibts bei allen Editoren ne Fehlermeldung weil DB ein Schlüsselwort ist!

André
 
ich find diese variable sache nich schön - wer erstellt denn die ganzen instanzen und aktualisiert sie bei ner änderung?

schöner hier meiner meinung nach: multiinstanz.

einfach mal drüber nachdenken... :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke schon mal für die antworten.

übrigens wenn der Parameter DB heisst gibts bei allen Editoren ne Fehlermeldung weil DB ein Schlüsselwort ist!

André

Die Variable selber heißt nicht DB hier nur als Beispiel.

ich find diese variable sache nich schön - wer erstellt denn die ganzen instanzen und aktualisiert sie bei ner änderung?

schöner hier meiner meinung nach: multiinstanz.

einfach mal drüber nachdenken... :rolleyes:

Es geht mir nicht darum das ich in ein und demselben Projekt den DB ändern kann.
Grund für meine variable Übergabe der DB-Nummer ist, dass ich meinen FB in mehreren verschiedenen Projekten nutze und somit nicht den Quellcode des FBs ändern möchte sondern dieses einfach bei dem FB Aufruf als Parameter. So können auch andere Mitarbeiter ohne sich mit dem Quellcode auseinandersetzen zu müssen mit dem Baustein arbeiten.

Somit fallen leider auch die Möglichkeiten mit dem FC usw. raus.

Mein Problem wie im Eingangspost beschrieben:
Code:
IN_Variablen:
Datenbaustein : Typ = Block_DB
 
Programm:
call FB.#Datenbaustein

unter AWL funktioniert dieses und unter SCL nicht. Obwohl der Aufruf und der die Deklaration identisch sind. (ohne call)
Die Hilfe gibt die selbe vorgehensweise vor.

Ich hoffe es ist ein wenig klarer geworden was ich vorhabe und wo das Problem ist.

Vielen Dank im Vorraus.

Gruß Thorsten
 
Zuletzt bearbeitet:
das geht so nicht.

...und deine begründung ... naja ... eher mau

Na - Na ...
Ich habe das auch mal getestet ... unter AWL geht es - unter SCL anscheinend nicht.

Ich glaube aber nicht, dass wir hier über Sinn und Unsinn einer Maßnehme diskutieren müssen - und m.E. schon gar nicht, warum jemand etwas so oder so machen möchte (außer vielleicht es ist völliger Quatsch).
Wenn Thorsten einen FB einmal mit I-DB100 und beim nächsten Mal mit I-DB200 versorgen möchte, dann ist das doch sein gutes Recht. Hier fehlt anscheinend wirklich etwas im SCL-Code ...

Gruß
LL
 
Ich denke über sinn und Unsinn sollten wir hier nicht diskutieren. Und unqualifizierte Antworten sollten einen sachlichen Thread nicht belasten!
das meinte ich!

und vorerst unsinn weil: er verlangt vom anwender, dass er den IDB von hand erstellt.
Man darf ruhig zugeben wenn man auf eine Frage keine Antwort weiß.

"Ein hartnäckiger Begleiter der Erkenntnis ist die Unwissenheit über die eigene Unwissenheit." - Stanislaw Lem, Also sprach Golem

[...]
Ich habe das auch mal getestet ... unter AWL geht es - unter SCL anscheinend nicht. [...]

Gruß
LL

Danke das Du es ausprobiert hast.

Ich denke dann, dass dies so noch keiner hier aus dem Forum genutzt hat.

Danke an alle und einen schönen Tag noch.

Gruß
Thorsten
 
Wenn du weißt das es so nicht geht, warum .... ???
Lassen wir das...

Ich denke ich warte einfach ab, was Siemens dazu sagt.
Bei einer Antwort werde ich die natürlich mitteilen.

Gruß
 
Unter AWL mache ich dies wie folgt:

IN_Variablen:
DB : Typ = Block_DB

Programm:
call FB.#DB

Hallo,

ich bekomme das noch nicht mal mit AWL hin.
In meinem Fall handelt es sich um FC Aufrufe, Ich Werte vier Eingänge aus (BCD) und schreibe das Ergebnis in eine DB als INT (0-15), anhand der Zahl in der DB soll nun das jeweilige FC(1-15) aufgerufen werden. Mit FUP geht es auch, aber nicht gerade Elegant, so muss 15 Netzwerke schreiben mit Vergleicher und einem CALL.
Kann mir das mit AWL jemand weiterhelfen bitte. Ich versuche auch schon seit zwei Tagen mit SCL, dann bin ich auf diesen Beitrag gestoßen.

MfG
youfyouk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
es gibt auch keine Funktion "irgendwas_to_Block_FC".
In AWL könntest du so vorgehen :
Code:
myFC : BLOCK_FC
myIndex : INT
 
L p#myFC
LAR1
L myIndex
T W [AR1,p#0.0]
 
UC myFC
... ist aber nicht getestet - so etwas ist nicht unbedingt mein Ding.

Warum willst du etwas so machen ? Du hast doch somit einen Programm-Crash schon fast vorprogrammiert ...

Gruß
Larry
 
Hi,

danke für die schnelle Antwort.
Eigentlich möchte ich nur wissen wie man einzelne FC's elegant aufruft.
Ich stecke noch in der Entwicklung und bin für jeden TIP dankbar.

Folgendes habe ich vor.
Eine Maschine mit Wechselwerkzeugen soll die Werkzeuge Steuern. Auf den Werkzeugen befinden sich unterschiedlich viele Sensoren und pn. Ventile.
Die Werkzeuge codiere ich mit 4Bit (BCD - Identifikation) und Werte die in z.B. FC100 aus und schreibe in DB1 als INT, anhand des Intergerwertes möchte ich dann das entsprechende "Unterprogramm" aufrufen FC 1-15. Gibt es Erfahrungsgemäß bessere Ideen für so etwas? Wie gesagt, bin für jeden TIP dankbar.

MfG
youfyouk
 
... wenn du sicherstellen kannst, dass es alle die berechnet aufgerufenen FC's auch wirklich gibt dann wirst du auch keinen Stress bekommen - den gibt es nur wenn du auf diese Weise einen FC aufrufen willst den du nicht hast ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja die FC's gibt es.

Code:
myFC : BLOCK_FC
myIndex : INT
 
L p#myFC
LAR1
L myIndex
T W [AR1,p#0.0]
 
UC myFC  // hier wird gemeckert...

Kenne mich in AWL leider nicht so gut aus.

MfG
youfyouk
 
Ja die FC's gibt es.

Code:
myFC : BLOCK_FC
myIndex : INT
 
L p#myFC
LAR1
L myIndex
T W [AR1,p#0.0]
 
UC myFC  // hier wird gemeckert...
Kenne mich in AWL leider nicht so gut aus.

MfG
youfyouk

Sollte man es nicht so schreiben?

Code:
UC FC [myFC]

[Edit]
NEIN, nicht so

Ist doch Block_FC, hab ich übersehen
[/Edit]
 
Zuletzt bearbeitet:
Zurück
Oben