Promotic
WikipediaLinkedInYoutubeTwitterFacebook

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

Komunikace přes sockety 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.

Socket komunikace slouží především pro výměnu dat mezi aplikacemi po síti.

Při komunikaci po síti se používá model klient-server. To znamená, že uživatel musí nejdříve 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í, je to aplikace typu SERVER dat, pokud aplikace přistupuje na jiná, poskytovaná data, je tato 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 definováno jen její název a provozní parametry, klientská soketová skupina říká, se kterým uzlovým PC 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 záložce PmRoot > Sokety. Klient je zde parametrizován adresou cílového PC a jménem serverové skupiny.

Serverová část komunikace je analogicky definována vytvořením serverovských skupin ve stejné záložce.

Vlastní komunikace je realizována pomocí Promotic objektu PmData, který je při konfiguraci zařazen do jedné z definovaných skupin (klientských či serverovských), a přenos se inicializuje metodami PmData.ReadFromSocket nebo PmData.WriteToSocket.

Upozornění: Socket komunikace je v systému PROMOTIC licencovaná, tzn. aby běžela v runtimu (s runtime licenci), je potřeba přikoupit do runtime licence položku pro síťové klienty typu "PmDataClient". Licenci je nutné přikoupit jen pokud v dané aplikaci je definovaná serverová socket 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í fungují socket 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 sledu a kontrolu dat a spojení. Navázání spojení s cílovým PC 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 B. V konfigurátoru Typ přenosu okna Soket server skupina je to položka "Omezená délka dat UDP/IPX".

Oba typy protokolů jsou v systému PROMOTIC standardně používány tak, že se v nich 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 socket konfiguraci u konkrétního data (viz záložka PmData > Sokety). Standardní socket zprávy jsou tedy obaleny v hlavičcce a standardně proto mohou být tímto typem komunikace spojeny jen PROMOTIC aplikace mezi sebou.

 
UDP bez PROMOTIC hlavičky:

Pro umožnění posílat přes sockety 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. Jelikož 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 datového typu Integer a Long se posílají v obráceném pořadí než na PC (nejdřív se pošle HIGH a pak LOW bajt). Takto posílaný tvar Integer a Long hodnot (tzv Big Endian) je totiž v Socket komunikaci standardem. Pokud by bylo potřeba posílat tyto hodnoty v PC tvaru (tzv Little Endian), pak se musí do položky PmData > Sokety > Položka (Item) napsat text "e=L;". Jinak 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 musí být proto mechanismus, který při příjmu dat rozpozná, kterému datovému objektu tato zpráva patří. Pro tento účel je nutno u server datových objektů první tři datové položky považovat 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 definuje, zda přijatá data patří tomuto objektu (pokud neni zakázán 0.položkou). Hodnota se skládá z textu který má například tvar: "l=24;b3=235;b7=4;". V tomto případě to znamená, že přijatá data patří tomuto objektu, jen 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.
 
- Příklad aplikace na UDP bez PROMOTIC hlavičky viz Příklad na komunikaci přes RACOM radiomodemy přes "UDP Sockety bez Pm hlavičky".
- Příklad aplikace se socket komunikací viz Příklad na komunikaci přes Sockety.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice