Probleme beim schreiben eines Programmes

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich versuchs nochmal mit nem neuen Thema


Hallo Leute.

Ich hab hier mal ne AWL geschrieben bei der, wenn ich den Taster (Eingangsbit 0.0) gedrückt halte, 5 Lampen (A 1.0 -1.4) nacheinander im 1s Takt aufleuchten, bis ich den Taster wieder loslasse. Dann blinkt die Lampe die zuletzt geleuchtet hat.


U T 11
SPBN N016

UN M 55.6
= M 55.6

N016 :NOP 0
U T 11
U E 0.0
SPBN N013

L 1
L MB 20
>I
SPB N014

L MB 20
SLW 1
T MB 20

N013 :NOP 0

L 16
L MB 20
<I
SPBN N012

N014 :L 1
T MB 20

N012 :NOP 0
UN E 0.0
U M 55.6
SPBN N017
L 0
N017 :NOP 0

T AB 1

UN T 11
L S5T#1S
SE T 11


Nun soll aber , wenn ich den Taster wieder betätige und der Kreislauf weitergeht, die Lampe die schon geblinkt hat nicht mehr in dem Kreislauf aufleuchten. Wenn dann alle Lampen schon an waren, soll es wieder von vorne anfangen. Da ich grad die S 7 lerne, wollte ich das auch mit den WORT-Verknüpfungen lösen (UW, OW und so)
kann mir da jemand helfen?
Ich schreib in der WinSPS-S7 V3.31 und habe keine Visualisierung nur das AG-Maske Fenster, in der ich dann halt EB 0 u. AB 1 darstelle.
Vielen Dank schonmal im voraus
Nach oben
 
Hallo,
warum nicht 1s taktgeber, einen zähler nehmen und dann ein bit schieben, und wenn 6 erreicht ist, den zähler rücksetzen?????
nur mal so als vorschlag.
mfg
dietmar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich glaub das würde so nicht funktionieren, weil ich dann die bits immer nur reihenweise um 1 nach links schieben würde. Die Lampe die ich aber in der mitte herausnehme, soll dann nicht mehr aufleuchten. Ausserdem sollte ich das mit den Wortverknüpfungen schaffen.....laut Aufgabenstellung, nur hab ich leider nicht den Durchblick dabei, ich kenn SPS-S7 erst seit 2 Wochen.
 
Hallo,
verstehe dich nicht so recht, habe dein Programm simuliert: 1lampe an,1s 2.Lampe geht an, taster aus lampe 2 blinkt, taster ein lampe 3 geht an, 1s lampe4 geht an,1s lampe 5 geht an, und alles startet neu, usw....
Jetzt verstehe ich nicht was du meinst mit der lampe darf nicht mehr leuchten, geht doch auch aus wenn du wieder startest.
am besten sende mal die komplette aufgabenstellung.
mfg
dietmar
 
Hier mal die komplette Aufgabe:

Solange der Taster (E 0.0) gedrückt ist, sollen alle 5 Lampen (A1.0 -1.4) nacheinander aufleuchten. Immer wieder von vorne, bis der Taster losgelassen wird. Dann muss dort wo zuletzt die Lampe geleuchtet hat, die Lampe blinken, bis der Taster wieder betätigt wird.
Soweit, so gut.

Jetzt soll die Lampe die schon geblinkt hat, beim nächsten Durchlauf nicht mehr aufleuchten. Wenn alle Lampen schon an waren (also wenn alle schon mal geblinkt haben), fängt es wieder von vorne an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

gebe zu, habe das Programm jetzt nicht im Detail gelesen.

Aber wie wäre es denn, wenn Du z.B. in einem Merkerwort speicherst, welche Lampen schon geblinkt haben. Beim "Durchschieben" vergleichst Du dann mit dem Merkerwort und nur wenn das Bit noch nicht gesetzt war, ist alles ok. sonst muss nochmal geschoben und dann geprüft werden. Wenn alle Lampen als "haben schon geblinkt" markiert sind, muss im nächsten Durchlauf das Merkerwort zurückgesetzt werden. Die Prüfung kann wieder mit ner Wortverknüfung erfolgen.

Hoffe die "Beschreibung" verwirrt nicht mehr als sie hilft.

ulkula
 
Hallo ulkula.

Das Problem ist, dass ich dann für jede einzelne Lampe die blinkt ein Merkerbit setzen müsste (zumindest mit meinem bis jetzt gelernten S7)
Ich soll die Aubgabe aber möglichst kurz halten und mir fehlt dazu noch einiges an Verständniss. Wenn Du das evtl. in einer AWL veranschaulichen könntest, würd mir das vielleicht weiterhelfen.
 
Hallo,
hier mal eine Lösung, kannst du ja was daraus ableiten.


UN T 1 //Takt
L S5T#500MS //Takt
SE T 0 //Takt
U T 0 //Takt
SE T 1 //Takt
U T 0
U E 124.0
ZV Z 1
L Z 1 //überprüfen ob ein zyklus voll
L 4 //überprüfen ob ein zyklus voll
>I //überprüfen ob ein zyklus voll
R Z 1 //überprüfen ob ein zyklus voll
U E 124.0 //wenn abgeschaltet wird springe
FN M 10.0 //wenn abgeschaltet wird springe
SPB ver //wenn abgeschaltet wird springe
UN T 0 //ohne takt dunkel springe
SPB end //ohne takt dunkel springe
UN E 124.0 //wenn ausgeschaltet dann blinke diese lampe
U T 0 //wenn ausgeschaltet dann blinke diese lampe
SPB blin //wenn ausgeschaltet dann blinke diese lampe
L 1 //Bit schieben
T MW 0 //Bit schieben
L Z 1 //Bit schieben
L MW 0 //Bit schieben
SLW //Bit schieben
T MW 14 //Bit schieben
L MW 12 //negation von schon blinkenden lampen
INVI //negation von schon blinkenden lampen
T MW 16 //negation von schon blinkenden lampen
L MW 14 //welches bit ist angesteuert
L MW 16 // negierter wert von schon blinkenden lampen
UW
T MW 18 //diese lampe ansteuern
L MW 18 //diese lampe ansteuern
T AW 124 //diese lampe ansteuern
SPA ene
ver: L MW 18 // wenn ausgeschaltet wird

L MW 12 //überprüfen welche lampen schon blinkend waren
OW
T MW 12 //neue lampe ist eingetragen
L 31 //wenn alle lampen angesteuert
L MW 12 //waren rücksetzen
<=I
SPB loes
SPA ene
blin: L MW 14 //wenn ausgeschaltet dann blinke diese lampe
T AW 124 //wenn ausgeschaltet dann blinke diese lampe
SPA ene
loes: L 0 //wenn alle lampen angesteuert
T MW 12 //waren rücksetzen
SPA ene
end: L 0 //dunkel wenn kein takt
T AW 124 //dunkel wenn kein takt
ene: NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank,

habs gleich mal ausprobiert und es funzt.
Die Zählfunktion muss ich mir aber erst nochmal im Buch anschauen, soweit war ich noch nicht. Aber das ist erstmal ne funktionierende AWL die kurz ist und da kann ich mir sicher einiges herleiten.
Also vielen Dank nochmal dafür.

mfg
 
Zurück
Oben