Aufruf von BSEND mit AWL

svkers

Level-1
Beiträge
25
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo AWLer :)

ich habe eine Frage zu nachfolgendem Code-Ausschnitt:

+AR2 P#32.0;
UC FB 12;
+AR2 P#8160.0;

Mir geht es um den Aufruf des FB12 (BSEND). Der FB12 erwartet ja verschiedene Parameter (ID, R_ID, ...). Ich verstehe nicht, wie in obigen Code die Parameter an den FB übergeben werden. Ich hätte ein CALL FB 12 (ID :=, ....) erwartet.


Vielen Dank!
Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim FB12 handelt es sich um den BSEND-Baustein. Der Zweck ist ja Daten über eine S7-Verbindung zu versenden. Irgendwie muss dem FB ja die Informationen übergeben werden, sonst kann ja nix verschickt werden. Was bezweckt also der Aufruf? Können die Daten noch auf eine andere Weise übergeben werden? Der AWL-Code wurde aus SCL in STEP 7 generiert. Der SCL-Code sieht so aus:

BSEND( REQ := REQ,
R := R,
ID := ID,
R_ID := RID,
SD_1 := Daten,
LEN := 10 );

Der FB12 bekomt also sehr wohl Daten übergeben. Die Frage ist nur, wie das in dem aus der SCL-Quelle generierten Code gemacht wird...

Vielen Dank!
Grüße
 
Hmm, es muss irgendwie das AR eine Rolle spielen, da:

+AR #P32.0
UC FB 12;

Der Block hat eine STAT-Section, in welcher an Adresse 32 eine Variable VAR vom Typ BSEND startet. Direkt vor dem UC FB 12 Aufruf wurden genau VAR.ID, VAR.R_ID, ... gesetzt.

Aber leider verstehe ich es noch nicht.
Für Hinweise wäre ich sehr dankbar :)

Grüße
 
Gehe doch einfach in das Menü Einfügen->Bausteinaufruf. Dann geht die Maske für die Bibliotheken auf.
Wähle dann den BSend aus und Du bekommst eine der folgenden Code-Vorlage.

Code:
BSEND.DBxxx(REQ :=  // IN: BOOL
            ,R :=  // IN: BOOL
            ,ID :=  // IN: WORD
            ,R_ID :=  // IN: DWORD
            ,SD_1 :=  // INOUT: ANY
            ,LEN :=  // INOUT: WORD
            ); 
   := DBxxx.DONE; // OUT: BOOL
   := DBxxx.ERROR; // OUT: BOOL
   := DBxxx.STATUS; // OUT: WORD

[code]

Die braucht Du dann nur noch Parametrieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist MC7-Code, letzten Endes wird jeder Call Aufruf so gewandelt, auch wenn du das als "Normal"-Anwender nicht sehen solltest ...
Ergo ist der ganze Baustein wohl irgendwann mal inkonsistent gespeichert oder auch von einer CPU hochgeladen worden.
Ergo2 ist es mit dem bloßen Wandeln des FB-Aufrufs nicht getan, in dem Baustein ist mit Sicherheit noch mehr im Argen, was nicht "normal" ist.

Wann und wodurch es zu dem Effekt kommt weiß ich auch nicht genau, aber das ist mir auf jedenfall auch schon so passiert ...

Mfg
Manuel
 
Ich bin mir noch nicht einmal sicher ob "svkers" den Aufruf in AWL oder SCL haben wollte.
Aber wie auch dem die Aufrufe von FB's kann man in Step7 grundsätzlich über die
Bibliotheks-Funktion erzeugen um den Aufbau des Aufruf's keine Gedanken machen.

MfG
Günther
 
Hallo,

vielen Dank für die zahlreichen Anregungen! Ja, ich bin eigentlich nicht an dem SCL interessiert, sondern dem AWL-Code interessiert. Ich versuche zu verstehen,
warum der STEP7-Compiler aus dem BSEND-Aufruf, eine UC FB 12 generiert und vor allem wie dann die Parameterübergabe stattfindet, welche ja im SCL-Code vorhanden ist. Im entsprechenden AWL-Code müssen die Parameter also auch irgendwie an den FB 12 übergeben werden.

Grüße,
Sven
 
Was ist der Unterschied zwischen der CALL- und der UC- bzw. CC-Aufrufanweisung?

http://support.automation.siemens.c...eg=WW&load=content&csQuery0=uc&subtype=130000

Ich denke, das meint er nicht. Wir hatten das schon einmal hier im Forum, vielleicht findet der TE das über die Forensuche. Ich glaube mich zu erinnern, dass der Compiler die Call-Aufrufe zerlegt und die zu übergebenden Daten vorher auf den LStack schiebt, bin aber nicht ganz sicher, hab mich damit nicht eingehender befaßt. 4L wußte da ein wenig mehr zum Thema.
 
ich hab mal ne ganz dumme frage...wie und wo erstellt man hier einen neuen beitrag???

viel grüße susi

Gehört zwar nicht hier rein, aber ok. ;)

Am Besten gehst du in die Rubrik, in der du ein Thema erstellen wilst. Dann, wie SoftMaschine schon schrieb, oben Links "Thema erstellen".
Bitte einen recht aussagekräftigen Titel wählen, so dass man daran schon ein wenig erkennen kann, in welche Richtung die Frage geht!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo svkers!

So wie es aussieht, wird dem FB12 der IDB indirekt übergeben.
Mit AUF DI wird irgendwo der entsprechende IDB geöffnet, und mit dem +AR2 wird das Adressregister auf den
Anfang des Parametersatzes gestellt.

Grüße
Gebs
 
Jepp !
Habe gerade selbst was probiert.
Sieht so aus, dass bei einem UC FB xx das AR2 vorher eingestellt sein muss, damit der aufgerufene FB seine Werte findet
 
Zurück
Oben