Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 946 a 960 (di 4,379 totali)
  • Autore
    Post
  • in risposta a: Connessione di 2 pannelli in MPI con PLC Siemens #62465
    Sergio Bertana
    Amministratore del forum

    Il modello cMT2008X non supporta il protocollo MPI, mentre è supportato dalle serie iE. Puoi verificare tu stesso le varie funzionalità delle diverse serie di pannelli consultando l’appendice A.

    Puoi collegare i 2 pannelli Weintek al plc S7 300 in MPI, la porta MPI è una RS485 quindi puoi parallelare i pin.

    PLC       HMI1       HMI2
    3 -------- 2 -------- 2
    8 -------- 1 -------- 1
    5 -------- 5 -------- 5

    Nella guida connessione PLC troverai tutte le informazioni.

    Aggiungo che purtroppo a differenza di altri protocolli la simulazione OnLine non funziona con il protocollo Siemens MPI neanche utilizzando l’adattore (Vedi topic), quindi il progetto và testato direttamente sul pannello operatore.

    in risposta a: Rete di PLC distribuita con connessione Internet #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.

    in risposta a: Utilizzare FB HttpClient per connessione in HTTPS #62372
    Sergio Bertana
    Amministratore del forum

    No, ci siamo dimenticati di aggiornare la versione pubblicata, ho provveduto a farlo adesso troverai la nuova versione Libreria HTTP eLLabHTTPLib v3.6.10.

    in risposta a: Conversione da DWORD a REAL con lo standard IEEE-754 #62367
    Sergio Bertana
    Amministratore del forum

    Si è corretto ecco un semplice esempio in LogicLab che ti illustra il problema.

    VAR
        i : UDINT; (* Auxiliary variable *)
        DArray : ARRAY[0..1] OF WORD;
        RVar : REAL; (* REAL variable *)
    END_VAR
    
        // Esempio in little endian.
    
        DArray[0]:=16#51EB;
        DArray[1]:=16#417C;
        i:=Sysmemmove(ADR(RVar), ADR(DArray[0]), 4);
    
        // Esempio in big endian.
    
        DArray[0]:=16#417C;
        DArray[1]:=16#51EB;
        i:=VarSwap(WORD_TYPE, ADR(DArray[0]), ADR(RVar));

    Come vedi nel caso di little endian ho solo copiato il valore ma potevo anche farlo scrivere direttemente da Modbus nella variabili RVar. Mentre nel caso del big endian ho dovuto utilizzare la funzione VarSwap.

    in risposta a: Rete di PLC distribuita con connessione Internet #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.

    in risposta a: Comunicazione Modbus tra due sistemi SlimLine #62356
    Sergio Bertana
    Amministratore del forum

    Nel forum ci sono sicuramente moltissimi esempi di scambio dati tra due o più sistemi SlimLine, ma visto che tu hai necessità di dialogare in seriale non puoi utilizzare la libreria eLLabDataExchLib di scambio dati via TCP/IP ma devi utilizzare il FB ModbusMaster.

    Il modo più semplice è realizzare un programma PLCMdbMaster che istanziando 2 blocchi funzione ModbusMaster esegue la lettura e la scrittura di blocchi di memoria sul PLC slave. Nell’esempio che ti allego per il download (Ecco lo screenshot) ho allocato i dati in scambio in due strutture dati, basterà che definisci nelle strutture i dati che devi scambiare.

    Nell’esempio troverai anche un programma FBD che gestisce lo scambio via ModbusTCP, e come vedi si connette con l’indirizzo 127.0.0.1 (localhost) in pratica comunica con se stesso. Può essere utile per fare delle prove.

    Dalla parte slave non devi fare nulla perchè utilizzi il Modbus gestito dal sistema operativo, dovrai solo allocare le due strutture dati della DB100 che è l’unica raggiungibile da Modbus.

    E’ inutile dire che le due strutture dati MASTER_TO_SLAVE e SLAVE_TO_MASTER devono essere identiche nei due programmi (PLC Master e PLC Slave).

    in risposta a: Eseguire l’interpolazione di una curva #62353
    Sergio Bertana
    Amministratore del forum

    Non mi viene in mente nulla di simile.

    in risposta a: Problema scrittura punti Bacnet in Override #62350
    Sergio Bertana
    Amministratore del forum

    Purtroppo non sono un esperto di protocollo BACnet, di certo ti posso dire che sulle variabili booleane non c’è la possibilità di scrivere in modalità Relinquish.

    Ti allego estratto del manuale Weintek che tratta il protocollo BACnet anche se credo tu lo abbia già letto.

    in risposta a: WL-R210, utilizzo delle 2 porte Ethernet in modalità switch #62347
    Sergio Bertana
    Amministratore del forum

    Il router WL-R210 come tutti i router basati su firmware Tomato (Tra quelli da noi distribuiti il WL-R200), ha 2 porte ethernet indicate come LAN e WAN/CON, è possibile utilizzarle entrambe come porte ethernet in switch.

    In pratica i dispositivi connessi alle due porte si “vedono” tra di loro e possono utilizzare il modem LTE per connettersi ad Internet.

    Allego un estratto del manuale How to utilizzato internamente dai ns tecnici che descrive la configurazione.

    in risposta a: Utilizzo di pulsanti menu in Common Window #62182
    Sergio Bertana
    Amministratore del forum

    Il mio suggerimento precedente era secondo me la soluzione più semplice ma se tu vuoi avere uno switch che cambia colore oppure cambia disegno in base al valore di una word puoi usare il Multi-State Switch.

    in risposta a: Eseguire l’interpolazione di una curva #62180
    Sergio Bertana
    Amministratore del forum

    Non sò se ho capito bene il tuo problema…

    Mi sembra che ti possa venire in aiuto la funzione Linearize, definendo come parametri le varie posizioni relative ai vari tempi.

    in risposta a: ModBusMaster SlimLine e Logo 8 slave #62175
    Sergio Bertana
    Amministratore del forum

    Bravo ad avere utilizzato la console di spionaggio che permette di avere una visione completa del funzionamento. Ricordo che per una spiegazione degli errori occorre riferirsi a questa pagina. Oppure più semplicemente aprire il browser sull’indirizzo IP dello SlimLine e nella pagina di Logs troverete accanto ai vari errori il link diretto alla pagina di visualizzazione.

    Il tuo errore indica che non si riesce ad inviare il frame di interrogazione Modbus sullo stream di comunicazione, probabilmente non era aperta la comunicazione con il Logo.

    in risposta a: Comunicazione modbus tra SlimLine e Inverter #62167
    Sergio Bertana
    Amministratore del forum

    Non so che versione della libreria tu abbia, ma se scarichi dal sito l’ultima versione trovi sicuramente il FB di gestione Modbus master.

    Ora si chiama ModbusMaster_v1, chi ha dimestichezza con le nostre librerie conosce che ogni volta che in un oggetto di libreria (Funzione o FB) vengono modificati i parametri di I/O viene cambiato anche il nome dell’oggetto aggiungendo una versione, come in questo caso “_v1“.

    Se in un vecchio progetto si è utilizzato un oggetto precedente esempio ModbuMaster è possibile recuperarlo dalla libreria eLLabObsoleteLib.

    Inutile dire che in caso di revisione di un vecchio progetto converrebbe comunque utilizzare sempre le ultime versioni disponibili.

    in risposta a: Comunicazione Modbus con più dispositivi #62163
    Sergio Bertana
    Amministratore del forum

    Direi che dalle domande mi sembra che hai le idee molto chiare. Vediamo i vari punti.

    1. Puoi utilizzare un unico FB SysTCPClient modificando di volta in volta l’indirizzo IP a cui connettersi, in questo modo risparmi memoria dati ma certo hai un tempo di connessione al dispositivo. Questa soluzione è obbligatoria se dovessi comunicare con molti dispositivi ma avendo solo 2 dispostivi puoi anche istanziare 2 FB client.
    2. Si il Done si attiva al termine della esecuzione del comando ed è da utilizzare per passare ad un eventuale comando successivo. E’ l’uscita Ok ad indicare che la comunicazione ha avuto esito positivo.
    3. Si direi proprio che la soluzione migliore è realizzare una macchina a stati utilizzando l’operatore CASE e passare di stato in stato sull’uscita di Done attiva. Nel passaggio tra i vari stati se usi un solo client dovrai anche modificare l’indirizzo IP a cui connetterti.
    in risposta a: Blocco casuale visualizzazione su pannello #62151
    Sergio Bertana
    Amministratore del forum

    Ho visto dal tuo progetto che hai inserito un certo numero di trasferimenti ciclici (Screenshot).

    La funzione di trasferimento ciclico và usata con parsimonia, il pannello la esegue con la stessa priorità della grafica, quindi se è molto pesante (O se il dialogo con il PLC è lento) ti porta ad un rallentamento significativo delle prestazioni grafiche.

    Il alternativa al data transfer ti consiglio di inserire i trasferimenti in una macro eseguita a tempo, la macro ha una priorità di esecuzione inferiore alla grafica, quindi non avrai rallentamenti sulla gestione grafica. Ecco un esempio di macro:

    macro_command main()
    short Var //Variabile di appoggio
    
    // Ripetere queste due funzioni per ogni trasferimento.
    
    GetData(Var, "PLC2_Siemens S7-1200", "MArea-AUT_CMD_BR2", 1)
    SetData(Var, "PLC3_Siemens S7-1200", "DB14_HMI2(forno2)_to_PLC3[DB14]-Reg_Ciclo_Generale_PLC2", 1)
    
    end macro_command

    Come vedi ho eseguito il trasferimento da un PLC all’altro, ma puoi anche trasferire da PLC a HMI e viceversa. Naturalmente devi ripetere la coppia GetData, SetData per ogni variabile. Per diminuire il numero di istruzioni puoi raggruppare le variabili in posizioni consecutive così con un unica coppia di istruzioni puoi trasferire molte variabili.

Stai visualizzando 15 post - dal 946 a 960 (di 4,379 totali)