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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 33

Thema: Datenbausteinbereich umkopieren mit blokmove

  1. #1
    Registriert seit
    26.09.2010
    Beiträge
    64
    Danke
    9
    Erhielt 12 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forummitglieder,

    um einen Datenbereich mit Versatz in einen andere Bereich zu kopieren benutze ich Blokmove.
    Der Quell- und Zieldatenbereich wird über Any-Pointer zusammengestellt.
    Die Steuerung ist eine 1515-2 PN. Die Pointeradressen sind korrekt.
    Wenn ich versuche die Daten im Instands DB umzukopieren, stürzt die Steuerung ab, mit der Meldung Bereichsfehler.
    Wenn ich jedoch einen globalen Datenbaustein verwende, kopiert er mir diese Bereich problemlos um.
    Warum kann ich die Daten nicht im Instands DB umkopieren?
    Weiß an dieser Stelle nicht weiter. Der Anweisungscode wurde in AWL geschrieben.
    Hatte jemand schon einmal das selbe Problem?
    Das Programm war Lauffähig auf S7-300 und wurde migriert nach TIA 1500.
    P.s. der Instands DB ist nicht mit optimierten Zugriff erstellt.

    Gruß Waldi
    Zitieren Zitieren Datenbausteinbereich umkopieren mit blokmove  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Scheint so als wäre die ANY-Adresse doch nicht korrekt.
    Ohne Deinen Code zu kennen kann man nur raten.
    Benutzt Du vielleicht Multiinstanzen und verarbeitest den Multiinstanz-Offset aus AR2 nicht oder falsch? Oder verändert Dein Code das AR2? Wie lautet die Fehlermeldung genau? Passiert der Fehler bei dem BLKMOV oder an anderer Stelle?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    26.09.2010
    Beiträge
    64
    Danke
    9
    Erhielt 12 Danke für 7 Beiträge

    Standard

    Hallo Harald

    erst mal Danke für deine Antwort
    Der IDB ist eine Multiinstanz. Die Adressbereich sind genau so vorhanden wie in ANY Pointer Deklariert.
    Der DB ist ca. 10 KB groß und der Zielbereich ist 2047 Byte lang.
    Deine Frage mit dem Offset habe ich nicht ganz verstanden. Das AR2 wird von mir nicht geändert.
    Der BD wird nur einmal verwendet.
    ANY Pointer.jpg

    Quelle P#DB200.DBX94.0 Byte 227
    Ziel P#DB200.DBX457.0 Byte 227

  4. #4
    Registriert seit
    26.09.2010
    Beiträge
    64
    Danke
    9
    Erhielt 12 Danke für 7 Beiträge

    Standard

    sorry
    Quelle P#DB200.DiX94.0 Byte 227
    Ziel P#DB200.DiX457.0 Byte 227

    Any Ponter.jpg
    Geändert von Waldi1954 (08.01.2016 um 20:21 Uhr)

  5. #5
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.732
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    Kann ja sein, das ich mich jetzt auch furchtbar irre:
    Aber entweder DB mit DBX
    oder aber DI mit DIX.

    DB mit DIX ist eigentlich vom Gefühl her blödsinn.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  6. #6
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.732
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    P.S. In Step7 kann man mit DIX und Co. nur so arbeiten:
    AUF DI200
    U DIX200.0

    Ein vollqualifizierter Zugriff ist nur mit DB200.DBX200.0 möglich.

    Insofern mit höchster Wahrscheinlichkeit, bezogen auf deinen Any-Pointer entweder DIX ohne DB-Nummer, oder DBX mit DB-Nummer.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  7. #7
    Registriert seit
    26.09.2010
    Beiträge
    64
    Danke
    9
    Erhielt 12 Danke für 7 Beiträge

    Standard

    Hallo MSB

    man kann ja nur eine Nummer bzw. 0 in Word 4 von ANY eintragen.

    // Quelldaten-Pointer
    LAR1 P##L_ptQuelldaten
    L B#16#10 // S7-Kennung
    T B [ AR1 , P#0.0 ]
    L B#16#2 // Datentyp=Byte
    T B [ AR1 , P#1.0 ]
    L #L_iLaenge // Wiederholfaktor
    T W [ AR1 , P#2.0 ]
    L DINO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // DB-Nummer
    T W [ AR1 , P#4.0 ]
    L #"ADR PA-SelectString 2"// Speicherbereich, Byte/Bit-Adr.
    T D [ AR1 , P#6.0 ]

    Das geht nicht
    P#Di200.DiX94.0 Byte 227 lässt sich nicht Parametrieren

    Mit Wert 0 in Word 4 des ANY wird P#DiX94.0 Byte 227
    eingetragen, geht aber auch nicht, wird aber von der 300 akzeptiert.
    Auch bei direkter Vorgabe mit p#xxxxx geht es nicht, Instanz wird nicht akzeptiert.

  8. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Hier mal ein Beispiele, dass ich von einem Kollegen übernommen habe.
    Vielleicht hilft das ein wenig weiter. tut auf einer 1500-er Dienst.
    Es wird ein Any-Struct ausgegeben, der dann manipuliert wird (DB-Nummer wird geändert) und eine AT-Ansicht davon (Any) wird an den Blk_Move(Variant) gelegt.

    Schnappschuss (2016-01-08 22.44.40).jpg

    PS: Ich seh gerade, rechts im Baustein fehlt am Ende noch:

    L W [ AR1 , P#8.0 ]
    T #AdressOut.AnyPoint.ByteBitAdr
    Geändert von Ralle (08.01.2016 um 22:51 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

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Die Diagnosemeldung besagt "Fehler bei Lesezugriff auf Bereich 0 Adresse 0". Also Zugriff auf Adresse P#0.0 ohne Bereichsangabe.
    Kann man in dem TIA zur Fehler-auslösenden Programmstelle gehen? Vielleicht ist das garnicht bei dem BLKMOV?
    Wie wird die Adresse in der Variablen #"ADR PA-SelectString 2" berechnet? Kann es sein, daß da auch mal 0 drinsteht wenn BLKMOV aufgerufen wird?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hmm, müßte BLKMOV fehlerhafte ANY-Pointer (wie P#0.0 ohne Bereichskennung) nicht eigentlich abfangen?
    Hast Du vielleicht auch noch indirekte Lese-Operationen mit nicht initialisiertem Pointer/AR1?
    Oder pfuscht mal wieder der Compiler?

    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 DB umkopieren
    Von spirit im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 04.11.2014, 11:10
  2. TP070 ohne Projekt umkopieren
    Von kassla im Forum HMI
    Antworten: 0
    Letzter Beitrag: 14.01.2010, 21:00
  3. Antworten: 4
    Letzter Beitrag: 05.02.2009, 13:02
  4. SCL: DB-Bereiche umkopieren
    Von dinner4one im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 27.06.2008, 21:17
  5. String umkopieren
    Von Ralle im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 13.09.2007, 20:08

Stichworte

Lesezeichen

Berechtigungen

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