Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Transmisja danych w sieci poprzez Sokety

Komunikacja poprzez sokety w chwili obecnej jest w systemie PROMOTIC uważana już za starszy sposób transmisji danych i została zastąpiona przez prostszą i bardziej jawną komunikacją przy pomcy XML patrz opis: Współdzielenie danych XML.

Soket komunikacja jest przeznaczona głównie do wymiany danych pomiędzy aplikacjami.

Podczas komunikacji po sieci wykorzystuje się model klient-server. To znaczy, że projektant musi wpierw ustawić dwie (lub więcej) aplikacji, które będą razem komunikować i zdecydować, która z aplikacji będie oferować dostęp do swoich danych a która aplikacja będzie odczytywać lub zapisywać te dane. Jeżeli aplikacja oferuje dane do wykorzystania, wtedy jest to aplikacja typu Serwer danych, jeżeli aplikacja odczytuje inne, oferowane dane, wtedy jest to aplikacja typu Klient danych. W praktyce to znaczy, że w aplikacji PROMOTIC serwer definiujemy tzw. serwerowe grupy soketów, następnie w aplikacji PROMOTIC klient definiujemy klienckie grupy soketów.

I jeżeli w serwerowej grupie soketów jest ustawione tylko jej imię i parametry wykorzystania, kliencka grupa soketów określa, z którym komputerem węzłowym będzie się komunikować i do której grupy serwerowej będzie się odnosić dana grupa kliencka.

Użytkownik definiuje kliencką część komunikacji tym, że wytwarza klienckie grupy soketów w zakładce PmRoot > Sokety. Klient jest w tym przypadku określony adresem komputera docelowego i nazwą grupy serwerowej.

Serwerowa część komunikacji jest analogicznie definiowana przez wytworzenie grup serwerowych w tejże zakładce.

Sama komunikacja jest wykonywana przy pomocy obiektu PmData, który jest w ustawieniach przyszeregowany do jednej ze zdefiniowanych grup (kliencckich czy też serwerowych), transmisja wykonuje się przez wywołanie metod PmData.ReadFromSocket lub PmData.WriteToSocket.

Uwaga: Komunikacje poprzez sokety w systemie PROMOTIC podlega licencjonowaniu, tzn. żeby działała w trybie runtime (z licencją runtime), jest konieczne do licencji runtime dokupienie pozycji dla sieciowych klientów typu "PmDataClient". Zakup licencji jest konieczny tylko jeżeli w danej aplikacji jest zdefiniowana serwerowa grupa soketów i jest konieczny zakup takiej ilości licencji, z jaką maksymalną ilością klientów będzie się aplikacja komunikować. W środowisku deweloperskim działają komunikacje przez sokety automatycznie w celu testowania dla maksymalnej ilości 5 klientów.

 
Do transmisji danych można zastosować dwa rodzaje protokołów sieciowych:
1. protokół TCP, który umożliwia transmisję danych o nieograniczonej długości, jak również zapewnia poprawność kolejności i poprawności danych ipołączenia. Jednak nawiązanie połączenia z komputerem docelowym nie jest tak szybkie jak w przypadku protokołu UDP.
2. protokół UDP, który umożliwia bardzo szybkie nawiązanie połączenia, jednak długość danych jest ograniczona do 512 bajtów. W konfiguratorze Ograniczona długość danych (UDP) w oknie Soket serwerowa grupa jest to pozycja "Ograniczona długość danych (UDP)".

Oba rodzaje protokołów są w systemie PROMOTIC standardowo wykorzystywane tak, że nadaje się w nich nagłówek PROMOTIC a za nim następują transmitowane dane. W nagłówku znajduje się identyfikacja danych, które są przeznaczone do jednoznacznego określenia danych po stronie docelowej. To jednoznaczne określenie jest dane nazwą "Item" pozycji w konfiguracji soketów (patrz zakładka PmData > Sokety). Standardowe soket wiadomości są więc zawarte w nagłówku i standardowo mogą być tym rodzajem komunikacji połączone wyłącznie aplikacje PROMOTIC pomiędzy sobą.

 
UDP bez nagłówka PROMOTIC:

W celu możliwości transmisji dowolnych danych użytkownika poprzez sokety został wytworzony podtyp komunikacji UDP - UDP bez nagłówka PROMOTIC. Przy pomocy tego typu transmisji można przenośić dowolne dane zdefiniowane w obiekcie danych. Ponieważ system PROMOTIC do tych transmitowanych danych już nic nie dodaje, projektant ma możliwość zdefiniować dokładnie taką strukturę danych, jaka odpowiada danym na drugiej stronie transmisji.

Bajty wartości typu danych Integer oraz Long są transmitowane w odwrotnej kolejności niż na komputerach PC (najpierw yostanie przeniesiony HIGH a dopiero następnie LOW bajt). Taki sposób transmisji wartości typu danych Integer oraz Long (tzw. Big Endian) jest bowiem w komunikacji poprzez Sokety standardem. Jeżeli byłoby konieczne przesyłać takie wartości pod postacią używaną w komputerych PC (tzw. Little Endian), wtedy jest konieczne do pozycji PmData > Sokety > Pozycja (Item) zapisać tekst "e=L;". W innym przypadku pozycja ta powinna pozostać pusta (ponieważ nagłówek nie jest trasmitowany, to ta pozycja już nie służy do identyfikacji danych).

Przy wyborze tego rodzaju transmisji danych może obiekt serwerowy (tzn. obiekt podłączony do serwerowej grupy soketów) tylko odbierać dane a klient wyłącznie dane transmitować a więc jest możliwe tylko wywołanie metody WriteToSocket. Jednakw tym wypadku może istnieć większa ilość obiektów serwerowych (tzn. obiektów które odbierają dane ze soketów) i z tego powodu musi istnieć mechanizm, który przy odbiorze danych rozpozna, do którego obiektu należą odbierane dane. W tym celu jest konieczne w obiektach serwerowych pierwsze trzy zmienne uważać za pozycje systemowe a dopiero w następnych pozycjach będzie zapisywana odebrana wiadomość. Opiszmy więc znaczenie tych trzech systemowych pozycji:

0. pozycja (nazwijmy ją PM_enable) musi być typu danych Integer. Wartość 0 oznacza, że dany obiekt w tej chwili nie odbiera zadnych danych, 1 oznacza odbiór. Wartość można dynamicznie zmieniać.
1. pozycja (nazwijmy ją PM_id) musi być typu danych String. Wartość określa, czy odebrana wiadomość należy do danego obiektu (jeżeli odbiór nie jest zakazany przez 0.pozycję). Wartość składa się z tekstu który ma na przykład kształt: "l=24;b3=235;b7=4;". W tym przypadku to znaczy, że odebrane dane należą do danego obiektu tylko jeżeli ich długość wynosi 24 bajty (l=24, l jako length) a równocześnie 3. bajt ma wartość 235 (b3=235, b jako bajt) i równocześnie 7. bajt ma wartość 4 (b7=4). Przy tym każde określenie jest zakończone średnikiem (;), określenie "bx=y;" może występować więcej razy, i jeżeli tekst jest pusty, wtedy odebrane dane należą do danego obiektu zawsze, jeżeli odebrana wiadomość nie należy do żadnego innego obiektu z nie pustym tekstem.
2. pozycja (nazwijmy ją PM_size) musi być typu danych Long. Jeżeli wiadomość należy do danego obiektu, wtedy odebrana wiadomość zostanie zapisana do pozycji poza 3 wartościami systemowymi. Do 2. pozycji zapisze się z kolei liczba pozycji danych, ktśre zostały wypełnione odebraną wiadomością.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice