Protokol MiniNet je používán v zařízeních rakouské firmy Bernecker & Rainer. Komunikace v sítích s těmito zařízeními je vždy typu Master – Slave.
| Důležité | |
|---|---|
Od verze Setru 9.0.17.0 je názvosloví sjednoceno podle schématu: PLC Master - CU RADIOSLAVE ... CU RADIOMASTER - Slave PLC CU (radiomodem) připojený přes SCC k PLC Master je nazýván
RADIOSLAVE (RS), Starší Setr používá opačné označení, tedy: ( PLC Master - CU RADIOMASTER ... CU RADIOSLAVE - Slave PLC ) |
Většina zpráv protokolu MiniNet se dá charakterizovat touto strukturou:
| STX/8 | LEN/8 | NODE/8 | INDEX/8 | DATA/8*N | CHK/8 |
kde:
| STX | začátek rámce 02h. Vyskytne-li se 02h v datech, musí následovat 00h. Tzn. 02h je vysíláno jako 0200h |
| LEN | délka (od STX do CHK včetně), doplněné 00h v datech (za 02h) se nezapočítávají. LEN může nabývat hodnot od 05h do FFh. |
| NODE | adresa, viz také parametr |
| INDEX | identifikace rámce pro soulad dotazů a odpovědí u mastera (číslování, opakování, chyby apod.) |
| DATA | řada bytů vlastních dat |
| CHK | kontrolní byte (výpočet uveden dále) |
Výjimku z výše uvedené struktury tvoří jednobytová zpráva ACK (06h), kterou vysílá pouze slave jako odpověď na některé požadavky mastera.
Protokol MININET-MORSE vybírá výše uvedenou strukturu dat z jakéhokoliv došlého rámce. V praxi většina PLC vysílá před STX a za CHK různý počet synchronizačních bytů FFh.
Adresace:
CU (MR400) RS odesílá data vždy na adresu, která se vytvoří tak, že nejnižší byte vlastní adresy (na příslušném Node) se přepíše bytem NODE, viz Formát dat. V případě, že NODE je 10h (broadcast) paket je zahozen. MR400 RM odesílá data vždy na adresu, ze které přišel dotaz.
a) PLC -> MR400
V případě stanice RM kontrola, zda jsou očekávána data. RM smí vyslat data jen jako odpověď na žádost – neočekávaná data jsou zahozena.
Kontrola, zda přijatý rámec má velikost min. 5 byte (výjimka pouze u stanice RM na ACK). Kratší rámce zahozeny.
V přijatém rámci vyhledáno STX, tzn. rámec nemusí začínat STX. Není-li v rámci STX (nenásledováno 00h) je rámec zahozen.
Kontrola délky LEN. Je-li větší než velikost přijatého rámce, je rámec zahozen.
Dle udané délky LEN vyhledáno CHK, tzn. rámec nemusí končit CHK.
Kontrola CHK.
MORSE kanálem se přenáší jen INDEX a DATA (viz. Formát dat). (STX, LEN, NODE, CHK se nepřenáší) Zprávy jsou v kanálu MORSE přenášeny typem paketu USER DATA. V případě ACK se přenáší paket USER DATA s nulovou délkou dat.
b) MR400 -> PLC
K přijatým datům z MORSE kanálu doplněno na příslušné pozice STX, LEN, NODE, CHK (dopočítáno).
Jen RS smí přijmout paket s nulovou délkou. V tomto případě vytvořen jednobytový paket 06h.
Rámec odeslán do SC kanálu.
Z uvedeného je zřejmé, že MORSE kanálem jsou přenášena pouze užitečná data a Index zabezpečená algoritmy systému Morse. Na drátové lince (SC kanálu) jsou data zabezpečena algoritmy protokolu MiniNet.
Na lince CU-PLC není používán žádný handshake – ani sw (pomocí ACK či jiných znaků v linkové vrstvě protokolu) ani hw (je používáno pouze 3 vodičové propojení – RXD, TXD, GND). V případě přeplnění fronty paketů na odeslání do MORSE kanálu (4 pakety) není jak informovat PLC, a proto jsou případné další přicházející pakety zahozeny.
PLC Master - RADIOSLAVE ...... RADIOMASTER - PLC Slave
MiniNet 690F0011 690F0022 MiniNet
PLC Master ----> RS 11 (RADIOSLAVE 690F0011)
FFFFFF 02 07 22 40 1B52 4B FFFF dotaz
RS 11 ----> RM 22
40 1B52 adresa source 11 se uloží v CU RM 22
RM 22 ----> PLC Slave
02 07 22 40 1B52 4B
PLC Slave ----> RM 22
FF 02 06 22 C080 DA FFFFFF odpověď
RM 22 ----> RS 11
C0 80 RM 22 odešle paket na adresu 11
RS 11 ----> PLC Master
02 06 22 C0 80 DAMININET parameters: PLC Master - CU RADIOSLAVE ... CU RADIOMASTER - Slave PLC (m)ode :RADIOSLAVE (wired to master) (s)lave adr :FFFF (q)uit
| (m) |
POZOR – Setr starší než 9.0.17.0 používá opačné označení ! |
| (s) | Pouze pro CU RADIOSLAVE:
|
Byte Minet::calc_chk(Byte *pb, Word size)
{
Word chk,
i;
chk = 0;
i = 0;
while (i < size) {
if ((*(pb - 1) == (Byte)STX) && (*pb == 0) && (i>4)) {
//4=STX|LEN|NODE|INDEX
i++; //supplementary 00 after STX in data area is not included
pb++;
}
else {
chk <<= 1;
if ((chk & 0x100) == 0x100) {
chk += 1;
chk &= 0xFF;
}
chk += *pb++;
if ((chk & 0x100) == 0x100) {
chk += 1;
chk &= 0xFF;
}
i++;
}
}
if ((Byte)chk == (Byte)STX) chk = ~chk;
return((Byte)chk);
}//Minet::calc_chk