Zeigerprogrammierung

rachwe01

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Pointerprogrammierung in Simatic S7

TAR2
//Addressregister sichern : Der Inhalt von AR2 wird in den Akku transferiert

T #AR2
//Der Inhalt von Akku1 wird in die Lokalvariable transferiert,das heißt der ursprüngliche //Inhalt von AR2 ist jetzt in der lokalvariablen
















L P##Data
//Datenquelle… ( DB741.DBX16.0 ) wird da die Anfangsadresse vom entsprechenden DB’s //geladen…???

LAR1
//LAR1 lädt das Adreßregister AR1 mit dem Inhalt von AKKU 1
//Wie ist das AR1 an den Inhalt von Akku1 gekommen…???



L B [AR1,P#2.0]
//Speicherbereich…Hier handelt es sich um die bereichsübergreifende Adressierung…weil //der Speicherbereich mit B è Byte vor den eckigen Klammern angegeben wurde…
//Wenn ich im AR1 auf die Stelle Zeige…woher bekommt das System die Information das //dort 84h für DB drin steht???
//Bei DB und anderen Speicherbereichen ist es vielleicht noch einfacher…weil wenn Byte 0 //und 1 den wert 0 haben werden die Daten nicht in einem DB gespeichert…aber wir haben ja //auch Merker,Eingänge usw…woher bekommt man die Info???
// Mit welcher Information werden die 6Byte versorgt und wann???

L B#16#84
//84h = Datenbaustein…Hier handelt es sich um den Speicherbereich in der CPU…

<>I
Sollte gleich sein…ansonsten wird der Baustein verlassen…
SAVE
//SAVE speichert das VKE im BIE-Bit. Das Erstabfragebit /ER wird dabei nicht //zurückgesetzt.
//Aus diesem Grund wird bei einer UND-Verknüpfung im nächsten Netzwerk der Zustand des //BIE-Bits mitverknüpft.
//
//Die Verwendung von SAVE und eine nachfolgende Abfrage des BIE-Bits im gleichen //Baustein oder in unterlagerten Bausteinen wird nicht empfohlen, da das BIE-Bit durch //zahlreiche dazwischen liegende Operationen verändert werden kann. Sinnvoll ist der Einsatz //der Operation SAVE vor Verlassen eines Baustein, da damit der ENO-Ausgang (=BIE-Bit) //auf den Wert des VKE-Bits gesetzt wird und Sie daran eine Fehlerbehandlung des Bausteins //anschließen können.

BEB
//Wenn VKE = 1, dann unterbricht BEB (Bausteinende bedingt) den Programmablauf im //aktuellen Baustein und springt zu dem Baustein, der den aktuellen Baustein aufgerufen hat.

L W [AR1,P#0.0]
//DB Nummer…In meinem Beispiel steht dann dort die Zahl 741 drin…die Nummer des //DB’s…
//Bevor das Pointerformat abgefragt wird muss es ja schon versorgt sein…aber wann und //wie???
T #Datenbaustein
//An der Stelle Byte 0 und 1 steht die Datenbaustein Nummer,so dass diese in die //Lokalvariable Datenbaustein transferiert wird…

AUF DB [#Datenbaustein]
//AUF <Datenbaustein> öffnet einen Datenbaustein als Global-Datenbaustein oder als //Instanz-Datenbaustein. Es können jeweils ein Global-Datenbaustein und ein Instanz-//Datenbaustein gleichzeitig geöffnet sein.

Ab hier versteh ich fast gar nichts mehr??????????????????????????????????????????
L D [AR1,P#2.0]
Dort steht doch der Speicherbereich drin?????????????????????????????????????????
L DW#16#7FFFF
UD
// Verknüpft AKKU 1 mit AKKU 2 als UND
//Das Ergebnis wiederum wird in AKKU1 geschrieben!!!!
LAR1
//LAR1 lädt das Adreßregister AR1 mit dem Inhalt von AKKU 1
Steht dort dann das Verknüpfungsergebnis drin??????????????????????????????????
T #Source

LAR2 P##Data_1
//Datenziel ( Lokalbereich )
Bis hierher??????????????????????????????????????????????????????????????????????
Was passiert eigentlich mit den Bytes 3,4,5 aus dem Pointer Format???????????????????

L DBD [AR1,P#0.0]
T LD [AR2,P#0.0]
L DBD [AR1,P#4.0]
T LD [AR2,P#4.0]
L DBD [AR1,P#8.0]
T LD [AR2,P#8.0]
L DBD [AR1,P#12.0]
T LD [AR2,P#12.0]
L DBD [AR1,P#16.0]
T LD [AR2,P#16.0]
L DBD [AR1,P#20.0]
T LD [AR2,P#20.0]
L DBD [AR1,P#24.0]
T LD [AR2,P#24.0]

Vielen dank fuer eure Unterstuetzung...
rachwe01
 
Hallo,
es ist immer schön, wenn ein Beitrag auch mit einer Frage verbunden ist ...
Ich interpretiere das mal als Frage "was macht der folgende Code (oder so) ?"

Code:
[FONT=Times New Roman][SIZE=3]TAR2 
[/SIZE][/FONT][FONT=Times New Roman][SIZE=3]T #AR2[/SIZE][/FONT]
sichert den Inhalt des AR2 in der Hilfsvariablen

Code:
[FONT=Times New Roman][SIZE=3]L P##Data [/SIZE][/FONT]
bildet den Pointer auf die Variable oder Struktur ab (ich weiß so ohne weiteres nicht, was das ist)

Code:
[FONT=Times New Roman][SIZE=3]LAR1[/SIZE][/FONT]
das AR1 wird mit dem zuvor in den Akku geladenen Wert neu gesetzt - zeigt bei dir jetzt auf die Anfangsadresse von "Data"

Code:
[FONT=Times New Roman][SIZE=3]L B [AR1,P#2.0] [/SIZE][/FONT]
das Byte an Adresse AR1 + Offset von 2 Byte wird geladen. Ist in deinem Fall "Data" z.B. ein String so würde hier das erste Zeichen des Strings geladen.

bei den weiteren Codestellen könnte eine Erklärung dann Seiten füllen.
Vielleicht liest du dir doch erst mal ein bißchen was zum Thema "Aufbau vom Pointer" bzw. "Aufbau vom Any-Pointer" durch. Dazu findest du auch sehr viel hier im Forum.

Jedenfalls - ob eine Adresse aus einem DB kommt und wenn ja aus welchem weiß der Pointer schon von seinem Aufbau her :
Code:
[FONT=Times New Roman][SIZE=3]L W [AR1,P#0.0] 
[/SIZE][/FONT][SIZE=3][FONT=Times New Roman]T #Datenbaustein[/FONT][/SIZE]

Code:
[FONT=Times New Roman][SIZE=3]L D [AR1,P#2.0] [/SIZE][/FONT]
[SIZE=3][FONT=Times New Roman]L DW#16#7FFFF[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]UD [/FONT][/SIZE]
[FONT=Times New Roman][SIZE=3]LAR1 
[/SIZE][/FONT][SIZE=3][FONT=Times New Roman]T #Source[/FONT][/SIZE]
hier wird die eigentliche Adresse des Pointers geladen und für weitere Verwendung ausmaskiert und in Source und das AR1 übertragen.

Code:
[FONT=Times New Roman][SIZE=3]LAR2 P##Data_1 [/SIZE][/FONT]
lädt die Adresse der Variablen "Datas_1" in das AR2

Code:
[FONT=Times New Roman][SIZE=3]L DBD [AR1,P#0.0]
T LD [AR2,P#0.0][/SIZE][/FONT]
[SIZE=3][FONT=Times New Roman]L DBD [AR1,P#4.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]T LD [AR2,P#4.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]L DBD [AR1,P#8.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]T LD [AR2,P#8.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]L DBD [AR1,P#12.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]T LD [AR2,P#12.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]L DBD [AR1,P#16.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]T LD [AR2,P#16.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]L DBD [AR1,P#20.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]T LD [AR2,P#20.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]L DBD [AR1,P#24.0][/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]T LD [AR2,P#24.0][/FONT][/SIZE]
Speicherbereiche umkopieren ...

Gruß
Larry
 
Zurück
Oben