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

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

Thema: Index Array

  1. #1
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    habe nur eine ganz kleine Frage:

    ist es nur in SCL möglich den Index eines Arrays indirekt zu adressieren?

    Vielen Dank im voraus.

    In welchen Step 7 Paketen ist denn SCL dabei?

    Gruß peraho
    Zitieren Zitieren Index Array  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Was heißt indirekt adressieren?
    Du kannst in SCL den Index eines Array als Variable (INT) eingeben.

    Code:
    i := 10;
    MyArray[I] := 25;
    In Step7-Professionel ist SCL bereits dabei, man kann es aber auch einzeln erwerben.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    peraho (07.04.2009)

  4. #3
    peraho ist offline Benutzer
    Themenstarter
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Ralle,

    erst mal vielen Dank für die Eilantwort.
    In AWL gibt es also keine Möglichkeit den Index des Arrays über eine Variable anzusprechen?
    Liege ich richtig, daß dies nur über Pointer auf die jeweilige Adresse des Elements im DB möglich ist?

    Gruß peraho.

  5. #4
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von peraho Beitrag anzeigen
    In AWL gibt es also keine Möglichkeit den Index des Arrays über eine Variable anzusprechen?
    Das ist richtig, es gibt es in AWL keine Möglichkeit, den Index eines Arrays über eine Variable anzusprechen.

    Zitat Zitat von peraho Beitrag anzeigen
    Liege ich richtig, daß dies nur über Pointer auf die jeweilige Adresse des Elements im DB möglich ist?
    Auch das richtig, Du musst hier mit Pointern auf die jeweiligen Adressen der Variablen arbeiten.

    Gruß Kai

  6. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    peraho (07.04.2009)

  7. #5
    peraho ist offline Benutzer
    Themenstarter
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Kai,

    vielen Dank für die Info.

    Gruß peraho

  8. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von peraho Beitrag anzeigen
    Hi Ralle,

    erst mal vielen Dank für die Eilantwort.
    In AWL gibt es also keine Möglichkeit den Index des Arrays über eine Variable anzusprechen?
    Liege ich richtig, daß dies nur über Pointer auf die jeweilige Adresse des Elements im DB möglich ist?

    Gruß peraho.
    Genau, so ist es. Ich hatte da nicht ganz präzise auf deine Frage geantwortet, das "nur" überlesen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. #7
    peraho ist offline Benutzer
    Themenstarter
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Ralle,

    alles klar. Danke für die Bestätigung. Werde dann mal fleißig Pointer basteln.

    Gruß peraho

  10. #8
    Registriert seit
    26.03.2007
    Beiträge
    47
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Ralle, ich müsste dieses Thema noch einmal aufleben lassen, habe folgendes Problem:

    Habe diese einfachen Zuweisungen als Funktion programmiert, da sich das Array vom Typ DWORD aber 1..699 wiederholt ist es sehr aufwendig den Index pro Box 13 mal zu ändern.
    Da es in AWL, so wie es weiter oben steht, nicht möglich ist den Index als INT anzugeben, soll dies ja mit einem Pointer funktionieren, könntest du mir erklären wie ich das machen muss? Leider habe ich noch nicht mit Pointern gearbeitet.

    Vielen Dank!!!

    // Box Frei
    U "DB_Box".Box[10].Bit16_Vorwahl_Frei
    UN "DB_Box".Box[10].Bit28_Status_Stoerung
    = "DB_Box".Box[10].Bit24_Status_Frei
    // Box Belegt
    UN #Eingang
    U "DB_Box".Box[10].Bit17_Vorwahl_Belegt
    UN "DB_Box".Box[10].Bit28_Status_Stoerung
    = "DB_Box".Box[10].Bit25_Status_Belegt
    // Box Bestellt
    U "DB_Box".Box[10].Bit18_Vorwahl_Bestellt
    UN "DB_Box".Box[10].Bit28_Status_Stoerung
    = "DB_Box".Box[10].Bit26_Status_Bestellt
    // Box Leer
    U #Eingang
    U "DB_Box".Box[10].Bit17_Vorwahl_Belegt
    UN "DB_Box".Box[10].Bit28_Status_Stoerung
    = "DB_Box".Box[10].Bit27_Status_Leer
    // Box Störung
    U #Stoerung
    = "DB_Box".Box[10].Bit28_Status_Stoerung

  11. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Sieh dir bitte zuerst die FAQ des Forums an, da gibt es sehr gute Beiträge zum Thema Pointer und Any und indirekte Adressierung. Dann kannst du hier im Forum ebenfalls suchen, Stichwörter wären "Pointer" "indirekte Adressierung". Damit hast du erst mal eine Menge zu lesen und zu verstehen, aber das macht durchaus Sinn.
    In deinem Falle gibt es verschiedene Vorgehensmöglichkeiten (na ja, wie eigentlich immer).

    Code:
    L Index //Index als INT
    L 4  //DWORD besteht aus 4 Byte, daher zur Adressierung des richtigen DBD *4 (das geht natürlich auch mit SLD 5 statt SLD 3)
    *D
    SLD 3 //Pointerformat erstellen
    LAR1 //in das Adressregister 1 laden
    Damit kannst du dann auf einzelne Bits des DWORD zugreifen (P#0.0 bis P#3.7)

    Code:
    AUF "BOX_DB"
    U     DBX [AR1,P#1.0]
    Ich bin mir gerade nicht sicher, in welcher Reihenfolge die Bits adressiert werden müssen,
    also ob in dem DWORD Bit0 auch P#0.0 oder P3.0 ist, das müßte ich auch erst mal nachsehen,
    aber das kannst über ein kleines Testprogramm auch selbst herausbekommen.

    Es gibt noch ein andere Möglichkeit, indem man die Variable per indirekter Adressierung auf eine Hilfsvariable
    kopiert und dann mit den einzelnen Bits dieser Hilfsvariable weiterarbeitet und anschließend das Ganze wieder Return,
    das ist aber schwieriger zu erklären.
    Geändert von Ralle (12.10.2012 um 21:02 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  12. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mit ist noch was einfaches eingefallen.
    Du hast in deinem BOX_DB DBD0 als Arbeits-DW, dein Array beginnt daran anschließend mit Index 1!!!
    Im DBD 0 (als Variable ArbeitsDWORD) sind deine Bits einzeln deklariert.

    Code:
    L Index //Index als INT
    L 4  //DWORD besteht aus 4 Byte, daher zur Adressierung des richtigen DBD *4 (das geht natürlich auch mit SLD 5 statt SLD 3)
    *D
    SLD 3 //Pointerformat erstellen
    LAR1 //in das Adressregister 1 laden
    
    AUF BOX_DB
    L DBD [AR1, P#0.0]
    T BOX_DB.DBD0
    
    // Box Frei
    U "DB_Box".ArbeitsDWord.Bit16_Vorwahl_Frei
    UN "DB_Box".ArbeitsDWord.Bit28_Status_Stoerung
    = "DB_Box".ArbeitsDWord.Bit24_Status_Frei
    // Box Belegt
    UN #Eingang
    U "DB_Box".ArbeitsDWord.Bit17_Vorwahl_Belegt
    UN "DB_Box".ArbeitsDWord.Bit28_Status_Stoerung
    = "DB_Box".ArbeitsDWord.Bit25_Status_Belegt
    // Box Bestellt
    U "DB_Box".ArbeitsDWord.Bit18_Vorwahl_Bestellt
    UN "DB_Box".ArbeitsDWord.Bit28_Status_Stoerung
    = "DB_Box".ArbeitsDWord.Bit26_Status_Bestellt
    // Box Leer
    U #Eingang
    U "DB_Box".ArbeitsDWord.Bit17_Vorwahl_Belegt
    UN "DB_Box".ArbeitsDWord.Bit28_Status_Stoerung
    = "DB_Box".ArbeitsDWord.Bit27_Status_Leer
    // Box Störung
    U #Stoerung
    = "DB_Box".ArbeitsDWord.Bit28_Status_Stoerung
    
    L BOX_DB.DBD0
    AUF BOX_DB
    T DBD [AR1, P#0.0]
    Geändert von Ralle (12.10.2012 um 21:02 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Array mit index
    Von bluebird277 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 29.08.2011, 11:23
  2. Schieberegister mit Array und Variablem Index
    Von bluebird277 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.03.2011, 12:05
  3. Index aus Array auslesen
    Von heri1980 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.09.2010, 14:54
  4. Antworten: 27
    Letzter Beitrag: 17.07.2006, 22:20
  5. Index in S7 AWL
    Von plc_tippser im Forum FAQ
    Antworten: 1
    Letzter Beitrag: 13.07.2006, 10:10

Lesezeichen

Berechtigungen

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