Autor
|
Thema: Objekte erzeugen und mit Variable bennen (1158 mal gelesen)
|
Janine93 Mitglied Studentin
Beiträge: 21 Registriert: 05.03.2021 Ich nutze Plant Simulation 12
|
erstellt am: 18. Apr. 2021 16:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadin, ich mal wieder... Ich möchte, wie du dich vllt noch erinnern kannst, ein Lager anhand einer Parametereingabe erzeugen. Dazu erzeuge ich Teilstücke und möchte diese aufsteigend benennen. Nun weiß ich nicht wie ich diese Variable "i" richtig an den Namen anhängen kann, sodass sie mit hochgezählt wird. Geht das irgendwie? Code:
For var i := 1 to 10 var LT : object := .Benutzerobjekte.Lagerteilstück.duplizieren(.Modelle.Modell, "LT"_i) LT_i.setzePosition(100,100) i := i+1 next
Danke schon einmal für die Hilfe! LG Janine Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 19. Apr. 2021 19:11 <-- editieren / zitieren --> Unities abgeben: Nur für Janine93
mal Code kommentiert Code:
For var i := 1 to 10 //Nur deutsche Klassenbibliothek besitzt "Benutzerobjekte". (TIPP: eigenen Ordner mit eigenen Namen verwenden) var LT : object := .Benutzerobjekte.Lagerteilstück.duplizieren(.Modelle.Modell, "LT"+i) //Strings verketten geht beispielsweise mit + LT.setzePosition(100,100) //die Position des Objectes wird gesetzt, LT_1 ist Name und von Typ String //i := i+1 //sowas niemals in einer For-Schleife machen. Dies macht die For-Schleife selbst!!! 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 |
Janine93 Mitglied Studentin
Beiträge: 21 Registriert: 05.03.2021 Ich nutze Plant Simulation 12
|
erstellt am: 21. Apr. 2021 10:01 <-- editieren / zitieren --> Unities abgeben:
Super das klappt wunderbar, danke sehr! Und den Tipp mit den Benutzobjekten bzw besser einen eigenen Ordner anzulegen ebenfalls! Jetzt würde ich gerne auf Knopfdruck alle Teilstücke wieder aus meinem Modell löschen. Die Teilstücke sind wie folgt benannt: LTj_i (also LT1_1, LT1_2, LT1_3, ... LT4_5, usw.) Mein Code funktioniert leider nicht, was abzusehen war... ich weiß allerdings auch keine andere Lösung. Das Objekt aus der Klassenbibliothek löschen ist keine Option. Gibt es da eine andere Möglichkeit?
Code: For var j := 1 to Regalanzahl For var i:= 1 to Lagerplatzanzahl_pro_Regal .Modelle.Modell."LT"+j+"_"+i.delete.object next next
Das gleiche Problem habe ich, wenn ich Kanten zwischen zwei Teilstücken erstellen will. Den Aufbau eines Teilstücks hab ich mal als Bild hochgeladen.
Code: //Regale erstellen For var j:= 1 to Regalanzahl For var i := 1 to Lagerplatzanzahl_pro_Regal var LT : object := .Tool.Bausteine.Lagerteilstück.duplizieren(.Modelle.Modell, "LT"+j+"_"+i) LT.setzePosition(400*j,(180*Lagerplatzanzahl_pro_Regal)-(180*(i-1))) next For var i:=1 to Lagerplatzanzahl_pro_Regal var ki_j_a := .Materialfluss.Kante.verbinden(.Modelle.Modell.LTj_i.Übergang1, LTj_i+2_Eingang) var kj_i_b := .Materialfluss.Kante.verbinden(.Modelle.Modell.LTj_i+2.Ausgang, LTj_i_Übergang) next next
[Diese Nachricht wurde von Janine93 am 21. Apr. 2021 editiert.] [Diese Nachricht wurde von Janine93 am 21. Apr. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 21. Apr. 2021 20:43 <-- editieren / zitieren --> Unities abgeben: Nur für Janine93
Zitat: Jetzt würde ich gerne auf Knopfdruck alle Teilstücke wieder aus meinem Modell löschen.
Beispielsweise in einer For-downto-Schleife die Objekte im Netzwerk durchgehen, den Ursprung oder InternalClassName von Objekt prüfen und wenn passen dann löschen. ----------- zu Kante: Kanten werden zwischen Objekten also any-Typ gesetzt. Das ist kein String. ".Modelle.Modell.LTj_i.Übergang1" das ist nicht dein Objekt! Programmierung interpretiert LTj_i als einen Objekt-Name, der nicht existiert! Dein Objekt ist einmal "var LT : object". Zum verbinden brauchst du zwei Objekte. Also musst du noch ein "var LT_Connect: object" (irrgendwo in For-Schleife) wird dies gemerkt, wenn bedingung SoUndSo dann Verbinde(LT,LT_Connect)... TIPP: Kante nicht unbedingt separat in extra For-Schleife, dann hast du auch die zwei Objekte. Wenn es net klappt mit dem Umbau der For-Schleife, kannst auch die erzeugten Objekte in einer Tabelle als Verweis ablegen. (Tabellen sind auch hifreich bei Steuerung-Strategien wie auch Löschen von Objekten) ------------ TIPP: Im Kleinen dein Lager so wie du es brauchst manuel aufbauen und testen (Verifikation-Test). Dass es auch so funktioniert, wie du es dir vorstellst und du eine Vergleichsreferenz zum späteren Veri-Test hast. ------------------ 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 |
Janine93 Mitglied Studentin
Beiträge: 21 Registriert: 05.03.2021 Ich nutze Plant Simulation 12
|
erstellt am: 24. Apr. 2021 16:41 <-- editieren / zitieren --> Unities abgeben:
Liebe Nadin, vielen Dank für deine stets hilfreichen und kompetenten Antworten! In der Theorie habe ich es verstanden, in der Praxis habe ich gerade ein Problem, aber auch schon mit dem Erstellen und Benennen der Lagerteilstücke. Ich musste leider von PlantSim 16 auf Version 12 wechseln (weil ich eine Lizenz vom Lehrstuhl bekommen habe). Soweit so gut, habe mich mittlerweile eigentlich gut an die Unterschiede in der Programmierung gewöhnt. Allerdings funktioniert folgender Code, der in Plantsim 16 einwandfrei funktioniert hat (natürlich in 2.0 geschrieben) hier nicht:
Code: is j : integer; i : integer; LT : object; do For j:= 1 to Regalanzahl loop For i := 1 to Lagerplatzanzahl_pro_Regal loop LT := .Modelle.Lagerteilstück.duplizieren(.Modelle.Tool, "LT"+j+"_"+i); LT.setzePosition(400*j,(180*Lagerplatzanzahl_pro_Regal)-(180*(i-1))); next; next; end;
Fehlermeldung kommt bei der Zeile: LT := .Modelle.Lagerteilstück.duplizieren(.Modelle.Tool, "LT"+j+"_"+i); "Die Datentypen der Operanden sind nicht kompatibel" Kannst du mir sagen wo der Fehler liegt? Die Lagerteilstücke verbinde ich übrigens wie folgt:
Code: is j : integer; i : integer; LT : object; LT_Connect : object; do For j:= 1 to Regalanzahl loop For i := 1 to Lagerplatzanzahl_pro_Regal loop LT := .Modelle.Lagerteilstück.duplizieren(.Modelle.Tool, "LT"+j+"_"+i); LT.setzePosition(400*j,(180*Lagerplatzanzahl_pro_Regal)-(180*(i-1))); Layouttabelle.schreibeZeile(j, i, "LT"+j+"_"+i); LT_Connect := .Modelle.Tool.Lagerteilstück("LT"+j+"_"+i-1); If i > 1 then .Materialfluss.Kante.verbinden(LT, LT_Connect); end; next; next; end;
wobei natürlich auch das nicht funktioniert wegen der oben genannten Fehlermeldung. Ich danke für deine stetige und schnelle Hilfe! LG Janine
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 25. Apr. 2021 20:49 <-- editieren / zitieren --> Unities abgeben: Nur für Janine93
Zitat: Fehlermeldung kommt bei der Zeile: LT := .Modelle.Lagerteilstück.duplizieren(.Modelle.Tool, "LT"+j+"_"+i); "Die Datentypen der Operanden sind nicht kompatibel"
glaub ab V12.2 sind Formate integer und string ohne zu konvertieren mithilfe + verkettbar. Davor muss es string-Format sein. Also "to_str" ist nötig. Code: LT := .Modelle.Lagerteilstück.duplizieren(.Modelle.Tool, "LT"+to_str(j)+"_"+to_str(i));
------------------ 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 |
Janine93 Mitglied Studentin
Beiträge: 21 Registriert: 05.03.2021 Ich nutze Plant Simulation 12
|
erstellt am: 26. Apr. 2021 12:29 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 27. Apr. 2021 00:15 <-- editieren / zitieren --> Unities abgeben: Nur für Janine93
V12 ist echt laaaange her Duplizieren / Ableiten sind seit ca. V14 gängig. Davor war es "erzeugeObjekt". Allgemein zur Suche nach Attributen. Die Attribute sind alle in der Hilfe recht gut beschrieben... "duplizieren" markieren F1 drücken --> sollte Hilfe für dieses Attribut angezeigt werden. (Wenn net, dann in Hilfe "duplizieren" eintippen). ...und dies sind nur Syntax-Fehler... Die logischen Fehler werden viel interessanter ...
------------------ 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 |
Janine93 Mitglied Studentin
Beiträge: 21 Registriert: 05.03.2021 Ich nutze Plant Simulation 12
|
erstellt am: 27. Apr. 2021 20:56 <-- editieren / zitieren --> Unities abgeben:
haha, das glaube ich dir danke für deine Tipps, es klappt jetzt alles!!! logische Fehler sind auch korrigiert ;P Ich lerne fleißig dazu! Mein Problem bei Attributen ist, dass ich manchmal gar nicht weiß wonach ich suchen muss. Aber ich werde trotzdem jetzt immer mehr die Hilfe nutzen. Danke LG Janine Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 27. Apr. 2021 21:22 <-- editieren / zitieren --> Unities abgeben: Nur für Janine93
Zitat: Mein Problem bei Attributen ist, dass ich manchmal gar nicht weiß wonach ich suchen muss.
jep ist normal und mit der Zeit wird es besser. Auch Fragen sind gut. Es zeigt Interesse am Verstehen des Problems wie auch Eigeninitiative bei der Recherche. Nun ist es mein Hobby, sodass eine Antwort meinerseits Zeit und Lust braucht. Das kann die Hilfe halt manchmal schneller erledigen. Auch trägt es zur Selbstständigkeit bei 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 |
Janine93 Mitglied Studentin
Beiträge: 21 Registriert: 05.03.2021 Ich nutze Plant Simulation 12
|
erstellt am: 28. Apr. 2021 08:04 <-- editieren / zitieren --> Unities abgeben:
|