Autor
|
Thema: Zufallszielsteuerung (2967 mal gelesen)
|
fankmich Mitglied Technischer Zeichner
Beiträge: 8 Registriert: 10.05.2013 Plant Simulation 10.1 Pro
|
erstellt am: 12. Mai. 2013 20:56 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin neu hier und hätte da mal eine Frage: Ich habe ein Fördergut das mittels Querverschubwagen auf eine bestimmte Anzahl von Förderbändern zufällig verteilt werden soll. Am Ende der Bänder sitzen Lager. Die Methode die vor dem Querverschubwagen den zielort festlegen soll sieht folgendermaßen aus: is zufall1:integer; do zufall1:= z_gleich (1,1,4); inspect zufall1 when 1 then if lager1.voll then zufall1:= z_gleich (1,1,4); else @.zielort:=Greifer1_1; end; when 2 then if lager2.voll then zufall1:= z_gleich (1,1,4); else @.zielort:=Greifer2_2; end; when 3 then if lager3.voll then zufall1:= z_gleich (1,1,4); else @.zielort:=.Modelle.Netzwerk.Greifer3_3; end; end; end; Ich generiere ein zufälliges Lager und prüfe danach ob es voll ist. Wenn ich einlagern kann, will ich den zielort festlegen lassen, wenn nicht wird eine neue Zahle (Lager) generiert. Aber ich bekomme immer die Fehlermeldung "ein Void kann keine Methode aufrufen" durch die zeile "@.zielort:=Greifer1_1;" Hat jemand eine Ahnung was ich da ändern könnte um das zum Laufen zu bringen? bin für jede Hilfe dankbar. lg 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: 13. Mai. 2013 17:38 <-- editieren / zitieren --> Unities abgeben: Nur für fankmich
|
fankmich Mitglied Technischer Zeichner
Beiträge: 8 Registriert: 10.05.2013 Plant Simulation 10.1 Pro
|
erstellt am: 14. Mai. 2013 20:07 <-- editieren / zitieren --> Unities abgeben:
danke für den hinweis. ich dachte ich generiere eine neue zufallszahl wenn das zuvor als ziel ausgesuchte lager voll ist. aber nach einem blick in den debugger, habe ich festgestellt das ich zwar eine neue zahl generiere, die methode aber nicht noch einmal durchlaufen wird. hätten Sie da eine elegante Lösung? Ich verwende die Version 10.1 und die Fehlermeldung habe ich mit einer Korrektur der Zeiten behoben. Die Methode wollte BEs umlagern, die noch nicht da waren. 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: 14. Mai. 2013 23:01 <-- editieren / zitieren --> Unities abgeben: Nur für fankmich
Sie können doch z.B. in den Zweigen mit den vollen Lagern zwischen den restlichen zwei Lagern würfeln. Auf jeden Fall müssen Sie in jedem denkbaren Fall den Zielort bestimmen, sonst bekommen Sie eine Fehlermeldung vom Querverschiebewagen. Sie könnten auch zu Beginn die nicht vollen Lager bestimmen und zwischen diesen Würfeln (z.B. in dem Sie die Lager in eine Tabelle eintragen und dann die Zeilennummer würfeln). Was machen Sie, wenn alle Lager voll sind? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fankmich Mitglied Technischer Zeichner
Beiträge: 8 Registriert: 10.05.2013 Plant Simulation 10.1 Pro
|
erstellt am: 30. Mai. 2013 15:13 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank Bon_Simul, ich habe mittlerweile fast alles im Griff was meine Simulation betrifft. Allerdings hänge ich jetzt bei einem Problem der Priorisierung. Laut Hilfe erstellt mein QVW eine Auftragsliste (orderList). Ich schaff es allerdings nicht darauf zuzugreifen bzw. diese Liste zu öffnen. Hätten Sie eine Idee wie ich das angehen könnte? 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: 30. Mai. 2013 20:44 <-- editieren / zitieren --> Unities abgeben: Nur für fankmich
|
fankmich Mitglied Technischer Zeichner
Beiträge: 8 Registriert: 10.05.2013 Plant Simulation 10.1 Pro
|
erstellt am: 30. Mai. 2013 22:14 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank. Das hat schon mal ungemein geholfen. Jetzt kann ich zumindest mal die Liste öffnen und mir ein Bild davon machen. Wenn Sie jetzt auch noch einen Tip parat hätten wie ich beim Eintragen in diese Liste die Priority ändern kann, könnte ich die Liste sortieren und es würden immer die Aufträge zuerst abgearbeitet werden, die als Source die ÜGS11 haben. Ich kann leider weder in diesem Forum, Steffen Bangsow's Buch, noch in der Hilfe von Plant Simulation dazu wirklich was brauchbares finden. Sie retten mir übrigens gerade meine Bachelor-Arbeit. DANKE noch einmal. 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: 31. Mai. 2013 09:26 <-- editieren / zitieren --> Unities abgeben: Nur für fankmich
Wenn Sie Elemente mit dem Querverschiebewagen verbinden, dann trägt der QVW eine Ausgangssteuerung in das Element ein (onExit). Ändern Sie den 4. Parameter des Ausrufs der Methode transportOrder, ich schätze, das ist die Prio: Code:
CrossSlidingCar.transportOrder( caller, target, part, <prio> );
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fankmich Mitglied Technischer Zeichner
Beiträge: 8 Registriert: 10.05.2013 Plant Simulation 10.1 Pro
|
erstellt am: 03. Jun. 2013 11:44 <-- editieren / zitieren --> Unities abgeben:
je länger ich mich mit meiner simulation beschäftige desto detailierter und anspruchsvoller wird sie... ich hätte eine Frage zu einem Kommentar von Ihnen weiter oben. Wie würde eine Methode aussehen, die in meiner Lagerveraltungsliste nachsieht welche lager nicht voll besetzt sind und unter denen dann das Ziel der Auslagerung auswürfelt? ich komme leider mit dem tabellenzugriff noch nicht wirklich zurecht. die lagerverwaltungsliste beinhaltet 2 spalten: in der ersten die bezeichnungen der lager und in der zweiten den aktuellen Füllstand. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fankmich Mitglied Technischer Zeichner
Beiträge: 8 Registriert: 10.05.2013 Plant Simulation 10.1 Pro
|
erstellt am: 03. Jun. 2013 12:56 <-- editieren / zitieren --> Unities abgeben:
und noch ein problem: (es hört nicht auf...) wenn ich beim einlagern der behälter prüfe ob das erwürfelte lager voll ist, habe ich mit einer "or" verknüpfung eine weiter bedingung eingebaut, die prüft ob in diesem lager 7 behälter sind UND ob es für dieses lager bereits einen transportauftrag in der orderlist des qvw existiert. allerdings scheint mir als ob die funktion .finden nicht beachtet wird oder durch irgendeinen fehler meinerseits ausgehebelt wird. das problem ist nämlich das es durchaus sein kann, das der lagerstand zwar kleiner 8 ist (ein einlagern wäre möglich) aber es bereits einen behälter gibt, der dieses ziel hat. damit lagert der qvw einen behälter in ein regal das eigentlich keinen platz mehr hat. die methode die dieses einlagern durchführt sieht folgendermaßen aus: is Lagerd bject; Greiferd bject; do d:= z_gleich (1,1,21); Lagerd:=str_to_obj("Lager"+to_str(d)); Greiferd:=str_to_obj("Greifer"+to_str(d)+to_str(d)+to_str(d)); if lagerd.voll or lagerd.anzahlbes=7 and shuttle.orderList.finden({3,*},"*.Modelle.Netzwerk.Greifer"+to_str(d)+to_str(d)+to_str(d)) then ref (zielzuordnung_umlagern).ausführen; else @.zielort:=Greiferd; end; end; 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: 03. Jun. 2013 19:39 <-- editieren / zitieren --> Unities abgeben: Nur für fankmich
Das erste Problem bei Ihrem Programm ist eine "Endlosrekursion", die entsteht, wenn kein Lager frei ist (immer wieder der else Zweig). Wenn Sie in einer Tabelle suchen, müssen Sie den internen Zeiger der Tabelle immer wieder an den Anfang der Tabelle setzen (Plant Simulation verschiebt den Zeiger auf die Zelle mit dem Treffer). Das geschieht mit <Tabelle>.setzeZeiger(spalte,zeile). Ihre or Bedingung müssen Sie komplett in eine Klammer setzen. Code:
is Lagerd: object; Greiferd: object; d:integer; do d:= z_gleich (1,1,21); Lagerd:=str_to_obj("Lager"+to_str(d)); Greiferd:=str_to_obj("Greifer"+to_str(d)+to_str(d)+to_str(d)); shuttle.orderList.setzeZeiger(3,1); if lagerd.voll or (lagerd.anzahlbes=7 and shuttle.orderList.finden ({3,*},"*.Modelle.Netzwerk.Greifer"+to_str(d)+to_str(d)+to_str(d))) then --problematisch, wenn alle Lager voll --> Programm "hängt sich auf" ref (zielzuordnung_umlagern).ausführen; else @.zielort:=Greiferd; end; end;
[Diese Nachricht wurde von Bon Simul am 03. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fankmich Mitglied Technischer Zeichner
Beiträge: 8 Registriert: 10.05.2013 Plant Simulation 10.1 Pro
|
erstellt am: 05. Jun. 2013 21:37 <-- editieren / zitieren --> Unities abgeben:
vielen danke wieder mal. methode funktioniert dank Ihrem tip. das problem mit der endlosrekursion habe ich über eine Füllstandskontrolle in den griff bekommen. ich lagere jetzt keine behälter mehr ein wenn ein kritischer wert überschritten wird um dem system noch platz zum arbeiten zu geben. aber wie es halt für anfänger so ist, stolpere ich gleich in die nächste herausforderung. im screenshot sehen Sie 6 Förderstrecken wovon jeweils 3 in eine richtung laufen.(die linken beiden Paare sollen eine einspurige, reversible Fördertechnik darstellen) ich habe per methode den eingang der mittleren strecke nach links laufend gesperrt um die BE davor aufzuhalten. eine Freigabe erfolgt dabei per sensor und methode auf der gegen seite. sobald diese freigabe erfolgt (ausgang entsperrt) "springt" meine BE aber auf den QVW anstatt die Förderstrecken sauber zu befahren. kann ich das irgendwie ändern? [Diese Nachricht wurde von fankmich am 05. Jun. 2013 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: 05. Jun. 2013 22:51 <-- editieren / zitieren --> Unities abgeben: Nur für fankmich
Hat die betreffende Förderstrecke eine Ausgangssteuerung (vielleicht die vom QVW?, dann holt sich der QVW das Teil). Und welche Förderstrecke ist mit dem QVW verbunden (QVW Tab Verfahrweg - Seitenlinien)? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fankmich Mitglied Technischer Zeichner
Beiträge: 8 Registriert: 10.05.2013 Plant Simulation 10.1 Pro
|
erstellt am: 06. Jun. 2013 09:48 <-- editieren / zitieren --> Unities abgeben:
es ist bei keiner der 3 zuführenden strecken eine ausgangsteuerung eingetragen. mit dem QVW verbunden ist die linkeste der zuführenden strecken. allerdings wird die methode der zielort-definition für die BE bereits auf dem ersten zuführenden band durchgeführt (sensor). ist das das problem? 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: 06. Jun. 2013 10:11 <-- editieren / zitieren --> Unities abgeben: Nur für fankmich
Ich denke schon, es sollte in der Ausgangssteuerung der Förderstrecke sein, die direkt mit dem QVW verbunden ist. Die QVW besitzt eine interne Auftragsliste, in die das BE eingetragen wird. Wenn der QVW frei ist, wird das BE umgelagert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |