2.0.0 • Published 3 years ago
nodes7comm v2.0.0
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
- initiateConnection
- readTags
- writeTags
- addTranslationTags
- deleteTranslationTag
- addTags
- readAllTags
- removeTags
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 |