Understanding EDS & XML Device Files: Configuring PLCs and Field Devices

Every time you add a drive, sensor, or I/O module to your PLC network, you need a device file. Learn what EDS, GSD, GSDML, and IODD files are, how to read them, and how they configure your fieldbus devices.

🗂️ What Are Device Description Files?

When you add a VFD, I/O module, or smart sensor to your PLC network, the engineering software needs to know: What data does this device send? What parameters can be configured? What communication settings does it support?

Device description files answer all these questions. They're standardized text or XML files provided by the device manufacturer that describe the device's communication interface. Without them, your PLC doesn't know how to talk to the device.

| File Type | Protocol | Format | Used By | | EDS | EtherNet/IP, DeviceNet | INI-style text | Allen-Bradley, ODVA devices | | GSD | PROFIBUS DP | Text (key=value) | Siemens, PROFIBUS devices | | GSDML | PROFINET | XML | Siemens, PROFINET devices | | IODD | IO-Link | XML | IO-Link sensors/actuators | | ESI | EtherCAT | XML | Beckhoff, EtherCAT devices |

📄 EDS Files: EtherNet/IP Device Description

EDS (Electronic Data Sheet) files describe devices on EtherNet/IP and DeviceNet networks. They're plain-text files with an INI-like structure:

EDS File Structure

$ EDS File for ACME VFD Model 500
$ Created: 2026-01-15
$ Vendor: ACME Drives Inc.

[File] DescText = "ACME VFD Model 500 AC Drive"; CreateDate = 01-15-2026; CreateTime = 10:30:00; Revision = 1.2;

[Device] VendCode = 999; $ Vendor ID assigned by ODVA VendName = "ACME Drives"; ProdType = 2; $ Product type: AC Drive ProdTypeStr = "AC Drive"; ProdCode = 500; ProdName = "VFD Model 500"; Catalog = "VFD-500-EIP";

[Device Classification] Class1 = EtherNetIP;

[Connection Manager] Connection1 = 04040002, $ Trigger & transport 44640405, $ Connection parameters ,Assem101, $ Input assembly (from drive) ,Assem102, $ Output assembly (to drive) ,Assem103; $ Config assembly

Understanding Assemblies

Assemblies define the I/O data layout — what bytes the PLC exchanges with the device every scan:

[Assembly]
    Assem101 =                    $ Input Assembly: Drive → PLC
        "Input Data",             $ Name
        ,                         $ Path
        16,                       $ Size in bytes
        0x0004,                   $ Descriptor
        ,                         $ Reserved
        2,                        $ Number of members
        StatusWord,               $ Member 1: Drive status (WORD)
        ActualSpeed;              $ Member 2: Speed feedback (REAL)

Assem102 = $ Output Assembly: PLC → Drive "Output Data", , 8, $ Size in bytes 0x0001, , 2, ControlWord, $ Member 1: Drive command (WORD) SpeedReference; $ Member 2: Speed setpoint (REAL)

How to Read This in Your PLC Code

// The EDS file tells us:
// Input assembly (101): 16 bytes
//   Bytes 0-1: StatusWord (WORD)
//   Bytes 4-7: ActualSpeed (REAL)
// Output assembly (102): 8 bytes
//   Bytes 0-1: ControlWord (WORD)
//   Bytes 4-7: SpeedReference (REAL)

PROGRAM EDS_DataMapping VAR // These tags map to the assembly data // In Allen-Bradley: auto-created from EDS import // In CODESYS: manually mapped to EtherNet/IP adapter Drive_StatusWord : WORD; // Input, bytes 0-1 Drive_ActualSpeed : REAL; // Input, bytes 4-7 Drive_ControlWord : WORD; // Output, bytes 0-1 Drive_SpeedRef : REAL; // Output, bytes 4-7 END_VAR

EDS Parameters Section

EDS files also define configurable parameters (CIP attributes) accessible via explicit messaging:

[Params]
    Param1 =
        0,                        $ Reserved
        ,,                        $ Link/size
        0x0006,                   $ Descriptor (read/write)
        0xC8,                     $ Data type: REAL
        4,                        $ Data size
        "Motor Rated Current",    $ Parameter name
        "A",                      $ Units
        "0.1",                    $ Minimum value
        "999.9",                  $ Maximum value
        "12.5",                   $ Default value
        ,,;                       $ Reserved

Param2 = 0,,, 0x0006, 0xC8, 4, "Acceleration Time", "s", "0.1", "600.0", "10.0", ,,;

📋 GSDML Files: PROFINET Device Description

GSDML (General Station Description Markup Language) files are XML-based descriptions for PROFINET devices. They're more detailed than EDS files:



  
    PROFINET Device Profile
    1.00
    Device Profile for ACME Sensor
  

ACME Temperature Transmitter TT-200

4-20mA Temperature Module

Upper Range Value Lower Range Value

Reading GSDML: What Matters for Programmers

| XML Element | What It Tells You | | DeviceIdentity | Vendor ID and Device ID for hardware catalog | | ModuleInfo | What slots/modules the device supports | | SubmoduleItem / IOData | The I/O data layout — sizes, types, order | | RecordDataList | Parameters you can read/write during commissioning | | InterfaceSubmoduleItem | Network settings (IP, ports) |

🔗 IODD Files: IO-Link Smart Sensors

IODD (IO Device Description) files describe IO-Link sensors and actuators:



  
  
  
    
      ACME Sensors
      ProxSwitch PS-100
    

Distance Measured distance in 0.1mm

Switching Point 1 1000 Hysteresis 50

🔧 Practical Workflow: Using Device Files

Step-by-Step Process

  • 📥 Download the file — Get the EDS/GSDML/IODD from the manufacturer's website (usually in the product's support/downloads section)
  • 📂 Install in your IDE:
  • - TIA Portal: Options → Manage GSD files → Install → Browse to GSDML - Studio 5000: Tools → EDS Hardware Installation Tool → Add - CODESYS: Tools → Device Repository → Install

  • 🔗 Add to hardware config — The device now appears in the hardware catalog. Drag it into your project's network view.
  • 📊 Map I/O — The IDE creates I/O tags based on the assembly/module definitions in the device file. These become the variables you use in code.
  • ⚙️ Set parameters — Configure device-specific parameters (scaling, filtering, communication settings) defined in the device file.
  • // After importing EDS and adding device to hardware config:
    // The I/O tags are automatically created:

    // EtherNet/IP (from EDS assemblies) Drive1_Input.StatusWord // Mapped from Assembly 101 Drive1_Input.ActualSpeed // Mapped from Assembly 101 Drive1_Output.ControlWord // Mapped to Assembly 102 Drive1_Output.SpeedRef // Mapped to Assembly 102

    // PROFINET (from GSDML submodules) TempSensor_1.Temperature // Mapped from Submodule 1, Float32 TempSensor_1.Status // Mapped from Submodule 1, UINT8

    // IO-Link (from IODD process data) ProxSwitch_1.Distance // Mapped from ProcessDataIn, UINT16

    ⚠️ Common Issues and Solutions

    | Problem | Cause | Fix | | Device not found after EDS install | Wrong revision or file corruption | Download fresh from manufacturer | | I/O data size mismatch | Firmware version differs from EDS version | Match EDS revision to device firmware | | Parameters won't write | Device in wrong mode | Check if device needs to be in config mode | | "Module not compatible" error | GSDML for different hardware variant | Get the exact GSDML for your part number | | Communication intermittent | IP conflict or wrong subnet | Verify network settings match GSDML defaults |

    Summary

    | File Type | Protocol | Key Content | Where to Get It | | EDS (.eds) | EtherNet/IP | Assemblies, parameters, device identity | ODVA or manufacturer website | | GSD (.gsd) | PROFIBUS | Modules, I/O config, baud rates | Manufacturer website | | GSDML (.xml) | PROFINET | Submodules, I/O data, record parameters | Manufacturer or PI website | | IODD (.xml) | IO-Link | Process data, parameters, diagnostics | IODDfinder.com or manufacturer | | ESI (.xml) | EtherCAT | PDOs, SDOs, distributed clocks | Manufacturer website |

    Device files are the Rosetta Stone of industrial communication. They translate between the device manufacturer's hardware design and your PLC's software model. Understanding their structure saves hours of commissioning time and eliminates the guesswork in I/O mapping.