TIA S7-1513 Bearbeitungszeit für das Kopieren eines Array of Bool

Gee4tii

Level-2
Beiträge
62
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!
Habe eine S7-1513 und TIA V17/V18.
Wenn ich ein Array of Bool 0..127 in ein anderes Array des gleichen Typs kopiere sind das dann 128 einzelne Bitoperationen oder handelt die Plc Array-Kopiervorgänge (oder auch Struct-Kopiervorgänge) anders?
Mir geht's darum was schneller ist: Das besagte 128Bit-Array kopieren oder lieber 2LWords oder 4DWords.

MicrosoftTeams-image.png
Gruß
 
Ist denn der Nanosekundenbereich relevant für die Applikation? Wenn nicht dann einfach die Struktur (Idealfall auch eine UDT) einfach per MOVE in die andere schreiben, am besten machst du das mit einer Bedingung, sodass der Befehl nicht in jedem Zyklus läuft sondern nur dann wenn er gebraucht wird. Dann spielt das auch für die Taktzeit eine untergeordnete Rolle
 
Woher weißt du das das Array kopieren schneller ist als 4xDWord?
Ich kenne es nur von STEP7 Classic. Damit konnte man die von SCL erzeugte STL Code studieren.
Wenn man eine Zuweisung wie die genannte in SCL screibt, erzeugt der Compiler entweder mehrere Lade/Transfer Befehle oder ruft SFC20 BLKMOV.

Aber mach ein Test und erwähne das Ergebniss hier.
Dass kann man ja schnell machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde es jetzt im Zweifel auch einfach mal testen. Mach dir ne Schleife, mach den Vorgang 100 mal und speicher davor und danach die Zeit weg und schau was schneller ist. Würde mich auch interessieren.
 
Hab 3 Versuche gemacht:
1x Array of 128 Bit
1x Array of 4DWORD
1x 4x Einzelkopieroperation
Alles 3 10.000.000 in ner Schleife in der Plc-Sim in nem CyclicInterrupt ohne weitere Ci die diesen unterbrechen könnten.
Nimmt sich komischerweise alles 3 nicht viel.
Hätte erwartet das das Array of Bool zeitlich explodiert
1670587126427.png
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ähm, testest Du mit PLCSIM? Das kannst Du nicht mit realen CPUs vergleichen.

Und könntest Du auch noch Umkopieren der BOOL in einer Schleife messen?
Code:
FOR #k = 0 TO 127 DO
    "Test".DST.BArray[#k] := "Test".SRC.BArray[#k];
END_FOR;

Harald
 
Zurück
Oben