---
name: industrial
description: Industrial communication protocols for Zephyr RTOS. Covers Modbus RTU (serial), Modbus TCP (Ethernet/Wi-Fi), and CANopen basics. Trigger when building factory automation controllers, industrial sensors, or medical equipment interfaces.
---

# Zephyr Industrial Protocols

Build robust, industry-standard communication systems using Zephyr's modular industrial protocol stacks.

## Core Workflows

### 1. Modbus RTU (Serial)
Implement serial-based industrial communication for meters, PLCs, and sensors.
- **Reference**: **[modbus_rtu.md](references/modbus_rtu.md)**
- **Key Tools**: `CONFIG_MODBUS`, RS-485 DE/RE handling, Register Mapping.

### 2. Modbus TCP
Bridge industrial data over standard Ethernet or Wi-Fi networks.
- **Reference**: **[modbus_tcp.md](references/modbus_tcp.md)**
- **Key Tools**: Port 502, TCP/IP networking, Client/Server patterns.

### 3. CANopen Basics
Integrate with complex automation networks using the CANopenNode stack.
- **Reference**: **[canopen_basics.md](references/canopen_basics.md)**
- **Key Tools**: Object Dictionary (OD), PDO/SDO, Network Management (NMT).

## Quick Start (Modbus RTU Server)
```kconfig
# prj.conf
CONFIG_MODBUS=y
CONFIG_MODBUS_SERIAL=y
```
```c
// Initialize a server on a serial device
const struct device *dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_modbus_serial));
struct modbus_iface_param param = {
    .mode = MODBUS_MODE_RTU,
    .server = { .node_addr = 1, .cb = &my_callbacks },
    .serial = { .baud = 115200, .parity = UART_CFG_PARITY_NONE },
};
modbus_init_server(dev, param);
```

## Professional Patterns (Reliability & Safety)
- **RS-485 Hardware Handling**: Always use the devicetree `uart-rs485` property to handle transceiver direction signals automatically at the driver level.
- **Isolated Communication**: Use galvanically isolated transceivers for both serial and CAN lines in factory environments to prevent damage from ground loops.
- **Watchdog Integration**: In industrial control, always pair your communication loops with the **watchdog_reliability** pattern (see **specialized** skill) to ensure the system enters a fail-safe state on protocol lockup.

## Automation Tools
- **[modbus_register_lint.py](scripts/modbus_register_lint.py)**: Validate register map CSV files for duplicate addresses and overlaps.

## Examples & Templates
- **[modbus_register_map_template.csv](assets/modbus_register_map_template.csv)**: Starter register allocation sheet for Modbus projects.

## Validation Checklist
- [ ] Modbus RTU request/response exchange succeeds against a known test slave/master.
- [ ] Modbus TCP endpoint responds on port 502 with correct register mappings.
- [ ] CANopen node transitions through expected NMT states during startup.
- [ ] Communication faults trigger safe retry or watchdog-protected recovery behavior.

## Resources

- **[References](references/)**:
  - `modbus_rtu.md`: Serial Modbus master/slave setup.
  - `modbus_tcp.md`: Ethernet Modbus client/server patterns.
  - `canopen_basics.md`: Object Dictionary and PDO mapping.
- **[Scripts](scripts/)**:
  - `modbus_register_lint.py`: Register-map consistency checker.
- **[Assets](assets/)**:
  - `modbus_register_map_template.csv`: Register planning template.
