Step 7 Indirektes adressieren mit einem FB

PeterPan-35

Level-2
Beiträge
157
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wenn ich in einem FB einen Zeiger als statische Variable anlegen möchte, bekomme ich beim Programmieren eine Meldung, dass das nicht ginge.

Ich muss mir den Zeigerwert aber über mehrere Zyklen sichern. Da ich den Baustein mehrmals verwenden muss, kommen z.B. Merkerbereiche nicht in Frage.

Mit Adressregistern funktionier das ja auch nicht, da dieser im neuen Zyklus wieder was undefiniertes drin stehen hat.

Habe bisher sehr wenig außerhalb einer Loop-Schleife indirekt Adressiert. In einer Schleife gibt es damit weniger Probleme [emoji6]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, ich habe auf die Schnelle mal was kleinrs geschrieben.

2444b3064f55153da568721fc66a58f1.jpg


e3939e684ad5d13534abf5891495720b.jpg
 
Hallo Steven,

du du könntest am Anfang von Deinen Programm den Zeiger von Stat auf Temp mit einer Move Box legen oder mit Lade Transveriere von Star auf Temp umlegen du könntest den Zeiger dannnam Ende des Fb s wieder von Temp auf Stat Variablen umlegen.


Mit freundlichen Grüßen Tia
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Dein FB "nicht multiinstanzfähig" wäre, dann würde die direkte Verwendung des STAT-Dint als Pointer für die speicherindirekte Adressierung gehen. Es ist aber kein Problem, den Pointer vor Verwendung aus STAT in TEMP umzukopieren, wie schon Wincctia vorschlug.

Allerdings: Warum willst Du einen Pointer über mehrere Zyklen speichern?
Ich würde den Pointer "vorsichtshalber" in jedem Zyklus neu berechnen. Das ist vermutlich einfacher als den Pointer im nächsten Zyklus zu überprüfen, ob er noch eine für Deinen Zweck zulässige Adresse enthält. Ich würde mir nur den Index merken bzw. das woraus der Pointer berechnet wird.

Desweiteren könnte man durch das Verwenden von Pointern aus vorherigen Programmzyklen vielleicht mal die Möglichkeit von Online-Programmchanges verlieren (bei anderen CPUs, anderen Programmiersystemen). Beim jetzigen Step7 "classic" passiert das zum Glück nicht wegen dem besonderen Format der POINTER. Ich würde es mir aber gar nicht erst angewöhnen. Irgendwann will man womöglich den Code migrieren oder in einem anderen System verwenden, wo die Verwendung von alten Pointern zum Crash führen kann ...

Harald
 
Zurück
Oben