Adresse von Formaloperanden ermitteln

Wenn ich das so lese, scheint mir, dass schon Step7 mal einen Pointer, mal einen Pointer auf Pointer übergibt. Allerdings ist so kaum vorstellbar, wie VAR_INPUT funktionieren kann. Benutzt Step7 intern undokumentierte Workarounds?

Oder übergibst du selbst beim Funktionsaufruf mal den Merker selbst, mal einen Pointer auf ein Bit?

Andererseits denke ich, (um de Bedenken von forendiva weiter auszuführen), dass eine solche Datenstruktur im Merkerbereich vielleicht gar nicht nötig ist. Statt dessen würde ich einen UDT anlegen, der die 5 Bits und alles weitere enthält, und bei Bedarf Arrays und sonstiges in Global-DBs. Dann kannst du diesen UDT in VAR_IN_OUT übergeben. Mit SCL könntest du dann weitere Direktzugriffe auf AR1 eliminieren.

Oder hängt alles vom Aufbau des mysteröisen UDT11 und dem dazugehörenden Code ab? Dann könntest du die Bits noch in Arrays ablegen und einen Index auf die Arrays übergeben; der Index ist für alle Arrays gleich. Die Arrays liegen dann am besten in einem DB und der FC21 kann dann von SCL profitieren.

Außerdem habe ich auch schon von einer gewöhnlichen VAR_...-Variablen den Pointer genommen, dann online ausprobiert, auf was das eigentlich zeigt, und darauf basierend speziellen Step7-Code geschrieben. In manchen Fällen ist das ein Pointer auf Pointer, obwohl aus Quellcodesicht nur ein UDT übergeben wird. So wie hier, erkennbar am "V..."-Pointer.
 
Zurück
Oben