Autor
|
Thema: Zufallszahlen (random) in der eMPlant Programmierung (3883 mal gelesen)
|
martin_guth Mitglied Student
Beiträge: 2 Registriert: 09.06.2006 Intel Pentium Centrino 1.7 Ghz, 1GB RAM, eMPlant 7.0.6 mit Education License
|
erstellt am: 09. Jun. 2006 18:42 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin leider ein ziemlicher Novize was die eMPlant Programmierung angeht. Ich benutze eMPlant 7.0.6 als Educational Version und arbeite daran, ein Pullprinzip mit Kanban zwischen zwei Unternehmen zu simulieren. Dabei möchte ich aus einem Lager, in welches das eine Unternehmen push reinproduziert, je nach Bestellmenge n Elemente in ein Zwischenlager des anderen Unternehmens umlagern. Ich hatte mir überlegt, für die Bestellmenge eine Zufallszahl zu nehmen. Optimal wäre es wenn ich anschließend auf diese Zufallszahl noch eine Modulodivision anwenden könnte, um das Resultat in einem gewissen Korridor zu halten. Ich habe es bereits mit der Funktion wuerfeln versucht, jedoch hat sich eMPlant hier immer wieder geweigert das Resultat einer Integervariablen zuzuweisen. Wie kann ich nun eine Zufallszahl generieren, diese mit einer Modulodivision normieren und dann noch einer Integervariablen zuweisen? Zweites Problem: Wie kann ich diese Variable dann in eMPlant im Netzwek anzeigen lassen? Ich habe es schon mit dem Baustein "Variable" versucht aber da tat sich dann leider nix. Vielen Dank im Voraus für eure Hilfe Martin Anlage: Mein Programmcode
Code: is -- Bereitstellen der Variablen i, j, iBestellungen : Integer; -- Bereitstellen der Objekte oEndlager, oKanbanIn, oEinzel : Object; do -- Objekte werden zugewiesen. Dies dient der erleichterten Lesbarkeit im Quellcode. oEndlager := .Modelle.SAPOrg.SAPOrg.Endlager.Lager; oKanbanIn := .Modelle.SAPOrg.SAPOrg.Zwischenlager.pTransport; oEinzel := .Modelle.SAPOrg.SAPOrg.Endlager.Einzelstation; --Zufallszahlbestellungen iBestellungen :=oEinzel.BearbeitungsZeit.wuerfeln; --iBestellungen:= 3; -- Anzahl der im Teillager gefundenen Teile umlagern (von 1 bis Anzahl der gefundenen Teile) for i:=1 to oEndlager.AnzahlBEs loop if oKanbanIn.bereit=true then oEndlager.BE.umlagern(oKanbanIn); end; next; end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LoggaRhythmus Mitglied Student an der HFU
Beiträge: 14 Registriert: 04.12.2005
|
erstellt am: 09. Jun. 2006 20:34 <-- editieren / zitieren --> Unities abgeben: Nur für martin_guth
Hi Martin, zu deinem ersten Problem: Mein Vorschlag wäre hier z. B. die Zufallswerte über die (Normal-) Verteilungsfunktion z_normal(s,Mu,Sigma) zu erzeugen (-> z.B. iBestellung := z_normal(1, 200, 10); Hilfe hierzu gibt es in eM-Plant selbst). So könntest du deine Werte in einem gewissen Bereich halten. Damit würde sich dann dein zweites Problem lösen (Variable := iBestellmenge; oder Ausgabe auf der Konsole: print iBestellmenge; ). MfG LoggaRhythmus ------------------ ohje... ohje, ohje! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
martin_guth Mitglied Student
Beiträge: 2 Registriert: 09.06.2006 Intel Pentium Centrino 1.7 Ghz, 1GB RAM, eMPlant 7.0.6 mit Education License
|
erstellt am: 16. Jun. 2006 16:48 <-- editieren / zitieren --> Unities abgeben:
Hi LoggaRythmus und andere, das erste Problem hat sich gelöst. Leider sind nun zwei weitere aufgetreten: 1.) Ich habe jetzt meinen Code angepasst, dass mir Zufallszahlen berechnet und normalverteilt werden.Nun möchte ich in einer Schleife alle bestellten BEs auslagern (sofern vorhanden). Ansonsten lager ich halt alle BEs aus, die im Lager drin sind. Problem: Ich kriege einen Fehler für die Zeile 21 [oEndlager.BE.umlagern(oKanbanIn);]: Ein VOID kann keine Methode 'umlagern' empfangen. Wieso funktioniert dieser Befehl in Zeile 28, nicht jedoch in Zeile 21?? Ich lager beides mal BEs aus...das eine Mal in ner Schleife bis zu einem Integer bestellungen (das geht nicht), und das andere Mal in ner Schleife bis zu oEndlager.AnzahlBEs (AnzahlBEs liefert aber auch einen Integer zurück). Code:
1 is 2 -- Bereitstellen der Variablen 3 i, j, Bestellmenge, Mu, Sigma, s : Integer; 4 -- Bereitstellen der Objekte 5 oEndlager, oKanbanIn, oEinzel : Object; 6 do 7 -- Objekte werden zugewiesen. Dies dient der erleichterten Lesbarkeit im Quellcode. 8 oEndlager := .Modelle.SAPOrg.SAPOrg.Endlager.Lager; 9 oKanbanIn := .Modelle.SAPOrg.SAPOrg.Zwischenlager.pTransport; 10 Mu := 200;-- Wert für Mü bei der Normalverteilung 11 Sigma := 15; -- Wert für Sigma bei der Normalverteilung 12 s := 32; --Zufallszahlenstrom 13 --Zufallszahl für Bestellmenge 14 Bestellmenge := z_normal(s,Mu,Sigma); 15 print Bestellmenge; 16 -- Anzahl der im Teillager gefundenen Teile umlagern (von 1 bis Anzahl der gefundenen Teile) 17 18 if oEndlager.AnzahlBEs<=Bestellmenge then 19 for i:=1 to Bestellmenge loop 20 if oKanbanIn.bereit=true then 21 oEndlager.BE.umlagern(oKanbanIn); 22 end; 23 next; 24 else 25 print "Es können nur" +oEndlager.AnzahlBEs +"Schränke geliefert werden. Angefordert waren " +Bestellmenge +"Schränke"; 26 for i:=1 to oEndlager.AnzahlBEs loop 27 if oKanbanIn.bereit=true then 28 oEndlager.BE.umlagern(oKanbanIn); 29 end; 30 next; 31 end; 32 end;
2.) Die o.g. Methode wird durch einen Generator in einem Abstand von 15 Tagen ausgelöst (alle 15 Tage geht eine Bestellung ein und es soll umgelagert werden). Das Lager im Modell wird durch vorgelagerte Produktionsschritte wie auch durch fertige Teile aus einer Quelle bestückt. Es enthält nur eine Teileart. Die fertigen Teile sollen einen Anfangsbestand simulieren und kommen einmal initial aus einer Quelle heraus ins Lager. Nun geschieht folgendes: alle Teile aus der Produktion werden im Lager gesammelt und zum jeweiligen Termin ausgelagert (as it should be); die Fertigteile aus der Quelle aber werden sofort ratzfatz ausgelagert. Wieso? Schon mal danke für eure Hilfe Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Elektriker im Wechselschichtdienst (m/w/d) | Als modernes und zukunftsgerichtetes Unternehmen tragen wir Verantwortung für die Region und haben den Anspruch, den Menschen vor Ort eine hervorragende Lebensqualität zu ermöglichen. Dafür setzen sich rund 1.700 Mitarbeitende mit viel Energie und Engagement ein. Als moderner Dienstleister gestalten wir die Energie- und Mobilitätswende mit und machen uns stark für Nachhaltigkeit. Wir investieren ... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
LoggaRhythmus Mitglied Student an der HFU
Beiträge: 14 Registriert: 04.12.2005
|
erstellt am: 16. Jun. 2006 18:56 <-- editieren / zitieren --> Unities abgeben: Nur für martin_guth
Hi, zu 1.) Ist jetzt erst einmal nur ein Tipp, aber sollte es in Zeile 18 nicht heißen: 18 if oEndlager.AnzahlBEs>=Bestellmenge then Also den Vergleichsoperator auf "größer-gleich" anpassen, da du davon ausgehst, dass du dort die bestellte Menge liefern kannst? Ansonsten könntest du auch jeweils mit einem if oEndlager.leer then ... end; auf ein leeres Lager reagieren und somit die Fehlermeldung für die Zeile 21 [oEndlager.BE.umlagern(oKanbanIn);]: Ein VOID kann keine Methode 'umlagern' empfangen vermeiden. Zu 2.) Wäre nett, wenn du dein Problem hier noch etwas genauer schildern könntest. Kommen die Fertigteile auch in ein Lager, oder auf einen Baustein, der von sich aus "umlagert"? MfG LoggaRhythmus
------------------ ohje... ohje, ohje! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|