Reihenfolge per Zufallsgenerator bestimmen

Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst auch versuchen, ein Array 1..7 anzulegen und dieses in jedem Durchgang über _ARRAY_SHUFFLE aus Oscat durcheinanderzuwürfeln. Damit kommst Du eigentlich am Schnellsten zum Ergebnis. Hab ich gerade erst gesehen, daß es diese Funktion gibt...

Richtig....
 
Du kannst auch versuchen, ein Array 1..7 anzulegen und dieses in jedem Durchgang über _ARRAY_SHUFFLE aus Oscat durcheinanderzuwürfeln. Damit kommst Du eigentlich am Schnellsten zum Ergebnis.
Das ist doch genau das, was das Progrämmle in meinem Beitrag tut, allerdings mit einem Array 0..6 und ohne Oscat! Es "shufflet" die 7 Elemente durcheinander, gesteuert durch 2 Zufallszahlen.
Wie man die Zahlen 1..7 den Aktionen A .. G zuordnen könnte (per CASE), das habe ich vorhin nachgereicht.
Da ich nichts über diese Aktionen weiss, habe ich allerdings ziemlich viel offen gelassen.
Je nach dem, was sich hinter den Aktionen A .. G verbirgt, könnte man natürlich ein zweites Array oder eine zweite Dimension oder ein Array of Struct bemühen.
Oder ein array of character, gefüllt mit den Buchstaben A .. G, gründlich durchshufflen.
ABER für das Sortieren sehe ich absolut keinen Anlass! Warum erst Chaos schaffen, nur um es dann wieder fein säuberlich zu ordnen??? :confused:

@Dagobert
Na, sooo aufwändig finde ich das Ermitteln der nächsten Zufallszahl durch 1-mal Multiplikation mit Primzahl 997 und 1-mal MOD 1 auch wieder nicht!
(Dieses Verfahren habe ich übrigens aus einem Büchlein zum hp97 geklaut).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry Heinileini,

hatte mir Deinen Code nicht angesehen :-(

Mein erster Ansatz war ein Anderer: Die Zufallszahl legt die Reihenfolge fest. Daher das Sortieren: Der Buchstabe mit der größten (alternativ kleinsten) Zufallszahl wird zuerst ausgeführt.

Schlußendlich sind wir dann aber wohl beide beim gleichen Vorgehen gelandet... habe eben einen Umweg genommen ;o)

Ich hoffe, Du vergibst mir... :D
 
Hallo,

sorry, wenn ich hier so viel Unruhe stifte...

Ich hatte mich heute morgen an der Version von Heinilein versucht, und bin mal wieder gestrauchelt. Daher meine Fragen dazu.

Dann kam der verlockende übersichtliche Code aus #17, dem ich nicht widerstehen konnte...
Dass ich dort einen Oscat-Baustein brauche, war nicht zu erkennen.
(Ich würde es lieber ohne diesen Baustein machen, bei Oscat habe ich noch nie das gefunden, wonach ich gesucht habe - egal)

Ich würde jetzt gerne die Version von Heinilein bis zum Ende durchziehen, egal wie kompliziert es wird.
Immer wenn ich auf die Nase falle, lerne ich auch was.

Nochmal eine kurze Beschreibung was ich machen möchte:
Einmal am Tag (könnte man durch die Uhrzeit machen) möchte ich die Reihenfolge von 7 Aktionen (A ... G) per Zufall festlegen.
Die erste Aktion wird dann ausgeführt und startet am Ende nach einer Wartezeit die Aktion 2, diese dann 3 usw.
 
Schlußendlich sind wir dann aber wohl beide beim gleichen Vorgehen gelandet... habe eben einen Umweg genommen ;o)
Da gibt es doch nichts zu verzeihen!
Wir beide haben lediglich unterschiedliche Umwege genommen: Du den Umweg über Oscat und ich den Umweg über DIY (= Selbermachen). ;)

Übrigens: den Umweg über Selbermachen finde ich gar nicht sooo verkehrt und sooo umständlich, zumal das, was ich unserem "PLC-Erstklässler" bisher zugemutet habe, noch recht gut nachvollziehbar sein dürfte. Er ist ja nicht dumm und er hat recht konkrete Verstellungen, was er wie in Angriff nehmen möchte.
Ein Kollege sagte mal, "Die PLC hat für alles mögliche Befehle, aber die paar Befehle, die ich brauche, die gibt es nicht!". Aber das, was er eigentlich wollte, das liess sich alles mit den paar, mickrigen Befehlen der PLC und ein klein wenig Gehirnschmalz problemlos realisieren.
Ich finde, PLC-Erstklässler sollten nicht ausschliesslich und nicht vorrangig darauf gedrillt werden, die passende Bibliothek und darin die passende Funktion zu finden. Das können sie sich dann immer noch aneignen, wenn sie die Möglichkeiten exemplarisch erstmal durchgekaut haben und verstehen, was sie da tun bzw. tun können/könnten. Z.B. eine FlankenErkennung sollte man unbedingt zuerst selber machen und verstehen, bevor man dazu übergeht, vorgefertigte FlankenErkennungen zu benutzen. ;)

PS:
Immer wenn ich auf die Nase falle, lerne ich auch was.

Genau das meine ich doch, Wolfgang!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist doch genau das, was das Progrämmle in meinem Beitrag tut,...
Mehr Kommentare in Deinem Code wären IMHO gut, um sich Deinen Code intensiver anzusehen und Deinen Gedankengängen folgen zu können.
Und auch die Auswahl der Variablennamen als Abkürzungen empfinde ich beim Lesen des Codes nicht gerade als selbst redend.

Es steht halt nicht jeder auf Deinem Programmierniveau nach >40? Berufsjahren.
Ich persönlich z.B. komme mir da immer vor, als hätte ich gerade erst das boolsche AND kennen gelernt.
;)
 
Hallo,

Immer wenn ich auf die Nase falle, lerne ich auch was.
Genau das meine ich doch, Wolfgang!

Im Moment schmerzt mein zartes Näschen aber schon ein wenig :-)

Mehr Kommentare in Deinem Code wären IMHO gut, um sich Deinen Code intensiver anzusehen und Deinen Gedankengängen folgen zu können.
Und auch die Auswahl der Variablennamen als Abkürzungen empfinde ich beim Lesen des Codes nicht gerade als selbst redend.

Ja, das stimmt schon. Aber wenn es funktioniert brösel ich so etwas auf, füge meine Bezeichnungen ein und dann folgt oft ein Aha-Effekt.

Übrigens: den Umweg über Selbermachen finde ich gar nicht sooo verkehrt und sooo umständlich, zumal das, was ich unserem "PLC-Erstklässler" bisher zugemutet habe, noch recht gut nachvollziehbar sein dürfte. Er ist ja nicht dumm und er hat recht konkrete Verstellungen, was er wie in Angriff nehmen möchte.

Freut mich zu hören. Leider verrenne ich mich oft in zu komplizierte Ansätze.
Codesys ist wirklich komplett neu für mich, hat aber Ähnlichkeiten zu anderen Programmiersprachen. Was ich besonders vermisse sind gescheite Tutorials zu den Grundlagen. Und eine PLC hat nochmal so ihre ganz besonderen Eigenarten, die zumindest bei mir immer wieder für Überraschungen beim Programmablauf sorgen.

Danke für Eure Geduld
 
Mehr Kommentare in Deinem Code wären IMHO gut, um sich Deinen Code intensiver anzusehen und Deinen Gedankengängen folgen zu können.
Und auch die Auswahl der Variablennamen als Abkürzungen empfinde ich beim Lesen des Codes nicht gerade als selbst redend.
Danke für die konstruktive Kritik, hucki!

Ich bin zwar nur zugereister Lipper ("Immigrant"), aber trotzdem (zu) "sparsam". Das ist mir zwar bewusst, aber in dem Moment, in dem ich es hinschreibe (oder auch nicht), stecke ich gedanklich noch zu gut drin, um überhaupt zu merken, welcher Hinweis noch nützlich sein könnte für jemanden, der sich einliest.
Aber jeden einzelnen Befehl zu kommentieren, z.B. 'iIdx := iIdx + 1 ; // Index vom Typ INT inkrementieren', werde ich mir wohl auch weiterhin verkneifen.
Gilt übrigens auch für iIdx += 1 ; ;)

Bezüglich der selbst redenden VariablenNamen bevorzuge ich (leider?) kurze Namen und "kryptische" Abkürzungen. Lange Namen mag benutzen wer will, mich halten sie eher auf bzw. davon ab, die "Struktur" dessen, was dort steht, zu erfassen. Aber ich werde versuchen, etwas spendabler damit umzugehen.

Rückfragen und auch Kritik und VerbesserungsVorschläge sind aber weiterhin und jederzeit willkommen!

Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.. Aber wenn es funktioniert brösel ich so etwas auf, füge meine Bezeichnungen ein und dann folgt oft ein Aha-Effekt...
Ich bin davon überzeugt, dass Heinileinis Code funktionieren wird. Statt des Aha-Effekts kommt bei mir aber immer nur der Oooh-Effekt. Ich bin mal auf deine Interpretation gespannt.
 
Moin Wolfgang,
ich denke, ich habe Dein Anliegen verstanden, obwohl die Variablen bzw. Aktionen A .. G noch etwas nebulös sind.

Kannst Du denn etwas dazu sagen, wie die Schnittstelle zu diesen A .. G Dingern aussieht bzw. angedacht ist, dann könnte man etwas konkreter darauf eingehen.
Ich gehe z.Z. noch davon aus, dass nacheinander mit eingestreuten Pausen und in zufälliger Reihenfolge alle 7 Aktionen jeweils nur 1-mal angestossen werden sollen.
Und davon, dass Du z.B. nur einmalig pro Tag diese zufällige Sequenz (z.B. Öffnen der Rollläden) anstossen willst.
(Willst Du evtl. auch die eingestreuten Pausen in zufälliger Länge variieren?)

Mit dem Stichwort "Pause" bestätigst Du mich in der Annahme, dass das alles über viele Zyklen verstreut angeleiert werden und passieren soll.
Deshalb findest Du in meinem Vorschlag die CASE-Selektion nicht in einer FOR-Schleife.
Die Schleife ist die EndlosSchleife des BetriebsSystems, die zyklisch dafür sorgt, dass das PLC-Programm immer wieder durchlaufen wird.
Der SchleifenIndex wird also "zu Fuss" gemacht.

Generell: Trau Dich! Dumme Fragen gibt es nicht!

PS:
Statt des Aha-Effekts kommt bei mir aber immer nur der Oooh-Effekt.
Du darfst Dich auch trauen, Dagobert!
Du hättest ruhig sagen können, der "Oooh-oooh-oooh-Effekt! ;)
 
Zuletzt bearbeitet:
Ich bin davon überzeugt, dass Heinileinis Code funktionieren wird. Statt des Aha-Effekts kommt bei mir aber immer nur der Oooh-Effekt.
Da hab' ich auch so gar keine Zweifel.
:TOOL:




Aber jeden einzelnen Befehl zu kommentieren, z.B. 'iIdx := iIdx + 1 ; // Index vom Typ INT inkrementieren', werde ich mir wohl auch weiterhin verkneifen.
Gilt übrigens auch für iIdx += 1 ; ;)
:confused:
Bei den Kommentaren geht es doch oft weniger um das WAS als vielmehr um das WARUM, oder?

Hier z.B.:
Code:
...

// - - - < Idx1 bilden > - - -
trR := grR * 997.0 ;
grR := trR - Int_To_Real(Real_To_Int(trR)) ;
tiIdx1 := Real_To_Int(grR * 7.0) ;

...
Was Du da machst, sehe ich.
Aber warum Du das machst und wofür Idx1 oder die Zwischenvariablen benötigt werden, erschließt sich mir so nicht direkt.
:(


PS:
Ich hab' mich allerdings auch noch nicht wirklich mit Deinem Code beschäftigt. Halt nur drüber weg geschaut. :oops:
Aber genau so ergeht es mir auch oft mit eigenem Code und zeitlichem Abstand zur Erstellung, wenn ich nicht "kleinlich" kommentiere.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Heinileini,

Ich habe das Ding gerade mal ans Laufen bekommen. Es funktioniert, aber nicht so, wie ich mir das vorgestellt habe. Es läuft, glaube ich, in eine falsche Richtung.

Bemühe Dich bitte nicht, ich melde mich mit konkreten Fragen.

Danke - wird etwas dauern. Es ist Kaffeezeit :-)
 
Aber warum Du das machst und wofür Idx1 oder die Zwischenvariablen benötigt werden, erschließt sich mir so nicht direkt.
Stimmt schon, hucki, das ist zu kurz gekommen.
grR ist das Ergebnis der hier realisierten Random-Funktion.
grR soll Werte m Bereich > 0.0 und < 1.0 annehmen.
Um den nächsten Random-Wert zu erhalten, wird mit 997 mulitpliziert.
Aber dadurch entstehen auch "VorkommaStellen", die wieder plattgemacht werden sollen.
Beim hp97 gab es dafür die Funktion 'Frac'.
'grR := FRAC(grR * 997.0)' ist das, was ich eigentlich tun möchte. Notwendigkeit für ZwischenVariable: Null,Nix.

In CodeSys habe ich nichts Entsprechendes gefunden. Auch nicht die INT-Funktion, die die NachkommaStellen plattmacht und die man von diversen Sprachen her gewohnt ist.
Auf diesem Umweg hätte man 'Frac := rX - INT(rX)' realisieren können. Also von der kompletten Zahl mit Vorkomma- und Nachkomma-Stellen die um die NachkommaStellen beschnittene Zahl subtrahieren. Bleiben die NachkommaStellen.

Habe, um INT zu "workarounden", also die NachkommaStellen abzuschneiden, GleitkommaZahl in Ganzzahl und dann zurück Ganzzahl im GleitkommaZahl missbraucht (in der Hoffnung, dass CodeSys dabei - anders als die LOGO! - nicht auf die Idee kommt, zu runden).

Wenn es denn die MOD-Funktion auch für REAL-Zahlen gäbe, hätte ich 'grR := (grG * 997.0) MOD 1.0' geschrieben. Hier auch kein Bedarf für eine ZwischenVariable.

Ja, warum die ZwischenVariable. Hätte ich's ohne ZwischenVariable programmiert ('grR := grR * 997.0 - Int_To_Real(Real_To_Int(grR * 997.0))') , wäre bestimmt die Frage gekommen, warum ohne ZwischenVariable! ;)
Meine Argumente für die ZwischenVariable:
- weil das Ergebnis der Multiplikation anschliessend mehr als einmal (nämlich zweimal) benötigt wird
- weil man beim Testen manchmal auch ein ZwischenErgebniss sehen/kontrollieren möchte.

Zu den beiden Indizes. Diese werden anschliessend benötigt, um zwei zufällig ausgeguckte Elemente des Array zu tauschen.
grR hat, wie gesagt, den WerteBereich > 0.0 bis < 1.0 und für die Indizes benötigen wir die Zahlen 0 .. 6. Die dritte Zeile skaliert die ZufallsZahl dementsprechend.

Wird für beide Indizes zufällig derselbe Wert geliefert, so wird auf den ersten IndexWert eine 3 addiert und das Ergebnis per MOD 7 wieder in den zulässigen Bereich 0 .. 6 "umgebogen".
Es ist auf diesem Wege nicht nötig, solange Zufallszahlen zu bilden, bis mal eine kommt, die für Index2 eine andere Zahl liefert, als Index1 zugewiesen wurde.

Es würde aber auch nichts schlimmes passieren, wenn beide Indizes mal denselben Wert hätten. Dann würde überflüssigerweise ein ArrayElement gegen sich selbst ausgetauscht.

Ja, das passiert mir auch: wenn ich nach einiger Zeit versuche, meinen Code zu enträtseln, dann merke ich natürlich auch, wo überall Kommentare fehlen. ;)
 
Zuletzt bearbeitet:
Vielleicht habe ich da ja was falsch programmiert, aber an Index 0 kommt damit immer die Folge 5, 6, 7, 1, an Index 1 immer die Folge 2, 3, 4 usw. Muss ja jetzt nicht kryptografisch sicher sein, aber für den Aufwand könnte da ein bisschen mehr Zufall kommen ;-)
 
Muss ja jetzt nicht kryptografisch sicher sein, aber für den Aufwand könnte da ein bisschen mehr Zufall kommen ;-)
Ich hab's in CodeSys nicht getestet, Thomas, aber jetzt in VBA versucht, nachzuvollziehen.
Hier die ersten 1000 Ergebnisse, wobei 77 Ergebnisse wiederholt auftraten. Der Startwert waren die Nachkommastellen von Wurzel aus 2.
Code:
Die ersten 1000 Ergebnisse: 2345176 6451732 4516327 1563274 5672341 2763415 6734152 7143526 3415267 4162573 6125734 3257146 2471563 4725631 7254316 2534167 5314672 6143725 1537246 5342761 3421675 6214753 2157436 4571362 5743621 7536214 4362157 5621374 3216745 2467153 4671235 3712654 7146523 1463257 7632541 7325416 3254761 2567413 5674231 6742351 6423517 4235671 7356214 3462157 6421573 4125736 7251364 5213647 2536471 4365712 3657421 6174253 1746532 7465231 1652347 6123475 1734256 7342516 3427165 4276153 2361574 3415762 4257613 2571634 5736142 1367425 3671254 6732541 7523416 5234176 2345761 3475612 6754123 7541263 5214637 7146325 1463527 4653271 4532716 5327614 3256147 2531476 5413762 2137645 1346752 3267541 3675412 6753124 7513246 5137462 1324675 2346751 3167542 1673425 7352461 5324617 3245176 2651743 6217435 2176354 1764532 7642351 6523417 5634172 2341765 3517642 5671423 6754231 7642315 3426157 4271563 2714635 7641352 5413627 4536271 5162734 1624375 6743251 7234516 2346157 3561472 5416723 4176235 1762453 762
3541 6235471 2345716 3457612 1576423 4765231 7452316 4526137 1265374 2635741 6537412 5374621 7346215 3621754 2617543 1675432 5764321 7613245 6134257 1352476 3542761 5627413 6374125 5741236 7462315 4723156 7231654 2317546 3175426 1734265 7312654 3146527 1462573 5624731 3247615 6472153 4726531 7365214 5632147 6371425 3714265 3142657 1326574 3265471 2657413 6534172 5342716 3724165 6241753 2714536 4175362 1723654 4236571 2165734 7651342 1563427 5624371 1436257 4762531 5627314 5273146 2761435 7624351 6342517 3427156 4172563 1527634 5273641 6732415 7524136 5246317 2763145 7361452 3624517 6245137 2453176 4531267 5321674 3716245 7162354 1623457 5234671 2346517 1465372 3654721 4567213 3672154 7621543 6125437 4251376 2517364 5173624 7136245 1367452 5674321 6143275 1632754 6321547 1235476 2147653 1576432 6754321 7543261 4532617 5623174 6231475 2413756 4173562 1765324 7654231 6542713 5426137 4261357 2653174 6541732 5714326 7243165 2341657 3516472 5264713 2746135 7416352 4165327 3651274 7512643 7261345 2653417 6134572 13
54726 3147265 1452673 3526741 5261473 2615734 6127345 6273451 2743516 7345162 3541627 5476213 4162735 1657324 3576241 2765413 7456132 4567321 5613274 6134725 1374256 3247561 2475163 7451632 4513627 5134276 1352764 3427651 4276315 4631752 6327514 4275136 2715364 7152643 1536427 5374261 3745612 7451623 4316257 3762514 6725143 7261435 2654317 6543127 5413276 4632715 6327145 3471256 4752163 7251634 2513647 5163472 1635724 6357142 6571423 5716234 1627543 6215437 2754316 7534162 6341527 2415376 4135762 6375241 6752413 5724136 7241356 2453167 4571632 5316724 1427653 4576231 5742316 7432165 5321647 3261475 2614735 6137452 6374521 3645217 7526431 5264137 7641325 6713254 7532146 1325467 3754621 6547213 5372146 3726415 7264135 5641327 6413572 4137526 2375164 4751632 3516724 5147263 1473625 4763251 7642513 6725134 1257346 2543761 5432617 4321675 3612754 6172543 1625437 7546213 5461237 4216375 2164753 1347562 7435621 4352617 3516274 3162745 1627435 6254371 6435172 4153726 3517264 2715436 7153462 1537624 5376142 2314756 5
147362 1463725 4537261 4372615 4265173 1652734 6547321 5374216 4732165 7351624 2516347 5173462 6734125 1347256 3471562 4713625 7132654 1426537 4562371 5613724 1637245 2534716 5347126 3475261 2574136 5241367 2431675 4613752 6132574 1325647 3756421 5463127 4731265 1372654 3762541 7125463 6254137 4521376 5216734 1267345 1673452 6714523 7345216 3254167 2514673 5641732 6417235 4152376 1523746 7235461 2154637 3546172 2461753 4617235 6132754 1527346 5723461 7234651 2436517 4361572 7615324 6152347 1527436 5271364 2731645 7326451 3214567 2175643 1756234 7542361 5243617 2435176 4352761 5176342 1763245 7236451 6324517 3145276 1452736 4523761 1237654 2736541 3657214 6571243 5742136 3421765 4217563 2135674 1354762 4537621 5176234 1765342 7613425 5134267 3142675 1726453 3264571 2145763 1467532 3675421 6714253 6142537 5421376 2413765 4157632 1573624 6735241 7152436 1534267 5243671 4365127 2651374 7513642 5436127 4351276 4512763 5476321 4762315 7523164 5234617 7346125 3416257 1325674 3156742 1564723 5617234 6372145 3751426 
2514763 5142637 1436275 3627514 6275413 2754631 7146352 1364527 3546271 5462731 4527316 5723164 7213645 6132457 1342576 3245761 6457213 3572146 5761423 7615234 6172345 7263541 6235417 2754136 7546312 5423167 4271635 6712354 4123576 1253764 2637541 6475312 4753621 6537214 5672143 6731425 4317256 3127564 1375642 6753421 7532416 5327164 3274615 2746513 7465312 4653721 6137254 1362547 2635471 6254713 2517436 5473621 3746215 7462351 4326517 5641372 5413726 2137465 1347652 3416527 3165274 1672543 6725341 7352416 3521467 5214376 2743165 7421653 5216437 2163475 1674352 7632514 3275416 5724163 7341625 4263571 4635712 6354127 7541236 5421367 4213657 4136572 7653142 6531472 5314627 3126475 1462753 4327561 1275634 2716345 7463152 4621537 3215674 2136745 3654271 6542317 5432176 3716254 5162743 5627431 5274316 2743615 4361527 2156347 2563471 6741325 6413257 2134576 3546721 5367214 3472165 4521673 5216374 7163245 1532467 6245713 2457316 4576132 5461327 4316275 1372546 3725416 7154263 1245637 2546371 5643712 7321456 5214367
 1426573 6245731 6457312 4753126 7531624 5613247 6172435 1764352 7463521 2635417 3541726 5467213 2674135 4761352 7316524 3465217 4562173 5321764 2163457 1654372 6523741 5437216 4672135 6721453 4217536 2165374 1635742 6327451 3264517 2645713 2457136 4517362 5137624 1346275 3562741 5637412 6375124 2751346 7543162 5231647 2361475 3641752 5417623 6174235 1724356 7241563 2451637 4516732 5147326 4173265 2316547 1562743 5127436 1275364 2735641 7326415 3164257 1632574 2365741 2574613 5647132 6475321 4153276 6527341 5372416 6724135 7251346 2573461 5437612 4356127 7561234 5612374 5234716 2367145 3617452 6574123 5241736 2417356 4176532 1745326 1453267 4132675 1376254 3672541 6325417 3154276 1342765 3472651 4725613 6541327 5423176 4132765 6327154 3571246 5612473 6421735 4153762 1567324 5673214 6132745 1627453 6275431 2154376 4513762 5147623 6471235 4762351 6723514 7235416 2314567 3145627 1456237 2564371 1643752 6417523 4175263 1762534 7625431 1254367 2743651 7436215 4162357 1624573 6345721 4357216 3574162 2741653 721653
4 2765341 7613452 6135427 1254376 2541763 5617432 6174352 1473526 4735162 2351674 1627534 6245371 2153746 4537162 2371654 4716532 7164325 7643251 6452317 7523146 5237461 2371645 5716432 5164327 1647235 6721534 3215746 2154763 1247635 2576341 6257341 2173456 6745321 4753216 7542163 5421736 4271365 2713564 5137642 1375426 3764251 2516374 5173642 1637425 6473251 4736512 1365724 3675241 6452713 4327156 3217564 7125643 1253467 5146372 1263745 1637452 4376521 3265714 2654173 6541237 5712346 7123456 1264537 4625371 6253174 7531246 5316427 3174265 1642753 6472531 4735216 7342165 1423657 4236517 2365714 3457162 5614237 1526743 1267435 2671354 5713642 7136452 7364521 3625417 6234175 6417352 4163527 1635247 3524167 5142673 1246735 4672531 6125374 6253741 5341762 2417635 4576312 5713624 1467352 3745216 7652143 7234156 2371564 4715632 7456321 5463217 7621354 4213567 5132674 5264731 2617345 6573412 5736124 7351246 3542167 1425673 4256713 2547136 5471326 4716235 7162345 2613457 1634572 7345621 3654217 6542371 5463712 46317
25 1367254 3652741 3527416 5214763 2147536 1675342 6723451 7264513 2635147 4351672 5764213 7645132 6351427 3514267 5146273 5637241 3761452 7416523 6752314 6523147 3251476 6514723 5146237 1472365 4623751 7236514 2365417 3645172 6421753 4237516 4375162 


77 Wiederholungen bei den Ergebnissen: 95 139 184 227 254 287 315 323 331 342 372 384 388 393 399 417 421 429 472 482 511 518 525 535 554 585 590 591 592 609 611 615 623 636 640 646 648 651 655 663 669 676 679 690 699 732 734 743 748 758 776 784 827 828 844 850 851 854 864 865 866 879 903 905 914 918 922 926 931 933 936 942 946 976 982 984 987
Dabei sind die Inhalte der 7 ArrayElemente jeweils zu einer 7-stelligen Zahl zusammen gefasst.

Was ich mir bei den RealZahlen gedacht habe? Eigentlich nichts (Böses). Ich weiss doch, dass man bei vielen PLC-Anwendungen mit Ganzzahlen besser bedient ist. Aber bei meiner Beschäftigung mit Oscat ist mir aufgefallen, dass ich nicht der einzige bin, der RealZahlen nicht grundsätzlich aus dem Wege geht. ;)

Gruss, Heinileini

PS:
Ich glaube, ich weiss jetzt, was schief gelaufen ist und den Zufall zu Fall gebracht hat, Thomas!
Der Inhalt der Variable grR muss von der einen bis zur nächsten ZufallsZahlenBildung erhalten bleiben (static oder global oder ...) und "vernünftig" vorbesetzt worden sein.
Sonst kommt es zu kurzen WiederholZyklen, ohne die Bildung von ZufallsZahlen. Das Rotieren des Array sorgt dann zwar noch für ein wenig "Bewegung" und das Tauschen immer derselben ArrayElemente bringt dann auch keinen nennenswerten Schub an Dynamik!
Mir war schon immer ein Rätsel, wie sich bei CodeSys die Deklarationen für Static und Temp unterscheiden und bin mal belehrt worden, dass alle statisch sind und es temporäre im Sinne von Simatic nicht geben soll ... ?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

was habe ich nur angerichtet?
Nach den Erklärungen in #33 kann ich in etwa nachvollziehen, was gemacht wird. Ohne die Erklärungen hätte das nichts gegeben. Und an eine Umsetzung in einen funktionierenden Code brauche ich garnicht zu denken.

Den größten Fehler habe ich schon bei der Frage mit dem Wort Zufallsgenerator gemacht. Bevor ich hier eine Frage stelle, geistert mir die Aufgabe lange durch den Kopf und ich suche nach Lösungen in der Richtung, die ich für zielführend halte. So läuft es dann manchmal ein wenig aus dem Ruder.

Daher nochmal eine Beschreibung was ich machen möchte:
Einmal am Tag soll eine Reihe von Aufgaben (A ... G oder 1 bis 7) in zufälliger Reihenfolge ausgeführt werden.
Zwischen dem Start einer Aufgabe und der nächsten sollten 1 bis 5 Minuten Wartezeit liegen (das ist mir gerade noch eingefallen).

Das Durcheinanderbringen der Reihenfolge ist möglicherweise anders leichter zu bewerkstelligen als über Zufallszahlen. Es tut mir Leid, wenn ich Euch auf einen falschen Weg gelockt habe.

Ich wünsche allen einen guten Start in die neue Woche.
 
Daher nochmal eine Beschreibung was ich machen möchte:
Einmal am Tag soll eine Reihe von Aufgaben (A ... G oder 1 bis 7) in zufälliger Reihenfolge ausgeführt werden.
Zwischen dem Start einer Aufgabe und der nächsten sollten 1 bis 5 Minuten Wartezeit liegen (das ist mir gerade noch eingefallen).
Moin Wolfgang,

wer bestimmt die Länge der Pausen 1 .. 5 Minuten? Auch der Zufall? Oder folgt auf eine Aufgabe immer eine Pause von derjenigen Länge, die der Aufgabe festzugeordnet ist?

Du hast jetzt ein Array mit 7 Elementen, die die Zahlen 1 .. 7 in sich ändernden Reihenfolgen enthalten. Wo genau liegt Dein Problem, daraus etwas zu machen?
Die CASE-Selektion ist Dir nicht nur von mir als HilfsMittel nahegelegt worden (kann man aber auch ohne CASE mit IF ... ELSIF ... u.s.w. machen und evtl. auch mit einem weiteren Array).
Wie sieht es mit den 7 Aufgaben aus? Wie kann man sie anstossen/starten? Wie kann man abfragen, ob/wann sie fertig geworden sind? Kannst Du dazu etwas sagen oder wartest Du auf unsere Vorschläge?
Willst Du evtl. die 7 Aufgaben (und die Pausen dazwischen?) in die CASE-Selektion integrieren oder sollen diese Aufgaben zusätzlich auch anderweitig (z.B. manuell) gestartet werden können?

Dir auch einen guten Start in die neue Woche!

Gruss, Heinileini
 
Was ich mir bei den RealZahlen gedacht habe? Eigentlich nichts (Böses). Ich weiss doch, dass man bei vielen PLC-Anwendungen mit Ganzzahlen besser bedient ist. Aber bei meiner Beschäftigung mit Oscat ist mir aufgefallen, dass ich nicht der einzige bin, der RealZahlen nicht grundsätzlich aus dem Wege geht. ;)

Die einfachsten Zufallsgeneratoren sind absolut simpel von der Berechnung her und benötigen nur eine Variable als Speicher, siehe: https://en.wikipedia.org/wiki/Linear_congruential_generator
Ich dachte bei dir schon fast du hast da einen Mersenne-Twister gebaut, wohl eines der besten Pseudozufallsgeneratoren.
 
Zurück
Oben