Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Zufallszahlen (random) in der eMPlant Programmierung

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Zufallszahlen (random) in der eMPlant Programmierung (3883 mal gelesen)
martin_guth
Mitglied
Student

Sehen Sie sich das Profil von martin_guth an!   Senden Sie eine Private Message an martin_guth  Schreiben Sie einen Gästebucheintrag für martin_guth

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von LoggaRhythmus an!   Senden Sie eine Private Message an LoggaRhythmus  Schreiben Sie einen Gästebucheintrag für LoggaRhythmus

Beiträge: 14
Registriert: 04.12.2005

erstellt am: 09. Jun. 2006 20:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für martin_guth 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von martin_guth an!   Senden Sie eine Private Message an martin_guth  Schreiben Sie einen Gästebucheintrag für martin_guth

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 ansehenElektrotechnik, Elektronik
LoggaRhythmus
Mitglied
Student an der HFU


Sehen Sie sich das Profil von LoggaRhythmus an!   Senden Sie eine Private Message an LoggaRhythmus  Schreiben Sie einen Gästebucheintrag für LoggaRhythmus

Beiträge: 14
Registriert: 04.12.2005

erstellt am: 16. Jun. 2006 18:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für martin_guth 10 Unities + Antwort hilfreich

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz