Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

840D Operate 4.5 HMI-Oberfläche erweitern, Datum/Uhrzeit anzeigen

Beitrag 01.08.2019, 14:59 Uhr
Der Meister
Der Meister
Level 2 = Community-Facharbeiter
**
Gruppe: Mitglied
Mitglied seit: 22.09.2003
Beiträge: 114
Hallo zusammen,

vorab: Steuerung 840D Operate > 4.5 HMI-Customer-Oberfläche erweitern.

Ich möchte gern Datum/Uhrzeit der Maschine (PLC oder NCU) auf meiner Oberfläche anzeigen. Die Oberfläche ist fertig und läuft bereits aber ein Datums-Zeitstempel fehlt mir noch nach einer Aktion. Ist das überhaupt möglich? Gibt es vielleicht eine System-Variable mit der ich per RNP zugreifen kann? Ich bin für jeden Hinweis dankbar!

Danke vorab!


--------------------
Debugging? Klingonen debuggen nicht.
Unsere Software ist nicht dazu gedacht,
die Schwachen zu verhätscheln.
   
Beitrag 01.08.2019, 15:27 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Es gibt die folgenden 7 Sytemvariablen:
$A_YEAR
$A_MONTH
$A_DAY
$A_HOUR
$A_MINUTE
$A_SECOND
$A_MSECOND (Millisekunden)

Die 7 Variablen stellen insgesamt die "Systemzeit" dar. Ich habe nicht herausgefunden (zumindest nicht auf die Schnelle), was genau die Systemzeit ist.
Vielleicht kannst du mal probieren, ob du damit etwas anfangen kannst.
   
Beitrag 01.08.2019, 15:45 Uhr
Der Meister
Der Meister
Level 2 = Community-Facharbeiter
**
Gruppe: Mitglied
Mitglied seit: 22.09.2003
Beiträge: 114
Also RNP(“$A_HOUR“) hat nicht funktioniert....Ergebnis 0


--------------------
Debugging? Klingonen debuggen nicht.
Unsere Software ist nicht dazu gedacht,
die Schwachen zu verhätscheln.
   
Beitrag 09.09.2019, 11:32 Uhr
CaptainFu
CaptainFu
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 09.09.2019
Beiträge: 49
Es ist womöglich etwas spät für eine Antwort aber besser spät als nie.
Also es gibt in den NC-Variablen eine Variable Namens "sysTimeUdword" diese kann gelesen werden, man kann sie allerdings nicht direkt verwenden, da es sich hierbei um ein Doppelwort handelt und die Zeit und das Datum daher in Binärschreibweise ausgegben wird.
Schaut man sich das in der Diagnose an dann sieht das in etwas so aus :

/Nck/State/sysTimeUdword[1] Wert 0100 1110 0010 1011 1110 1000 1010 usw.

Wobei die ersten 6 Bits für die Sekunde stehen, die nächsten 6 für die Minute, dann kommen 5 für Stunde usw.. Bitte nachlesen in der DocOnCd wer es genau wissen will.
Um das jetzt in eine brauchbare Anzeige zu wandeln könnte man in den Definitionen euerer Maske bzw. euerer Bedienoberfläche eine Variable anlegen, dadurch wird sie auch gleichzeitig zyklisch abgeholt, und die benötigten Werte dann entsprechend ausmaskieren. Also in etwas so:

Def DateTime=(I////wr4//"/Nck/State/sysTimeUdword[1]"/0,0//)

dann braucht man noch ein paar Hilfsvariablen um sie die Werte zu merken.

Def ZeitJahr
Def ZeitMonat
Def ZeitTag
Def ZeitStunde
Def ZeitMinute
Def ZeitSekunde

und dann wie gesagt ausmaskieren, ich habe das dann alles als Integer geschrieben, ist etwas handlicher als in Binärschreibweise und mal in einem Change Block geworfen um es zu testen.

Change(DateTime)

;Sekunden ausmaskieren (6 Bits)
ZeitSekunde=DateTime Band 63

;BitShit auf die Minuten
ZeitMinute=DateTime Shr 6
;Minuten ausmaskieren (6 Bits)
ZeitMinute=ZeitMinute Band 63

;BitShit auf die Stunde
ZeitStunde=DateTime Shr 12
;Stunden ausmaskieren (5 Bits)
ZeitStunde=ZeitStunde Band 31

;BitShit auf den Tag
ZeitTag=DateTime Shr 17
;Tag ausmaskieren (5 Bits)
ZeitTag=ZeitTag Band 31

;BitShit auf den Monat
ZeitMonat=DateTime Shr 22
;Monat ausmaskieren (4 Bits)
ZeitMonat=ZeitMonat Band 15

;BitShit auf`s Jahr und fertig
ZeitJahr=DateTime Shr 26

Dlgl("Datum: "<<ZeitTag<<"."<<ZeitMonat<<"."<<ZeitJahr<<" Zeit: "<<ZeitStunde<<":"<<ZeitMinute<<":"<<ZeitSekunde<<"s")
End_Change

Als Ergebnis sollte dann in der Dialogzeile erscheinen "Datum: 9.9.19 Zeit: 12:29:25s"

Ich gehe davon aus, da ihr ja selbst eure Bedienoberflächen ergänzt, das das so einigermaßen geläufig ist. Es spricht natürlich auch nichts dagegen die Variable, nur bei Bedarf, mit "Rnp" zu lesen und dann für eine Zeitstempel zu verwenden.
Hoffe ich konnte damit weiter helfen.
   
Beitrag 14.09.2019, 13:46 Uhr
Der Meister
Der Meister
Level 2 = Community-Facharbeiter
**
Gruppe: Mitglied
Mitglied seit: 22.09.2003
Beiträge: 114
Das probiere ich, vorab danke für die ausführliche Antwort!


QUOTE (CaptainFu @ 09.09.2019, 12:32 Uhr) *
Es ist womöglich etwas spät für eine Antwort aber besser spät als nie.
Also es gibt in den NC-Variablen eine Variable Namens "sysTimeUdword" diese kann gelesen werden, man kann sie allerdings nicht direkt verwenden, da es sich hierbei um ein Doppelwort handelt und die Zeit und das Datum daher in Binärschreibweise ausgegben wird.
Schaut man sich das in der Diagnose an dann sieht das in etwas so aus :

/Nck/State/sysTimeUdword[1] Wert 0100 1110 0010 1011 1110 1000 1010 usw.

Wobei die ersten 6 Bits für die Sekunde stehen, die nächsten 6 für die Minute, dann kommen 5 für Stunde usw.. Bitte nachlesen in der DocOnCd wer es genau wissen will.
Um das jetzt in eine brauchbare Anzeige zu wandeln könnte man in den Definitionen euerer Maske bzw. euerer Bedienoberfläche eine Variable anlegen, dadurch wird sie auch gleichzeitig zyklisch abgeholt, und die benötigten Werte dann entsprechend ausmaskieren. Also in etwas so:

Def DateTime=(I////wr4//"/Nck/State/sysTimeUdword[1]"/0,0//)

dann braucht man noch ein paar Hilfsvariablen um sie die Werte zu merken.

Def ZeitJahr
Def ZeitMonat
Def ZeitTag
Def ZeitStunde
Def ZeitMinute
Def ZeitSekunde

und dann wie gesagt ausmaskieren, ich habe das dann alles als Integer geschrieben, ist etwas handlicher als in Binärschreibweise und mal in einem Change Block geworfen um es zu testen.

Change(DateTime)

;Sekunden ausmaskieren (6 Bits)
ZeitSekunde=DateTime Band 63

;BitShit auf die Minuten
ZeitMinute=DateTime Shr 6
;Minuten ausmaskieren (6 Bits)
ZeitMinute=ZeitMinute Band 63

;BitShit auf die Stunde
ZeitStunde=DateTime Shr 12
;Stunden ausmaskieren (5 Bits)
ZeitStunde=ZeitStunde Band 31

;BitShit auf den Tag
ZeitTag=DateTime Shr 17
;Tag ausmaskieren (5 Bits)
ZeitTag=ZeitTag Band 31

;BitShit auf den Monat
ZeitMonat=DateTime Shr 22
;Monat ausmaskieren (4 Bits)
ZeitMonat=ZeitMonat Band 15

;BitShit auf`s Jahr und fertig
ZeitJahr=DateTime Shr 26

Dlgl("Datum: "<<ZeitTag<<"."<<ZeitMonat<<"."<<ZeitJahr<<" Zeit: "<<ZeitStunde<<":"<<ZeitMinute<<":"<<ZeitSekunde<<"s")
End_Change

Als Ergebnis sollte dann in der Dialogzeile erscheinen "Datum: 9.9.19 Zeit: 12:29:25s"

Ich gehe davon aus, da ihr ja selbst eure Bedienoberflächen ergänzt, das das so einigermaßen geläufig ist. Es spricht natürlich auch nichts dagegen die Variable, nur bei Bedarf, mit "Rnp" zu lesen und dann für eine Zeitstempel zu verwenden.
Hoffe ich konnte damit weiter helfen.


--------------------
Debugging? Klingonen debuggen nicht.
Unsere Software ist nicht dazu gedacht,
die Schwachen zu verhätscheln.
   
Beitrag 23.09.2019, 10:46 Uhr
Der Meister
Der Meister
Level 2 = Community-Facharbeiter
**
Gruppe: Mitglied
Mitglied seit: 22.09.2003
Beiträge: 114
Kurze Rückmeldung: Ich konnte soeben unsere Oberfläche mit dem Codebeispiel erweitern und testen. Funktioniert alles einwandfrei!
Dickes Dankeschön geht an "CaptainFu".


--------------------
Debugging? Klingonen debuggen nicht.
Unsere Software ist nicht dazu gedacht,
die Schwachen zu verhätscheln.
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: