Protokoll

Protokollen Antcas TCP er helt åbent dokumenteret. Kommunikation sker via TCP.

Kommunikation

Kommunikationen sker via TCP med en åben forbindelse fra Antcas Control. Serveren kan pr. grænseflade altid kun være forbundet med én klient. Porten kan frit vælges. Standard er port 5'252. Den maksimale pakke størrelse er begrænset til 3'000 bytes. Der kan overføres flere pakker efter hinanden. Grænsefladen har et timeout. Hvis der ikke gives svar inden for en vis tid, starter processen forfra.

Bemærk: Tegn som diakritiske tegn og specialtegn defineres i ISO-8859-1-formatet.

Alle anvendte variabler er case-sensitive, hvilket betyder at der skelnes mellem store og små bogstaver. Her er et eksempel på hvordan en simpel overførsel kan være opbygget:

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

Handshake

Så snart en forbindelse er oprettet, sender Antcas Control et handshake til klienten. Dette kan valgfrit indeholde den maksimale bufferstørrelse i bytes, så Antcas Control begrænser hvert telegram ved afsendelsen, indtil der gives bekræftelse. Størrelsen på MAX_BUFFER_SIZE bør ikke vælges for lille for at opretholde grænsefladens hastighed.

Antcas Control -> Klient:

ANTCAS_TCP\n

Antcas Control <- Klient:

OK[:MAX_BUFFER_SIZE=3000]\n

Initialisering

Initialiseringen sker efter handshaken. Alle værdier af datapunkterne sendes fra klienten til Antcas Control. Se Værdi overføres. Er overførslen fuldført, udløses en startkommando. Derefter sender Antcas Control sine værdier. Disse filtreres efter initialiseringen. Der overføres altså ikke et datapunkt, der ikke eksisterer.

Antcas Control <- Klient:

START\n

Oversættelsestabel

Derudover kan en oversættelsestabel overføres. Dette øger ydeevnen ved mange datapunkter. Oversættelsen skal ske direkte efter handshaken. Variabler kan også defineres dobbelt. F.eks. temperatur af typen INT og REAL. Datapunkterne behandles helt separat.

Antcas Control <- Klient:

TL:x:1:Licht/1. OG/EIN\n

Her oversættes Licht/1. OG/EIN til x:1 til kommunikationen. Serveren sender i stedet for navnet kun x:1.

Watchdog / Keep Alive

For at forbindelsen forbliver åben, anvendes en cyklisk watchdog. Denne overvåger både klienten og serveren. Timeout indtræffer efter ca. 6s uden svar. Klienten må efter 10 sekunder uden svar fra serveren afbryde forbindelsen. Denne anvendes kun, hvis der ikke overføres data.

Antcas Control -> Klient:

KA\n

Antcas Control <- Klient:

RE\n

Værdi overføres

Alle data overføres som en streng. Datatypen defineres som præfiks for værdien. Et datapunkt må kun forekomme én gang, selvom det har flere datatyper. Datapunktet kan også indeholde en sti. F.eks.:

x:Licht/1. OG/EIN:TRUE\n

eller med oversættelsestabel:

x:1:TRUE\n

Efter at strengen er overført, skal der gives bekræftelse, først derefter overføres den næste værdi:

OK\n

Bool

Antcas Control <-> Klient:

x:Datenpunkt:FALSE/TRUE\n

Uint

Antcas Control <-> Klient:

ui:Datenpunkt:[0..65536]\n

Bemærkning: Andre værdier skal overføres som streng.

Int

Antcas Control <-> Klient:

i:Datenpunkt:[-32768..32767]\n

Real/Float

Antcas Control <-> Klient:

r:Datenpunkt:[3.402823E-38..1.175 495E+38]\n

Date

Antcas Control <-> Klient:

d:Datenpunkt:D#YYYY-MM-DD\n

Time

Antcas Control <-> Klient:

t:Datenpunkt:T#5d4h3m2s1ms\n

Datetime

Antcas Control <-> Klient:

dt:Datenpunkt:DT#YYYY-MM-DD[-HH:II:SS]\n

String

Antcas Control <-> Klient:

s:Datenpunkt:String[max. 64 tegn]\n

Advarsel: At sende et linjeskift (\n) er ikke tilladt.

Timeswitch

Denne datatype kommunikerer altid kun før databyttet og sender alle kommende begivenheder for en tidsrelæ. En implementering på SPS-niveau i Antcas Control er ikke mulig. Dog kan en kalender i SPS manipulere.

Antal begivenheder anmodes

Før startkommandoen anmodes antallet af ønskede begivenheder. Værdien ligger mellem 0..255. Derudover returneres den aktuelle tid i UTC. Denne tjener aktuelt kun fejlanalyse. Værdien er dog påkrævet.

Antcas Control <- Klient (før START):

ts:Datenpunkt:s;MAX_USINT;ACTUAL_TIME\n

Overførelse af skiftestatus

Den første tid definerer tidspunktet for at tænde, og den anden til at slukke. Der kan også være overlapninger. For ikke at belaste hukommelsen for meget, anvendes en ringbuffer. Dette betyder, at en værdi erstattes og ikke alle værdier flyttes frem. Derfor skal alle værdier tages i betragtning. Efter modtagelse sendes der en bekræftelse tilbage til serveren. Værdien kan også være identisk med den ovenstående for at gøre programmet simpelt.

Antcas Control -> Klient:

ts:Datenpunkt:USINT;DT#YYYY-MM-DD-HH:II:SS;DT#YYYY-MM-DD-HH:II:SS\n

Ingen skiftetid

For at der ikke udløses en begivenhed ved afbrudt kommunikation, deaktiveres alle ikke-aktive poster. Dette er tilfældet, hvis ind- og udskiftningstilstanden er identiske. Den minimale skiftetid ligger dermed på én sekund.

Antcas Control -> Klient:

ts:Datenpunkt:USINT;DT#1970-01-01-00:00:00;DT#1970-01-01-00:00:00\n