| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Labels und Channels (688 mal gelesen)
|
loland Mitglied
 Beiträge: 2 Registriert: 17.08.2005
|
erstellt am: 17. Aug. 2005 16:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo allerseits, ich bin Anfänger im simulieren und fände es echt super wenn mir vielleicht jemand einen Tipp geben könnte: Aufgabe: Von einem Server aus sollen 3 verschiedene Schiffstyp-Atome (A,B,C) an 7 Liegeplätze weitergeleitet werden. 2 Liegeplätze sind nur für Typ A, 2 weitere für A und B, sowie 3 weitere für die Typen A,B,C. Jeder Schiffstyp soll natürlich nur zu einem für ihn vorgesehenen Liegeplatz weitergeleitet werden. Problem: Ich habe es mit folgendem If-Satz probiert, leider mit nur wenig Erfolg:
if(=(label([Schiff],i),1),indexmax(7,*(ocready(count,c),random(100000))),(if(=(label([Schiff],i),2),indexmax(5,*(ocready(count,c),random(100000))),indexmax(3,*(ocready(count,c),ran dom(100000)))))) Wenn ich folgenden Satz ins “send to” Feld des Servers einsetze wird leider nur der letzte Teil des Textes (ab dem letzten "indexmax") berücksichtigt. D.h. in diesem Fall werden die Schiffe per „Random“ Funktion an die ersten 3 Channels weitergeleitet. Wahrscheinlich werden die Labels nicht oder falsch gelesen?! Zur weiteren Info: Die Aufgabe ist umfangreicher als oben angegeben. Es werden 3 Labels in den Sources erzeugt. Sie haben alle den Namen "Schiff" und unterscheiden sich durch die values 1-3 um die 3 versch. Schiffstypen darzustellen. Bin für jede Hilfe dankbar!
Viele Grüße loland
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
g.zeller Mitglied Ingenieur

 Beiträge: 21 Registriert: 01.03.2005
|
erstellt am: 21. Aug. 2005 17:47 <-- editieren / zitieren --> Unities abgeben:          Nur für loland
Hallo Loland, Du hast Recht: Offensichtlich hat die Variable "Schiff" nie den Wert 1 oder 2 (vielleicht hast Du einen String verwendet, dann müsste die Vergleichsoperation "comparetext" heißen.) Die Lösung mit der If-Bedingung ist aber auch sehr kompliziert und verschachtelt. Außerdem lässt sie sich nicht so einfach eweitern, wenn z.B. noch eine weitere Schiffsvariante eingeführt werden würde. Random liefert außerdem keine ganze Zahl, die man für die Anweisung im Sendto-Befehl eigentlich braucht (alles andere ist unsauber) Mein Vorschlag: Arbeite mit einer "Case-Anweisung", der zugehörige Fall ergibt sich aus einer "inlist"-Anweisung. Darin kann für jede Schiffsvariante eine eigene Anweisung geschrieben werden. Die zweite Frage nach der erweiterten Namensgebung kann ich auch gleich beantwortet: Man muss auch hier zwischen String und Zahl unterscheiden, am Besten, man wertet den Wert der Variablen "Schiff" gleich als String aus. Die Unterscheidung der Fälle sieht also folgendermaßen aus: case( inlist(ddb([schiff],first(c),2),[schiff_1],[schiff_2],[schiff_3]) +1, Anweisung Fall 1 = unbekannnter Schiffsname, Anweisung Fall 2 = Schiff 1, Anweisung Fall 3 = Schiff 2, Anweisung Fall 4 = Schiff 3, ) Die genaue Anweisungen für die einzelnen Fälle sind in der Syntax ein bisschen komplizierter, ich habe deshalb das Modell angehängt. (Bitte bei dem Dateinahmen die extension .txt wieder löschen.) Bitte darauf achten, daß bei der Sendto-Anweisung auf das Produkt mit "First(c)" referenziert werden muss. Das Modell kann mit der Demoversion von ED geladen werden, die auf der Seite www.indusim.de zu finden ist. Natürlich könnte man noch wesentlich kompliziertere Fälle mit Hife einer Matrix etc abbilden, in der nicht mehr für jeden Schiffsnamen eine eigene Anweisung notwendig ist, ich denke aber, in diesem Fall ist die vorgeschlagene Lösung einfacher. Ich hoffe, das Problem soweit gelöst zu haben, viel Spaß mit der Auswertung, Georg Zeller Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loland Mitglied
 Beiträge: 2 Registriert: 17.08.2005
|
erstellt am: 22. Aug. 2005 16:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo G.Zeller, vielen Dank für die Hilfe. Echt toll dass es Leute wie Dich gibt! Die Lösung ist echt professionell. Ich habe in der Zwischenzeit weiter an meinem If-Satz gearbeitet und bin auch dort zu einer Lösung gekommen - sieht folgendermaßen aus: if((ddb([Schiff],rank(1,c)))=1, indexmax(7,*(ocready(count,c),random(100000))),(if(ddb([Schiff],rank(1,c))=2, indexmax(5,*(ocready(count,c),random(100000))) , indexmax(3,*(ocready(count,c),random(100000)))))) Also vielen Dank und Grüße loland
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |