Korrekter Aufruf von DPWR_DAT (SFC14) in SCL?

iga-graz

Level-1
Beiträge
46
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, ich habe folgendes Prob:

ich muss in einem FB von einer DP auslesen. Der FB ist in SCL geschrieben:

Ich möchte nun den Aufruf des SFC14 auch in SCL nachbilden, der in AWL funktioniert!
INPUTS_DRIVES = globaler DB
PD_IN_INDRADRIVE_ADR_5.EK_IN_DCP = Struktur im DB (14 Byte)

Aufruf in SCL geht nicht:
Code:
 _test := DPWR_DAT (LADDR := W#16#10C, RECORD := INPUTS_DRIVES.PD_IN_INDRADRIVE_ADR_5.EK_IN_DCP );
Die Fehlermeldung im SCL Compiler ist "ungültiger Datentyp"

Aufruf in AWL geht:
Code:
    call DPRD_DAT(                  // call SFC14 (read input peripherie adresses)
           LADDR  := W#16#10C,                // source peripherie adress 268(10) = 10C(16)
           RET_VAL:= MW120,
           RECORD := INPUTS_DRIVES.PD_IN_INDRADRIVE_ADR_5.EK_IN_DCP    // 7 words realtime channel
        );
Kann mir bitte jemand sagen wie ich meinen ANY Pointer im SCL füttern muss damit der Compiler mir ne Freude macht.

Ich habe natürlich schon im Forum gesucht aber noch nicht wirklich die Lösung für mich gefunden.

Ich habe auch folgendes ausprobiert - hat auch nicht funktioniert:
https://www.automation.siemens.com/...how.aspx?PageIndex=1&PostID=27096&Language=de

siehe dort unter:
Code:
DATA_BLOCK SendeDB und EmpfDB
  struct
    data_1_32 : array [1..32] of byte
    data_33_64 : array [1..32] of byte
  end_struct
begin
end_data_block

Die 32-Byte-Einheiten sind nötig, damit SCL den Any-Pointer für den SFC-Aufruf richtig bildet.

Absender:

rv1 := DPWR_DAT (LADDR := W#16#C8, RECORD := SendeDB.data_1_32);
rv2 := DPWR_DAT (LADDR := W#16#E8, RECORD := SendeDB.data_33_64);

Empfänger

rv1 := DPRD_DAT (LADDR := W#16#3E8, RECORD = EmpfDB.data_1_32);
rv2 := DPRD_DAT (LADDR := W#16#408, RECORD = EmpfDB.data_33_64);
vielen Dank für eure Hilfe

chris
 
ich befürchte, dass SCL die Unterstruktur in dem externen DB nicht kennt / erkennt.
Kannst du den Datenbereich nicht auch genauso in die Instanz deines FB's holen - dann wäre das so kein Problem ...
 
ich habs eigentlich schon versucht,

ich hab mir eine stat var in diesem FB angelegt, die genau die struktur von

INPUTS_DRIVES.PD_IN_INDRADRIVE_ADR_5.EK_IN_DCP

hat.

Aber das gleiche Ergebnis.

Also FB mit zugeordnetem DBi, in diesem eine stat mit der Struktur die ich brauche und das als Parameter Record Output an den SFC gehängt.

hmmm....
 
ich habs eigentlich schon versucht,

ich hab mir eine stat var in diesem FB angelegt, die genau die struktur von

INPUTS_DRIVES.PD_IN_INDRADRIVE_ADR_5.EK_IN_DCP

hat.

Aber das gleiche Ergebnis.

Also FB mit zugeordnetem DBi, in diesem eine stat mit der Struktur die ich brauche und das als Parameter Record Output an den SFC gehängt.

hmmm....

Hi, also als statische Struktur sollte das funktionieren. Hab's schon ein paar mal so gemacht. (siehe Dateianhang).
 

Anhänge

  • sclFB950.SCL.txt
    4,3 KB · Aufrufe: 240
ups, sorry bin grade auf meinen fehler draufgekommen,

ich habe den ret_val des sfc14 mit einer als WORD definierten Variable gefüttert, es wird aber nur eine Var im INT Format akzeptiert.

Der Rest funktioniert aber in SCL.

Ich kann also eine Struktur ganz einfach an den SFC übergeben.

Vielen Dank für eure Hilfe.

best Grüsse Chris :D
 
Zurück
Oben