Stav Datum je konečným stavem navazování FSoE spojení a stavem, ve kterém spojení stráví zbytek své životnosti. Následuje po stavu Parameter. Na rozdíl od předchozích stavů, kde byl počet FSoE cyklů pevně dán protokolem, běží stav Datum kontinuálně — FSoE cykly se přenášejí, dokud nedojde k chybě komunikace nebo dokud není FSoE uzel lokálně zastaven. V každém cyklu odesílá FSoE Master SafeOutputs do FSoE Slave a FSoE Slave potvrzuje odesláním SafeInputs zpět Masteru.
Stav Datum používá dvě komandy:
- ProcessData — používá se, když jsou bezpečnostní data platná.
- FailSafeData — používá se, když uzel lokálně detekuje, že jeho bezpečnostní data nejsou platná nebo mají být přepnuta do bezpečného stavu.
Tento článek projde všemi čtyřmi PDU stavu Datum definovanými v ETG.5100 S (D) V1.2.0, §8.2.2.6, a to na kanonickém příkladu specifikace se 4 oktety bezpečnostních dat.
Poznámka — počet bajtů bezpečnostních dat je pevně dán pro každý směr. Každé FSoE spojení má pevnou délku bezpečnostních dat (master→slave a slave→master), konfigurovanou shodně na obou uzlech. Povolené délky jsou 1, 2, 4, 6 nebo 8 oktetů. Skutečná délka pro dané spojení závisí na FSoE Slave zařízení a musí být převzata z dokumentace Slave nebo souboru popisu zařízení (ESI/EEPROM). Níže uvedené příklady používají 4 oktety jako specifikace; rozložení bajtů pro ostatní délky je uvedeno v FSoE: Struktura Reset PDU pro Master a Slave.
Kdy se vstupuje do stavu Datum a kdy se z něj vystupuje?
Do stavu Datum se vstupuje, když Master opustí stav Parameter odesláním Safety Master PDU s komandou ProcessData (nebo FailSafeData). Jakmile je ve stavu Datum, spojení v něm setrvává neurčitě dlouho:
| Směr | Podmínka |
|---|---|
| Master setrvává v Datum | Odesílá PDU ProcessData nebo FailSafeData cyklicky, dokud nedojde k chybě komunikace nebo není lokálně zastaven. |
| Slave setrvává v Datum | Potvrzuje každou PDU Master a odesílá ProcessData nebo FailSafeData zpět, dokud nedojde k chybě komunikace nebo není lokálně zastaven. |
Oba uzly okamžitě opustí stav Datum, pokud detekují chybu komunikace FSoE — v takovém případě se vrátí do stavu Reset.
Komanda ProcessData (platná data)
Safety Master PDU (FSoE Master → Slave)
Master odesílá tuto PDU k přenosu SafeOutputs do Slave. Jedná se o Tabulku 23 ETG.5100 S (D) V1.2.0 pro 4 oktety bezpečnostních dat.
| Komanda | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| ProcessData Oktet 0 | SafeOutputs, bajt 1 Oktet 1 | SafeOutputs, bajt 2 Oktet 2 | CRC_0_Lo Oktet 3 | CRC_0_Hi Oktet 4 | SafeOutputs, bajt 3 Oktet 5 | SafeOutputs, bajt 4 Oktet 6 | CRC_1_Lo Oktet 7 | CRC_1_Hi Oktet 8 | Connection Id, lo Oktet 9 | Connection Id, hi Oktet 10 |
Klíčové body:
- Komanda (oktet 0) je
ProcessData. - SafeData[0..3] nese SafeOutputs — skutečná bezpečnostní výstupní data z Masteru do Slave. Bajty jsou umístěny v pořadí: SafeData[0] je 1. oktet, SafeData[1] je 2. atd.
- Conn_Id (oktety 9 a 10) nese Connection ID, jako ve stavech Connection a Parameter.
- CRC_0 a CRC_1 se přenášejí jako 16bitové little-endian hodnoty. Dědičnost CRC je aktivní napříč všemi cykly stavu Datum a řetězí každou PDU s předchozí.
Safety Slave PDU (FSoE Slave → Master)
Slave potvrzuje PDU ProcessData Master a odesílá SafeInputs zpět Masteru. Jedná se o Tabulku 24 ETG.5100 S (D) V1.2.0.
| Komanda | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| ProcessData Oktet 0 | SafeInputs, bajt 1 Oktet 1 | SafeInputs, bajt 2 Oktet 2 | CRC_0_Lo Oktet 3 | CRC_0_Hi Oktet 4 | SafeInputs, bajt 3 Oktet 5 | SafeInputs, bajt 4 Oktet 6 | CRC_1_Lo Oktet 7 | CRC_1_Hi Oktet 8 | Connection Id, lo Oktet 9 | Connection Id, hi Oktet 10 |
Všimněte si asymetrie s předchozími stavy: ve stavu Slave neodesílá zpět bezpečnostní data Masteru. Místo toho odesílá vlastní SafeInputs — bezpečnostní vstupní data ze Slave do Masteru. Master odesílá SafeOutputs, Slave odpovídá SafeInputs; každý směr nese vlastní nezávislý payload.
Komanda FailSafeData (bezpečný stav)
Pokud FSoE Master lokálně detekuje, že SafeOutputs nejsou platné nebo mají být přepnuty do bezpečného stavu, odesílá komandu FailSafeData místo ProcessData. Stejné platí pro FSoE Slave: pokud lokálně detekuje, že SafeInputs nejsou platné nebo mají být přepnuty do bezpečného stavu, odesílá FailSafeData místo ProcessData.
Safety Master PDU s FailSafeData (FSoE Master → Slave)
Jedná se o Tabulku 25 ETG.5100 S (D) V1.2.0 pro 4 oktety bezpečnostních dat.
| Komanda | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| FailSafeData Oktet 0 | 0 Oktet 1 — fail-safe data | 0 Oktet 2 — fail-safe data | CRC_0_Lo Oktet 3 | CRC_0_Hi Oktet 4 | 0 Oktet 5 — fail-safe data | 0 Oktet 6 — fail-safe data | CRC_1_Lo Oktet 7 | CRC_1_Hi Oktet 8 | Connection Id, lo Oktet 9 | Connection Id, hi Oktet 10 |
Klíčové body:
- Komanda (oktet 0) je
FailSafeData. - Všechny oktety SafeData jsou nastaveny na 0 — fail-safe data nenesou žádný užitečný payload; signalizují, že odesílatel přepnul své výstupy do bezpečného stavu.
- Pole Conn_Id a CRC se chovají přesně jako v PDU ProcessData. CRC se stále počítá a musí se stále ověřit — bezpečný stav je definovaný provozní stav, nikoliv chyba komunikace.
Safety Slave PDU s FailSafeData (FSoE Slave → Master)
Jedná se o Tabulku 26 ETG.5100 S (D) V1.2.0 pro 4 oktety bezpečnostních dat.
| Komanda | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| FailSafeData Oktet 0 | 0 Oktet 1 — fail-safe data | 0 Oktet 2 — fail-safe data | CRC_0_Lo Oktet 3 | CRC_0_Hi Oktet 4 | 0 Oktet 5 — fail-safe data | 0 Oktet 6 — fail-safe data | CRC_1_Lo Oktet 7 | CRC_1_Hi Oktet 8 | Connection Id, lo Oktet 9 | Connection Id, hi Oktet 10 |
ProcessData a FailSafeData se volí nezávisle
Klíčovou vlastností stavu Datum je, že volba mezi ProcessData a FailSafeData je nezávislá v každém směru — závisí pouze na lokálních okolnostech, nikoliv na komandě přijaté od protistrany:
- Master odesílá ProcessData, pokud jsou jeho SafeOutputs platné, nebo FailSafeData, pokud nejsou.
- Slave odesílá ProcessData, pokud jsou jeho SafeInputs platné, nebo FailSafeData, pokud nejsou.
To znamená, že je zcela normální, když jeden směr nese ProcessData, zatímco druhý nese FailSafeData ve stejném cyklu. Například pokud SafeOutputs Master jsou platné, ale SafeInputs Slave nejsou, Master odesílá ProcessData a Slave odpovídá FailSafeData. Žádný uzel nemusí čekat na druhý, aby přepnul komandu; rozhodnutí je čistě lokální.
Shrnutí: výměna ve stavu Datum
Stav Datum je kontinuální cyklická výměna:
- Master → Slave: Safety Master PDU s
Command = ProcessData(nese SafeOutputs) neboCommand = FailSafeData(všechny SafeData = 0). - Slave → Master: Safety Slave PDU s
Command = ProcessData(nese SafeInputs) neboCommand = FailSafeData(všechny SafeData = 0).
Tento cyklus se opakuje neurčitě dlouho. Komanda v každém směru se volí nezávisle na základě lokální platnosti bezpečnostních dat. Pokud kterýkoliv uzel detekuje chybu komunikace FSoE (viz FSoE: Seznam všech chybových kódů komunikace), oba uzly se vrátí do stavu Reset a navazování spojení začíná znovu.
Shrnutí
Ve stavu Datum nese FSoE Safety PDU konečně uživatelská bezpečnostní data: Master odesílá SafeOutputs a Slave odpovídá SafeInputs, přičemž každý používá komandu ProcessData. Pokud bezpečnostní data kteréhokoliv uzlu nejsou platná nebo mají být přepnuta do bezpečného stavu, odesílá místo toho komandu FailSafeData se všemi oktety SafeData nastavenými na 0. Volba mezi oběma komandami je nezávislá v každém směru a závisí pouze na lokálních okolnostech. Stav Datum běží kontinuálně, dokud nedojde k chybě komunikace (což vyvolá návrat do Reset) nebo není uzel lokálně zastaven. Dědičnost CRC řetězí každou PDU s předchozí napříč celým stavem Datum, takže jakákoliv korupce, ztráta nebo přehození je okamžitě detekována.
Reference
- ETG.5100 S (D) V1.2.0, §8.2.2.6 Datum state, Tabulky 23–26.
Související příspěvky
Přehled a základy
- Co vlastně znamená zkratka FSoE? — co znamená zkratka FSoE
- FSoE: Struktura rámce vysvětlená na příkladech — obecné rozvržení Safety PDU
- FSoE: Všechny stavy stavového automatu — pět stavů FSoE a jejich přechody
- FSoE: Tabulka příkazů bezpečnostní PDU — úplný seznam příkazů FSoE
Struktury PDU podle stavů
- FSoE: Struktura Reset State PDU pro Master a Slave — rozvržení PDU a chybové kódy pro stav Reset
- FSoE: Struktura Session PDU pro Master a Slave — rozvržení PDU pro stav Session
- FSoE: Struktura Connection PDU pro Master a Slave — rozvržení PDU pro stav Connection
- FSoE: Struktura Parameter PDU pro Master a Slave — rozvržení PDU pro stav Parameter
- FSoE: Struktura Reset PDU pro Master a Slave — bajtová rozvržení pro všechny délky Safety Data
CRC
- FSoE CRC: Jaký polynom používá? — 17bitový polynom CRC FSoE
- FSoE: Jak jsou konstruovány tabulky CRC? — jak se generují vyhledávací tabulky CRC
- FSoE: Jak funguje dědičnost CRC? — jak řetězec CRC propojuje po sobě jdoucí PDU
- Jak vypočítat kontrolní součet CRC pro FSoE PDU? — algoritmus výpočtu CRC bajt po bajtu
Chybové kódy a formát dat
- FSoE: Seznam všech chybových kódů komunikace — všechny chybové kódy komunikace FSoE
- FSoE: Jsou data přenášena v little-endian nebo big-endian? — pořadí bajtů vícebajtových polí