Programmieren einer Uhr für Minuten und Sekunden

bigrey

Level-1
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Beschreibung:
Eine Uhr soll mit Hilfe von Zählern und Vergleichern programmiert werden, und die
Uhrzeit soll in Minuten und Sekunden auf einer 4-stelligen Anzeige zu sehen sein.
Der fertige Funktionsbaustein FB200 soll das multiplexen des 4-stelligen BCD Schalters übernehmen. Der FB200 soll im PB2 aufgerufen und parametriert werden.Der Sekundentakt soll im Programmbaustein 10 programmiert werden.
Die eigentliche Uhr soll im Programmbaustein 30 programmiert werden.
Parameter:
E0.0 = Uhr stellen (Die Zeit wird an EB2 vorgegeben)
E0.1 = Rückstellen der Uhr auf 00.00
E1.0 = Sekundentakt Ein
EB 2 = Vorgabe Minuten und Sekunden (Multiplexbetrieb)
A4.0 = Sekundentakt
A5.0 = Multiplexausgang für höherwertiges Byte
A5.1 = Multiplexausgang für niederwertigeres Byte
AB 6 = Anzeige Minuten​
AB 7 = Anzeige Sekunden

Kann mir bitte jemand helfen ich weiss einfach nicht weiter =((

 
Hallo bigrey,

Du machst noch ne Schulung auf S5???

Aber nun zu Deinem Problem:
Den PB 10 rufst Du in einem Zeit-OB auf und bildest da einen Sekundenimpuls.
(1 sek. lang 1, 1 sek. lang 0)

Im PB 30 zählst Du dann mit pos. und neg. Flanke einen Zähler hoch.
Ist der Zähler = 59 zählst Du einen zweiten Zähler hoch und setzt den Ersten zurück.
Dann hast Du schon Deine Minuten und Sekunden.

Uhr stellen geht mit "S Z".

Zum Multiplexen hilft Dir vllt. das weiter:
http://www.mikrocontroller.net/articles/Multiplexen

Grüße
Gebs
 
Was checkst Du nicht?

Weshalb wir ne S5 vermutet haben?
In der Aufgabenstellung ist von PB's die rede. Die gabs in der S5. In der S7 gibt es keine mehr.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... als Ergänzung zum Beitrag von Gebs :

Es kommt immer gut, wenn man selbst schon mal mit etwas angefangen hat und seine Frage konkret auch eine Einzelproblemstellung beziehen kann. Das vor Allem bezogen auf die bereits schon gemachte Arbeit (schon erstellter Code).

Gruß
LL
 
hab doch oben geschrieben das ich das multiplexen nicht brauche weil ich ne s7 benutze =)))
hab jetzt schon den sekundentakt nur versteh ich des mit dem BCD nicht wirklich und E=0.0 Uhr stellen weiss ich nicht wie ich des programmieren könnte
 
Hallo bigrey,

das Multiplexen ist unabhängig von der eingesetzten SPS!
Da Du für das Uhrzeitstellen nur ein Byte (EB2) zur verfügung hast, musst Du
wohl oder übel multiplexen, denn für Minuten und Sekunden brauchst Du jeweils ein Byte!
Zum BCD: BCD ist eine Art Zahlen darzustellen. Schau mal hier:
http://de.wikipedia.org/wiki/BCD-Code

Zum Uhrzeitstellen:
Code:
U E0.0 // Soll Zeit gestellt werden?
SPBN WEIT // Nein, dann weiter
L EB2 // Stellwert Min. oder Sek.
S Z 1 // Stellwert an Zähler übergeben
WEIT: NOP 0

Der Code soll nur eine Denkhilfe sein!!!

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mir fehlt nur noch die uhr stellen
alles andere hab ich soweit...
kann mir da jemand helfen bitte =))

jetzt mal zu dem was ich schon gemacht habe :)
Code:
 U     M    100.5
      ZV    Z      1
      NOP   0
      U     "Rückstellen auf 0.00 Uhr"
      L     C#0
      S     Z      1
      U     M      2.0
      R     Z      1
      L     Z      1
      T     MW     1
      NOP   0
      NOP   0


Code:
  L     MW     1
      L     60
      ==I   
      =     L      0.0
      U     L      0.0
      ZV    Z      2
      NOP   0
      U     "Rückstellen auf 0.00 Uhr"
      L     C#0
      S     Z      2
      NOP   0
      L     Z      2
      T     MW     2
      NOP   0
      NOP   0
      U     L      0.0
      BLD   102
      =     M      2.0



Code:
 L     MW     2
      L     60
      ==I   
      =     L      0.0
      U     L      0.0
      ZV    Z      3
      NOP   0
      U     "Rückstellen auf 0.00 Uhr"
      L     C#0
      S     Z      3
      U     M      4.1
      R     Z      3
      L     Z      3
      T     MW     3
      NOP   0
      NOP   0
      U     L      0.0
      BLD   102
      =     M      4.0


Code:
 L     MW     3
      L     24
      ==I   
      =     M      4.1
 
Also denn ...

Wenn man mal von den verwendeten Merkerworten absieht ist das Ergebnis schon ganz passabel ...
MW1 benutzt die MB's 1 und 2
MW2 benutzt die MB's 2 und 3
MW3 benutzt die MB's 3 und 4
usw.
Fällt dir da etwas auf ?

Um die "Uhr" zu stellen müßtest du die gleiche Funktion verwenden, die du nimmst um die Uhr auf 0:00 Uhr zu stellen. Du lädst dann halt nur nicht 0 ind die Zähler sondern den gewünschten Stunden-, Minuten- und/oder Sekundenwert. Das könntest du z.B. so lösen indem du den jeweiligen Wert zunächst in Hilfs-MW's schreibst un die dann auf die Zähler lädst und statt die Funktion "Uhr auf 0:00 stellen" zu nennen nennst du sie dann einfach "Uhr stellen".

Ach ja ... Vergleiche macht man besser auf >= statt auf == ...

Kommst du damit etwas weiter ?

Gruß
LL
 
hat mir geholfen danke =))
nur weiss ich nicht was du mit den MW´s meinst...
kannst mir des noch kurz erklären? wäre sehr nett
danke im Vorraus ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
nur weiss ich nicht was du mit den MW´s meinst...

ich nehm mal eine alte erklärung her, ist zwar für doppelwort, aber vielleicht verstehst du es ja trotzdem

MD 1 ist ein Doppelwort, bestehend aus MW 1 und MW 3, diese Worte bestehen aus jeweils zwei Byte, MW 1 aus MB 1 und MB 2, MW 3 aus MB 3 und MB 4, diese 4 Bytes bestehen aus je 8 Bit also von M1.0 bis M4.7 ...

btw: achtung! persönliche meinung: bytes, wörter und doppelwörter adressier ich gern mit durch 2 dividierbaren zahlen, macht es IMHO übersichtlicher
 
Sieht so aus als ob er doch noch bei S5 ist, oder zumindest die Unterlagen dazu hat. Er hat nur aus den Datenwörtern (Bei S5 noch 2Byte lang!) Merkerwörter gemacht. Klappt natürlich nicht!
 
Was vierlagig sagen will...

Code:
|----------------MD0----------------|
|-------MW0-------|-------MW2-------|
|--MB0---|--MB1---|--MB2---|--MB3---|
|M0.0-0.7|M1.0-1.7|M2.0-2.7|M3.0-3.7|
 
hat mir geholfen danke =))
nur weiss ich nicht was du mit den MW´s meinst...
kannst mir des noch kurz erklären? wäre sehr nett
danke im Vorraus ;)

Anscheinend habe ich dir nicht wirklich geholfen ... :(
Sieh dir doch bitte mal die Zuordnung von Crash an. Da wird das mit den MW's und MB's und den Merkern m.E. schön dargestellt.
Es gibt was das angeht auch übrigens KEINEN Unterschied zwischen S5 und S7 - das war bei der S5 auch so. Vielleicht solltest du dich mit dem Thema der Speicher-Zuordnung (am Beispiel des Merkerbereichs) noch einmal ein BISSCHEN beschäftigen. Das hilft dann auch bei der Erstellung von Programmen.

Gruß
LL
 
Zurück
Oben