Autor
|
Thema: Staplersteuern/ Klassenbibliothek_Flüssigkeiten. (2190 / mal gelesen)
|
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 22. Apr. 2020 18:08 <-- editieren / zitieren --> Unities abgeben:         
Hallo Zusammen Hallo ich bin Anfänger mit der Plant Simulation und habe ein Problem mit Steuerung der Stapler. ich möchte ein Druckgussbetrieb mit Plant Simulation erstellen. In meiner Plant Simulation habe ich einen Netzwerk mit zwei Unternetzwerk(Schmelzofen und Druckgussmaschine (DGM)) Das Unternetzwerk-Schmelzofen besteht aus Schmelzschacht und Ofenwanne und das Unternetzwerk-DGM besteht aus Dosierofen. 1) für Schmelzofen soll ich eine Methode für die Staplersteuerung schreiben und mit der Generator aufrufen. Die Methode soll so sein: "der Stapler muss anhalten, wenn den Füllstand im Schmelzschacht unter einer bestimmten Menge ist" Die Methode, die ich geschrieben habe ist: if Schmelzofen.Schmelzschacht.MomentaneMenge > 400 .Benutzerobjekte.So_Stapler.pausieren(1) else .Benutzerobjekte.So_Stapler.geschwindigkeit :=1 end wenn ich die Simulation starte, funktioniert es nicht. bitte kann jemanden mir erklären wo liegt das Problem?
------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 22. Apr. 2020 20:05 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
Hallo Prinsco, Zitat: .Benutzerobjekte.So_Stapler.
ist das Objekt in der Klassenbibliothek. Das was anhalten soll; ist das Objekt, welches im Modell fährt. Beispielsweise nach Erzeugen von Stapler diesen in Variable speichern. Und dann in Methode den gespeicherten Stapler in Variable ansprechen. Code: If deineVariable = void //solange kein Transporter in Variable gespeichert ist, Methode verlassen return; end; ... deineVariable.pausieren(Dauer)
vG Nadin ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 22. Apr. 2020 20:45 <-- editieren / zitieren --> Unities abgeben:         
Hallo Nadin, vielen Dank für dein Feedback . Das Objekt hier ist ein .BEs.Fördergut. Der Stapler transportier ein .BEs.Fördergut von der puffer zu der Schmelzofen. also Quelle->puffer->Stapler->Schmelzofen. Der Stapler besorgt den Schmelzofen, nur wenn der Füllstand des Schmelzofen unter einer bestimmten Grenze ist. ------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 22. Apr. 2020 22:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
und wie ist die Frage? ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 23. Apr. 2020 00:45 <-- editieren / zitieren --> Unities abgeben:         
die Frage ist: wie kann ich den Stapler steuern, damit es den Schmelzofen besorgt, nur wenn der Füllstand des Schmelzofen unter einen bestimmten Grenze ist.also Die Staplersteuerung soll vorgeben, dass ein Schmelzofen nur dann beschickt bzw. mit einen Stapler beliefert wird, wenn die Aluminiummenge im Schmelzschacht unter einer bestimmten Menge ist. Wie ich oben schon erwähnt, der Schmelzofen besteht aus Schmelzschacht und einen Ofenwann. ------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 23. Apr. 2020 20:21 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
Zitat: Das was anhalten soll; ist das Objekt, welches im Modell fährt.
Damit meine ich den Stapler nicht das .BEs.Fördergut. Deine Methode ist soweit ok. Das einzige was - so sieht es zumindest aus - nicht passt, ist das: .Benutzerobjekte.So_Stapler Warum passt es nicht: Dies ist eig. eine Adresse eines Objekt in der Bibliothek (Wie beispielsweise das .BEs.Fördergut das Objekt in Bibliothek ist, aber das im Modell erzeugte BE .BEs.Fördergut:1 ist). Und wenn .Benutzerobjekte.So_Stapler das Objekt in der Bibliothek ist, dann ist es nicht das Fahrzeug das Fährt. Es ist das etwas mit .Benutzerobjekte.So_Stapler:1. Und weil die Nummer von der Anzahl der erzeugten So_Stapler abhängig ist; wird der Stapler nach erzeugen in eine Variable gespeichert. Also Quelle erzeugt So_Stapler. Und beispielsweise in Ausgangsstuerung (Heck) der Quelle merkst dir deinen Transporter. (Anfangswert der Variable ist void) Beispielsweise mit:
Code: Variable := @;
Jetzt kann es sein, dass beim Aktivieren deiner Methode durch deinen Generator die Variable noch nicht gesetzt wird. Deshalb ist die If-Abfrage davor. ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 23. Apr. 2020 21:16 <-- editieren / zitieren --> Unities abgeben:         
meine Quelle erzeugt ein BEs.Fördergut(das Aluminium) und diese wird mit einem BEs.Fahrzeuge(SO_Stapler) transportiert und die Steuerung der Fahrzeug hängt von die Füllmenge in Schmelzofen.
------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 23. Apr. 2020 23:24 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
ich probiere es mal mit einem Bild ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 23. Apr. 2020 23:28 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
hab noch ein Pfeil zum Transporter im Modell vergessen ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 24. Apr. 2020 00:26 <-- editieren / zitieren --> Unities abgeben:         
|
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 24. Apr. 2020 00:56 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
In Init-Methode steht irgendwo: .Benutzerobjekte.So_Stapler.erzeugeoder
.Benutzerobjekte.So_Stapler.create mach mal davon ein Bild ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 24. Apr. 2020 01:04 <-- editieren / zitieren --> Unities abgeben:         
|
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 24. Apr. 2020 01:06 <-- editieren / zitieren --> Unities abgeben:         
|
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 24. Apr. 2020 01:12 <-- editieren / zitieren --> Unities abgeben:         
Ich habe auch gedacht, die Methode mit Zielort zu schreiben. also das meine ich: if Schmelzofen.Schmelzschacht.MomentaneMenge > 300 and Schmelzofen1.Schmelzschacht.MomentaneMenge > 300 .Benutzerobjekte.So_Stapler.pausieren(10) .Benutzerobjekte.So_Stapler.geschwindigkeit :=1 elseif Schmelzofen.Schmelzschacht.MomentaneMenge > 300 .Benutzerobjekte.So_Stapler.zielort:=Schmelzofen1 elseif Schmelzofen1.Schmelzschacht.MomentaneMenge > 300 .Benutzerobjekte.So_Stapler.zielort:=Schmelzofen else .Benutzerobjekte.So_Stapler.geschwindigkeit :=1 end
------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 24. Apr. 2020 01:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
In der Klassenbibliothek (das ist bei dir das linke Fenster in Plant Simulation) suchst du "Variable". Dies müsste unter Informationsfluss zu finden sein. Das ziehst du mit der Maus in das NE-Schmelzofen-Netzwerk. (Damit hast du eine Variable in das Modell eingefügt.) Doppelklick auf diese neu angelegte Variable im Netzwerk: Vergebe einen Namen (z.B.: "VSo_Stapler"). wähle Datentyp objekt aktiviere Anfangswert in dem neu erschienenen Eingabefeld gibst du "void" ein. jetzt gehst du zu der InitMethode und änderst die zweite Zeile so: Code: var _obj : object := .Benuterobjekte.So_Stapler.erzeugen(Weg,2); VSo_Stapler = _obj;
Damit hast du den Transporter, welcher wirklich auf dem Weg fährt in deiner Variable gespeichert. Schreibe dies for deiner If-Abfrage in die Methode, die du für Generator angelegt hattest Code: If VSo_Stapler = void return; end; if Schmelzofen.Schmelzschacht.MomentaneMenge > 400VSo_Stapler.pausieren(1) else VSo_Stapler.geschwindigkeit :=1 end
in pausieren gibst du die Zeit an, wie lange der Transporter stehen bleibt. Die 1 heißt: der Transporter lausiert eine Sekunde!!
------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 24. Apr. 2020 13:01 <-- editieren / zitieren --> Unities abgeben:         
ich habe deine Code eingeben, aber bekomme ich eine Meldung(sieht Bild). ich denke die Methode funktioniert schon aber das Problem kommt aus der Werte und dem Füllstand . z.B: Abflussrate vom Schmelzschacht und Ofenwanne und auch den Füllstand vielen Dank ------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 24. Apr. 2020 15:07 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
ja, Flüssigkeiten in Tanks und co. mögen es nicht, wenn Abfluss und Zufluss nicht zueinander passen. Aber es gibt ein viel größeres Problem: Viele Anfänger kommen in Situationen, in denen die Aufgabenstellung den Wissensstand überschreitet. Dies ist normalerweise eine gute Sache, da Anfänger damit ihr Wissen erweitern können. Aber manchmal gibt es eine Situation, in der die Aufgabe die Anforderungen weit übertrifft!! Es ist wichtig, diese Situation selbst zu erkennen und im ersten Schritt entgegenzuwirken (Tutorial / die Beispielmodelle usw. durcharbeiten, um allgemeines Verständnis des Programms zu haben. Paar wissenschaftliche Arbeiten durchlesen, um Hintergrund zu verstehen. usw.). Denn: Am Ende muss ein Simulationsmodell die Anforderungen erfüllen. Ist dies nicht der Fall, wird die gesamte Simulation in Frage gestellt (auch in einigen Unternehmen). Und das sollte nicht sein!!!
------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied

 Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 07. Mai. 2020 21:29 <-- editieren / zitieren --> Unities abgeben:         
|
nadin1223 Mitglied Ing.
  
 Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 09. Mai. 2020 22:40 <-- editieren / zitieren --> Unities abgeben:          Nur für Prinsco
Moin, Fragen werden im Forum gestellt und beantwortet, weil Andere dadurch eine Chance haben nach Beiträgen zu suchen um vorhandene Lösungsansätze auf eigene Probleme zu adaptieren. Zu den Punkten: Ich vermute, dies ist die Aufgabenstellung:
Zitat: DGM-Steuerung: Hier solltest du die Steuerung unterteilen und gegebenenfalls in unterschiedliche Methoden schreiben, wobei die Hauptsteuerungsmethode die einzelnen Untermethoden aufruft. Zur Vereinfachung kannst du auch erstmal einen Stapler weglassen.
Der Rest ist das Vorgehen, welches du dir hierzu vorstellst... Formuliere als Erstes das Was gegeben ist und das Was du erweitern willst. Verwende hierzu beispielsweise Pseudocode. Weil programmieren bedeutet: Vorgänge in Prozesse und Events zu zerlegen. Das ist in jeder Programmiersprache gleich. Event: ist ein Ereignis welcher Auftritt. Dies ist beispielsweise zur Aktivierung einer Methode verwendbar. z.B.: Transporter.leer kann methodeXY aktivieren. Prozes: Das was die Methode tut. Also der Arbeitsablauf. z.B.: methodeXY Pseudocode: Transporter fahre zu Weg1. mal eine deiner Methodeninhalte kommentiert...
Code:
var Entportionierergrenze := 300 //wenn Menge in DGM1 und DGM2 größer als Endportionierergrenze ist, dann if DGM1.Dosierofen.MomentaneMenge > Entportionierergrenze and DGM2.Dosierofen.MomentaneMenge > Entportionierergrenze //stoppe den Stapler für 2 Sekunden DGM_Stapler1.pausieren(2)else //sonst setze die Geschwindigkeit auf 1 DGM_Stapler1.geschwindigkeit := 1 end
paar Tipps: (1) Immer eine Variable!!! Nicht mischen zwischen angehalten, geschwindigkeit und pausieren. Und nochmal: Nach 2 Sekunden warten fährt der Transporter weiter!!! Und mal ganz am rande: Ich kann mir gut den Lacher von Gabelstapler vorstellen, der in seiner Arbeitsanweisung liest: "Wenn System voll, dann zähle zwei Sekunden und fahre weiter". (2)Vergebe den Wegen aussagekräftige Namen! Namen wie Weg5, Weg4 usw. helfen dir nicht weiter. (3) In der Beispielmodellsammlung --> Kategorie: Materialfluss | Thema: Automatische Zielfindung --> von da oder wo anders am Besten ein für das Problem passendes Beispiel auswählen und im Kleinen auf eigenes Problem adaptieren. (4) Stell dir vor du bist der Gabelstapler. Deine Arbeitsanweisung wird am Display angezeugt, welches in Abhängigkeit deiner Position und Beladestatus dir verschiedene Anweisungen anzeigt. Wann und welche Informationen musst du bekommen, damit du die geforderte Prozess optimal erledigen kannst... ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |