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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Pointer DB

  1. #11
    BlackDice ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.09.2016
    Beiträge
    29
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ach verdammt übersehen. Hab jetzt ein <=D draus gemacht.

  2. #12
    BlackDice ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.09.2016
    Beiträge
    29
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok danke das hat jetzt alles geklappt.

    Jetzt möchte ich aber noch die ganzen Werte die im DB1 stehen von DB1.DBD2 bis DBD30 addieren und im DBD38 ausgeben.

    Code:
          AUF   DB     1      
    L     P#2.0
    
          L     0
          T     DB1.DBD   46
    
    hoch: L     DB1.DBD    2
          SRD   3
          LAR1  
    
          L     DBD [AR2,P#2.0]
          L     DB1.DBD   38
          +D    
          T     DB1.DBD   38
    
          L     DB1.DBD   46
          L     30
          >=D   
          SPB   ende
    
          L     DB1.DBD   46
          L     L#4
          +D    
          T     DB1.DBD   46
    
          SPA   hoch
    
    ende: NOP   0

  3. #13
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    10.076
    Danke
    838
    Erhielt 2.965 Danke für 2.390 Beiträge

    Standard

    Trink' mal noch einen Kaffee und dann konzentriere Dich mal. Außerdem wird ein Code gleich viel verständlicher (auch für den Programmierer selber ), und man sieht Fehler viel schneller, wenn man ein bisschen Symbolik benutzt, sprich: statt Adressen DBD38 und DBD46 symbolische Namen vergibt: z.B. Summe und Loopzaehler, und dem DB1 auch einen Symbolname geben.

    Zitat Zitat von BlackDice Beitrag anzeigen
    Code:
          AUF   DB     1      
    L     P#2.0
    
          L     0
          T     DB1.DBD   46
    
    hoch: L     DB1.DBD    2
          SRD   3
          LAR1  
    
          L     DBD [AR2,P#2.0]
          L     DB1.DBD   38
          +D    
          T     DB1.DBD   38
    
          L     DB1.DBD   46
          L     30
          >=D   
          SPB   ende
    
          L     DB1.DBD   46
          L     L#4
          +D    
          T     DB1.DBD   46
    
          SPA   hoch
    
    ende: NOP   0
    Besser:
    Code:
          L     0
          T     DB1.DBD   38     //Summe auf 0 initialisieren
    
          L     2                //Nummer erstes DBD: DBD2
    hoch: T     DB1.DBD   46     //Schleifenzähler
          SLD   3                //Nummer --> Adresse: n --> P#n.0
          LAR1
    
    //Werte addieren:
    //      AUF   DB1            //AUF Daten-DB hier, falls die Daten in einem anderen DB stehen
          L     DBD [AR1,P#0.0]
          L     DB1.DBD   38
          +D    
          T     DB1.DBD   38
    
    //Anzahl Durchläufe erreicht?
          L     DB1.DBD   46     //Schleifenzähler
          L     34
          >=D   
          SPB   ende
    
    //Schleifenzähler auf nächstes DBD weiterstellen:
          L     DB1.DBD   46
          L     L#4
          +D    
    //      T     DB1.DBD   46     //hier unnötig, wird bei hoch: gespeichert
    
          SPA   hoch
    
    ende: NOP   0
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #14
    BlackDice ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.09.2016
    Beiträge
    29
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok danke. Ich habe AR2 verwenden weil ich das AR1 schon im Netzwerk darüber verwende.

    Der richtige Wert wird noch nicht ausgegeben. Da kümmer ich mich aber gleich drum.
    Jetzt habe ich allerdings das Problem das dieses Netzwerk im Test nicht aufgerufen wird. Also der Run Balken ist zwar grün aber bewegt sich nicht.

    edit:
    Ok hat sich geklärt. Funktioniert alles. Fast. Denke die anderen Kleinigkeiten bekomme ich hin. Danke nochmals.
    Geändert von BlackDice (28.09.2016 um 12:43 Uhr)

  5. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    10.076
    Danke
    838
    Erhielt 2.965 Danke für 2.390 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von BlackDice Beitrag anzeigen
    Ich habe AR2 verwenden weil ich das AR1 schon im Netzwerk darüber verwende.
    Das tut dem AR1 nichts, wenn es nacheinander für was anderes verwendet wird.

    Besser, man benutzt das AR2 nur wenn unbedingt nötig, dann hat man weniger nachzuarbeiten, falls man den Code in einen als "multiinstanzfähig" markierten FB kopiert, weil da darf man AR2 nicht so einfach verändern.

    Ohne die Adressregister AR1/AR2 und besser lesbar ist speicherindirekte Adressierung mit dem variablen Pointer in einer TEMP-Variable:
    Code:
    //TEMP: DBD_Pointer : DINT ; (DWORD geht auch)
    
          L     0
          T     "DB1".Summe         //Summe auf 0 initialisieren
    
          L     P#2.0               //Adresse erstes DBD: DBD2
    hoch: T     #DBD_Pointer
    
    //Werte addieren:
    //      AUF   DB1               //AUF Daten-DB hier, falls die Daten in einem anderen DB stehen
          L     DBD [#DBD_Pointer]
          L     "DB1".Summe
          +D    
          T     "DB1".Summe
    
    //Anzahl Durchläufe erreicht?
          L     #DBD_Pointer
          L     P#34.0
          >=D   
          SPB   ende
    
    //Pointer auf nächstes DBD weiterstellen:
          L     #DBD_Pointer
          L     P#4.0
          +D    
          SPA   hoch
    
    ende: NOP   0
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Step 7 Pointer
    Von 00alex im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.06.2013, 06:57
  2. Pointer als IN (FC/FB) wieder übergeben als Pointer
    Von saarlaender im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 18.06.2012, 11:47
  3. S7 LAR P##... --- pointer auf pointer
    Von milmu im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.11.2010, 17:39
  4. Pointer
    Von Mathias im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.06.2009, 17:02
  5. Pointer
    Von OB1 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 20.02.2009, 17:52

Lesezeichen

Berechtigungen

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