Verarbeiten von Listen

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
jomifa
Beiträge: 41
Registriert: 09 Jun 2019, 15:22

Verarbeiten von Listen

Beitrag von jomifa » 26 Mär 2020, 19:10

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
Dateianhänge
Liste UP Schreiben.JPG
Liste UP Schreiben.JPG (137 KiB) 2760 mal betrachtet
Liste UP Lesen.JPG
Liste UP Lesen.JPG (114.87 KiB) 2760 mal betrachtet
Liste HP.JPG
Liste HP.JPG (120.09 KiB) 2760 mal betrachtet

Benutzeravatar
elektrofuzzis
Beiträge: 212
Registriert: 25 Jun 2016, 09:40

Re: Verarbeiten von Listen

Beitrag von elektrofuzzis » 26 Mär 2020, 21:48

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) 2719 mal betrachtet
Lesen aus einer Liste an einer Position:
read.PNG
read.PNG (38.31 KiB) 2719 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

jomifa
Beiträge: 41
Registriert: 09 Jun 2019, 15:22

Re: Verarbeiten von Listen

Beitrag von jomifa » 27 Mär 2020, 00:08

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
Dateianhänge
Hilfe Beschreibung für Listenverarbeitung
Hilfe Beschreibung für Listenverarbeitung
Liste Hilfe.JPG (253.18 KiB) 2689 mal betrachtet
Source aus dem ft Programm
Source aus dem ft Programm
Liste HRL+VSG Managementt.JPG (64.93 KiB) 2689 mal betrachtet

jomifa
Beiträge: 41
Registriert: 09 Jun 2019, 15:22

Re: Verarbeiten von Listen

Beitrag von jomifa » 27 Mär 2020, 20:40

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
Dateianhänge
Version mit 2 = Befehlszuweisungen und der Beachtung der Reihenfolge der Zuweisungen
Version mit 2 = Befehlszuweisungen und der Beachtung der Reihenfolge der Zuweisungen
Schreibe Liste.JPG (124.69 KiB) 2629 mal betrachtet

Benutzeravatar
elektrofuzzis
Beiträge: 212
Registriert: 25 Jun 2016, 09:40

Re: Verarbeiten von Listen

Beitrag von elektrofuzzis » 27 Mär 2020, 22:23

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

jomifa
Beiträge: 41
Registriert: 09 Jun 2019, 15:22

Re: Verarbeiten von Listen

Beitrag von jomifa » 30 Mär 2020, 11:51

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

Benutzeravatar
PHabermehl
Beiträge: 2429
Registriert: 20 Dez 2014, 22:59
Wohnort: Bad Hersfeld

Re: Verarbeiten von Listen

Beitrag von PHabermehl » 30 Mär 2020, 12:50

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
https://www.MINTronics.de -- der ftDuino & TX-Pi Shop!

viele Grüße
Peter

Antworten