![]() |
VOOZH | about |
dotnet add package ModelingEvolution.CanOpen --version 0.1.0
NuGet\Install-Package ModelingEvolution.CanOpen -Version 0.1.0
<PackageReference Include="ModelingEvolution.CanOpen" Version="0.1.0" />
<PackageVersion Include="ModelingEvolution.CanOpen" Version="0.1.0" />Directory.Packages.props
<PackageReference Include="ModelingEvolution.CanOpen" />Project file
paket add ModelingEvolution.CanOpen --version 0.1.0
#r "nuget: ModelingEvolution.CanOpen, 0.1.0"
#:package ModelingEvolution.CanOpen@0.1.0
#addin nuget:?package=ModelingEvolution.CanOpen&version=0.1.0Install as a Cake Addin
#tool nuget:?package=ModelingEvolution.CanOpen&version=0.1.0Install as a Cake Tool
Layer-1 CANopen protocol client over Linux SocketCAN — the CANopen analog of
ModelingEvolution.Modbus. Pure protocol: no device or vendor vocabulary. It is the foundation
for CANopen device adapters (e.g. the Fronius TPS 4000 welder — Epic 036).
Status: seeded from the bench-proven
FroniusCanbusintegration (validated against a real Beckhoff BK5120 + Fronius TPS 4000 on a Jetson reServer, 2026-06-02). Version0.1.0— preview.
Layer 0 SocketCANSharp raw CAN 2.0 frames (this package depends on it)
Layer 1 ModelingEvolution.CanOpen ← this package: NMT, SDO, PDO, object-dictionary addressing
Layer 2 ModelingEvolution.CanOpen.TaggedDevice (future) named-tag device
Layer 3 vendor adapters (e.g. FroniusWeldingMachine_TPS4000)
See docs/epics/cross-cutting/canopen-layers.md in the project-management repo.
CanInterface — SocketCAN bring-up (ip link bitrate + optional GPIO terminator), thread-safe
send, timed receive. Linux-only, requires root for bring-up.CanOpenClient — one background receive loop demultiplexing by COB-ID:
NmtStart(), NmtPreOperational(), Nmt(cmd)SdoUploadAsync / SdoDownloadAsync (+ sync SdoUpload)Observe<T>(ObjectAddress, onValue) routes via the device's PDO mapping
(read once from 0x1A00..0x1A03), or falls back to periodic SDO pollRx(cobId, dlc, period) returns a cyclic RxImage re-transmitted every period
(the watchdog feed); mutate bits/bytes, the client sends snapshotsBootupReceived, EmcyReceivedObjectAddress — (Index, Sub) object-dictionary address.Sdo — pure (de)serialization of expedited SDO frames (unit-testable, no I/O).PdoMap — decoded TxPDO mapping.using ModelingEvolution.CanOpen;
CanInterface.BringUp("can0", 500_000, terminatorGpio: "gpiochip2:8"); // host/root; skip if up already
using var bus = CanInterface.Open("can0");
using var co = new CanOpenClient(bus, nodeId: 5);
co.Start();
co.NmtStart(); // -> Operational
co.Observe<ushort>(new ObjectAddress(0x6401, 2), // welding current actual (TxPDO2)
raw => Console.WriteLine($"I = {raw / 65.535f:F0} A"));
var rx1 = co.Rx(CanOpenDefs.RxPdo(5, 1), dlc: 4, TimeSpan.FromMilliseconds(100)); // cyclic control
rx1.SetBit(0, 1, true); // Robot-ready (held; watchdog fed @100ms)
Linux only (SocketCAN). Validated on ARM64 (Jetson) and x64. Bring-up needs root (ip link,
gpioset); in containers prefer bringing can0 up on the host and only opening the socket here.
Per org convention: never publish locally. Push a branch → CI publishes a preview
(X.Y.Z-<branch>-<sha>); release.sh / a v* tag → CI publishes the stable release.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 1 NuGet packages that depend on ModelingEvolution.CanOpen:
| Package | Downloads |
|---|---|
|
ModelingEvolution.WeldingMachine.Fronius.CanOpen
Fronius TPS 4000 implementation of IWeldingMachine over CANopen (Beckhoff BK5120 robot interface), built on ModelingEvolution.CanOpen. Linux/SocketCAN only. |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 477 | 6/2/2026 |