Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 826 a 840 (di 4,272 totali)
  • Autore
    Post
  • in risposta a: Lettura Variabili “Time_Of_Day – TOD” da PLC Siemens ET200 SP #62844
    Sergio Bertana
    Amministratore del forum

    Purtropo non conosco i PLC Siemens, io naturalmente utilizzo PLC Elsist, e problemi come il tuo lo risolviamo ad esempio scrivendo direttamente un file CSV nel file system del PLC (Vedi StringToLogFile). Il file potrà poi essere acquisito in FTP (Il PLC ha un server FTP) oppure inviato direttamente dal PLC verso un server FTP remoto (Vedi FTPClient).

    Nel tuo caso perchè non utilizzi l’oggetto Data Sampling direttamente nel pannello, in questo modo puoi leggere i valori dalle variabili PLC e registrarli in un file storico sul pannello già con il relativo riferimento di tempo. Se cerchi nel forum “Data Sampling” troverai topic che trattano l’argomento con programmi di esempio.

    Oppure gestisci un orologio in EpochTime sul PLC e così dal pannello puoi acquisire il valore su di una variabile LWORD. Poi se ti serve data/ora dovrai fare una macro di conversione da EpochTime a data/ora.

    in risposta a: Connessione Modbus TCP con gateway lento nella risposta #62841
    Sergio Bertana
    Amministratore del forum

    Premesso che con delle latenze cosi elevate sulla connessione potrebbero innescarsi anche altri problemi…

    E’ possibile tentare di risolvere il problema agendo sui parametri di configurazione del Modbus TCP. Aumentare il timeout settandolo almeno a 15Sec ed impostando il ritardo di comunicazione ad almeno 10000mS (Screenshot).

    in risposta a: Erro PLC no response entre LOGO siemens e MT8071iE #62725
    Sergio Bertana
    Amministratore del forum

    Puoi verificare che l’access point utilizzato per la connessione WiFi non vada a modificare qualche impostazione di rete lato macchina.

    Eseguito il collegamentoi verificare le impostazioni di rete nel PLC e nel pannello per accertare che siano sulla stessa classe di rete.

    Verifica inoltre che non ci siano conflitti tra la classe di rete del PLC e pannello e la classe di rete della connessione WiFi.

    in risposta a: Eseguire Ping di un indirizzo IP per testare comunicazione #62721
    Sergio Bertana
    Amministratore del forum

    Con la nuova versione del firmware è stata aggiunta la possibilità di definire la lunghezza del pacchetto dati inviato nella richiesta ICMP di ping. Definendo dopo l’URL o l’indirizzo IP da pingare il parametro “-l” è possibile definire il numero di bytes di dati da inviare (Con MTU=1500 il numero massimo è 1472), ecco un esempio:

    [Admin]> ping www.google.com -l 16
    PING www.google.com [216.58.205.68] with 16 bytes of data:
    Answer from: www.google.com, Delay: 11.441 (mS)

    Se non viene definita la lunghezza il pacchetto dati è di 32 bytes come nella versione precedente del firmware. Quindi non riesco a spiegarmi il motivo del tuo problema, considerato che funziona sui server pubblici e non sui tuoi server interni.

    in risposta a: Visualizzare valore nel testo di un evento/allarme #62715
    Sergio Bertana
    Amministratore del forum

    Come riportato in questo topic, la visualizzazione del valore di variabili all’interno di un testo evento o allarme è possibile, si possono visualizzare fino a 8 variabili.

    Nel testo dell’evento/allarme definire il tag %(WATCHx)d, dove WATCHx con x da 1 a 8 indica la variabile da visualizzare ed indica la visualizzazione in decimale (Screenshot).

    Il link Sintax apre una finestra di aiuto che riporta il significato del carattere di impostazione formato di visualizzazione con alcuni esempi.

    in risposta a: Eseguire programma CPhrAccess da riga di comando #62682
    Sergio Bertana
    Amministratore del forum

    Il programma CPhrAccess è un semplice esempio di utilizzo della libreria libeS8CoreMng che dimostra come sia possibile gestire i moduli di espansione della famiglia SlimLine da un programma in linguaggio “C”.

    Il programma si trova nel PTP168 scaricandolo troverai oltre al programma indicato altri programmi in linguaggio “C” da utilizzarsi sullo SlimLine Raspberry.

    Il programma CPhrAccess\CPhrAccess\Release\CPhrAccess è l’eseguibile, per utilizzarlo lo devi trasferire in una cartella del sistema (Esempio /tmp) e dare i diritti di esecuzione.

    Non devi avere in esecuzione altri programmi che utilizzano il bus di estensione come ad esempio in run time di LogicLab, eventualmente arrestalo (Vedi articolo) e devi connettere un modulo di espansione con delle uscite digitali impostato con indirizzo 0.

    Eseguendo il programma si avrà l’uscita Do01 del modulo che lampeggia mentre sull’uscita Do00 verrà copiato lo stato dell’ingresso Di00 se il modulo ha anche degli ingressi digitali.

    in risposta a: Inverter per applicazioni di sollevamento #62645
    Sergio Bertana
    Amministratore del forum

    Ho girato la domanda direttamente al costruttore che mi informa che proprio per lo specifico settore del sollevamento hanno realizzato la versione -19 che è un aggiornamento firmware del GD350 base con funzioni specifiche per il sollevamento.

    Il GD350 si configura come equivalente dello Schneider ATV930, che è una macchina molto più sofisticata dei modelli richiesti ma visto l’impiego per il settore specifico del sollevamento per sostituire il modello ATV340 occorre utilizzare il modello GD350-19.

    Per tutti gli altri impieghi dove viene utilizzato lo Schneider ATV320 il fornitore mi conferma che è sostituibile con il modello GD20-EU.

     

    in risposta a: Backup (Scaricamento) programma pannello serie IE #62600
    Sergio Bertana
    Amministratore del forum

    La risposta stà già nella domanda…

    Avendo  flaggato “impedisci decompilazione” il progetto non si può decompilare.

    in risposta a: Router WL-R220L non rileva scheda SIM #62596
    Sergio Bertana
    Amministratore del forum

    Se abiliti la gestione dei codici di errore estesi con il comando

    chat -t 3 -e '' 'AT+CMEE=2' OK >> /dev/ttyUSB2 < /dev/ttyUSB2

    Avresti avuto come risposta un testo descrittivo dell’errore e non solo un codice, ma il messaggio sarebbe comunque stato +CME ERROR: SIM not inserted. Vediamo alcuni suggerimenti.

    • La SIM inserita in un telefono funziona correttamente?
    • Hai tolto il PIN, non è indispensabile ma per partire lo consiglio.
    • Il router ha 2 slot SIM, la SIM và inserita nello slot inferiore SIM1 quello piu vicino al circuito stampato.
    • Alcune SIM sono estremamente sottili, se vedi che inserendola nello slot non è ben ferma puoi attaccare del nastro adesivo per inspessirla.

    Spero che questi suggerimenti ti aiutino a superare il problema. In ogni caso se il router lo hai acquistato da noi puoi aprire un RMA per riparazione.

    in risposta a: Indicazioni su errore comando Syslog e file di Log #62486
    Sergio Bertana
    Amministratore del forum

    L’elenco errori lo stiamo piano piano compilando, prima gli errori erano riportati nelle varie pagine del manuale. Come spirgato nella tabella degli errori, il codice di errore è composto come segue:

    Ultime 3 cifre: numero di errore
    Rimanenti cifre: ObjectID

    In questo modo con un codice di errore sapremo esattamente da quale oggetto è stato generato ad esempio:

    10050302 = 10050 (ObjectID) 302 (Numero errore). L’elenco completo degli oggetti è disponibile QUI. Come vedi l’errore 9905xxx si riferisce alla funzione SysVsnprintf. e nella sua pagina di manuale c’è l’elenco degli errori. O meglio c’era perchè ora ho inserito gli errori nella tabella e li ho rimossi dalla pagina.

    Comunque come vedi dalla tabella errori la dimensione della stringa risultato definita in Size non è abbastanza grande per contenere il risultato della fuznzione.

    in risposta a: Accesso da HMI a memoria ritentiva su SlimLine #62477
    Sergio Bertana
    Amministratore del forum

    Per gestire variabili BOOL con protocollo Modbus si utilizza il comando 0x, con il protocollo ELSIST utilizzi comando %MX. Per accedere ad una variabile allocata nella DB100.16, andrà definito indirizzo 40016.

    Per tutti gli altri tipi di variabili con protocollo Modbus si utilizza il comando 3x, con il protocollo ELSIST utilizzi comando %MW. Per accedere ad una variabile allocata nella DB100.16, andrà definito indirizzo 40008 gli indirizzi di allocazione delle variabili WORD devono essere divisi per 2 e poi sommati a 40000.

    Quindi credo sia questo il tuo problema, quando mi dici che vuoi indirizzare la variabile allocata a DB100.2048 devi usare l’indirizzo 41024. Ti consiglio la lettura di questo topic che ha anche dei programmi di esempio.

    in risposta a: Protezione con credenziali di accesso su pagine #62474
    Sergio Bertana
    Amministratore del forum

    Prima di eseguire il download del progetto rimuovi la spunta in Parametri di sistema->Sicurezza in modo da scaricare utenti e password di progetto (Vedi screenshot).

    in risposta a: Una soluzione per l’invio di SMS multipli #62471
    Sergio Bertana
    Amministratore del forum

    Basta scaricare il programma MultipleSMS_v1 che trovi un paio di post prima di questo…

    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.

Stai visualizzando 15 post - dal 826 a 840 (di 4,272 totali)