Autor
|
Thema: Bearbeitungszeit für versch. BEs und versch. Stationen aus einer Tabelle auslesen (1847 mal gelesen)
|
alexandra123 Mitglied
Beiträge: 21 Registriert: 06.08.2020
|
erstellt am: 06. Aug. 2020 15:34 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin noch Anfänger in Plant Simulation und stehe gerade vor einem kleinen Problem, bei dem ich einfach nicht weiterkomme. Ich habe verschiedene BEs, die die einzelnen Stationen durchlaufen. Diese BEs sollen je nach Station verschiedene Bearbeitungszeiten haben (Bsp. siehe Bild anbei). Nun würde ich gerne mit Hilfe einer Methode diese Tabelle auslesen. Ich habe zunächst versucht das ganze mit Liste(Typ) zu lösen, aber so wie ich das verstanden habe, hier würde ich dann für jede einzelne Station eine eigene Tabelle benötigen. Dies würde das ganze Modell jedoch sehr unübersichtlich machen, weshalb ich dachte, dass es doch auch mit einer Tabelle funktionieren muss. Gedacht hatte ich es so, dass ich in den einzelnen Stationen (VoMo1, Endmontage....) unter Bearbeitungszeit "Formel" auswähle, hier eine Methode angebe und diese dann den entsprechenden Wert aus der Tabelle abliest. (Beispiel: In Station Endmontage für BE Teil2 dann die Bearbeitungszeit 5 min auswählt --> siehe Anhang). Ist das so prinzipiell machbar? Ich habe hier auch schon im Forum nachgelesen, jedoch bisher keine Lösung gefunden. Wie müsste denn hierfür die Methode aussehen? Weitere Frage: Wie im Bild zu sehen sind die Spalten 2+ als integer angegeben. Die Tabelle lese ich aus SGLite aus, hier sind die Spalten jedoch eigentlich als time hinterlegt. Warum ist das so und kann ich das irgendwie mit Hilfe der Methode verändern? So lese ich die Tabelle aus SQLite aus: Code: var pSelectStmt : stringt_Bearbeitungszeiten.erbeInhalt := true t_Bearbeitungszeiten.erbeInhalt := false pSelectStmt := "select * from Bearbeitungszeiten" MeinSQLite.sql(t_Bearbeitungszeiten, pSelectStmt)
Ich hoffe das war so verständlich Über Lösungsvorschläge würde ich mich sehr freuen! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Aug. 2020 15:54 <-- editieren / zitieren --> Unities abgeben: Nur für alexandra123
|
alexandra123 Mitglied
Beiträge: 21 Registriert: 06.08.2020
|
erstellt am: 06. Aug. 2020 18:19 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antwort. Die Lösung habe ich auch zuvor schon gesehen, jedoch kann ich damit bisher nicht so viel anfangen. Anbei nochmal ein Screenshot. Das @ verweist ja auf das BE, das die Methode auslöst. Mit @.name kann ich ja dann einfach die Bezeichnung des BEs auslesen. Das ? gibt mir quasi den Pfad für die Station, die die Methode aufruft an. Mit ?.name kann ich dann einfach nur auf den Namen der Station zugreifen. Ich denke mal bis dahin ist richtig, weil das auch so auf dem Bild dargestellt. Wo liegt nun das Problem in meiner Methode? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Aug. 2020 19:07 <-- editieren / zitieren --> Unities abgeben: Nur für alexandra123
Info über Fehler steht unten in Methode. Hier: "Index existiert nicht". Ursache: Produkt steht nicht in Index. ------------------ 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: 938 Registriert: 29.03.2016
|
erstellt am: 07. Aug. 2020 01:36 <-- editieren / zitieren --> Unities abgeben: Nur für alexandra123
zu (2): Zitat: Wie im Bild zu sehen sind die Spalten 2+ als integer angegeben [...] als time hinterlegt. Warum ist das so [...]
grad mal geprüft. Bei mir V15 ist Format Time in SQLite immer noch String. Bildchen ist angehängt. Type Time in SQLite --> String Type Int in SQLite --> Integer
Zitat: [...] kann ich das irgendwie mit Hilfe der Methode verändern?
Time ist eig. in Integer praktikabler. Wenns doch unbedingt time sein muss; Format von der Spalte Ändern in der Tabelle sollte helfen. 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 |
alexandra123 Mitglied
Beiträge: 21 Registriert: 06.08.2020
|
erstellt am: 07. Aug. 2020 10:00 <-- editieren / zitieren --> Unities abgeben:
Danke dir für die Mühe! Das hat mich jetzt zu folgenden Problemen geführt: 1. Ich habe jetzt manuell den Zeilenindex eingefügt und die Daten manuell kopiert. Wenn ich das mache funktioniert es, wenn ich zudem in der Tabelle die Spalten integer zu time verändere. --> Wenn ich in meiner Tabelle also schon im leeren Zustand Spalten- und Zeilenindex aktiviere und dann die Daten aus SQLite importiere, bleibt der Zeilenindex (1. Spalte) jedoch nun leer. Wie kann ich das ändern?
Code: var pSelectStmt : string pSelectStmt := "select * from Bearbeitungszeiten" MeinSQLite.sql(t_Bearbeitungszeiten, pSelectStmt)
2. Nachdem ich das Ganze manuell angepasst habe, habe ich die Simulation laufen lassen, es hat auch die richtige Zelle aus der Tabelle ausgelesen, jedoch stimmt wohl etwas mit meiner Methode nicht. Code: var Station: string := ?.name var TeileTyp: string := @.name?.Bearbeitungszeit := root.t_Bearbeitungszeiten[Station, TeileTyp]
Dadurch wird nachdem ein Teil durchgelaufen ist, die Bearbeitungszeit konstant auf den Wert in der Tabelle gesetzt. Hier weiß ich gerade nicht wie ich den Wert aus der Tabelle nun übertragen muss, sodass trotzdem bei nächsten Teil die Methode wieder aufgerufen wird. [Diese Nachricht wurde von alexandra123 am 07. Aug. 2020 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: 07. Aug. 2020 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für alexandra123
(1) Zitat: Wenn ich in meiner Tabelle also schon im leeren Zustand Spalten- und Zeilenindex aktiviere und dann die Daten aus SQLite importiere, bleibt der Zeilenindex (1. Spalte) jedoch nun leer
Zeilenindex ist eig 0. Spalte. Probier mal eine Sql-Abfrage ohne "*" (also mal zwei Spalten aus * Abfragen). (2) Formel haben return! Formel geben den zu verwendeten Wert zurück.
------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) [Diese Nachricht wurde von nadin1223 am 07. Aug. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
alexandra123 Mitglied
Beiträge: 21 Registriert: 06.08.2020
|
erstellt am: 07. Aug. 2020 14:42 <-- editieren / zitieren --> Unities abgeben:
(1) Ich habe die SQL-Abfrage mal ausprobiert (mit nur zwei Spalten abfragen) aber auch hier leider das gleiche Problem, dass der Zeilenindex (Spalte 0) leer bleibt. (2) Irgendwie bekomme ich diesen return Befehl gerafe einfach nicht hin Code: var Station: string := ?.name var TeileTyp: string := @.name var Bearbeitungszeit: timeBearbeitungszeit := root.t_Bearbeitungszeiten[Station, TeileTyp] return Bearbeitungszeit
--> Syntaxfehler aber ich weiß grad nicht warum.....wie muss ich denn den return Ausdruck machen?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 07. Aug. 2020 20:09 <-- editieren / zitieren --> Unities abgeben: Nur für alexandra123
zu meinem Vorschlag für (1) sollte eig. dazu führen, dass der Spaltenindex auch nicht mehr angezeigt wird... so nun zu (1): SQL speichert die Daten in Tabellen. Diese Tabelle haben Column mit Namen. Es ist eindeutig und immer da. Für SQL ist der Zeilenindex i.d.r. Primary Key. Dieser muss nicht immer gesetzt sein bzw. wird auch immer ausgegeben. Deshalb bleibt der Zeilenindex leer. Um Tabelle jetzt mit .sql zu befüllen (kurze Tabelleninhalte aus sql in Tabelle schreiben) beispielsweise mithilfe einer zwischenspeicherung: Code:
var _table : table _table.create; ... sqllite.sql(_table,""); ... _table.kopiereBereichnach(...)
anderer Ansatz, wäre über .step zu gehen oder ein weiterer nach .sql den Inhalt der Spalte mit .kopiereBereichnach() in Zeilenindex einfügen. Direkter Weg, wie ein Zeilenindex mittels .sql()-Befehls befüllt werden kann, ist mir leider nicht bekannt. ---------------------------------------- zu (2)
Code:
-> integer //das ist, was die Methode übergibt ..... return 1 // das ist, wo die Methode übergibt
------------------ 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 |
alexandra123 Mitglied
Beiträge: 21 Registriert: 06.08.2020
|
erstellt am: 10. Aug. 2020 14:26 <-- editieren / zitieren --> Unities abgeben:
also (1) habe ich jetzt so gelöst: Zitat: oder ein weiterer nach .sql den Inhalt der Spalte mit .kopiereBereichnach() in Zeilenindex einfügen.
das hat geklappt :) zu (2).... Das vesetehe ich irgendwie nicht so ganz, obwohl es glaube ich ganz einfach ist. Zitat:
-> integer //das ist, was die Methode übergibt ..... return 1 // das ist, wo die Methode übergibt
Weiß nicht so ganz was ich damit anfangen soll Könntest du mir das vielleicht nochmal an meinem Beispiel erklären? Egal wie ich es probiere, bekomme ich immer die Meldung "Der Quellcode enthält einen Syntaxfehler". Eigentlich will ich ja nur, dass die aus der Tabelle ausgelesene Bearbeitungszeit dann ausgegeben/übertragen wird auf die Station. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 10. Aug. 2020 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für alexandra123
wie hast du die Methode eingebunden? mach auch ein Bild von dem Code deiner Methode... ------------------ 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 |
alexandra123 Mitglied
Beiträge: 21 Registriert: 06.08.2020
|
erstellt am: 14. Aug. 2020 09:13 <-- editieren / zitieren --> Unities abgeben:
Anbei ein Screenshot mit den 2 Tabellen, der Station und der dazugehörigen Methode. Die Tabelle t_Bearbeitungszeiten dient nur als Zwischenspeicher (wie oben besprochen). Es funktioniert soweit auch alles, jetzt muss nur noch die Bearbeitungszeit auch übernommen werden. [Diese Nachricht wurde von alexandra123 am 14. Aug. 2020 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: 14. Aug. 2020 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für alexandra123
Der Bearbeitungszeit ist es egal, ob integer oder time. Als Integer sind es halt die Sekunden. Deine var Bearbeitungszeit ist integer, wobei die Konvertierung von Integer auf time und umgekehrt automatisch geht...
Code:
-> integer //-> time geht auch //weil var Bearbietungszeit : integer Bearbeitungszeit:= root.t_bearb2[stat, teil]; //hier wird time zu integer return Bearbeitungszeit
Es wundert mich, dass ~.Modell.BearbeitungszeitAbfragen die Methode findet, weil eig. ~ der Standort ist... root ist der Standort, wo der Ereignisverwalter ist... und einwenig verwundert mich der Einsatz einer Montagestation (mit einem Eingang)... Es kann auch gut sein, dass ich die Struktur nicht ganzheitlich verstehe für das Probieren mit direkter Adressierung in VoMo1 in Bearbeitungszeit die Adresse für Mothode: ".Modelle.Modell.BearbeitungszeitAbfragen"
Code:
->time return .Modelle.Modell.t_Bearb2[?.name,@.name]
------------------ 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 |
alexandra123 Mitglied
Beiträge: 21 Registriert: 06.08.2020
|
erstellt am: 14. Aug. 2020 15:23 <-- editieren / zitieren --> Unities abgeben:
Ich bekomme bei dieser Methode mit return immer einen Syntaxfehler angezeigt aber verstehe einfach nicht warum. Habe es jetzt auch wie du versucht, jedoch zeigt es mir dann auch "Der Quellcode enthält Syntaxfehler." an. Code: return .Modelle.Modell.t_Bearb2[?.name,@.name]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 14. Aug. 2020 15:55 <-- editieren / zitieren --> Unities abgeben: Nur für alexandra123
-> time //das ist die erste Zeile in der methode ------------------ 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 |
alexandra123 Mitglied
Beiträge: 21 Registriert: 06.08.2020
|
erstellt am: 14. Aug. 2020 16:19 <-- editieren / zitieren --> Unities abgeben:
|