Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 1,351 a 1,365 (di 4,507 totali)
  • Autore
    Post
  • 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).

    in risposta a: Domande su utilizzo del blocco funzione ModbusMaster #58393
    Sergio Bertana
    Amministratore del forum

    L’errore che citi compare se si paerdono caratteri nella stringa di risposta, potrebbe essere un problema simile a quello riportato negli ultimi post di questo topic. Utile a capire il problema sarebbe avere un report di spionaggio della comunicazione con Toolly.

    Perchè per un pò funziona e poi si blocca è stranissimo, certo che usando il FB ModbusMaster che utilizza il tempo di IFTime per dividere i pacchetti modbus, basta che il dispositivo slave per qualche motivo frammenti la risposta sui più pacchetti TCP che questo potrebbe generare il problema.

    Come consigliato nel topic che ti ho linkato ti consiglio di sostituire il FB gestione Modbus con la nuova versione ModbusMaster_v1 che è stato completamente ridisegnato, eliminato il controllo sul tempo di interframe, il pacchetto viene completamente sniffato e verificato rendendolo indipendente dai tempi.

    in risposta a: Acquisizione encoder #58389
    Sergio Bertana
    Amministratore del forum

    Iniziamo con il dire che la CPU ARM9 è un modello a fine produzione, ed il successivo modello basato su Raspberry non ha I/O a bordo.

    Ma da come mi spieghi l’applicazione mi sembra che non dovresti avere problemi nel realizzarla, utilizzando tutte risorse (Counter, Di, Do) a bordo modulo CPU elimini tutti i tempi di comunicazione sul bus e puoi sicuramente impostare un tempo di esecuzione task Fast anche minore di 300uS.

    Ti ricordo che se metti nella finestrra di watch le variabili SysTFastExTm, SysTFastExTmMin, SysTFastExTmMax (I tempi minimo e massimo si resettano attivando da debug la variabile SysTimeInit), potrai verificare quanto tempo è necessario ad eseguire il programma in task e regolarti di conseguenza nell’impostazione del tempo di esecuzione task.

    in risposta a: Utilizzo delle due porte ethernet sui terminali #58384
    Sergio Bertana
    Amministratore del forum

    Sicuramente questo è un problema, una delle condizioni da rispettare assolutamente è di avere le due porte configurate su classi di rete diverse.

    Non puoi avere 192.168.1.xx su entrambe le porte, quindi và bene attivare il DHCP ma se il tuo DHCP server ti rilascia un indirizzamento di rete che si sovrappone alla rete del PLC occorre cambiare impostazione nella rete del PLC.

    In alternativa puoi lavorare di MASK per mascherare nella rete del PLC i soli due IP che ti interessano quello del PLC e quello del pannello, ma devi essere certo che non si sovrappongano agli indirizzi IP dell’altra rete e comunque è una configurazione che richiede molta attenzione.

    in risposta a: Informazioni su server Harlequin #58376
    Sergio Bertana
    Amministratore del forum

    Con il rilascio del modulo CPU basato su Raspberry grazie al sistema operativo Raspbian, si è aperta la possibilità di eseguire sullo stesso modulo CPU più processi contemporanei. Ecco quindi che insieme ad un classico programma PLC realizzato con LogicLab posso eseguire altri processi come ad esempio Harlequin un servizio sviluppato in Node.js e raggiungibile da appositi FB dal programma PLC.

    Harlequin è un eseguibile sviluppato in Node.js quindi può essere eseguito su qualunque sistema Linux o Windows ed a cui altri sistemi SlimLine programmati in LogicLab possono connettersi in TCP/IP tramite appositi FB per sfruttarne le funzionalità. I FB attualmente sviluppati sono:

    • HlqCommand, gestire comandi specifici
    • HlqEMailSend, inviare eMail utilizzandoi servizi anche con crittografia TLS (Esempio GMail)
    • HlqTelegram, inviare e ricevere messaggi Telegram
    • HlqMySQL, eseguire queries su database MySQL
    in risposta a: Gestione credenziali accesso (password) su cMT-SVR #58374
    Sergio Bertana
    Amministratore del forum

    Eseguito importazione progetto cMTPassword in nuova versione EasyBuilder V6.04.01, download progetto e screenshot.

    in risposta a: Utilizzo delle due porte ethernet sui terminali #58370
    Sergio Bertana
    Amministratore del forum

    La LAN 1 è stata configurata correttamente ?

    Hai definito indirizzo di rete compatibile con la rete che ti fornisce l’accesso ad Internet, hai definito il gateway ed il DNS server ?

    Perchè se EasyAccess non funziona sembra essere un problema di connessione del  pannello ad Internet, puoi anche visualizzare sul pannello la finestra 76 EasyAccess 2.0 Setting e vedere che tipo di segnalazioni ti visualizza.

    in risposta a: Contatore ore di funzionamento #58366
    Sergio Bertana
    Amministratore del forum

    Credo possa essere di esempio realizzare un semplice FB che gestisce il conteggio del tempo di funzionamento. Basterà definire una variabile UDINT in memoria ritentiva (DB100 da 2048 a 4095) per ogni contatore che si vuole gestire e passarne l’indirizzo al FB HourCounter che lo gestirà. Riporto il codice sorgente del FB.

        // -------------------------------------------------------------------------
        // GESTIONE CONTAORE
        // -------------------------------------------------------------------------
        // Eseguo conteggio in secondi, valore massimo 4294967295 secondi pari ad
        // oltre 130 anni.
    
        IF (SysClock1000 <> Clk) THEN
            Clk:=SysClock1000; //Counter clock
            @HCValue:=@HCValue+1; //Hourcounter value
        END_IF;
    
        // Genero in uscita il valore in ore, minuti, secondi.
    
        Hours:=@HCValue/3600; //Hours
        Minutes:=TO_USINT((@HCValue/60) MOD 60); //Minutes
        Seconds:=TO_USINT(@HCValue MOD 60); //Seconds

    Allego il progetto HourCounter per il download.

Stai visualizzando 15 post - dal 1,351 a 1,365 (di 4,507 totali)