Seite 1 von 1

Fehler im RoboPro Listenelement II

BeitragVerfasst: 16 Mär 2018, 18:10
von hamlet
Liebes fischertechnik Team,
Anders als in
RoboPro Hilfe-Kapitel "8.4.5 Liste"
… Ändert sich der I-Eingang oder der Wert des Eintrags, der über den I-Eingang ausgewählt wurde, schickt die Liste den aktuellen Wert des ausgewählten Eintrags an die Elemente, die am R-Ausgang angeschlossen sind. …

dokumentiert, schickt ein Listenelement eine Zuweisung über den R-Ausgang nicht nur, wenn sich der gewählte Eintrag ändert, sondern auch beim Senden beliebiger Befehle (Zuweisen, Anhängen, Löschen) an den S-Eingang anderer Instanzen der Liste, wobei die Befehle den aktuell ausgewählten Listeneintrag gar nicht betreffen oder ändern. Folglich führt jede Änderung des Listeninhalts zu einem erneuten Update des R-Ausgangs aller Instanzen einer Liste.
Das führt bestenfalls zu erhöhter Rechenlast, wenn die angeschlossenen Elemente mit dem unveränderten Eintragswert neu evaluiert werden, oder aber dazu, dass angeschlossene Variablen, die zwischenzeitlich modifiziert wurden, wieder zurückgesetzt werden. Das führt zu Fehlverhalten, das nur schwer einzukreisen ist.

Als Workaround sollte man nach Möglichkeit den R-Ausgang von angeschlossenen Elementen mit einem Zuweisungsbefehl entkoppeln.

Ein den Fehler reproduzierendes RoboPro-Beispiel findet sich hier.

Falls RoboPro noch weiterentwickelt wird, wäre ich sehr dankbar für einen Fix dieses Bugs im kommenden RoboPro Update.
Beste Grüße,
Helmut

Re: Fehler im RoboPro Listenelement II

BeitragVerfasst: 27 Mär 2018, 09:24
von HartmutKnecht
Guten Tag,

vielen Dank für den Hinweis. Dieser Sachverhalt ist uns bisher nicht bekannt gewesen und auch noch nicht als Problem bekannt. Wir werden versuchen das nachzuvollziehen und an unseren Entwickler weiterleiten. Ob das kurzfristig geändert werden kann, können wir zum jetzigen Zeitpunkt jedoch noch nicht versprechen.

Freundliche Grüße
fischertechnik
Hartmut Knecht

Re: Fehler im RoboPro Listenelement II

BeitragVerfasst: 09 Apr 2018, 19:55
von ROBOProEntwickler
Hallo Hamlet,

in der Anleitung steht ja nicht "nur" und ich denke Du stimmst zu, dass es keinen Sinn machen würde die Anleitung so zu interpretieren (das würde ja bedeuten, dass auch keine = Befehle geschickt werden, wenn sich etwas im Array durch andere Befehle ändert).

Generell ist es nicht empfehlenswert sich darauf zu verlassen, dass Element keine redundanten = Befehle schicken. Die meisten Element schicken immer einen = Befehl, wenn Sie einen Befehl empfangen. Auch Unterprogrammausgänge (und Eingänge im Unterprogramm) schicken = Befehle, wenn man es nicht unbedingt erwarten würde. Man sollte Datenausgänge eher als Ausgänge wie in einer Elektronik betrachten - da ist es auch nicht gut mehrere Ausgänge zusammen zu schalten. Das Einzige Element, bei dem es sinnvoll ist mehrere Ausgänge zusammen zu schalten ist das Befehlselement. Man könnte hier aber mal eine entsprechende Fehlermeldung einbauen.

Zu erhöhter Rechenleistung führt das in der Regel aber nicht, weil redundante = Befehle an verschiedenen Stellen gefiltert werden (sonst könnte man in ROBOPro keine Flip-Flops aus Gattern machen).

Freundliche Grüße

Michael Sögtrop
(ROBOProEntwickler)