Ülesanne: Jooksvad tuled (automaatne)
Ülesande püstitus
Kõrvuti on 8 LED indikaatorit. Vajutades surunuppu S1 peab neist esimene süttima. Iga 0.2s tagant peab eelnev LED automaatselt kustuma ja süttima järgmine.
Kui rivi viimane LED on süttinud, siis peab sama protsess jätkuma äraspidiselt kuni jõutakse tagasi rivi esimese LED-ini.
Jõudes tagasi algusesse hakkab kõik korduma.
Tulesid peab olema võimalik peatada vajutades nuppu S2 ning nupuga S1 taaskäivitada.
Nupu all hoidmise aeg ei tohi tulemust mõjutada.
Programm
|
Nimi |
Andmetüüp |
Aadress |
Kommentaar |
|
S1 |
BOOL |
%I0.0 |
Startnupp |
|
S2 |
BOOL |
%I0.1 |
Stoppnupp |
|
frontmemory1 |
BOOL |
%M0.0 |
Tõusva frondi tuvastuse mälubitt |
|
frontmemory2 |
BOOL |
%M0.1 |
Tõusva frondi tuvastuse mälubitt |
|
direction |
BOOL |
%M0.2 |
Liikumissuuna mälubitt |
|
run |
BOOL |
%M0.3 |
sisselülituse mälubitt |
|
count |
USInt |
%MB1 |
koha lugemise mälu |
|
OutByte |
BYTE |
%QB0 |
Väljundbait (8 LED) |
Programm: Main [OB1]
SCL |
|
IF "S1" AND NOT "frontmemory1" THEN
"run":=true;
END_IF;
IF "s2" AND NOT "frontmemory2" THEN
"run":=false;
END_IF;
IF "IEC_Timer_0_DB".Q THEN
"OutByte":= SHL(IN:=B#2#1, N:="count");
IF "direction" THEN
"count":="count"-1;
ELSE
"count":="count"+1;
END_IF;
END_IF;
IF "count" = 0 THEN "direction":=false;
ELSIF "count"= 7 THEN "direction":=true;
END_IF;
"frontmemory1":="S1";
"frontmemory2":="s2";
"IEC_Timer_0_DB".TON(IN:="run" AND NOT "IEC_Timer_0_DB".Q ,PT:=t#0.2s);
|