Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 1,561 a 1,575 (di 4,381 totali)
  • Autore
    Post
  • in risposta a: Realizzare DataLogger con storicizzazione su server FTP #50075
    Sergio Bertana
    Amministratore del forum

    Hai impostato correttamente il Gateway ?

    Ricordo che il router che in questo caso fa da gateway deve essere mappato nella stessa classe di indirizzi dello SlimLine.

    in risposta a: Sincronizzazione con server NTP #49998
    Sergio Bertana
    Amministratore del forum

    Rispondo con ritardo perchè il post era finito in SPAM, ma la domanda può essere utile ad altri.

    9943135 Errore risoluzione indirizzo, indice che il client UDP non riesce a risolvere l’indirizzo IP a cui connettersi. In effetti da quello che scrivi sembra tu passi l’URL del server, ma sui sistemi ARM come l’MPS046 il sistema operativo non ha la gestione del DNS e non può risolvere gli URLs.

    La gestione del server DNS è stata introdotta sui sistemi CortexM7, sui sistemi ARM occorre passare l’indirizzo IP, eventualmente è possibile da programma utilizzare il FB DNSRequest per eseguire la richiesta al server DNS di risoluzione URL e poi passare al FB SNTPRequest l’indirizzo IP ritornato.

    in risposta a: Scambio I/O su connessione WiFi locale #49993
    Sergio Bertana
    Amministratore del forum

    La nostra applicazione DataExchange fà al caso tuo, utilizzando due moduli CPU SlimLine Compact Ethernet che hanno 6 ingressi digitali, 2 ingressi analogici e 4 uscite digitali cadauno tu puoi scambiare su connessione ethernet gli I/O tra un sistema e l’altro.

    Nel tuo caso collegherai la porta ethernet alla tua rete WiFi ed i due sistemi dialogheranno tramite la connessione WiFi. Per quanto riguarda la temporizzazione nessun problema i sistemi SlimLine sono programmabili e puoi fare tutte le temporizzazioni che desideri.

    in risposta a: Netlog III utilizzo display incorporato #49987
    Sergio Bertana
    Amministratore del forum

    La gestione integrata del display purtruppo ha regole definite che non sono modificabili, quindi per passare da una variabile all’altra di un messaggio si utilizza il tasto [F] eseguita l’inputazione del valore ed accettata con il tasto [E] si riparte della prima variabile.

    Ma se tu definisci un messaggio con due variabili stringa da 16 caratteri (Esempio RowUp e RowDw) e poi da programma le gestisci puoi fare quello che vuoi. Ti ho postato un esempio dove realizzi quello che chiedi, tralasciando le inizializzazioni che trovi nel progetto (Download NetlogCustomMsg), ecco il “succo” del programma.

        // -------------------------------------------------------------------------
        // GESTIONE MESSAGGIO 
        // -------------------------------------------------------------------------
        // Se sono nel messaggio #2 gestisco direttamente il display.
    
        IF (Messages.MsgID = 2) THEN
            i:=SysVarsnprintf(ADR(RowUp), SIZEOF(RowUp), '%s', STRING_TYPE, ADR('0-1-2-3-4-5-6-7 '));
            i:=SysVarsnprintf(ADR(RowDw), SIZEOF(RowDw), '%s', STRING_TYPE, ADR('0 0 0 0 0 0 0 0 '));
    
            // Stampo valore variabile.
    
            FOR i:=0 TO 7 DO
                Ptr:=VAdd[i]; //Auxiliary pointer
                IF (@Ptr <> 0) THEN Ptr:=ADR(RowDw)+(i*2); @Ptr:=16#31; END_IF;
            END_FOR;
    
               // Il messaggio non ha sottomessaggi quindi i tasti [<] e [>] non sono
               // gestiti. Sulla loro pressione seleziono la variabile da modificare
               // e la visualizzo rendendola lampeggiante.
    
            IF (Display.KeyLEFT <> KeyLEFT) THEN
                KeyLEFT:=Display.KeyLEFT; //Tasto [<]
                IF (Display.KeyLEFT AND (VNr > 0)) THEN VNr:=VNr-1; END_IF;
            END_IF;
    
            IF (Display.KeyRIGHT <> KeyRIGHT) THEN
                KeyRIGHT:=Display.KeyRIGHT; //Tasto [>]
                IF (Display.KeyRIGHT AND (VNr < 7)) THEN VNr:=VNr+1; END_IF;
            END_IF;
    
            // Eseguo lampeggio variabile selezionata.
    
            IF (SysClock1000) THEN Ptr:=ADR(RowDw)+(VNr*2); @Ptr:=16#20; END_IF;
    
            // Con il tasto [E] eseguo variazione variabile.
    
            IF (Display.KeyENT <> KeyENT) THEN
                KeyENT:=Display.KeyENT; //Tasto [E]
    
                Ptr:=VAdd[VNr]; //Auxiliary pointer
                IF (Display.KeyENT) THEN @Ptr:=@Ptr XOR 16#01; END_IF;
            END_IF;
        END_IF;
    
    in risposta a: Come inviare dati al portale Beebotte #49976
    Sergio Bertana
    Amministratore del forum

    L’esempio è nel programma che trovi sul manuale della FB MQTTBeebotte, in pratica ammettendo di dover pubblicare 8 variabili avremo.

        // Dichiarazione array di 8 pubblicazioni.
    
        TPublish : ARRAY[ 0..7 ] OF TPBeebotte; (* Topic publish *)
    
        // Definizione per ogni pubblicazione della variabile da pubblicare.
        // Viene definito il canale e la risorsa "Channel/Resource"
        // Il tipo e l'indirizzo della variabile il cui valore và pubblicato.
    
        TPublish[0](Resource:=ADR('Channel/Resource1'), DType:=REAL_TYPE, DBuffer:=ADR(Var1), DBLength:=0);
        TPublish[1](Resource:=ADR('Channel/Resource2'), DType:=BOOL_TYPE, DBuffer:=ADR(Var2), DBLength:=0);
        ...
        TPublish[7](Resource:=ADR('Channel/Resource7'), DType:=UINT_TYPE, DBuffer:=ADR(Var7), DBLength:=0);
    
        // Eseguo pubblicazione ogni 5 secondi.
    
        IF ((SysGetSysTime(TRUE)-TimeBf) > 5000000) THEN
            TimeBf:=SysGetSysTime(TRUE)-TimeBf); //Time buffer (uS)
            FOR i:=0 TO 7 DO TPublish[i].Publish:=TRUE; END_FOR;
        END_IF;

    Naturalmente la definizione dell’array và definita nella zona delle dichiarazioni, l’inizializzazione si può fare al primo loop ed il resto nel main. Ma se segui quanto riportato nel manuale credo sia tutto chiaro.

    in risposta a: Accesso alle tags con TIA15.1 #49906
    Sergio Bertana
    Amministratore del forum

    Per l’import delle TAGS dal TIA 15.1 al momento occorre rinominare il file xxx.ap15_1 in xxxx.ap15 ed importare il file di tag in EasyBuilder Pro. Terminata l’importazione può risistemare l’estensione per aprirlo con il TIA portal.

    Weintek stà lavorando per risolvere il problema, appena possibile rilascerà una nuova versione di EasyBuilder Pro.

    in risposta a: Realizzare DataLogger con storicizzazione su server FTP #49792
    Sergio Bertana
    Amministratore del forum

    Il FB FTPClient se ha Connect=TRUE cerca di connettersi al server FTP, se non ci riesce (Come nel tuo caso che hai staccato il cavo) dopo il tempo di timeout genera errore 10063050 disabilita la connessione e la riabilita ritentando di connettersi.

    Se non c’è connessione è inutile passare a cases successivi, quindi il programma non passa volutamente al case 20 ma continua ad aspettare di completare la connessione. Se tu riattacchi il cavo il tutto dovrebbe ripartire.

    Certo in questa condizione essendo fermo nel case 11 continuerei ad avere il file di log locale bloccato ed i records di log andrebbero a saturare il FIFO. Ma se non si riesce a connettersi al server FTP non c’è molto altro da fare.

    Nel tuo caso avendo tolto il controllo su Store salti al case 20 temporizzi poi riprovi e dopo 3 tentativi riprendi a salvare nel file di log locale riprovando ad inviarlo alla prossima scadenza. Può essere una soluzione per problemi di connessione che durano molto tempo. Ma se il cavo di rete si stacca continuerai a salvare nello stesso file di log saturandolo. Nel caso prevedere un qualche avviso magari con lampade di segnalazione o altro.

    in risposta a: Realizzare DataLogger con storicizzazione su server FTP #49786
    Sergio Bertana
    Amministratore del forum

    Il programma utilizza il FB FIFO per gestire il logging, in questo modo il record di log viene salvato nel file di FIFO e poi se il file di log è libero viene trasferito nel file di log (Case 0), questo permette di non perdere records quando il file di log è occupato dal trasferimento in FTP.

    Quando viene comandato il trasferimento del file di log sul server (Case 10) iniziano le sequenze di connessione che potrebbero andare in errore, in tal caso si attiverebbe l’uscita Fault che porta l’esecuzione sul Case 20.

    In caso di errore viene incrementato il numero di errori ed atteso un tempo prima di ritentare l’invio.

    Quindi si certo il programma rimane bloccato nel Case 11 fino alla avvenuta connessione con il server ma se non riesce a connettersi dopo il tempo definito nel parametro Timeout (Vedi FTPClient_v1) si attiva l’uscita Fault. Stesso discorso per il Case 12 dove viene atteso il completo trasferimento del file.

    in risposta a: Come inviare dati al portale Beebotte #49632
    Sergio Bertana
    Amministratore del forum

    Se fai riferimento al manuale della FB MQTTBeebotte, vedrai che ho allocato un array di FB TPBeebotte, ed ad ogni attivazione del bit di Publish della FB viene inviato il dato indirizzato dal parametrio Resource alla piattaforma Beebotte.

    Quindi nel tuo caso puoi definire un array di 16 FB TPBeebotte, ed abbinare ad ognuna la variabile REAL e BOOL che devoi inviare al servizio, alla attivazione del comando di Publish di ognuna la relativa variabile sarà inviata. Puoi anche attivare contemporaneamente tutti e 8 i bit di comando, l’invio verrà poi automaticamente gestito dalla FB.

    in risposta a: Connessione a FileZilla server con FTPClient #49611
    Sergio Bertana
    Amministratore del forum

    Il FB FTPClient_v1 si connette sempre in modalità passiva, invia il comando PASV al server per chiedere la porta a cui connettersi per i dati. Il server risponde indicando la porta che verrà utilizzata, il client si connette alla porta indicata.

    In questa configurazione è evidente che essendo il server dietro ad un NAT occorre provvedere al forwarding della porta. Esendo però la porta scelta arbitrariamente dal server occorre impostare nel server il range di porte da utilizzare ed eseguire il forward su tutte.

    Su FileZilla nel menù Passive mode settings spuntare Use custom port range e specificare un intervallo di porte a piacere, maggiori di 1024. Se ad esempio impostiamo un range da 2121 a 2122, dovremo configurare anche il forwarding di queste porte.

    Il FileZilla client probabilmente tenta una connessione in passive mode e poi non riuscendo a connettersi probabilmente cambierà la connessione in active mode.

    in risposta a: Comunicazione con PLC Schneider modello TM221 #49595
    Sergio Bertana
    Amministratore del forum

    I PLC  Schneider serie TM utilizzano SoMachine come tool di programmazione che è a base Codesys. Weintek ha il driver Schneider SoMachine M Series che è sviluppato appositamente per questa serie di PLC.

    in risposta a: Realizzare una FB per lettura cella da file CSV #49585
    Sergio Bertana
    Amministratore del forum

    Tutto chiaro…
    Il simulatore su PC non gestisce l’acceso al file system. Per eseguire la scrittura su file occorre disporre fisicamente del PLC.

    in risposta a: Aggiornare Data/Ora da comando Modbus #49558
    Sergio Bertana
    Amministratore del forum

    Ti allego questo semplice programma ST da eseguire in task Back.

    VAR
        MDBDateTime AT %MX100.16 : UDINT; (* Date/Time in Epoch *)
        AuxDateTime : UDINT; (* Aiuxiliary Date/Time in Epoch *)
    END_VAR
    
    // *****************************************************************************
    // PROGRAM "ST"
    // *****************************************************************************
    // Per poter aggiornare l'RTC da Modbus ho allocato la variabile "MDBDateTime"
    // di tipo UDINT nella DB 100.16 (Cambiare in base alle proprie esigenze) in
    // modo che sia accessibile da modbus all'indirizzo 40008. Scrivendo da Modbus
    // un nuovo valore in Epoch time nella variabile viene aggiornato l'RTC.
    // -----------------------------------------------------------------------------
    
        // -------------------------------------------------------------------------
        // CONTROLLO VARIABILE
        // -------------------------------------------------------------------------
        // Inizializzo valore al primo loop.
        
        IF (SysFirstLoop) THEN
            MDBDateTime:=SysDateTime; //Date/Time in Epoch
            AuxDateTime:=SysDateTime; //Aiuxiliary Date/Time in Epoch
        END_IF;
    
        // Controllo se valore cvariabile è stato modificato da Modbus.
        // Scrivendo il nuovo valore in "SysDateTime" si aggiorna l'RTC.
    
        IF (MDBDateTime <> AuxDateTime) THEN
            SysDateTime:=MDBDateTime; //Date/Time in Epoch
            AuxDateTime:=MDBDateTime; //Aiuxiliary Date/Time in Epoch
        END_IF;
    
        // Ricopio valore in variabile Modbus per aggiornarla.
    
        MDBDateTime:=SysDateTime; //Date/Time in Epoch
        AuxDateTime:=SysDateTime; //Aiuxiliary Date/Time in Epoch
    
    // [End of file]
    in risposta a: Come eseguire un factory reset dello SlimLine #49555
    Sergio Bertana
    Amministratore del forum

    Aggiungo che per riportare il sistema alla configurazione di fabbrica oltre ad effettuare il comando CfgCommit –d essendosi loggati al sistema come utente Admin, occorre anche cancellare il programma e la memoria utente. Per fare questo occorre da telnet  eseguire i comandi:

    PLCProgram -stop: Arresta l’esecuzione del programma utente
    PLCProgram -pc: Cancella il programma utente
    PLCProgram -mc: Cancella la memoria utente

    in risposta a: Pannello HMI con certificazione ATEX #49554
    Sergio Bertana
    Amministratore del forum

    Alcuni pannelli HMI serie iE (Vedi link) e serie xE (Vedi link) hanno certificazione ATEX ma sono certificati per zona II (Vedere dichiarazione di conformità ATEX  scaricabile dalla pagina del prodotto).

    Ho chiesto al fornitore se avesse qualche modello certificato in zona 1 e mi ha risposto che hanno clienti che inseriscono un pannello normale in un case certificato per zona 1 e lo gestiscono tramite un mouse esterno (Certificato ATEX, che è facile da trovare) oppure lo comandano con tasti esterni connessi al PLC.

Stai visualizzando 15 post - dal 1,561 a 1,575 (di 4,381 totali)