Skip to content

HCAN Real Time System

hcanIngo edited this page Dec 19, 2015 · 7 revisions

HCAN Real Time System

HCAN funktioniert nur dann in der Regel sinnvoll, wenn alle Elemente des Systems auf eine gemeinsame und verlässliche Zeitreferenz synchronisiert sind. Denn viele Devices sind zeitabhängig und sollen für die Nutzer / Bewohner nachvollziehbar und zuverlässig funktionieren. Devices sind für Controller-Elemente wie den Controller-1612 oder das Bedienfeld definiert. Wenn im folgenden von einem Controller-Element die Rede ist, sind beide Board-Typen damit gemeint.

Woher kommt die Zeitinformation?

Jedes Controller-Element stellt u.a. den angelegten Devices des Controllers eine Zeit zur Verfügung. Dazu startet jedes Modul nach einem Reset mit der Zeit 0:00 Uhr am 0.0.2000 (ungültiges Datum). Über eine interne, eher ungenaue Uhrenfunktion wird die Zeit hochgezählt. Zum anderen lauscht das Modul auf HCAN-Nachrichten, die eine Zeitinformation enthalten. Wenn die Zeit der internen Uhr von der empfangenen hinreichend abweicht (mehr als 3 Sekunden), wird die interne Uhr auf die empfangene Zeit eingestellt.

Im Detail: Die Funktion canix_SFP_RTS_handler() verarbeitet die HCAN-Nachrichten vom Typ HCAN_RTS_DATE_INFO bzw. HCAN_RTS_TIME_INFO und setzt die interne Uhr, die durch die Datenstruktur canix_rtc_clock dargestellt wird. Zwischen dem Empfang zweier Zeitinformations-Nachrichten sorgt die Funktion canix_date_time() als Taktgeber der internen Uhr dafür, daß die Datenstruktur canix_rtc_clock hochgezählt wird.

modul_rts3

Wer sendet Zeitinformationen, auf die sich ein Controller-Element synchronisieren kann?

Hier gibt es zwei Möglichkeiten: Grundsätzlich kann jedes Controller-Element über ein entsprechendes Device seine Zeitinformation an andere Controller-Elemente weitergeben. Außerdem kann über das Hostinterface eine Zeitinformation vom PC eingespeist werden (siehe auch Zeitdienste im HCAN Netz).

Wie wird geregelt, wer Zeitinformationen senden darf?

Jeder Sender überträgt mit der Zeitinformation auch eine Priorität, die das Zutrauen in die Zeitangaben der Quelle ausdrückt und eine systemweit eindeutig gewählt sein muß. Es darf also keine zwei Sender mit der gleichen Priorität geben. Es gilt für jeden Zeitsender die Regel:

Solange ein Sender mit höherer Priorität sendet, darf ich nicht senden. Der Sender mit dem höchten Priorität ist der Zeit-Master und darf senden.

Die Priorität wird durch ein Level-Attribut ausgedrückt. Hier gilt: je niedriger der Level gewählt ist, desto höher die Priorität (Level 0 entspricht daher der höchsten Priorität). Jede Zeitinformations-Nachricht enthält neben den eigentlichen Zeit- bzw. Datumsangaben daher stets eine Levelinformation. Jedes Device, daß eine Zeitinformation senden kann, wird mit mindestens drei Parametern konfiguriert:

  • Level (level, Priorität)
  • Übernahme Intervall (takeover_time, wie lange akzptiert das Device, das kein Device höherer Priorität gesendet hat, bevor es selbst sendet)
  • Sendeintervall (interval,in welchen Zeitabständen sendet das Device, wenn es Master ist)

Zur Umsetzung dieses Konzepts müssen diese Devices erkennen, daß Zeitinformationen mit höherer Priorität gesendet werden oder ausbleiben. Dazu wird in die HCAN-Nachrichtenverabeitung ein Callback eingehängt (main.c), hier am Beispiel des Timeservice Devices:

// setup timeservice can frame handler
canix_reg_frame_callback(timeservice_can_callback, HCAN_MULTICAST_INFO, 
		HCAN_PROTO_SFP, HCAN_SRV_RTS);

Der Callback wertet die eingegangenen Zeitnachrichten für alle definierten Timeservice Devices des Controller-Elementes aus. Entsprechend muß auch jeder andere Device-Typ, der eine Zeitinformation liefert, einen Callback einhängen.

Wie wird erreicht, daß auf die verlässliche Zeit synchronisiert wird?

Es wird ein verläßliches Zeitnormal benötigt. Dies kann durch einen PC erreicht werden, der sich z.B. via ntpd auf von einen externen Zeit Server synchronisiert. Mit telican --timed wird mit Level 0 eine Zeitreferenz zur Verfügung gestellt. Alternativ kann ein DCF77-Empfänger verwendet werden (in Arbeit), der an einen Controller-1612 angeschlossen wird. Weitere Ausführungen zu telican finden sich unter Zeitdienste im HCAN Netz.

Was passiert, wenn die verlässliche Zeit nicht mehr verfügbar ist?

Sollte der PC ausfallen oder ein verwendeter DCF77-Empfänger nicht richtig funktionieren, gibt es keine Möglichkeit sicherzustellen, das HCAN mit einer verlässlichen Zeit arbeitet. In diesem Fall laufen erst einmal die internen Uhren der Controller-Elemente auseinander. Dieser Effekt läßt sich dadurch begrenzen, daß ein Element neuer Zeit Master wird. Dazu kann in jedem Controller-Element ein Timer Device angelegt werden. Dieses Device kann die Zeitinformation der internen Uhr an andere Controller-Elemente, die am Bus lauschen, weitergeben und so erreichen, daß alle zumindest wieder eine gemeinsame Referenz haben.

Wie sieht beispielhaft ein System aus?

Die Funktionsweise soll an dem folgenden Aufbau erläutert werden. In diesem HCAN-System sind drei Akteure definiert, die eine Referenzzeit liefern können.

- Via PC liefert telican (telican --timed) die Zeit mit Level 0 im 60 Sekunden-Takt.
- Ein Controller-1612 mit DCF77-Empfänger liefert die Zeit mit Level 1 und Übernahmezeit 80 Sekunden.
- Ein Timeservice Device auf einem zweiten Controller-1612 liefert die Zeit mit Level 2 und Übernahmezeit 90 Sekunden.

Beide Devices sind konfiguriert, daß sie ihre Zeit ebenfalls im 60 Sekunden-Takt liefern. Wenn alle Elemente des Aufbaus funktionieren, sendet ausschließlich telican die Zeitinformation. Die beiden anderen Devices werden darüber informiert, daß ein Sender mit höherer Priorität (niedrigerem Level) als ihrem eigenen sendet und schicken selbst keine Zeitinformationen:

hcan_rts_step1_lores

Wenn der PC und mit ihm die Zeitreferenz mit Level 0 ausfällt, wird 20 Sekunden nach dem Ausbleiben der erwarteten Zeitinformation (also 80 Sekunden nach der letzten Zeitinformation) das DCF77-Device übernehmen:

hcan_rts_step2_lores

Wenn nun auch der Controller-1612 oder/und das DCF77-Device seine Arbeit einstellt, ist keine verläßliche Zeitreferenz mehr verfügbar. Es übernimmt als letzte Rettung das Timeservice Device des anderen Controller-1612, 30 Sekunden nach der ausbleibenden Zeitinformation des DCF77-Devices. Dadurch hat das HCAN System immer noch eine gemeinsame Referenz:

hcan_rts_step3_lores

Wenn nun der PC wieder wie zu Anfang funktioniert und telican seine Zeitinformation schickt, wird das Timeservice Device darüber informiert und hört sofort auf, eigene Zeitinformationen zu senden.

Clone this wiki locally