[Frage] Allplan 2021-0-3 reagiert bei VS nicht mehr [Gelöst]


Hallo zusammen,

ich habe dieselbe Frage bereits im internationalen Forum ( https://campus.allplan.com/forum/topics/topic/topics/visual-scripting/visual-scripting-allplan-crashes-with-visual-scripting-infinite-loop.html ) gestellt, also bitte nicht wundern. Vielleicht ist bei euch auch ein ähnlicher Fehler aufgetreten.

In meinem Skript - das normalerweise flüssig und ohne Probleme funktioniert - habe ich vor ca. einer Woche festgestellt, dass bei einigen Nodes die Verknüpfung mit Verbindungslinien ungewöhnlich lange dauert und Allplan nach kurzer Zeit nicht mehr reagiert. Bild 1 zeigt den Zustand, der auf der VS-Oberfläche angezeigt wird: die Verknüpfung des Nodes B3-8 links mit B3-8 mitte schlägt fehlt, die Verbindungslinie wird beim Anfahren des Input-Ports mit dem Cursor nur noch gestrichelt angezeigt und Allplan reagiert nicht mehr. Nach mehreren Minuten schließt sich das Programm und öffnet ein Fenster zum Senden eines Fehlerberichts. Meistens schließe ich das Programm sofort, nachdem es nicht mehr reagiert (siehe Bild 2). Die in Bild 1 und 2 gezeigten Fehler treten unabhängig davon auf, ob ich das Skript bereits gestartet habe oder nicht. Ich kenne diesen Fehler nur aus anderen Programmiersprachen, wenn eine Endlosschleife erzeugt wird. Kann das damit zusammenhängen und worauf muss ich in meinem Skript achten, damit dieser Fehler nicht mehr auftritt?

Hinweis: Dieser Fehler tritt nur in der Allplan Version 2021-0-3 auf, nicht aber in der Version 2020-1-0! Ich habe beide Versionen mit der gleichen Datei getestet.

Vielen Dank für eure Hilfe

Marco

Anhänge (2)

Typ: image/jpeg
39-mal heruntergeladen
Größe: 39,71 KiB
Typ: image/jpeg
15-mal heruntergeladen
Größe: 28,80 KiB

Lösung anzeigen Lösung verbergen

Ich konnte das mit en einzelnen OperatorSubraction-Nodes nicht nachvollziehen.
Dazu bräuchte man schon die Daten!

Man könnte vermuten, dass Du einen "Zirkelbezug" in deinem Visual-Script hast.
D.h. ein Augang wird/ist mit einem Eingang eines Nodes weiter links verbunden. Eine "Rückkopplung" sozusagen.
Ich vermute mal, das wird bei der Herstellung der Verbindung überprüft, und durch gleiche UUID's nur nicht erkannt, und löst so eine
Endlosschelife diese Überprüfungsroutine aus.

Das würde allerdings nicht erklären, warum es erst in 2021-0-3 auftritt.
Es sei denn, man hat zwischenzeitlich an dieser Überprüfungsroutine etwas geändert...

Ein andere Erklärungsversuch wäre, das in einem in der Evaluierungfolge nachfolgenden Node ein Laufzeit-Fehler auftritt.
Dabei dürfte der Fehler aber erst beim Ausführen auftreten. Da es ja schon beim Herstellen der Verbindung passiert, muss also etwas am graphischen Node-Framework (WPF) schief laufen...

Ich konnte das mit en einzelnen OperatorSubraction-Nodes nicht nachvollziehen.
Dazu bräuchte man schon die Daten!

Man könnte vermuten, dass Du einen "Zirkelbezug" in deinem Visual-Script hast.
D.h. ein Augang wird/ist mit einem Eingang eines Nodes weiter links verbunden. Eine "Rückkopplung" sozusagen.
Ich vermute mal, das wird bei der Herstellung der Verbindung überprüft, und durch gleiche UUID's nur nicht erkannt, und löst so eine
Endlosschelife diese Überprüfungsroutine aus.

Das würde allerdings nicht erklären, warum es erst in 2021-0-3 auftritt.
Es sei denn, man hat zwischenzeitlich an dieser Überprüfungsroutine etwas geändert...

Ein andere Erklärungsversuch wäre, das in einem in der Evaluierungfolge nachfolgenden Node ein Laufzeit-Fehler auftritt.
Dabei dürfte der Fehler aber erst beim Ausführen auftreten. Da es ja schon beim Herstellen der Verbindung passiert, muss also etwas am graphischen Node-Framework (WPF) schief laufen...

Hallo Nemo,

du hast natürlich recht mit den einzelnen OperatorSubtraction-Nodes. Mir ging es nur darum zu zeigen, dass selbst zwischen zwei so simplen Nodes dieser Fehler aufgetreten ist.

Nichtsdestotrotz liegst du mit deiner Vermutung des Zirkelbezugs richtig. Ich hatte mehrere Zirkelbezüge in meinem Skript, bei denen der Ausgang mit einem Node weiter links verbunden war. Ich habe nun alle Zirkelbezüge durch Verschieben meiner Nodes aufgelöst und das hat tatsächlich das Problem behoben.

Mir war bislang klar, dass der Datenfluss immer von links nach rechts erfolgt und dass ich Rückkopplungen dieser Art vermeiden muss. Allerdings sind bislang keinerlei Probleme aufgetreten, bis eben vermutlich jetzt der letzte Tropfen das Fass sprichwörtlich zum Überlaufen gebracht hat. Auch dachte ich bislang, dass solche Fehler erst beim Ausführen des Skripts auftreten würden und nicht schon beim Bearbeiten auf der VS-Oberfläche...

Ich habe dir einen Ausschnitt aus meinem Skript beigefügt, der jetzt keine Zirkelbezüge mehr enthält. Bei meiner bisherigen Arbeitsweise mit VS habe ich versucht, mein Skript so kompakt wie möglich zu halten. Ich habe deshalb für jedes einzelne Bauteil die Nodes platzsparend nebeneinander platziert, um einen guten Überblick zu behalten. Es sind sozusagen Node-Gruppen entstanden. Auf der linken Seite stehen dazu alle meine Eingabeparameter. Hältst du diese Anordnung für eine gute Idee oder hast du einen Tipp, wie ich mein Skript optimieren könnte?

Vielen Dank für deine Hilfe

Marco

Anhänge (1)

Typ: image/jpeg
46-mal heruntergeladen
Größe: 71,30 KiB

In den anderen Visual-Scripting-Frameworks (Grashopper, Dynamo) gibt es die Möglichkeit, mehrere Nodes zu einem Gruppen-Node zusammenzufassen. Damit kann man dann leicht zusammengehörende Nodes zu "Funktionen" zusammenfassen.
Das erhöht in jedem Fall die Lesbarkeit.

Leider ist das in der Allplan VS-Implementierung derzeit nicht möglich!
Ich weiß allerdings, dass im WPF-Framwork , welches in Allplan für die Nodes verwendet wird, die Zusammenfassung von Nodes zu einem Gruppen Nodes ursprünglich implementiert war.(s. group_node.png)
Scheinbar ist die Umsetzung in Verbindung mit Python jedoch schwierig, das solch ein Gruppen-Node automatisch die Ein- und Ausgänge
zu Nicht zur Gruppe gehörenden Nodes erkennen, und dem Gruppen-Node zuweisen müsste. Gleiches mit den Eingabe-Feldern.
Ausserdem wäre die interne "Evaluierung" nicht mit einem herkömmlichen Node zu vergleichen,
da hierbei das "Sub-Netz" der Gruppen-Nodes "ausgeführt" werden muss, was mit dem Python-Ansatz sicher etwas komplizierter ist!

Vielleicht sieht Allplan ja eine Möglichkeit, so etwas noch einzubauen.
Wäre in jedem Fall sinnvoll...

Anhänge (1)

Typ: image/png
47-mal heruntergeladen
Größe: 52,37 KiB