plcopen v0.21.0 — Motion, Twin & Tooling Closure
v0.21.0 is the published pre-1.0 release centered on the rewritten core/ runtime and the
software-complete motion, twin, tooling, and consumer-path closure batches. It remains
pre-1.0: no stable ABI, no PLCopen or Safety certification, no real-machine production
evidence, and no LTS commitment are implied.
This release remains source/header-only for C++ consumption. The C++ delivery is still GitHub
source archives plus CMake install/export; ConanCenter and vcpkg central registry assets remain
fixed at the published v0.20.0 line, and this release does not claim v0.21.0 registry
inclusion. Python package pyplcopen==0.21.0 is publicly available on PyPI with 20 wheels,
1 sdist, and Requires-Python >=3.10.
Install
C++ with FetchContent
include(FetchContent)
FetchContent_Declare(
plcopen
GIT_REPOSITORY https://github.com/lusipad/plcopen.git
GIT_TAG v0.21.0)
FetchContent_MakeAvailable(plcopen)
target_link_libraries(my_controller PRIVATE plcopen::plcopen)
The exported target is header-only and requires C++17 and CMake 3.21 or newer.
Installed-package consumption through find_package(plcopen CONFIG REQUIRED)
remains the supported downstream path.
Python
Published package page: https://pypi.org/project/pyplcopen/0.21.0/.
What users get
- H1 adds the 48-axis atomic
{q_des,dq_des,tau_ff,kp,kd}stream contract, withdirect/upsample, full precheck, keep-latest, local watchdog, group-wide drop handling, and command snapshots.tau_ffremains a data path only and still does not imply T18 or real-machine completion. - H2 adds the fixed-capacity
kin::SerialChainfor 1-8 revolute joints with standard/modified DH forward kinematics and deterministic numerical inverse-kinematics fallback. - H3 adds
dyn::FixedBaseChain, a fixed-base inverse-dynamics path that returns puretau_ffvalues only. Floating base, contact, whole-body coupling, and safety claims stay out of scope. - T2a adds the optional MuJoCo/Rerun closed loop for the existing twin path, and T2b extends it to the repository-owned seven-joint fixture without changing the default dependency surface.
- D1 adds the ST Language Server and thin VS Code client for multi-POU documents; D3 adds the online commissioning Scope with threshold capture and PLCT/CSV/HTML export.
- Z1-Z5 package the five-minute notebook, axis/group SI configuration, Python/C++/ST journeys, Conan/vcpkg consumer assets, structured diagnostics, and trace visualization into one consumer surface.
- X5 gives a fixed-ABI Servo IPC contract with setpoint/feedback SPSC, state buffering, and explicit lifecycle checks.
- Y4b, Y7b1, and Y7b2a close the remaining takeover and bridge gaps for linear, circular, and plain Cartesian LINE source handling without widening the kinematics ABI.
Compatibility and migration
v0.21.0is still below 1.0. Public changes follow SemVer and are documented, but ABI stability is not promised yet.plcopen::plcopenresolves to the rewrittencore/target. Enable the frozen implementation explicitly withPLCOPEN_BUILD_LEGACY=ONonly when maintaining a migration or replay baseline.- Public C++ facades keep
snake_case, function-block outputs stay grouped underoutputs, and applications advance axis/group objects through explicit cyclic calls. - The repository keeps a local Conan recipe and a draft vcpkg manifest, but this release does not claim publication in ConanCenter or the vcpkg registry.
See the migration guide for API and runtime-model changes.
Release artifacts
| Channel | Artifact |
|---|---|
| GitHub | Published source .zip / .tar.gz release for the C++ header-only library, CMake install/export files, local Conan recipe, examples, and documentation: https://github.com/lusipad/plcopen/releases/tag/v0.21.0 |
| PyPI | Published pyplcopen==0.21.0 distribution with 20 wheels + 1 sdist, Requires-Python >=3.10: https://pypi.org/project/pyplcopen/0.21.0/ |
There are no standalone C++ platform installers or shared-library binaries in this release. The C++ delivery remains source/header-only by design.
Verification snapshot
Final publication and verification are bound to the released assets and the completed CI gates:
| Gate | Status |
|---|---|
| Release title / URL | Published as v0.21.0 — Motion, Twin & Tooling Closure: https://github.com/lusipad/plcopen/releases/tag/v0.21.0 |
| Final annotated tag | Tag object 9985312fd8c862ae435bec28adcd5f2943966288 -> target commit 08d62b1b16e841a88509284b4c8c75d778592efc |
| Candidate validation commit | Candidate closure commit b4f2b87ea7a2cf5bdd0a9ee262dc5ddbcf1ca807 |
Final main gates |
Passed on the tag target: Windows 30480823667, Linux 30480823343, Language Tools 30480823421, Twin 30480823345, and Documentation 30480824589 |
| Local build, install, and runtime verification | Passed: MSVC Debug 102/102; Release/install/find_package/ST/FetchContent/Python 3/3; RT scan 32 files; replay 18 fixtures / 2409 samples; docs strict 27 paired pages; matrices 49/43/11 |
| Windows CI | Passed: run 30479093819 |
| Linux CI | Passed: run 30479093300 |
| Language Tools | Passed: run 30479093381 |
| Twin integration | Passed: run 30479093204 |
| Documentation | Passed: run 30479093304 plus local strict builds on 27 paired pages |
| Wheels candidate pipeline | Passed: run 30479097551 (publish intentionally skipped in candidate lane) |
| Core Nightly | Passed: run 30479101207 |
| Coverage Gate | Passed: run 30479104454; full-core line coverage 95.3%; motion branch coverage 10319/12138 = 85.014%; ST branch coverage 14811/17423 = 85.008% |
| Mutation Score Gate | Passed: run 30479107617; 20/20 = 100% |
| Tag-triggered wheels / PyPI publish | Passed: run 30496916708 (5/5 green) |
| GitHub Release | Published from the verified annotated tag at https://github.com/lusipad/plcopen/releases/tag/v0.21.0 |
| PyPI publication | Published and not yanked: https://pypi.org/project/pyplcopen/0.21.0/ |
| Public cold-user journey | Passed: run 30497974380; public wheel notebook, C++ installed package, ST, and documentation entrypoints all green |
Known limits
- This is an embeddable kernel, not a complete PLC IDE or a complete IEC 61131-3 platform.
- No PLCopen approval, Safety certification, SIL/PL claim, or official logo use is included.
- No stable ABI, no real-machine 72-hour evidence, and no long-term hardware validation are claimed here.
- H1 q/dq streaming is available, but
tau_ff/kp/kdconsumption and H3 output integration remain gated by T18; those data paths existing in the tree are not approval to consume them. - Cartesian Y7b2b remains a no-go; Cartesian ARC/chain/window and dynamic PCS/tracking stay separate contracts.
- EtherCAT product integration and real-bus handshakes remain separate F-track and hardware work and are not part of this source/header-only release.
- ConanCenter and vcpkg central registry publication remains fixed at the released
v0.20.0line;v0.21.0does not claim central registry assets yet.