Stav Reset je vstupním bodem každého FSoE (Fail Safe over EtherCAT) spojení. Spojení do něj vstupuje po zapnutí napájení, po restartu (reset connection) nebo kdykoliv je detekována chyba komunikace FSoE. Zatímco je spojení v tomto stavu, nevyměňují se žádná uživatelská bezpečnostní data — Safety PDU jsou repurposovány k přenosu komandy Reset společně s jedno bajtovým chybovým kódem, který protistraně říká, proč bylo spojení resetováno.
Tento článek projde třemi PDU stavu Reset definovanými v ETG.5100 S (D) V1.2.0, §8.2.2.2, a to na kanonickém příkladu specifikace se 4 oktety bezpečnostních dat. Pro úplná rozložení 2/4/6/8 oktetů viz FSoE Reset PDU: Master and Slave Structure.
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 Reset PDU: Master and Slave Structure.
Poznámka — jediným relevantním datovým bajtem je chybový kód. V každé PDU stavu Reset je
SafeData[0](oktet 1) jediným bajtem bezpečnostních dat, který nese nějaký význam:
0x00— záměrný reset (zapnutí napájení, restart / reset connection) nebo potvrzení Reset od Slave.- Nenulová hodnota — chybový kód komunikace FSoE, který reset vyvolal (viz Tabulka 28 níže).
Všechny ostatní oktety SafeData jsou nevyužity a musí být nastaveny na 0. Pole Conn_Id je rovněž nevyužito (nastaveno na 0) — ověřuje se až po navázání spojení. Pole CRC jsou stále přenášena a stále se musí ověřit, ale počítají se z počátečního stavu reset, protože číslo sekvence i zděděné CRC se při vstupu do Reset vymažou (viz FSoE: How does CRC inheritance work? a How to compute the CRC checksum for FSoE PDUs?).
Kdy se vstupuje do stavu Reset a kdy se z něj vystupuje?
Stav Reset reinicializuje FSoE spojení po zapnutí napájení nebo po chybě komunikace. Při vstupu se resetují dvě věci:
- číslo sekvence a
- CRC posledního telegramu, které bylo použito ve výpočtu CRC (tj. řetězec dědičnosti CRC je přerušen).
Přechody stavů jsou asymetrické, což zrcadlí role master/slave:
| Směr | Podmínka |
|---|---|
| Master opouští Reset | Odesílá Safety Master PDU s komandou Session do Slave. |
| Slave opouští Reset | Přijímá platnou Safety Master PDU s komandou Session. |
Jinými slovy, Master opouští Reset vydáním komandy Session a Slave opouští Reset, jakmile přijme tuto PDU Session. Zatímco jsou obě strany stále v Reset, vyměňují Safety PDU nesoucí komandu Reset, jak je uvedeno níže.
Master Reset PDU (FSoE Master → Slave)
Master odesílá tuto PDU po restartu nebo po detekci chyby komunikace FSoE. Následující příklad je Tabulka 10 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 | |||
|---|---|---|---|---|---|---|---|---|---|---|
| Reset Oktet 0 | chybový kód Oktet 1 — 0 pro restart | 0 Oktet 2 — nevyužito | CRC_0_Lo Oktet 3 | CRC_0_Hi Oktet 4 | 0 Oktet 5 — nevyužito | 0 Oktet 6 — nevyužito | CRC_1_Lo Oktet 7 | CRC_1_Hi Oktet 8 | 0 Oktet 9 — nevyužito | 0 Oktet 10 — nevyužito |
Klíčové body:
- Komanda (oktet 0) je
Reset. - SafeData[0] (oktet 1) nese chybový kód (bity 0–7). Hodnota
0x00znamená prostý restart / reset connection; jakákoliv nenulová hodnota identifikuje chybu komunikace, která reset vyvolala (viz tabulka níže). - Všechny ostatní oktety SafeData jsou nevyužity a nastaveny na 0.
- CRC_0 a CRC_1 se stále přenášejí jako 16bitové little-endian hodnoty, ale protože číslo sekvence i zděděné CRC byly při vstupu resetovány, počítají se z počátečního stavu reset — nikoliv řetězené z předchozího rámce.
- Conn_Id je ve stavu Reset nevyužito a nastaveno na 0. Connection ID se ověřuje až po navázání spojení.
Slave Reset PDU — potvrzení Reset Master (FSoE Slave → Master)
Když Slave přijme platnou komandu Reset od Master, potvrzuje ji odesláním Safety Slave PDU s komandou Reset a všemi oktety SafeData nastavenými na 0 — včetně pozice chybového kódu. Jedná se o Tabulku 11 ETG.5100 S (D) V1.2.0.
| Komanda | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| Reset Oktet 0 | 0 Oktet 1 — potvrzení | 0 Oktet 2 | CRC_0_Lo Oktet 3 | CRC_0_Hi Oktet 4 | 0 Oktet 5 | 0 Oktet 6 | CRC_1_Lo Oktet 7 | CRC_1_Hi Oktet 8 | 0 Oktet 9 — nevyužito | 0 Oktet 10 — nevyužito |
Jediný rozdíl oproti PDU Reset Master je, že SafeData[0] je vždy 0 — Slave při potvrzení neodesílá zpět chybový kód. Nulový chybový kód na této pozici je přesně to, čím Master rozpozná potvrzení.
Slave Reset PDU — reset iniciovaný Slave (FSoE Slave → Master)
Slave sám může iniciovat Reset, a to buď během restartu (reset connection), nebo v případě chyby, kterou lokálně detekoval. V takovém případě odesílá Safety Slave PDU, která je strukturálně identická s PDU Reset Master: je nastavena komanda Reset a SafeData[0] nese vlastní chybový kód Slave (0x00 pro prostý restart). Jedná se o Tabulku 12 ETG.5100 S (D) V1.2.0.
| Komanda | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| Reset Oktet 0 | chybový kód Oktet 1 — 0 pro restart | 0 Oktet 2 — nevyužito | CRC_0_Lo Oktet 3 | CRC_0_Hi Oktet 4 | 0 Oktet 5 — nevyužito | 0 Oktet 6 — nevyužito | CRC_1_Lo Oktet 7 | CRC_1_Hi Oktet 8 | 0 Oktet 9 — nevyužito | 0 Oktet 10 — nevyužito |
Master potvrzuje tento Reset iniciovaný Slave nikoliv odesláním další PDU Reset, ale opuštěním stavu Reset: odesílá Safety Master PDU s komandou Session, což je signál pro obě strany k přechodu ze stavu Reset.
Shrnutí: výměna ve stavu Reset
Výše uvedené tři PDU tvoří malé handshake, které závisí na tom, kdo reset inicioval:
- Reset iniciovaný Master: Master odesílá Reset (s chybovým kódem) → Slave potvrzuje Reset (SafeData = 0) → Master odesílá Session pro opuštění Reset.
- Reset iniciovaný Slave: Slave odesílá Reset (s chybovým kódem) → Master odesílá Session pro opuštění Reset (toto je potvrzení Master).
V obou případech spojení opustí stav Reset až tehdy, když Master vydá komandu Session; do té doby každá PDU na lince nese komandu Reset, pole Conn_Id je 0 a jediným významným payloadem je jedno bajtový chybový kód v SafeData[0].
Chybové kódy komunikace FSoE (Tabulka 28)
Chybový kód přenášený v SafeData[0] PDU Reset je převzat z následující tabulky. Hodnota 0x00 znamená „žádná chyba" — tj. lokální reset nebo potvrzení komandy Reset. Kódy 1–11 definuje standard; 0x80–0xFF jsou rezervovány pro chyby SafePara specifické pro zařízení.
| Chybový kód | Popis |
|---|---|
| 0 | Lokální reset nebo potvrzení komandy RESET |
| 1 | Neočekávaná komanda (INVALID_CMD) |
| 2 | Neznámá komanda (UNKNOWN_CMD) |
| 3 | Neplatný connection ID (INVALID_CONNID) |
| 4 | Chyba CRC (INVALID_CRC) |
| 5 | Vypršení watchdog (WD_EXPIRED) |
| 6 | Neplatná FSoE Slave Address (INVALID_ADDRESS) |
| 7 | Neplatná bezpečnostní data (INVALID_DATA) |
| 8 | Neplatná délka komunikačních parametrů (INVALID_COMMPARALEN) |
| 9 | Neplatná data komunikačních parametrů (INVALID_COMPARA) |
| 10 | Neplatná délka aplikačních parametrů (INVALID_USERPARALEN) |
| 11 | Neplatná data aplikačních parametrů (INVALID_USERPARA) |
| 0x80–0xFF | Neplatný SafePara (specifické pro zařízení) |
Shrnutí
Ve stavu Reset je FSoE Safety PDU efektivně jedno bajtovová diagnostická obálka: pole Command je Reset, SafeData[0] nese chybový kód (nebo 0 při potvrzení), každý další oktet SafeData a pole Conn_Id jsou 0 a CRC se přepočítávají z počátečního stavu reset, protože číslo sekvence i zděděné CRC byly při vstupu vymazány. Spojení opouští Reset až tehdy, když Master odesílá komandu Session — Slave nikdy neodesílá Session, pouze potvrzuje Reset vynulováním svých SafeData.
Reference
- ETG.5100 S (D) V1.2.0, §8.2.2.2 Reset state, Tabulky 10–12 a Tabulka 28.
Související příspěvky
Přehled a základy
- What does the FSoE abbreviation actually mean? — co znamená zkratka FSoE
- FSoE frame structure explained by examples — obecné rozložení Safety PDU
- All the states of the FSoE state machine — pět stavů FSoE a jejich přechody
- FSoE: Safety PDU command table — úplný seznam FSoE komand
Struktury PDU podle stavů
- FSoE Session PDU: Master and Slave Structure — rozložení PDU pro stav Session
- FSoE Connection PDU: Master and Slave Structure — rozložení PDU pro stav Connection
- FSoE Parameter PDU: Master and Slave Structure — rozložení PDU pro stav Parameter
- FSoE Data PDU: Master and Slave Structure — rozložení PDU pro stav Data
- FSoE Reset PDU: Master and Slave Structure — rozložení bajtů pro všechny délky bezpečnostních dat
CRC
- FSoE CRC: Which polynomial does it use? — 17bitový polynom za FSoE CRC
- How are the FSoE CRC tables constructed? — jak se generují vyhledávací tabulky CRC
- FSoE: How does CRC inheritance work? — jak řetězec CRC propojuje po sobě jdoucí PDU
- How to compute the CRC checksum for FSoE PDUs? — algoritmus výpočtu CRC bajt po bajtu
Chybové kódy a formát dat
- FSoE: List of all communication error codes — všechny chybové kódy komunikace FSoE
- FSoE: Is data transmitted little-endian or big-endian? — pořadí bajtů vícebajtových polí