RDC – Komunikační blok

Symbol blokuPotřebná licence: ADVANCED
PIC

Popis funkce
Tento blok je speciální vstupně-výstupní blok. Hodnoty se předávají mezi dvěma bloky se stejným číslem, ale na různých počítačích (popřípadě na stejném počítači mezi dvěma Simulinky nebo Simulinkem a systémem REXYGEN). Hodnoty se předávají UDP/IP protokolem. Tento protokol je stejně rozšířený jako známější TCP/IP (tj. funguje na všech lokálních sítích LAN i na linkách sítě Internet). Algoritmus v každém kroku provádí následující operace:

  • Otestuje vstup HLD. Pokud je HLD = on, činnost bloku končí.
  • Má-li parametr period kladnou hodnotu, zjistí rozdíl mezi systémovým časem a časem posledního vyslání paketu. Pokud je tato doba menší než hodnota period, činnost bloku končí. (Pokud je hodnota parametru period menší nebo rovna nule, testování rozdílu času se neprovádí.)
  • Vytvoří paket, který obsahuje číslo bloku, tzv. číslo invoke (pořadové číslo paketu), hodnoty u0 u15. Všechny hodnoty se do paketu ukládají ve standardně užívaném pořadí (tzv. network byte order), takže aplikace může běžet na libovolném počítači/procesoru.
  • Odešle paket na zadanou IP adresu a port.
  • Zvětší o 1 číslo invoke.
  • Otestuje, jestli přišel nějaký paket.
  • Pokud ano, otestuje, zda je paket v pořádku (souhlasí velikost, číslo bloku, číslo invoke).
  • Pokud je paket v pořádku, nastaví výstupy y0 y15 na hodnoty z přijatého paketu.
  • Nastaví výstup iE (pokud došlo k nějaké chybě) a výstup fresh.

Z uvedeného popisu je zřejmé, že dvojice bloků (se stejným číslem, ale každý na jiném počítači) periodicky přenáší 16 hodnot v každém směru. Vždy se přenese u(i) z jednoho bloku na y(i) druhého bloku. Protože protokol UDP/IP (na rozdíl od TCP/IP) nemá mechanismus pro ošetření ztráty ani duplicity paketu, musí se to zajistit v algoritmu. K ošetření ztráty slouží mechanismus čísla invoke. To je stavová proměnná, která se zvětší o 1 při každém odeslaném paketu. Protože blok si pamatuje invoke číslo minulého přijatého paketu, pozná, k čemu došlo, a podle toho reaguje – pakety s číslem invoke menším než číslo invoke posledního přijatého paketu odmítá. Protože se však po ukončení a opětovném spuštění programu číslo invoke vynuluje, algoritmus přesto přijme paket s číslem menším než číslo posledního paketu, pokud je rozdíl velký (větší než 10). Z implementačních důvodů musí mít všechny bloky v jedné aplikaci stejný local port a v jedné aplikaci může být nejvýše 64 bloků RDC. Pokud by na jednom počítači běžely dva programy, které používají blok RDC, musí být parametr local port v každé aplikaci jiný.

Vstupy

HLD

Vstup pozastavující činnost bloku. Pokud je HLD = on, blok nevysílá ani nepřijímá žádné pakety.

Bool

u0..u15

Hodnoty, které se předávají/zapisují na hodnoty y0 y15 spolupracujícího bloku RDC

Double (F64)

Výstupy

iE

Zobrazuje kód poslední chyby. Použitá čísla jsou v následující tabulce:

Long (I32)

0 ....

Bez chyby

Trvalé chyby, vznikají v inicializační části bloku, systém je nedokáže sám opravit ( < 0)

-1 ...

překročen maximální počet bloků (z interních důvodů je omezen počet bloků v jednom programu na 64)

-2 ...

blok má jiný lokální port (z interních důvodů musí mít všechny bloky v jednom programu (jedné úloze) stejný parametr lport)

-3 ...

nelze otevřít socket (protokol UDP/IP je nedostupný)

-4 ...

nelze přiřadit lokální port (port je pravděpodobně obsazen jinou službou nebo programem)

-5 ...

nelze nastavit tzv. neblokující mód socketu (blok RDC tento mód využívá a v případě chyby nemůže správně fungovat)

-10 ..

chyba v inicializaci socketové knihovny

-11 ..

chyba v inicializaci socketové knihovny

-12 ..

chyba v inicializaci socketové knihovny

Přechodné chyby, mohou vzniknout ve kterémkoliv průchodu kódu, systém je dokáže sám opravit ( > 0)

1 ....

proběhla inicializace bloku, ale ještě nebyl přijat žádný platný paket s hodnotami

2 ....

přijat chybný paket (chybná délka – buď došlo k chybě při přenosu a data jsou ztracena nebo může jít o konflikt s jinou službou/programem)

4 ....

chyba při příjmu paketu (chybu hlásí socketová knihovna)

8 ....

chyba při odeslání paketu (chybu hlásí socketová knihovna)

fresh

Udává počet sekund od přijetí posledního paketu. Má význam pro detekci chyby protilehlého bloku.

Double (F64)

y0..y15

Signál přijatý ze vzdáleného bloku RDC – hodnoty naposledy přijatého paketu

Double (F64)

Parametry

target

Zde se napíše jméno nebo IP adresa počítače, kde běží spolupracující blok RDC. Může to být i broadcast adresa a pak spolupracující blok může být na libovolném počítači v síti, ale při malých periodách (orientačně kratších než 50ms) může docházet k zahlcení sítě. Pro typickou lokální síť (tj. IP adresa 192.168.1.x, maska 255.255.255.0) je broadcast adresa 192.168.1.255 .

String

rport

Vzdálený port (tzv. remote port). Je to vlastně upřesňující adresa nebo též adresa služby protokolu UDP/IP. Pokud nenastane kolize s jinými programy, které používají protokol UDP/IP, je vhodné tento parametr neměnit.  1288

Word (U16)

lport

Místní port (tzv. local port), význam podobný jako u parametru rport. Remote port platí pro počítač, kam je paket posílán, local port platí pro počítač, ze kterého je paket posílán.  1288

Word (U16)

id

Identifikátor bloku. Toto číslo se posílá v paketu a bloky ve druhém počítači podle něj poznají, pro který blok RDC jsou data určena. Principiálně jej přijmou všechny bloky, ale jen blok, který má stejné číslo id, jej akceptuje a nastaví výstupy na hodnoty z paketu.   1  32767 1

Long (I32)

period

Perioda v sekundách, určující nejkratší dobu, po které se vysílají a případně čtou došlé pakety. V případě hodnoty period 0, se vysílají (a případně i čtou) pakety při každém spuštění bloku. Nastavení kladné hodnoty je výhodné zejména ve spojitých modelech simulovaných systémem Simulink (při použití solveru typu Variable step).

Double (F64)

Příklad
Následující obrázky představují možné použití bloku RDC. Příklad představuje „vzdálený autotuner“. Jeden počítač (označený Computer1) představuje standardní PID regulátor, který řídí technologický proces. Jeho signály pv, sp, mv jsou vedeny na vstupy bloku RDC a přenášeny na druhý počítač (označený Computer2). Na tomto počítači je autotuner (viz popis bloku PIDMA), který po náběžné hraně na vstupu TUNE provede identifikační experiment a vypočte parametry K, Ti , Td vhodného regulátoru (výstup pk, pti, ptd bloku PIDMA). Aby toto mohl udělat, musí se přenášet hodnota mv autotuneru na akční veličinu technologického procesu. Proto je výstup mv (hodnota akční veličiny) a TBSY (slouží k přepínání mezi mv PID regulátoru a autotuneru). Všimněme si ještě, že hodnoty pk, pti, ptd jsou vyvedeny na vstupy bloku RDC2, takže se hodnoty přenesou na odpovídající výstupy bloku RDC1, kde by je bylo možné rovnou použít. Příklad je záměrně jednoduchý, aby byl dobře vidět princip bloku RDC a nikoliv složitost algoritmu, který lze v Simulinku vytvořit. Pro pochopení funkce si stačí uvědomit, že funkce uvedeného schématu je stejná, jako když bloky RDC1 a RDC2 vypustíme, zbytek obou výkresů sloučíme do jednoho a spojíme to, co původně vedlo na vstup u0 bloku RDC1, s tím, co původně vedlo na výstup y0 bloku RDC2, atd. pro u1, y1,….

PIC

OPC server pro blok RDC

Existuje OPC server, kterým se lze připojit k bloku RDC.

V popisu bloku RDC (viz výše) je uvedeno, že dva bloky RDC si vzájemně vyměňují hodnoty u a y. Jeden z této dvojice bloků může být emulován popisovaným OPC serverem. Jediný parametr, který se zadává je číslo portu. Je to lport bloku (resp. všech bloků), které OPC server emuluje. Hodnota se zadává jako parametr target name v textové podobě. Implicitní hodnota tohoto parametru je stejná, jako pro blok RDC (tj. 1288), takže ji obvykle není nutno měnit.

Pokud je přesto potřeba číslo portu změnit, tak hodnotu je možné zadat buď přímo systémovým programem Windows regedit (klíč je
SOFTWARE\REX Controls\REX_<version>\RdcOPCSvr\TargetName
- hodnotu je možné zadat do buď do sekce LocalMachine nebo CurrentUser, někdy je hodnota ve speciální podsekci VirtualStore a na 64-bitových počítačích je ještě podsekce Wow6432Node) nebo pomocí programu RexOPCcfg.exe (je součástí instalace systému REXYGEN, ale není na něj odkaz ve startmenu Windows - je potřeba v položce Key změnit text RexOPCsvr na RdcOPCsvr a požadované číslo portu zadat do pole Target name).

Server emuluje bloky všech identifikačních čísel na tomto portu. Protože takových bloků je velké množství, jsou při procházení platných signálů (tzv. browse) zobrazeny jen bloky, od kterých server dostal již nějaká data. OPC klient však může číst i zapisovat hodnoty i od ostatních bloků (čtené hodnoty jsou samozřejmě nesmyslné, ale operace čtení neselže, což je v některých případech důležité).

V adresním prostoru OPC serveru jsou položky ve tvaru

  RDC<ID>.<pin>,

kde

<ID>

je číslo remote/emulovaného bloku

<pin>

je název signálu nabývající jedné z hodnot:

    • y0 y15 – výstupy vzdáleného bloku (tj. vstupy u0 u15 emulovaného bloku), které lze pouze zapisovat
    • u0 u15 – vstupy vzdáleného bloku (tj. výstupy y0 y15 emulovaného bloku), které lze pouze číst
    • fresh – doba uplynulá od přijetí posledního paketu v sekundách (tj. výstup fresh emulovaného bloku)

2020 © REX Controls s.r.o., www.rexygen.com