Seite 1 von 1

Verarbeiten von Listen

Verfasst: 26 Mär 2020, 19:10
von jomifa
Hallo zusammen,
ich finde den Wald vor lauter Bäumen nicht. Vielleicht kann mir einer von euch sagen, was ich falsch mache.

Ich möchte im Step 1 (Lesen) eine Liste aus 9 Werten zu jeweils 3 Werten lesen. Also 1,2,3 oder 4,5,6 oder 7,8,9. Indiziert wird das über den Wert 1,2 oder 3. Soweit kein Problem. Anschließend möchte ich die Werte im Step2 (Schreiben) um den Wert +10 zurückschreiben. Dieses funktioniert leider nicht. Am Besten schaut ihr euch das Programm selber an.

Wenn mir jemand sagt, wie ich den Programmcode hier anhängen kann, dann stelle ich ihn gerne zur Verfügung.

Vielen Dank für eure Mühe.

VG
Joachim

Re: Verarbeiten von Listen

Verfasst: 26 Mär 2020, 21:48
von elektrofuzzis
Hallo Joachim,

da das Lesen und Schreiben aus einer Liste in RoboPro etwas schwierig ist, habe ich mir mal die klassischen put- und get-Funktionen gebaut. Ohne Kapselung hatte ich das Thema auch immer verzockt.

Schreiben in eine Liste an einer Position:
write.png
write.png (36.28 KiB) 2751 mal betrachtet
Lesen aus einer Liste an einer Position:
read.PNG
read.PNG (38.31 KiB) 2751 mal betrachtet
Wichtig ist, dass die Liste eine globale Variable ist und setze an der Variable Maximal- und Anfangsgröße auf die benötigte Größe.

Du findest das auch auf github: https://github.com/elektrofuzzis/ftpiLE ... x71_v5.rpp
Die Funktionen im Quelltext heißen _piL1_WriteBuffer und _piL1_ReadBuffer.

In Deinem Quelltext würde ich zusätzlich das Ganze etwas vereinfachen. Den Teil mit den Vergleichen und dem Zuweisen der lokalen Index-Variable würde ich so lassen wie es ist. Die vielen gelben Ausgangspfeile von den Index-Variablen weg, würde ich weglassen und dafür direkt vor die Additionen die Index-Variablen wiederholen. Das ist nicht Dein Problem, aber es macht es etwas übersichtlicher.

Beim Schreiben steuerst Du m.E. die die Listen mit den beiden Zuweisungen an den Eingängen falsch an. Vergleiche das mal mit dem Schreibzyklus von mir.

Gruß,

Stefan

Re: Verarbeiten von Listen

Verfasst: 27 Mär 2020, 00:08
von jomifa
Hallo Stefan,
vielen Dank für deine Hinweise. Ich habe hier das UP "Management" aus der Steuerung eines VSG und HRL als Beispiel genommen. In diesem werden beide Eingänge beim Schreiben mit = Befehlen versehen. Das gleiche beschreibt auch die Dokumentation dazu. Nichtsdestotrotz läuft das o.g. UP und auch deine Schreibe-Anweisungen korrekt, obwohl sie syntaktisch unterschiedlich sind.

Nur meine Routine tut das nicht.

Ich werde das wohl noch etwas weiter untersuchen müssen.

VG
Joachim

Re: Verarbeiten von Listen

Verfasst: 27 Mär 2020, 20:40
von jomifa
Hallo Stefan,
ich denke, dass ich das Problem gefunden habe. Deine Version läuft (obwohl die Doku etwas anderes behauptet) :)

Die ft Version aus der Fabriksteuerung läuft ebenfalls, allerdings mit 2 = Befehlen für den Index und den Wert der gespeichert werden soll.

Wichtig ist allerdings bei der ft und meiner Version, dass zuerst der Index und dann die Werte Zuweisung vorgenommen wird. Dieses ist allerdings auch nicht dokumentiert. Ergo gibt es 2 Lösungen zu diesem Thema:

1). entweder die Zuweisung des Wertes mit = Befehl und der Index direkt zugewiesen
2). oder die Zuweisungen von Wert und Index mit = Befehlen, wobei aber zuerst der Index und dann der Wert zugewiesen werden muss (siehe Anlage).

Warum das alles so ist, weis nur Gott alleine, den ft weis es nicht! Oder findet sich hier jemand im Forum der mehr weis.

VG
Joachim

Re: Verarbeiten von Listen

Verfasst: 27 Mär 2020, 22:23
von elektrofuzzis
Hallo Joachim,

dafür gibt es nur einem Ausdruck: unglaublich! Dass es an der Stelle auf die Reihenfolge ankommt! Wie bist Du nur auf die Idee gekommen, die Reihenfolge zu tauschen?

Nee, nee, nee!

Gruss

Stefan

Re: Verarbeiten von Listen

Verfasst: 30 Mär 2020, 11:51
von jomifa
Hallo Stefan,
nachdem ich mir deine Lösung genauer angesehen habe fiel mir auf, dass die Belegung des I-Eingangs in deinem Ablauf immer sofort belegt wird, und der S-Eingang später durch den = Befehl belegt wird. Das mögen zwar nur Mikrosekunden sein, ist wohl erheblich für die Ansteuerung von Listen. Um das zu bestätigen habe ich die Ansteuerung der Liste eben fest verdrahtet, erst S- und dann I-Eingang. In meinem Programm hatte ich ja die Ansteuerung umgedreht vorgenommen. Daraus ergibt sich die zuvor gemachte Erkenntnis: Erst I- und dann S-Eingang. Ansonsten funktioniert es nicht.

VG
Joachim

Re: Verarbeiten von Listen

Verfasst: 30 Mär 2020, 12:50
von PHabermehl
Hallo zusammen,

danke für die ausführlichen Nachforschungen.

Jetzt, im Nachhinein, erscheint es auch logisch. Letztlich arbeitet RoboPRO die Funktionen ja auch nur seriell ab. Vermutlich triggert das Ändern des "S"-Eingangs die Abarbeitung. Wenn "I" erst danach gesetzt wird - zu spät...

Gruß
Peter