Bewegungsmelder

Was gefällt die denn an dieser Art nicht?
Na, dann will ich mal auch noch meine Aussage begründen (soll ja nicht wie bei Anderen wie unbegründetes Meckern aussehen):
- Trotz Doppelzuweisungen an Ausgänge ist Deine Logik nicht vollständig, das Programm erfüllt nicht die Aufgabenstellung: die Lampen leuchten oder blinken immer.
- Wofür hast Du die Variable "Blinker" angelegt?

Das Schlimme an SCL und ST ist, daß es Programmierer verleitet, ohne Konzept einfach drauflos zu programmieren und später noch diese und jene bedingte Ausnahmeschaltung nachzuprogrammieren und damit die Logik immer mehr verwässern oder gar ungeschickt komplett aushebeln.
Das geht mit der LOGO nicht so einfach, da sollte man ein durchdachtes Konzept haben bevor man loslegt - vielleicht hast Du die LOGO deshalb als "letzter Dreck" betitelt?

Man kann aber natürlich auch in SCL ein funktionierendes Programm schreiben, z.B. so:
Code:
    #Timer1(IN :=NOT #Timer2.Q,PT := T#1s);
    #Timer2(IN := #Timer1.Q,PT := T#1s);

    #Blinken := #Bew_1 OR #Bew_2 OR #Bew_3;

    #Lampe_1 := #Bew_1 OR #Blinken AND #Timer1.Q;
    #Lampe_2 := #Bew_2 OR #Blinken AND #Timer1.Q;
    #Lampe_3 := #Bew_3 OR #Blinken AND #Timer1.Q;
Man kann auch #Timer1.Q gleich mit in #Blinken verknüpfen, dann wird das Programm noch etwas kürzer.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein! Die Lampen Blinken nur wenn keiner der drei Bewegungsmelder aktiv ist. Soll doch so sein oder nicht?
Nach modernen Programmierrichtlinien muss das Programm verständlich sein und nicht kurz. Vor 20 Jahren war sowas erfordelich. Bei heutiger Hardware spiel das kaum eine Rolle.
Koplexere Abläufe sind viel einfacher zu verstehen wenn man Befehle von höheren Programmiersprachen benutzt wie IF, Case, For...und KEINE boolsche Algebra mit 20 "OR und "UND" Verknüpfungen hintereinander.
Das ist auch die Begründing dafür warum ich eine LOGO nicht einsetzten würde. Eine S7-1200er kann sehr viel mehr als eine LOGO und kostet auch nur 20 Euro mehr!!!
Also warum sollte ich ein Opel kaufen wenn ich für das gleiche Geld ein S-Klasse kaufen kann?
 
Ist Dir meine Programmversion nicht verständlich? Ich könnte vielleicht noch ein paar überflüssige Klammern setzen...

In erster Linie muß ein Programm zuverlässig seine Aufgabe erfüllen. Ob der Quellcode für unausgebildete Programmierer verständlich ist interessiert nur bei Problemen.

Meine Erfahrung: die in Hochsprachen geschriebenen Programme enthalten viel mehr Fehler als die mit boolscher Logik.

Nein! Die Lampen Blinken nur wenn keiner der drei Bewegungsmelder aktiv ist.
In Deiner Theorie. Oder wie hast Du das getestet?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe 3 BWM und 3 Leuchten,
wenn BWM 1 anspricht soll H1 leuchten und H2 & 3 blinken
wenn BWM 2 anspricht soll H2 leuchten und H1 & 3 blinken
wenn BWM 3 anspricht soll H3 leuchten und H1 & 2 blinken.

BMW 1
BMW 2
BMW 3
H1
H2
H3
0
0
0
x
x
x
0
0
1
x
x
1
0
1
0
x
1
x
0
1
1
x
1
1
1
0
0
1
x
x
1
0
1
1
x
1
1
1
0
1
1
x
1
1
1
1
1
1

x ist blinken
1 ist dauern an

Was soll da an meinem Code nicht funktionieren???

Ich mach alles blinkend:

Code:
#Timer1(IN :=NOT #Timer2.Q,PT := T#1s);
#Timer2(IN := #Timer1.Q,PT := T#1s);

#Lampe_1 := #Timer1.Q;
#Lampe_2 := #Timer1.Q;
#Lampe_3 := #Timer1.Q;

Und dann werden die dauernd leuchten sollen überschrieben:

Code:
IF #Bew_1 THEN
    #Lampe_1 := 1;
END_IF;

IF #Bew_2 THEN
    #Lampe_2 := 1;
END_IF;

IF #Bew_3 THEN
    #Lampe_3 := 1;
END_IF;
 
Habe 3 BWM und 3 Leuchten,
wenn BWM 1 anspricht soll H1 leuchten und H2 & 3 blinken
wenn BWM 2 anspricht soll H2 leuchten und H1 & 3 blinken
wenn BWM 3 anspricht soll H3 leuchten und H1 & 2 blinken.

BMW 1BMW 2BMW 3H1H2H3
000xxx
001xx1
010x1x
011x11
1001xx
1011x1
11011x
111111

x ist blinken
1 ist dauern an

Was soll da an meinem Code nicht funktionieren???

Ich mach alles blinkend:

Code:
#Timer1(IN :=NOT #Timer2.Q,PT := T#1s);
#Timer2(IN := #Timer1.Q,PT := T#1s);

#Lampe_1 := #Timer1.Q;
#Lampe_2 := #Timer1.Q;
#Lampe_3 := #Timer1.Q;

Und dann werden die dauernd leuchten sollen überschrieben:

Code:
IF #Bew_1 THEN
    #Lampe_1 := 1;
END_IF;

IF #Bew_2 THEN
    #Lampe_2 := 1;
END_IF;

IF #Bew_3 THEN
    #Lampe_3 := 1;
END_IF;

Ich denke das ihr beiden das vorhaben unterschiedlich interpretiert habt, da es nicht 100%ig vorgegeben ist.
Harald geht davon aus, dass die Lampen aus sein sollen, wenn keiner der Bewegungsmelder ein Signal sendet.
Du hingegen gehst davon aus, dass die Lampen dauerhaft blinken sollen.
Da müsste der TE eigentlich mal sagen was gefordert ist. Wobei ich davon ausgehe, dass die Lösung von Harald dem geforderten entspricht, da auch der TE in seinem angefangenem Projekt den Timer mit den Eingängen anspricht.

Gruß
 
Zurück
Oben