finds.dev← search

// the find

netdata-be/libnodave

★ 322 · C · updated Sep 2020

LIBNODAVE, a free library to communicate to Siemens S7 PLCs

A C library for talking to Siemens S7 300/400 PLCs over MPI, PPI, ISO-TCP and S7online, with bindings for Perl, .NET, VB and Delphi bolted on. This is for industrial automation and SCADA developers who need to read/write PLC memory from outside Siemens' own tooling, not for general use.

It covers a genuinely wide range of connection methods (serial MPI/PPI, TCP/IP via CPs, USB adapters) and PLC families (S5, S7-200 through S7-400), which is rare in one codebase. The language bindings mean you're not stuck writing C to use it - there's a working .NET assembly and Perl XS module already built. It's been the de facto open alternative to Siemens' own S7 driver stack for over a decade, so the protocol quirks have had a lot of real-world PLCs to shake out bugs against.

The repo has compiled binaries - .exe, .dll, .so, .o, .ppu files - committed directly alongside source, which means you can't trust the build artifacts match the code and the history is bloated with junk. There's no single build system: four or five parallel Makefiles for different compiler/platform combos (MAKEFILE.WINE, makefile.vc, winmake.bat) with no indication which one is current or even still works. No commits since September 2020, no CI, and no tests - for a library that talks to physical industrial hardware, that's a real risk if Siemens changes anything on the PLC side. Documentation is static HTML pages from the Delphi component docs era, nothing on thread safety or error recovery when a PLC drops a connection mid-read.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →