TIA- Array of Byte in FB "von Aussen" adressieren?

Beiträge
660
Reaktionspunkte
83
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen,

ich habe eine hoffentlich einfach zu beantwortende Frage, stehe aber ziemlich auf der Leitung im Moment.

Und zwar verwende ich in einem FB ein Array of Byte das wiederum als Schiebregister verwendet wird.
Hier möchte ich beim Aufruf des FB´s verschiedene Stellen im Array festlegen.

z.b. die Position des Pushers, verschiedene Kontrollstellen... Momentan habe ich das direkt im FB gemacht, das gefällt mir aber nicht, und ist auch für eine Wiederverwendbarkeit unpraktisch.

hier ein Auszug aus dem Programm, um die Grün markierten Stelle geht es:

1724053927509.png


Ich würde gerne beim Aufruf des einfach eine Integer hinschreiben, z.b. Stelle 120
Direkt die Adresse vom Instanz DB möchte ich wenn möglich nicht verwenden...


Danke für eure Zeit!

LG
Michael
 

Weil es zumindest bei Classic S7 so war, dass wenn bei einem BlockMove Quell- und Zielbereich gleich sind, im ungünstigen Fall hinterher überall der gleiche Wert steht. Intern arbeitet er wohl in einer Schleife von unten nach oben. In dem Beispiel vom Screenshot würde er also als erstes den Wert von Schieberegister[0] nach Schieberegister[1] kopieren, im zweiten Schritt Schieberegister[1] nach Schieberegister[2], im dritten Schritt Schieberegister[2] nach Schieberegister[3] und so weiter. Am Ende steht also im ganzen Register der Inhalt vonSchieberegister[0]. Anders war es, wenn von oben nach unten geschoben wurde, also zuerst von Schieberegister[1] nach Schieberegister[0], dann von Schieberegister[2] nach Schieberegister[1], Schieberegister[3] nach Schieberegister[2] und so weiter, in diesem Fall funktionierte es dann wie gewünscht. Da wurde auch ausdrücklich in der Hilfe zum Blockmove davor gewarnt, dass Quell- und Zielbereich sich niemals überschneiden dürfen.
Ich kann mir nicht vorstellen, dass das in der Variant-Variante intern anders gelöst sein soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weil es zumindest bei Classic S7 so war, dass wenn bei einem BlockMove Quell- und Zielbereich gleich sind, im ungünstigen Fall hinterher überall der gleiche Wert steht. Intern arbeitet er wohl in einer Schleife von unten nach oben. In dem Beispiel vom Screenshot würde er also als erstes den Wert von Schieberegister[0] nach Schieberegister[1] kopieren, im zweiten Schritt Schieberegister[1] nach Schieberegister[2], im dritten Schritt Schieberegister[2] nach Schieberegister[3] und so weiter. Am Ende steht also im ganzen Register der Inhalt vonSchieberegister[0]. Anders war es, wenn von oben nach unten geschoben wurde, also zuerst von Schieberegister[1] nach Schieberegister[0], dann von Schieberegister[2] nach Schieberegister[1], Schieberegister[3] nach Schieberegister[2] und so weiter, in diesem Fall funktionierte es dann wie gewünscht. Da wurde auch ausdrücklich in der Hilfe zum Blockmove davor gewarnt, dass Quell- und Zielbereich sich niemals überschneiden dürfen.
Ich kann mir nicht vorstellen, dass das in der Variant-Variante intern anders gelöst sein soll.
In der Doku zu MOVE_BLK_VARIANT steht nichts zu überlappenden Bereichen.
Ich habe mal kurz einen Test in PLCSIM gemacht. Sowohl vorwärts als auch rückwärts funktioniert ohne Probleme.
Der Baustein ist anscheinend Intelligent genug, die Daten in der richtigen Reihenfolge zu kopieren.
War mir auch nicht bewusst, aber ist gut zu wissen falls ich mal so eine Anwendung habe.
 
Hallo, danke für die Erklärung!

Ich verstehe was da früher die Problematik war, aber Blockmove Variant funktioniert hier offenbar anders.

Bzw. Arbeiten die 1xxx CPU eventuell einfach anders beim kopieren von Datenbereichen?

Auf jeden Fall funktioniert es genau wie es soll. Pro Takt wird alles um eine Stelle verschoben.
 
Zurück
Oben