Übergabe von Pointer an ein Unterprogramm S7-200

Hamlet

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
musss mich jetzt mit Microwin rumschlagen und vielleicht kann mir jemand auf die schnelle helfen.
Ich möchte einen Pointer mit einer Byte bzw. Word Adresse an ein Unterprogramm übergeben und dann 10 Byte ab pointeradresse aus den Speicher auslesen.
Soviel ich weiss wird das Pointerformat mit &VW100 in ein Dword geschrieben. Wenn ich jetzt den Eingangsparamter zb. LD1 einlesen will meckert der Compiler.

Beispiel

MOVD &LD1,AC0
 
Hallo Hamlet.

Das mit dem Pointer bei der S7-200 ist eine ganz einfache Sache.
Willst du nur Daten auslesen oder auch Daten in die Variablen schreiben. Meinn Beispiel beinhaltet lesen und schreibe von 10 Bytes.
Du Deklariest in deinem Unterprogramm ein IN alls DWORD oder DINT. Als Beispiel den erste "IN" LD0 als "Pointer Daten". Als nächsten legst du dir 10 Bytes im "TEMP" des Unterprogrammes an z.B. als "Byte" Format mit dem Text als Beispiel "Daten 1", "Daten 2", usw. bis du 10 Bytes hast. Die Absoluten Adressen für diese Temp Daten stehen an der Linken Seite, in diesem fall LB4,LB5;LB6 usw. Der nächste Schritt in deinem Unterprogramm ist, im 1. Netzwerl folgendes zu schreiben.

NETWORK 1 Daten laden
LD SM0.0 // VKE 1
BMB *LD0,LB4,10 // Blockmove 10 Bytes

Im letztem Netzwerk brauchst du den Aufruf nur machen, wenn du die geladenen Daten bearbeites hast.

NETWORK 30 Daten sichern
LD SM0.0 // VKE 1
BMB LB4,*LD0,10 // Blockmove 10 Bytes.

In dem Zwischenraum zwischen 1. und letztem Netzwerk stehen die Daten der geladenen Variablen (10 Bytes lang) in LB4, LB5, LB6, LB7, LB8, LB9, LB10, LB11, LB12, LB13. Mit diesen Daten kannst du in deinem Unterprogramm machen wast du willst

Beim Aufruf des Unterprogrammes im MAIN must du nur am "IN" eine Pointervariable angeben vom dem die 10 Bytes gelesen werden. Ein Pointer wird am in immer "&" angegeben. Als Beispiel hier am "IN" &VB100. Es werden also 10 Bytes ab VB100 geladen.

Achtung du kannst in deinem Unterprogramm maximal mit 60 Byte arbeiten, da die S7-200 für den Aufruf von Unterprogrammen schon 4 Bytes reserviert.

Ich hoffe ich konnte dir weiterhelfen. Bei weiteren fragen einfach melden ich kann dir auch gerne ein Unterprogramm mit Pionteraufruf zusende.

MfG
Wittmann Hubert
 
Zurück
Oben