Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Kommissionierung Hochregallager

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Kommissionierung Hochregallager (7527 mal gelesen)
CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 18. Okt. 2011 12:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich habe ein Problem und hoffe dass mir jemand hier weiter helfen kann. Im Rahmen meiner Diplomarbeit muss ich mit der Studentenversion Tecnomatrix Plant Simulation 9 ein Hochregallager simulieren und finde einfach keinen Ansatz. Wichtig ist hierbei nur die Auslagerung, die Einlagerung kann zunächst unberücksichtigt bleiben. Die auszulagernden Teile sind also immer vorhanden. Das Lager besteht aus ABC-Gassen und die Auslagerung soll nach der Streifenstrategie erfolgen, wobei eine Auslagerung mit verschiedenen Streifenzahlen verglichen werden soll. Zu Beginn genügt es lediglich eine Gasse zu betrachten. Leider fehlt mir der Ansatz.

Muss ich zunächst eine Inventarliste der Gasse erstellen und jedem Regalfach einen Artikel zuordnen?

Wie generiere ich meine Auslagerungsaufträge? Je Auftrage sollen 3-5 Regalfächer angefahren werden mit jeweils 1-3 Entnahmen pro Fach.

Wie starte ich meine Auslagerungsaufträge?

Bisher besteht mein Modell lediglich aus einer ABC-Gasse, einer Senke und dem WarehouseManager ABC. Ich hoffe ihr könnt mir weiter helfen.

Viele Grüße

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 28. Okt. 2011 21:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Was soll Ziel der Simulation sein?
Das Shop-Modul ist nicht der richtige Ansatz. Das Shop-Modul dient der Darstellung von Werkstattfertigungen.
Wenn das Ziel der Simulation die Ermittlung/Optimierung der Auslagerungszeiten (Auslastung der Regalbediengeräte) ist, dann müssen Sie die Regalbediengeräte simulieren. Dazu benötigen Sie je einen Wegbaustein und zwei Fahrzeuge. Ein Fahrzeug fährt auf dem Weg und bewegt sich entlang (innerhalb) der Lagergasse und das zweite Fahrzeug bewegt sich auf dem ersten Fahrzeug (längenorientierte Ladefläche)"vertikal".
Weg und längenorientiertes Fahrzeug werden jeweils mit Sensoren analog der Lagerfächer ausgestattet (und können so zu bestimmten x,y Koordinaten "fahren").

Das HRL kann mit einzelnen Lagerbausteinen simuliert werden.
Zur reinen Simulation der Regalbediengeräte können Sie die Lagerbereiche auch mit Hilfe von Tabellen simulieren (wenn Sie keine Materialbewegung im Lager brauchen). Jede Tabelle repräsentiert dann einen Lagerbereich (Gasse, x,y - Koordinate der Lagerfächer und Belegung).

Sie brauchen auf alle Fälle eine Lagerbelegung (ABC-Verteilung ??)und ein Auslagerprogramm.
Das Auslagerungsprogramm sollte für alle Simulationsläufe gleich sein, damit Sie Ihre unterschiedlichen Streifenstrategien vergleichen können.

Wenn ein Auslagerauftrag anliegt, ermitteln Sie die Koordinaten, ordnen diese nach Ihrer Auslagerungsstrategie und fahren mit dem Regalbediengerät die einzelnen Koordinaten ab. Die notwendige Zeit lässt sich stoppen.

Alles in allem nicht allzu schwierig mit Plant Simulation zu realisieren, allerdings definitiv kein Anfängerthema (vor allem wenn Sie die Auslagerungsstrategien programmieren müssen).


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 31. Okt. 2011 10:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für die Hilfe, so werde ich das Ganze mal versuchen.

Ziel der Simulation soll sein zu ermitteln welche Einflussgrößen es auf die Effizienz von Wegstrategien gibt. Dafür wird bespielsweise die Gassenlänge, die ABC Verteilung oder die Anzahl der Fachanfahrten verändert und dann  mit verschiedenen Streifenzahlen abgefahren. Bewegungen innerhalb des Lagers sind uninteressant. Die o.g. Versuche sollen zunächst nur innerhalb einer Gasse stattfinden. Später soll auch ein HRL mit mehreren Gassen betrachtet werden, wobei da dann andere Einlussgrößen untersucht werden sollen.


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 06. Nov. 2011 11:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo noch mal,

ich habe nun ein Modell erstellt zur Simulation des RBG, habe jedoch Schwierigkeiten den Quelltext richtig aufzurufen.

Die Fahrsteuerungen für das untere Fahrzeug(horizontale Bewegungen) und für das obere Fahrzeug(vertikale Bewegungen)sind analog.

Die Sensoren auf der Gasse und dem unteren Fahrzeug stellen die x bzw.y-Koordinaten der Fachmitten dar.

Das Problem wird im Folgenden lediglich für die horizontalen Bewegungen beschrieben, da die Problematik für die vertikalen Bewegungen analog sind.

Zunächst hatte ich die Methode Fahrsteuerung_waagerecht bei jedem Sensor der Gasse hinterlegt. Das hatte zur Folge dass diese Methode bei erreichen eines Sensors jedes Mal neu gestartet wurde und somit kein Auslagerungsauftrag abgeschlossen wurde. Es gab jedoch keine Fehlermeldungen und das Fahrzeug fuhr sowohl vorwärts als auch rückwärts. Wenn ich die Methode über einen Generator aufrufen lasse bekomme ich diverse Fehlermeldungen u.a. "unbekannter Name 'rueckwaerts'" wenn man direkt über waagerecht.rueckwaerts:=false auf das Fahrzeug zugreift, oder " Ein 'VOID' kann keine Methode 'Rueckwaerts' empfangen" bei @.rueckwaerts:=false und das obwohl der Quelltext an sich nicht geändert wurde.

Der Quelltext lautet wie folgt:

(SensorID : integer)
is
x:integer; --x-Koordinate Lagerfach
pf: length; --aktuelle Position des Fahrzeugs
ps:length; --Position Sensor
do 

x:=auslagerungsauftraege[2, auslagerungsauftraege.position]; --x-Koord. Auslagerungsauftrag auslesen aus Liste

--aktuelle Positon mit der anzufahrenden Position vergleichen und entscheiden ob vorwärts oder rückwärts gefahren werden muss

Gasse.inhaltsliste(RBG_Position_waagerecht); --Position des Fahrzeugs in Tabelle schreiben
pf:=RBG_Position_waagerecht[2,1]; --Position des Fahrzeugs auslesen

ps:=Sensorliste_waagerecht[2,x]; --Position des Sensors auslesen


if pf<ps then --Position Fahrzeug und Sensor vergleichen
@.rueckwaerts:=false;
else
@.rueckwaerts:=true;

end;


--Anhalten wenn Zielsensor erreicht
if SensorID=x then
@.pausieren(5);      --5Sekunden warten -->"Pickzeit"
end;
 

if auslagerungsauftraege.position=auslagerungsauftraege.yDim then
auslagerungsauftraege.position:=1;

else

auslagerungsauftraege.position:=auslagerungsauftraege.position+1; --eine Zeile weiter gehen in Auslagerungsliste
 
end;


end;


Bisher ist eine Auslagerung noch nicht berücksichtigt.

Warum bekomme ich Fehlermeldungen beim Aufrufen der Methode Fahrsteuerung über einen Generator?

Über Hinweise wäre ich sehr dankbar.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 07. Nov. 2011 16:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das Problem mit der Aktivierung der Methode habe ich nun in den Griff bekommen. Es bleibt jedoch das Problem dass ich immer die Fehlermeldung "Unbekannter Name rueckwaerts" bekomme wenn ich mit waagerecht.rueckwaerts:=false bzw. waagerecht.rueckwaerts:=true die Fahrrichtung des Fahrzeugs "waagerecht" bestimmen möchte. Benutzerdefinierte Attribute sind keine definiert.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 07. Nov. 2011 19:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Ab Version 10 werden einige Befehle wieder mit Umlaut geschrieben:

@.rückwärts:=true/false

Am einfachsten wäre es, das RBG "dumm" zu lassen. Das RBG wird adressiert (x,y) und beide Fahrzeuge werden in der richtigen Richtung gestartet. Wenn beide Fahrzeuge angehalten haben (waituntil waagerecht.angehalten and senkrecht angehalten prio 1 , vergeht die Ladezeit und das Fahrzeug wird über eine externe Steuerung neu adressiert, die Richtung festgelegt und wieder gestartet.

Auf diese Weise hätten Sie eine zentrale Methode zur Erzeugung Ihrer Auslagerungsstrategie.

Sie müssten dafür nur bei der Erzeugung der Fahrzeuge Verweise auf die Fahrzeuge in globlae Variablen schreiben (Baustein Variable --> Hilfe).

waagerecht:=.bes.fahrzeug.erzeugen(xxx)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 09. Nov. 2011 10:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Regalbediengerät_Methoden-getrennt.spp.jpg

 
Da ich mit Version 9 arbeite trifft das Schreiben mit Umlauten leider nicht zu. Je weiter ich hier dran arbeite desto wildere Fehlermeldungen bekomme ich.
Ich habe die Anweisungen mittlerweile schon auf mehrere Methoden verteilt und die lokalen Variablen in globale umgeändert.Leider bekomm ich das Modell (mit angepasster Endung) auch nicht hochgeladen so dass man sich das mal ansehen könnte. Gibts da noch einen weiteren Trick den man beachten muss?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 09. Nov. 2011 21:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Wenn Sie die Methode über einen Generator aufrufen, dann ist das @ nicht gesetzt (void). @ können Sie nur verwenden, wenn Sie die Methode über einen Sensor aufrufen lassen (@ ist dann das aufrufende BE).
Wenn Sie in einer Methode, die Sie über einen Generator aufrufen wollen, auf die BEs zugreifen wollen, dann müssen Sie Verweise auf die Fahrzeuge in globalen Variablen speichern (Rückgabewert bei der Erzeugung).

In der Sensorsteuerung ist es normal, dass die bei jedem Sensor aufgerufen wird.
Sie müssen dem Fahrzeug ein Ziel mitgeben (z.b: benutzerdef. Attribut zielSensor:integer) und dann als erstes abfragen, ob Sie am Zielsensor angekommen sind:

Code:

(SensorID:integer)
is
do
    if sensorID=@.zielSensor then
      @.angehalten:=true;
      -- usw.


    end;


end;



Das bei beiden Fahrzeugen. Wenn beide Fahrzeuge stehen --> laden --> neu adressieren --> richtung festlegen --> starten
Das können Sie mit einer übergeordneten Steuerung machen.

[Diese Nachricht wurde von Bon Simul am 09. Nov. 2011 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 10. Nov. 2011 21:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank, das werde ich gleich mal versuchen!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 16. Nov. 2011 14:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Regalbediengerät_zweidimensional_nacheinander.spp.jpg

 
Hallo noch mal,

ich hänge leider schon wieder fest. Die horizontalen Bewegungen klappen sehr gut. Die Schwierigkeit ist beide Fahrzeuge gleichzeitig fahren zu lassen.

Das Bild zeigt einen Screenshot des Modells. Im Wesentlichen sind die 3 Methoden HoleAuftrag, Fahren und Erreicht von Bedeutung.

HoleAuftrag_x:
is
do
if auslagerungsauftraege[1, auslagerungsauftraege.position]=Auftragsnummer then --solange die gleiche Auftragsnummer

x:=auslagerungsauftraege[2,auslagerungsauftraege.position]; --x-Kooridinate Auslagerungsauftrag auslesen

Fahren_X;  --Methode 'Fahren_X' starten

else    --wenn neue Auftragsnummer

x:=0;                          --setze die globalen Variablen gleich null um keine Sensorsteuerung auszulösen
xPositionSensor:=0;
xPositionFahrzeug:=0;

@.rueckwaerts:=true;  --fahre Rückwärts bis zu Basisstation um "abzuladen und neue Auftragsliste zu holen" zu simulieren

end;

end;


Wenn der Auftrag aus der Auslagerungstabelle ausgelesen ist erfolgt die Bestimmung der Fahrtrichtung mit der Methode Fahren_X:

is
do
Weg.inhaltsliste(RBG_Position_x);                --schreibt die Position des Fahrzeugs "waagerecht" auf dem Weg
                                                  -- in Metern in die Tabelle RBG_Position_x

xPositionFahrzeug:=RBG_Position_x[3,1];          --Auslesen der Fahrzeugposition auf dem Weg aus der Tabelle und 
  -- setzt den Wert gleich der globalen Variable "xPositionFahrzeug"

xPositionSensor:=Sensorliste[2,x];                -- Liest die Position des "Sensors X" in Metern auf dem Weg aus und setzt den
                                                  --Wert gleich der globalen Variable "xPositionSensor"


-- Vergleichen von Position des Fahrzeugs und des Sensors in Metern auf dem Weg und entscheiden ob Fahrzeug vorwärts oder
--rückwärts fährt

if xPositionFahrzeug < xPositionSensor then     
                                             
@.rueckwaerts:=false;

else
@.rueckwaerts:=true;
end;

end;


Das Fahrzeug fährt so lange bis es den Zielsensor mit der SensorID=X gefunden hat. Die Steuerung xErreicht ist folgende:

(SensorID : integer)
is
do 
--Wenn die x-Koordinate des Regalfachs erreicht ist wird der Pick simuliert und in der Auslagerungsliste wird eine Zeile tiefer
--gegangen

if SensorID=x then

@.pausieren(5);  --Simulation des Picks (5Sek.)
Picks:=Picks+1;  --Zählt die Picks
auslagerungsauftraege.position:=auslagerungsauftraege.position+1;


HoleAuftragX;  --neuen Auslagerungsauftrag aus der Liste auslesen durch Aufrufen der Methode HoleAuftragX

else
@.angehalten:=false;
end;

end;


Wenn alle Positionen einer Auftragsnr abgearbeitet sind fährt das Fahrzeug zur Basisstation um "abzuladen und den neuen Auftrag entgegen zu nehmen". Danach fährt es wieder in den Lagerbereich im den neuen Auftrag abzuarbeiten.

Bis hier her klappt das auch sehr gut.

Das Problem ist die Berücksichtigung der vertikalen Komponente. Die Steuerung dafür ist analog zu der Steuerung der horizontalen Komponente. Die horizontalen und vertikalen Bewegungen sollen eigentlich zeitgleich ausgeführt werden, ich weiß jedoch nicht wie ich sie passend aufrufen kann.

Auch das Aufrufen nacheinander funktioniert irgendwie nicht. Ich habe versucht zuerst das horizontale Fahrzeug zur x-Koordinate fahren zu lassen und es dort stehen zu lassen bis das vertikale Fahrzeug bei der y-Koordinate angekommen ist. Konktret habe ich versucht das durch den  Aufruf der Methode "HoleAuftragY" bei erreichen des Sensors X zu realisieren, das vertikale Fahrzeug hat sich jedoch nicht bewegt.

Für Hinweise zur Lösung des Problems wäre ich sehr dankbar.


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 16. Nov. 2011 14:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Modell_Kommissionierung.png

 
Das war der falsche Anhang. Hier jetzt der richtige Screenshot.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 16. Nov. 2011 22:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Das hier läuft so ähnlich, vielleicht hilft es: http://www.bangsow.de/emplant/kran_2d.spp

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 17. Nov. 2011 18:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für die schnelle Hilfe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 21. Nov. 2011 15:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Fehlermeldung.png

 
Leider tauchen schon wieder Probleme auf.
In Anlehnung an das Beispiel gibt es nun nur noch eine Sensorsteuerung bei der abgefragt wird welches Fahrzeug sie ausgelöst hat.

If @.name="horizontal" then

usw.

elseif @.name="vertikal" then

usw.

end;

Diese Steuerung wurde auch als Sensorsteuerung bei den Sensoren des Wegs und der Sensoren des unteren Fahrzeugs "Horizontal" hinterlegt.

Nun taucht jedoch die Fehlermeldung auf "Die Sensorsteuerung des Objekts ist nicht vorhanden" (Fehlermeldung vgl. Abbildung). Dabei ist die Steuerung vorhanden. Dass die Fehlermeldung durch einen geänderten Namen der Methode ausgelöst wird ist ausgeschlossen.

Alle Einstellungen der Sensoren wurden bei den Objekten in der Klassenbibliothek vorgenommen.

Was hat die Fehlermeldung zu bedeuten?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 21. Nov. 2011 16:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Beim Anhängen der Steuerung an die Sensoren scheint ein Fehler passiert zu sein. Die Tilde (~) vor dem Punkt der Methodenadresse ist falsch. Am Besten immer ein Häckchen bei absolut beim Zuordnen machen.
Die absolute Adresse muss immer mit einem Punkt beginnen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 21. Nov. 2011 17:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank, das hat geholfen!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 23. Nov. 2011 18:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Es gibt leider schon wieder ein Problem. Nachdem die  Sensorsteuerung die beiden Fahrzeuge an der x und y Kooridnate des ersten Regalfachs zum stehen gebracht hat warten beide Fahrzeuge 5 Sekunden (Simulation eines Picks). Danach fährt das obere Fahrzeug aber nicht wieder los, wodurch die ganze Simulation abgebrochen wird.

Der Text der Sensorsteuerung ist folgender:

(SensorID:integer)
is
do
--Steuerung für Horizontal
if @.name="horizontal" then 

if SensorID=x then
@.pausieren;
xFertig:=true;

else
@.angehalten:=false;
end;


--Steuerung für Vertikal
elseif @.name="vertikal" then
if SensorID=y then
@.pausieren;
yFertig:=true;
else
@.angehalten:=false;
end;
end;

--Wenn beide Fahrzeuge an der richtigen Koordinaten stehen warten und zum nächsten Regalfach fahren
if (xFertig=true and yFertig=true) then 
wait 5; --dann 5 Sekunden warten
Picks:=Picks+1;  --Zählen der Picks

.BEs.vertikal:1.entpausieren;
.BEs.horizontal:1.entpausieren;

xFertig:=false;  --zurücksetzen der Variablen
yFertig:=false;


auslagerungsauftraege.position:=auslagerungsauftraege.position+1; --Weiter in Auslagerungsliste


      --nun wird erneut ein Auslagerungsauftrag aus der Liste ausgelesen und die Fahrrichtung bestimmt

if auslagerungsauftraege[1, auslagerungsauftraege.position]=Auftragsnummer then --solange die gleiche Auftragsnummer



x:=auslagerungsauftraege[2,auslagerungsauftraege.position]; --x-Kooridinate Auslagerungsauftrag auslesen
y:=auslagerungsauftraege[3,auslagerungsauftraege.position]; --y-Kooridinate Auslagerungsauftrag auslesen

Weg.inhaltsliste(RBG_Position_x);  --Position "Horizontal" auf Weg in Liste schreiben
.BEs.horizontal:1.inhaltsliste(RBG_Position_y);  --Position "Vertikal" auf "Horizontal" in Liste schreiben

xPositionFahrzeug:=RBG_Position_X[3,1];        -- Fahrzeusposition aus Liste lesen und in globale Variable setzen
yPositionFahrzeug:=RBG_Position_Y[3,1];        -- Fahrzeusposition aus Liste lesen und in globale Variable setzen

xPositionSensor:=Sensorliste_X[2,x];            --Sensorposition aus Liste lesen und in globale Variable setzen
yPositionSensor:=Sensorliste_Y[2,y]; --Sensorposition aus Liste lesen und in globale Variable setzen


--vergleicht Fahrzeugposition und Sensorposition und entscheidet über Fahrtrichtung


if xPositionFahrzeug < xPositionSensor then   
.BEs.horizontal.rueckwaerts:=false;       
else
.BEs.horizontal.rueckwaerts:=true;
end;
 


if yPositionFahrzeug < yPositionSensor then
.BEs.vertikal.rueckwaerts:=false;
else
.BEs.vertikal.rueckwaerts:=true;
end;



else    --wenn neue Auftragsnummer

x:=0;                          --setze die globalen Variablen gleich null um keine Sensorsteuerung auszulösen
xPositionSensor:=0;
xPositionFahrzeug:=0;

@.rueckwaerts:=true;  --fahre Rückwärts bis zu Basisstation um "abzuladen und neue Auftragsliste zu holen" zu simulieren

end;


end;
end;


Warum fährt das obere Fahrzeug "vertikal" nach dem ersten Stop nicht wieder los? Muss das Fahrzeug auf einem Fahrzeug anders angesprochen werden als das Fahrzeug auf einem Weg? Es liegt auch nicht daran dass das nächste Fach die selbe y-Koordinate hätte und man den Fall Fahrzeugposition=Sensorposition zu berücksichtigen hätte.

Gruß

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 24. Nov. 2011 12:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Ich würde nicht mit pausieren arbeiten.
Einfach mit angehalten:=true anhalten und nach wait(5) wieder mit angehalten:=false wieder starten.
Und das Verwenden der BE-Kalssen ist auch keine gute Idee (.BEs.vertikal.rückwärts:=true) Sprechen Sie die Fahrzeuge lieber mit weg.inhalt und weg.inhalt.inhalt an. Sonst haben Sie Probleme, wenn Sie die nächste Gasse anlegen (die sich dann unabhängig bewegen muss).

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 24. Nov. 2011 22:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Dankeschön, das werde ich versuchen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 02. Dez. 2011 22:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das Modell läuft, dank der Hilfe! Vielen Dank noch mal an dieser Stelle. Nun möchte ich zur Auswertung zum einen die Spielzeit, also die benötigte Zeit zur Abarbeitung eines Kommissionierauftrags, und die gefahrene Strecke ermitteln. Für die Spielzeit habe ich einen Sensor bei der Basisstation gesetzt. Zu Beginn eines neuen Auftrags soll dieser ausgelöst werden und die Zeit des Ereignisverwalters in eine Tabelle schreiben. Auf dem Weg zurück zur Basis soll er wieder ausgelöst werden und die Zeit des Ereignisverwalters soll wieder in eine weitere Spalte der Tabelle. In der dritten Spalte soll durch Subtraktion beider Werte die Spielzeit ermittelt werden. Der Quelltext ist folgender:

is
do
 
if @.rueckwaerts=false then  --Wenn ein neuer Auftrag beginnt

.Modelle.Netzwerk.Spielzeiten[1,Spielzeiten.Position]:=Auftragsnummer; --schreibe Auftragsnr. in Tabelle Spielzeiten
.Modelle.Netzwerk.Spielzeiten[2,Spielzeiten.Position]:=.Modelle.Netzwerk.Ereignisverwalter.Zeit; --schreibe Anfangszeit in Tabelle Spielzeiten

elseif @.rueckwaerts=true then  --wenn der Auftrag zu ende ist

.Modelle.Netzwerk.Spielzeiten[3,Spielzeiten.Position]:=.Modelle.Netzwerk.Ereignisverwalter.Zeit;
--schreibe Endzeit in Tabelle
Spielzeiten[4,Spielzeiten.Position]:=Spielzeiten[3,Spielzeiten.Position]-Spielzeiten[2.Spielzeiten.Position]; --schreibt Spielzeit in Tabelle
Spielzeiten.Position:=Spielzeiten.Position+1;

end;
end;


Als Fehlermeldung erscheint

Fehler in Methode '.Modelle.Netzwerk.Spielzeiten_aufschreiben' in Zeile '12': Falscher Datentyp für '.Modelle.Netzwerk.Spielzeiten': 'time' übergeben, string erwartet

Die Tabelle ist in den Spalten in die die Zeiten geschrieben werden sollen als Time formatiert. Wo ist der Fehler? Ist da etwas falsch angesprochen?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 03. Dez. 2011 13:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Nach Ihrer Methode haben Sie 4 Spalten.
Wenn Sie die Auftragsnummer in den Zeilenindex (in der Tabelle Format - Zeilenindex aktiv) schreiben wollen, dann muss Ihr Index mit 0 beginnen. Sonst muss die 4. Spalte den Datentyp time haben.

Die Variante mit 3 Spalten könnte so aussehen.

Code:

is
do
 
if @.rueckwaerts=false then  --Wenn ein neuer Auftrag beginnt

.Modelle.Netzwerk.Spielzeiten[1,Spielzeiten.Position]:=Auftragsnummer; --schreibe Auftragsnr. in Tabelle Spielzeiten
.Modelle.Netzwerk.Spielzeiten[2,Spielzeiten.Position]:=.Modelle.Netzwerk.Ereignisverwalter.Zeit; --schreibe Anfangszeit in Tabelle Spielzeiten

elseif @.rueckwaerts=true then  --wenn der Auftrag zu ende ist
--schreibe Endzeit in Tabelle
Spielzeiten[3,Spielzeiten.Position]:=.Modelle.Netzwerk.Ereignisverwalter.Zeit-Spielzeiten[2,Spielzeiten.Position]; --schreibt Spielzeit in Tabelle
Spielzeiten.Position:=Spielzeiten.Position+1;

end;
end;


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 04. Dez. 2011 10:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Es funktioniert leider immer noch nicht.

Ich habe eine Liste mit 4 Spalten. Der Datentyp der ersten Spalte (Auftragsnummer) ist "integer", der Datentyp der anderen drei Spalten ist "time". Ich bekomme zwei Fehlermeldungen:


is
do

if @.rueckwaerts=false then  --Wenn ein neuer Auftrag beginnt

.Modelle.Netzwerk.Spielzeiten[1,Spielzeiten.Position]:=Auftragsnummer; --schreibe Auftragsnr. in Tabelle Spielzeiten


1. Fehlermeldung: Fehler in Methode '.Modelle.Netzwerk.Spielzeiten_aufschreiben' in Zeile '7': Falscher Datentyp für '.Modelle.Netzwerk.Spielzeiten': 'integer' übergeben, string erwartet


.Modelle.Netzwerk.Spielzeiten[2,Spielzeiten.Position]:=.Modelle.Netzwerk.Ereignisverwalter.Zeit; --schreibe Anfangszeit in Tabelle Spielzeiten

elseif @.rueckwaerts=true then  --wenn der Auftrag zu ende ist
--schreibe Endzeit in Tabelle
.Modelle.Netzwerk.Spielzeiten[3,Spielzeiten.Position]:=.Modelle.Netzwerk.Ereignisverwalter.Zeit;

2. Fehlermeldung: Fehler in Methode '.Modelle.Netzwerk.Spielzeiten_aufschreiben' in Zeile '12': Falscher Datentyp für '.Modelle.Netzwerk.Spielzeiten': 'time' übergeben, string erwartet.



--Berechnung der Spielzeit
Spielzeiten[4,Spielzeiten.Position]:=.Modelle.Netzwerk.Ereignisverwalter.Zeit-Spielzeiten[2,Spielzeiten.Position]; --schreibt Spielzeit in Tabelle
Spielzeiten.Position:=Spielzeiten.Position+1;

end;
end;

Warum wird der Datentyp "string" erwartet? Wenn ich die Formate der Spalten auf "String" ändere (was zwar keinen Sinn macht), bleibt die Fehlermeldung.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 04. Dez. 2011 17:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Die Fehlermeldung kommt eindeutig von der Tabelle.
Wo ändern Sie die Formate der Tabelle? Sie müssen die Formate in der Tabelle im Netzwerk ändern und dafür zunächst die Vererbung ausschalten. Das klingt für mich nach einem Vererbungsproblem (Sie ändern die Klasse, die Vererbung für das Objekt ist ausgeschalten, deshalb hat es keine Auswirkung auf das Objekt).
Sonst einfach die Tabelle löschen, eine neue Tabelle einfügen und dort die Formate einstellen (vielleicht hilft es).

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 05. Dez. 2011 08:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Leider klappt es immer noch nicht. Ich habe die Tabelle im Netzwerk geöffnet, unter "Format" den Hacken bei "Format erben" entfernt, und dann die jeweiligen Spalten markiert und über die rechte Maustaste "Format" die entsprechenden Datentypen ausgewählt. So hat das sonst auch funktioniert. In der Klassenbibiliothek habe ich diesbezüglich nichts geändert. Auch das Löschen der Tabelle und neu erstellen bringt keine Veränderung.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 05. Dez. 2011 10:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nun funktioniert es! Woran es lag ist mir jedoch nicht richtig klar. Ich habe lediglich den Spaltenindex der Tabelle deaktiviert und anschließend wieder neu aktiviert, ohne sonstige Änderungen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 25. Jan. 2012 12:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo noch mal,

ich bin nun dabei ein Lager mit mehreren Gassen zu erstellen. Da ich mir die Möglichkeit offen halten muss mehrere Stapler gleichzeitig fahren zu lassen muss ich alle Methoden allgemein formulieren auch wenn z.Z. nur ein Stapler fährt.

Der Stapler ist durch zwei aufeinander gestapelte Fahrzeuge dargestellt. Die Koordinaten der Regalfächer sind durch  Sensoren auf dem Weg (x-Koordinaten) und auf dem unteren Fahrzeug (y-Koordinaten) dargestellt.

Hat ein Fahrzeug seine Zielkoordinate erreicht hält es an und eine globale Variabel xErreicht bzw. yErreicht wird auf true gesetzt. Sind beide Fahrzeuge auf der richtigen Position (xErreicht:=true und yErreicht:=true) wird die Entnahme durch wait(15) simuliert.

Da die Fahrzeuge danach weiter fahren sollen muss für beide Fahrzeuge angehalten:=false gesetzt werden.
Das will ich erreichen durch

Gasse1.inhalt.angehalten:=false;            --unteres Fahrzeug (x-Richung)
Gasse1.inhalt.inhalt.angehalten:=false;    --oberes Fahrzeug (y-Richtung)

da das im aktuellen Falle den zweispurigen Weg mit dem Namen Gasse1 betrifft.
Die richtige Gasse wird durch eine if-Abfrage der aktuellen Gasse realisiert.

Leider kommt die Fehlermeldung "Unbekannter Name Inhalt" und ich kann sie nicht zuorden.

Wenn ich der Gasse ein benutzerdefiniertes Attribut "Inhalt" mit Datentyp Object hinzufüge kommt die Fehlermeldung "Ein 'Void'kann keine Methode 'Angehalten' empfangen". Auch die Angabe des absoluten Pfads bringt nicht.

Hat jemand eine Idee wo der Fehler liegt?


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 25. Jan. 2012 19:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Habe den Fehler schon selber gefunden!
Bei einem zweispurigen Weg muss ich die Spuren A und B direkt ansprechen, also zb. Weg.B.inhalt.angehalten:=true

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 26. Jan. 2012 09:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo noch einmal,

um die Quelltexte in jeder Gasse gleichermaßen nutzen zu können muss ich die Methoden allgemein formulieren.

Während innerhalb einer Gasse noch folgende Abfrage funktioniert:

weg.inhalt.angehalten:=true muss ich bei mehreren Gassen die Formulierung allgemeiner halten.

Meine Gassen heißen Gasse1, Gasse2, Gasse3, etc. Darüberhinaus habe ich eine globale Variable "Gasse" eingeführt, die die Nr. der aktuellen Gasse in der sich das FZ befindet beinhaltet.

Um nicht alles über
if Gasse=1 then
Gasse1.inhalt.angehalten:=true;
elseif Gasse2= then
Gasse2.inhalt.angehalten:=true;
usw.
end;

zu regeln stellte ich mir etwas vor wie zb:

"Gasse"+str_to_string(Gasse).inhalt.angehalten:=true;

so dass die aktuelle Gasse  automatisch eingesetzt wird.

Ich könnte das auch über lauter if...elseif Abfragen einrichten, aber da diese Fallunterscheidungen an vielen Stellen benötigt werden wird das Ganze sonst sehr unübersichtlich.

Geht so etwas überhaupt?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 30. Jan. 2012 08:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Für die "zusammengbauten" Verweise müssten Sie die Funktion str_to_obj verwenden, das würde dann wie folgt aussehen:
Code:

str_to_obj("Gasse"+num_to_str(Gasse)).inhalt.angehalten:=true;

Wenn Ihnen das zu sperrig ist, dann können Sie eine Tabelle (Datentyp object) mit Objektverweisen anlegen und dann die Gassennummer als Zeilen- oder Spaltennummern verwenden, z.B.

Code:

gassen[1,Gasse].inhalt.angehalten:=true;

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 30. Jan. 2012 08:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 07. Feb. 2012 10:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

irgendetwas stimmt mit dem Programm nicht.

Ich erstelle gerade ein neues Modell. Mein Stapler (zwei aufeinander gstapelte Fahrzeuge) soll auf einem zweispurigen Weg "Basisstation" erzeugt werde. Also lautet die Init-Methode:


is
do
--Fahrzeuge erzeugen
.BEs.Horizontal.erzeugen(Basisstation,6.5);

.BEs.Vertikal.erzeugen(Basisstation.A.inhalt,1.4);

Basisstation.A.inhalt.inhalt.angehalten:=true;

end;

Das funktioniert auch in einem anderen Modell. In diesem Fall wird jedoch nur das untere Fahrzeug "Horizontal" erzeugt. Warum? Das untere Fahrzeug "Horizontal" wird auf Spur A erzeugt und im Debugger sehe ich auch dass "Basisstation.A.inhalt" als Fahrzeug "horizontal" belegt ist.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 09. Feb. 2012 06:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Das Erzeugen funktioniert nicht, wenn die Ladeflaechenlaenge kleiner als die Position der Erzeugung  ist(oder das BE laenger ist als die Ladeflaeche).

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 24. Feb. 2012 11:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich habe mir unbeabsichtigt eine Endlos-Schleife eingebaut und weiß nicht genau warum das Abbruch-Kriterium nicht erreicht wird.

Bevor der Stapler (zwei gestapelte Fahrzeuge) die Gasse verlässt muss die Fahrerkabine (das obere der beiden Fahrzeuge)"abgelassen" werden. D.h., das obere Fahrzeug sollt rückwärts fahren bis es mit dem Heck auf Position "0m" und mit dem Bug auf "1.5m" steht.

Ich habe versucht das mit Hilfe einer repeat-until Schleife zu realisieren. Das untere Fahrzeug soll so lange anhalten bis das obere Fahrzeug auf der richtigen Position steht.

Der Code ist folgender:

repeat

--Prüfung der Position der Fahrerkabine (Vertikal) und warten bis Kabine unten ist
if str_to_obj("Gasse"+to_str(alteGassennr)).A.leer=false then  --auf welcher Spur befindet sich das Fahrzeug
str_to_obj("Gasse"+to_str(alteGassennr)).A.inhalt.inhaltsliste(RBG_Position_y);  --Schreibt die Position von "Vertikal" in Tabelle
str_to_obj("Gasse"+to_str(alteGassennr)).A.inhalt.angehalten:=true; --"Horizontal" hält an
str_to_obj("Gasse"+to_str(alteGassennr)).A.inhalt.inhalt.angehalten:=false; --"Vertikal" fährt runter
str_to_obj("Gasse"+to_str(alteGassennr)).A.inhalt.inhalt.rueckwaerts:=true;

else
str_to_obj("Gasse"+to_str(alteGassennr)).B.inhalt.inhaltsliste(RBG_Position_y);
str_to_obj("Gasse"+to_str(alteGassennr)).B.inhalt.angehalten:=true;
str_to_obj("Gasse"+to_str(alteGassennr)).B.inhalt.inhalt.angehalten:=false; --"Vertikal" fährt runter
str_to_obj("Gasse"+to_str(alteGassennr)).B.inhalt.inhalt.rueckwaerts:=true;
end;

yPositionFahrzeug:=RBG_Position_Y[3,1]; 

until yPositionFahrzeug=1.5; --Vergleichen der aktuellen Position der Kabine mit der gewünschten Position


Leider verändert das Fahrzeug "Vertikal" welches die Fahrerkabine darstellt die Position nicht. Dadurch wird das Abbruchkriterium natürlich nie errreicht. Warum fährt das obere Fahrzeug nicht weiter rückwärts?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 24. Feb. 2012 13:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habe das Problem jetzt umgangen indem ich das obere Fahrzeug auf die Position 1.5m (Bug)umlagere.

@.inhalt.umlagern(@,1.5);

Damit die Zeit stimmt habe ich den Befehl wait eingeführt und lasse die Zeit einfach durch Weg/Geschwindigkeit berechnen. Kann mir trotzdem jemand sagen warum das mit dem repeat-until Befehl nicht funktioniert? Liegt das daran dass dem Fahrzeug keine Zeit bleibt zu fahren und bevor der rueckwaerts:=true Befehl umgesetzt werden kann schon wieder in den Anfang der Repeat Schleife gewechselt wird?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 24. Feb. 2012 16:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CSRO 10 Unities + Antwort hilfreich

Während Plant Simulation die Schleife durchführt, bleibt die Simulationszeit stehen (das Fahrzeug fährt nicht weiter). Deshalb erreichen Sie die Abbruchbedingung nicht.
Wenn Sie die Schleife mit wait immer ein kleines Stück pausieren, dann hat das Fahrzeug eine Chance, sich zu bewegen.
Wenn Sie auf einen Wert einer globalen Variable warten, können Sie auch waituntil verwenden und brauchen so keine "Endlosschleife".
Ansonsten sollten Sie bei Positionen nicht mit "=" vergleichen, sonstern mit >= oder <=,falls Sie 0 m oder 1,5m nicht ganz genau erreichen (sondern nur 1,49999999999).

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CSRO
Mitglied



Sehen Sie sich das Profil von CSRO an!   Senden Sie eine Private Message an CSRO  Schreiben Sie einen Gästebucheintrag für CSRO

Beiträge: 25
Registriert: 07.09.2011

erstellt am: 24. Feb. 2012 23:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für die schnelle Antwort!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz