Promotic

Přenos dat v síti přes Sokety

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ří. Pro tento účel 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.
© MICROSYS, spol. s r.o.