Autor
|
Thema: Methode mit Hilfe einer Methode erzeugen (1190 / mal gelesen)
|
Julian2408 Mitglied
Beiträge: 26 Registriert: 09.07.2020
|
erstellt am: 16. Jul. 2020 11:47 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin noch Neuling in der Arbeit mit Plant Simulation und habe in meiner Masterthesis die Aufgabe ein wandelbares Montagesystem zu erzeugen. Dies bedeutet, dass sich das ganze Modell mit Hilfe programmierter Methoden auf Basis von Werten einer Excel-Datei (mehrere Tabellen) aufbaut. Mittlerweile bin ich so weit, dass sich die Quellen, Stationen, Puffer, BEs usw. so erzeugen lassen. Nun stehe ich jedoch vor dem Problem, dass ich bspw. eine Methode zur Ausgangssteuerung in einer Quelle erstellen möchte. Dies habe ich so gelöst: LieferantObject.erzeugeAttr("BeiAusgang", "method") LieferantObject.setzeAttribut("AusSt", "self.BeiAusgang") Dies funktioniert soweit, jedoch würde ich nun gerne mit Hilfe dieser Methode auch noch den "Inhalt" der Methode BeiAusgang erzeugen. Soll dann so aussehen, dass bspw. für Quelle1 umgelagert wird auf das Lager, von Quelle2 umgelagert wird auf Station1 usw.....Diese Informationen stammen dann auch aus der Excel-Datei. Bisher habe ich jedoch keine Lösung gefunden, wie ich das machen kann. Bsp.: die Methode "BeiAusgang" in Quelle1 soll dann so aussehen: @.umlagern(lager) Vielen Dank schon mal für eure Hilfe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 16. Jul. 2020 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für Julian2408
Hallo Julian, Code: &Method.program:= "Dein ProgramCode"
Zitat: Bsp.: die Methode "BeiAusgang" in Quelle1 soll dann so aussehen: @.umlagern(lager)
Es dient nicht der Übersichtlichkeit, den zu erzeugenden Quellcode in einer Methode abzulegen. Ideal ist es solche Methodeninhalte, welcher in eine andere Methode kopiert werden, separat anzulegen. Die veränderlichen Parameter werden mittels Suchen/Ersetzen im Text vor dem Einfügen geändert. 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 |
Julian2408 Mitglied
Beiträge: 26 Registriert: 09.07.2020
|
erstellt am: 16. Jul. 2020 14:22 <-- editieren / zitieren --> Unities abgeben:
Danke schon mal für die schnelle Hilfe! Kannst du mir sagen was genau dieses & in Code: &method.program := "Dein ProgramCode"
macht? Bekomme aktuell noch die Fehlermeldung "Der ref-Operator kann das Objekt nicht finden". wie genau kann ich mir das mit dem Suchen/Ersetzen vorstellen? Hättest du da vielleicht ein Beispiel für mich? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 16. Jul. 2020 14:45 <-- editieren / zitieren --> Unities abgeben: Nur für Julian2408
für dein obiges Beispiel: Code: LieferantObject.&BeiAusgang.program := "..."
& übergibt das Objekt. Mal einfach mit und ohne ausprobieren Zitat: wie genau kann ich mir das mit dem Suchen/Ersetzen vorstellen?
beispielsweise der SimTalk-Befehl "regex_replace" bzw. alles was für String Manipulation anwendbar ist. ------------------ 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 |
Julian2408 Mitglied
Beiträge: 26 Registriert: 09.07.2020
|
erstellt am: 16. Jul. 2020 15:28 <-- editieren / zitieren --> Unities abgeben:
Ok perfekt danke, das funktioniert Eine Frage hätte ich noch: Mein Code sieht nun so aus: Code: var x,y,z: integer var LieferantName, LieferantType: string var LieferantCoord: real[3] var LieferantObject: object var LieferantEinsteuerung: string//Daten aus Excel einlesen t_Lieferanten.readExcelFile("C:...\Simulationsdaten.xlsx","Lieferanten") // Für jeden Lieferant in Tabelle for y := 1 to .Modelle.Modell.t_Lieferanten.YDim // Lese Name, Typ, Koordinaten LieferantName := .Modelle.Modell.t_Lieferanten["Lieferanten_Name", y] LieferantType := .Modelle.Modell.t_Lieferanten["Lieferanten_Element", y] LieferantCoord := [.Modelle.Modell.t_Lieferanten["X", y], .Modelle.Modell.t_Lieferanten["Y", y], .Modelle.Modell.t_Lieferanten["Z", y]] LieferantEinsteuerung := .Modelle.Modell.t_Lieferanten["Anlieferungsort", y] // Erzeuge neue Station LieferantObject := str_to_obj(".Materialfluss." + to_str(LieferantType)) // Identify Class in Class Library LieferantObject.duplizieren(.Modelle.SimulationModell, LieferantName) // Create duplicate LieferantObject := str_to_obj(".Modelle.SimulationModell." + to_str(LieferantName)) // Identify derived object LieferantObject.Koordinate3D := LieferantCoord // Move derived object //Erzeuge/setze Attribute LieferantObject.setzeAttribut("BEAuswahl", "Reihenfolge zyklisch") LieferantObject.setzeAttribut("Pfad", ".Modelle.Modell.t_BEs_objekte") LieferantObject.erzeugeAttr("BeiAusgang", "method") LieferantObject.setzeAttribut("AusSt", "self.BeiAusgang") LieferantObject.&BeiAusgang.program := "@.umlagern(LieferantEinsteuerung)" next
Hier würde ich nun gerne anstatt dass LieferantEinsteuerung in den ProgramCode übertragen wird, den Wert für LieferantEinsteuerung übergeben. Ich habe bspw. für Lieferant1 den Anlieferungsort Lager, für Lieferant2 die Station VoMo1 usw. Dies ist so in der Excel Tabelle hinterlegt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 16. Jul. 2020 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für Julian2408
Zitat: Hier würde ich nun gerne anstatt dass LieferantEinsteuerung in den ProgramCode übertragen wird, den Wert für LieferantEinsteuerung übergeben.
Das verstehe ich nicht. dein Code mal grob kommentiert Code: ...//n.r. ist ehe eine Dialog wo der Speicherort gewählt wird //Daten aus Excel einlesen t_Lieferanten.readExcelFile("C:...\Simulationsdaten.xlsx","Lieferanten") //n.r. speichere am Besten dies in Tabelle ab. Weil dann kann der Nutzer nachvollziehen was für Daten gelesen werden. Und Feedback, dass Syntax und Semantik in Excel ok ist, wäre schön //n.r. ehe mit root und curent arbeiten. Wenn Modell nicht mehr Modell ist, dann funktioniert es nicht mehr :-D // Für jeden Lieferant in Tabelle for y := 1 to .Modelle.Modell.t_Lieferanten.YDim //n.r. Error Logst mit einplanen Was für Daten sind MustHave und welche nur Need... // Lese Name, Typ, Koordinaten LieferantName := .Modelle.Modell.t_Lieferanten["Lieferanten_Name", y] LieferantType := .Modelle.Modell.t_Lieferanten["Lieferanten_Element", y] LieferantCoord := [.Modelle.Modell.t_Lieferanten["X", y], .Modelle.Modell.t_Lieferanten["Y", y], .Modelle.Modell.t_Lieferanten["Z", y]] LieferantEinsteuerung := .Modelle.Modell.t_Lieferanten["Anlieferungsort", y] //n.r. eglische Version hat andere Bezeichnungen in Bibliothek als die Deutsche...Objekte und Methode in Ordner--> und alles in die Klassenbibliothek // Erzeuge neue Station LieferantObject := str_to_obj(".Materialfluss." + to_str(LieferantType)) // Identify Class in Class Library LieferantObject.duplizieren(.Modelle.SimulationModell, LieferantName) // Create duplicate LieferantObject := str_to_obj(".Modelle.SimulationModell." + to_str(LieferantName)) // Identify derived object LieferantObject.Koordinate3D := LieferantCoord // Move derived object //n.r. ehe die Logik im System hinterfragen. Wenn immer gleich, dann ist es ein eigenes Objekt für Klassenbibliothek. Wenn Varianz in Setzen der Parameter, dann ehe Objekt mit Tabelle. Werte werden dann aus Tabelle gelesen. Wenn individualität, dann Dialog... Usability für anwender ist immer nice ;-9 //Erzeuge/setze Attribute LieferantObject.setzeAttribut("BEAuswahl", "Reihenfolge zyklisch") LieferantObject.setzeAttribut("Pfad", ".Modelle.Modell.t_BEs_objekte") LieferantObject.erzeugeAttr("BeiAusgang", "method") LieferantObject.setzeAttribut("AusSt", "self.BeiAusgang") LieferantObject.&BeiAusgang.program := "@.umlagern(LieferantEinsteuerung)" next
------------------ 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 |
Julian2408 Mitglied
Beiträge: 26 Registriert: 09.07.2020
|
erstellt am: 16. Jul. 2020 17:01 <-- editieren / zitieren --> Unities abgeben:
Danke für die Mühe Nochmals zu meinem Problem:
Ich übergebe ja aus meiner Tabelle den Anlieferungsort für die einzelnen Quellen. Code: LieferantEinsteuerung := .Modelle.Modell.t_Lieferanten["Anlieferungsort", y]
Hier wird also die Spalte Anlieferungsort für die einzelnen Lieferanten ausgelesen und dann in LieferantEinsteuerung übergeben. Beispiel: Lieferant1 hat den Anlieferungsort Lager1 Lieferant2 den Anlieferungsort Vormontage1 Wenn ich nun die Methode so erstelle
Code: LieferantObject.&BeiAusgang.program := "@.umlagern(LieferantEinsteuerung)
wird ja jedoch nicht der aktuelle Wert in der Schleife für LieferantEinsteuerung übertragen (Bsp. für Lieferant 1: Lager1, für Lieferant2: Vormontage1) sondern eben genau diese Bezeichnung LieferantEinsteuerung. Ich hätte jedoch gerne, dass die Methode bei Lieferant1 "BeiAusgang" am Ende das beinhaltet: Code: @.umlagern(Lager1)
bei Lieferant2 das: Code: @.umlagern(Vormontage1)
usw. aktuell wird es jedoch so übertragen: Code: @.umlagern(LieferantEinsteuerung)
in sämtliche Quellen (Lieferant1, 2, ....). Hoffe das war so verständlich Vielleicht mach ich das ganze auch einfach zu kompliziert, aber bin ja gerade erst dabei mich näher mit Plant Simulation zu beschäftigen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 17. Jul. 2020 13:35 <-- editieren / zitieren --> Unities abgeben: Nur für Julian2408
Beispiel für SimTalk integriert Code: ...:= "@.umlagern("+ LieferantEinsteuerung+ ")"
Beispiel für SimTalk extern String Laden und manipulieren:
Code: ...:= regex_replace("@.umlagern(%Pr9%)","%Pr9%",DeineDatenTabelle[x,y])
Beispiel für Integration der Daten mittels Einbindung der Haupttabelle:
Code: ...:= "@.umlagern(str_to_obj("+ to_str(DeineDatenTabelle) + "["+ to_str(x) + "," + to_str(y) + "]" + "))"
usw. Syntax und Semantik auf Basis der Daten, Anforderung und Literatur erarbeiten und definieren. Und dies dann konsequent im Modellierungsprozess einheiten.
------------------ 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 |
Julian2408 Mitglied
Beiträge: 26 Registriert: 09.07.2020
|
erstellt am: 17. Jul. 2020 14:25 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 17. Jul. 2020 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für Julian2408
Zitat: Was bedeutet bzw. macht das %Pr9%? Oder könntest du mir vielleicht kurz in Worten erklären was bei dem zweiten Code genau passiert?
Selbst erarbeiten fördert den Lernprozess ------------------ 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 |
Julian2408 Mitglied
Beiträge: 26 Registriert: 09.07.2020
|
erstellt am: 17. Jul. 2020 15:12 <-- editieren / zitieren --> Unities abgeben:
Das ist vollkommen richtig nur hab ich dazu leider bisher wirklich nirgends etwas gelesen. Hast du denn irgendwelche Literaturempfehlungen zum Thema PlantSimulation/Simtalk? Die Bücher von Steffen Bangsow habe ich und bin ich gerade am durcharbeiten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Julian2408 Mitglied
Beiträge: 26 Registriert: 09.07.2020
|
erstellt am: 17. Jul. 2020 15:15 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|