TIA Daten in Array kopieren

LUW

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Foren-Gemeinde,

ich bin auf der Suche nach einer Lösung, mit der ich 80 Bytes aus einem DB mit absoluter Adressierung in ein Array of Byte kopieren kann.
Die Bytes, welche ich kopieren möchte, liegen im Datenbaustein glücklicherweise direkte hintereinander(DB2.DBB10, DB2.DBB11, DB2.DBB12 usw.).

Der simpelste Weg wäre jedes Byte einzeln anzusprechen und in jedes Feld des Array einzeln zu kopieren. Dieser Weg ist jedoch sehr mühselig,da es sich um 80 Byte handelt.

Sieht jemand eine bessere Möglichkeit?

Da ich noch ein Neuling bin, verzeiht mir, wenn es eine einfache Offensichtliche Lösung gibt, auf die ich nicht gekommen bin.

Vielen Dank für eure Hilfe!
Gruß
 
Moin,
um welche Steuerung handelt es sich? Bei einer 1200er/1500er könntest du dir mal die Funktion Peek anschauen. Die könntest du dann in einer Schleife aufrufen.
Handelt es sich um 300er dann könnte man auch einen Blockmove vom gesamten Bereich machen.
Also, auf welcher Steuerung soll das laufen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Howard,
Vielen Dank für deine Antwort!
die Funktion wird in beiden Systemen (1200er/1500er) benötigt. Gibt es den Blockmove bei den 1200er/1500er nicht mehr in der Form wie bei der 300er?

Danke für den Hinweis auf die Funktion Peek!
Ich werde es ausprobieren!

Gruß
 
Doch doch, da kommen wir schon zur zweiten Frage: Sind deine Daten (also Quell- und Zieldaten) in einem optimierten Speicher? Bei deinem DB sprichst du von absoluten Adressen, also scheint der Quellbereich schon mal nicht optimiert zu sein. Wenn das auch für den Zielbereich gilt, dann kannst du auch den BLKMOV im TIA benutzen. Dein Zielpointer müsste dann in etwa so aussehen: P#DB2.DBX10.0 Byte 80
Allerdings siehst du dabei schon, so richtig schön symbolisch wäre das ganze dadurch nicht. Aber viele Wege füren nach Rom ;)
Andere Frage, warum liegen die Bytes in deinem DB einzeln hintereinander? Warum ist das nicht schon ein Array of Byte?
 
Guten Morgen Howard,

der Tipp mit der Peek-Funktion hat mir sehr weitergeholfen:
Peek in For-Schleife.PNG
Die Daten, die in dem DB liegen, sollen mit einer Checksumme überprüft werden. Für die Berechnung der Checksumme benötige ich ein Array of Byte.
Vielen Dank für deine Hilfe!
Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sehr gut :D
Dein Code passt zwar nicht zu deinem Eingangspost bei dem du von DB2 und Byteoffset 10 und Länge 80 gesprochen hast ;)
... DB2.DBB10, DB2.DBB11, DB2.DBB12 ...
und deine Schleife kopiert auch 3 Byte mehr (also nicht 80 sondern 83 <- also von 0 bis 82) aber wahrscheinlich war das nur eine beispielhafte Anforderung in Post #1.
Noch zwei Tipps nebenbei. DU könntest die Schleife auch bei 20 loslaufen lassen und bei 102 enden lassen (das hätte vielleicht einen Bezug zu deinen Byte-Adressen im DB)
oder man kann seine Array-Grenzen auch mit Hilfe von globalen Konstanten definieren und diese Konstanten dann für die Schleife verwenden. Ist aber alles Geschmackssache - ich persönlich würde aber solche Magic Numbers im Code eher vermeiden.
 
Hallo Howard,

sehr gut aufgepasst. Im ersten Post habe ich tatsächlich nur ein Beispiel genannt.
Tatsächlich benötige ich für die Schleife auch 82 Byte und das 83 Byte kopiert werden ist unerwünscht. Den Fehler habe ich auch schon korrigiert und gecheckt ob das letzte und das erste Bit auch sicher übertragen werden.

Wie würde es denn funktionieren ein Array mit globalen Konstanten zu verwenden? Das hört sich sehr gut an und würde den Code sicherlich verbessern?

Vielen Dank?
Gruß
 
1. Du legst eine Variablentabelle an und öffnest diese
2. Oben rechts findest du in dieser den Reiter Anwenderkonstanten
3. Hier erstellst du eine Variable (= globale Konstante) "UPPER_BOUND_ARRAY" vom Typ INT mit der dem Wert 82
4. Und bei der Definition deines Arrays sowie im Schleifenkopf der FOR-Schleife ersetzt du die 82 durch die neue Variable "UPPER_BOUND_ARRAY"
5. Wenn du nun in Zukunft die Größe des Arrays ändern willst, änderst du nur den Wert der Konstanten und übersetzt deine Software - fertig. Kein Suchen im Code und ändern von Magic Numbers mehr nötig
 
Zurück
Oben