DCF77_TIME

DCF77_TIME 1:

Dieser Funktionsbaustein wird durch den Funktionsbaustein DCF77_TIME_EX ersetzt.

DCF77_TIME 2:

Mit dem Funktionsbaustein "DCF77_TIME" kann das DCF-77 Funkuhr-Signal dekodiert werden. Über eine steigende Flanke am RUN-Eingang wird die Dekodierung gestartet fortgesetzt, solange der RUN-Eingang gesetzt ist. Der Funktionsbaustein braucht im schlechtesten Fall max. 1 Minute um sich zu synchronisieren und eine weitere Minute 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 kein Fehler in den Daten für die kommende Minute erkannt wurde. Die Fehlererkennung wird mit Hilfe der übertragenen Paritätsbits durchgeführt. Bei schlechten Empfangsverhältnissen kann eine zu 100% fehlerfreie Erkennung nicht gewährleistet werden. D.h. bei zwei fehlerhaften (invertierten) Bits kann der Funktionsbaustein keinen Fehler erkennen und setzt den READY-Ausgang ebenfalls auf TRUE. Um eine zuverlässige Zeitinformation zu erhalten müssen zusätzliche Sicherungsmechanismen implementiert werden z.B. die Auswertung der Redundanz der Zeitinformation in aufeinanderfolgenden Minuten.

In dem DCF77_TIME-Funktionsbaustein ist eine einfache Plausibilitätsprüfung von zwei aufeinanderfolgenden Telegrammen implementiert. Diese Funktionalität kann über eine globale boolesche Variable für alle Instanzen des DCF77_TIME-Bausteins aktiviert werden. Bei der Aktivierung der Plausibilitätsprüfung verlängert sich die erste Synchronisierung um eine weitere Minute auf max. 3 Minuten.

GLOBAL_DCF77_SEQUENCE_CHECK : BOOL := FALSE;(* TRUE = Enable plausibility check (two telegrams are checked), FALSE = Disable check *)

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.

Über eine globale Variable kann die Länge des kurzen und langen Impulssignals konfiguriert werden. Bei einem gestörten Signal sind die Impulsbreiten immer kleiner. In der Empfängerspezifikation sind meistens Angaben über minimale und maximale Impulsbreiten der beiden logischen Signale zu finden, 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. Deshalb wird abhängig von der Spezifikation des Empfängers eine feste Grenze zur Unterscheidung zwischen Null und Eins festgelegt. Prüfen Sie deshalb die Spezifikation des eingesetzten Empfängers und konfigurieren entsprechend die Impulslänge.

GLOBAL_DCF77_PULSE_SPLIT : TIME := T#140ms;(* 0 == pulse < 140ms, 1 == pulse > 140 *)

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 ).

Tipp:

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_INPUT

VAR_INPUT
    DCF_PULSE : BOOL;
    RUN       : BOOL;
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.

VAR_OUTPUT

VAR_OUTPUT
    BUSY  : BOOL;
    ERR   : BOOL;
    ERRID : UDINT;
    ERRCNT: UDINT;
    READY : BOOL;
    CDT   : DATE_AND_TIME;
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.

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 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).

Beispiel:

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

PROGRAM P_DCF77_TIME
VAR
    bDcfPulse    : BOOL;
    fbDcf        : DCF77_TIME;
    bBusy        : BOOL;
    bError       : BOOL;
    nErrID       : UDINT;
    nErrCnt      : UDINT;
    bDcfValid    : BOOL;
    tDcfDT       : DT;
    fbRtc        : RTC;
    bRtcValid    : BOOL;
    tRtcDT       : DT;
END_VAR

Online Ansicht:

DCF77_TIME 3:

Siehe auch in der Beschreibung des DCF77_TIME_EX-Funktionsbausteins.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, ARM)

Tc2_Utilities (System)