B&R Timestamp

SNTP ist ein auf dem NTP basierendes Zeitsynchronisierungsprotokoll. Meist gibt es auf den Geräten einen Client, bei dem nur die Server IP angegeben werden müssen.
Wenn du dies selbst ausprogrammieren willst, muss du dir das NTP Protokoll ansehen. Hab dies aber selbst noch nicht ausprogrammieren müssen.
(Als Ansatz für weitere Quellen ist glaube ich Wiki ganz ok: http://de.wikipedia.org/wiki/Network_Time_Protocol)

Wenn du die CPU mit einem bestehenden Zeitserver synchronisieren willst, wäre die Verwendung des SNTP Clients auf der B&R CPU vermutlich leichter. Kannst du an der gleichen Stelle in der Sysconf einstellen und IP angeben.

Die Zeit des SNTP Servers entspricht der eingestellten Zeit der CPU, sollte das deine Frage sein. Die kannst du über die RTC_gettime Funktion aus des Syslib bzw mit der DTGettime aus der AsTime wenn du die aktuelle Variante verwenden willst, auslesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

in der Konfiguration habe ich einen SNTP Server eingetragen, mein Programm:


DTGetTime_1.enable = enable;
DTGetTime(&DTGetTime_1);
status = DTGetTime_1.status;
DT1 = DTGetTime_1.DT1;

Es wird aber immer DT#1970-01-01-00:00:00 angezeigt.
 
Hi,
Scheint, dass die SPS keine Verbindung zum Server bekommt.
Ist der Server im gleichen Netzwerk wie die SPS? (Ethernetschnittstelle der CPU, IP Adresse und Subnetmask kontrollieren)
Zeitintervall für Synchonisierung hast aber schon gewartet oder? ( Standard 1 min)

Schon im Loggbuch geschaut ob hier etwas dazu eingetragen ist?
 
Hallo und Danke,

nun funktioniert es, hab den Baustein nicht enabled.

Wie kann ich diesen Datentyp nach der Unix Timestamp umwandeln? Gibt es dafür eine Funktion?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
DATE_AND_TIME


Der Datentyp DATE_AND_TIME wird zum Ablegen von Datums- und Uhrzeitangaben
verwendet.

Intern werden dazu die seit 1.1.1970 00:00 vergangenen Sekunden in einer 32
Bit-Zahl abgelegt. Angezeigt wird der Wert im IEC61131-3 Datumsformat.

Als Datum werden Werte zwischen DT#1970-01-01-00:00 und
DT#2106-02-06-06:28:15 akzeptiert. Die Auflösung beträgt 1 Sekunde.


Eine Funktion nach Unix Format gibt es glaube ich nicht. Wie das Unixformat aussieht weiß ich nicht und müsste ich auch googln.

Do it Your self ;)
 
Da es mich interessiert hat:

Laut wiki:

[h=2]Hintergrund[Bearbeiten][/h]Die Unixzeit zählt die seit dem 1. Januar 1970 abgelaufene Zeit in Sekunden.[SUP][1][/SUP] Am 19. Januar 2038 um 03:14:08 Uhr UTC wird die Anzahl der vergangenen Sekunden die Kapazität einer vorzeichenbehafteten 32-Bit-Ganzzahl (maximal 2.147.483.647) überschreiten.[SUP][2][/SUP] Das signifikanteste Bit (MSB) wird laut Konvention dazu verwendet, positive und negative Zahlen zu unterscheiden (Vorzeichen im Zweierkomplement), sodass die Zählung bei einer Überschreitung des Wertes 2.147.483.647 (binär 01111111111111111111111111111111) in den negativen Bereich springt (z. B. −2.147.483.648 binär 10000000000000000000000000000000). Das führt bei einer ungenügend


Ist also schon im richtigen Format im Speicher, musst also nur auf einen anderen Datentyp bringen bzw. rüberkopieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
gibt verschiedene Möglichkeiten:
- In eine neue Variable kopieren: memcpy Funktion, Zielvariable ein UDINT z.B.
- Dynamische Variable Referenz Typ UDINt auf die Adresse der Var DATE_AND_TIME
- Typkonvertierung...
 
Zurück
Oben