DCF77_TIME_EX

DCF77_TIME_EX 1:

Mit dem Funktionsbaustein "DCF77_TIME_EX" kann das DCF-77 Funkuhr-Signal dekodiert werden. Im Gegensatz zu dem "DCF77_TIME"-Funktionsbaustein werden bei diesem Baustein standardmäßig zwei aufeinanderfolgende Telegramme auf Plausibilität geprüft.

Über eine steigende Flanke am RUN-Eingang wird die Dekodierung gestartet und fortgesetzt, solange der RUN-Eingang gesetzt ist. Der Funktionsbaustein braucht im ungünstigsten Fall maximal eine Minute um sich zu synchronisieren, und zwei weitere Minuten um Daten für die nächste Minute zu dekodieren. Während dieser Zeit wird auf die fehlende 59. Sekundenmarke gewartet. Intern findet bei dem Funktionsbaustein eine Abtastung des DCF-77 Signals statt. Um die Flanken fehlerfrei abtasten zu können, sollte der Funktionsbaustein in jedem Zyklus der SPS einmal aufgerufen werden. Bei einer Zykluszeit <= 25ms können zufriedenstellende Ergebnisse erzielt werden. Bei einem fehlenden oder fehlerhaften DCF-77 Signal wird der ERR-Ausgang auf TRUE gesetzt und ein entsprechender Fehlercode am ERRID-Ausgang gesetzt. Bei dem nächsten fehlerfreien Empfang werden die ERR- und ERRID-Ausgänge zurückgesetzt. Manche der Empfänger liefern ein invertiertes DCF-77 Signal. In so einem Fall muss das Signal zuerst invertiert werden und dann an den DCF_PULSE-Eingang geleitet werden. Bei einem fehlerfreien Betrieb wird die aktuelle Zeit im Minutentakt am CDT-Ausgang aktualisiert. Dabei wird für einen Zyklus der SPS bei der Nullten Sekunde der READY-Ausgang auf TRUE gesetzt. In dieser Zeit ist die DCF-77 Zeit am CDT-Ausgang gültig und kann im SPS-Programm ausgewertet werden. Der READY-Ausgang wird nur dann gesetzt, wenn die Daten für die kommende Minute fehlerfrei empfangen werden konnten. Die Fehlererkennung wird mit Hilfe der übertragenen Paritätsbits durchgeführt und die zwei letzten Telegramme auf Plausibilität überprüft. Bei schlechten Empfangsverhältnissen kann eine zu 100% fehlerfreie Erkennung nicht gewährleistet werden. D.h. bei zwei fehlerhaften (invertierten) Bits in zwei danach folgenden Telegrammen kann der Funktionsbaustein keinen Fehler erkennen und setzt den READY-Ausgang ebenfalls auf TRUE. Durch die Plausibilitätsprüfung ist die Wahrscheinlichkeit, dass die passenden Bits verfälscht werden und ein solcher Fehler nicht erkannt wird recht gering.

Die auftretenden Fehler während des Empfangs werden von dem Funktionsbaustein registriert. Der ERRCNT-Ausgang ist ein Fehlerzähler. Der Zähler gibt Auskunft über die Anzahl der aufgetretenen Fehler seit dem letzten fehlerfreien Empfang. Bei dem nächsten fehlerfreien Empfang wird dieser Zähler zurückgesetzt.

Zeitcode

Während jeder Minute werden die Nummern von Jahr, Monat, Tag, Wochentag, Stunde, Minute BCD-codiert durch Impulsmodulation der Sekundenmarken übertragen. Die übertragenen Informationen gelten jeweils für die nachfolgende Minute. Jede Sekunde wird eine der Sekundenmarken übertragen. Dabei entspricht eine Sekundenmarke mit der Dauer von 0.1s einer binären Null und eine mit der Dauer von 0.2s einer binären Eins. Die Informationen werden mit 3 Prüfbits ergänzt. Bei der 59. Sekunde fehlt die Sekundenmarke und diese "Lücke" kann zur Synchronisation des Empfängers benutzt werden.

VAR_INPUT

VAR_INPUT
    DCF_PULSE  : BOOL;
    RUN        : BOOL;
    TLP        : TIME := 140ms;
END_VAR

DCF_PULSE: Das DCF-77 Signal.

RUN: Eine steigende Flanke an diesem Eingang initialisiert den Funktionsbaustein und startet die Dekodierung des DCF-77 Signals. Wird dieser Eingang zurückgesetzt, dann wird die Dekodierung gestoppt.

TLP: Über diesen Eingang wird abhängig von der Spezifikation des Empfängers eine feste Grenze zur Unterscheidung zwischen Null und Eins festgelegt. Bei einem gestörten Signal sind die Impulsbreiten immer kleiner. In den Empfängerspezifikationen finden sich meistens Angaben über minimale und maximale Impulsbreiten der beiden logischen Signale, wobei breitere Impulse bei höheren Feldstärken zu erwarten sind und schmale Impulse bei niedrigen Feldstärken oder entsprechenden Störverhältnissen. In der Nähe des Senders (wo die Feldstärke sehr groß ist) können ebenfalls Probleme entstehen, wenn die Impulsbreite der logischen Null zu groß wird. Prüfen Sie deshalb die Spezifikation des eingesetzten Empfängers und konfigurieren entsprechend die Impulslänge.

Z.B.: in der Spezifikation von Atmel T4227 (Time Code Receiver) wird folgende Pulslänge angegeben:
100ms Pulse (Null): Min: 70ms, Typical: 95ms, Max: 130ms
200ms Pulse (Eins): Min 170ms, Typical 195ms, Max 235ms
Für diesen IC wäre ein Grenzwert von 150ms optimal = 130 + ( ( 170ms - 130ms ) / 2 ).

DCF77_TIME_EX 2:

Wenn der konfigurierte Grenzwert für die Impulslänge einen zu kleinen Wert hat, dann werden kurze Impulse als lange erkannt. Umgekehrt gilt, wenn der konfigurierte Grenzwert zu groß ist, dann werden lange Impulse als kurze erkannt. Der Empfänger kann bei einer passenden Checksumme diese Fehler nicht erkennen. Im ersten Fall liefert der Empfänger möglicherweise Zeiten die weit in der Zukunft liegen und im zweiten Fall Zeiten aus der Vergangenheit.

VAR_OUTPUT

VAR_OUTPUT
    BUSY    : BOOL;
    ERR     : BOOL;
    ERRID   : UDINT;
    ERRCNT  : UDINT;
    READY   : BOOL;
    CDT     : DATE_AND_TIME;
    DOW     : BYTE(1..7);(* ISO 8601 day of week: 1 = Monday.. 7 = Sunday *)
    TZI     : E_TimeZoneID;(* time zone information *)
    ADVTZI  : BOOL;(* MEZ->MESZ or MESZ->MEZ time change notification *)
    LEAPSEC : BOOL;(* TRUE = Leap second *)
    RAWDT   : ARRAY[0..60] OF BOOL;(* Raw decoded data bits *)
END_VAR

BUSY: Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt.

ERR: Ist ein Fehler bei der Dekodierung aufgetreten, dann wird dieser Ausgang gesetzt.

ERRID: Liefert bei einem gesetzten ERR-Ausgang die Fehlernummer.

ERRCNT: Anzahl der aufgetretenen Fehler seit dem letzten fehlerfreien Empfang.

READY: Ist dieser Ausgang gesetzt, dann sind die Daten am CDT-Ausgang gültig.

CDT: Die DCF-77 Zeit im DATE_AND_TIME-Format.

DOW: Wochentag nach ISO 8601: 1 = Montag... 7 = Sonntag.

TZI: Zeitzoneninformation (Sommer-/Winterzeit).

ADVTZI: Ankündigung eines MEZ -> MESZ oder MESZ -> MEZ Wechsels. Am Ende dieser Stunde wird MESZ/MEZ umgestellt (siehe Telegrammbeispiele).

LEAPSEC: Ankündigung einer Schaltsekunde. Am Ende dieser Stunde wird eine Schaltsekunde eingefügt (siehe Telegrammbeispiele).

RAWDT: Zuletzt decodierte (rohe) Bit-Information. Bitte beachten Sie, dass nur die Paritätsbits der Zeitinformation überprüft werden. Die Paritätsbits der Wetterdaten werden nicht ausgewertet!

Fehlercodes

Fehlerbeschreibung

0

Kein Fehler

0x100

Timeout-Fehler. Möglicherweise kein DCF-77 Signal erkannt.

0x200

Parity-Fehler. In den empfangenen Daten wurden fehlerhafte Bits erkannt.

0x300

Fehlerhafte Daten wurden empfangen. Da bei der Parity Prüfung nur ein falsches Bit erkannt werden kann, werden die empfangenen Daten noch auf Gültigkeit überprüft (bei Monat = 13 wird z.B. dieser Fehlerkode gesetzt).

0x400

Der letzte Dekodierungszyklus war zu lang. Dieser Fehler kann bei einem schlechten Empfang auftreten (zu wenig Sekundenmarken wurden empfangen).

0x500

Der letzte Dekodierungszyklus war zu kurz. Dieser Fehler kann bei einem schlechten Empfang auftreten (zusätzliche Flanken wurden empfangen).

Telegrammbeispiele:

DCF77_TIME_EX 3:

Beispiel:

In der Beispielanwendung wird bei einem fehlerfreien Empfang eine TwinCAT Software-Uhr (RTC) mit der Funkzeit synchronisiert.

PROGRAM MAIN
VAR
    bDcfPulse AT%I* : BOOL;    
    fbDcf           : DCF77_TIME_EX;
    bBusy           : BOOL;
    bError          : BOOL;
    nErrID          : UDINT;
    nErrCnt         : UDINT;
    bDcfValid       : BOOL;
    tDcfDt          : DT;
    nDow            : BYTE(1..7);
    eTzi            : E_TimeZoneID;(* time zone information *)
    bAdvTzi         : BOOL;(* MEZ->MESZ or MESZ->MEZ time change notification *)
    bLeapSec        : BOOL;(* TRUE = Leap second *)
    arRawDt         : ARRAY[0..60] OF BOOL;
    fbRtc           : RTC;
    bRtcValid       : BOOL;
    tRtcDt          : DT;             
END_VAR
fbDcf( DCF_PULSE:= NOT bDcfPulse, RUN:= TRUE, TLP:= T#140MS, 
       BUSY=>bBusy, ERR=>bError, ERRID=>nErrID, ERRCNT=>nErrCnt, 
       READY=>bDcfValid, CDT=>tDcfDt, DOW=>nDow, TZI=>eTzi, 
       ADVTZI=>bAdvTzi, LEAPSEC=>bLeapSec, RAWDT=>arRawDt );

fbRtc( EN := bDcfValid, PDT := tDcfDt, Q=>bRtcValid, CDT=>tRtcDt );

Online Ansicht:

DCF77_TIME_EX 4:

Siehe auch in der Beschreibung des DCF77_TIME-Funktionsbausteins.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, ARM)

Tc2_Utilities (System)