Step 7 kann jemand mir mit Pointer hilfen?

samir85

Level-1
Beiträge
42
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
p1.PNGp2.PNG
Hallo Zusammen,
ich habe große Probleme mit Pointer/Zeiger, ich finde dem immer aber verstehe ich gar nix.
was ist pointer und wofür braucht man es? es gibt ein pdf dafür mit beispiele/Einführung?
beigefügte Bilder zeigt beispiel für Zeiger, und weiss es nicht warum der Programmierer hat P#18.0 und 40/44/...etc
vielen Dank im Voraus

LG
samir
 
Ich denke du suchst das FAQ zum Thema Pointer...
http://www.sps-forum.de/faq/8887-pointer-zeiger-fifo-lifo.html

Grundsätzlich zu deinem Screenshots. Beispiel
Code:
L     DBW[AR1,P#16.0]
L     DBW[AR1,P#18.0]

Die Zeile greift auf ein Datenbaustein-Wort zu. Wegen dem DBW. DBD markiert ein Datenbaustein-Doppelwort und DBX ein Bit aus dem Datenbaustein.
Auf welchen Datenbaustein, sehen wir in deinem Code-Schnipsel nicht. Vorher muss irgendwo ein Datebaustein mit dem Befehl "AUF" geöffnet werden.
Auf diesen Datenbaustein wird zugegriffen.

Dann beginnt die Sache mit dem Inhalt von AR1. AR1 ist das Adressregister 1 deiner CPU. Dort liegt ein Adressoffset drin.
Das AR1 wird vorher irgendwo wahrscheinlich mit dem Befehl Befehl LAR1 (Lade Adressregister 1) beschrieben.

Im AR1 stehe also ein Adressoffset. Nehmen wir mal P#30.0
Der zweite Teil in den Codezeilen (in meinem Beispiel P#16.0 und P#18.0] ist ein Zusatzoffset für den jeweiligen Ladebebefehl.

Würde im AR1 also wie beschrieben der Offset 30.0 stehen, dann würde der erste Befehl das DBW46 (30+16) und der zweite das DBW48 (30+18 ) laden.
Mehr steht im FAQ.

Damit man dir mehr sagen kann musst du uns aber mehr Code zeigen. Vor allem die Orte wo ein Datenbaustein geöffnet (Befehl AUF) und wo das AR1 geladen (LAR1) wird.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
vielen Dank RONIN für Ihre Informationen.

im Programm steht : AUF DB10 (sieh das Bild)

kann man sagen die DB-Adresse von "Parameter.HvO_Anzahl" von Type INT haben wir im Adressregister 1 so gespeichert: L DBW [AR1,P#0.0]
und die DB-Adresse von "Status.Quittieren" von Type bool haben wir im Adressregister 1 so gespeichert: L DBX [AR1,P#4.0] ?

DB10
DB10.PNG

Code:
      UN    DBX [AR1,P#16.0]            // HvO nicht vorhanden                                 // HMI not exist
      SPBN  m040

      L     0                           // Reset                                               // Reset
      T     DBW [AR1,P#18.0]
      T     DBD [AR1,P#40.0]
      T     DBW [AR1,P#44.0]
      T     DBD [AR1,P#50.0]
      T     DBD [AR1,P#54.0]
      T     DBD [AR1,P#60.0]
      CLR   
      =     DBX [AR1,P#16.4]            // Runtime nicht aktiv!                                // Runtime not active
      L     B#16#1                      // Fehlercode HvO abgewählt über Software              // Error code HMI deselected via software
      SPA   mend                        // beb                                                 // beb

m040: NOP   0

das Problem ist alle Werte im Code (18.0, 40.0.....60.0) sind Reserve...also es ist unsinn wenn man die zurücksetzen.
 
Zuletzt bearbeitet:
kann man sagen die DB-Adresse von "Parameter.HvO_Anzahl" von Type INT haben wir im Adressregister 1 so gespeichert: L DBW [AR1,P#0.0]
und die DB-Adresse von "Status.Quittieren" von Type bool haben wir im Adressregister 1 so gespeichert: L DBX [AR1,P#4.0] ?.

Ja und Nein ...
Es kommt darauf an, mit welcher Adresse (Adress-Offset) das AR1 schon vorbelegt ist. Wenn du das so verwenden willst dann sollte das AR1 auf den Anfang des Datenbausteins zeigen.

Im Falle deines Programmcodes kann ich dir nicht sagen, mit welchen Adressen die Pointer wirklich arbeiten, da das aus dem Code-Schnipsel nicht hervorgeht.
Es wird bei dieser Form des Zugriffs eine Summe aus dem Grundwert des AR1 und dem nachfolgenden (Zusatz-)Offset gebildet ...

Gruß
Larry
 
Zurück
Oben