IO Card Message Sniffing for Sensor Diagnostics on B&R PLCs
A comprehensive technical guide to intercepting, capturing, and analyzing fieldbus traffic for sensor fault diagnosis on B&R Automation PLC systems (X20, X67, System 2003/2005, APROL).
Table of Contents
- Theoretical Approaches to Intercept Fieldbus Traffic
- Passive Tapping vs Active Sniffing
- Hardware Requirements per Protocol
- Wireshark Setup for POWERLINK and PROFINET
- CAN Bus Sniffing Tools
- X2X Bus Sniffing with Logic Analyzers
- Correlating Captured Data with IO Module Addresses
- Filtering Techniques to Isolate Sensor Data
- Timing Analysis for Intermittent Issues
- Practical Diagnostic Workflows
- Legal and Safety Considerations
- Tools Comparison Table
- Sources and References
1. Theoretical Approaches to Intercept Fieldbus Traffic
1.1 B&R Protocol Stack Overview
B&R Automation systems use multiple fieldbus and industrial Ethernet protocols depending on the IO system generation and bus controller selected:
| Protocol | Layer | B&R Product | Typical Use |
|---|---|---|---|
| X2X Link | Physical (RS-485 derivative) | X20 bus controllers (X20BC etc.) | Local IO backplane/bus connection for X20 slices |
| ETHERNET Powerlink (EPL) | L2 Ethernet (EtherType 0x88F6) | X20ET, X67, Power PCs | Real-time deterministic Ethernet, 100 Mbps |
| PROFINET IO | L2 Ethernet (EtherType 0x8892) | X20PN, gateway modules | Siemens-compatible integration, RT/IRT |
| CANopen | L2 CAN (ISO 11898) | X20CC, X20BC0073 | CAN-based IO, motion, drives |
| EtherNet/IP | L4 UDP/TCP | X20EB, gateways | Rockwell-compatible integration |
| Modbus TCP/RTU | L4/L2 | Various gateways | Legacy protocol bridging |
1.2 X2X Link
X2X Link is B&R’s proprietary serial bus for connecting X20 I/O stations to the bus controller. It runs on a twisted-pair physical layer derived from RS-485, operating at up to 12 Mbaud. The protocol is closed-source and undocumented at the packet level, which makes full decoding difficult without reverse engineering.
Key characteristics:
- Physical: RS-485 transceiver (differential pair), daisy-chain topology
- Speed: Up to 12 Mbaud (B&R specific encoding)
- Topology: Multi-drop from bus controller, up to 64 stations per segment
- Frame structure: Proprietary; includes addressing, CRC, and cyclic data payloads
- Update rate: Sub-millisecond, depending on station count and configuration
Interception approach: Since X2X is a closed protocol, interception focuses on signal-level analysis using logic analyzers rather than packet-level decode. You can observe timing, signal integrity, and bus utilization to diagnose physical-layer problems. For data-level analysis, the preferred approach is to use B&R’s own diagnostic tools (Automation Studio watch window, mapp Diagnostic) and correlate with the captured signal patterns.
1.3 ETHERNET Powerlink (EPL)
ETHERNET Powerlink is an open-source (EPL v2.0+) real-time Ethernet protocol managed by the EPSG (Ethernet POWERLINK Standardization Group). It operates on standard Fast Ethernet (100BASE-TX) and uses a slot-based TDMA mechanism managed by a Managing Node (MN) - typically the B&R PLC CPU.
Frame types:
| Frame | Purpose | Direction |
|---|---|---|
| SoA (Start of Async) | Opens asynchronous phase | MN -> all |
| SoC (Start of Cycle) | Marks cycle boundary | MN -> all |
| PReq (Poll Request) | Requests data from CN | MN -> specific CN |
| PRes (Poll Response) | CN responds with data | CN -> MN |
| ASnd (Async Send) | Asynchronous data (configuration, diagnostics) | Any node |
Key characteristics:
- Physical: Standard 100BASE-TX Ethernet, half-duplex
- MAC: Uses custom ethertype or LLC/SNAP encapsulation
- Cycle time: Configurable, 200us to 100ms typical
- Addressing: Node IDs (1-239), node 240 = MN
- Data format: Little-endian
Interception approach: Powerlink runs on shared Ethernet media (hub or switch in “passthrough” mode for EPL phase 1). Since it uses standard Ethernet frames with a recognizable ethertype, you can connect a PC with a standard NIC in promiscuous mode directly to the bus via a hub or tap. Wireshark includes a native POWERLINK dissector.
1.4 PROFINET IO
PROFINET uses standard Ethernet frames for real-time I/O exchange. There are three performance classes:
| Class | Mechanism | Timing | EtherType |
|---|---|---|---|
| NRT (Non-Real-Time) | TCP/UDP | 50-100ms+ | Standard IP |
| RT (Real-Time) | Direct L2 Ethernet | 1-10ms | 0x8892 |
| IRT (Isochronous Real-Time) | Hardware-scheduled TSN-like | <1ms | 0x8892 (priority) |
Key PROFINET protocols on the wire:
- pn_dcp: Discovery and Configuration Protocol (device naming, IP assignment)
- pn_rt: Real-Time cyclic data frames (cyclic I/O)
- pn_io: Application layer (connection setup via DCE/RPC over UDP 34964)
- pn_ptcp: Precision Time Control Protocol (IRT clock sync)
- lldp: Link Layer Discovery Protocol (topology)
Interception approach: PROFINET RT/IRT frames are Layer 2 ethertype 0x8892 - they bypass TCP/IP entirely. You must capture on the Ethernet interface directly (via tap or SPAN port). Wireshark has full PROFINET dissectors built in.
1.5 CANopen
CANopen is a higher-layer protocol built on top of CAN 2.0A/B (ISO 11898). It uses an object dictionary (OD) model with specific communication objects:
| Object | CAN ID | Purpose |
|---|---|---|
| NMT (Network Management) | 0x000 | State machine control (start/stop/reset) |
| SYNC | 0x080 | Cycle synchronization beacon |
| EMCY (Emergency) | 0x080+NodeID | Error/fault notification |
| TPDO (Transmit PDO) | 0x180+NodeID | Cyclic process data out |
| RPDO (Receive PDO) | 0x200+NodeID | Cyclic process data in |
| SDO (Service Data) | 0x580+NodeID (RX), 0x600+NodeID (TX) | Configuration, parameter access |
| HB (Heartbeat) | 0x700+NodeID | Node alive monitoring |
Key characteristics:
- Physical: CAN 2.0B, differential pair (CAN_H, CAN_L), twisted pair
- Speed: 1 Mbps max (typical: 125 kbps - 1 Mbps)
- Addressing: 11-bit (standard) or 29-bit (extended) CAN identifiers
- Topology: Multi-drop bus with termination resistors (120 ohm at each end)
Interception approach: CANopen runs on CAN bus, which requires a CAN interface adapter (USB, PCI, or embedded). You connect the CAN adapter to the bus via a Y-cable or tap, and use specialized software to decode CANopen protocols. The object dictionary mapping (PDO/SDO) tells you which sensor data maps to which CAN IDs and byte offsets.
2. Passive Tapping vs Active Sniffing
2.1 Passive Tapping
Passive tapping inserts a hardware device inline on the communication link that copies all traffic to a monitoring port without participating in the protocol. The key property is zero interference with the live system.
Advantages:
- No impact on timing, latency, or determinism of the live network
- Cannot introduce errors or crash the production system
- Invisible to protocol participants (no MAC address on the network)
- Safe for safety-critical and hard-real-time systems
- Captures all traffic including collisions and physical-layer errors
Disadvantages:
- Requires physical access to insert the tap
- May need network downtime to install (unless using breakout taps on existing connections)
- Full-duplex Ethernet requires two capture interfaces (or an aggregate tap)
- Cannot trigger or inject messages for active diagnostics
Passive tap types:
| Tap Type | Ethernet | CAN | Serial/RS-485 |
|---|---|---|---|
| Optical splitter (fiber) | Yes | N/A | N/A |
| Electrical tap (copper) | Yes (regenerative or passive) | Yes (Y-cable) | Yes (T-connector or breakout board) |
| Magnetic/capacitive coupler | Yes (non-intrusive) | Yes | Yes |
| Breakout box | Yes (BNC/RJ45) | Yes (DB9) | Yes (DB9/terminal block) |
2.2 Active Sniffing
Active sniffing involves connecting a device as a participant on the network, either as a fully-featured node or as a promiscuous-mode listener.
For Ethernet (POWERLINK/PROFINET):
- Connect a PC NIC directly to a switch port or hub
- Configure the NIC in promiscuous mode to capture all frames
- For POWERLINK: connect to a hub or directly to the bus (half-duplex shared medium)
- For PROFINET: use managed switch port mirroring (SPAN) to copy traffic
Advantages:
- Can use standard PC hardware and software (Wireshark)
- Can inject traffic for active testing (e.g., ping, DCP requests)
- No special tap hardware needed for basic capture
- Can participate in protocol negotiations to aid decoding
Disadvantages:
- Adds a device to the network (potential timing impact on shared-medium networks)
- PC NIC OS-level timestamps are inaccurate (microsecond range at best, affected by scheduling)
- May cause issues if the PC sends unwanted packets (TCP/IP stack, ARP, etc.)
- Cannot capture collisions or physical-layer anomalies
- Some protocols may reject unknown nodes
B&R-specific consideration: For POWERLINK, B&R’s own documentation states: “To record data traffic, an Ethernet port of the PC is connected directly to the POWERLINK network at any point.” This works because POWERLINK Phase 1 uses a shared Ethernet medium. However, B&R also notes that PC-based capture has “inaccurate timestamps” and recommends the X20ET8819 hardware analysis tool for precise diagnostics.
2.3 Choosing Between Approaches
| Scenario | Recommended Approach |
|---|---|
| Quick diagnostic on POWERLINK | Active (PC + Wireshark, direct connect) |
| Long-term intermittent fault capture | Passive tap + hardware recorder (X20ET8819) |
| PROFINET on managed switch | Active (SPAN port mirroring + Wireshark) |
| PROFINET on unmanaged switch | Passive (inline Ethernet tap + Wireshark) |
| CANopen bus diagnostics | Active (CAN adapter + PCAN-View/CANalyzer) or passive (CAN tap) |
| X2X bus diagnostics | Passive only (logic analyzer on RS-485 differential pair) |
| Safety-rated systems | Passive only (never introduce active devices on safety networks) |
| Intermittent timing-critical faults | Passive with hardware timestamps (nanosecond accuracy) |
3. Hardware Requirements per Protocol
3.1 ETHERNET Powerlink
| Component | Purpose | Recommended |
|---|---|---|
| Hub (not switch) | Share the Ethernet medium for passive monitoring | Any 10/100 hub; Powerlink Phase 1 requires shared medium |
| Ethernet Tap | Inline passive copper tap for full-duplex capture | Dualcomm DTE (port-stealing), NetOptics, Garland |
| PC with NIC | Active capture via Wireshark | Intel-based NIC (best driver support); half-duplex, 100 Mbps |
| X20ET8819 | B&R’s dedicated Ethernet analysis tool | Nanosecond timestamps, trigger-based recording, filter inputs |
| Managed switch with SPAN | Alternative: port mirroring (Powerlink Phase 2+) | Any managed switch supporting port mirroring |
X20ET8819 Specifications (B&R’s recommended tool):
- X20 form factor, slides directly into X20 backplane
- 2x RJ45 Ethernet ports for inline connection
- Hardware-based timestamps in nanosecond range
- Trigger inputs (digital inputs or software trigger)
- Filter-based recording to minimize file size
- Compatible with Automation Studio for analysis
- Ideal for sporadic/intermittent faults
3.2 PROFINET IO
| Component | Purpose | Recommended |
|---|---|---|
| Managed industrial switch | Port mirroring (SPAN) for traffic copy | Siemens SCALANCE X, B&R X20SW, Phoenix CONTACT |
| Ethernet Tap | Inline passive tap (if no managed switch) | SharkTap, Dualcomm DTE, NetOptics |
| PC with NIC | Wireshark capture | Intel or Realtek-based NIC; promiscuous mode support |
| PROFINET diagnostic tool | PI PROFINET official tools | PNI (PROFINET Investigator), Proneta |
Switch port mirroring setup:
- Configure the switch port where the IO device is connected as the source (monitored) port
- Configure a spare port as the destination (mirror) port
- Connect the capture PC to the destination port
- Ensure the mirror port can handle the full bandwidth of monitored traffic
3.3 CANopen
| Component | Purpose | Recommended |
|---|---|---|
| CAN USB adapter | Physical CAN interface for PC | PEAK PCAN-USB, Vector VN1610/VN1630, Kvaser Leaf |
| CAN tap/Y-cable | Non-intrusive bus connection | PEAK CAN tap, DB9 Y-cable adapter |
| High-speed CAN transceiver | Logic-level to CAN bus level | MCP2551, SN65HVD230 (for custom solutions) |
| 120 ohm termination | Bus termination (critical!) | Built-in to adapters, or external resistor |
| Oscilloscope | Physical signal analysis | Keysight, Tektronix, Rigol (for signal integrity) |
3.4 X2X Link (Serial/RS-485)
| Component | Purpose | Recommended |
|---|---|---|
| Logic analyzer | Digital signal capture on RS-485 pair | Saleae Logic (8+ channels), sigrok/PulseView |
| RS-485 to TTL converter | Convert differential RS-485 to logic levels | MAX485, SP3485 breakout board |
| Oscilloscope | Analog signal quality analysis | 4-channel, 100MHz+ bandwidth |
| Terminal block tap | Non-intrusive breakout on bus wires | Custom DB9 or terminal block breakout |
Connection method for X2X with logic analyzer:
- Locate the X2X bus wires (typically labeled X2L+/X2L- or similar on terminal blocks)
- Connect RS-485-to-TTL converter: A (non-inverting) to one channel, B (inverting) to another
- Set logic analyzer sample rate: minimum 10x the bus speed (for 12 Mbaud: 120 MHz minimum)
- Record for at least one full bus cycle to observe repeating patterns
- Analyze using UART async serial protocol decoder (may require custom baud rate settings)
4. Wireshark Setup for POWERLINK and PROFINET
4.1 Wireshark for POWERLINK
Based on official B&R community documentation:
Step 1: Prepare the network interface
- Deactivate all unneeded protocols (TCP/IP, Windows file sharing, etc.) on the capture interface
- These can interfere with the POWERLINK network by generating unwanted packets
- In Windows: Uncheck all items except “Wireshark Npcap Loopback Adapter” in adapter properties
- In Linux:
ip link set eth0 down && ip link set eth0 up promisc on
Step 2: Recommended NIC settings
- Half-duplex mode
- 100 Mbit/s transmission rate
- Auto-crossover enabled (or use a crossover cable)
Step 3: Connect to the POWERLINK network
- Connect the PC Ethernet port directly to the POWERLINK network at any point
- A hub can be used between the PC and the network if direct connection fails
- Verify link LEDs indicate active connection
Step 4: Start capture in Wireshark
- Select the connected interface in Wireshark’s start screen
- Double-click the interface or click the blue shark fin icon to start recording
Step 5: POWERLINK Display Filters
| Filter | Purpose |
|---|---|
epl.src == 1 | All packets sent by NodeID 1 (typically the MN) |
epl.dest == 1 | All packets sent to NodeID 1 |
epl.service_type == "SoA" | Start of Async frames |
epl.service_type == "PReq" | Poll Request frames |
epl.service_type == "PRes" | Poll Response frames |
epl.service_type == "ASnd" | Asynchronous Send frames |
Step 6: Analysis tips
- Sort packets by the “Time” column to recognize the recurring POWERLINK cycle
- Use Wireshark’s coloring rules to distinguish frame types (SoA = one color, PRes = another, ASnd = another)
- Create a custom column for PRes payload: right-click “Payload” in a PRes frame -> “Apply as Column” -> rename to “PRes-Payload”
- Note: POWERLINK user data is transmitted in little-endian format
Limitations of PC-based capture:
- Inaccurate timestamps (OS scheduling jitter affects precision)
- Large file sizes for extended captures
- Cannot reliably capture sporadic errors
- For precise timing analysis, use B&R X20ET8819 instead
4.2 Wireshark for PROFINET
Step 1: Install Wireshark
- Download from https://www.wireshark.org
- Install with Npcap (Windows) or libpcap (Linux) for packet capture driver
- PROFINET dissectors are built-in:
pn_rt,pn_io,pn_dcp,pn_ptcp
Step 2: Capture setup
- PROFINET RT uses EtherType 0x8892 (not TCP/IP!) - you cannot filter by TCP port
- Capture all Ethernet traffic on the interface (no capture filter) for full visibility
- Optional capture filter to reduce noise:
ether proto 0x8892(only PROFINET RT/DCP/PTCP)
Step 3: Connect to the PROFINET network
- Method A (Preferred): Managed switch with SPAN/port mirroring - mirror the IO device port to a monitoring port, connect PC to monitoring port
- Method B: Inline Ethernet tap between PLC and switch
- Method C: Direct connect (only if the PROFINET device supports it)
Step 4: PROFINET Display Filters
| Filter | What It Shows |
|---|---|
pn_rt | All PROFINET RT cyclic I/O frames |
pn_io | PROFINET IO application layer (connection setup, alarms) |
pn_dcp | PROFINET DCP (discovery, name assignment, IP config) |
pn_ptcp | PROFINET PTCP (IRT clock synchronization) |
lldp | LLDP frames (topology, neighbor detection) |
mrp | Media Redundancy Protocol frames |
eth.type == 0x8892 | All PROFINET frames (RT, DCP, PTCP) |
pn_dcp.service_id == 5 | DCP Identify (device discovery) |
pn_dcp.service_id == 4 | DCP Set (name/IP assignment) |
pn_dcp.block_error != 0 | DCP errors |
pn_rt.data_status.datavalid == 0 | Invalid cyclic data |
pn_rt.transfer_status != 0 | Transfer errors |
pn_rt.cycle_counter | Cycle counter (detect missed frames) |
pn_io.alarm_type | Alarms from IO devices |
pn_io.slot_nr | Specific slot number |
pn_io.subslot_nr | Specific subslot number |
pn_rt && eth.addr == 00:xx:xx:xx:xx:xx | Traffic to/from specific MAC |
Step 5: Decoding cyclic I/O data
- Critical: Wireshark can decode cyclic data to module level ONLY if it captures the DCE/RPC connection setup
- Best practice: Start Wireshark BEFORE powering on the IO device or restarting the PLC
- If connection setup is missed, cyclic data shows as raw bytes without module context
- Import PI PROFINET coloring rules: View -> Coloring Rules -> Import (colors: RT=green, DCP=blue, Alarms=red, LLDP=yellow)
Step 6: Custom columns for PROFINET diagnostics
| Column | Field |
|---|---|
| Frame ID | pn_rt.frame_id |
| Cycle Counter | pn_rt.cycle_counter |
| Data Status | pn_rt.data_status |
| IOxS | pn_io.ioxs |
| Delta Time | frame.time_delta_displayed |
5. CAN Bus Sniffing Tools
5.1 Hardware Interfaces
PEAK PCAN (PEAK-System Technik GmbH)
- PCAN-USB: Basic USB-to-CAN adapter, galvanically isolated
- PCAN-USB FD: Supports CAN FD, 2 channels
- PCAN-USB Pro FD: 4 channels, CAN/CAN FD
- PCAN-View: Free monitoring software included
- Pros: Affordable, reliable, good Linux support, free software
- Cons: Limited scripting compared to Vector
Vector Informat
- VN1610/VN1611: Professional CAN/CAN FD/LIN interfaces (1-4 channels)
- VN1630/VN1640: High-channel-count interfaces
- CANalyzer: Professional analysis software (CANopen, J1939, etc.)
- CANoe: Full simulation + analysis environment
- CANalyzer.CANopen: CANopen-specific analysis option with OD support
- Pros: Industry gold standard, extensive protocol support, powerful scripting (CAPL)
- Cons: Expensive (license starts ~$3,000+)
Kvaser
- Kvaser Leaf Light: Budget single-channel CAN
- Kvaser Memorator: Data logger with onboard storage
- Kvaser CANKing: Included analysis software
- Pros: Robust, good Linux drivers, Scripting with tscript
- Cons: Software less capable than Vector CANalyzer
SocketCAN (Linux)
- Built-in CAN stack in Linux kernel since 2.6.25
- Works with: PEAK PCAN, Kvaser, SocketCAN-native devices (e.g., Microchip MCP2515-based)
- Tools:
candump,cansend,cansequence,cansniffer,canplayer cansnifferprovides a live hexadecimal/ASCII view of the bus- Python:
python-canlibrary provides high-level access - Pros: Free, scriptable, integrates with Linux ecosystem
- Cons: No GUI analysis tool comparable to CANalyzer; limited CANopen decode
Other Tools
- CanLover: Free, modern CAN bus analyzer for Linux/Windows, CANalyzer alternative, native SocketCAN
- Kayak: Java-based open-source CAN traffic GUI
- CanCat: Open-source CAN bus penetration testing tool
- Busmaster: Open-source tool by RBEI (supports CAN, J1939, CANopen)
5.2 CANopen-Specific Analysis
For CANopen sensor diagnostics, the key is mapping CAN IDs to object dictionary entries:
TPDO/RPDO mapping (process data):
- TPDO1: CAN ID 0x180 + NodeID (default)
- RPDO1: CAN ID 0x200 + NodeID (default)
- The PDO mapping (in the OD at index 0x1A00/0x1600) tells you which sensor values are at which byte offset
- Example: A temperature sensor at NodeID 5 sends TPDO1 on CAN ID 0x185; bytes [0:1] = temperature in 0.1°C units
SDO access (configuration/diagnostics):
- SDO Receive: CAN ID 0x600 + NodeID
- SDO Transmit: CAN ID 0x580 + NodeID
- Use SDO to read diagnostic objects, error history, manufacturer-specific status
Emergency messages:
- CAN ID 0x080 + NodeID
- Contains error code, error register, and vendor-specific data
- Filter for these to quickly identify failing devices
Heartbeat monitoring:
- CAN ID 0x700 + NodeID
- Consumer heartbeat time in OD index 0x1016
- Missed heartbeats = node offline or bus problem
5.3 Practical CAN Sniffing Setup for B&R Systems
- Locate the CAN bus access point: B&R X20CC modules have CAN bus terminals. Use a DB9 Y-adapter to tap in.
- Configure the CAN adapter: Set baud rate to match the B&R project configuration (check in Automation Studio)
- Start capture: Use
candump can0(SocketCAN) or PCAN-View - Apply CANopen decode: If using CANalyzer with CANopen option, load the EDS/EDD file from the IO module manufacturer
- Monitor: Watch for EMCY (emergency) messages, heartbeat timeouts, or missing PDOs from specific nodes
6. X2X Bus Sniffing with Logic Analyzers
6.1 Why Logic Analyzers for X2X
Since X2X Link is a closed proprietary protocol with no publicly available dissector, protocol-level decoding is not feasible with standard tools. Logic analyzers capture the raw digital waveform, allowing you to:
- Verify physical signal integrity (rise times, voltage levels, noise)
- Measure timing between transmissions
- Detect bus contention, framing errors, or signal degradation
- Capture long traces for intermittent fault correlation
- Observe the repeating cycle pattern to identify which time slots belong to which stations
6.2 Saleae Logic Analyzer
Supported models: Saleae Logic 8, Logic Pro 8, Logic Pro 16
Setup for X2X capture:
- Connect the RS-485 differential pair (X2L+/X2L-) through an RS-485-to-TTL level shifter (MAX485 or SP3485)
- X2L+ (A line) -> Logic channel 0
- X2L- (B line) -> Logic channel 1
- Optionally: GND -> Logic GND, and the TX/RX enable lines if probing the transceiver IC directly
- Set sample rate: Minimum 10x the baud rate. For 12 Mbaud X2X, use 120+ MHz (Logic Pro 16 supports up to 500 MS/s)
- Set sample duration: Capture at least 10 full bus cycles to see repeating patterns
- In Saleae Logic 2 software:
- Add Async Serial analyzer for each channel
- Set baud rate to match (try 12M, 6M, 3M, 1.5M - B&R uses power-of-2 divisions of 12M)
- Add I2C/SPI analyzer if the X2X uses a chip-select or clock line visible on the bus connector
- Export data to CSV for analysis in spreadsheets or Python scripts
Limitations:
- Buffer depth limits long-term monitoring (use high-performance models with 2GB+ capture)
- Cannot decode proprietary protocol semantics
- TTL input range (must use level shifter for RS-485)
6.3 Sigrok / PulseView (Open Source)
Supported hardware: Any sigrok-compatible logic analyzer (DreamSourceLab, Clone, Sipeed, or even an Arduino with sigrok firmware)
Protocol decoders available in sigrok (relevant for X2X analysis):
- UART (Async Serial) - 131+ total decoders supported
- CAN (Controller Area Network) - for CAN bus analysis
- I2C, SPI - for sub-protocols or chip-level probing
- Modbus RTU - over RS-485 UART
- Jitter, Timing - for timing analysis between signals
Setup for X2X with sigrok:
- Install sigrok and PulseView:
apt install sigrok pulseview(Debian/Ubuntu) - Connect RS-485 through level shifter to logic analyzer channels
- Run
sigrok-clifor command-line capture:sigrok-cli --driver dreamsourcecli --config samplerate=120M --channels 0,1 \ --protocol-decoder uart:baudrate=12000000:rx=0 --protocol-decoder uart:baudrate=12000000:rx=1 \ -o x2x_capture.sr - Analyze in PulseView or export with
sigrok-cli -i x2x_capture.sr -P uart:csv - Write custom Python protocol decoder using libsigrokdecode API for X2X-specific analysis
Advantages of sigrok:
- Free and open source
- Supports 131+ protocol decoders
- Works with cheap logic analyzer hardware ($10-50)
- CLI interface for automated/scripted capture
- Extensible: write custom decoders in Python for proprietary protocols
6.4 Oscilloscope as Complement
Use a 4-channel oscilloscope for X2X physical-layer analysis:
- Channel 1: X2L+ (A line)
- Channel 2: X2L- (B line)
- Channel 3: X2L+ - X2L- (differential, math function)
- Channel 4: Ground reference or another signal
What to look for:
- Differential voltage swing (should be >1.5V for RS-485)
- Signal rise/fall times (degradation indicates cable or connector issues)
- Noise, ringing, reflections on the bus
- Common-mode voltage (should stay within RS-485 receiver range: -7V to +12V)
7. Correlating Captured Data with IO Module Addresses
7.1 Understanding B&R IO Address Mapping
B&R Automation Studio assigns addresses to IO modules based on their physical position in the station:
X20 System addressing:
Bus Controller (X20BCxxxx)
├── Slot 1: X20DI9371 (Digital Input 16ch) → %IX0.0.0 - %IX0.0.15
├── Slot 2: X20AI4631 (Analog Input 4ch) → %IW4 (words 4-7)
├── Slot 3: X20AO4621 (Analog Output 4ch) → %QW8 (words 8-11)
└── Slot 4: X20DO9321 (Digital Output 16ch) → %QX0.0.0 - %QX0.0.15
The %I/%Q prefix indicates input/output, %X = bit, %W = word (16-bit), %B = byte.
7.2 Correlating by Protocol
For POWERLINK:
- Each CN (Controlled Node) has a NodeID (configured in Automation Studio)
- The PRes frame from a CN contains the process image for that station
- Within the PRes payload, the byte order matches the slot order configured in the hardware tree
- To find a specific sensor: look up its NodeID, find its PRes frames, and calculate the byte offset based on slot position and data type
For PROFINET:
- Wireshark decodes cyclic data to slot/subslot level (if connection setup was captured)
- You’ll see:
Module: DI 8x24V (Slot 1, Subslot 1) → Input Data: 0xFF - Use
pn_io.slot_nrandpn_io.subslot_nrfilters to isolate specific IO modules - The AR (Application Relation) and CR (Connection Record) in the connection setup define the mapping
For CANopen:
- CANopen PDOs map to object dictionary entries (index/subindex)
- The PDO mapping (OD index 0x1A00 for TPDO, 0x1600 for RPDO) defines the byte layout
- Each sensor channel maps to a specific object in the OD
- Example: Object 0x6401 (analog input ch1) maps to TPDO1 byte [0:1]
- Load the device’s EDS/EDD file in CANalyzer to see the full mapping
7.3 Practical Correlation Workflow
-
Build an address map: In Automation Studio, export or document the IO configuration for each station:
- Station name/NodeID
- Slot position → module type → variable name → address
- Data type and byte width per channel
-
Identify the failing channel: Use B&R’s mapp Diagnostic or the Automation Studio watch window to determine which variable/address is showing unexpected values.
-
Locate in the capture:
- POWERLINK: Filter by
epl.src == <NodeID>for the failing station, then examine the PRes payload at the byte offset corresponding to the failing channel - PROFINET: Filter by
pn_io.slot_nr == <slot>andpn_io.subslot_nr == <subslot> - CANopen: Calculate the CAN ID for the failing node’s TPDO/RPDO, filter for that ID, and examine the relevant bytes
- POWERLINK: Filter by
-
Verify the data path: Trace the data from the capture back to the IO module’s physical terminal to confirm the channel-to-address mapping.
8. Filtering Techniques to Isolate Sensor Data
8.1 Wireshark Filtering for Ethernet Protocols
POWERLINK - isolate a specific station:
epl.src == 5 && epl.service_type == "PRes"
Shows only Poll Response frames from NodeID 5 (this station’s process data).
POWERLINK - isolate async communication:
epl.service_type == "ASnd"
Async frames carry diagnostics, configuration, and error messages.
PROFINET - isolate a device by MAC:
eth.addr == 00:0e:8c:12:34:56 && pn_rt
All cyclic RT traffic for a specific IO device.
PROFINET - isolate bad data:
pn_rt.data_status.datavalid == 0
Shows only frames where the device reports data as invalid.
PROFINET - isolate alarms:
pn_io.alarm_type
All alarm notifications (plug/pull, diagnosis, process alarms).
8.2 SocketCAN Filtering for CANopen
Capture only from a specific node:
candump can0,185:7FF
(Capture CAN ID 0x185 = TPDO1 of NodeID 5, mask 0x7FF = match all 11 bits)
Capture emergency messages only:
candump can0,080:7FF
(All emergency messages from any node)
Capture with CANopen decode (cansniffer):
cansniffer can0
Shows a live matrix view of all CAN IDs with data bytes, updated in real-time.
Python filtering with python-can:
import can
bus = can.Bus(interface='socketcan', channel='can0', bitrate=500000)
for msg in bus:
if msg.arbitration_id == 0x185: # TPDO1 from NodeID 5
temp_raw = int.from_bytes(msg.data[0:2], 'little')
temp_c = temp_raw / 10.0
print(f"Temperature: {temp_c}°C")
8.3 Logic Analyzer Filtering for X2X
In Saleae Logic 2:
- Time range selection: Highlight a section of the capture to zoom in
- Search: Search for specific byte patterns or transitions
- Export selection: Export only the selected time range to CSV
In sigrok-cli:
sigrok-cli -i capture.sr -P uart:min_tx_len=1 -A uart=rx-0:rx-1 | grep "temperature"
Pipe the decoded output through grep/awk for pattern matching.
8.4 Triggered Capture
For isolating specific events in high-traffic networks:
Wireshark capture filters:
ether proto 0x8892 and ether[0] & 1 = 0
Only unicast PROFINET frames (filter out multicast).
Wireshark stop conditions:
- Capture -> Stop Conditions -> “After X packets” or “After X seconds”
- Useful for capturing exactly one POWERLINK cycle or a specific number of PROFINET RT frames
Hardware trigger (X20ET8819):
- Configure a digital input trigger to start recording when a physical event occurs
- Use filter expressions to pre-select which frames to store
- Essential for capturing sporadic intermittent faults that may not occur during a manual observation window
9. Timing Analysis for Intermittent Communication Issues
9.1 Common Intermittent Fault Patterns
| Symptom | Protocol Layer | Likely Cause | Detection Method |
|---|---|---|---|
| Occasional missed cycle | POWERLINK/PROFINET RT | Network overload, bad cable | CycleCounter gaps |
| Random data corruption | CAN / Serial | EMI, ground loop, poor termination | CRC errors, bit stuffing errors |
| Intermittent node drop | CANopen / X2X | Loose connector, failing transceiver | Heartbeat timeout, bus-off |
| Timing jitter spikes | Any real-time protocol | CPU overload, OS scheduling | Delta time histogram |
| Data staleness | POWERLINK/PROFINET | IO module sensor failure | DataValid=0, IOxS=bad |
9.2 Wireshark Timing Analysis
POWERLINK cycle time analysis:
- Filter for SoC (Start of Cycle) frames:
epl.service_type == "SoC" - Add column:
frame.time_delta_displayed(delta from previous frame) - Sort by time and examine the delta column
- Healthy: consistent delta matching the configured cycle time (e.g., 1.000ms +/- 0.01ms)
- Faulty: delta spikes, missed cycles, or irregular intervals
PROFINET cycle analysis:
- Filter:
pn_rt - Add column:
pn_rt.cycle_counter - If CycleCounter has gaps (e.g., 12340, 12341, 12343 - missed 12342), frames were lost
- Add column:
frame.time_delta_displayed - Build a histogram: Statistics -> Capture File Properties -> “Create Stat” or use Expert Info
PROFINET data validity analysis:
- Filter:
pn_rt.data_status.datavalid == 0 - If this returns frames, the IO device is reporting invalid data
- Cross-reference with
pn_io.alarm_typefor diagnostic alarms - Check timing: does DataValid go to 0 at the same time as alarms? (indicates sensor failure)
- Does DataValid go to 0 without alarms? (indicates communication issue)
9.3 CAN Bus Error Analysis
CAN error types and what they mean:
| Error Type | Meaning | Common Cause |
|---|---|---|
| Bit Error | Transmitted bit differs from monitored bit | Cable length, EMI |
| Stuff Error | 6 consecutive equal bits (violates bit stuffing rule) | Corrupted data |
| CRC Error | Calculated CRC doesn’t match received CRC | Electrical noise, bad connection |
| Form Error | Fixed-format field has wrong value | Transceiver fault |
| ACK Error | No ACK from any receiver | Wiring, termination, bus-off |
| Bus-Off | Node has accumulated too many errors and disconnected itself | Persistent fault (cable, transceiver) |
Detection with CAN tools:
- PCAN-View: Shows error frames, TX/RX error counters, bus state
- CANalyzer: Error frame analysis, bus load measurement, error statistics
- SocketCAN:
ip -details -statistics link show can0shows error counters candump can0 -eincludes error frames in the capture
Intermittent CAN fault diagnostic workflow:
- Monitor the TX error counter (TEC) and RX error counter (REC) over time
- If TEC increases sporadically but recovers: intermittent cable issue
- If REC increases: bus-level noise or another node transmitting errors
- If both TEC and REC increase together with error frames: EMI or ground loop
- If counters go to bus-off: persistent fault - check termination, cable, and connectors
- Use an oscilloscope on CAN_H and CAN_L to check signal quality during the fault
9.4 X2X Timing Analysis
With a logic analyzer:
- Capture a long trace (several minutes) during normal operation to establish baseline
- Measure the time between recurring patterns (each station’s transmission time slot)
- Set a trigger on the “unexpected” pattern: e.g., a frame that appears only during the fault
- Compare signal integrity during normal operation vs. during the fault
- Check for: jitter in frame timing, changes in frame length, missing responses, or signal quality degradation
9.5 Statistical Analysis Methods
Wireshark IO Graphs:
- Statistics -> IO Graph: Plot packet rate, bytes/frame, or custom field values over time
- Useful for visualizing periodic behavior and spotting anomalies
Wireshark Expert Info:
- Analyze -> Expert Info: Shows warnings and notes about unusual patterns
- Detects: retransmissions, duplicate ACKs, out-of-order frames, protocol violations
Custom Python analysis:
import scapy.all as scapy
packets = scapy.rdpcap('capture.pcap')
deltas = [packets[i+1].time - packets[i].time for i in range(len(packets)-1)]
import statistics
print(f"Mean cycle: {statistics.mean(deltas)*1000:.3f} ms")
print(f"Std dev: {statistics.stdev(deltas)*1000:.3f} ms")
print(f"Min: {min(deltas)*1000:.3f} ms, Max: {max(deltas)*1000:.3f} ms")
10. Practical Diagnostic Workflows
10.1 Workflow 1: POWERLINK Sensor Reading Intermittently Wrong
Scenario: An analog input sensor on an X20 AI module occasionally reads zero or max value.
Steps:
- Confirm the symptom in Automation Studio: Watch the variable over time using the watch window or mapp Trend
- Identify the station: Note the NodeID and slot position of the failing module
- Set up Wireshark capture:
- Connect PC to POWERLINK network via hub
- Disable TCP/IP on the capture interface
- Set NIC to half-duplex, 100 Mbps
- Filter for the failing station:
epl.src == <NodeID> && epl.service_type == "PRes"- Add a PRes-Payload column
- Compare good vs bad readings:
- Identify the byte offset of the failing channel in the PRes payload
- Correlate with the known sensor address mapping
- Check for POWERLINK errors:
- Look for ASnd frames with error indications
- Check if other stations are affected
- Physical checks:
- Inspect wiring from sensor to AI module terminals
- Check shield/ground connections
- Verify sensor power supply
- Advanced: If the fault is timing-related, switch to X20ET8819 for nanosecond-precision capture with hardware trigger
10.2 Workflow 2: PROFINET IO Device Randomly Dropping Offline
Scenario: A PROFINET IO device intermittently shows “Not Found” or drops out of data exchange.
Steps:
- Set up capture with SPAN/tap:
- Configure managed switch: mirror the port connected to the failing IO device
- Connect PC to mirror port, start Wireshark
- Critical: Start capture before the device connects to capture the connection setup
- Monitor normal operation:
- Verify cyclic RT frames are arriving regularly:
pn_rt && eth.addr == <device MAC> - Check CycleCounter is incrementing without gaps
- Verify DataValid = 1
- Verify cyclic RT frames are arriving regularly:
- Capture the failure event:
- Let the capture run until the device drops out
- Look for the last cyclic frame before the dropout
- Analyze the failure:
- If cyclic frames stop abruptly with no alarms: cable or power failure
- If DataValid goes to 0 before dropout: sensor/module error
- If DCP re-discovery occurs: device rebooted or was reconnected
- If ARP/LLDP stops: physical link went down
- Check alarms before dropout:
pn_io.alarm_type- look for Pull, Diagnosis, or Status alarms
- Root cause:
- Physical layer: cable, connector, switch port
- Power: check device power supply
- Configuration: verify GSDML version, module configuration match
- Network: check for overloaded switch, VLAN issues
10.3 Workflow 3: CANopen Sensor Sporadically Not Updating
Scenario: A CANopen analog sensor module occasionally stops sending updated values.
Steps:
- Identify the node’s CAN ID: Calculate from the PDO mapping (default TPDO1 = 0x180 + NodeID)
- Set up CAN capture:
- Connect CAN adapter to bus via Y-tap
- Configure matching baud rate
- Start capture
- Monitor PDO traffic:
- Filter for the node’s TPDO CAN ID
- Watch the data bytes for the sensor value
- Check for errors:
- Look for emergency messages (CAN ID 0x080 + NodeID)
- Check heartbeat messages (0x700 + NodeID) - are they still arriving?
- Monitor bus error counters:
ip -s link show can0
- SDO read diagnostic objects:
- Use CANalyzer or python-can to send SDO read requests to diagnostic objects
- Read OD index 0x1001 (Error Register) and 0x10FD (Error History)
- Physical layer:
- Measure CAN_H and CAN_L voltages with a multimeter (recessive: ~2.5V, dominant: ~3.5V/1.5V)
- Verify 120-ohm termination at both bus ends
- Check cable shielding and ground
10.4 Workflow 4: X2X Bus Communication Errors (General)
Scenario: Random communication errors on the X2X bus causing IO modules to show diagnostic LEDs.
Steps:
- Check B&R diagnostics first:
- Use Automation Studio: System Diagnostics -> IO Diagnostics
- Identify which stations and modules are affected
- Set up logic analyzer:
- Connect RS-485 level shifter to X2L+/X2L- wires
- Set sample rate to 10x bus speed (120 MHz for 12 Mbaud)
- Capture for a long duration to catch the intermittent event
- Analyze signal integrity:
- Check differential voltage levels
- Look for signal ringing, reflections, or noise
- Compare with known-good reference capture
- Check physical layer:
- Verify bus termination at both ends
- Inspect connectors for corrosion or loose contacts
- Check cable length (X2X has maximum segment length limits)
- Verify shield grounding
- Bus utilization:
- Measure the percentage of time the bus is active vs. idle
- High utilization can cause timing margin issues
- Reduce cycle time or station count if overloaded
- Replace/swap:
- Swap the bus controller to rule out a failing transceiver
- Swap individual IO modules to isolate the failing node
11. Legal and Safety Considerations
11.1 Authorization and Access Control
- Only authorized personnel should perform network sniffing on industrial control systems
- Obtain written permission from the plant/facility management before installing any monitoring equipment
- Follow the organization’s IT/OT security policies and change management procedures
- Document all monitoring activities, including what was captured, when, and by whom
11.2 Impact on Production Systems
- Passive tapping is the safest method as it introduces zero risk to the live system
- Active sniffing (connecting a PC to the network) carries risks:
- Accidentally sending packets that disrupt real-time communication
- PC NIC flooding the bus with unwanted traffic (ARP, DHCP, IPv6)
- Network card driver issues causing packet storms
- Always disable TCP/IP and other network services on the capture interface before connecting
- Test any monitoring setup during a planned shutdown before deploying on live systems
- Use a dedicated, isolated capture machine (never a production PC)
11.3 Data Privacy and Security
- Captured fieldbus traffic may contain sensitive production data (recipes, process parameters, proprietary configurations)
- pcap files should be treated as confidential data and stored securely
- Do not share capture files outside the organization without proper authorization
- Delete captures after the diagnostic issue is resolved (unless required for compliance)
- Captured data may contain safety-related information - handle with appropriate care
- Some industrial protocols transmit passwords or configuration data in plaintext
11.4 Regulatory Compliance
| Regulation | Relevance |
|---|---|
| IEC 62443 | Industrial cybersecurity: network monitoring must comply with zone/conduit model |
| GDPR | If captures contain personal data (e.g., operator actions) |
| NIST CSF | US: Identify and protect industrial control system communications |
| Machine Directive (EU) | Safety-related systems must not be compromised by monitoring |
| Company policies | IT security policies, OT network access policies, change management |
11.5 Safety-Critical Systems
- Never install monitoring equipment on safety-rated fieldbus segments (e.g., PROFIsafe, openSAFETY, CIP Safety) without:
- Manufacturer approval
- Safety engineer sign-off
- Formal risk assessment
- SIL/PLD verification that monitoring does not compromise safety functions
- Passive taps are generally acceptable on safety networks as they don’t modify traffic
- Active devices (even in promiscuous mode) must be certified for use in safety networks
11.6 Liability
- Monitoring equipment installed on industrial networks becomes part of the safety chain
- If monitoring equipment fails and causes an incident, the installer may be liable
- Always follow manufacturer guidelines for network monitoring
- Use only approved and tested monitoring hardware
- Maintain records of all monitoring installations and configurations
12. Tools Comparison Table
12.1 Ethernet Protocol Analysis Tools
| Tool | Cost | Protocol Support | Platform | Strengths |
|---|---|---|---|---|
| Wireshark | Free | POWERLINK, PROFINET, EtherNet/IP, Modbus TCP, all standard protocols | Win/Linux/macOS | Industry standard, powerful filtering, extensible |
| EPL-Viz | Free (research) | POWERLINK only | Web-based | POWERLINK-specific visualization, state monitoring |
| B&R X20ET8819 | ~$500-1500 (est.) | POWERLINK only | B&R system | Nanosecond timestamps, trigger recording, filter inputs |
| Hilscher netANALYZER | ~$2,000-5,000 | PROFINET, EtherCAT, EtherNet/IP, POWERLINK | PC (Windows) | Professional industrial Ethernet analysis |
| Hilscher netMIRROR | ~$500-1,500 | Any Ethernet | Passive tap | Non-intrusive monitoring, hardware-based |
| PI PROFINET Investigator | ~$1,000-3,000 | PROFINET (all classes) | Windows | Official PI tool, GSD-based decode |
| Proneta | Free | PROFINET | Windows | Network topology, device commissioning |
12.2 CAN Bus Analysis Tools
| Tool | Cost | CANopen Support | Platform | Strengths |
|---|---|---|---|---|
| PEAK PCAN-View | Free (with adapter) | Basic CAN frame display | Win/Linux | Included with PCAN hardware, simple and reliable |
| PEAK PCAN-Explorer 6 | ~$500-1,000 | CANopen with EDS import | Windows | CANopen-specific analysis, free trial |
| Vector CANalyzer | ~$3,000-8,000 | Full CANopen, J1939, LIN, MOST | Windows | Industry gold standard, CAPL scripting, graphics |
| Vector CANalyzer.CANopen | ~$1,500 add-on | CANopen OD, PDO, SDO | Windows | Deep CANopen analysis with EDS/EDD |
| Kvaser CANKing | Free (with adapter) | Basic | Windows | Simple monitoring |
| SocketCAN (candump/cansniffer) | Free | Basic CAN frame capture | Linux | Scriptable, integrates with Python, free |
| python-can | Free | CANopen via canopen library | Cross-platform | Python scripting, automated analysis |
| CanLover | Free | CANopen | Win/Linux | Modern UI, CANalyzer alternative, SocketCAN native |
| Busmaster | Free | CANopen, J1939, ISO 15765 | Windows | Open-source, comprehensive, GUI |
12.3 Logic Analyzers for X2X/Serial
| Tool | Cost | Sample Rate | Channels | Strengths |
|---|---|---|---|---|
| Saleae Logic 8 | ~$500 | 100 MS/s | 8 | Excellent software, easy to use, protocol decode |
| Saleae Logic Pro 16 | ~$1,000 | 500 MS/s | 16 | Higher sample rate for fast X2X at 12Mbaud |
| Saleae Logic Pro 16 (High-Performance) | ~$1,500 | 500 MS/s (with deep memory) | 16 | Long captures, high performance |
| Sigrok/PulseView + cheap LA | $10-100 (hardware) | 24-100 MS/s | 8-16 | Free software, 131+ decoders, extensible |
| DreamSourceLab DSLogic | ~$150-300 | 400 MS/s | 16 | High performance, sigrok compatible |
| Rigol DS1054Z (scope+LA) | ~$400 | 1 GS/s | 16 (LA mode) | Oscilloscope + logic analyzer combined |
12.4 Ethernet Tap Hardware
| Tool | Cost | Type | Supported Media |
|---|---|---|---|
| Dualcomm DTE | ~$30-50 | Port-stealing (regenerative) | Copper 10/100/1000 |
| SharkTap | ~$50-100 | Regenerative inline tap | Copper 10/100/1000 |
| Garland Technology | ~$200-500 | Passive/aggregated | Copper + Fiber |
| NetOptics / Gigamon | ~$500-2,000 | Enterprise passive/aggregated | Copper + Fiber |
| Managed switch (SPAN) | N/A (existing) | Software mirroring | Depends on switch |
| Hilscher netMIRROR | ~$500-1,500 | Industrial passive tap | Industrial Ethernet |
12.5 Comprehensive Capability Matrix
| Tool | POWERLINK | PROFINET | CANopen | X2X | Capture | Timing Accuracy | Cost Range |
|---|---|---|---|---|---|---|---|
| Wireshark | Yes | Yes | No (via CAN adapter) | No | Software | ~microsecond | Free |
| X20ET8819 | Yes | No | No | No | Hardware | Nanosecond | $$$ |
| netANALYZER | Yes | Yes | No | No | Hardware | Nanosecond | $$$$ |
| PCAN-View | No | No | Yes | No | Software | Millisecond | $ (w/adapter) |
| CANalyzer | No | No | Yes | No | Software | Millisecond | $$$$ |
| SocketCAN | No | No | Yes | No | Software/CLI | Millisecond | Free |
| Saleae Logic | No | No | CAN (decode) | Yes (signal) | Hardware | ~nanosecond | $$-$$$ |
| Sigrok/PulseView | No | No | CAN (decode) | Yes (signal) | Hardware/CLI | ~nanosecond | Free-$ |
| Oscilloscope | No | No | CAN (signal) | Yes (signal) | Hardware | Nanosecond-psec | $$-$$$$ |
Legend: Free = $0, $ = <$100, $$ = $100-500, $$$ = $500-2,000, $$$$ = >$2,000
13. Sources and References
Official Documentation
- B&R Community: “Diagnosis of POWERLINK networks using Wireshark” https://community.br-automation.com/t/diagnosis-of-powerlink-networks-using-wireshark/3648
- B&R Automation: POWERLINK in detail https://www.br-automation.com/en/technologies/powerlink/technology/powerlink-in-detail/
- B&R Automation: X20ET8819 Ethernet Analysis Tool https://www.br-automation.com/en/products/io-systems/x20-system/x20-hub-system/x20et8819/
- B&R Automation: POWERLINK Configuration and Diagnostics (TM950TRE.40) http://www.ftp.boss-bravo.fr/wiki/pdf/TM_BR/TM950TRE.40-ENG_POWERLINK%2520Configuration%2520and%2520Diagnostics_V4000.pdf
Wireshark and Protocol References
- SCADA Protocols: “Wireshark for PROFINET: How to Capture and Decode RT, DCP, and IO Traffic” https://scadaprotocols.com/wireshark-profinet-decode-rt-dcp-guide/
- Wireshark Wiki: PROFINET/RT https://wiki.wireshark.org/PROFINET/RT
- Wireshark Wiki: PROFINET/DCP https://wiki.wireshark.org/PROFINET/DCP
- Wireshark Wiki: PROFINET/IO https://wiki.wireshark.org/PROFINET/IO
- Felser Engineering: PROFINET Manual - Wireshark https://www.felser.ch/profinet-manual/wireshark.html
- Felser Engineering: Port Mirroring - PROFINET Manual https://www.felser.ch/profinet-manual/pn_port-mirroring.html
- EPL-Viz: POWERLINK visualization https://epl-viz.github.io/
CAN Bus and CANopen
- CSS Electronics: “CANopen Explained - A Simple Intro” https://www.csselectronics.com/pages/canopen-tutorial-simple-intro
- CSS Electronics: “CAN Bus Errors Explained” https://www.csselectronics.com/pages/can-bus-errors-intro-tutorial
- Analog Devices: “How to map objects to a PDO on a CANopen slave” (AN-076) https://www.analog.com/cn/resources/app-notes/an-076.html
- NI: “The Basics of CANopen” https://www.ni.com/en/shop/seamlessly-connect-to-third-party-devices-and-supervisory-system/the-basics-of-canopen.html
- Grid Connect: “CAN Bus Diagnostics: Step-by-Step Guide” https://www.gridconnect.com/blogs/news/how-to-diagnose-a-controller-area-network-can
- EEVblog: “Kvaser or Peak CAN bus adapters for CAN Open” https://www.eevblog.com/forum/chat/kvaser-or-peak-can-bus-adapters-for-can-open/
- RPubs: “CAN Tool Comparison (Vector vs PEAK)” https://rpubs.com/daniel_pas/can_tool_comparison
- GitHub: “Awesome CAN bus tools, hardware and resources” https://github.com/ajouatom/canbus-tools
- CAN Wiki: “CAN analyzers” http://www.can-wiki.info/doku.php?id=testequipment:cananalyzers
Hardware and Sniffing Tools
- Hilscher: “Sniffing Tool” (glossary/overview) https://www.hilscher.com/service-support/glossary/sniffing-tool
- Sigrok: “Protocol decoders” (131+ decoders) http://sigrok.org/wiki/Protocol_decoders
- Vector: CANalyzer.CANopen product page https://www.vector.com/int/en/products/products-a-z/software/canalyzer/option-canopen/
- PEAK-System: PCAN-View product page https://www.peak-system.com/products/software/analysis-software/pcan-view/
- ControlTech: “Vector CANalyzer Alternative: PEAK PCAN-Explorer 6” https://controltechuk.com/blog/vector-canalyzer-alternative/
- Atomic Object: “Affordable CAN Bus Tools that Won’t Break the Bank” https://spin.atomicobject.com/affordable-can-bus-tools/
- CanLover: Free CAN analyzer alternative https://canlover.ddns.net/
Network Tapping and Monitoring
- Garland Technology: “Network TAPs” https://www.garlandtechnology.com/network-tap
- Gigamon: “Understanding Network TAPs” https://www.gigamon.com/resources/resource-library/white-paper/understanding-network-taps-first-step-to-visibility.html
- Network Critical: “Top 8 Network TAPs for Passive Network Monitoring in 2026” https://www.networkcritical.com/blogs/top-8-network-taps-for-passive-network-monitoring
- Industrial Monitor Direct: “Capturing EtherNet/IP I/O Traffic: Network Taps vs Switch Port Mirroring” https://industrialmonitordirect.com/blogs/knowledgebase/capturing-ethernetip-io-traffic-with-wireshark-network-taps-vs-switch-port-mirroring
- Siemens Industry Support: “Network capture with Wireshark and Port Mirroring using SCALANCE X” https://support.industry.siemens.com/cs/document/109976057
B&R X2X and IO Systems
- B&R Automation: X20 System User’s Manual https://www.phb-electricite.fr/content/doc/br_automation/x20_system_manual.pdf
- Reddit r/PLC: “B&R X2X Link network troubleshooting” https://www.reddit.com/r/PLC/comments/p73low/br_x2x_link_network_troubleshooting/
- B&R Automation: X20BC0063 (X2X to PROFIBUS DP bus controller) https://www.br-automation.com/en/products/io-systems/x20-system/bus-controllers/x20bc0063/
Industrial Ethernet Switches
- Bihl+Wiedemann: “POWERLINK Fieldbus system” https://www.bihl-wiedemann.de/en/company/technological-foundations/bus-systems/powerlink
Academic and Research
- ResearchGate: “Attacking Fieldbus Communications in ICS: Applications to the SWaT Testbed” https://www.researchgate.net/publication/292612170_Attacking_Fieldbus_Communications_in_ICS_Applications_to_the_SWaT_Testbed
- ResearchInventy: “A Comprehensive Study of Cybersecurity in Fieldbus Protocols” http://www.researchinventy.com/papers/v15i9/15092732.pdf
Cross-References
- physical-layer-sniffing.md – physical wire-level signal analysis for fieldbus cables
- powerlink-internals.md – POWERLINK protocol internals and Wireshark capture
- x2x-protocol.md – X2X bus protocol wire-level details
- if2772-canopen.md – CAN bus protocol and CANopen analysis
- cp1584-forensics.md – extracting information from unknown CP1584 systems
- io-card-hardware.md – IO module hardware architecture and signal paths
- grounding-emc.md – grounding and EMC troubleshooting for signal integrity
- diagnostic-workstation.md – protocol analyzer and sniffer hardware recommendations
- network-architecture.md – B&R network topology and device enumeration
Document generated July 2026. Verify all URLs and tool versions before use. Industrial network sniffing should only be performed by qualified personnel following organizational safety and security policies.
Key Findings
- Wireshark with the POWERLINK plugin is the most accessible sniffing tool — it captures EPL traffic from any PC with a supported NIC in promiscuous mode. No expensive hardware required for basic POWERLINK diagnostics.
- X2X bus sniffing requires a logic analyzer — the proprietary protocol has no Wireshark decoder. A Saleae or Sigrok-compatible analyzer with ground clips on the X2X link connector is needed. See x2x-protocol.md for frame format details.
- CAN bus sniffing with PCAN or Vector tools is well-supported — the CANopen protocol on the B&R IF2772 is standard CiA 301, making commercial CAN analyzers fully capable. PDO/SDO mapping can be decoded with standard tools.
- Network tap placement matters — for POWERLINK, tap at the switch mirror port (not inline) to avoid timing disruption. For X2X, probe the backplane connector pins directly with the logic analyzer ground clips.
- Sniffing without disrupting production is the primary challenge — always use non-invasive methods (mirror ports, clamp-on current probes) on running machines. Reserve invasive probing for shutdown windows.
- The most common sniffing use case for undocumented machines is identifying which IO channel is failing — correlate captured sensor data with the IO module’s channel assignment to pinpoint the exact failing channel without any documentation.