Autor
|
Thema: AGV Simulation mit Fahrzeugen (2121 mal gelesen)
|
marwar Mitglied
Beiträge: 3 Registriert: 02.11.2015 Plant Simulation Version 11.0.5
|
erstellt am: 04. Nov. 2015 09:46 <-- editieren / zitieren --> Unities abgeben:
Hallo liebes PS Unterforum, ich habe einige Fragen bzgl. der AGV Simulation in PS11. Die Bibliothek "AGVS" scheint ja nicht mehr Bestandteil des Software-Pakets zu sein, daher probiere ich mich an der Erstellung eines Netzwerkes anhand von Wegen und Fahrzeugen für meine Bachelorarbeit. Konkret geht es in meinem Beispiel um die Simulation von Hindernissen auf der Fahrtstrecke (siehe gestörte Wege 1, 2_1 und 2_2 im Anhang). Nun scheinen die Fahrzeuge trotz der Einstellung "Automatische Zielfindung" (die, wie ich im Forum gelesen habe den Dijkstra-Algorithmus abbilden soll) nicht immer den kürzesten Weg zu finden. Auch eine Flusssteuerung hilft hier nicht weiter. Woran liegt das? Dazu kommt, dass wenn ein Weg in der Laufzeit gestört wird, die errechnete Zielführung anscheinend erhalten bleibt und die Fahrzeuge beim gestörten Weg warten. Wie lässt sich die Wegfindung nochmals auslösen (wenn Störung auftritt), oder gibt es eine elegantere Methode, ein Hindernis auf einem Weg (bzw. gleich ein liegengebliebenes AGV/FTF) darzustellen? Danke bereits für Eure hilfreichen Antworten. [Diese Nachricht wurde von marwar am 06. Nov. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 04. Nov. 2015 22:16 <-- editieren / zitieren --> Unities abgeben: Nur für marwar
|
marwar Mitglied
Beiträge: 3 Registriert: 02.11.2015 Plant Simulation Version 11.0.5
|
erstellt am: 06. Nov. 2015 10:26 <-- editieren / zitieren --> Unities abgeben:
Danke für den Tipp mit der Routengewichtung. Das hat das Problem mit der Wegfindung über Störungen gelöst. Allerdings benutze ich statt der Störungssimulation jetzt ein benutzerdefiniertes Attribut in den Wegen ("benutzbar") welches zwischen [-1;1] geschaltet die Wege für die Wegfindung heranzieht oder eben nicht. Zu dem Problem mit der automatischen Wegfindung: Es reicht nicht, in der Klassenbibliothek dem Fahrzeug einen Zielort einzuprägen und dann in der Quelle zu erzeugen. Ich musste über einen Sensor und eine Methode den Zielort explizit nochmals festlegen, damit die Zielsuche angestoßen wurde (s. Anhang). Edit: eine weitere Beobachtung ist, dass wenn alle Pfade einen unbenutzbaren Weg beinhalten, die Wegfindung nicht stattfinden kann und die Verzweigunsstelle ("Start" im Bsp.) in ihr ursprüngliches Ausgangsverhalten zurückfällt (z.B. "reihum"). [Diese Nachricht wurde von marwar am 06. Nov. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marwar Mitglied
Beiträge: 3 Registriert: 02.11.2015 Plant Simulation Version 11.0.5
|
erstellt am: 18. Nov. 2015 17:21 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal, es bleibt für mich das Problem, dass wenn ein Fahrzeug einmal die automatische zielfindung angeschmissen hat, sich an der Route nur etwas ändern kann, wenn das Fahrzeug den geplanten Weg verlässt (laut PS Hilfe). Wenn also nach erfolgter Wegsuche ein Weg dynamisch durch ein anderes Fahrzeug belegt wird (Routengewichtungsattribut treibt die Kosten normalerweise über Real-Wert -1 ins Unendliche), hält das Fahrzeug weiterhin and der geplanten Route fest, da es sie ja nicht verlassen hat. Die Fahrzeuge fahren auf. Um dies zu verhindern muss ich die automatische Zielfindung neu anschmeißen. Ich habe probiert die Zielliste des Fahrzeug auszulesen, die enthaltenen Objekte nach der Belegung abzufragen und falls diese vorliegt die Liste ab der Störung rückwärts bis zum Standort des Fahrzeugs zu löschen. Das Fahrzeug fährt theoretisch also auf einen Nachfolger, der nicht in seiner (neuen) Zielliste einthalten ist und sollte daher einen neuen Weg suchen. Die Methode sieht bisher so aus:
Code: (FZG bject) is --Zielroute:table[object]; --in Netzwerk vorhanden Routenelement bject; gefunden:boolean; Bezeichnung:string; do Zielroute.initialisieren({1,*}..{1,*},VOID); FZG.holeRoutezuziel(Zielroute); zielroute.setzezeiger(1,1); gefunden:=zielroute.finden({1,*}..{1,*},FZG.bugstandort); if gefunden then For local y:=Zielroute.Ydim downto zielroute.zeigerY loop --Abfrage ob es sich um Spur oder Objekt(Weg) handelt Bezeichnung:=to_str(Zielroute[1,y]); if pos(".A",Bezeichnung) = strlen(Bezeichnung)-1 or pos(".B",Bezeichnung) = strlen(Bezeichnung)-1 then--Abfrage, ob Objekt nur eine Spur ist routenelement:=Zielroute[1,y].~;--soll zweispurigen weg addressieren Else routenelement:=Zielroute[1,y]; End; -- Ende Abfrage, ob Spur oder Objekt if Routenelement.belegt and Routenelement /= FZG.standort then if Routenelement.inhalt.prodwartend then zielroute.löschen({1,zielroute.zeigerY}..{1,y}); --Exit Loop (fehlt noch im Beispiel) end; end; next; FZG.setzeroute(Zielroute); else Print "Fahrzeug "+to_str(?.name)+" befindet sich nicht auf der geplanten Route."; end; end;
Hier stoße ich auf das Problem, dass beim Durchlaufen der Zielliste ein Zweispuriger Weg nur mit seiner Spur eingetragen wird und der Code "Bezeichnung:=to_str(Zielroute[1,y]);" ein "Void" erhält. Gibt es hier eine Möglichkeit den Zweispurigen Weg selbst zu addressieren? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|