Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 1,216 a 1,230 (di 4,379 totali)
  • Autore
    Post
  • in risposta a: Compilazione file data sampling mensili #58647
    Sergio Bertana
    Amministratore del forum

    Per la lettura dell’RFID se usi la versione con bus Wiegand devi utilizzare un sistema SlimLine perchè i sistemi Netlog non hanno la velocità di acquisizione necessaria. Sui sistemi Netlog puoi utilizzare il lettore RFID con interfaccia 1-wire collegando alla porta seriale del Netlog l’Adattatore 1-Wire a RS232 DS9097U.

    Visto che mi parli di invio eMail quindi il sistema è connesso ad Internet, posso consigliarti di utilizzare un HMI con la licenza EasyAccess o di acquistare la licenza a parte, questo ti permetterà di accedere al sistema HMI/PLC da remoto via Internet.

    Con la connettività Internet hai tutti i requisiti per omologare l’impianto secondo la normativa Industry 4.0 ed accedere ai benefici fiscali (Vedi blog).

    in risposta a: Libreria gestione stringhe json #58645
    Sergio Bertana
    Amministratore del forum

    Come puoi vedere in questo articolo, tutte le librerie sono state riscritte per avere la compatibilità con l’architettura XUnified, tu probabilmente stai compilando su di un sistema con architettura XTarget, quindi avendo modificato il nome di alcuni oggetti il compilatore non trova la nuova funzione SysVsnprintf utilizzata nella libreria.

    Per poter utilizzare le nuove librerie con l’architettura XTarget devi aggiungere al tuo progetto la libreria eLLabXTargetAdjLib.

    in risposta a: Interpretazione file Logs #58643
    Sergio Bertana
    Amministratore del forum

    Si tratta di una warning, che indica che in una pagina web dinamica realizzata dall’utente abbia una variabile stringa in cui non è stata definita la lunghezza massima. Riporto l’estratto del manuale di programmazione che tratta l’argomento.

    All’interno della pagine con estensione htm è possibile inserire TAGs che verranno automaticamente sostituite dal server con il valore di una variabile PLC. I TAGs hanno il costrutto di un commento HTML, il TAG <!–[‘%d’, UINT, 10]-> verrà sostituito con il valore della variabile UINT allocata nella DB100.10.

    Questa warning non ha niente a che vedere con il programma realizzato ma riguarda esclusivamente il server web con la gestione di pagine realizzate dall’utente.

    in risposta a: Configurazione rete ethernet da pagina web #58640
    Sergio Bertana
    Amministratore del forum

    L’indirizzo IP del gateway nella configurazione di rete di qualsiasi dispositivo deve essere quello del dispositivo che permette di comunicare con Internet, o comunque con altre reti al di fuori della classe di rete configurata per il prodotto.

    Quindi ipotizzando che l’IP dello SlimLine sia quello di default 192.168.0.122/24 quando si cerca di comunicare con un IP esterno alla classe di rete i pacchetti vengono inviati all’indirizzo IP del gateway che li instraderà verso la rete a cui l’indirizzo IP appartiene.

    Se non c’è la necessità di comunicare con dispositivi esterni alla propria classe di rete il gateway non è necessario ed il campo può avere qualsiasi valore.

    in risposta a: Sviluppo programmi con tecnica batch #58610
    Sergio Bertana
    Amministratore del forum

    Googlando troverete moltissimi articoli che parlano di questa tecnica di programmazione, da una rapida lettura ho ritenuto interesante estrarrne i vantaggi.

    La programmazione batch o passo a passo è più lunga e laboriosa, ma rende il programma più affidabile, perché svolto con singole fasi indipendenti. Inoltre è molto più facile la manutenzione, se sorge un problema all’impianto, il programma si fermerà ad un dato passo che ci permetterà di individuare immediatamente la causa.

    Inoltre permette di gestire in modo affidabile la diagnostica e gli allarmi. Ad ogni passo è possibile controllare e gestire eventuali emergenze o anomalie come:

    • Tempo massimo di esecuzione passo superato.
    • Finecorsa avanti e indietro attivi contemporaneamente o non attivi dopo il tempo massimno di movimento.
    • Pressione del pulsante emergenza
    • Rimozione di protezioni di sicurezza, ecc

    In questo caso si potranno prevedere una serie di misure quali l’arresto della macchina (o il riposizionamento in uno stato di riposo/sicurezza) e la segnalazione dell’errore/anomalia/guasto.

    in risposta a: Sviluppo programmi con tecnica batch #58609
    Sergio Bertana
    Amministratore del forum

    Riporto per chi come me non la conosceva la definizione di programmazione con la tecnica batch.

    La tecnica batch prevede di associare ad ogni passo della sequenza un merker di passo e gestire l’evoluzione del sistema settando il merker successivo e resettando quello attuale ad ogni transizione. In questo modo in ogni momento sarà attivo un solo merker e lo stato del sistema sarà sempre definito.

    Non conoscendola ho scoperto che quasi tutti i miei programmi sono realizzati con la tecnica batch, se cercate nel forum o nella knowledge base troverete molti esempi (Quasi sempre in linguaggio ST) dove il programma è eseguito a passi di solito uso una variabile CaseNr e con lo statement CASE sequenzio i vari passi del programma. Ma nulla vieta di usare la stessa tecnica con gli altri linguaggi usando variabili BOOL come sequenziatori o usando le istruzioni di comparazione per sequenziare i vari passi.

    Venendo alla domanda se guardi gli esempi credo che in tutti sia stata utilizzata la variabile di primo loop proprio per inizializzare il programma, la variabile SysFirstLoop è infatti attiva per un solo loop di programma alla prima esecuzione. Comunque ricordo che esiste la task Boot eseguita una sola volta all’avvio della esecuzuione programma, a questa task puoi assegnare i tuoi programmi che gestiscono l’inizializzazione delle variabili.

    in risposta a: Errore esecuzione programma client REST #58593
    Sergio Bertana
    Amministratore del forum

    Credo che il problema possa essere nella gestione ELSE del CASE dove tu arrivi dopo avere inviato l’ultimo dato. In quel caso non carichi nulla nella variabile RESTVars.Request, e quindi LEN(RESTVars.Request) torna 0. Proverei a modificarlo così:

        ELSE
            DateTime:=SysDateTime; //Date/Time Epoch
            RETURN;
        END_CASE;
    in risposta a: Sincronizzare comandi macchina con encoder virtuale #58589
    Sergio Bertana
    Amministratore del forum

    Mi sembra una applicazione molto simile ad una camma elettronica, utilizzata per il controllo dei movimenti nelle presse di tranciatura. La camma fraziona il movimento dell’albero in 360 parti a cui è possibile abbinare comandi di specifici attuatori.

    Nel tuo caso il movimento dell’albero non verrà rilevato dalla lettura di un encoder ma dovrà essere simulato matematicamente, quindi se ho ben capito basterà gestire l’incremento di un contatore che arrivato a 360 (O decidi tu a quale valore) si resetta per simulare il giro dell’albero.

    Non specifichi la velocità massima del ciclo, ad esempio a 60 cicli minuto dovremo gestire la variazione da 0 a 360 in un secondo, quindi dovremo incrementare il contatore ogni 2,77 mS. Se gestiamo l’incremento in task Fast ad 1mS possiamo decidere di incrementare ogni 2 o 3 mS. ma non 2,77mS. Magari ti è sufficente avere step di velocità di 1mS ma ti ricordo che con la funzione SysSetTaskLpTime puoi variare il tempo di esecuzione della task Fast portandolo ad un minimo di 100uS.

    Ho realizzato il programma VirtualShaft (Download) che realizza quello che credo possa servirti, di seguito il programma eseguito in task Fast.

    VAR
        i : UDINT; (* Auxiliary variable *)
        Time : UDINT := 1000; (* Tempo esecuzione task (uS) *)
        Speed : REAL := 1; (* Velocità albero (g/min) *)
        FAdd : REAL; (* Fattore incremento quota *)
        VShaft : REAL; (* Albero virtuale (gradi) *)
        CDs : ARRAY[0..3] OF BOOL; (* Comandi *)
    END_VAR
    
        // -------------------------------------------------------------------------
        // INIZIALIZZAZIONE
        // -------------------------------------------------------------------------
        // Imposto tempo di esecuzione task Fast.
        
        IF (SysFirstLoop) THEN
            i:=SysSetTaskLpTime(ID_TASK_FAST, Time);
        END_IF;
    
        // -------------------------------------------------------------------------
        // GESTIONE ALBERO VIRTUALE 
        // -------------------------------------------------------------------------
        // Ad ogni esecuzione incremento la quota virtuale del valore relativo alla
        // velocità definita dell'albero.
    
        FAdd:=((Speed/60.0)/(1000000.0/TO_REAL(Time)))*360.0;
        VShaft:=VShaft+FAdd; //Albero virtuale (gradi)
        VShaft:=MOD(VShaft, 360.0); //Albero virtuale (gradi)
    
        // -------------------------------------------------------------------------
        // GESTIONE COMANDI 
        // -------------------------------------------------------------------------
        // Alle varie posizioni albero comando i dispositivi.
    
        CDs[0]:=TO_BOOL((VShaft >= 10.0) AND (VShaft < 80.0)); //Attivo da 10 a 80 gradi
        CDs[1]:=TO_BOOL((VShaft >= 50.0) AND (VShaft < 100.0)); //Attivo da 50 a 100 gradi
        CDs[2]:=TO_BOOL((VShaft >= 180.0) AND (VShaft < 200.0)); //Attivo da 180 a 200 gradi
        CDs[3]:=TO_BOOL((VShaft >= 300.0) AND (VShaft < 350.0)); //Attivo da 300 a 350 gradi
    
    // [End of file]
    in risposta a: Errore esecuzione programma client REST #58586
    Sergio Bertana
    Amministratore del forum

    Il programma è molto simile a quello riportato nel manuale sul FB RESTClient, ma l’errore che tu riporti riguarda i parametri del FB FIFOFile sulla esecuzione del comando In. Cioè quando sono inseriti nel registro FIFO i dati da inviare al server REST, dovresti avere nel programma qualcosa del tipo:

        i:=Sysmemset(ADR(RESTRequest), 0, SIZEOF(RESTRequest)); //REST request
        JEncode(Object:=ADR(RESTRequest), OSize:=SIZEOF(RESTRequest), Name:=ADR('Dividend'), VType:=REAL_TYPE, VAddress:=ADR(RESTData[0]), Count:=1);
        JEncode(Object:=ADR(RESTRequest), OSize:=SIZEOF(RESTRequest), Name:=ADR('Divisor'), VType:=REAL_TYPE, VAddress:=ADR(RESTData[1]), Count:=1);
        RESTVars.FIFO(In:=TRUE, Dp:=ADR(RESTRequest), Dls:=LEN(RESTRequest)); //Write record on FIFO

    Ed è proprio nella riga dove esegui il comando di inserimento dei dati nel FIFO che hai qualche errore nella definizione dei dati.

    in risposta a: Modbus master per comunicazione con PC #58533
    Sergio Bertana
    Amministratore del forum

    Mi dici che sul PC vuoi istanziare un client Modbus, per client Modbus io intendo che il PC apre una connessione in modalità client verso lo SlimLine che agisce come server TCP. Sulla connessione client di solito c’è il master Modbus, quindi se è così lo SlimLine dovrà agire da slave Modbus cosa che già fà di suo (Porta standard 502) senza scrivere nessun programma.

    Definire il PC come slave Modbus certo è possibile anche se sul PC viene di solito sono eseguiti programmi di supervisione che agiscono da client TCP interrogando in Modbus master molti dispositivi modbus slaves.

    Ma se tu devi proprio essere client del PC puoi copiare esattamente il programma del FB SysTCPClient ed passare il file pointer in uscita (Parametro File) al FB ModbusMaster. Nell’esempio del FB ModbusMaster c’è già anche la doppia gestione, sia su porta seriale che con il FB SysTCPClient.

    in risposta a: Problemi nella conversione da XTarget a XUnified #58502
    Sergio Bertana
    Amministratore del forum

    Anche se forniamo la libreria eLLabXUnifiedAdjLib per rendere trasparente il passaggio, correggere i proprii programmi è sicuramente la soluzione migliore per effettuare la transizione verso la nuova architettura.

    Come indicato in questo articolo nella sezione Oggetti di libreria modificati nel passaggio alla versione XUnified delle librerie alcuni oggetti hanno cambiato nome altri oltre ad aver cambiato nome hanno subito variazioni sia sul numero di parametri che sul loro formato.

    Se tu vai nella pagina del manuale on-line del nuovo oggetto, nel tuo caso sulla SysWrSpyData troverai in testa una sezione indicata con Sostituisce SysSpyData e se la apri troverai riportate le modifiche eseguite e un esempio di utilizzo della vecchia funzione seguito da un esempio di utilizzo della nuova.

    in risposta a: Pannello non si riconnette più al PLC #58493
    Sergio Bertana
    Amministratore del forum

    Non sono certo di quello che succede, posso azzardare solo una ipotesi.

    Essendo il pannello connesso al PLC tramite uno switch, allo spegnimento del PLC il pannello non “vede” cadere la connessione ethernet, non riceve risposta dal PLC e quindi ritenta di dialogare inviando pacchetti Modbus di richiesta.

    Quando il PLC si riaccende invece non ha sockets aperti e si mette in attesa che il pannello si connetta (Tri-Way connection), ma per il pannello la connessione è ancora attiva ed il socket ancora aperto quindi non esegue alcuna apertura della connessione. Così tutto rimane in questo stato e la connessione non riprende. Spegnendo e riaccendendo il pannello ecco che verrà creata la connessione ed il dialogo può riprendere.

    Ora cosa fare… puoi provare ad agire con una macro nel pannello sui bits che forzano la riconnessione al PLC (Da LB-10070 a LB-10099) in questo modo il pannello dovrebbe riaprire la connessione con il PLC.

    in risposta a: EasyAccess non visualizza Session ID e Password #58448
    Sergio Bertana
    Amministratore del forum

    Session ID e Password si usano per i pannelli pre attivati (Vedi topic) o nel caso che si voglia trasferire il pannello da un dominio ad un altro.

    Se il pannello è già assegnato ad un dominio Session ID e Password sono settati a 0, questo ad indicare che il pannello è già associato e non è possibile inserirlo in altri domini.

    Perchè ricordo che il pannello può appartenere solo ad un dominio, sarà poi l’amministratore del dominio ad associarlo ai vari utenti del dominio cui vorrà dare l’accesso da remoto a quel pannello.

    in risposta a: Utilizzare solo una porta LAN su pannelli muniti di 2 porte #58405
    Sergio Bertana
    Amministratore del forum

    Nel caso si desideri utilizzare una sola porta LAN su di un pannello dotato di 2 porte, devi utilizzare la sola LAN1. Collegherai la LAN1 del pannello alla rete aziendale dove connetterai anche il PLC e lasci la LAN2 scollegata.

    Devi fare attenzione però alla configurazione della LAN2, ti consiglio di configurarla in una classe di rete diversa dalla LAN1 (Esempio LAN1 192.168.0.10/24, LAN2 192.168.10.10/24). Eventualmente dopo avere applicato la configurazione  e verificato il funzionamento della connessione pannello-PLC e pannello-Internet, potrai anche settare la rete LAN2 con il DHCP.

    Essendo la rete LAN2 scollegata non viene trovato nessun server DHCP e quindi il pannello utilizza come indirizo di fallback l’utltimo indirizzo assegnato che se per caso fosse nella stessa classe della rete LAN1 provocherebbe il non funzionamento della comunicazione.

    in risposta a: Caselle inputazione credenziali di accesso sparite #58399
    Sergio Bertana
    Amministratore del forum

    L’aggiornamento del firmware non ha nessuna dipendenza con le pagine web di configurazione.

    Nel tuo post non mi dici se collegandoti con il browser vedi la pagina Home senza le caselle per l’inputazione delle credenziali o se non vedi nessuna pagina. Se vedi la pagina devi verificare la versione delle pagine (Screenshot) ed eventualmente eseguirne l’upgrade (Vedi articolo).

Stai visualizzando 15 post - dal 1,216 a 1,230 (di 4,379 totali)