Step 7 Uhrzeit - Datendoppelwort Wert in zB. MB's aufteilen

Ray_k1

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend!
Habe ein kleines Problem! (SimaticS7 315 2DP)
Ich lese die Uhrzeit aus (für eineSchaltuhr), und schreibe den Wert in ein DBxxx.DBDyyy!
Die Schaltuhr funktionierteinwandfrei, da ich immer DBD mit DBD vergleiche!
Jetzt brauche ich aber zusätzlichfür eine Grafische anzeige, dafür sollten Stunden und Minuten wert separat in zwei Daten Bytes geschrieben werden!
Daher meine Frage:
Wie kann ich das am leichtesten lösen, das in ein MB zb. den Stundenwert schreibt, und in einem anderen den Minutenwert? Hoffentlich habe ich es einigermaßen verständlich geschrieben.
Für Tips wäre ich sehr dankbar.
 
Uhrzeit auslesen mit der sfc1 read_clk
Ausgabeformat ist dann "Date and Time"8 Bytes lang, also 2 Doppelworte. Am besten machst du in einem dB einen Eintrag vom Typ Date and Time und klickst ihn an, drückst dann mal F1.
Dort steht dann vom Jahr bis zur Millisekunde alles drinnen.
Im Byte 0 steht das Jahr
BCD kodiert.
Also in einem Byte die 15
Das brauchst du wahrscheinlich getrennt.
Geht dann folgendermaßen:
L DB[Bausteinnummer].DBB[erstes Byte von deinem Date and Time Eintrag]
SRD 4
T MW[Ausgabe Merkerwort für die Zehnerstelle]
L DB[Bausteinnummer].DBB[erstes Byte von deinem Date and Time Eintrag]
L W#16#F
UW
T MW[Ausgabe Merkerwort für die Einerstelle]

Sollte Funktionieren.





Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau Dir in der Step7-Hilfe den Aufbau des Datentyps DATE_AND_TIME an. Hole aus Deiner Uhrzeit/DATE_AND_TIME-Variable das Byte mit der Stunde und das Byte mit der Minute, wandele die Werte jeweils von BCD in INT und speichere in Deine separaten Variablen.

Eine gute Idee wäre auch, mit der Forumssuche nach "DATE_AND_TIME stunde minute" zu suchen, da werden viele Erklärungen für Dein Problem aufgelistet, auch Programmbeispiele und sogar komplette Zerlegungen von DATE_AND_TIME in die Einzelteile, z.B. diese.

Eine einfache Lösung in AWL könnte so aussehen:
Code:
      LAR1  P##Mein_Date_and_Time

      L     B [AR1,P#3.0]
      BTI
      T     #Stunde

      L     B [AR1,P#4.0]
      BTI
      T     #Minute

Harald
 
Danke euch für die Hinweise.
Habe jetzt die Variante gewählt, dass ich die mit SFC1 gelesene Zeit direkt in den DB1 schreibe und von dort dann mit der direkten Adressierung auslese.

m0: CALL SFC 1
RET_VAL:=MW0
CDT:=DB1.Schicht1.Startzeit

L DB1.DBB 4
T AB 4
 
Zurück
Oben