Hallo
Parameterübergabe auf einer 1200/1500 läuft bei FC ganz anders als bei 300/400.
Bei der 300/400 ist im Aufrufer hinter dem UC eine Liste von 32-Bit Pointern. Im Gerufenen wird mittels "indirekter" Adressierung der Wert des n. Parameters in den Akku oder das VKE geladen. Deswegen geht das auch nur bis 32 Bit breiten Datentypen. Wenn der FC-Parameter mit einer Konstante versorgt werden soll, dann muss daher im L-Stack des Aufrufers eine Kopie der Konstanten erzeugt werden. Weil es sich um einen 32 Bit Pointer handelt, kann man nicht direkt auf DB zugreifen, denn der DB muss gleichzeitig im DB-Register geöffnet sein ... deswegen des Wertes im L-Stack. Will man auf eine Struktur übergeben, dann ... ach alles sehr sehr kompliziert.
Ein L P##Input_bit liefert den 32-Bit Pointer des n.Parameters im Akku 1 ab. Der Aufbau ist wie im AR. D.h. man kann sich jetzt 8 bits für den Bereich (P,E;A;M;DB; ...) und 24 Bit die aus 8*Byte+Bit bestehen kratzen.
Bei der 1200/1500 werden alle einfachen Datentypen (bis 64Bit) mittels eines speziellen "Stack" als Wert übergeben. Das ist nicht der L-Stack. Ich weiß aber nicht was es ist, und S. verrät nix. Breiteres wird mittels eines Zeigers übergeben. Dieser Zeiger kann aber nur auch auf optimierte DB zeigen, das ist also weder der bekannte POINTER noch der beliebte ANY, sonder "was besseres" -- ein VARIANT -- über dessen Aufbau veraten sie aber auch nix. Der Zugriff mittels dieser Zeiger auf optimierte DB ist deutlich schneller als der in den absolut adressierten Merkerbereich. Aber was soll denn nun L P##Input_bit machen. Ein Stackadresse abliefern? Das bringt dir nix, denn du willst ja den Eingang haben. Und wenn es mehr als 32 Bits sind, dann brächtest du einen Zeiger, der fetter sein dürfte als der ANY. Passt also auch nicht in einen Akku.
So geht das nicht. Schon mal was von GetSymbolName() und GetSymbolPath() gehört.
Wenn du am Aufruf
hast, dann kannst innerhalb von myFC mit
Code:
myWString := GetSymbolName(#in1)
das "DBA".b.c in den myWString schicken.
Irgendwo ist da noch eine Längenangabe ... am besten mal die Hilfe konsultieren
Damit lassen sich deutlich schönere Ausgaben produzieren als auf 300/400.
'n schön' Tach auch
HB