Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Adresse an Pointer übergeben

  1. #1
    Registriert seit
    03.11.2010
    Beiträge
    39
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich habe folgendes Problem:
    ich habe ein Hochregallager mit welchem über 2 Zaehler (x- und Y-Richtung) die Position ermittelt wird vor welchem Fach er sich befindet.
    Zudem habe ich ein UDT angelegt in dem die Informationen zu den jeweiligen Bausteinen hinterlegt werden.

    Die Position habe ich ermittelt und ich lege es in der Statischen Variable "Fach_aktuell" ab.
    Das UDT habe ich ebenfalls in dem FB implementiert (brauche ich das überhaupt?!)

    Ich habe nun Probleme die adresse an den Zeiger zu übergeben und auf den Inhalt des UDT's zuzugreifen.

    ich habe es folgendermaßen Versucht:
    Code:
          L     #Fach_aktuell
          DEC   1
          L     P#0.0
          +R    
          LAR1
    und zwar entspricht das erste Element im UDT dem Fach1 (also der adresse 0.0)
    Deshalt dekrementiere ich die Variable "Fach_aktuell" und addiere es zur adresse hinzu.

    Ist das überhaupt so realisierbar und wie kann ich dann die Elemente des UDT's ansprechen?!
    Zitieren Zitieren Adresse an Pointer übergeben  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.418 Danke für 2.014 Beiträge

    Standard

    Hallo,
    wenn du Pointer verrechnest, so ist deine Rechen-Operation +D nicht +R
    wenn du aus einem INT-Wert heraus einen Pointer bilden willst. so mußt du daraus eine Bit-Adresse machen (der Pointer adressiert nämlich im Bit-Bereich). Also muß nach deinem DEC 1 ein SLD 3 kommen (also x 8 ). Damit würdest du dann eine Byte-Adresse ansprechen. Einen Offset p#0.0 brauchst du nicht addieren (weil Wert +0 bleibt Wert).

    Für weitere Hilfestellung bräuchte ich ein paar mehr Info's ...

    Gruß
    Larry
    Geändert von Larry Laffer (17.11.2010 um 10:19 Uhr)

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.339
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Dein Code addiert Bit-Adressen, Du müßtest aber je Fach den Pointer um die Länge der zugehörigen Datenstruktur erhöhen.
    Ungefähr so: Pointer = (#Fach_aktuell - 1) * Länge_eines_Facheintrags * 8) + Anfangsadresse_erster_Facheintrag

    * 8 macht man mit SLD 3

    Kannst Du Deinen UDT mal herzeigen?
    Ist Dein UDT ein ARRAY OF STRUCT (jedes Fach ein Struct) oder ein ARRAY OF BYTE (jedes Fach ein Byte)?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    schuld ist offline Benutzer
    Themenstarter
    Registriert seit
    03.11.2010
    Beiträge
    39
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi Larry Laffer,

    im Anhang mal der Komplette Code!
    Mit dem Code ermittle ich die Position des Faches. Das funktioniert soweit.
    Insgesamt habe ich 4 Reihen á 5 Fächer also insgesamt 20 Fächer.
    Steht der Greifer nun vor dem Fach1 dann beinhaltet die Variable "#Fach_aktuell" den Wert 1.

    Dann habe ich ein ein UDT das 20 Integervariablen enthält (für jedes Fach eine Variable)

    sooo ... also wenn ich nun eine "1" bekomme von "#Fach_aktuell" dann soll sich der Pointer auf Fach1 stellen
    Bei einer 16 soll analog dazu die 16te Variable angesprochen werden.

    ... also wie gesagt ich häng genau an der letzten stelle.

    Gruss Schuld
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg UDT.JPG (120,8 KB, 33x aufgerufen)
    Angehängte Dateien Angehängte Dateien
    Geändert von schuld (17.11.2010 um 10:15 Uhr) Grund: hinzufügen des UDT

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.418 Danke für 2.014 Beiträge

    Standard

    dann wäre dein Code :
    Code:
     L     #Fach_aktuell
     DEC   1
     SLW 4   //entsprich x16 wegen Wort-Adressierung
     L p#UDT_Variable  // wenn der UDT in deinem Baustein (FC oder FB) direkt deklariert ist
     +D
     LAR1
     L W [ar1,p#0.0]
    Gruß
    Larry

  6. #6
    schuld ist offline Benutzer
    Themenstarter
    Registriert seit
    03.11.2010
    Beiträge
    39
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi Larry Laffer,

    also wenn ich das so realisiere wie du mir vorgeschlagen hast dann bekomm ich folgendes Bild (siehe Anhang)
    Mein UDT habe ich als statische Variable deklariert und Faecher genannt.


    Da steht aber eine riesen Zahl drin!! :P muss das so sein?!?
    Und was muss ich nun machen damit ich zB eine 2 in die Variable zu schreiben auf die der Zeiger zeigt?!


    Danke schon mal für eure Hilfen und Mühen!
    Schuld
    Angehängte Grafiken Angehängte Grafiken
    Geändert von schuld (17.11.2010 um 10:53 Uhr) Grund: erweiterung...

  7. #7
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Ja, der Pointer hat ne Menge stellen.

    Ich glaube 48Bits.

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.418 Danke für 2.014 Beiträge

    Standard

    @Verpolt: doch wohl eher 32 Bits ...

    Zitat Zitat von schuld Beitrag anzeigen
    Da steht aber eine riesen Zahl drin!! :P muss das so sein?!?
    Die riesen Zahl ist nicht der Inhalt sondern der Adress-Pointer auf die Speicherstelle ...

    Zitat Zitat von schuld Beitrag anzeigen
    Und was muss ich nun machen damit ich zB eine 2 in die Variable zu schreiben auf die der Zeiger zeigt?!
    Das heißt, du möchtest in das gewählte Fach den Wert 2 hineinschreiben ?
    Wenn ja, dann den pointer bilden, wie schon geschehen und dann wie folgt verfahren :
    Code:
    L 2
    T W [ar1,p#0.0]
    gruß
    Larry

  9. #9
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    @Verpolt: doch wohl eher 32 Bits ...
    Hmm....

    Dann ist in der FAQ wohl Nachholbedarf
    Angehängte Grafiken Angehängte Grafiken

  10. #10
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.628
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @Larry
    Weshalb "SLW 4"?
    Es ist gleichgültig ob Byte oder Wortzugriff es ist immer "SLW 3".
    Gruß
    Michael

Ähnliche Themen

  1. Pointer an Funktion übergeben
    Von Anaconda55 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 01.11.2011, 19:54
  2. Pointer an FB übergeben, aber wie?
    Von Aendes im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 21.03.2008, 11:59
  3. Pointer an FB übergeben
    Von xhasx im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 26.07.2007, 22:40
  4. Pointer einem parametrieren FC übergeben
    Von S7_Mich im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 23.10.2004, 15:03

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •