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

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

Thema: BLKMOV und überlappende Bereiche

  1. #1
    Registriert seit
    10.10.2008
    Beiträge
    43
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich hätte da mal eine Frage, die ich so hier im Forum noch nicht gefunden habe: Es geht um die Funktion BLKMOV (SFC20). Es wird in der Dokumentation beschrieben, dass Quell- und Ziel-Bereich nicht überlappen dürfen.

    Folgendes Szenario: Ich habe ein ARRAY[1..10] OF UDT4711 (stellt es euch als FIFO vor). In einer Funktion bearbeite ich nun das FIFO, das heißt immer das erste Element in einem Zyklus. Bin ich mit dem Element fertig, sollen die Elemente 2..10 eins nach vorne rutschen, also auf die Plätze 1..9.

    Ich vermute mal stark, dass BLKMOV das Kopieren byte-weise durchführt. Sofern das Ziel *vor* der Quelle liegt, sollte hierbei kein Fehler passieren, oder? Alternativ (so mache ich es bisher) kopiere ich ein Element nach dem anderen eins nach vorne.

    Gruß
    Max
    Zitieren Zitieren BLKMOV und überlappende Bereiche  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.205
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Egal ob BLKMOV Byte- oder DWord-weise kopiert: es kommt nicht drauf an, weil er ja zuerst aus dem Quellbereich lesen muß bevor er in den möglicherweise überlappten Zielbereich schreiben kann. Solange BLKMOV aufsteigend arbeitet und der überlappende Zielbereich nicht hinter dem Quellbereich beginnt, funktioniert das Kopieren. Und das tut er schon immer so. Doch wenn man sich nicht darauf verlassen mag, dann kann man zunächst in einen zweiten temporären Bereich kopieren und danach von da zum eigentlichen Zielbereich.

    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
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.493
    Danke
    1.142
    Erhielt 1.243 Danke für 974 Beiträge

    Standard

    Ob überlappende Zugriffe mit Blockmove funktionieren hängt von der Hardware ab.
    Mit einer CPU312 klappt es nicht, mit einer 315 oder 317 schon.
    Da es die schnellste Funktion ist um ein FIFO zu schieben, verwende ich die Sache auch gerne.
    Wenn es nicht klappt, dann brauchst du eben einen Temp-Bereich in zuerst deine Daten reinschiebst und anschliessend in den Zielbereich überträgst.
    Aber selbst mit 2 Blockmove-Aufrufen ist es meist immer noch schneller als die üblichen Schleifen-Konstrukte.
    Besonders elegant lässt sich sowas mit Views (AT) in SCL lösen.

    Gruß
    Dieter

  4. #4
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.358
    Danke
    456
    Erhielt 695 Danke für 520 Beiträge

    Standard

    Zitat Zitat von Löwensenft Beitrag anzeigen
    Ich vermute mal stark, dass BLKMOV das Kopieren byte-weise durchführt. Sofern das Ziel *vor* der Quelle liegt, sollte hierbei kein Fehler passieren, oder?
    Sieh dir mal die F1-Hilfe zu SFC20 an, da steht die Arbeitsweise (wieviele Bytes) und die Kopierrichtung beschrieben.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  5. #5
    Registriert seit
    23.10.2009
    Beiträge
    392
    Danke
    58
    Erhielt 113 Danke für 87 Beiträge

    Standard

    Deine Überlegung würde dann stimmen, wenn BLOCKMOV immer mit dem ersten Byte des Blockes beginnt. Wenn es aber intern von 'hinten' nach 'vorne' arbeitet, sieht es anders aus. Es gibt irgendwo im Forum Beiträge, in denen das Verhalten erforscht wurde, ich würde mich auf Dauer nicht auf vorhersagbares Verhalten verlassen.
    Gruß
    Erich

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.205
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Hmm, ich habe noch nie gehört, daß der BLKMOV auf einer 312 anders funktioniert als auf den anderen S7-300/400


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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Registriert seit
    19.06.2015
    Beiträge
    459
    Danke
    26
    Erhielt 40 Danke für 35 Beiträge

    Standard

    Was sind Views AT in SCL?

  8. #8
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.358
    Danke
    456
    Erhielt 695 Danke für 520 Beiträge

    Standard

    SFC20 arbeitet immer in Richtung aufsteigender Adressen.
    Versucht man als ein Array[10] of Word überlappend umzukopieren, so das die ArrayMembers 0-9 auf 1-10 landen, dann bekommt man.
    Code:
    Quelle: P#DB10.DBx0.0 Byte 18
    Ziel: P#DB10.DBx2.0 Byte 18
    
    Byte 0/1 auf Byte 2/3
    Byte 2/3 auf Byte 4/5
    Byte 4/5 auf Byte 6/7
    Byte 6/7 auf Byte 8/9
    In dem Fall hätte man überall den Wert von Byte0/1 drin.

    Was mich noch interessiert, wie es den genau mit der Einheitsgröße die SFC20 beim kopieren nimmt.
    Hängt das vom Quell/Ziel-Pointer ab ob er nun Byteweise(String), Wortweise, oder DWORD-Weise kopiert?
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  9. #9
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.493
    Danke
    1.142
    Erhielt 1.243 Danke für 974 Beiträge

    Standard

    Zitat Zitat von silverfreaky Beitrag anzeigen
    Was sind Views AT in SCL?
    Damit kannst du vereinfacht gesagt Datenbereichen mit anderen Variablentypen ansprechen.
    Damit kannst du z.B. sehr einfach einen Any-Pointer aufschlüsseln.
    Hab nur gerade kein Step7 greifbar um mal ein Beispiel anzuhängen.

    Gruß
    Dieter

  10. #10
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.493
    Danke
    1.142
    Erhielt 1.243 Danke für 974 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Hmm, ich habe noch nie gehört, daß der BLKMOV auf einer 312 anders funktioniert als auf den anderen S7-300/400


    Harald
    Ist aber so
    Laut Handbuch dürfen sich Quell- und Zielbereich beim Blockmove nicht überlagern.
    Bei einer 315er funktioniert das aber problemlos und man kann ein sehr schnelles und einfaches FiFo programmieren.
    Auf einer 312 funktionieren diese überlappenden Zugriffe nicht.

    Gruß
    Dieter

Ähnliche Themen

  1. TIA Problem (U)BLKMOV bei SCL und TIA v13 SP1
    Von misu68 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 06.03.2015, 17:07
  2. Antworten: 23
    Letzter Beitrag: 09.12.2014, 07:36
  3. Wago 750-641 Dali Master überlappende Gruppenzuordnung
    Von Tati im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 21.11.2011, 12:03
  4. BLKMOV, ein FB und der Any-Pointer
    Von Krumnix im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 11.06.2009, 09:18
  5. zeit- bereiche abfragen
    Von Koala im Forum HMI
    Antworten: 0
    Letzter Beitrag: 09.09.2004, 16:04

Stichworte

Lesezeichen

Berechtigungen

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