Protokol SEP slouží ke komunikaci mezi komunikační jednotkou MR25 nebo MR400 a technologickou měřicí jednotkou SEP. Umožňuje přenášet data z 8 binárních vstupů s 8 čítači, 8 binárních výstupů, 8 analogových vstupů a 2 analogových výstupů včetně nastavování kalibračních konstant.
Popis technologické jednotky SEP je uveden na www.racom.eu, v kapitole Produkty/Hardware/Příslušenství/SEP.
Struktura paketu SEP, který je vysílán z protokolu do sítě MORSE:
| BO/8 | BI/8 | 8xAI/16 | temp/16 | 2xAO/16 | 8xcount/32 | crc/16 |
BO | – binary output – 1 představuje sepnuté relé |
BI | – binary input – 1 je úroveň H, t.j. svorka není sepnutá na
zem |
AI | – analogové vstupy v pořadí |
temp | – analogová teplota procesoru |
AO | – analogové výstupy v pořadí |
count | – čítače v pořadí |
Protokol SEP při komunikaci se jednotkou SEP používá průmyslový standard MODBUS v režimu RTU. Referenční manuál tohoto standardu lze najít např. na www.modicon.com a jeho popis není součástí tohoto dokumentu. Protokol nepodporuje celou množinu funkcí MODBUS, implementovány jsou pouze funkce pro práci se vstupy/výstupy a některými typy registrů.
Formát povelů Modbus je uveden také ve článku „Formát rámce MODBUS pro MORSE“ (MODBUS – format).
Oblast | Funkce | Typ | Rozsah adres (hex) | Obsah | ||||||||||||||||||||
Dout |
|
|
|
| ||||||||||||||||||||
Dinp | 0x02 | R |
|
| ||||||||||||||||||||
Ainp, Aout, Count |
|
|
|
| ||||||||||||||||||||
Flash |
|
|
|
|
Ke standardním funkcím byla doplněna funkce 0x1E
, která
usnadňuje komunikaci mezi SEPem a nadřízeným systémem. Umožňuje pomocí
jednoho zavolání přečíst všechny stavy SEPu a současně nastavit potřebné
výstupy.
Nadřízený procesor plní úlohu zařízení master. Připojený SEP je vždy slave. Tato konfigurace je dána pevně a nelze ji měnit. Tak, jak standard MODBUS přikazuje, master cyklicky obvolává jednotlivá slave a jejich odpovědi zpracovává.
Pro orientaci uveďme struktury běžných paketů a princip generace CRC:
Query (dotaz od masteru):
|Adresa/8 |Funkce/8 |Start/16 |Number/16 |CRC/16 |
Response (odpověď od slave):
|Adresa/8 |Funkce/8 |Count/8 |Data/8x count |CRC/16 |
CRC používá polynom 0xA001
. Lze jej generovat pomocí
tabulky nebo pomocí cyklu a bitových rotací. Generovaní pomocí tabulky
je osmkrát rychlejší než výpočet v cyklu, protože odpadá rotace každého
byte po bitech.
0x01
– READ_OUTPUT_STATUS
Funkce slouží pro čtení binárních výstupů. Adresní prostor pro tuto funkci je následující:
Start: 0x00 - 0x07, 0xF0
Number:0x01
- 0x08
, při adrese 0xF0
povinně
1
Tato čísla představují počáteční adresu a počet požadovaných
prvků. Je potřeba zdůraznit, že součet adresy a počtu prvků nesmí
překročit nejvyšší možnou adresu. Při překročení libovolné z hodnot mimo
povolený rozsah je vrácena EXCEPTION_RESPONSE
. Toto
pravidlo platí pro všechny funkce bez výjimky.
0x02 – READ_INPUT_STATUS
Funkce slouží pro čtení binárních vstupů. Adresní prostor pro tuto funkci je následující:
Start: 0x00 - 0xFF
Number:0x01 -
0x08
0x03 – READ_HOLD_REGS
Funkcí se čtou paměťové registry. Do těchto registrů je také zamapována interní flash paměť, ve které jsou uloženy mimo jiné konstanty pro analogové vstupy/výstupy. Adresní prostor pro tuto funkci je následující:
Start: 0x00 - 0x07
Number:0x01 -
0x08
0x04 – READ_INPUT_REGS
Funkcí se čtou analogové vstupy a čítače. Hodnoty (vyjma čítačů),
vracené touto funkcí, jsou přepočítávány na zadaný rozsah, tzn. rozsah
analogového vstupu (např. 4 – 20 mA) je přepočítán na rozměr fyzikální
veličiny. Meze pro přepočet jsou uloženy ve flash paměti a je možné je
modifikovat programem conf.exe
. Každý vstup lze
konfigurovat samostatně. Čítače lze nastavovat a nulovat. Adresní
prostor pro tuto funkci je následující:
Start:
0x00 - 0x08
– pro analogové
vstupy 0x09 - 0x0A –
pro analogové
výstupy 0x10 - 0x20
– pro čítače
Čítače jsou čteny jako běžné 16bitové vstupní registry, přičemž ale jejich vlastní obsah je 32bitový. Tj. v jednom čtení je dobré číst nejméně dva registry (od sudé adresy), abychom obdrželi kompletní obsah jednoho čítače.
Také je potřeba zdůraznit, že tyto čítače mají přeházené pořadí byte, než je obvyklé. Normální 32bitové slovo je organizováno takto:
0 | 1 | 2 | 3 |
MSB | LSB |
Příklad – stav čítače 00000124
v paketu SEP v síti
MORSE:
08:28:22.401| |69112202 69112201|S00I OUT 58| 89 0user FF7E 0391 00A4 032C 02D6 0317 033D 02E3 02EE 000E 0016 0000 0000 0124 0000 ---- ----
Protože MODBUS je orientován bytově a ne wordově, dochází k přehazování pořadí byte v čítačích. S touto skutečností je potřeba počítat v nadřízeném systému. Pořadí byte v čítačích se pak jeví následovně:
3 | 2 | 1 | 0 |
LSB | MSB |
Příklad – stav čítače 00000124
v rámci Modbus na
lince RS485:
08:28:22.351 tx 8 | S00 0104 0010 0010 F003 08:28:22.396 rx;i 37 | S00 0104 2024 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0004 0000 -- ---- --
0x05 – FORCE_SINGLE_OUT
Funkce slouží pro nastavování binárních výstupů. Adresní prostor pro tuto funkci je následující:
Start: 0x00 - 0x07
0x06 – FORCE_SINGLE_OUT
Funkcí lze modifikovat paměťové registry. Jelikož do těchto registrů je také zamapována interní flash paměť, je potřeba tuto paměť odemknout zápisem na „speciální binární výstup“. Po úspěšném zápisu nebo po 10 sec je paměť automaticky opět zamčena. Předchází se tím nechtěnému přepsaní konstant v SEPu při laborování nebo nevhodně naprogramovaném masteru. Prakticky se jedná o dva úkony:
Zápis
log. 1
na vyhrazenou adresu0xF0
v binárních výstupech, čip potvrdí tento zápis běžným způsobem.Zápis hodnoty do paměti flash. Následuje automatické uzamčení paměti. Zápis je opět potvrzen běžným způsobem.
Pokud není paměť flash před zápisem nejprve odemčena, SEP sice
potvrdí tento zápis korektně, ale ve skutečnosti se nic neprovede. Stav
zámku paměti lze rovněž číst dotazem na stav binárního výstupu
0xF0
. Log. 1
značí odemčeno. Není nutné
dodržovat okamžité pořadí odemčení, zápis, nýbrž je možné mezi tyto dva
úkony vložit posloupnost dalších dotazů. Pouze je nutné počítat s
automatickým časovým zamčením. Při nastavování čítačů si je potřeba
uvědomit, že čítače jsou 32bitové a zapisovat vždy celý čítač – dva
zápisy po sobě nebo použít funkci 0x10
.
Adresní prostor pro tuto funkci je následující:
Start: 0x00 - 0xFF
– pro flash
0x100 - 0x101
– pro analogové výstupy 0x110 -
0x130
– pro čítače
0x0F – FORCE_MULTIPLE_OUTS
Funkci lze s výhodou použít pro nastavování binárních výstupů. Tato funkce umí nastavit všechny výstupy podle předložené masky. Adresní prostor je následující:
Start: 0x00 - 0x07, 0xF0
Number:0x01
- 0x08,
– při adrese 0xF0
povinně
1
0x10 – RESET_MULTIPLE_REGS
Pro hromadné nastavování paměťových registrů slouží funkce. Platí pro ni totéž jako pro funkci 0x06. Adresní prostor je následující:
Start: 0x00 - 0xFF
– pro flash
0x100 - 0x101
– pro analogové výstupy 0x110 -
0x130
– pro čítače
Number:0x01 -
0x08
Tato funkce není zatím plně podporována. Doporučujeme používat
místo ní vícenásobné volání funkce 0x06
(FORCE_SINGLE_REG).
0x1E – READ_ALL
Tato nová funkce byla do protokolu zapracována pro usnadnění ovládaní celého SEPu. Dvojice dotaz/odpověď umožňuje v jednom komunikačním cyklu přečíst a nastavit všechny vstupy-výstupy. Tvar dotazu i odpovědi je poněkud odlišný od standardu proto jej nyní podrobněji popíšeme:
|Adresa/8 |Funkce/8 |Bin.Out/8 |An.Out1/16 |An.Out2/16 |Rez./8 |CRC/16 |
V dotazu, jak je zřejmé, jsou obsaženy stavy binárních a analogových výstupů. Bináry jsou prostá bitová maska, která se po korektním příjmu překopíruje na výstupy SEPu. Analogové hodnoty jsou nejprve přepočteny podle mezí z paměti flash a po té nastaveny na skutečné výstupy.
|Addr/8|Funkce/8|Count/8|Bin.Out/8|Bin.In/8|An.In/9x16|An.Out/2x16|CRC/16|
V odpovědi jsou aktuální vstupy a výstupy z okamžiku čtení ze
SEPu. V analogových vstupech (vstup 0x08
) je obsažena také
teplota čipu AD převodníku. Jelikož ten má vlastní oteplení
zanedbatelné, lze tento údaj použít jako teplotu okolí. Tento údaj není
přepočítávaný, neboť jednotka není určena k měření teploty – je na
nadřízeném systému jak s touto hodnotou naloží.
Jednotky SEP mohou být uspořádány různými způsoby:
Spojení dvou SEPů rádiovou linkou. Stavy vstupů Dinp 0-7 a Ainp 0-1 se přenáší na výstupy Dout 0-7 a Aout 0-1 protější stanice.
Spojení většího počtu SEPů s řídicím centrem. SEPy jsou v postavení Slave a stavy jejich vstupů Dinp 0-7 a Ainp 0-7 se přenáší do centra, z centra jsou ovládány výstupy Dout 0-7 a Aout 0-1.
Spojení 1-3 SEPů připojených linkou RS 232 ke společnému MR25 s řídicím centrem. Funkce jako v případě 2.
Protokol SEP využívá pro komunikaci CU s PLC SEP funkce:
04 | – pro čtení stavu čítačů |
1E | – pro zápis a čtení z binárních a analogových vstupů a výstupů |
Výsledný záznam o stavu SEPu je udržován v paměti CU. Dojde-li ke změně tohoto záznamu, která je větší než jsou nastavené limity, je vyslán do protistanice nebo na centrálu paket SEP, který obsahuje aktuální stav SEPu.
V případě spojení dvou SEPů (výše uvedené schema 1) je tento stav přenesen na protější SEP.
V případě centrály (schema 2) je paket SEP uložen do paměti cache v centrální CU, kde čeká na pravidelný dotaz od Master PLC, které pracuje v protokolu Modbus. Povely z centra jsou odesílány jako příkazy Modbus do CU s protokolem SEP. Odtud jsou pak funkcemi 04 a 1E předávány do PLC SEP.
Tato funkce umožňuje komunikaci jednoho SEPu s několika různými protistanicemi. Digitální a analogové vstupy jsou rozděleny do 8 skupin (groups):
Skupina: obsahuje tyto kanály: No Din Dout Ain Aout 0 0 0 0 0 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7
Každá skupina má definovanou vlastní cílovou adresu v menu
„(g)roup parameters
„. Tyto adresy se smí vzájemně lišit jen
v posledním byte. Každá skupina má také přiřazenu svoji protější
skupinu. Adresy a skupiny na obou koncích rádiové linky musí být
definovány recipročně, viz příklad konfigurace.
Pro každou skupinu je také individuálně definován práh
„ani
“ pro analogové vstupy a „cnt
“ pro čítače.
Položky (t)hr
a (c)thr
v menu parametrů SEP se
v Group modu nepoužívají.
Příklady komunikace jsou uvedeny v samostatném článku Protokol SEP pro MORSE – příklady.
Zde je pouze příklad paketu SEP doplněný zprávou Debug při
parametru „(D)ebug level:1
„:
Monitoring: source 690F0002|5. 07:05:11.532 INPUTS CHANGED. SENT TO 690F0001 state: di 007F do 0002 anai0 0066 anai1 0057 anai2 0049 anai3 0057 anai4 005C anai5 0057 anai6 0049 anai7 0057 ao0 0000 ao1 000C 07:05:11.532| |690F0001 690F0002|S01I OUT 58| 89 0user 027F 0066 0057 0049 0057 005C 0057 0049 0057 0045 0000 000C 0000 004C 0000 0004 0000 0000 0000 0000 0000 0000 0000 0000 0000 0019 0000 0000 8D66
Zpráva Debug obsahuje stavy Digital input, Digital output, Analog input, Analog output.
Obsah paketu SEP:
02 | – digital output |
7F | – digital input |
0066 0057 0049 0057 005C 0057 0049 0057
– analog
input 0 až 7
0045 | – teplota čipu |
0000 000C | – analog output 0 a 1 |
0000 004C 0000 0004 0000 0000 0000 0000 0000 0000 0000 0000
0000 0019 0000
0000 | – stavy čítačů 0 až 7, stav čítače 0 je |
8D66 | – CRC |
SEP parameters: p(a)rtner:690F0001h t(i)me:60s (p)oll:20*10 ms net dead timeo(u)t:120s analog (t)hr:250*10 (f)ilter:0 (c)ounter thr:2 (m)ask:FFh init (d)igi outs value:0 i(n)it ana outs mode:all low value (0/4mA) (N)egate digi outs mask:0h (e)rr:SILENCE (v)er:SEP 1.03 (old - before 11.2001) (G)roup mode:OFF (g)roup params c(o)mpatibilty:OFF for(M)at:SEP (s)end counters:OFF (A)out:4mA - 20mA g(l)ue to resp:OFF (D)ebug level:0 (T)est menu (P)roduction (o)ld menu (sw < 5.94) (q)uit >>
Poznámka | |
---|---|
Parametry musí být vyplněny, v žádném nesmí zůstat záznam „???“ |
p(a)rtner: 690F0001FFh |
| ||||||||||||
t(i)me:60s |
| ||||||||||||
(p)oll:20*10ms | = 200ms | ||||||||||||
net dead timeo(u)t:120s | Pokud po tento čas neproběhne žádná komunikace, nastaví se digitální a analogové výstupy na hodnoty „init“ podle parametrů (d) a (n). Při další komunikaci jsou nahrazeny aktuálními hodnotami. | ||||||||||||
analog (t)hr: 250*10 | = 2500 | ||||||||||||
(f)ilter:3 | doporučené hodnoty 1 (slabá filtrace) až 10 (silná filtrace)
filtr (dolní propust) pro omezení rušení rychlými změnami na
analogových vstupech | ||||||||||||
(c)ounter thr:1 | práh citlivosti čítačů pro vyvolání přenosu do centra, počet
pulzů | ||||||||||||
(m)ask:FFh | binární vstupy, jejichž změny mají být přenášeny, označíme
bitem masky | ||||||||||||
init (d)igi outs value:0 | Výchozí hodnoty digitálních výstupů. Jsou použity i při výpadku komunikace podle „net dead timeo(u)t:“. | ||||||||||||
i(n)it ana outs mode:all low value (0/4mA) | Hodnoty analogových výstupů po startu a při výpadku
komunikace. Volitelné stavy: | ||||||||||||
(N)egate digi outs mask:0h | Digitální výstupy vybrané maskou jsou negovány. | ||||||||||||
(e)rr:SILENCE | typ chybového hlášení při poruše SEPu a dotazu nadřízeného systému:
| ||||||||||||
(v)er:SEP 1.03 | Vybereme verzi firmware připojeného SEPu.
| ||||||||||||
(G)roup mode:OFF | Volba režimu Group
| ||||||||||||
(g)roup params | Group processing: (c)enter:OFF local threshold | remote group tai cnt | address group ------------------+--------------- (0) 100 010 | 05h 1 (1) 050 001 | 06h 0 (2) 000 000 | 00h 0 (3) 000 000 | 00h 0 (4) 000 000 | 00h 0 (5) 000 000 | 00h 0 (6) 000 000 | 00h 0 (7) 000 000 | 00h 0 (q)uit >>
| ||||||||||||
c(o)mpatibility:OFF |
| ||||||||||||
for(M)at:SEP |
| ||||||||||||
(s)end counters:OFF | – pouze pro MTF
| ||||||||||||
(A)out:4mA – 20mA | Rozsah analogového vstupu a výstupu (pouze pro
MTF) | ||||||||||||
g(l)ue to resp:OFF | Připojí obsah cache k transparentní odpovědi. | ||||||||||||
(D)ebug level:1 |
| ||||||||||||
(T)est menu | – používá se k testovacím účelům Test: Bin(O)ut (A)n out (G)et values (C)ounters (q)uit >>
| ||||||||||||
(P)roduction | – jen pro servisní účely |