omron-ethernet-ip
v0.0.2
Published
Node.js client for Omron NJ/NX series PLCs over EtherNet/IP (CIP symbolic tag messaging)
Downloads
292
Maintainers
Readme
omron-ethernet-ip
Node.js client for Omron NJ/NX series PLCs over EtherNet/IP using CIP symbolic tag messaging.
Existing Node.js EtherNet/IP libraries target Allen-Bradley controllers and do not handle Omron's CIP variant correctly. This library implements the Omron wire format directly, so tags can be read by name from an Omron NJ/NX PLC.
Status
Early development. Working today:
- TCP connection and EtherNet/IP session registration
- Reading scalar tags by name:
BOOL,SINT/INT/DINT/LINT,USINT/UINT/UDINT/ULINT,REAL,LREAL - Writing scalar tags by name (the CIP type is auto-discovered, or can be given)
- Reading and writing
STRINGtags - Reading a whole array in one request (BOOL bit-packed, and scalar element types)
- Listing all variables published on the PLC
- Importing a Sysmac Studio variable export into a FUXA device JSON
(
parseSysmacTags, and thetools/sysmac-to-fuxa.jsconverter) - Structure-member and array-element addressing in the request path
(e.g.
Recipe.Setpoint,Conveyor[3])
Not yet implemented: whole-structure decoding, per-tag type metadata.
Install
No runtime dependencies (uses the Node.js net module). Node.js >= 14.
npm install omron-ethernet-ipUsage
const { OmronEipClient } = require('omron-ethernet-ip');
(async () => {
const client = new OmronEipClient({ host: '192.168.250.1' });
await client.connect(); // TCP + RegisterSession
const r = await client.readTag('PV_Temper_ETC1');
console.log(`${r.name} = ${r.value} [${r.typeName}]`);
await client.writeTag('SET_Timer_V1', 30); // CIP type discovered automatically
client.close();
})();Try it
node examples/read-scalar.js <plc-ip> <tag-name>Run the offline checks
npm testThese verify the protocol byte encoding without a PLC. Interoperability with real hardware must be confirmed with the live example.
Notes
- The PLC must be reachable on TCP port
44818. - The variable must be published in the PLC's global variable table,
otherwise the controller returns CIP status
0x04(path segment error). - The EtherNet/IP wire format was cross-referenced with the Omron W506 manual,
the ODVA CIP specification, and the
aphytPython library (GPLv2) as a protocol reference. This is an independent implementation.
License
MIT
