Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
S7 300 CPU Automatischer abgleich der Uhrzeit,Datum u. Wochentag mit dem PC
#1
Hallo,
ist es möglich die Uhrzeit,Datum und den Wochentag der S7 300 CPU mit dem PC enmal Wöchentlich automatisch abzugleichen.  
Datentyp der CPU = Data_and_Time (2*DWord)
Der Lokaldatenpunkt #VISAM_SYN muss vor dem abgleich auf High gesetzt werden.


Ausschnitt des Programms der CPU300 in AWL

          U       "HIGH"                       // Hilfsmerker immer HIGH
          =       #FRG_SYN
//
          U       #FRG_SYN
          U       #VISAM_SYN       // muss vor dem Abgleich auf High sein
//
          UN     #FRG_SYN
          R       #VISAM_SYN
//
          UN     #SYN
          SPB    M001
          CALL  "SET_CLK"         SFC0      // Set System Clock
            PDT        :=#DT_VISAM         
            RET_VAL  :=#TEMP0
          R       #VISAM_SYN 
M001: NOP  0
//
          CALL  "READ_CLK"      SFC1     // Read System Clock
            RET_VAL  :=#TEMP0
            CDT        :=#DT_CPU
          BEA
Antworten
#2
Hallo therme,
leider können wir zu dem SPS code keinen Support geben, wir können nur die Funktionsweise innerhalb von Visam beschreiben.

Es gibt in den Projekteigenschaften in der Reiterkarte "Info/Zeit" die Möglichkeit auszuwählen ob die PC Zeit an die SPS oder umgekehrt übertragen werden soll.
Dazu müssen Sie die Markierung auf "VDF >> Remote" oder "Remote >> VDF" setzen.
Es werden dann zwei Datenworte benötigt, wobei das eine Stunde und Minute überträgt, und das andere Wort Tag und Monat. Die Worte sind dabei dann in zwei Byte unterteilt die jeweils Stunde und Minute und im anderen Wort Tag und Monat beinhalten.
Ralph Ringel
Vertrieb / Support
Tel: +49 (0)2631 941288-35
Antworten
#3
Hallo,
mit dieser Funktion "Info/Zeit" habe ich das Problem, dass das erste Byte beim Datentyp Date_and_Time, das Jahr ist, das gleiche Problem habe ich mit Stunden_Minuten Wort.
Gibt es eine Möglichkeit ein Wort zu senden das mit dem Zwieten Byte anfängt?

Der Datentyp Date_and_Time
Bytes      Inhalt    
0            Jahr
1            Monat
2            Tag
3            Stunden
4            Minuten
5            Sekunden
Antworten
#4
Hallo therme,

anbei ein Beispielprojekt wo 2 Bytes von verschiedenen Quellen (Jahr&Monat) in ein neues Wort zusammengefügt werden.


.zip   Datum_uhrzeit_schreiben.zip (Größe: 37,38 KB / Downloads: 7)


(13.01.2013, 00:33)therme schrieb: Hallo,
mit dieser Funktion "Info/Zeit" habe ich das Problem, dass das erste Byte beim Datentyp Date_and_Time, das Jahr ist, das gleiche Problem habe ich mit Stunden_Minuten Wort.
Gibt es eine Möglichkeit ein Wort zu senden das mit dem Zwieten Byte anfängt?

Der Datentyp Date_and_Time
Bytes      Inhalt    
0            Jahr
1            Monat
2            Tag
3            Stunden
4            Minuten
5            Sekunden
Antworten
#5
Das ist schon mal super!

Wie kann man hier noch den Wochentag hinzufügen der im Datentyp Date_and_Time in Byt 7 in den letzten 4 Bites  (LSB 4) liegen.
Huh
Antworten
#6
(24.03.2013, 21:39)therme schrieb: Das ist schon mal super!

Wie kann man hier noch den Wochentag hinzufügen der im Datentyp Date_and_Time in Byt 7 in den letzten 4 Bites  (LSB 4) liegen.
Huh
Die Script-Funktion

VDF.WriteBitb Gruppe,PV,Offset,BitAnzahl,Wert

kann sowas.
Für Wert geben Sie den Wochentag an, BitAnzahl=4 ,
Offset ist der BitOffset .
Antworten
#7
(25.03.2013, 13:32)S.Rings schrieb:
(24.03.2013, 21:39)therme schrieb: Das ist schon mal super!

Wie kann man hier noch den Wochentag hinzufügen der im Datentyp Date_and_Time in Byt 7 in den letzten 4 Bites  (LSB 4) liegen.
Huh
Die Script-Funktion

VDF.WriteBitb Gruppe,PV,Offset,BitAnzahl,Wert

kann sowas.
Für Wert geben Sie den Wochentag an, BitAnzahl=4 ,
Offset ist der BitOffset .

Ok,
bei diesem Script "Datum_uhzeit_schreiben"wo, Jahr, Monat, Tag, Stunden, Minuten, Sekunden, automatisch von der PC Uhr gelesen, und dann mit den Übertragungsbutten an die CPU übertragen werden.
Ist es möglich das Script zu erweitern und den Wochentag aus dem PC herauszulesen und mit zu übertragen?
Huh

Wochentag vom Datentyp "DATE_AND_TIME" Byt 7 (4 LSB) 1= Sonntag
Antworten
#8
(28.03.2013, 23:13)therme schrieb:
(25.03.2013, 13:32)S.Rings schrieb:
(24.03.2013, 21:39)therme schrieb: Das ist schon mal super!

Wie kann man hier noch den Wochentag hinzufügen der im Datentyp Date_and_Time in Byt 7 in den letzten 4 Bites  (LSB 4) liegen.
Huh
Die Script-Funktion

VDF.WriteBitb Gruppe,PV,Offset,BitAnzahl,Wert

kann sowas.
Für Wert geben Sie den Wochentag an, BitAnzahl=4 ,
Offset ist der BitOffset .

Ok,
bei diesem Script "Datum_uhzeit_schreiben"wo, Jahr, Monat, Tag, Stunden, Minuten, Sekunden, automatisch von der PC Uhr gelesen, und dann mit den Übertragungsbutten an die CPU übertragen werden.
Ist es möglich das Script zu erweitern und den Wochentag aus dem PC herauszulesen und mit zu übertragen?
Huh

Wochentag vom Datentyp "DATE_AND_TIME" Byt 7 (4 LSB) 1= Sonntag

Wochentag = Weekday(now)  'ermittelt den Wochentag als Zahl
Antworten
#9
Hallo S.Rings,
die S7 benötige 'DATE_AND_TIME' in BCD (Binär Codierte Dezimalzahl) oder Hex müsste auch gehen.
Wie kann man einen Integer(wenn möglich Byt weise) in BCD oder Hex Wandeln?
Antworten
#10
(17.05.2013, 19:59)therme schrieb: Hallo S.Rings,
die S7 benötige 'DATE_AND_TIME' in BCD (Binär Codierte Dezimalzahl) oder Hex müsste auch gehen.
Wie kann man einen Integer(wenn möglich Byt weise) in BCD oder Hex Wandeln?

Werte nach HEX wandeln ist einfach, denn die Hexadezimale Darstellung ist als Variablentyp ja ein String :

ScriptCode schrieb:HString=""
HString=Hex(Wert)


zurück von Hex nach Integer geht es mit:

ScriptCode schrieb:Wert=val("&H" + HString)




um Werte Binär zu bearbeiten (also einzelne Bits aus einem Byte verarbeitet)
kann man auch die Funktionen vdf.readbin() und vdf.Writebin verwenden.
Wenn man das ganze denn auf 4 Stellen beschränkt hat man schon eine
einzelne BCD-Zahl.

vdf.ReadBin liefert eine String zurück:


So ist zum Bsp die Zahl

Dezimal= 17

in Hex= 11

und in Binär= 10001



Anderes Beispiel:
entsprechend die Zahl BCD = 98

Binär = 1001 1000
Dezimal = 152
Hex = 98 'und das ist genau die BCD Zahl !



siehe auch:

http://de.wikipedia.org/wiki/BCD-Code
Antworten


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste