Gestione plc con S7 NET Library parte uno.

Introduzione.

In questa serie di articoli, faremo uso di tecnologie che discostano un po’ da ciò che solitamente si vede, ossia applicativi web con asp net per esempio, o applicazioni di tipo gestionali, insomma, il classico sviluppo di applicazioni comuni. Entreremo in un mondo completamente differente, possiamo dire che in parte a che fare con l’internet of things, l’internet delle cose e in parte no. Parleremo di automazione industriale e gestione macchine utensili a plc e non. Vi chiederete: ma che cosa c’entra tutto ciò con lo sviluppo, con Microsoft e con Visual Studio ? In parte e vero e in parte no. Se e vero che parliamo di altri settori, e anche vero che possiamo tranquillamente con Visual Studio, creare interfacce e applicazioni che vanno ad interagire con una macchina utensile e/o un sistema di automazione, inizieremo con quali sono gli strumenti necessari per creare un sistema che andrà ad interagire con un plc Siemens. Proseguiremo creando un progetto con tecnologia WPF. Nel prossimo articolo, sarà creato il progetto con il TIAPORTAL V13, ed eseguiremo il testo dell’applicazione di esempio.

Strumenti necessari.

Di seguito, vediamo cosa occorre come strumenti e software per realizzare quanto descritto precedentemente. Cominciamo dalla parte Microsoft.

Questa e tutta la parte Microsoft. Veniamo ora alla parte Siemens.

  • Totally integated Automation (TIA Portal V13), sarebbe ne più ne meno, l’ide di sviluppo della Siemens con la quale dobbiamo creare tutto il programma plc. Su quest’ultimo si dovrebbe parlare tantissimo, ossia come va utilizzato, quali sono i principi per una buona logica plc, e come apprendere i linguaggi di sviluppo dedicati. Noi daremo qualche dritta necessaria alla creazione del progetto, ma invito per un buon apprendimento ad accedere al sito ufficiale, dove vi saranno tutte le informazioni necessarie per l’apprendimento.

A livello software, abbiamo tutto il necessario, vediamo cosa occorre avere a livello Hardware.

  • Per eseguire al meglio il progetto di esempio, l’ideale è avere come nel mio caso un plc, farò uso della cpu 1211C, parte della famiglia dei prodotti Siemens S71200.
  • Un alimentatore che fornisca una tensione di 24v dc e corrente erogabile di almeno 2 ampere.
  • Cavo patch di rete RJ45 (non incrociato)


Link per i prodotti Siemens.

Lascio brevemente i link necessari per i prodotti Siemens. Da questo link, è possibile scaricare la versione trial del TIAPORTAL V13, e per coloro che non anno un plc, possono scaricare gli emulatori di cpu della famiglia S71200, installarli così da poter eseguire l’emulazione della cpu senza avere necessariamente un plc fisico a casa. in fndo alla pagina troverete i file da scaricare e installare. Altra cosa, per chi non usa un plc fisico, e necessario installare NetToPlcSim, questo per emulare una connessione di rete tra plc e l’interfaccia che creeremo successivamente.


Creazione del progetto con Visual Studio.

Arrivati a questo punto, non ci resta che creare il progetto di esempio partendo da Visual Studio. Una volta scaricato e installato Visual Studio , lo avviamo e creiamo un progetto WPF intitolato S71200 TEST, come da immagine.

IMMAGINE 1

Immagine 1: creazione del progetto WPF.


Creato il progetto, non ci resta che aggiungere due button, una casella di testo e un controllo TextBlock. I button serviranno per impostare a true e false una variabile plc, ovvero un bit, che se vogliamo paragonarlo a net e C# si tratta di una variabile di tipo bool. La casella di testo, serve per immettere il valore che vogliamo impostare alla variabile plc, infine il controllo TextBlock, servirà per visualizzare il valore attuale/impostato della variabile plc. Copiamo nel nostro progetto il codice xaml seguente.


<Window x:Class=”S71200_TEST.MainWindow”
         xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
         xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
         xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″
         xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″
         xmlns:local=”clr-namespace:S71200_TEST”
         mc:Ignorable=”d”
         Title=”S71200 TEST” Height=”350″ Width=”525″>
     <Grid>
         <Grid.RowDefinitions>
             <RowDefinition Height=”20″/>           
             <RowDefinition Height=”Auto”/>
             <RowDefinition Height=”Auto”/>
             <RowDefinition Height=”*”/>
             <RowDefinition Height=”Auto”/>           
         </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
             <ColumnDefinition Width=”*”/>
             <ColumnDefinition Width=”*”/>
             <ColumnDefinition Width=”50″/>
             <ColumnDefinition Width=”Auto”/>
             <ColumnDefinition Width=”*”/>
             <ColumnDefinition Width=”*”/>           
         </Grid.ColumnDefinitions>

        <TextBlock Grid.Row=”1″ Grid.Column=”1″ x:Name=”tbkTipoVariabile” Text=”IMPOSTA BIT”/>
         <TextBox Grid.Row=”1″ Grid.Column=”2″ x:Name=”tbxImpostaVariabile”/>

        <TextBlock Grid.Row=”2″ Grid.Column=”1″ x:Name=”tbkValoreVariabile” Text=”VALORE ATTUALE”/>
         <TextBlock Grid.Row=”2″ Grid.Column=”2″ x:Name=”tbkValore”/>

        <Button Grid.Row=”4″ Grid.Column=”1″ x:Name=”btnSetBit” Content=”SET BIT” Click=”btnSetBit_Click”/>
         <Button Grid.Row=”4″ Grid.Column=”4″ x:Name=”btnRESetBit” Content=”SET BIT” Click=”btnRESetBit_Click”/>       
     </Grid>
</Window>

Dopo l’inserimento del codice, dovremmo avere l’interfaccia come da figura.

IMMAGINE 2

Immagine 2: creazione interfaccia del progetto WPF.


Come detto, si tratta di un semplice esempio, man mano che andiamo avanti, lo arricchiremo con tutte le funzionalità della libreria S7 NET, così da avere alla fine un progetto funzionale che possiamo poi in futuro ampliarlo ulteriormente secondo nostre esigenze. Andiamo ora ad aggiungere come detto mediante nuget, il riferimento alla libreria S7 NET. In esplora soluzioni, andiamo a selezionare la voce Riferimenti, tasto destro del mouse e selezioniamo:

  • Gestisci pacchetti Nuget.

Nella sezione sfoglia digitiamo S7NET, ed ecco che nuget toverà per noi l’estensione che abbiamo chiesto.


IMMAGINE 3

Immagine 3: Ricerca della libreria S7NET su nuget.


Una volata trovata la libreria, la installiamo facendo click con il mouse sul button Installa. Dopo l’istallazione, siamo ora pronti per implementare tutte le funzionalità all’interno del progetto di prova. Torniamo su Visual Studio 2015, e accediamo all’editor di codice C#. La prima cosa da fare, e includere nella classe MainWindow.cs il namespace  S7.NET, come da codice seguente.

/*NameSpace di terze parti*/
using S7.Net;

Eseguita l’importazione del namespace, possiamo scrivere il codice necessario. Come prima cosa, dobbiamo aprire la connessione al plc alla quale vogliamo collegarci, questo avviene creando una nuova istanza della classe S7NET.

        Plc _S71200 = new Plc(CpuType.S71200, “192.168.0.25”, 0, 1);


Il codice precedente, crea un nuovo oggetto S7NET, dove dobbiamo implementarne gli argomenti richiesti dal suo costruttore, ossia:

  • CpuType, la famiglia alla quale appartiene il plc, nel nostro caso si tratta di una cpu serie S71200.
  • L’indirizzo ip della cpu, vedremo come andare ad impostarlo nel successivo articolo, facendo uso del software TIAPORTAL V13 Siemens.
  • Il terzo parametro e il rack dove viene posta la cpu, di default e zero, anche perché nel nostro caso di singola stazione plc, il rack può essere uno solo.
  • Ultimo parametro la stazione di posizione del plc, da lasciare per S71200 a 1.

Ora che abbiamo creato l’oggetto di tipo S7NET, è necessario aprire la connessione Ethernet verso il plc, per fare ciò va implementato il metodo Open() come segue.

            _S71200.Open();

Queste sono le istruzioni di codice minime per poter comunicare con il plc S71200 e per qualsiasi altro che e supportato dalla libreria S7NET. Andiamo ora a scrivere il codice per il set/reset del bit. Abbiamo definito nell’interfaccia due button, il primo imposta a true e l’altro reimposta a false il tutto, una TextBox dove andremo a scrivere il valore da impostare, un TextBlock che visualizzerà lo stato del bit. Di seguito il codice C# completo.

using System.Windows;

/*NameSpace di terze parti*/
using S7.Net;

namespace S71200_TEST
{
     /// <summary>
     /// Logica di interazione per MainWindow.xaml
     /// </summary>
     public partial class MainWindow : Window
     {
         Plc _S71200 = new Plc(CpuType.S71200, “192.168.0.25”, 0, 1);

        public MainWindow()
         {
             InitializeComponent();
             /*Apro la comunicazione con il plc*/
             _S71200.Open();
         }

        private void btnSetBit_Click(object sender, RoutedEventArgs e)
         {
             /*Se il plc è connesso*/
             if (_S71200.IsConnected)
             {
                 /*Vado a leggere il valore del bit DBX0.0 sul blocco dati DB1*/
                 bool uscita = (bool)_S71200.Read(“DB1.DBX0.0”);

                /*Se il valore del bit e false*/
                 if (uscita.Equals(false))
                 {
                     /*Imposto a true il bit DBX0.0*/
                     _S71200.Write(“DB1.DBX0.0”, true);
                     /*Visualizzo lo stato attuale sull’interfaccia*/
                     tbkValore.Text = uscita.ToString();
                 }
             }
         }

        private void btnRESetBit_Click(object sender, RoutedEventArgs e)
         {
             /*Se il plc è connesso*/
             if (_S71200.IsConnected)
             {
                 /*Vado a leggere il valore del bit DBX0.0 sul blocco dati DB1*/
                 bool data1 = (bool)_S71200.Read(“DB1.DBX0.0”);

                /*Se il valore del bit e true*/
                 if (data1.Equals(true))
                 {
                     /*Imposto a false il bit DBX0.0*/
                     _S71200.Write(“DB1.DBX0.0”, false);
                     /*Visualizzo lo stato attuale sull’interfaccia*/
                     tbkValore.Text = data1.ToString();
                 }
             }
         }
     }
}


E buona norma, prima di eseguire qualunque operazione, verificare se il plc e connesso con la nostra interfaccia, onde evitare malfunzionamenti con conseguente crash dell’applicazione, perché in qualunque momento o per qualunque motivo può cadere la connessione ethernet.

Scritto il codice, tasto F5 per eseguire il debug del progetto, se tutto è stato scritto correttamente, questo e ciò che dobbiamo visualizzare.


IMMAGINE 4

Immagine 4: L’interfaccia durante il debug.


 Conclusione.

In questa prima parte, è stata fatta una breve introduzione su cosa e come creare un applicazione che possa tramite Visual Studio e la libreria S7NET interagire con un plc della famiglia S71200 Siemens, abbiamo creato una semplice interfaccia e implementato il codice C# in un progetto WPF. Nel prossimo articolo, vedremo come configurare il plc, come programmarlo per metterlo in condizioni di comunicare tramite la libreria S7NET con l’interfaccia creata con Visual Studio 2015.