Problem mit Werteumwandlung BCD nach Integer

urlicht

Level-2
Beiträge
104
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Folgendes Problem:
Zeitschaltuhr das Uhrzeiten im Integerformat bearbeitet, wobei "123" 01:23Uhr entspricht und "0" z.B. 0:00Uhr. Funzt alles prima. Jetzt möchte ich aber verhindern, daß der Timer bei Eingabe unsinniger Uhrzeiten (z.B. "1263", was 12:63Uhr entsprechen würde) schaltet.
Umzu Überprüfen, ob Minuten größer 59 sind habe ich in u.a. AWL erst die Einschaltzeit #TEIN in BCD gewandelt, 8 Bit links, dann 8 Bit rechts geschoben, um die Stunden zu eliminieren, wieder in INT zu wandeln und zu überprüfen. Ist die Überprüfung auf Minuten >59 negativ, wird die Ausschaltzeit #TAUS geprüft. Es funktioniert alles bis zur Rückwandlung von #TAUS BCD nach Integer (ab Zeilen die mit ** anfangen).
Der letzte BTI-Befehl setzt die CPU (315-2DP) in Stop.
Ich komm nicht drauf, warum, da es beim ersten mal ja klappt.


L #TEIN //#TEIN in BCD wandeln
ITB
SLW 8 //sechs Stellen nach links verschieben
SRW 8 //sechs Stellen nach rechts verschieben
BTI //zurückwandeln in INT (nur beide niederwertigste Stellen)
L 59
>I //wenn größer 59
SPB RST //dann springe zur Marke "Reset"
L #TAUS //#TAUS in BCD wandeln
ITB
SLW 8 //sechs Stellen nach links verschieben
SRW 8 //sechs Stellen nach rechts verschieben
**BTI //zurückwandeln in INT (nur beide niederwertigste Stellen)
**L 59
**>I //wenn größer 59
**SPB RST //dann springe zur Marke "Reset"
NOP 0
 
gib mal bei TEIN eine Zeit größer 10:00 Uhr ein
dann fliegt dir das ding schon da raus ...

[edit][strike]Siemens BCD[/strike] ITB [/edit] kann nur +/- 999
 
Zuletzt bearbeitet:
Integer ist halt einfach

Ich verwende das Integer-Format für die Schaltuhr, weil sie halt einfach ist. Alle anderen Formate müssen ebenfalls auf einen gültigen Wertebereich überprüft werden können.
Ausserdem schubse ich diese Werte z.T. über Profibus FMS und / oder Ethernet auf alte S5-Steuerungen115U/135U.
Die +/-999-Grenze bei BCD hatte ich vergessen. Danke an Thomas_v2.1 und alle anderen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ergänzende Bemerkung zu Integer

Integer ist an sich schon sicher bei Uhrzeiten. Ich generiere die Istzeit auch über die Systemzeit per Umwandlung in Stunden/Minuten.
Hier sind keine Fehler zu erwarten.
Fehleingaben im Stundenbereich lassen sich einfach per Auswerutung <=I oder >=I bewerkstelligen.
Fehleingaben bei Minuten führen einfach zum Schalten beim nächsten Stundenübergang. Beispiel: Ein bei 1263 (entspäche 12:63Uhr). Um 13:00Uhr ist das Problem erledigt, da 1300>1263 ist.
Ausserdem wollte ich die Möglichkeit des Tagesgrenzenüberschreitenden Schaltens (ein 23:00, aus 01:30). Tut ja auch. Die Minutenüberprüfung hätte es nur Narrensicher gemacht.
Die Darstellung auf dem Prozessleitsystem und den Vor-Ort-Bedienpanels (Touch-Panels) wird durch Kommaverschiebung klarer gemacht. hier erscheint dann 12,53 statt 12:53. Danke an alle.
 
Zurück
Oben