Zufallszahlen mit SCL generieren ???

bayerguard

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hall zusammen,

wie kann man mit SCL eine Zufallszahl (Output) generieren, bei Angabe einer best. Ober- und Untergrenze (jweils als Input)??

Da ich in jedem Zyklus eine neue Zufallszahl generieren will, sollte die Systemzeit SFC 64 enthalten sein.

kann mir jemand helfen??

greets
bayerguard
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja sollte es ;),

aber ich beschäftige mich erst 4 Tage mit SCL, deswegen bräucht ich da so ein paar Hinweise wie das mit SCL zu realisieren ist.

den Thread hatte ich schon gesehen, aber trotzdem danke.

greets
 
Vielleicht solltest du zu Beginn einfach mal einen Baustein schreiben, der dir mit einer ganz einfachen Formel einen Wert berechnet. Von mir aus einfach mal die Addition von 2 Zahlen. Damit lernst du den Umgang mit SCL erst einmal ein bisschen kennen. Wen das dann funktioniert kannst du dich langsam an deine eigentliche Aufgabe herantasten. Bei Fragen den Code posten und dir wird bestimmt geholfen.

Hast du erfahrungen mit anderen Programmiersprachen wie C oder Pascal?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe recht wenig Erfahrung mit programmieren im Allgemeinen, nur das was man in der Schule so angeschnitten und an der Uni so nebenbei gemacht hat.

Ich hab da mal was zusammen geschustert.

FUNCTION Zufall : DINT
VAR_INPUT
Obergrenze : INT;
Untergrenze: INT;
END_VAR
VAR_TEMP
TimeTck : TIME;
END_VAR
BEGIN
TimeTck := TIME_TCK();
Zufall := ABS(DINT_TO_INT(TIME_TO_DINT(TimeTck))) MOD (Obergrenze - Untergrenze);
END_FUNCTION

Ich glaube, dass meine Funktion die beiden Grenzen nicht als Zufallszahl mit generiert, wie könnte man das ändern?
Also dass die beiden Grenzen mit angezeigt werden.

greets
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

danke nochmal für den Hinweis,
aber ich wollte es eben selbst programmieren und nix fertiges nehmen!

Ich glaub, dass in meinem code noch ein paar schwächen sind, kann mir jemand helfen?

greets
 
Hallo,
hast du denn schon einmal getestet, was passiert ?

Ich würde an dem Code noch folgendes ändern :
Code:
Zufall := DINT_TO_INT(TIME_TO_DINT(TimeTck)) MOD (Obergrenze - Untergrenze) [COLOR=red]+ Untergrenze[/COLOR] ;
auf den ABS kjannst du m.E. verzichten ...
Du solltest außerdem sicherstellen, das Obergrenze immer größer als Untergrenze ist und das (Obergrenze - Untergrenze) nicht negativ wird ...

Gruß
LL
 
Hallo;

Wie kann ich sicherstellen, dass meine angegebenen Grenzen auch als Zufallszahlen in der Ausgabe auftauchen?

Komm da grad nicht weiter, denn wenn ich eine Zufallszahl zwischen 1 und 3 generieren will, dann gibt er mir die 1 aus.

greets
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich sicherstellen, dass meine angegebenen Grenzen auch als Zufallszahlen in der Ausgabe auftauchen?

Dafür sorgt der MOD-Befehl (Modulo).
Bei einer kleinen Bereichs-Vorgabe ist die Möglichkeit für immer gleiche "Zufallszahlen" hintereinander ziemlich hoch ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab gestern auch ein wenig mit deiner Funktion experimentiert.
Hier mal ein Stück Code, mit dem du testen kannst, wie die Verteilung deiner Zufallszahlen aussieht.


Code:
      CALL  "Zufall"
       Obergrenze :=10
       Untergrenze:=5
       RET_VAL    :=MD10

      L     MD    10
      L     5
      <>D   
      SPB   NEX6
      L     MD   100
      L     1
      +D    
      T     MD   100
      SPA   END

NEX6: L     MD    10
      L     6
      <>D   
      SPB   NEX7
      L     MD   104
      L     1
      +D    
      T     MD   104
      SPA   END

NEX7: L     MD    10
      L     7
      <>D   
      SPB   NEX8
      L     MD   108
      L     1
      +D    
      T     MD   108
      SPA   END

NEX8: L     MD    10
      L     8
      <>D   
      SPB   NEX9
      L     MD   112
      L     1
      +D    
      T     MD   112
      SPA   END

NEX9: L     MD    10
      L     9
      <>D   
      SPB   NE10
      L     MD   116
      L     1
      +D    
      T     MD   116
      SPA   END

NE10: L     MD    10
      L     10
      <>D   
      SPB   NE11
      L     MD   120
      L     1
      +D    
      T     MD   120
      SPA   END

//Falsche Zahl
NE11: L     MD   124
      L     1
      +D    
      T     MD   124

END:  NOP   0
 
Würde dieser Zufallszahlengenerator auch ohne den Befehl ABS funktionieren? Weil in meiner Library ist der nicht enthalten und wird somit als Fehler angezeigt.... :/

Gruß
rene´
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Würde dieser Zufallszahlengenerator auch ohne den Befehl ABS funktionieren? Weil in meiner Library ist der nicht enthalten und wird somit als Fehler angezeigt.... :/
Läuft auch ohne, und ein äquivalent zu ABS() sollte doch in jeder Sprache hinzubekommen sein.
Außerdem ist dieses Modulo Beispiel nichtmal als Pseudozufall zu bezeichnen.

Mal gucken was Wolfram sagt:
http://www.wolframalpha.com/input/?i=x+=+i+mod+5+where+i+from+0+to+100&a=i_Variable
sieht nicht gerade zufällig aus. Für ein Würfelspielchen dürfte es aber reichen...
 
Läuft auch ohne, und ein äquivalent zu ABS() sollte doch in jeder Sprache hinzubekommen sein.
Außerdem ist dieses Modulo Beispiel nichtmal als Pseudozufall zu bezeichnen.

Mal gucken was Wolfram sagt:
http://www.wolframalpha.com/input/?i=x+%3D+i+mod+5+where+i+from+0+to+100&a=i_Variable
sieht nicht gerade zufällig aus. Für ein Würfelspielchen dürfte es aber reichen...

Da hast du prinzipiell Recht, aber auf einer S7 mit einigem Programm wird das ganze vielleicht doch ein wenig zufälliger, weil die Zykluszeit ein wenig schwanken wird. Ich bezieh mich da auf Larrys Code.
 
Zurück
Oben