TIA BLKMOV bei S7-1200 wie?

newbi_plc

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Bin wieder einmal nicht in der Lage selber eine Lösung fuer folgendes Problem zu finden. Muss ein paar Bausteine umschreiben die ich bei einer S7-1200 einsetzen muss die aber aus einem Programm kamen mit S7-1500. Bestimmte Anweisungen sind nicht vorhanden wie z.B. BLKMOV.

Kann mir jemand anhand des angehängten Bildes zeigen wie man das mit einer S7-1200 macht?

Muss ein Array [0..124] of word in ein Array [1..2000] of bool kopieren. Wie geht das? Komm mit der Erklärung von MOVE_BLK_VARIANT in der S7-1200 nicht klar oder geht das überhaupt damit?

Vielen Dank für die Hilfe
 

Anhänge

  • BLKMOV..JPG
    BLKMOV..JPG
    341,9 KB · Aufrufe: 61
Warum muss das denn unbedingt per Blockmove sein, und nicht mit einer Schleife und Slice-Zugriff auf ein Word, das ist dann auch unabhängig von Firmwareversionen und ob Datenbereiche "optimiert" oder "nicht optimiert" sind.
 
Nein muss natürlich NICHT mit blockmove sein. Bin leider etwas unerfahren mit Scheifen oder Slice-Zugriff. Wenn mir das jemand zeigen könnte wie man das an meinem Beispiel machen könnte wäre ich sehr dankbar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So in der Art:
Code:
#bitpos := 0;
FOR #wpos := 0 TO 124 DO
    #w := #wordarray[#wpos];
    #boolarray[#bitpos + 0] := #w.%X0;
    #boolarray[#bitpos + 1] := #w.%X1;
    #boolarray[#bitpos + 2] := #w.%X2;
    #boolarray[#bitpos + 3] := #w.%X3;
    #boolarray[#bitpos + 4] := #w.%X4;
    #boolarray[#bitpos + 5] := #w.%X5;
    #boolarray[#bitpos + 6] := #w.%X6;
    #boolarray[#bitpos + 7] := #w.%X7;
    #boolarray[#bitpos + 8] := #w.%X8;
    #boolarray[#bitpos + 9] := #w.%X9;
    #boolarray[#bitpos + 10] := #w.%X10;
    #boolarray[#bitpos + 11] := #w.%X11;
    #boolarray[#bitpos + 12] := #w.%X12;
    #boolarray[#bitpos + 13] := #w.%X13;
    #boolarray[#bitpos + 14] := #w.%X14;
    #boolarray[#bitpos + 15] := #w.%X15;
    #bitpos := #bitpos + 16;
END_FOR;
 
Zunächst mal vielen Dank für den Programmcode. Niemals wäre ich darauf auch nur annähernd gekommen. Leider kommt eine Fehlermeldung in der Diagnose. Irgendeine Hilfe die man mir noch damit geben kann? Nochmals danke
code.JPGfehlermeldung.JPG
 
Eigentlich ganz normal? Array [0..124] of word ein Array [1..2000] of bool. ist kein optimierter DB.....Ganz normaler Global DB. Hoffe das bild hilft wieder?
DB61.JPG
 
Hast Du überprüft bzw. korrigiert, ob/daß die Bits aus den Words im Bool-Array in der richtigen Reihenfolge ankommen?
Gegenüber der BLKMOV-Variante sind bei dem Code von #6 die Bits H-Byte/L-Byte-vertauscht:
- bei BLKMOV: SMX[0].%X0 ---> SM[9], SMX[0].%X1 ---> SM[10], ...
- Schleife #6 : SMX[0].%X0 ---> SM[1], SMX[0].%X1 ---> SM[2], ...

Harald
 
entschuldigung die Frage....aber was heisst per Sicht AT?
So:

attachment.php


Wenn die Sicht AT im IN- oder OUTPUT statt STATIC erstellt wird, ist durch die Übergabe per Schnittstelle nur ein MOVE nötig.
Für die Sicht AT ist ein FB notwendig und für die zu sichtende Variable muss die Remanenz auf "Im IDB setzen" eingestellt sein. Geht daher auch nicht mit TEMPs, da die nun mal nicht im IDB sind.
Bei der 2. Variable (= Sicht) zuerst AT als Datentyp eintragen und mit Enter bestätigen. Das AT wandert dann hinter den Variablennamen. Anschließend den gewünschten Datentypen der Sicht angeben.
Ob die Quell- und/oder Zieldaten optimiert sind oder nicht, spielt dabei keine Rolle.
 

Anhänge

  • Sicht AT.jpg
    Sicht AT.jpg
    23,3 KB · Aufrufe: 130
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Da wird zwar zweimal kopiert, das wird aber vermutlich trotzdem noch performanter sein als die Bits in einer selbst programmierten Schleife zu kopieren.

Wenn die Sicht AT im IN- oder OUTPUT statt STATIC erstellt wird, ist durch die Übergabe per Schnittstelle nur ein MOVE nötig.
Da wird aber tatsächlich auch zweimal kopiert, oder wenn man es besonders schön macht und die beiden Arrays an INPUT und OUTPUT anschließt, dann sogar dreimal: beim Aufruf des FB vom Word-Array nach INPUT, im FB ein MOVE von INPUT nach OUTPUT, und nach Ende des FB vom OUTPUT in das Bool-Array.

Harald
 
@hucki:

Okay, das musste ich jetzt ein paar mal lesen um zu verstehen was zu tun ist. :eek:
Ich hab auch noch nie irgendwas von "Sicht AT" gehört.

Wie kommt man eigentlich auf so etwas?
Ich hab schon wirklich viele Programme gesehen, von verschiedenen Maschinenherstellern, aber sowas ist mir bisher noch nie untergekommen.
Vielleicht hab ichs aber auch übersehen. :rolleyes:

LG
Michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@hucki:

Okay, das musste ich jetzt ein paar mal lesen um zu verstehen was zu tun ist. :eek:
Ich hab auch noch nie irgendwas von "Sicht AT" gehört.
Korrekt heißt es wohl überlagern.
Wenn man in der TIA-Hilfe nach AT sucht, ist es unter den ersten Ergebnissen zu finden.

Mir hat es sich als Sicht eingeprägt, vermutlich hier im Forum so aufgenommen.
Diese Funktion gab' es auch schon im Klassik mit SCL vor meinen eigenen Programmier-Anfängen.
 
Zurück
Oben