Das Protokoll Antcas TCP ist komplett offen dokumentiert. Die Kommunikation erfolgt via TCP.
Die Kommunikation erfolgt via TCP mit einer offenen Verbindung von Antcas Control. Der Server kann pro Schnittstelle immer nur mit einem Client verbunden werden. Der Port kann frei gewählt werden. Standard ist der Port 5'252. Die Maximale Paketgrösse ist auf 3'000 Bytes limitiert. Es können mehrere Pakete hintereinander übertragen werden. Die Schnittstelle besitzt ein Timeout. Wird nach einer gewissen Zeit keine Antwort gegeben, beginnt der Prozess von vorne.
Hinweis: Zeichen wie Umlaute und Sonderzeichen werden im ISO-8859-1-Format definiert.
Alle verwendeten Variablen sind Case Sensitive, dies bedeutet, dass zwischen Gross- und Kleinschreibung unterschieden wird. Hier ein Beispiel, wie eine einfache Übertragung aufgebaut sein kann:
ANTCAS_TCP
OK:3000
TL:x:1:Licht/1. OG/EIN
TL:ui:1:Licht/1. OG/DIM
START
x:1:TRUE
OK
KA
RE
Sobald eine Verbindung aufgebaut wurde, sendet Antcas Control ein Handshake zum Client. Dieser kann optional die maximale Buffergrösse in Bytes enthalten, damit Antcas Control jedes Telegramm beschränkt beim Senden, bis eine Bestätigung zurückgegeben wird. Die Grösse von MAX_BUFFER_SIZE sollte nicht zu klein gewählt werden, um die Geschwindigkeit der Schnittstelle hoch zu behalten.
Antcas Control -> Client:
ANTCAS_TCP\n
Antcas Control <- Client:
OK[:MAX_BUFFER_SIZE=3000]\n
Die Initialisierung erfolgt nach dem Handshake. Es werden sämtliche Werte der Datenpunkte vom Client an Antcas Control gesendet. Siehe Wert übertragen. Ist die Übertragung abgeschlossen, wird ein Start-Befehl ausgelöst. Danach sendet Antcas Control seine Werte. Diese werden nach der Initialisierung gefiltert. Es wird also kein Datenpunkt übertragen, der nicht existiert.
Antcas Control <- Client:
START\n
Zudem kann eine Übersetzungstabelle übertragen werden. Dies steigert die Performance bei vielen Datenpunkten. Die Übersetzung muss direkt nach dem Handshake erfolgen. Variablen können auch doppelt definiert werden. Z.B. Temperatur vom Typ INT und REAL. Die Datenpunkte werden komplett separat behandelt.
Antcas Control <- Client:
TL:x:1:Licht/1. OG/EIN\n
Hier wird Licht/1. OG/EIN nach x:1 übersetzt für die Kommunikation. Der Server sendet anstelle des Namens nur noch x:1.
Damit die Verbindung offen bleibt, wird ein zyklischer Watchdog eingesetzt. Dieser überwacht den Client, sowie den Server. Das Timeout tritt nach ca. 6s ohne Antwort ein. Der Client darf nach 10 Sekunden ohne Antwort vom Server die Verbindung trennen. Dieser wird nur eingesetzt, wenn keine Daten übertragen werden.
Antcas Control -> Client:
KA\n
Antcas Control <- Client:
RE\n
Alle Daten werden als String übertragen. Der Datentyp wird als Präfix des Wertes definiert. Ein Datenpunkt darf nur einmal vorkommen, auch wenn dieser mehrere Datentypen aufweist. Der Datenpunkt kann auch einen Pfad enthalten. Z.B.:
x:Licht/1. OG/EIN:TRUE\n
oder mit Übersetzungstabelle:
x:1:TRUE\n
Nachdem der String übertragen wurde, muss eine Bestätigung erfolgen, erst dann wird der nächste Wert übertragen:
OK\n
Antcas Control <-> Client:
x:Datenpunkt:FALSE/TRUE\n
Antcas Control <-> Client:
ui:Datenpunkt:[0..65536]\n
Hinweis: Andere Werte müssen als Zeichenkette übertragen werden.
Antcas Control <-> Client:
i:Datenpunkt:[-32768..32767]\n
Antcas Control <-> Client:
r:Datenpunkt:[3.402823E-38..1.175 495E+38]\n
Antcas Control <-> Client:
d:Datenpunkt:D#YYYY-MM-DD\n
Antcas Control <-> Client:
t:Datenpunkt:T#5d4h3m2s1ms\n
Antcas Control <-> Client:
dt:Datenpunkt:DT#YYYY-MM-DD[-HH:II:SS]\n
Antcas Control <-> Client:
s:Datenpunkt:String[max. 64 Zeichen]\n
Achtung: Das Senden eines Linefeeds (\n) ist nicht erlaubt.
Dieser Datentyp kommuniziert immer nur vor dem Datenaustausch und sendet alle kommenden Ereignisse einer Zeitschaltuhr. Eine Implementierung auf SPS-Ebene in Antcas Control ist nicht möglich. Jedoch kann ein Kalender in der SPS manipuliert werden.
Vor dem Startbefehl wird die Anzahl gewünschter Ereignisse angefragt. Der Wertbereich liegt zwischen 0..255. Ausserdem wird die aktuelle Uhrzeit in UTC zurückgegeben. Diese dient aktuell nur der Fehleranalyse. Der Wert ist jedoch erforderlich.
Antcas Control <- Client (vor START):
ts:Datenpunkt:s;MAX_USINT;ACTUAL_TIME\n
Die erste Uhrzeit definiert den Zeitpunkt für das Einschalten und die zweite für das Ausschalten. Es kann auch zu Überschneidungen kommen. Um den Speicher nicht zu sehr zu belasten, wird ein Ringspeicher verwendet. Dies bedeutet, dass ein Wert ersetzt wird und nicht alle Werte nachrücken. Daher müssen alle Werte berücksichtigt werden. Nach dem Empfang wird eine Bestätigung an den Server zurückgesendet. Der Wert kann auch identisch mit dem von oben sein, um das Programm einfacher zu gestalten.
Antcas Control -> Client:
ts:Datenpunkt:USINT;DT#YYYY-MM-DD-HH:II:SS;DT#YYYY-MM-DD-HH:II:SS\n
Damit bei einer unterbrochenen Kommunikation kein Ereignis ausgelöst wird, werden alle nicht aktiven Einträge deaktiviert. Dies ist der Fall, wenn der Ein- und Ausschaltzustand identisch ist. Die minimale Schaltzeit liegt dadurch bei einer Sekunde.
Antcas Control -> Client:
ts:Datenpunkt:USINT;DT#1970-01-01-00:00:00;DT#1970-01-01-00:00:00\n