plcopen

Crates.ioplcopen
lib.rsplcopen
version0.3.1
created_at2025-12-05 12:15:08.387862+00
updated_at2025-12-14 16:43:37.470977+00
descriptionParser for PLCopen TC6 XML files (IEC 61131-3 standard exchange format)
homepagehttps://github.com/radevgit/plc
repositoryhttps://github.com/radevgit/plc
max_upload_size
id1968069
size155,588
(radevgit)

documentation

https://docs.rs/plcopen

README

plcopen

Parser for PLCopen TC6 XML files - the IEC 61131-3 standard exchange format for PLC programs.

Features

  • Type-safe parsing using quick-xml and serde
  • Generated types from the official PLCopen TC6 XML schema (v2.01)
  • Full support for all 5 IEC 61131-3 languages:
    • ST (Structured Text) - Text-based
    • IL (Instruction List) - Text-based
    • FBD (Function Block Diagram) - Graphical
    • LD (Ladder Diagram) - Graphical
    • SFC (Sequential Function Chart) - Graphical
  • Complete element extraction from graphical languages:
    • FBD: blocks, variables, labels, jumps
    • LD: contacts, coils, power rails, blocks
    • SFC: steps, transitions, actions, jump steps
  • ST code extraction and parsing via iec61131

Installation

cargo add plcopen

Or add to your Cargo.toml:

[dependencies]
plcopen = "0.3"

Usage

use plcopen::Project;

// Parse PLCopen XML file
let xml = std::fs::read_to_string("project.xml")?;
let project: Project = plcopen::from_str(&xml)?;
println!("Project: {:?}", project);

ST Code Extraction

use plcopen::st::{extract_all_st_from_xml, parse_st};

let xml = std::fs::read_to_string("project.xml")?;

// Extract all ST code blocks from POUs
for (pou_name, st_code) in extract_all_st_from_xml(&xml) {
    // Parse ST code into AST
    let statements = parse_st(&st_code)?;
    println!("{}: {} statements", pou_name, statements.len());
}

PLCopen TC6 XML Format

PLCopen TC6 is an XML-based exchange format defined by the PLCopen organization for transferring PLC programs between different development environments.

This parser handles:

  • Program Organization Units (POUs): Programs, Functions, Function Blocks
  • Data Types: Elementary types (BOOL, INT, REAL, etc.) and user-defined types
  • Variables: Input, Output, InOut, Local, Global, External
  • All IEC 61131-3 Languages: Full parsing support for ST, IL, FBD, LD, and SFC
  • ST Code Extraction: Extracts and parses Structured Text (ST) code using iec61131
  • Graphical Elements: Access to all graphical language components (blocks, contacts, coils, steps, etc.)

License

MIT

Commit count: 0

cargo fmt