TIA Zufallsgenerator in TIA

Elifly

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich bin Azubi und bin derzeit an einem Projekt zugange.
Bei mir hängt es gerade an einem etwas größeren Punkt, da ich einen Zufallsgenerator benötige, welcher mir zuverlässig die Zahlen 1-20 in verschiedene Integer schreibt
ohne dass eine Zahl doppelt beschrieben wird oder eine Zahlt außerhalb von 1-20 vorkommt. Mein Wissen beschränkt sich dabei leider nur auf FUP, habe also fast keine Erfahrungen mit AWL oder SCL.

Derzeit habe ich das ganz mit Timern gelöst, welche sich gegenseitig triggern und dabei einen Counter von 1-20 laufen lassen. Aus diesem wird dann zu unterschiedlichen Zeitpunkten zugegriffen, und die Zahlen werden in Integer geschrieben. Um gleiche Zahlen zu vermeiden, soll bei Gleichheit mit einer anderen Zahl, die Zahl einfach um 1 erhöht werden. Das Problem an der Sache ist nur, dass dabei selten alle Zahlen von 1-20 beschrieben werden, sonder das ganze Zahlen über 20 beschreibt und damit meine Abfrage nicht mehr funktioniert.

Ich weiß, dass SPS und zufällig nicht wirklich zusammen passen, aber vielleicht finde ich hier ja eine Lösung für mein Problem.

Eine Lösung in SCL wäre auch super, ich bin nur nicht sonderlich vertraut mit dem ganzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tipp: Von Siemens gibt es für TIA fertige "Zufalls"zahlen-Generatoren in der Bibliothek
Bibliothek mit generellen Funktionen (LGF) für STEP7 (TIA Portal) und S7-1200/S7-1500
siehe die FC LGF_RandomINT (der "Zufallswert" wird aus den Nanosekunden des Systemtimers der CPU gebildet)

Man könnte ein Array[1..20] OF INT anlegen, in alle Elemente den Wert 0 schreiben, und dann in 20 Durchläufen (oder Schleife) 20 (oder 19) Zufallswerte 1..20 erzeugen und in das "ausgewürfelte" Element den Wert des Schleifenzählers [1,2,3..20] schreiben, wenn da noch 0 drin steht. Falls da schon ein Wert <> 0 drinsteht, dann das nächste Element mit 0 suchen und da reinschreiben. Wenn beim Suchen das Element[20] <> 0 ist, dann beim Element[1] die Suche fortsetzen.

Man könnte auch eine Zeit lang "mischen": zuerst in das Array fortlaufend die Zahlen 1..20 eintragen und dann mit dem Zufallsgenerator 2 Elemente ermitteln und deren Werte tauschen.

Harald
 
Zurück
Oben