Vai al contenuto

Rete di PLC distribuita con connessione Internet

Home Forum Controllori SlimLine e Netsyst (LogicLab) Rete di PLC distribuita con connessione Internet

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Autore
    Post
  • #62110
    Muncsan
    Partecipante

    Stiamo utilizzando un sistema composta di un HMI MT8050iE e 3 PLC SlimLine Mps053_XUnified_1_0 .

    Il primo PLC è collegato con cavo RS232, protocollo Modbus RTU, device default station no:1 e funziona perfettamente.

    Adesso vengono aggiunti gli altri 2 PLC, in campo, conessi in ethernet , IP statico e con gli appositi port fowarding eseguiti nel routers sono raggiungibili da IP pubblico.

    Questi PLC sono raggiungibili con il programma LogicLab, e il web server (System/Home.htm) è raggiungibile con qualsiasi browser via internet (non solo dalla rete locale).

    Per cortesia potete fornire uno esempio di progetto con gli appositi settaggi di connessione per il progetto e per un HMI conesso con piu PLC.

    #62114
    Sergio Bertana
    Amministratore del forum

    Quindi se ho ben capito hai un HMI connesso in RS232 ad un PLC ed adesso aggiungi altri 2 PLC connessi in ethernet allo stesso HMI il tutto raggiungibile da Internet attraverso il port forwarding sul router.

    Intanto se possibile collegherei anche il primo PLC in ethernet e quindi sul HMI dovrai configurare 3 dispositivi PLC con protocollo ELSIST MODBUS TCP/IP (Vedi screenshot). Ad ogni PLC dovrai impostare l’indirizzo IP del PLC a cui si connette.

    Nei tuoi oggetti grafici nelle varie pagine farai riferimento al PLC cui desideri l’oggetto si riferisca.

    Un’altra curiosità… perchè utilizzi il port forwarding e non utilizzi invece EasyAccess che ti permette di accedere ai dispositivi senza dover aprire porte sul tuo router e funziona anche su connessioni NATtate o senza IP pubblico. Inoltre gestisce la crittografia sulla connessione incapsulando i dati scambiati all’interno di una VPN.

    #62126
    Muncsan
    Partecipante

    Grazie per la risposta veloce, vorrei chiarire la mia domanda.

    Abbiamo uno unico HMI abbinato a un PLC locale, gli altri due sono geograficamente lontani, collegati ognuno con suo router ad internet.

    La domanda e se avendo questa architettura e possibile accedere da HMI al PLC di campo, e quali sono i settaggi da fare su HMI, sapendo che HMI e gli altri due PLC non sono nella stessa rete.

    Devo modificare anche il settagi dei PLC Modbus socket 0 in Node 2 (3 per il terzo PLC)?

    #62130
    Sergio Bertana
    Amministratore del forum

    Il primo requisito è che i due PLC geograficamente distribuiti siano raggiungibili tramite indirizzo IP. Quindi dovrai avere nei 2 siti una connessione Internet con IP pubblico e configurare il router per il port forwarding dalla porta pubblica verso la porta 502 del PLC.

    L’HMI dovrà potersi connettere ad Internet, quindi dovrai avere configurato correttamente il Gateway di rete. Il problema è che quando configuri il PLC all’interno dell’HMI puoi solo assegnare l’IP e non l’URL, quindi se le connessioni internet dei 2 PLC hanno un IP dinamico non potrai raggiungerli anche utilizzando un servizio come DynDNS.

    Il nodo Modbus dei vari PLC puoi lasciarlo ad 1 in tutti tanto raggiungerai ognuno di essi tramite una connessione TCP ed ognuno avrà indirizzo IP diverso dall’altro.

    Una considerazione, visto anche il problema dell’URL (Credo che le tue connessioni Internet ti daranno un IP pubblico ma sarà quasi certamente dinamico) perchè non creare una connessione tra i 3 sistemi SlimLine (In questo caso l’unico indirizzo IP pubblico sarà quello dello SlimLine connesso al pannello) mentre i 2 PLC remoti creeranno solo connessioni in uscita quindi funzionanti anche con IP NATtati e non dovrai aprire porte sul router. Dai una occhiata a questa nota.

    #62357
    Muncsan
    Partecipante

    Per primo vorrei ringraziare il vostro supporto.

    Ho pensato sopra di quello che lei mi sta dicendo dai problemi di sovrapassare dei reti nattati. In nostro caso no ce sono problemi, noi abbiamo ip fisso e publico sui tutti tre siti in discussione. Problema e che il PLC “master “, al quale e collegato l’HMI fa parte di una una  rete del ufficio del sindaco e non abbiamo il diritto di aprire porte o effettuare dei port forwarding.

    Invece gli altri due PLC di campo sono sotto nostro controllo, ed è l’unico dipositivo connesso al router, qui abbiamo tutta la libertà di gestire la communicazione. O scaricato il programma SWM757B100, ho cambiato il target (noi abbiamo  sistemi SlimLine ARM7, Code: MPS053B110 Nr: 650, Firmware: SFW184C020.

    Mi sono trovato con seguenti problemi:

    Copiando i files HTM in cartela system e provando testare la funzionalita, mi sono accorto che sono dei broken link in quei file htm che devono essere l’ineterfacia web  di questo programa utente. La causa puo essere il fatto che non e posibile copiare l”interra cartela Dexch, solo gli file contenuti.  Comme posso transferire l’intera cartella?

    Ho guardato solo superficialmente il  programma , ce una posibilita di trasferire una variablie dword, dal un sistema verso l’altro?

    C’è un metodo di controllo ciclico di verificare  certezza di collegamento in modo di prevenire  una partenza o il mantenimento di uno comando in assenza di connessione? (per il motivi di mancanza tensione , quasto del router, etc).

    #62358
    Muncsan
    Partecipante

    Lavorando sul problema ho provato trovare una soluzione al problema modificando i file home e setup cambiando il path in interno, da Dexch in System, cosi il file diventa funzionante senza broken link.

    Ho cancelato tutti i files dalla cartella system e ho caricato i file modificati.  Dal browser tutto pare funzionante, pero, quando  mi collego con LogicLab in modalita live debug vedo che i valori impostati in pagina htm setup non sono trasferiti in registri WPars.

    Ho visto che il parametro spy active e true in programma di essempio, potete fornirmi qualque sugerimento comme iniziare imparare anche questo metodo di debug.

    #62361
    Sergio Bertana
    Amministratore del forum

    Vediamo prima il problema degli IP, mi dici che il PLC master non ha la possibilità di essere esposto su internet, quindi l’unica soluzione è di usarlo come client quindi senza dover fare nessuna operazione sulle reti questo PLC può connettersi agli altri.

    In questo PLC dovrai istanziare tante istanze del FB TCPDataExchClient tanti quanti sono i PLC sul campo a cui dovrai connetterti. Per ogni istanza dovrai definire IP o URL del PLC server a cui ti connetterai.

    I vari PLC sul campo saranno tutti esposti su Internet e quindi raggiungibili, su ognuno di essi istanzierai il FB TCPDataExchServer, con la possibilità di accettare un’unica connessione.

    Ora il PLC client dell’ufficio del sindaco scambierà dati con i vari PLC server distribuiti sull’impianto e nel suo programma potrai eseguire scambio dati tra i vari PLC e fornire i dati al pannello HMI a lui connesso.

    In merito alle pagine HTM lascerei al momento perdere la questione, il programma SWM757 è un programma di esempio ed ha pagine web di configurazione per poterlo usare stand alone. Ma nel tuo progetto non ti serve configurare i FB di scambio dati da pagina web. Tu dovrai semplicemente utilizzare gli esempi  TCPDataExchServer e TCPDataExchClient che trovi nel manuale on-line.

    Il comando SpyOn che trovi nelle varie FB ti permette di verificare il funzionamento delle FB tramite la console di spionaggio.

    #62410
    Muncsan
    Partecipante

    Sono molto grato per il vostro suporto sempre veloce e preciso.

    Fino ad ora sono riuscito a fare communicare il PLC1 master (che è il client) con il PLC2 (che è il server) che esegue la misura di livello acqua nel  serbatoio in campo .  Dal PLC2 mi serve mandare anche lo stato degli ingressi fisici ma fino ad ora non sono riuscito. Ho uttilizato l’esempio ST_TCPDataExchServer modificato con l’aggiunta della acquisizione ingressi digitali.

    // -------------------------------------------------------------------------
    // DATA EXCHANGE SERVER
    // -------------------------------------------------------------------------
    // Manage data exchange server.
    
    TCPServer(Enable:=TRUE); //Manage the server
    
    // Eseguo lettura ingressi logici.
    
    DiAcq.Address:=255; //Module address
    DiAcq.Mode:=DI_8_LL; //Acquisition mode
    DiAcq(); //Digital input acquisition
    C2TxBuffer[1]:=TO_UINT(DiAcq.Value); //Digital input value

    Il compilatore non rileva errore, in Live debug se vede che il variabile C2TxBuffer non cambia suo valore.

    Devo riconoscere che  sono solo uno appassionato tecnico senza aprofondimenti in programazione. Sul PLC2 non interessa ricevere nulla, è importante invece avere controllo connesione attiva sul PLC1 verso PLC2.

    Come posso rilevare in programa utente i valori di CErrors e RxOk?

    #62458
    Sergio Bertana
    Amministratore del forum

    L’acquisizione degli ingressi è corretta, ma veniamo al succo… il PLC2 che è server nel tuo caso deve accettare la comunicazione solo dal PLC1 (Client) quindi modifica il programma nel modo.

    VAR
        C1RxBuffer : ARRAY[0..7] OF UINT; (* Rx buffer (Client 1) *)
        C1TxBuffer : ARRAY[0..7] OF UINT; (* Tx buffer (Client 1) *)
        TCPServer : TCPDataExchServer; (* TCP data exchange server *)
        DEDefs : TCPDEXCHNODEDEFS; (* Data exchange node definitions *)
        DiAcq : SysGetPhrDI; (* Digital input acquisition *)
    END_VAR
    
    // *****************************************************************************
    // PROGRAM "ST_TCPDataExchServer"
    // *****************************************************************************
    // The program instantiates a "TCPDataExchServer" FB. Up to 2 connections are
    // accepted.
    // -----------------------------------------------------------------------------
    
        // -------------------------------------------------------------------------
        // INITIALIZATION
        // -------------------------------------------------------------------------
        // Program initializations.
    
        IF (SysFirstLoop) THEN
    
            // Set the client definitions.
    
            DEDefs.NodeID:=1; //Node ID
            DEDefs.AutoTxD:=TRUE; //Automatic Tx data send
            DEDefs.RxBuffer:=ADR(C1RxBuffer); //Rx buffer address
            DEDefs.RxLength:=SIZEOF(C1RxBuffer); //Rx buffer length
            DEDefs.TxBuffer:=ADR(C1TxBuffer); //Tx buffer address
            DEDefs.TxLength:=SIZEOF(C1TxBuffer); //Tx buffer length
            DEDefs.TxHeartbeat:=10; //Tx heartbeat time (S)
    
            // Server configuration.
    
            TCPServer.SpyOn:=TRUE; //Spy command
            TCPServer.Port:=10000; //Peer port
            TCPServer.Connections:=1; //Accepted connections
            TCPServer.DEDefs:=ADR(DEDefs); //Data exchange definitions
        END_IF;
    
        // -------------------------------------------------------------------------
        // DATA EXCHANGE SERVER
        // -------------------------------------------------------------------------
        // Manage data exchange server.
    
        TCPServer(Enable:=TRUE); //Manage the server
    
        // Eseguo lettura ingressi logici.
    
        DiAcq.Address:=255; //Module address
        DiAcq.Mode:=DI_8_LL; //Acquisition mode
        DiAcq(); //Digital input acquisition
        C1TxBuffer[0]:=TO_UINT(DiAcq.Value); //Digital input value
    
    // [End of file]

    In live debug dovresti vedere che C1TxBuffer[0] cambia valore al variare dello stato degli ingressi. E se vai a vedere in live debug sul PLC1 la variabile RxBuffer vedrai che avrà lo stesso valore.

    Per usare le variabile che indicano lo stato di comunicazione basta rifersi a loro nel programma, esempio:

        Do00:=DEDefs.RxOk
        IF (DEDefs.CErrors > 100) THEN Do00:=TRUE; END_IF;

    Ma attenzione DEDefs.RxOk si attiva un solo loop di programma quando ricevo i dati, lo stato di comunicazione attiva è segnalato dalla DEDefs.Active che sara settata solo se i due PLC stanno comunicando.

    Aggiungo una nota, visto che il programma che devi realizzare è abbastanza complesso considera l’acquisto di qualche ora di supporto on-line (Vedi sito) così possiamo vederlo insieme con TeamViewer.

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Devi essere connesso per rispondere a questo topic.