Bit-Zustand zufällig ändern (Zufallsgenerator)

Zuviel Werbung?
-> Hier kostenlos registrieren
leider nein,
Grundsatz ist halt, dass alles was aus der SPS kommt nicht wirklich auf Zufall beruht, wenn mann da von aussen etwas reinbringt, das nicht dem selben Zyklus unterliegt, dann wirds eher "Zufällig".

Aber da ist deiner Phantersie alles offen.

PEW als INT -> relativ weiter Spielraum, Uhrzeit mal irgendwas, dazu vielleicht noch einen Impuls der aus 2 asynchronen Zeiten generiert wird, . . .

lass dir da was einfallen.

PS: INT, da lassen sich auch einige Bits, vor allem die höherwertigen, weglassen :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
es soll ja lediglich ein Bit "generiert" werden, mit zufallszahlen kann ich nix anfangen.

du scheinst mit nix - nix anfangen zu wollen.

Ich hatte ja schon hier: http://www.sps-forum.de/showthread....ändern-(Zufallsgenerator)?p=385584#post385584 versucht dir zeigen zu wollen, dass du mit deinen einen Vorstellungen nicht ansatzweise eine Vernünftige Lösung bekommen wirst. Ob man dir hier Zufallszahlengeneratoren oder Bitgeneratoren präsentiert, ist fast egal, denn für EINE Lampe kannst du fast schon einen

http://www.idealo.de/preisvergleich...urzhubtaster-universal-cd-1561-07-u-jung.html

verwenden. Da ist ein Zufallsmode integriert. Aber eine echte Anwesenheitsimulation sieht nun mal anderes aus.

Frank
 
ok, es ist wirklich nicht einfach mit einer CPU die zyklisch arbeitet irgend etwas zufälliges herauszu bekommen. Ja die Links zu dem KNX waren aufschlussreich, aber auf eine S7 CPU nicht übertragbar.
Die einfachste - wenn auch sehr unelegante - Lösung für mich wäre nun:
die alte Siemens Logo nicht komplett abzuschaffen. Ich lasse den Zufallsgenerator (fertiger Baustein) in der Logo laufen und schicke mir das Bit via E/A Kopplung auf die S7...
Aber das ist nur so eine Idee, ob ich es so mache weiß ich noch nicht.
Dennnoch vielen Dank für die vielen Antworten/Beiträge.

MfG
DerMatze
 
Eine Logo an eine S7 koppeln nur für ein Zufallsbit?
Wieso setzt du nicht die Vorschläge die hier genannt worden sind direkt in der S7 um?
 
Beispiel für einen Zeitschalter mit Zufallszahl

Hier ein kurzes Beispiel, wie ich, in gewissem Rahmen, Zufallszahlen mit einer S7-300 generiere. Je kleiner der gewählte Zahlenbereich (z.B. 0-100) desto größer der Zufall.:eek:

// Durch Resteverwertung einer Division einer sich verändernden Zahl(Zeit)
// erhält man einen Wert der immer kleiner ist als der Divisor. Durch Addition, kann noch die Untergrenze verändert werden.
// M 0.0 ist für einen Zyklus 1 wenn die Zufallszeit abgelaufen ist

UN M 0.0 //Auslöserbit für eine Aktion
SPB M001
// Berechnen der Zufallszahl
CALL "TIME_TCK" //CPU Zeit seit dem Start in ms
RET_VAL:=MD10
L MD 10
L 5000 //Divisor und gleichzeitig die Grenze des Restwerts
MOD
L 10 //z.B. 10s Mindestzeit
+I
T MW 20
SET
R M 0.0

// Abarbeiten der Zeit
M001: U M 1.5 //aus dem Merkertaktbyte der CPU (1s)
FP M 0.1
SPBN M002
L MW 22 //Zeitzähler
+ 1
T MW 22
L MW 20 //berechnete Zufallszeit
<I
SPB M002
SET
S M 0.0
L 0
T MW 22
M002: NOP 0

Vielleicht ist es da was du suchst.
Gerhard
 
Ich habe ja geschrieben dass es nur eine Idee ist.
Bislang habe ich noch nichts brauchbares zusammenprogrammiert bekommen, mit den o.g. Vorschlägen. Vielleicht denke ich auch zu kompliziert, keine Ahnung.
Bin jedenfalls noch am Rumprobieren, wenn es in der S7 klappt ist es natürlich das Beste!
MfG
DerMatze
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier ein kurzes Beispiel, wie ich, in gewissem Rahmen, Zufallszahlen mit einer S7-300 generiere. Je kleiner der gewählte Zahlenbereich (z.B. 0-100) desto größer der Zufall.:eek:

// Durch Resteverwertung einer Division einer sich verändernden Zahl(Zeit)
// erhält man einen Wert der immer kleiner ist als der Divisor. Durch Addition, kann noch die Untergrenze verändert werden.
// M 0.0 ist für einen Zyklus 1 wenn die Zufallszeit abgelaufen ist

UN M 0.0 //Auslöserbit für eine Aktion
SPB M001
// Berechnen der Zufallszahl
CALL "TIME_TCK" //CPU Zeit seit dem Start in ms
RET_VAL:=MD10
L MD 10
L 5000 //Divisor und gleichzeitig die Grenze des Restwerts
MOD
L 10 //z.B. 10s Mindestzeit
+I
T MW 20
SET
R M 0.0

// Abarbeiten der Zeit
M001: U M 1.5 //aus dem Merkertaktbyte der CPU (1s)
FP M 0.1
SPBN M002
L MW 22 //Zeitzähler
+ 1
T MW 22
L MW 20 //berechnete Zufallszeit
<I
SPB M002
SET
S M 0.0
L 0
T MW 22
M002: NOP 0

Vielleicht ist es da was du suchst.
Gerhard

Danke Gerhard, ich werds mal versuchen...
Ist der "TIME_TCK" ein SFB?

MfG
DerMatze
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Shortman,

ich habe mir einen Testbaustein erstellt in dem der o.g. Code läuft.
Es scheint so dass "irendwann" der M0.0 gesetzt wird.
Mit der "5000" und der "10" kann ich die Parameter zur Berechnung einstellen?
Da AWL nicht so mein Ding ist, noch eine Frage:
Kann ich es so einstellen dass die Grenzwerte einer Zeit entsprechen?
z.B. wenn die Funktion gestartet ist, die Obergrenze 30min und die Untergernze 10min eingestellt wird - irgendwo dazwischen läuft die Zufallszeit ab und M0.0 = 1
Falls du jetzt noch mitkommst was ich meine...?

MfG
DerMatze
 
Die Zeitbasis ist durch den Taktmerker von 1s vorgegeben und der Zufallswert ist eine Ganzzahl auf Sekundenbasis. Der Merker M0.0 entspricht einem Taster zum Ein- oder Ausschalten von ....
Statt der 10 musst eben 10minx60s/min=600s als Untergrenze und statt der 5000 eben (30min-10min)x60s/min=1200s als variablen Bereich nehmen. Hat nichts mit AWL zu tun, das ist Mathematik.
Wenn'st das ganze noch hübsch in einen Funktionsbaustein verpackst, die Merker als statische Variablen und den Merker 0.0 als Ausgang, dann kannst das ganze beliebig oft im Programm verwenden.
Wie sinnvoll du dies in deinem Programm verwendest, musst schon selbst rausfinden und auch ausprogrammieren.
Denn ich lebe davon Programme zu schreiben, vom Herschenken ist noch keiner satt geworden.:ROFLMAO:

Wenn ich da was falsch verstanden habe, dann musst es mir anders erklären.

Gerhard
 
Statt der 10 musst eben 10minx60s/min=600s als Untergrenze und statt der 5000 eben (30min-10min)x60s/min=1200s als variablen Bereich nehmen.

genau da ist es, jetzt kann ich es nachvollziehen - danke

Wenn'st das ganze noch hübsch in einen Funktionsbaustein verpackst, die Merker als statische Variablen und den Merker 0.0 als Ausgang, dann kannst das ganze beliebig oft im Programm verwenden.
Das habe ich schon gemacht. Im Programm wird es dann noch implementiert.

Wenn ich da was falsch verstanden habe, dann musst es mir anders erklären.

Nein, genau das war es!
Vielen Dank.
Somit ist mein Problem gelöst und ich habe mein "Zufallsbit":p

MfG
DerMatze
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke @Shortman
Das ist genau das was ich gerade gesucht habe für eine vereinfachte Anwesenheitssimulation.

@IBFS
Ich gebe dir prinzipiell recht damit, das man das eigentlich aufwendiger gestalten müsste,
aber genau das ist der Knackpunkt - man benötigt viel Zeit für die Hardware-Integration und Programmierung
 
Zurück
Oben