Nell’era dell’automazione e dell’Industria 4.0, è sempre più importante integrare sistemi di controllo come i PLC (Programmable Logic Controller) con tecnologie web per sviluppare soluzioni IoT (Internet of Things) e applicazioni di monitoraggio e controllo in tempo reale. In questo post, esploreremo come realizzare un collegamento tra un PLC Siemens S7-1500 e un’applicazione JavaScript. Vi guideremo attraverso il processo passo dopo passo, con esempi di codice e spiegazioni dettagliate.

Preparare il PLC Siemens S7-1500

1.1 Configurazione hardware

Per iniziare, è necessario avere un PLC Siemens S7-1500 e il software di programmazione TIA Portal (Totally Integrated Automation) installato sul vostro computer. Assicuratevi che il PLC sia correttamente connesso alla rete e abbia un indirizzo IP assegnato.

1.2 Abilitare la comunicazione

Nel TIA Portal, aprire il progetto del PLC e navigare fino alla configurazione delle proprietà del PLC. Nella scheda “Protezione e sicurezza”, abilitare la comunicazione PUT/GET per consentire al PLC di comunicare con dispositivi esterni.

Creare un server Node.js

2.1 Installare Node.js e npm

Per creare un server Node.js, è necessario installare Node.js e npm (Node Package Manager) sul vostro computer. Visitare il sito ufficiale di Node.js (https://nodejs.org) per scaricare e installare la versione più recente.

2.2 Creare il progetto Node.js

Una volta installato Node.js e npm, creare una nuova cartella per il progetto e aprirla nel terminale. Inserire il comando seguente per inizializzare il progetto e creare il file package.json:

npm init -y

2.3 Installare i pacchetti necessari

Per comunicare con il PLC Siemens, è necessario utilizzare il pacchetto “node-snap7”. Installarlo con il comando:

npm install node-snap7

Collegare il PLC Siemens S7-1500 all’applicazione JavaScript

3.1 Creare il server Node.js

Creare un nuovo file chiamato “server.js” nella cartella del progetto e inserire il seguente codice:

const snap7 = require('node-snap7');
const plc = new snap7.S7Client();

const plcOptions = {
  host: '192.168.1.1', // Indirizzo IP del PLC
  port: 102,
  rack: 0,
  slot: 1
};

plc.ConnectTo(plcOptions.host, plcOptions.rack, plcOptions.slot, plcOptions.port, (err) => {
  if (err) {
    console.error('Errore di connessione: ', err);
  } else {
    console.log('Connesso al PLC!');
  }
});

Personalizzare l’indirizzo IP del PLC (host) nel file server.js. Avviare il server Node.js con il comando:

node server.js

Se il collegamento avviene con successo, verrà visualizzato il messaggio “Connesso al PLC!” nel terminale.

3.2 Lettura e scrittura dei dati del PLC Siemens

Ora che il server Node.js è connesso al PLC, possiamo leggere e scrivere dati dal PLC. Aggiungiamo le seguenti funzioni al nostro file “server.js”:

// Funzione per leggere un valore booleano da un'area di memoria del PLC (DB, I, Q, M)
function readBoolean(area, byte, bit, callback) {
  plc.DBRead(area, byte, 1, (err, data) => {
    if (err) {
      callback(err, null);
    } else {
      const value = data[0] & (1 << bit) ? true : false;
      callback(null, value);
    }
  });
}

// Funzione per scrivere un valore booleano in un'area di memoria del PLC (DB, I, Q, M)
function writeBoolean(area, byte, bit, value, callback) {
  plc.DBRead(area, byte, 1, (err, data) => {
    if (err) {
      callback(err);
    } else {
      if (value) {
        data[0] |= (1 << bit);
      } else {
        data[0] &= ~(1 << bit);
      }
      plc.DBWrite(area, byte, 1, data, (err) => {
        callback(err);
      });
    }
  });
}

Le funzioni readBoolean e writeBoolean consentono di leggere e scrivere valori booleani nelle aree di memoria del PLC. Per leggere e scrivere altri tipi di dati (come interi o reali), sarà necessario creare funzioni simili adattate ai tipi di dati desiderati.

3.3 Creare un’API RESTful

Per comunicare con l’applicazione JavaScript, creiamo un’API RESTful utilizzando il pacchetto “express”. Installarlo con il comando:

npm install express

Aggiungere il seguente codice al file “server.js” per creare un server HTTP e definire le rotte dell’API:

const express = require('express');
const app = express();
const httpPort = 3000;

app.use(express.json());

app.get('/api/plc/read/:area/:byte/:bit', (req, res) => {
  const area = parseInt(req.params.area);
  const byte = parseInt(req.params.byte);
  const bit = parseInt(req.params.bit);

  readBoolean(area, byte, bit, (err, value) => {
    if (err) {
      res.status(500).send({ error: err });
    } else {
      res.send({ value: value });
    }
  });
});

app.post('/api/plc/write/:area/:byte/:bit', (req, res) => {
  const area = parseInt(req.params.area);
  const byte = parseInt(req.params.byte);
  const bit = parseInt(req.params.bit);
  const value = req.body.value;

  writeBoolean(area, byte, bit, value, (err) => {
    if (err) {
      res.status(500).send({ error: err });
    } else {
      res.send({ success: true });
    }
  });
});

app.listen(httpPort, () => {
  console.log(`Server HTTP in ascolto sulla porta ${httpPort}`);
});

Avviare nuovamente il server Node.js con il comando:

node server.js

Ora il server HTTP è in ascolto sulla porta 3000 e offre due endpoint API: uno per leggere valori booleani dal PLC e uno per scrivere valori booleani nel PLC.

3.4 Creare l’applicazione JavaScript

Per interagire con l’API RESTful e il PLC, creiamo un’applicazione JavaScript lato client. Iniziamo creando un semplice file HTML chiamato “index.html” nella cartella del progetto:

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>PLC Siemens S7-1500 e JavaScript</title>
</head>
<body>
  <h1>PLC Siemens S7-1500 e JavaScript</h1>
  <button id="readButton">Leggi valore</button>
  <button id="writeButton">Scrivi valore</button>
  <p id="result"></p>
  <script src="app.js"></script>
</body>
</html>

Creare un nuovo file chiamato “app.js” nella cartella del progetto e inserire il seguente codice:

const readButton = document.getElementById('readButton');
const writeButton = document.getElementById('writeButton');
const result = document.getElementById('result');

readButton.addEventListener('click', () => {
  fetch('/api/plc/read/1/0/0')
    .then(response => response.json())
    .then(data => {
      result.innerText = `Valore letto: ${data.value}`;
    })
    .catch(error => {
      result.innerText = `Errore: ${error.message}`;
    });
});

writeButton.addEventListener('click', () => {
  fetch('/api/plc/write/1/0/0', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ value: true })
  })
    .then(response => response.json())
    .then(data => {
      result.innerText = `Scrittura riuscita: ${data.success}`;
    })
    .catch(error => {
      result.innerText = `Errore: ${error.message}`;
    });
});

L’applicazione JavaScript utilizza le API Fetch per comunicare con il server Node.js e il PLC. Quando si fa clic sul pulsante “Leggi valore”, viene letto il valore booleano dall’area di memoria 1, byte 0, bit 0 del PLC e visualizzato nel paragrafo “result”. Quando si fa clic sul pulsante “Scrivi valore”, viene scritto il valore booleano “true” nella stessa posizione di memoria del PLC.

3.5 Eseguire l’applicazione

Per eseguire l’applicazione, è necessario servire il file “index.html” tramite il server Node.js. Modificare il file “server.js” e aggiungere la seguente riga prima della chiamata a app.listen():

app.use(express.static('public'));

Creare una nuova cartella chiamata “public” nella cartella del progetto e spostare il file “index.html” e il file “app.js” all’interno di questa cartella.

Avviare nuovamente il server Node.js con il comando:

node server.js

Aprire un browser web e visitare “http://localhost:3000” per visualizzare l’applicazione. Ora è possibile utilizzare l’applicazione per leggere e scrivere valori booleani nel PLC Siemens S7-1500. Con le basi ora stabilite, è possibile espandere l’applicazione per supportare altri tipi di dati, creare un’interfaccia utente più avanzata e implementare funzionalità aggiuntive.

Conclusione

In questo post, abbiamo esplorato come collegare un PLC Siemens S7-1500 a un’applicazione JavaScript attraverso un server Node.js. Abbiamo illustrato come configurare il PLC, creare un server Node.js con un’API RESTful e sviluppare un’applicazione JavaScript lato client per interagire con il PLC. Questa guida dovrebbe servire come punto di partenza per integrare il controllo del PLC in applicazioni web e IoT, consentendo un monitoraggio e un controllo in tempo reale dei sistemi di automazione industriale.

Se hai trovato questo argomento interessante allora prova ad immaginare cosa potresti imparare dal Corso che avrai tra le mani fra pochi minuti.
Ma prima, passa di Qua >>>

Condividi ora questa guida con i tuoi contatti: