Beruflich Dokumente
Kultur Dokumente
OCIT-Outstations
Regeln und Protokolle
OCIT-O_Protokoll_V3.0_A01
Dokument: OCIT-O_Protokoll_V3.0_A01
Kontakt: www.ocit.org
Copyright 2018 ODG. Änderungen vorbehalten. Dokumente mit Versions- oder Ausgabestände
neueren Datums ersetzen alle Inhalte vorhergehender Versionen.
Spezifikationen ........................................................................................................... 7
1 Einführung ............................................................................................................ 8
4 Übertragungsprotokolle ...................................................................................... 17
5.6.3 DNS-Cache-Invalidierung................................................................ 31
6 Typisierung......................................................................................................... 39
6.1.4.1 Formatstrings................................................................................... 44
6.1.5 METHOD......................................................................................... 45
6.1.6 CLASSATTRIBUTE......................................................................... 45
8 Trace-Möglichkeiten ........................................................................................... 62
8.4 Auftragsstruktur............................................................................................ 64
Spezifikationen
Das OCIT-Outstations Konfigurationsdokument OCIT-O KD V3.0 enthält eine
Übersicht über alle von der ODG urheberrechtlich verwalteten Spezifikationen und
ordnet Versionen und Ausgabestände nach:
enthält eine Übersicht über Pakete von Spezifikationen für Schnittstellen, für de-
ren Nutzung von der ODG eine Schutzgebühr verlangt wird
die Systemgrenzen,
1.1 Systemgrenzen
Ein Überblick über das OCIT-System findet sich im Dokument OCIT-O System. Im
vorliegenden Dokument wird nur der Bereich OCIT-Outstations behandelt. Der mit
OCIT-Outstations gekennzeichnete Bereich in Bild 1, stellt zugleich den Bereich der
Definitionen, daher die OCIT-Outstations Systemgrenzen dar. Schnittstellen, die über
die dargestellten Systemgrenzen hinausführen, werden in diesem Dokument nicht
definiert.
Ein OCIT-Outstations System besteht aus einer Zentrale (zentrale Ebene) und OCIT-
Outstations Feldgeräten. Zentrale und Feldgeräte kommunizieren über die OCIT-
Outstations Schnittstellen.
Zentrale - Feldgeräte
Verbindung zwischen Zentrale und Steuergeräten zum Zwecke der Steuerung,
Überwachung und Datensammlung. Die Feldgeräte sind Single-Master-Geräte,
daher ist ihre Gegenstelle logisch gesehen immer die Zentrale oder ein Ser-
vicetool in der Zentrale.
Diese Forderung wird dann erfüllt, wenn zeitkritische Steuerungsaufgaben in den Ge-
räten vor Ort wahrgenommen und nicht zwischen Zentrale und Gerät über die
Schnittstelle abgewickelt werden. Solche Systeme bezeichnet man als ”dezentrale
Systeme“. Die OCIT-Outstations Feldgeräte besitzen daher Prozessoren, die kom-
plexe Abläufe lokal beherrschen und entsprechende Verarbeitungen durchführen
können.
Über die OCIT-O Schnittstelle werden Befehle und Daten beim Eintreffen bestimmter
Ereignisse übertragen. Systemweite, zeitgenaue Aktionen werden uhrzeitgesteuert
Für Zentralen, die mit OCIT-O kommunizieren sind folgende Eigenschaften verpflich-
tend:
OCIT hat eine eigene Definition für das Übertragungsprotokoll der Anwenderebene,
die mit den Internet-Standards koexistieren kann, das „Basis Transport Paket Proto-
koll Layer“ (BTPPL). BTPPL wurde mit Blick auf die in städtischen Steuernetzen
manchmal vorhandenen Kabelverbindungen mit eingeschränkter Übertragungsleis-
tung entwickelt. Es arbeitet mit einem kleinen Datenoverhead und ermöglicht es
dadurch auch diese Strecken zu nutzen.
BTPPL bietet für den Datentransport 2 Kanäle. Ein Kanal mit hoher Priorität kann für
Schaltbefehle und Meldungen verwendet, auf den Kanal mit niedriger Priorität kann
zum Beispiel die Daten-Fernversorgung erfolgen. Die Arbeitsweise ist asynchron. Ein
Sender kann fortlaufend neue Telegramme senden und muss nach dem Absenden
von Telegrammen nicht auf zugehörige Rückmeldungen warten, sondern kann diese
nach ihrem Eintreffen zeitlich zuordnen. Ein fester Bestandteil des Protokolls ist der
SHA-1 Algorithmus, der über einen 24-Byte- Passwortschutz sicherstellt, dass die
„Profil 3 – Ethernet mit DHCP“. Standardisiert ist die Anbindung an Ethernet, eine
kabelgebundene Datennetztechnik für lokale Datennetze, über die eine einfache An-
bindung an verschiedenste Kommunikationsnetze möglich ist.
2.3 Feldgeräte
Die Feldgeräte mit OCIT-O Schnittstellen sind sogenannte Single-Master-Geräte.
Ihre Gegenstelle ist logisch gesehen immer eine „einzige Zentrale“, auch wenn diese
aus mehreren Systemteilen bzw. Komponenten besteht. Von der Zentrale eintref-
fende Befehle werden daher von den Geräten immer in gleicher Art und Weise aus-
geführt, ohne zu unterscheiden von welcher Komponente sie stammen.
TCP/UDP/IP sind die Transportprotokolle der mittleren Ebenen 3 und 4. Alle Befehle,
die größer als 4 KB sind, müssen per TCP übertragen werden. TCP ist zwingend zu
implementieren!
Sowohl mit UDP als auch TCP ist es möglich, dass für spätere Festlegungen ver-
schiedenartige Übertragungseinrichtungen definiert werden können, ohne dass der
Hauptteil des Protokolls sich ändert. Grundsätzlich können alle üblichen Medien und
Telekommunikationsdienste durch die Schichten 2 und 1 angebunden werden. Ver-
bindungsprotokolle werden entsprechend des zu verwendenden Übertragungsmedi-
ums und der Übertragungseinrichtung eingesetzt. In OCIT wird die Art der Übertra-
gungseinrichtung in den Dokumenten „Profile“ festgelegt. Welche Schnittstelle und
welchen Stecker der Hersteller zum Anschluss dieser Einrichtungen verwendet,
bleibt ihm freigestellt.
Für die Anwendung zwischen Zentralen und Feldgeräten kommen in erster Linie
Punkt-zu-Punkt-Verbindungen auf festgeschalteten Übertragungswegen in Frage,
daher bei Lichtsignalanlagen die vorhandenen kundeneigenen Kabelwege. Deshalb
wurde dieses Übertragungsprofil als erstes definiert (Profil 1 - Übertragungsprofil für
Punkt-zu-Punkt-Verbindungen auf fest geschalteten Übertragungswegen). Hier wird
das Protokoll PPP (Point-to-Point) eingesetzt und als Übertragungseinrichtung ein
Da Zentralen oft an Netzwerken wie Intranet oder Internet angeschlossen sind, kann
eine unbekannte Zahl von Nutzern Zugriff haben. Insbesondere bei internen Netz-
werken haben viele Nutzer berechtigten Zugriff. In beiden Fällen ist ein Angriff durch
„Hacker“ möglich. Deshalb ist im OCIT-Outstations Protokoll die Kontrolle über die
Feldgeräte in der Anwenderebene zweistufig gesichert
3.1.1 Sicherheitsalgorithmus
In der Anwenderebene wird zwischen SHA-1-gesicherter und nicht gesicherter
Übertragung unterschieden:
Anwenderversorgung,
3.1.2 Firewall
Der SHA-1-Algorithmus schützt das Feldgerät, das ungesicherte Befehle ignoriert.
Falls Hacker die Verbindungen zwischen den Feldgeräten und Zentralen elektrisch
3.2 Adressen
Feldgeräte und Zentralen kommunizieren über IP-Adressen. In einem Betreibernetz
muss daher jedes Feldgerät eine eindeutige IP-Adresse haben. In erster Linie kom-
men dabei selbst verwaltete Adressen in Frage. Die kostenpflichtige Nutzung von
echten Internet-Adressen ist möglich, allerdings aufgrund der hohen Anzahl benötig-
ter Internetadressen unrealistisch. Dieses „Feldgerätenetz“ wird häufig ein sternför-
miges Netz über kundeneigene Leitungen sein. Jedes Gerät hat einen eindeutigen
Hostnamen (siehe Pkt. 5.2).
3.3 IP-Netz
Es ist projektspezifisch festzulegen, ob OCIT-Outstations und Adressen der zentra-
len Komponenten in einem gemeinsamen IP-Netz liegen. Gegebenenfalls ist projekt-
spezifisch eine Firewall einzusetzen.
3.4 Routen
Auf Grund der Nutzung von IP in der OSI Schicht 3 ist es technisch prinzipiell mög-
lich, Nachrichten zu „Routen“, daher Übertragungen von Feldgerät zu Feldgerät oder
zu anderen Systemteilen durchzuführen. Bei sternförmigen Verbindungen erfolgt da-
bei das „Routen“ über die Zentrale, die hier ähnlich wie eine Telefonvermittlung ar-
beitet. Für diese Funktionen wurden bisher keine Festlegungen getroffen.
3.5 Zeitverhalten
Das System ist nicht konzipiert für Übertragungen mit deterministischem Zeitverhal-
ten. Die erreichbare Übertragungsgeschwindigkeit im Netz hängt vom Kommunikati-
onssystem und der Datenlast im Netz ab. Systemweite, zeitgenaue Aktionen werden
deshalb uhrzeitgesteuert durchgeführt. Dazu ist in der Zentralen Ebene ein Zeitdienst
vorhanden, nach dem (im Standardfall) alle geräteinternen Uhren gestellt werden, so
dass im gesamten System alle Geräte über eine einheitliche Zeitbasis verfügen. Alle
Meldungen und Befehle sind mit einem „Zeitstempel“ versehen, der sie zeitlich ein-
ordnet.
Die Zentrale stellt dazu den Zeitdienst NTP Version 4 (RFC 5905) zur Verfügung
der von den OCIT- Lichtsignalsteuergeräten zur Synchronisierung der Gerätezeit mit
der zentralen Zeit verwendet werden kann.
Hinweis: Sind an einer Zentrale auch Feldgerät mit einer OCIT Version kleiner V3.0
(z.B. V2.0 oder V1.1) angeschlossen muss der Zeitdienst der Zentrale auch NTP
Version 3 (RCF 1305) bereitstellen bzw. so konfiguriert sein das Anfragen nach
NTPv3 entsprechend den Definitionen dieser Version beantwortet werden.
Als NTP-Server gilt grundsätzlich FNr. 0 (fg0) in der Zentrale, wobei die IP-Adresse
durch „reverse lookup“ erhalten werden kann. Eine manuelle Konfiguration von NTP-
Servern ist eine projektspezifische Lösung.
Wird vom Betreiber keine explizite Anforderung angegeben, so besitzt der zentrale
Zeitdienst die höchste Priorität bei der Zeitsynchronisation der Gerätezeit mit der
zentralen Zeit. Uhren in den Feldgeräten bilden die Gerätezeit nur nach dem Ein-
schalten oder wenn der zentrale Zeitdienst über eine vom Hersteller vorgegebene
Zeit nicht erreichbar ist.
Der zentrale Zeitdienst NTP ist bei permanenten Verbindungen wie z. B. OCIT-O
Profil 1, mindestens alle 15 Minuten und sofort nach dem Aufbau der Verbindung ab-
zufragen.
Optional kann das Steuergerät vom Hersteller so konfiguriert werden, dass eine lo-
kale Uhr die priorisierte Zeitreferenz für die Gerätezeit bildet. Der zentrale Zeitdienst
wird dann nicht bzw. nur bei Ausfall der lokalen Uhr verwendet. Mit dieser Option
wird die geforderte einheitliche Systemzeit nur gewährleistet, wenn auch die zentrale
Zeitreferenz für den Zeitdienst über eine gleichartige Uhr wie in den Lichtsignalsteu-
ergeräten gewonnen wird.
Eine Konfiguration mit priorisierten zentralen Zeitdienst ist hier nicht sinnvoll, da dazu
permanente Verbindungen benötigt werden. Deshalb bilden lokale Uhren in den
Feldgeräten (DCF 77 oder andere Systeme) die priorisierte Zeitreferenz für die Gerä-
tezeit. Die geforderte einheitliche Systemzeit wird nur gewährleistet, wenn auch die
wenn durch die Gerätelogik entschieden wird, dass eine Übertragung durchzu-
führen ist.
Die Übertragung von Ereignissen kann sowohl von der Zentrale als auch von
den Feldgeräten ausgehen. Ob eine Quittierung der übertragenden Nachricht
erfolgt oder nicht, oder ob die Nachricht bei fehlender Quittierung wiederholt
wird, ist abhängig von der jeweiligen Definition.
3.5.4 Reaktionszeit
Bei quittierten Übertragungen ist ein Timeout vorzusehen, der die zu erwartende ma-
ximale Reaktionszeit berücksichtigt.
Versorgungsobjekte werden mit btppl als Nachricht mit niedriger Priorität (siehe auch
5.1) übertragen.
Die Telegrammgröße ist auf 2 MByte bei TCP begrenzt. Das Feldgerät muss einen
entsprechend großen Speicher zum Zwischenspeichern einer gesamten Versorgung
(Puffer) vorhalten. Bei TCP sind btppl-Telegrammgrößen von bis zu 2 Megabyte zu
verarbeiten.
Das Paket wird vom Server empfangen und dort bearbeitet. Für die Bearbeitung
müssen die Jobnummer und die IP-Adresse des Senders und der Originalport zwi-
schengespeichert werden, um die Antwort zurücksenden zu können. Wenn die glei-
che Portnummer / Jobnummernkombination während der Bearbeitung ein weiteres
Mal auftritt, ist es der Implementierung freigestellt, diesen Befehl entweder zu igno-
rieren oder ein weiteres mal abzuarbeiten. Sobald der Befehl abgearbeitet ist, wird
die Antwort mit der Original-Jobnummer an den Originalport zurückgeschickt. Wenn
Zum Senden eines Telegramms wird ein „Request“-Paket, für die Antwort ein „Res-
pond“-Paket verwendet.
Als Pakete ohne Rückmeldungen werden lediglich die unten definierten „Messages“
verwendet.
Die Antwort wird an den Port zurückgeschickt, von dem die Sendung ausging. Wäh-
rend der Bearbeitung bleibt der Kanal geöffnet. Der Server überträgt auch bei TCP
die Jobnummer aus dem Request- in das Respondtelegramm. Wenn der Server das
Antworttelegramm nicht übertragen kann, verwirft er es und versucht nicht den Kanal
erneut zu öffnen.
Am Sendeport wartet der Client auf die Antwort (Respondtelegramm) auf den abge-
sendeten Befehl (Requesttelegramm). Wenn nach einem Timeout (Fail) noch keine
Der Aufrufer weiß dann nicht, ob der Befehl nicht durchgeführt wurde oder der Befehl
durchgeführt wurde und lediglich die Antwort verloren ging oder ob der Befehl sich
noch in einer Warteschlange befindet. Es ist die Aufgabe des aufrufenden Prozes-
ses, in diesem Fall den Befehl zu wiederholen oder zu ignorieren. Sobald eine Ant-
wort empfangen wird oder wenn der Fail-Timeout abgelaufen ist, wird dies dem Auf-
rufer rückgemeldet. Es ist nicht notwendig, dass der Kanal nach der Ausführung ge-
schlossen wird. Allerdings müssen sowohl Client als auch Server so programmiert
werden, dass auf ein Abreißen des Kanals korrekt reagiert wird.
Zum Senden eines Telegramms wird ein „Request“-Paket, für die Antwort ein „Res-
pond“-Paket verwendet.
Telegrammaufbau
- Header
- Serialisierung der Daten (Aufrufparameter der Methoden)
- Prüfsummen (Fletcher, SHA-1)
die Methoden zur Bedienung von Gerätefunktionen (diese liegen in der Anwen-
dung),
BTPPL ist ein symmetrisches Protokoll. Es wird kein prinzipieller Unterschied zwi-
schen einem Feldgerät und einer Zentrale gemacht. Alle teilnehmenden Geräte sind
sowohl Client als auch Server. Daher ist es vom Protokoll her ohne weiteres möglich,
dass auch Feldgeräte Befehle an andere Feldgeräte senden können (wie die Zent-
rale Ebene).
BTPPL verwendet sog. asynchrone Methodenaufrufe. Hierbei werden durch das Pro-
tokoll Funktionen ("Methoden") in einem angeschlossenen Gerät aufgerufen und aus-
geführt. Der Ressourcenbedarf asynchroner Methodenaufrufe ist erheblich geringer
als der von synchronen Methodenaufrufen. Die zu definierenden Funktionalitäten der
Schnittstelle werden in "Objekttypen", "Objekte" und "Methoden" unterteilt. Die Auftei-
lung hat dabei folgenden Hintergrund: In allen Geräten gibt es eine Reihe von Ele-
menten, die mehr oder weniger unabhängig voneinander sind. In einem Lichtsignal-
steuergerätsind dies z.B. Signalpläne mit ihren jeweils eigenen Befehlen, Messstel-
len, Betriebstagebücher oder VA-Logiken. Jedes dieser Elemente, obwohl physisch
nicht vorhanden, ist im Sinne der objektorientierten Programmierung ein bestimmter
Typ eines Objekts (Objekttyp). Jedes dieser Objekte kann einzeln angesprochen
werden und besitzt eigene Funktionen (Methoden), die sich auf eben genau dieses
OCIT-Outstations benötigt zwei Ports pro TCP und UDP: Über einen Port werden
Nachrichten mit niedriger Priorität übertragen, über den anderen Port Nachrichten mit
hoher Priorität. Beide Ports werden sowohl für TCP als auch für UDP verwendet. Bei
der Installation sind beide Ports vorbelegt:
Nachrichten mit niedriger Priorität werden an Port 3110 übertragen. Der Port
wird im folgenden als PNP abgekürzt.
Nachrichten mit hoher Priorität werden an Port 2504 übertragen. Der Port wird
im folgenden als PHP abgekürzt.
Der Sendeport ist jeweils frei festlegbar. Die Antwort wird an den Port im gleichen
Protokoll zurückgeschickt, von dem der Auftrag stammt. Wenn ein Request per UDP
gesendet wird und die Antwort > 4 KByte ist, wird als Antwort ein Fehler zurückge-
meldet.
4+HdrLen Parameterblock:
Anmerkung:
Name Bedeutung
BL Blocklänge. Die Blocklänge wird nur bei TCP verwendet. Bei UDP
wird die Blocklänge des UDP-Blockes benutzt.
HdrLen Länge des Kopfes inkl. Pfad in Byte. Ab der Adresse HdrLen begin-
nen die Parameter des Befehls. Wenn kein Pfad vorhanden ist, hat
HdrLen den Wert 16, ansonsten 16+<Länge des Pfadeintrags in
Byte>.
T Typ des Telegramms (Flag >> 5):
0: Request (Befehlstelegramme).
1: Respond (Antworttelegramme auf Befehlstelegrammtyp
„Request“)
2: Message (Befehlstelegramme ohne Antwort)
3..8: reserviert
V OCIT-Outstations-BTPPL Version ((Flag >> 3) & 3):
0: OCIT-Outstations-BTPPL Version 1
1..3: reserviert
r Reservierte Bits (immer 0)
S SHA-1 Prüfsumme (Flag & 0x01):
0: nur Fletcher Prüfsumme
1: Fletcher Prüfsumme und SHA-1 Prüfsumme
JobTime JobTime und JobTimeCount zusammen bilden die Jobnummer. Die
Jobnummer wird für ein Request-Telegramm vom Sender generiert
Job- und darf bis zur Antwort (Respond-Telegramm) nicht neu vergeben
TimeCount werden. Im Respond-Telegramm wird die gleiche Nummer eingetra-
gen. Damit kann der Respond zugeordnet werden. In Message-Te-
legrammen ist dieses Feld auf 0 zu setzen.
Member Nummer des Herstellers, der das Access-Objekt definiert hat. Die
Herstellernummern (Member-Nummern) werden von der ODG ver-
geben
OType Typ des Objekts
Method Nummer der Methode innerhalb des Interfaces
ZNr Nummer der Zentrale. Jede Zentrale eines Betreibers muss eine
eindeutige Zentralen-Nummer haben.
FNr Nummer des Feldgerätes unterhalb der Zentrale. Alle Geräte, die
von einer Zentrale gesteuert werden, müssen zentralenweit einen
Jedes Gerät hat einen eindeutigen Hostnamen. Der Hostname ist folgendermaßen
aufgebaut:
fg<Gerätenummer>.z<Zentralennummer>.<Betreiber-Domain>
fg5.z3.ruebenstadt-sv.de
In der Zentrale wird ein DNS-Server (Nameserver) eingerichtet und dort die IP-
Adressen der Feldgeräte projektspezifisch fest versorgt. Auch die Die OCIT-
Outstations Systemzugänge (Hinweis: In OCIT-O V2.0 nicht angeboten) verwenden
zur Bestimmung der IP-Adresse den DNS-Server (RFC 1034, RFC 1035, RFC 974,
RFC 1912).
Die Kommunikation der Feldgeräte untereinander läuft über IP-Routing (bisher noch
nicht standardisiert). Die Vergabe der IP-Adressen erfolgt dabei projektspezifisch.
Die Feldgeräte ermitteln dazu ihren gültigen Domain-Namen aus Daten, die bei der
Initialisierung von der zentralen Ebene an die Feldgeräte übertragen werden. Diese
Daten sind in den bisher festgelegten Übertragungsprofilen definiert. Das Feldgerät
erhält somit schon bisher
"fg<Gerätenummer>.z<Zentralennummer>.<Betreiber-Domain>"
also zum Beispiel fg5.z3.ruebenstadt-sv.de. Daraus wird der für das Feldgerät gültige
Domain-Name der Betreiber-Domain, im Beispiel ruebenstadt-sv.de, abgeleitet.
Jede zentrale Ebene mit OCIT-O Komponenten muss den reverse DNS look-up der
FG-IP Adresse unterstützen.
Als Format des Zeitstempels wird die UNIX-Codierung der UTC festgelegt. Die
Codierung speichert die Anzahl der Sekunden seit dem 1.1.1970 in einer 32-
Bit Variable. Diese Codierung wird von praktisch allen Betriebssystemen un-
terstützt, sie ist kompakt und erleichtert die Sortierung von Ereignissen. Es ist
OCIT-O_Protokoll_V3.0_A01 Seite 24 von 67
darauf zu achten, dass dieses Zeitformat am 19.1.2038 überläuft. Für die
Kommunikation in OCIT-Outstations wird die 32-Bit-Variable in diesem Fall
einfach weitergezählt und läuft damit erst ca. 2100 n.Chr. über.
5.3.1 Timeout
Hinweis: Funktion wurde gegenüber Vorgängerversion geändert (neue Rechenregel
für Timeout)!
Bei quittierten Übertragungen ist ein Timeout in der Applikation vorzusehen, der die
zu erwartende maximale Reaktionszeit berücksichtigt. Für alle quittierten Übertragun-
gen wird der gleiche Timeout:
Die Timeout-Zeit wird erst ab dem Start der Übertragung (Start Übergabe des Requ-
est Telegramms an TCP) gerechnet. Mit dem Empfang der Länge des Respond Te-
legramms ist der Timeout-Zähler speziell bei langen Antworttelegrammen gemäß
obiger Formel zu korrigieren.
Die Basic-Block-Size (RFC 1014, Punkt 2) wird auf 1 Byte heruntergesetzt. Die
Verwendung von 32 Bit pro Byte ist zu groß. Entsprechend wird bei den Punk-
ten RFC 1014 - 3.8, 3.9 und 3.10 der Wert von r auf 0 gesetzt (kein Padding).
Zusätzlich zum Signed-Integer (RFC 1014, Punkt 3.1) wird ein Signed-Short
(16 Bit) und ein Signed-Char (8 Bit) hinzugefügt. Entsprechend werden zum
Strings werden immer mit einem 16-Bit (USHORT) Längenwort dargestellt, wel-
ches die Anzahl der BYTES(!) im String angibt.
Abhängig von der maximalen Zahl an Elementen wird entweder ein Längen-
byte (max. 255 Elemente), ein Längenwort (65535 Elemente) oder ein ULONG
vorangestellt, welches die Zahl von Elementen angibt.
Die Union-Diskriminatoren (die nur sehr selten sind) bleiben bei jeweils 4 Byte
Länge, um nicht verschiedene Typen von Unions einführen zu müssen.
5.6 Objekte
Die Funktions-Aufrufe in OCIT-Outstations sind objektorientiert aufgebaut. Anders als
z.B. bei RPC wird eine Funktion nicht nur durch eine Zahl repräsentiert, sondern
durch die Kombination von Objekttyp, ObjektId und Methode. Dies soll zunächst ge-
nauer erläutert werden:
Element Beschreibung
Objekttyp Alle Elemente, auf die in einem OCIT-Gerät zugegriffen werden kann,
sind einem Objekttyp zugeordnet. Beispiele für solche Objekttypen sind:
(Member, Signalplan, Detektor, Betriebstagebuch usw. Es gibt eine Reihe von
OType)
Objekttypen, die sehr einfach sind und auf die z.B. nur schreibend oder
lesend zugegriffen werden kann, wie z.B. Gerätename.
Der Objekttyp wird durch die Felder Member und OType beschrieben.
Member ist die Member-Nummer des Herstellers, der den Objekttyp
verwendet. Bei OCIT-Outstations Objekttypen wird immer eine 0 oder 1
eingetragen, für herstellerspezifische Objekte steht hier die Nummer
des Herstellers.
OType ist der Objekttyp selbst. Die Nummer muss für die Standard-Ob-
jekte eindeutig vergeben werden. Bei herstellerspezifischen Objekten
können sie durch die Hersteller festgelegt werden, da sich die Objekte
schon durch Member unterscheiden.
ObjektId
(ZNr,
Die meisten Objekttypen sind mehrfach vorhanden. Dies gilt z.B. für
FNr, Signalpläne 1 bis n, Detektoren 1 bis n, Betriebsmeldungsarchive usw.
Path) Um die sog. Instanzen dieser Objekte unterscheiden zu können, wird
eine ObjektId benötigt, die für einen Betreiber zentralenübergreifend
eindeutig ist. Anders als in den meisten Kommunikationssystemen ist in
OCIT-Outstations diese Adresse (ObjektId) von variabler Länge und vor
Die Einträge ZNr und FNr sind in jeder ObjektId vorhanden, obwohl
z.B. eine Zentrale keine Gerätenummer haben müsste. Der Grund dafür
ist, dass sich aus der Kombination ZNr und FNr die Zieladresse des
Gerätes feststellen lässt. Würde FNr nicht bei jedem Objekt enthalten
sein, müsste die Zentrale zunächst immer anhand des Objekttyps fest-
stellen, ob das Objekt an das Kreuzungsgerät weitergeleitet werden
muss.
Der Path enthält in den meisten Fällen kein oder nur ein Element. Es
ist jedoch möglich, dass der Path auch mehrere Elemente enthält, so-
lange die Gesamtlänge nicht 240 Byte übersteigt.
Objekt Die Kombination aus Objekttyp und ObjektId wird als Objekt bezeich-
net. Wie aus den obigen Beschreibungen bereits hervorgeht, gibt es pro
Gerät mindestens ein Objekt (das eigentliche Gerät) und im Normalfall
zusätzlich weitere Objekte. Diese sind z.T. von OCIT-Outstations vorge-
geben, z.T. durch die Hersteller selbst definiert.
5.6.1 Member-Nummer
Mit Hilfe der Member-Nummer ist im OCIT-Outstations-Systems eine Unterscheidung
zwischen OCIT-Objekten und Hersteller-Objekten möglich. Member 0 und 1 sind die
von der ODG festgelegten OCIT-Outstations-Objekte. Sie kennzeichnen den Stan-
dard. Die sogenannten Hersteller-Objekte werden entsprechend den OCIT-Regeln in
eigener Verantwortung des jeweiligen Urhebers erzeugt. Die Verwaltung der Mem-
ber-Nummern obliegt der ODG. Sie aktuelle Liste wird auf der Homepage
www.ocit.org veröffentlicht.
Mit diesen ersten Teilen lassen sich eindeutig der Hostname und damit die IP-
Adresse bestimmen, die das Gerät hat. Ein Gerät wird immer nur über eine IP-
Adresse angesprochen.
Der Path dient dazu, Objekte innerhalb des Gerätes zu identifizieren. Er besteht
meist aus 0 oder 1, seltener aus 2 oder mehr Einträgen. Für Objekte, die nur einmal
pro Gerät vorhanden sind, ist der Path leer. Objekte wie z.B. Detektoren, die sich
über einen Eintrag identifizieren lassen, haben die Nummer als Path-Eintrag. Nur
Objekte, die unterhalb solcher mehrfach vorhandenen Objekte stehen, wie z.B. Ein-
träge in einer Matrix, die mehrfach im Gerät vorkommt, haben mehr als einen Eintrag
(z.B. 3).
Die in der Tabelle grün markierten RetCodes werden von der BTPPL-Lib erzeugt und
über die Leitung versendet.
Die in der Tabelle grau markierten RetCodes werden von der lokalen BTPPL-Instanz
erzeugt und nicht über die Leitung versendet. Diese RetCodes haben deshalb eine
höhere Priorität als die RetCodes der Anwendung. Zwischen Anwendung und
BTPPL-Lib dürfen die RetCodes lokal auch mit abweichenden Prioritäten auftreten.
2 NO_SF Liste enthält keinen Sekundenframe, der die Bedingung erfüllt 1000
11 NOT_INACTIVE Die Liste darf nicht gestartet sein um diese Methode auszufüh- 1003
ren.
15 NO_EVENT NO_EVENT: der Event kann aus irgendeinem Grund nicht ein- 1009
getragen werden
16 NOT_POSSIBLE wenn der Auftragstyp keine Auftragselemente zulässt, wie z.B. 1006
bei Meldungen, R09 und AMLi oder keine weiteren Aufträge o-
der Auftragselemente mehr möglich.
45 ACCESS_DENIED Der Zugriff auf die gewünschte Funktion ist nicht erlaubt. 35
100 ERR_BAD_CALLCHK BTPPL: Die Methode wurde mit einer falschen Checksumme 2
aufgerufen.
101 ERR_BAD_CALLTIME BTPPL: Die Uhrzeit des Aufrufs stimmt nicht auf 30 Minuten ge- 3
nau mit der lokalen Uhrzeit überein.
102 ERR_BAD_RETCHK BTPPL: Wird nach der Übertragung vom Sender generiert, 4
wenn die Prüfsumme beim Return-Telegramm nicht überein-
stimmt.
103 ERR_BAD_RETTIME BTPPL: Wird nach der Übertragung vom Sender generiert, 5
wenn die Uhrzeit des Returnblockes nicht stimmt, der Sende-
block aber korrekte Uhrzeit hatte. In diesem Fall wurde der Be-
fehl bereits durchgeführt, es ist aber eine Synchronisation der
Uhrzeit notwendig. Wenn der Code nach der Zeitsynchronisa-
tion wieder auftritt, deutet dies auf Hacker oder Bug hin.
200 ERR_SYNCHRONIZE BTPPL: Wird nach der Übertragung vom Sender generiert, 6
wenn die Uhrzeit des Returnblockes nicht stimmt und der Be-
fehl bereits vom Sendeblock her eine falsche Uhrzeit hatte. Die-
ser Code wird zwischen Steuergerät und Zentrale nicht verwen-
det.
201 ERR_DEST_UNREACHABLE BTPPL: Ziel zwar bekannt aber z.Zt. nicht erreichbar 10
5.6.3 DNS-Cache-Invalidierung
Es ist möglich, dass während des Betriebs die IP-Adresse des Feldgeräts gewech-
selt wird (nicht jedoch sein Hostname!). BTPPL sollte nicht für jeden Befehl eine
DNS-Abfrage machen, da diese Abfrage ressourcen- und zeitraubend ist. Stattdes-
sen sollten die Ergebnisse der Abfrage gecachet werden. Um die Kohärenz des
Caches zu gewährleisten, muss in BTPPL eine DNS-Cache-Invalidierung stattfinden.
Sobald diese stattfindet, müssen die entsprechenden Adressen neu bestimmt wer-
den:
Beim Hochlaufen
Eine erhöhte Sicherheit gegen Angriffe von außen wird bei der Übertragung si-
cherheitsrelevanter Daten benötigt und durch einen SHA-1 Algorithmus ge-
währleistet (der aus den Passworten und dem Dateninhalt die Prüfsumme be-
rechnet).
Das Passwort des Gerätes selbst (Passwort des Feldgeräts, der Zentrale oder
der anderen Einrichtungen)
Als Passwort wird bei Request- und Message-Telegrammen das Passwort des Ab-
senders verwendet, bei Respond-Telegrammen das Passwort des Absenders des
zugehörigen Request-Telegramms.
Hinweis: Vorzugsweise sollen alle Feldgeräte innerhalb eines zentralen Systems das
gleiche Feldgeräte-Passwort verwenden.
Das Gerät wird mit dem Standard OCIT-O Passwort "OCITPASSWORT" aus-
geliefert.
In der Zentrale wird ein OCIT-O Passwort P1 gespeichert. (Zum Wechsel der
Passwörter wird ein zweiter Eintrag P2 in der Zentrale angelegt, der im Normal-
fall mit dem OCIT-O Passwort P1 belegt ist). Das OCIT-O Passwort P1 wird bei
Auslieferung der Zentrale ebenfalls mit "OCITPASSWORT" vorbelegt.
Die Zentrale führt als ersten Befehl einen Wechsel des Standard OCIT-O Pass-
worts im Gerät auf das Passwort durch, welches in der Zentrale verwendet wird
(Vorgehen s.u.).
Das OCIT-O Passwort wird nur von der Zentrale aus gewechselt. Der Wechsel findet
folgendermaßen statt:
Das Gerät wechselt das Passwort aus und verwendet sofort das neue OCIT-O
Passwort. Die Antwort wird nicht gesichert übertragen. Alle folgenden Antwor-
ten sowie alle Befehle des Gerätes zur Zentrale codiert es mit dem neuen
OCIT-O Passwort.
Die Zentrale akzeptiert nach dem Aufruf nur Antworten nur mit dem neuen
OCIT-O Passwort.
Alle im Retry-Cache verbliebenen Nachrichten werden mit dem neuen OCIT-O Pass-
wort umcodiert.
Der Fletcher-Algorithmus ist ein einfacher aber effektiver Algorithmus, der nur 2 Byte
pro Paket erfordert. Er ist ein eher unbekannter Algorithmus, was Ad-hoc-Angriffe er-
schwert:
void initialize_fletcher()
{
c0 = c1 = 0;
}
short fletcher()
{
unsigned char hi_fletcher = 255 - ((c0 + c1) % 255);
unsigned char lo_fletcher = c1;
return ((short)hi_fletcher << 8) | lo_fletcher;
}
char check_fletcher()
{
return (c0 == 0) && (c1 == 0);
}
Um den Algorithmus auszuführen, muss vor der Bildung der Prüfsumme initia-
lize_fletcher aufgerufen werden, pro Byte Sachdaten dann do_check und schließlich
mit fletcher die Prüfsumme gebildet werden. Um die Prüfsumme zu verifizieren, wird
do_check über den Block Sachdaten und (!) die Fletcher-Prüfsumme durchgeführt
und dann mit check_fletcher geprüft, ob die Prüfsumme korrekt ist.
Der Algorithmus kann selbstverständlich noch weiter optimiert werden. Das Beispiel
verwendet nur 8-Bit Operationen und ist damit für die Portierung in einen Embedded-
Controller geeignet.
Der SHA-1 Algorithmus ist nach aktuellem Kenntnisstand frei von Patentrechten.
Weiteres:
Nach heutigem Wissensstand ist die Chance, durch Kenntnis von bisher über-
tragenen Paketen ein Paket zu konstruieren, gegenüber der Wahrscheinlich-
keit, das OCIT-O Passwort zu erraten, vernachlässigbar.
Die Absicherung erfolgt über ein OCIT-O Passwort, welches von der Zentrale
geändert werden kann. Ein Lauscher, der nicht das alte OCIT-O Passwort
kennt, kann nicht das neue OCIT-O Passwort erfahren.
Bevor die Prüfsumme gebildet wird, wird das UTC-Feld des BTPPL Datenblocks mit
der aktuellen Systemzeit gefüllt.
Zur Bildung der Prüfsumme wird der SHA-1 Algorithmus über folgenden Block aus-
geführt:
Wenn beide Werte voneinander abweichen, wird der Befehl mit einem Fehler
zurückgewiesen und eine Meldung an die Zentrale abgesetzt.
Der Empfänger vergleicht, ob die Uhrzeit, die im Befehl mit übertragen wird, um
mehr als ± 30 Minuten von der internen Uhrzeit abweicht. Wenn die Uhrzeit ab-
weicht, wird der Befehl mit einem Fehler zurückgewiesen und ebenfalls eine
Meldung an die Zentrale abgesetzt.
Die Antwort des Befehls wird ebenfalls mit der Prüfsumme versehen und an
den Sender zurückgeschickt. Als Passwort wird das gleiche OCIT-O Passwort
verwendet, welches auch beim Request eingesetzt wurde.
Die Zentrale vergleicht die Prüfsumme mit dem OCIT-O Passwort für das Ge-
rät. Schlägt dieser Vergleich fehl wird die Rückmeldung als falsch interpretiert.
In der Rückantwort für die falsche Uhrzeit ist die lokale Uhrzeit mit enthalten.
Dieser Fall sollte eigentlich nicht auftreten, da die Geräte immer die korrekte
Uhrzeit haben sollten. Um in einem solchen Fall trotzdem Befehle schicken zu
können, muss der Client ein ungesichertes GetTime des Systemobjekts aufru-
fen und sich beim Befehl an die falsche Zeit anpassen.
6.1 Schnittstellenobjekte
Eine Idee von OCIT-Outstations ist, die Schnittstelle in formaler maschinenlesbarer
Form festzulegen. Dazu dient folgendes Metamodell:
Abbildung 4: Metamodell
6.1.1 Grunddatentypen:
In SimpleDomain.Basetypename (Entry BASETYPENAME) können folgende Grund-
datentypen angegeben werden:
Grund- Datentyp in C Maximal gültiger Übertragungsart Bemerkung
datentyp Bereich
BYTE signed char -128 ... +127 als 1 Byte übertragen 8-Bit mit Vorzeichen
(ohne alignment)
UBYTE unsigned char 0 ... 255 als 1 Byte übertragen 8-Bit ohne Vorzeichen
(ohne alignment)
SHORT signed short -32.768 ... 32.767 als 2 Byte übertragen, 16-Bit mit Vorzeichen
High-Byte zuerst (ohne
alignment)
USHORT unsigned short 0 ... 65.535 als 2 Byte übertragen, 16-Bit ohne Vorzeichen
High-Byte zuerst (ohne
alignment)
Tabelle 1: Grunddatentypen
DynAttribut
Die dynamischen Attribute werden vererbt, d.h. eine spezialisierte Klasse hat
auch alle dynamischen Attribute ihrer Basisklasse(n).
STDMETHODS
Standardmethoden werden nicht vererbt. Grund: Die Signatur von Get, Update
hängt von den dynamischen Attributen der Domain ab.
Methoden
werden vererbt, die Methodennummern sind jedoch absolut anzugeben, dabei
ist zu beachten, dass sie kleiner als die größte Standardmethodennummer
(=15), größer als MAXMETHODNR der Basisklasse und kleiner als
MAXMETHODNR der eigenen Klasse sein müssen.
Path
wird mit vererbt. Wenn die Basisklasse einen Path definiert, hat auch die spezi-
alisierte Klasse mindestens den gleichen Path. Falls die BASEDOMAIN bereits
ein OBJTYPE ist, muss auch die spezialisierte Domain eine OBJTYPE Domain
sein. In der OCIT-Outstations Type Datei wird der Path nicht neu angegeben.
Die Elemente EXTENSIBLE und REFPATH bzw. REFPATH_DATA geben an, was
an der Stelle dieser DECL vom referenzierten Typ übertragen wird.
REFPATH und REFPATH_DATA sind alternativ und nur bei Referenzen auf Objekt-
Typen (OBJTYPE-Domains) zulässig. Wenn weder REFPATH noch
REFPATH_DATA angegeben ist, werden die Daten des referenzierten Typs allein
übertragen. Bei SimpleDomain ist dies das Datum des Typs selbst, bei StructDomain
die ggf. vorhandenen dynamischen Attribute.
6.1.3 REFPATH
Wenn REFPATH gesetzt ist, wird eine Referenz in Form eines Pfads (daher der
Name) auf das Objekt, welches in der DECL angegeben ist, übertragen. Wenn z.B.
ein Verweis auf einen relativen Knoten benötigt wird, wird in der DECL das Objekt
„Relativer Knoten“ angegeben und REFPATH gesetzt. Abhängig vom durch
REFPATH angegebenen Wert (siehe weiter unten) wird also ein bestimmter Teil des
Pfades des referenzierten Objekts übertragen. REFPATH darf nur gesetzt werden,
wenn REFERENCE auf eine OBJTYPE-Domain zeigt (nur OBJTYPE-Domains ha-
ben einen PATH).
Eine leere REFPATH / REFPATH_DATA ohne Wert ist unzulässig.
ZNr (2 Byte)
FNr (2 Byte)
und ist dann je nach Objekttyp unterschiedlich. Im Fall des relativen Knotens folgt
noch genau ein Byte mit der relativen Knotennummer. Bei Signalgruppen folgen zwei
Werte: Die relative Knotennummer und die Signalgruppennummer. Der Pfad ist somit
hierarchisch aufgebaut.
Da der erste Teil des Pfades in den allermeisten Fällen redundant ist, kann bei
REFPATH angegeben werden, wie viele Elemente aus dem einbettenden Objekt
übernommen werden können und deshalb nicht explizit übertragen werden. Wenn
also in einem Befehl an ein Signalprogramm eines Kreuzungsgerätes (der Befehl ist
in das BTPPL-Telegramm eingebettet) eine Liste von AP-Werten (die in den Signal-
programm-Befehl eingebettet sind) adressiert wird, teilt sich die Referenz wie folgt
auf:
REFPATH kann positive und negative Werte annehmen. Wenn REFPATH >= 0 ist,
wird die Anzahl von Elementen (hierarchischen Pfadanteilen) codiert, die aus dem
einbettenden Objekt übernommen werden. Der Rest der Pfadelemente des Zielob-
jekts wird anstelle der Referenz übertragen.
4: Bezogen auf den relativen Knoten, sofern das eingebettete Objekt über-
haupt auf den relativen Knoten bezogen ist. Übertragen werden die
Pfadanteile hierarchisch nach dem relativen Knoten
Wenn REFPATH < 0 ist, bedeutet dies: Als Referenz werden nur die folgenden n-
letzten Werte übertragen. Bei –1 z.B. wird die Referenz nur durch das letzte Pfad-
Element des Zielobjekts aufgebaut, bei –2 durch die beiden letzten Pfad-Elemente
des Zielobjekts usw.
Wenn REFPATH nicht gesetzt ist, wird keine Referenz übertragen (also nur die Da-
ten wie bei 6.1.2 dargestellt.).
6.1.3.1 REFPATH_DATA
REFPATH_DATA überträgt wie REFPATH den Pfad, führt aber zusätzlich am Ende
des Pfades die Datenelemente mit, also die eventuell vorhandenen dynamischen At-
tribute. Die Nummerierung ist dieselbe wie bei REFPATH.
6.1.3.2 EXTENSIBLE
Member (2 Byte)
OType (2 Byte)
es folgt der Pfad des durch Member und OType gegebenen Typs.
Bei REFPATH_DATA folgt noch:
DataLen, Länge der folgenden Daten in Bytes als 2 oder 4 Byte codiert (siehe
oben).
Daten des durch Member, OType gegebenen Typs (bei SimpleDomain ist dies
das Datum des Typs selbst, bei StructDomain die ggf. vorhandenen dynami-
schen Attribute).
Ist EXTENSIBLE ohne REFPATH oder REFPATH_DATA gesetzt, wird an Stelle die-
ser DECL folgendes übertragen:
Member (2 Byte)
OType (2 Byte)
DataLen, Länge der folgenden Daten in Bytes als 2 oder 4 Byte codiert (siehe
oben).
Daten des durch Member, OType gegebenen Typs (bei SimpleDomain ist dies
das Datum des Typs selbst, bei StructDomain die ggf. vorhandenen dynami-
schen Attribute).
Die Felder MINCOUNT und MAXCOUNT geben die Anzahl der in dieser DECL de-
klarierten Elemente an. Beide Felder sind optional, wenn sie fehlen gilt
MINCOUNT=MAXCOUNT=1, d.h. immer genau ein Element des in REFERENCE
angegebenen Typs. MAXCOUNT muss immer größer oder gleich MINCOUNT sein.
Falls MAXCOUNT größer MINCOUNT ist, handelt sich es um ein Array. In diesem
Fall wird die Anzahl der tatsächlichen Elemente vorangestellt. Diese Anzahl ist ein
UBYTE, falls MAXCOUNT-MINCOUNT <256, sonst ein USHORT.
6.1.4.1 Formatstrings
Hinweis: Funktion wurde gegenüber Version 1.1 erweitert (Formatstring für Check-
summen)!
Die Namen bzw. Bezeichner der Meldungsparameter, die in einen Formatstring mit
@...@ eingesetzt werden können, müssen dem sich ergebenden „Pfad“ zum darzu-
stellenden Wert entsprechen (im folgenden bezeichnet als ValuePath). Im einfachs-
ten Fall ist der ValuePath einfach der einfache Name des Meldungsparameters. Oft
wird aber ein Wert über mehrere Objektreferenzen angesprochen, damit ergibt sich
ein durch Punkt getrennter ValuePath. Der ValuePath ist beispielsweise in der html-
Dokumentation des Typetool dargestellt.
Nach Auswertung des Formatstrings wird der Formattext dann wie folgt angezeigt:
dann können die Werte mit dem folgenden Formattext angezeigt werden:
<FORMAT>Arraywerte @x.y[].z@</FORMAT>
Nach Auswertung des Formatstrings werden dann alle Werte des Arrays angezeigt:
Die erzeugten Checksummen (20 Byte) sollen aus Gründen der Lesbarkeit in 10
Gruppen je 4 Hexadezimalzeichen dargestellt werden. Beispiel: CAFE-1234-ABCD-
5678-A1B2-C3D4-1A1D-1234-CAFE-ABBA
6.1.5 METHOD
Dieses Metaelement beschreibt eine Methode. Eine Methode hat eine eindeutige
Nummer innerhalb des Interfaces bzw. OBJTYPES (und seiner Basisdomains), in
welchem sie steht.
Eine Methode hat Eingabe- und Ausgabeparameter, welche in den Entrys IN und
OUT deklariert werden. BTPPL überträgt die Eingabeparameter mit einem Request,
die Ausgabeparameter mit einem Respond Telegramm.
Hinweis: In den OCIT-O Versionen 1.0 und 1.1 ist die Art Authentifizierung nicht bei
allen Methoden wählbar. Falls der Tag AUTH in der Definition der Methoden fehlt,
wird dies als AUTH=None betrachtet.
6.1.6 CLASSATTRIBUTE
Die Elemente bilden frei definierbare Attribute einer StructDomain nach dem Key/Va-
lue Prinzip. Ein CLASSATTRIBUTE besteht aus dem Tag NAME, dem Key, sowie
dem Tag VALUE, dem Wert, und einer zusätzlichen beliebigen Beschreibung. Die
Bedeutung ist abhängig vom konkreten Typ (Domain), d.h., ein CLASSATTRIBUTE
eines MSGPART-Typ besitzt üblicherweise eine andere Bedeutung als beispiels-
weise das eines Auftrags (OBJTYPE). Innerhalb eines Typs (StructDomain,
OCIT-O_Protokoll_V3.0_A01 Seite 45 von 67
MSGPART oder OBJTYPE) ist ein Key eindeutig. Sie sind also für alle Objektinstan-
zen eines Typs bekannt und gültig. Die Attribute dienen dazu, Definitionen, die nicht
durch die übliche Form des XML Metamodels in der Spezifikation zu beschreiben
sind, in maschinenlesbarer Form zu hinterlegen. Der Inhalt des VALUE-Tags ist ab-
hängig vom Key (CLASSATTRIBUTE-Typ, Tag NAME). Die Verwendung der Attri-
bute wird im folgenden spezifiziert.
6.1.6.1 FRAME
(Key ist definiert für OBJTYPE, Auftrag): Spezifiziert den Auftragsframe, der von die-
sem Auftrag in einen Sekundenframe geschrieben wird. Das VALUE-Tag gibt die Re-
ferenz auf Member/OType einer von 0:290 abzuleiteten Structdomain an, die das
Frameformat beschreibt. Die referenzierte Domain beschreibt einen kompletten Auf-
tragsframe. Der Auftragsframe ist anzugeben mit <Member#>:<AuftragsFrame_Typ-
name> (Beispiel: 0:MWAuftragFrameR09). Das Attribut kann für Aufträge verwendet
werden, für die das Datenformat statisch ist, z.B. RBL-Telegramme.
6.1.6.2 FRAME_DATA
(Key ist definiert für OBJTYPE, AE): Spezifiziert die Nutzdaten, die von diesem Auf-
tragselement in den Auftragsframe geschrieben werden. Der VALUE-Tag gibt die
Referenz auf Member/OType einer Domain an, die das Datenformat im Auftrags-
frame beschreibt. Wird eine SimpleDomain referenziert, wird deren skalarer Wert in
den AF geschrieben. Bei einer StructDomain werden deren dynamischen Attribute in
den AF geschrieben. (Beispiel: 1:ZEITINTERVALL). Das Attribut kann für die Be-
schreibung des Datenformats von Aufträgen verwendet werden, bei denen sich das
Auftragsframeformat dynamisch aus der Zuordnung von Auftragselementen zum Auf-
trag ergibt. Das CLASSATTRIBUTE wird somit Auftragselementen zugeordnet.
6.1.6.3 CATEGORY
(Key ist definiert für MSGPART): Weist einer Meldung eine Unterkategorie zu, z.B.
Hardware, Übertragungssystem, Anwenderprogramm.
6.1.6.4 DEGREE
(Key ist definiert für MSGPART): Spezifiziert den Schweregrad einer Meldung.
6.1.6.5 FORMAT
(Key ist definiert für MSGPART): Spezifiziert einen Formattext für die Präsentation
der Meldung. Der Formatstring kann Parameter eines MSGPART-Elements enthal-
ten, die innerhalb von DECL-Tags definiert sind
6.2 Datendefinitionen
Die in OCIT-Outstations verwendeten Datendefinitionen teilen sich in OCIT-
Outstations-Objekte und Hersteller-Objekte auf. Zur ihrer exakten Beschreibung wird
der XML-Standard verwendet, der von namhaften Softwareherstellern (Microsoft,
6.2.1 OCIT-Outstation-DTD-Datei
Die Datei OCIT-O-DTD_Vx.x.dtd beschreibt die Struktur aller im Definitionsbereich
von OCIT-Outstations verwendeter TYPE-Dateien. Siehe auch Pkt. 6.2.3.
6.2.2 OCIT-Outstations-Objekte-TYPE-Dateien
Die OCIT-Outstations-Objekte sind mittels TYPE-Dateien beschrieben:
Die Bedeutung der einzelnen Elemente soll im Folgenden an einem Beispiel erläutert
werden. Das Beispiel hat keinerlei Beziehung zu den realen OCIT-Outstations Struk-
turen, es dient nur zur Veranschaulichung der Struktur der OCIT-Outstations Type-
Datei. Der Kommentar steht jeweils hinter der Zeile. Um die Beschreibung nicht zu
lang zu gestalten, werden für das Verständnis irrelevante Teile, d.h. alle Sachen, die
sich wiederholen, mit [...] herausgekürzt.
<?xml version="1.0" encoding="ISO-8859-1"?>
In dieser Zeile wird nur angegeben, dass es sich um eine XML 1.0 Datei , im Zeichensatz ISO-
8859-1 codiert handelt. Die Zeile ist für alle Versorgungen fest
<!DOCTYPE OCIT_TYPE_DATEI SYSTEM "ocit.dtd">
Verweis auf die verwendeten Strukturinformationen. Fehlt der Eintrag, werden beliebige XML-
Dateien akzeptiert
<OCIT_TYPE_DATEI>
<OCT>
Eigentlicher Beginn der OCIT-Type-Datei
<MANUFACTURER>Ampelpower Ltd.</MANUFACTURER>
Hersteller des Kreuzungsgerätes. Der Hersteller im Beispiel ist fiktiv, wie die ganze Ver-
sorgungsdatei.
<DEVICETYPE>Standardampel</DEVICETYPE>
Typ des Kreuzungsgerätes
<VERSION>1</VERSION>
zugehörige OCIT-Version
<SUBVERSION>15</SUBVERSION>
Herstellerspezifische. Nummerierung
<NUMBERDOMAIN>
numerischer Datentyp, der später eingesetzt wird. Integer- und Fließkommatypen werden
mit NUMBERDOMAIN spezifiziert.
wenn nur die einzelnen Werte eine Bedeutung haben, steht anstelle von INTDOMAIN eine
ENUMDOMAIN (s.u.)
<NAME>ZEITSTEMPEL_UTC</NAME>
Name des Datentyps. Namen sind wie Bezeichner in C aufgebaut. D.h. sie dürfen im spezi-
ellen keine Blank und Punkte beinhalten.
<DESCRIPTION>Universal Time Coordinated</DESCRIPTION>
Beschreibung des Datentyps
<MEMBER>0</MEMBER>
Nummer des Herstellers innerhalb der ODG, der das Access-Objekt definiert hat. Die Her-
stellernummern werden von der ODG vergeben. Objekte, die im Standard definiert sind, ha-
ben im Member-Feld den Eintrag 0
<OTYPE>48</OTYPE>
<BASETYPENAME>ULONG</BASETYPENAME>
Basistyp der Domain. Es sind die Basistypen BYTE, SHORT, LONG, UBYTE, USHORT, ULONG,
FLOAT, DOUBLE, STRING, WSTRING, BLOB erlaubt, siehe Tabelle 1: Grunddatentypen.
<MIN>1</MIN>
Kleinste erlaubte Zahl des Typs
<MAX>0xffffffff</MAX>
<INTERFACE>
</PATHPART>
<STDMETHOD>Get</STDMETHOD>
Die Variablen des Objekttyps können gelesen werden, allerdings nur alle gemeinsam. Um
Variablen auch getrennt bearbeiten zu können, muss das Objekt aus weiteren Objekttypen
bestehen .Wenn die Objekttypen direkt integriert sind, ist es möglich, das gesamte Ob-
jekt zu lesen, bei einem Verweis über Referenz kommt nur die jeweilige Referenz zurück.
<MAXMETHODNR>32</MAXMETHODNR>
<METHOD>
<NAME>Schalte</NAME>
<DESCRIPTION>Nächsten Signalprogrammschaltwunsch der Zentrale entgegennehmen
</DESCRIPTION>
<NR>16</NR>
<IN>
<DECL>
<NAME>Schaltauftrag</NAME>
<DESCRIPTION>von Zentrale übergebener Schaltauftrag</DESCRIPTION>
<REFERENCE>
<MEMBER>0</MEMBER>
<NAME>ZSO_SIGNALPROGRAMM</NAME>
</REFERENCE>
</DECL>
</IN>
<OUT>
<DECL>
<NAME>ret</NAME>
<DESCRIPTION>OK, PARAM_INVALID, INTERVALL_INVALID</DESCRIPTION>
<REFERENCE>
<MEMBER>0</MEMBER>
<NAME>RetCode</NAME>
</REFERENCE>
</DECL>
</OUT>
</METHOD>
</OBJTYPE>
[...]
</OCT>
</OCIT_TYPE_DATEI>
Das Systemobjekt ist das Objekt 0 des Members ODG. Der Subtype ist immer 0. Es
enthält lediglich die Funktionen zum Setzen und Lesen des OCIT-O Passworts.
Diese Funktionen sind nicht in einem Interface zusammengefasst, sondern im Inter-
face 0 als spezielle Funktionen ausgewiesen.
6.3.1 Systeminterface
Das Systeminterface hat folgende Funktionen:
4..15 (reserviert)
6.3.1.1 Get
Get erhält keine Eingabeparameter und hat (neben dem Funktionsstatus) nur einen
Ausgabeparameter. Der Ausgabeparameter unterscheidet sich je nach Objekttyp und
hat genau die Struktur, die über die DECL Einträge der DynAttribut Liste (und der al-
ler BaseDomains) des OBJTYP angegeben ist.
2 Hinweis: Durch diese Technik ist es einfach, einen Browser aufzubauen. Alle komplexeren Objekte,
die sich getrennt behandeln lassen, werden nur über Referenzen verwiesen, so dass z. B. beim Aus-
lesen eines Feldgerätes die Basisinformationen (Name, Nr., ...) direkt übertragen werden, während die
komplexeren Elemente wie Signalprogramme als Referenzen abgelegt sind und nur ihr Name ange-
zeigt werden muss. Erst wenn der Benutzer das jeweilige Element auswählt, wird das Objekt auch
wirklich geladen.
6.3.1.2 Update
Update setzt den Wert eines Feldes neu. Als Eingabeparameter wird Update genau
dieselbe Struktur übergeben, die vorher mit Get geliefert wurde. Es können auch Re-
ferenzen mit dieser Funktion gesetzt werden. Eine Garbage-Collection findet nicht
statt, weil Objekte jederzeit direkt referenziert werden können.
6.3.1.3 Create
Mit „Create“ werden neue Objekte angelegt. Create funktioniert wie Update. Die
neuen Objekte werden vom Kreuzungsgerät automatisch korrekt hinzugefügt. Create
erhält als Eingabe genau die gleichen Werte wie ein Update, nur existierte das Ob-
jekt vorher noch nicht.
6.3.1.4 Delete
Mit Delete werden Objekte gelöscht. Die Funktion lässt ein Löschen nur zu, wenn
kein Objekt mehr auf das Element verweist. Ansonsten wird eine Liste von Objekten
zurückgegeben, die aus Referenzen auf Objekte besteht, die auf den Löschkandidat
noch verweisen. Die Referenzen werden als EXTENSIBLE REFPATH gespeichert.
Die Methode Delete wird mit SHA-1 Authentifizierung abgewickelt
</PATHPART>
<STDMETHOD>Get</STDMETHOD>
<MAXMETHODNR>32</MAXMETHODNR>
</OBJTYPE>
<OBJTYPE>
<NAME>objB</NAME>
<DESCRIPTION>Beispielobjekt B, von objA abgeleitet</DESCRIPTION>
<MEMBER>0</MEMBER>
<OTYPE>501</OTYPE>
<BASEDOMAIN>
<MEMBER>0</MEMBER>
<NAME>objA</NAME>
</BASEDOMAIN>
<DECL>
<NAME>nameB</NAME>
<DESCRIPTION>Beispielname B</DESCRIPTION>
<REFERENCE>
<MEMBER>0</MEMBER>
<NAME>OBJECT_NAME</NAME>
</REFERENCE>
</DECL>
<STDMETHOD>Get</STDMETHOD>
<MAXMETHODNR>64</MAXMETHODNR>
</OBJTYPE>
<OBJTYPE>
<NAME>objC</NAME>
<DESCRIPTION>Beispielobjekt C</DESCRIPTION>
<MEMBER>0</MEMBER>
<OTYPE>502</OTYPE>
<DECL>
<NAME>name</NAME>
<DESCRIPTION>Name</DESCRIPTION>
<REFERENCE>
<MEMBER>0</MEMBER>
<NAME>OBJECT_NAME</NAME>
</REFERENCE>
</DECL>
<DECL>
<NAME>objs</NAME>
<DESCRIPTION>Beispiel Embedded Objekte als Polymorpher array</DESCRIPTION>
<REFERENCE>
<MEMBER>0</MEMBER>
<NAME>objA</NAME>
</REFERENCE>
<MINCOUNT>0</MINCOUNT>
<MAXCOUNT>4</MAXCOUNT>
<REFPATH_DATA>3</REFPATH_DATA >
<EXTENSIBLE></EXTENSIBLE>
</DECL>
<STDMETHOD>Get</STDMETHOD>
<MAXMETHODNR>32</MAXMETHODNR>
</OBJTYPE>
</OCT>
</OCIT_TYPE_DATEI>
Pfad ab Gerät 5/
ObjC
name=ObjC
0
ObjA
Zeit=0x38d0dea4
nr=17
name=ObjA1
1
ObjA
Zeit=0x38d0dfa9
nr=23
name=ObjA2
3
ObjB
Zeit=0x38d0dfb9
nr=37
name=ObjA3
nameB=ObjB1
7.3 Telegramme
Request Telegramm für ObjA/1.Get()mit udp von Zentrale 0.
UDP
HdrLen 000 00 r r 0 JobTime JobTime (Lo)
0
11 (Hi) 83
Job Time E6
Member
Job Time Cnt(Hi) Member (Lo)
4 Cnt(Lo) (Hi)
00 00
00 00
Method
OTYPE (Hi) OTYPE (Lo) Method (Lo)
8 (Hi)
01 F4 00
00
ZNr (Hi) ZNr (Lo) FNr (Hi) FNr (Lo)
12 00 00 00 05
Fletcher Fletcher
Path
16 (Hi) (Lo)
01
F1 77
UDP
HdrLen 001 00 r r 0JobTime JobTime (Lo)
0
10 (Hi) 83
Job Time Job Time E6
Member (Hi) Member (Lo)
4 Cnt(Hi) Cnt(Lo)
00 00
00 00
OTYPE (Hi) OTYPE (Lo) Method (Hi) Method (Lo)
8 01 F4 00 00
ZNr (Hi) ZNr (Lo) FNr (Hi) FNr (Lo)
12 00 00 00 05
RetCode RetCode
16 38 D0
0 0
20 DF A9 17 06
UDP
HdrLen 000 00 r r 0 JobTime JobTime (Lo)
0
10 (Hi) 84
Job Time Job Time 15
Member (Hi) Member (Lo)
4 Cnt(Hi) Cnt(Lo)
00 00
00 00
OTYPE (Hi) OTYPE (Lo) Method (Hi) Method (Lo)
8 01 F6 00 00
ZNr (Hi) ZNr (Lo) FNr (Hi) FNr (Lo)
12 00 00 00 05
Fletcher
Fletcher (Hi)
16 (Lo)
A8
A6
UDP
8.1 Trace-Datei
Der Telegrammverkehr wird im Lichtsignalsteuergerät oder in einer zentralen Einrich-
tung erfasst und in einer „Trace-Datei“ gespeichert. Diese Möglichkeit zum vollständi-
gen Erfassen des btppl-Telegrammverkehrs in Trace-Dateien ist für Zentralen und
Feldgeräte verpflichtend.
8.2.1 Trace-Connection
Die Trace-Connection ist grundsätzlich von VD-Server (Zentrale) und Lichtsignal-
steuergerät zu implementieren.
Beispiele:
ZNR=42;FNR=23\n
FNR=23\n
ZNR=42\n
\n
Socket-Timeout: Das Trace-Tool muss die Daten binnen 5 Sekunden abgenommen
haben, ansonsten kann die Verbindung geschlossen werden.
OCIT_UI1 unsigned 0 ... 255 als 1 Byte übertragen 8-Bit ohne Vorzeichen
char (ohne alignment)
OCIT_UI2 unsigned 0 ... 65.535 als 2 Byte übertragen, High-Byte zu- 16-Bit ohne Vorzeichen
short erst (ohne alignment)
OCIT_UI4 unsigned 0 ... 4.294.967.295 als 4 Byte übertragen, High-Byte zu- 32-Bit ohne Vorzeichen
long erst (ohne alignment)
OCIT_SI1 signed char -128 ... +127 als 1 Byte übertragen 8-Bit mit Vorzeichen
(ohne alignment)
OCIT_SI2 signed short -32.768 ... 32.767 als 2 Byte übertragen, High-Byte zu- 16-Bit mit Vorzeichen
erst (ohne alignment)
OCIT_SI4 signed long -2.147.483.648 ... als 4 Byte übertragen, High-Byte zu- 32-Bit mit Vorzeichen
2.147.483647 erst (ohne alignment)
btppl_ip_address unsigned 0 ... 4.294.967.295 als 4 Byte übertragen, High-Byte zu- 32-Bit ohne Vorzeichen
long erst (ohne alignment)
btppl_port unsigned 0 ... 65.535 als 2 Byte übertragen, High-Byte zu- 16-Bit ohne Vorzeichen
short erst (ohne alignment)
8.4 Auftragsstruktur
Um Auftragsframes der Trace Datensätze von z.B. Liste.GetSFSince parsen zu kön-
nen ist die Information über die zum Zeitpunkt der Übertragung vorhandene Auftrags-
struktur notwendig. Hierzu wird am Anfang jeder Trace-Datei ein Trace-Eintrag des
Aufrufs der Methode GetListConfig() von SystemobjektFeldgeraet eingetragen (Re-
quest und Respond). Die Methode wird nicht explizit von einer externen Instanz (z.B.
Trace-Tool) aufgerufen, es wird eine Struktur mit der Auftragsinformation in die
Trace-Datei eingetragen, welche der Rückgabe des Aufrufs GetListConfig() ent-
spricht. Dieser lokale Methodenaufruf wird nicht in die Zentrale oder das Lichtsignal-
steuergerät übertragen.
In den Tracedatensätzen erhalten die Felder "ipadr" und "port" den Wert 0, das Feld
"protokoll" erhält den Wert 'x'.
In den Aufrufparameter ZnrFnrFilter muss für FNr und ZNr jeweils der NullValue
(65535) eingetragen werden, damit die Konfiguration aller Feldgeräte eingetragen
wird.
Aufrufparameter ListNrs (leeres Array), somit wird die Konfiguration aller veränderba-
ren Listen eingetragen.
Fall 2: Trace-Connection
Aufrufparameter ListNrs (leeres Array), somit wird die Konfiguration aller veränderba-
ren Listen eingetragen.
Bei der Analyse über Socket wird diese Auftragsinformationen einmal bei Socketauf-
bau gesendet. Der Stream über den Trace-Port und die Trace-Datei sind inhaltlich
identisch und ineinander überführbar.
Abbildungsverzeichnis
Abbildung 1: OCIT-Outstations – Schnittstellen ......................................................................... 8
Abbildung 2: Die Schichten im ISO-OSI-Refernzmodell ............................................................ 12
Abbildung 3: Protokolle für OCIT-Outstations .......................................................................... 19
Abbildung 4: Metamodell ......................................................................................................... 39