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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Bin grade Bind, DB inhalt in UDT Var. kopieren!

  1. #1
    Registriert seit
    18.06.2010
    Beiträge
    29
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo an alle,

    vorarb noch mal bin blutiger Einstierger und finde grade meinen Fehler nicht...

    Ich versuche die ganze Zeit aus einem DB-Array von einem UDT Typ eine Variabele herraus zu kopieren, nach den Beispielen von:



    http://spsforum.eu/showpost.php?p=77858&postcount=1
    http://www.sps-forum.de/showpost.php...5&postcount=11

    Die Struktur des UDT ist auf dem Bild zu sehen.

    Vorab beziehe ich mich auf den ersten Datensatz des Arrays.

    Übergabe Parameter:
    zielDBW = w#16#1
    anzSchrtitWudt10W = w#16#8
    anfangsAdrZielDbW =w#16#0

    Code:
    // Baue DB Zeiger 
          L     B#16#10                     // Lade Wert für einen Bereichsübergeifender Zeiger
          T     LB     0                    // Speicher in zielANYPDbx Byte 0
          L     B#16#2                      // Lade Wert für Datentypcodierung Byte
          T     LB     1                    // Speicher in zielANYPDbx Byte 1
          L     #anzSchrtitWudt10W          // Lade die Länge des UDT10 - 8 BYTE
          T     LW     2                    // Speicher in zielANYPDbx Byte 2
          L     #zielDBW                    // Lade Adresse des DB
          T     LW    4                    // Speicher in zielANYPDbx Byte 4
    
          LAR1  P#DBX 0.0                   // Lade Zeiger auf Globaldendatensatz
          L     DW#16#0
          L     #anfangsAdrZielDbW          // L
          SLD   3
          +AR1  
          TAR1  LD     6
    
    // Baue tSensor Zeiger
          L     B#16#10                     // Lade Wert für einen Bereichsübergeifender Zeiger
          T     LB    10                    // Speicher in zielANYPDbx Byte 10
          L     B#16#2                      // Lade Wert für Datentypcodierung Byte
          T     LB    11                    // Speicher in zielANYPDbx Byte 11
          L     #anzSchrtitWudt10W          // Lade die Länge des UDT10
          T     LW     2                    // Speicher in zielANYPDbx Byte 12
          L     0                           // Auf kein DB Refernzieren!
          T     LW     4                    // Speicher in zielANYPDbx Byte 14
          L     P##tSensor                  // Lade Adresse des tSensors
          T     LD    16                    // Speicher sie ab Byte 16
    
    // Kopiere Inhalt des DB Sensor x in tSensor
    
          CALL  "BLKMOV"
           SRCBLK :=#zielANYPDbx
           RET_VAL:=#RetValSFC20
           DSTBLK :=#anyPtSensor
    
    // Teste
          L     #tSensor.BgKAdr // Hier steht 320 im DB
          T     #testint
    Vielen Dank im Vorraus P
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Bin grade Bind, DB inhalt in UDT Var. kopieren!  

  2. #2
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    http://www.sps-forum.de/showthread.php?t=12923

    Hast dir das schon mal angeschaut. Vielleicht findest du es selbst raus was falsch ist?
    LG

    Sehe gerade, dass du das schon getan hast.Lese es nochmals durch und vergleiche mit dem was du fabriziert hast.
    Kleiner Tipp.
    +AR1
    TAR1
    Bist du sicher, dass das so gehört?
    Wer lesen kann ist klar im Vorteil.
    Geändert von Gerhard K (24.06.2010 um 16:26 Uhr)
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  3. #3
    Potenzial ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.06.2010
    Beiträge
    29
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @Gerhard K
    Ja schau schon die ganze Zeit drauf.

    Will halt das Array später halt durch iterieren und so die UDTs auslesen

    LAR1 P#DBX 0.0 // Lade Zeiger auf Globaldendatensatz
    L DW#16#0 // Alles Null setzten
    L #anfangsAdrZielDbW //
    SLD
    +AR1
    TAR1 LD 6


    Du meinst ich kann mir das "SLD 3" sparen?

    P

  4. #4
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    Nein was soll das
    +AR1
    TAR1

    bewirken??

    Code:
    L     B#16#10                   //10h für s7
          T     LB     0
          L     B#16#02                   //Typ BYTE
          T     LB     1
          L     8                         //Anzahl (Wiederholungsfaktor)
          T     LW     2
          L     33                         //Datenbaustein
          T     LW     4
          L     14                        //Anfangsadresse
         SLD   3                         //Pointer bauen
         T     LD     6
         L     B#16#84                   //Speicherbereich (hier DB)
         T     LB     6
    Und was meinst du mit Globaldatensatz?? Einen Global DB??
    Geändert von Gerhard K (24.06.2010 um 17:04 Uhr)
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  5. #5
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    Noch was. Hab mir dein Bild angesehen.
    Ist ein Struct und kein Array!!
    Da hast ja INT und BOOL gemischt.

    Du willst nur einen Wert da raus kopieren und diesen dann weiterverarbeiten??
    Geändert von Gerhard K (24.06.2010 um 17:22 Uhr)
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

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

    Standard

    Noch was. Hab mir dein Bild angesehen.
    Ist ein Struct und kein Array!!
    ...

    Du willst nur einen Wert da raus kopieren und diesen dann weiterverarbeiten?? Gestern 17:00
    Also habe mein Struct-UDT10 genommen und im DB 10 ein Array gebildet von Typ UDT10, wie es Vierlang vorgemacht hat:
    http://www.sps-forum.de/showpost.php...76&postcount=7

    Dieses Datensatz Array will ich später durch iterieren und dann mit Daten füllen.

    Zuerst lese ich die das UDT aus, bzw. ziehe mir die Adresse raus von der Baugruppe die ich mit PEW [xxx] auslesen will. Werte das Signal / Zustand aus und schreibe es dann wieder zurück.



    Da hast ja INT und BOOL gemischt.
    Zuerst stehe im UDT die Baugruppen+Kanaladresse und dann die Zustände.
    Das ich ein Byte Speicherplatz verschwende weis ich.

    Nein was soll das
    +AR1
    TAR1

    bewirken??
    Will halt damit durch den Speicher des DBs iterieren bzw über das Arrayfeld und muss immer ein UDT10 Datensatz[6Byte-größes des UTD10] weiter springen pro Iteration
    Code:
    LAR1 P#DBX 0.0 // Lade Zeiger auf Globaldendatensatz
    L DW#16#0 // Alles Null setzten
    L #anfangsAdrZielDbW // 
    SLD 
    +AR1 
    TAR1 LD 6
    Angehängte Grafiken Angehängte Grafiken

  7. #7
    Potenzial ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.06.2010
    Beiträge
    29
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe noch mal das ganze etwas umgestrickt,
    jetzt sieht es mehr nach dem letzten (besten) Beispiel von Volker aus.

    Weiter hin habe ich das
    LAR1 P#DBX 0.0 // Lade Zeiger auf Globaldendatensatz
    L DW#16#0 // Alles Null setzten
    L #anfangsAdrZielDbW //
    SLD
    +AR1
    TAR1 LD 6

    Raus gelassen, da das der Bereichszeiger doch abgedeckt sollte und den kann ich dann später hochzählen?

    Der Aufbau des ANY-Zeigers:
    Code:
    Bit |15.. ..8 | 7.. ..0 |
    Byte 0 | 10h für S7 | Datentyp | Byte 1
    Byte 2 | Wiederholungsfaktor | Byte 3
    Byte 4 | DB-Nummer (oder 0) | Byte 5
    Byte 6 | Speicherbereich | 0 0 0 0 0 B B B | Byte 7
    Byte 8 | B B B B B B B B | B B B B B b b b | Byte 9

    Trotzdem versaubeutl ich den Any-Zeiger für den tSensor (typ UDT10), bzw. habe noch Probs. mit dem richtigen Bereichszeiger, siehe Screenshot.

    Code:
    
           LAR1 P##zielANYPDbx               // Lade Adresse des zielANYPDbx
    
           L    B#16#10                      // Lade Wert für einen Bereichsübergeifender Zeiger
           T    LB [AR1,P#0.0]               // Speicher "B#16#10" an die Stelle des zielANYPDbx mit dem "offset" P#0.0
           L    B#16#02                      // Lade Typ: Byte
           T    LB [AR1,P#1.0]               // Speicher Typ Byte an die Stelle des zielANYPDbx mit dem "offset" P#1.0
           L    #schrtittWudt10W             // Lade Schrittweite / Bytes die geschrieben werden sollen.
           T    LW [AR1,P#2.0]               // ... mit dem offset P#2.0
           L    #zielDBW                     // Lade die Nummer des Ziel DBs
           T    LW [AR1,P#4.0]               // .. mit dem offset P#4.0
    //LAR1 P#DBX     0.0
           L    DW#16#00000000
           L    #anfangsAdrZielDbW
           SLD            3
           T    LD [AR1,P#6.0]
           L    B#16#84                      //Speicherbereich (hier DB)
           T    LB [AR1,P#6.0]
    
    
           LAR1 P##anyPtSensor
           L    B#16#10
           T    LB [AR1,P#0.0]               // Speicher "B#16#10" an die Stelle des zielANYPDbx mit dem "offset" P#0.0
           L    B#16#02                      // Lade Typ: Byte
           T    LB [AR1,P#1.0]               // Speicher Typ Byte an die Stelle des zielANYPDbx mit dem "offset" P#1.0
           L    #schrtittWudt10W             // Lade Schrittweite / Bytes die geschrieben werden sollen.
           T    LW [AR1,P#2.0]               // ... mit dem offset P#2.0
           L    0                            // Lade die Nummer des Ziel DBs, da kein DB-Any Pointer ist steht hier eine 0
           T    LW [AR1,P#4.0]               // ... mit dem offset P#4.0
    
    
    // FEHLER AB  HIER!!!
           L    P##tSensor                   // Lade Adresse der TempVar tSensor typ UDT10
           T    LD [AR1,P#6.0]               // .. mit dem offset P#6.0
    // Bereichszeigertyp müsste 6 sein [temporäre Lokaledaten], sollte  aber auf jeden fall richtig mit,  L P##tSensor  erfasst sein
    //     L    86 // Bereichszeigertyp müsste 6 sein [temporäre Lokaledaten]
    //T    LB [AR1,P#6.0]               // Überschreibe Bereichszeigertyp mit dem offset P#6.0
    
    // FEHLER BIS HIER!!!
    
    
           CALL "BLKMOV"
             SRCBLK:=zielandypdbx
             RET_VAL:=RetValSFC20
             DSTBLK:=anyPtSensor
    Danke noch mals an Alle! [ =i
    Angehängte Grafiken Angehängte Grafiken

  8. #8
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    Code:
    // Bereichszeigertyp müsste 6 sein [temporäre Lokaledaten], sollte  aber auf jeden fall richtig mit, 
     L P##tSensor  //erfasst sein 
     T LD[AR1,P#6.0]
     L    86          // Bereichszeigertyp müsste 6 sein [temporäre Lokaledaten]
     T    LB [AR1,P#6.0]// Überschreibe Bereichszeigertyp mit dem offset P#6.0
    
    // FEHLER BIS HIER!!!
    Code:
    L #tSensor
    SLD 3
    T LD[AR1,P#6.0]
    L B#16#86  // Speicherbereich (Lokaldaten)
    T LB{AR1,P#6.0]
    Probier das mal.
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  9. #9
    Potenzial ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.06.2010
    Beiträge
    29
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Bisher gehts immer noch nicht,...

    danke so weit...
    Lade gleich den nächsten Fehler Screen, wird die letzte Kommentationszeile angepannger..
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Potenzial (25.06.2010 um 13:13 Uhr)

  10. #10
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    wo ist eigentlich dieser tSensor deklariert und wie berechnest du diese Anfangsadresse?
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 27.01.2011, 21:22
  2. Inhalt von Datenbausteinen kopieren
    Von minix0 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.06.2008, 17:00
  3. FC-Aufruf mit DB-Inhalt
    Von Drain im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 25.09.2007, 07:56
  4. DB Inhalt löschen mit SCL
    Von Rose im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.06.2006, 12:29
  5. Auf DB-Inhalt zugreifen
    Von delacasa im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 10.06.2006, 11:42

Lesezeichen

Berechtigungen

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