Komunikace přes sokety se nyní v systému PROMOTIC již považuje za starší způsob přenosu dat a nahradila ji jednodušší a transparentnější komunikace pomocí XML, viz popis:
Sdílení XML dat.
Soket komunikace slouží především pro výměnu dat mezi aplikacemi v síti.
Při komunikaci v síti se používá model klient-server. To znamená, že projektant musí nejprve definovat dvě (nebo více) aplikace, které spolu budou komunikovat a rozhodnout se, která z aplikací bude přístup na svoje data poskytovat a která z aplikací bude na tato data přistupovat (číst nebo zapisovat). Pokud aplikace data poskytuje k používání, pak je to aplikace typu
server dat, pokud aplikace přistupuje na jiná, poskytovaná data, pak je to aplikace typu
klient dat. V praxi to znamená, že v PROMOTIC server aplikaci definujeme tzv.
serverové soketové skupiny, a v PROMOTIC klient aplikaci definujeme
klientské soketové skupiny.
Zatím co u
serverové soketové skupiny je nastaveno jen její název a provozní parametry,
klientská soketová skupina říká, se kterým uzlovým počítačem se bude komunikovat a na kterou
serverovskou skupinu se bude tato
klientská skupina odkazovat.
Uživatel definuje klientskou část komunikace tím, že vytváří
klientské soketové skupiny v konfiguračním okně "
Sokety". Klient je v tom případě parametrizován adresou cílového počítače a
názvem serverové skupiny.
Serverová část komunikace je analogicky definována vytvořením
serverovských skupin ve stejné kartě.
Vlastní komunikace je realizována objektem
PmaData, který je při konfiguraci zařazen do jedné z definovaných skupin (
klientských nebo
serverovských), a přenos se inicializuje pomocí metod
PmaData.ReadFromSocket nebo
PmaData.WriteToSocket.
Upozornění: Soket komunikace je v systému PROMOTIC
licencovaná, tzn. aby běžela v runtime (s runtime licencí), je nutno přikoupit do runtime licence položku pro síťové klienty typu
"PmDataClient". Licenci je nutné přikoupit pouze pokud v dané aplikaci je definovaná serverová soket skupina a je potřeba přikoupit tolik licencí, s kolika klienty se předpokládá, že aplikace bude maximálně komunikovat. Ve vývojovém prostředí jsou funkční soket komunikace pro testování automaticky pro maximálně 5 klientů.
K přenosu lze použít dva typy síťových protokolů:
1. protokol TCP, který zajištuje přenos neomezené délky dat, stejně jako zajištění správnosti pořadí a kontrolu dat a spojení. Navázání spojení s cílovým počítačem však není tak rychlé jako u UDP protokolu.
2.
protokol UDP, který zajištuje velice rychlé navázání spojení, délka přenášených dat je však omezena na 512 bajtů. V konfigurátoru "
Omezená délka dat (UDP)" v okně "
Soket server skupina" je to položka "Omezená délka dat (
UDP)".
Oba typy protokolů jsou v systému PROMOTIC standardně používány tak, že se v nich nejprve posílá PROMOTIC hlavička a za ní následují přenášená data. V hlavičce je identifikace dat, která slouží k jednoznačnému určení dat na cílové straně. Toto jednoznačné určení je dáno názvem "Item" položky v soket konfiguraci u konkrétního data (viz karta "
PmaData > Sokety"). Standardní soket zprávy jsou tedy obaleny v hlavičcce a standardně proto mohou být tímto typem komunikace spojeny jen aplikace PROMOTIC mezi sebou.
UDP bez PROMOTIC hlavičky:
Pro umožnění posílat přes sokety libovolná uživatelská data byl vytvořen podtyp UDP komunikace - UDP bez PROMOTIC hlavičky. Tímto typem komunikace lze přenášet libovolná data definovaná v datovém objektu. Protože systém PROMOTIC k těmto datům již nic nepřidává, může projektant sestrojit přesně taková data, jaká potřebuje aplikace na druhé straně.
Bajty hodnot typu
Integer a
Long se posílají v obráceném pořadí než na počítači (nejprve se pošle HIGH a pak LOW bajt). Takto posílaný tvar
Integer a
Long hodnot (tzv.
Big-endian) je totiž v Soket komunikaci standardem. Pokud by bylo potřeba posílat tyto hodnoty v PC tvaru (tzv.
Little-endian), pak je nutno nastavit do položky
PmaData > Sokety > Položka (Item) text "
e=L;". V jiném případě by tato položka měla zůstat prázdná (protože se neposílá hlavička, tak tato položka již neslouží k identifikaci dat).
Při volbě tohoto typu přenosu může server objekt (tzn. objekt připojený na soket server skupinu) jen přijímat data a klient objekt jen vysílat data a lze tedy volat jen metodu
WriteToSocket. Může však být více server objektů (tzn. objektů které přijímají data ze soketů) a proto musí být mechanismus, který při příjmu dat rozpozná, kterému datovému objektu tato zpráva patří. K tomuto účelu je nutno považovat u server datových objektů první tři proměnné za systémové a teprve do dalších položek se bude ukládat přijatá zpráva. Nyní popíšeme tvar těchto tří systémových položek:
0. položka (nazvěme ji PM_enable) musí být typu Integer. Hodnota 0 znamená, že tento objekt nyní nepřijímá, 1 přijímá. Hodnotu lze dynamicky měnit.
1. položka (nazvěme ji PM_id) musí být typu String. Hodnota určuje, zda přijatá data patří tomuto objektu (pokud není zakázán 0.položkou). Hodnota se skládá z textu který má například tvar: "l=24;b3=235;b7=4;". V tom případě to znamená, že přijatá data patří tomuto objektu, pouze pokud jejich délka je 24 bajtů (l=24, l jako length) a zároveň 3. bajt má hodnotu 235 (b3=235, b jako bajt) a zároveň 7. bajt má hodnotu 4 (b7=4). Přičemž každé určení končí středníkem (;), určení "bx=y;" se může vyskytovat vícekrát a pokud je celý text prázdný, pak to znamená, že přijatá zpráva tomuto objektu patří vždy, pokud ji nechce žádný datový objekt s neprázdným textem.
2. položka (nazvěme ji PM_size) musí být typu Long. Pokud zpráva patří tomuto objektu, pak se přijatá data uloží do položek za 3 systémovými položkami. Do 2. položky se pak uloží počet datových položek, které se zprávou naplnily.