npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nodes7comm

v2.0.0

Published

Library to establish a connection with S7 PLC's

Downloads

6

Readme

nodes7comm

This library allows communication to S7-300/400/1200/1500 PLCs using the Siemens S7 Ethernet protocol.

This library is based entirely from nodeS7.

Get Started

  • First you need to enable GET/PUT Access. Right click on PLC -> Properties -> Protection and security -> Connections mechanisms -> Check GET/PUT Access.
  • For access to a DB you must disable Optimized Block Access in TIA Portal for that DB. Right click on DB -> Properties -> Attributes -> Uncheck Optimized Block Access.
  • More info: snap7

Installation

npm install nodes7comm

Methods

initiateConnecton


import { NodeS7Comm, Nodes7CommConfig } from 'nodes7comm';

const options: Nodes7CommConfig = {
    host: '192.168.1.200',
};

const s7Client = new NodeS7Comm(options);
s7Client.initiateConnection();

s7Client.on('error', (err) => {
	// Error events
});

s7Client.on('disconnected', () => {
	// When we are reading or writing and a timeout ocurred
});

s7Client.on('connected', () => {
	// When we connect to the PLC
});

s7Client.on('connect-timeout', () => {
	// When we are unable to establish a connection
});

Nodes7CommConfig: Interface

| propertie | type | required | default | description | |-|-|-|-|-| |host|string |true| | Address of the PLC| |port|number |false| 102 | Port to stablish connection| |rack|number |false| 0 | Rack of PLC | |slot|number |false| 1 | Slot of PLC | |connectionTimeout|number |false| 5000 | Timeout to establish a connection | |requestTimeout|number |false| 1500 | Timeout of each request | |localTSAP|number |false| | | |remoteTSAP|number |false| | | |connectionName|string |false| ${host} | | |optimize|boolean |false| true | Enable optimization of packages sent to PLC | |autoReconnect|boolean |false| true | Auto connect after disconnect | |logLevel| 'none' 'error' 'warn' 'info' | false | 'none' | Show logs in console|

readTags


// This function read values in given plc directions
s7Client.readTags('Q0.0').then((value) => {
	console.log(value); // { 'Q0.0': false }
});

s7Client.readTags(['DB100,REAL22', 'M0.0']).then((values) => {
	console.log(values); // { 'DB100,REAL22': 20.5, 'M0.0': false }
});

writeTags


// This function write values in given plc directions
s7Client.writeTags('Q0.0', false).then((newValues) => {
	console.log(newValues); // { 'Q0.0': false }
});

// Arrays must have same length
s7Client.writeTags(['DB100,REAL22', 'DB99,S0.50'], [32.3, 'Hello' ]).then((newValues) => {
	console.log(newValues); // { 'DB100,REAL22': 32.3, 'DB99,S0.50': 'Hello' }
});

addTranslationTags


// This function add a name to each directions, for better manage for your app

const tags = {
    analog: 'DB100,REAL22',
    name: 'DB99,S0.50',
    output: 'Q0.0',
};

s7Client.addTranslationTags(tags);

// Note that this time we are reading the keys of the above object
s7Client.readTags(['analog', 'name', 'output']).then((values) => {
	console.log(values); // { analog: 32.29999923706055, name: 'Hello', output: true }
});

const moreTags = {
    active: 'DB100,X0.0',
};

s7Client.addTranslationTags(moreTags);

// Apply on writeTags() too
s7Client.writeTags(['analog', 'active'], [50.5, true]).then((values) => {
    console.log(values); // { analog: 50.5, active: true }
});

deleteTranslationTag


// Delete a tag from translation object
s7Client.deleteTranslationTag('analog');

s7Client.readTags('analog').then((values) => {
    console.log(values);
}).catch(err => {
    console.log(err); // Failed to find a match for: analog
});

addTags


// We can save tags in the instance for read all stored tags
s7Client.addTags(['DB100,X0.0']);

const tags = {
    input: 'I0.0',
    tagBool: 'M6.4',
};
s7Client.addTranslationTags(tags); // If we want to store alias, we need first add these tags in the traslation

s7Client.addTags(Object.keys(tags)); // Array of tags

readAllTags


const tags = {
    input: 'I0.0',
    tagBool: 'M6.4',
};
s7Client.addTranslationTags(tags);

// Add he keys of the abject above
s7Client.addTags(Object.keys(tags));

s7Client.readAllTags().then((values) => {
    console.log(values); // { input: false, tagBool: false }
});

removeTags


// Remove tags from the instance
s7Client.removeTags('input');

s7Client.readAllTags().then((values) => {
    console.log(values); // { tagBool: false }
});

Supported address

| Operand identifier | Data type | Examples | |-|-|-| | Input (I) | Bool Byte Char Word Int DWord DInt Real LReal | I1.0 IB3 IC4 IW22 II24 ID26 ID140 IR1400 ILR1404 | | Output (Q) | Bool Byte Char Word Int DWord DInt Real LReal | Q0.2 QB2 QC4 QW20 QI22 QD24 QDI28 QR32 QLR36 | | Memory (M) | Bool Byte Char Word Int DWord DInt Real LReal | M2.2 MB0 MC2 MW220 MI28 MD40 MD100 MR2000 MLR2004 | | Data Block (DB) | Bool Byte Char Word Int DWord DInt Real LReal String | DB5,X2.2 DB6,B0 DB10,C2 DB10,W220 DB10,I28 DB12,D40 DB2,D100 DB100,R2 DB101,LR6 DB99,S0.50 |