Step 7 Erweiterung eines Lauflichts

sRobert

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits.

Bin da kompletter Neuling und habe da mal eine Frage
Ich muss ein Lauflicht mit einem Taster zum stoppen und starten basteln. 5 lichter sind angeschlossen.
Wenn man den knopf gedrückt hällt soll das Lauflicht laufen und wenn man es loslässt soll es an der Stelle blinken. Beim erneuten einschalten soll es seine Arbeit von genau der Stelle aus weitermachen.

Soweit so gut, Signal und einen cpu timer Positiv flanken, auf ein Merkerbit schieben.
Zähler aufbauen und durch das Merkerbit starten.
Sprungleiste aufbauen und bei den jeweiligen Sprungpunkten
exklusiv entweder Taster = Ausgang
exklusiv nicht Taster und Timer = Ausgang blinkend

das funzt soweit

jetzt soll ich das ganze aber erweitern, wenn ein Ausgang schon mal geblinkt hat soll er bei der nächsten Runde aussetzen usw bis keiner mehr angesteuert wird.
also erst 5 Lauflicht mit Blinkern
nachm Stopp 4 Lauflicht mit Blinkern usw.
er soll sich auch noch merken welches da nicht mehr mitblinken darf
nachdem alle nicht mehr blinken soll das ganze von vorne losgehen.

So und da stehe ich ein wenig aufm Schlauch. Ich komme irgendwie auf keinen vernünftigen Ansatz..
kann man das ganze überhaupt erweitern oder muss ich da was neues aufbauen? Sind Loops die Lösung oder muss ich da den jeweiligen Blinkern nen Merker setzen und da irgendwie weiterarbeiten??
Wild durch die Gegend springen?

Hat da wer mal ne Hilfestellung?
Das ganze passiert auf simatic s7 und soll in AWL geschrieben werden.

Danke schon mal
 
Da es nur so wenige Leuchten sind könntest du das mit einem Loop und zwei Wörtern machen.
In einem Wort setzt du das Bit zum leuchten bzw. blinken.
Im zweiten Wort setzt du das Bit um zu speichern dass diese Leuchte schon geblinkt hat.

Mit dem Loop gehst du jetzt bit für bit beider Worte durch und schaust ob im wort zwei grad das entsprechende Bit schon geblinkt hat. wenn nicht lass es leuchten bzw blinken je nachdem in welchem Status du bist.

Du könntest auch ohne Loop arbeiten und die Wörter durchrotieren (stichwort RLD/RRD). Und dann immer von beiden Wörtern das 0te Bit anschauen vergleichen und ansteuern.

Das dürfte auch so ne typische Aufgabe für einen Loop im Zusammenspiel mit Pointer und einem array of struct sein. Wenn du dann ganz krass und gewieft rüberkommen willst.

Du könntest also für eine Leuchte eine Struktur oder UDT definieren wo drin steht
Ein : bool
hat_geblinkt : bool
Betriebsstunden : DINT // so als beispiel das dann dem Erweitern nahezu keine Grenzen gesetzt sind.
Rot_anteil : byte // Man könnte dann z.B. auch gleich RGB Leds bedienen.
gruen_anteil : byte
blau_anteil : byte

mfG René
 
Ok Problem gelöst. Danke nochmal René. Das was du vorgschlagen hast klingt super aber bei meiner Umsetzung hapert es noch, muss mich da mal genau einlesen, die Wortüberprüfung wirft noch ein paar ?? bei mir auf.

Warsch unschöner aber trotzdem wirksam.
Bit beim Blinker setzen
Bit und negierter Blinker verhindert ausführen des jeweiligen Sprungschrittes
Wenn sich alle Bits, also von jedem Licht eins angesammelt haben dann über ein Signal resetten
Dann geht der spass von vorne los.
 
Zurück
Oben