Step 7 SCL: Pointer Offset innerhalb von FB

britz

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich bin recht unerfahren in der SPS/SCL Programmierun leider stehe ich mal wieder auf dem Schlauch.

VAR_INPUT

x : BYTE;

END_VAR

nun beschalte ich das ganze von Außen mit x := P#DB1000.DBX600.0 (z.B.) was soweit auch funktioniert

Gibt es eine einfache Möglichkeit innerhalb des FB's (SCL) über die Variable x auf zb. DB1000.DBX650.0 zuzugreifen quasi als Offset ?

Ich nutze S7-400, SCL V5.3 + SP6 + Upd2
 
Der FB erhält am Input x eine Kopie von irgendwas - er kann garnicht wissen, daß da DB1000.DBB600 oder P#DB1000.DBX600.0(?) oder eine Konstante oder sonstwas dransteht.

Ergo: es geht nicht. Es würde nur gehen, wenn Du x als POINTER oder ANY übergibst.

Harald
 
Vom Verständnis her bin ich jetzt weiter, nur von der Syntax bzw. Umsetzung nocht weit entfernt
Es gibt viele Forumseinträge zu dem Thema aber leider verwirren die mich eher noch mehr
Falls jemand ein Beispiel für mein Problem parat hat wäre das super !
 
Mal angenommen ich nehme an:

FUNCTION_BLOCK FB2000

VAR_INPUT

x : ANY;

END_VAR

VAR_TEMP

i : INT;

END_FUNCTION_BLOCK

Was ist dann die Beschaltung von außen für x := .... wenn ich auf einen bestimmten Bereich im DB zugreifen und den Wert in i speichern möchte
Später möchte und dann mithilfe des Pointers an bestimmte Stellen des Datenbausteins springen relativ zur position des Pointers

BTW: S7 - Version 5.5 SP4
 
#Var_Bool := WORD_TO_BLOCK_DB(1000).DX(IDX := 650, BIT := 0);
Solche "Schweinereien" (*) würde ich Einsteigern lieber gar nicht erst zeigen, zumal bei den neueren SPS (S7-1200/S7-1500) solche Zugriffe nur noch mit zusätzlichen Klimmzügen möglich sind. Die Zeichen der Zeit stehen auf voll symbolische Adressierung.

(*) Solche Speicherzugriffe sind über die Referenzdaten nicht zu finden.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Harald,

Dann halte ich mich mal zurück
:cool:

aber über Any wird es nicht gerade einfacher.
Da hat er keine Kontrolle was rein kommt ob db, E, A oder M. bzw. Muss alles abfragen.
Über die dbNr und ByteNr ist es noch verständlich was passiert.

Kann aber bei der V5.5 Syntax leider auch nicht helfen.

Gruß Thomas


 
Zuletzt bearbeitet:
Zurück
Oben