Documentation
¶
Overview ¶
Package ethercat decodes EtherCAT (Ethernet for Control Automation Technology, IEC 61158) frames — the real-time industrial Ethernet fieldbus dominating factory automation, motion control, and robotics (Beckhoff TwinCAT, and the many EtherCAT-slave drives, I/O terminals, and servo controllers built on the ET1100/ET1200 ESC ASICs).
EtherCAT runs directly on Ethernet (EtherType 0x88A4) or, less commonly, tunnelled in UDP/34980. A master emits one Ethernet frame containing an EtherCAT header and a chain of datagrams; each datagram is processed on-the-fly by every slave as the frame passes through the daisy-chain, and the working counter is incremented by each slave that handled it. There is no authentication or encryption on the wire — a capture reveals the full process image and addressing, which is exactly what an OT pentester inspects.
Wrap-vs-native judgement ¶
Native. The EtherCAT data-link encoding is publicly documented (IEC 61158 / ETG.1000). The frame is a 2-byte EtherCAT header (11-bit length + 4-bit type) followed by one or more fixed-format datagrams, each a 10-byte header (command, index, address, length+flags, IRQ), a length-counted data block, and a 2-byte working counter. Command and addressing dispatch is a set of small lookup tables.
What this package covers ¶
- EtherCAT header: 11-bit Length, 4-bit Type (1 = command/DLPDU, 4 = network variables, 5 = mailbox) with a name table.
- Datagram chain walk: per-datagram Command (16-entry table: NOP / APRD / APWR / APRW / FPRD / FPWR / FPRW / BRD / BWR / BRW / LRD / LWR / LRW / ARMW / FRMW), Index, addressing decode (position+offset ADP/ADO for auto-increment & configured-address commands, 32-bit logical address for the logical commands), 11-bit data length with the Circulating and More-follows (M) flags, IRQ, the data block (surfaced as hex), and the Working Counter.
- The "more datagrams follow" (M) bit chains the walk and is validated against the remaining buffer.
What this package does NOT cover (deliberately out of scope) ¶
- The Ethernet / UDP framing: feed the EtherCAT payload (the bytes after EtherType 0x88A4, or the UDP/34980 payload).
- Mailbox (Type 5) protocol contents — CoE (CANopen over EtherCAT), EoE, FoE, SoE: the datagram data block is surfaced as hex; the mailbox sub-protocols are a separate walker.
- Process-data interpretation: the data block is the raw process image / register payload; mapping it to objects needs the slave's ESI/object dictionary and is out of scope.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Datagram ¶
type Datagram struct {
Index int `json:"index"`
Command int `json:"command"`
CommandName string `json:"command_name"`
WorkingCmdIdx int `json:"datagram_index"`
AddressMode string `json:"address_mode"`
ADP *int `json:"adp,omitempty"`
ADO *int `json:"ado,omitempty"`
LogicalAddress *uint32 `json:"logical_address,omitempty"`
DataLength int `json:"data_length"`
Circulating bool `json:"circulating,omitempty"`
MoreFollows bool `json:"more_follows,omitempty"`
IRQ int `json:"irq"`
DataHex string `json:"data_hex,omitempty"`
WorkingCounter int `json:"working_counter"`
}
Datagram is one EtherCAT command datagram.
type Frame ¶
type Frame struct {
HexInput string `json:"hex_input"`
Length int `json:"length"`
Type int `json:"type"`
TypeName string `json:"type_name"`
Datagrams []*Datagram `json:"datagrams,omitempty"`
DatagramHex string `json:"undecoded_body_hex,omitempty"`
Notes []string `json:"notes,omitempty"`
}
Frame is the decoded view of an EtherCAT frame.
func DecodeBytes ¶
DecodeBytes parses a raw EtherCAT frame (the payload after EtherType 0x88A4, or the UDP/34980 payload).