Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 1,426 a 1,440 (di 4,379 totali)
  • Autore
    Post
  • in risposta a: Gestione velocità inverter da pannello HMI #54361
    Sergio Bertana
    Amministratore del forum

    Per impostare i parametri da modbus sugli inverters INVT fare riferimento al manuale utente 7.4.2 Address instruction of other function in Modbus. Occorre però fare alcune precisazioni.

    L’indirizzamento modbus è a base 0, quindi nel pannello devi scegliere MODBUS RTU (Zero base addressing) (Screenshot).

    Come vedi dal manuale l’indirizzo del registro Modbus per l’impostazione della frequenza è 2001 esadecimale, quindi 8193 decimale.

    Siccome hai più di un inverter connesso alla stessa porta seriale devi anteporre all’indirizzo della variabile l’indirizzo del nodo Modbus impostato sull’inverter (Parametro P14.00 local communication address).

    Devi abilitare l’impostazione di frequenza via Modbus (Parametro P00.06=8 Frequency command selection -> Set via Modbus (0x2001)).

    Da quanto detto è evidente dovrai inserire nella tua pagina di terminale 12 oggetti Numeric input ognuno dei quali punterà alla variabile 8193 preceduta dall’indirizzo di nodo (Esempio 1#8193, 2#8193, …). La frequenza ha risoluzione 0.01 Hz quindi nel campo Format dell’oggetto numeric input dovrai definire 2 cifre a destra del punto decimale.

    in risposta a: Trasformazione di un valore REAL in testo #54355
    Sergio Bertana
    Amministratore del forum

    Per trasformare variabili in testo rendiamo disponibili due funzioni SysVarsnprintf e SysLWVarsnprintf, entrambe convertono una variabile in una stringa di testo. La prima serve se si deve stampare in una stringa una sola variabile, la seconda permette di accodare ad una stringa il risultato della conversione della variabile creando una stringa che contiene più valori.

    Grazie al campo Format puoi spaziare in una infinità di opzioni per la creazione della stringa valore.

    in risposta a: Libreria per comunicazione tra sistemi su Internet #54349
    Sergio Bertana
    Amministratore del forum

    Questa libreria è in evoluzione, ora la documentazione ufficiale la trovi nel manuale sul sito di supporto, vedi questi articoli (TCPDEXCHNODEDEFS, TCPDataExchServer, TCPDataExchClient). Ti consiglio di coipiare ed incollare gli esempi riportati, come vedi utilizzando il localhost puoi testare il funzionamento eseguendo sia il server che il client (1 o più) su di  un unico sistema.

    Il bit RxOk non và resettato da programma, in realtà si attiva per un loop di programma ad ogni ricezione dei dati.

    La variabile Heartbeat ora è definita nella struttura dati di configurazione.

    La variabile Active presente nelle struttura dati di configurazione se è attiva indica che la connessione tra ia sistemi è attiva.

    Non capisco la domanda sulla trasmissione dai dati, occorre definire un’area da inviare all’altro sistema, poi in quell’area puoi mettere tutti i tipi di dato che vuoi. Nel mio esempio ho usato per semplicità un array, ma nel caso reale conviene utilizzare una struttura dati in modo da poter raggruppare dati disomogenei.

    in risposta a: Passaggio dati in POST in formato JSON verso server HTTP #54346
    Sergio Bertana
    Amministratore del forum

    Appurato che il difetto che lamenti è un BUG del watch di LogicLab, ho già avvisato la Axel che ha aperto un ticket al riguardo.

    Ma non mi dici se hai eseguito il test utilizzando la console di spionaggio e cosa vedi dalla console, perchè a parte la visualizzazione errata in watch il programma deve funzionare.

    in risposta a: Connettere dispositivi I2C al bus di espansione SlimLine #54344
    Sergio Bertana
    Amministratore del forum

    Non ho mai usato multiplexer I2C come quello che citi, ma leggendo il datasheet mi sembra di capire che il multiplexer usa un indirizzo I2C per la sua gestione.

    Quindi nessun problema esegui un comando di write di 1 byte sull’indirizzo I2C del multiplexer indicando quale canale vuoi attivare. Da questo momento tutti i comandi I2C andranno in uscita sul canale indirizzato.

    Alternative… Se i componenti che usi hanno un pin di abilitazione puoi parallelarli tutti sul bus I2C e poi dovrai gestire (Magari con un PIO I2C) i vari comandi di abilitazione.

    in risposta a: Passaggio dati in POST in formato JSON verso server HTTP #54204
    Sergio Bertana
    Amministratore del forum

    In effetti nella visualizzazione di LogicLab i dati sembrano errati, devo sentire Axel al riguardo, non avevo mai notato questo semplicemente perchè come strumento diagnostico utilizzo la nostra console di spionaggio. E utilizzando proprio l’esempio citato nella HTTPClient ecco il risultato visto nella console di spionaggio.

    [Admin]> SpyData
    Spy data active, type "Ctrl-C" to exit...
    20:52:17( 288)|Tx|GET //Mdp095a000/Ptp119b000/Division.php?
    20:52:17(.104)|Rq|Dividend=500&Divisor=10
    20:52:17(.080)|Rx|[17] HTTP/1.1 200 OK..Date:
    20:52:17(.001)|Rx|[37] Date: Sun, 22 Mar 2020 11:03:42 GMT..Conten
    20:52:17(.001)|Rx|[40] Content-Type: text/html; charset=UTF-8..Transf
    20:52:17(.001)|Rx|[28] Transfer-Encoding: chunked..Connec
    20:52:17(.053)|Rx|[19] Connection: close..Set-Co
    20:52:17(.054)|Rx|[168] Set-Cookie: __cfduid=d50c ***HttpOnly; SameSite=Lax..
    20:52:17(.055)|Rx|[23] Vary: Accept-Encoding..CF-Cac
    20:52:17(.055)|Rx|[26] CF-Cache-Status: DYNAMIC..Server
    20:52:17(.056)|Rx|[20] Server: cloudflare..CF-RAY
    20:52:18(.053)|Rx|[30] CF-RAY: 577f6d79bfb3e8f7-MXP....11..
    20:52:18(.055)|Rx|[2] ..11..T 
    20:52:18(.055)|Lg|Start Rx page, chunked page
    20:52:18(.053)|Lg|RxD Chars:28, ChunkLgt:17, TotLgt :0
    20:52:18(.054)|Rx|[17] The result is: 500....
    20:52:18(.058)|Pi|Page length: 17 Page load time: 0.796 (S)

    Le stringhe visualizzate in console sono troncate alla lunghezza di 80 caratteri ma permettono comunque di capire il funzionamento. Ecco la riga di richiesta inviata al server e la riga di risposta ricevuta dal server:

    |Rq|Dividend=500&Divisor=10
    |Rx|[17] The result is: 500….

    Nella risposta ricevuta dal server, il numero tra [] è la lunghezza della stringa ricevuta. Nota: dopo il numero 50 vi è il carattere 0 che fà sembrare la risposta 500 ma in realtà avendo ricevuto una risposta in chunked, lo 0 è la lunghezza dell’ultimo chunk ricevuto. Se metti in debug la variabile Page dove c’è il contenuto ricevuto vedrai che è corretto ed è lungo 17 caratteri.

    in risposta a: Posizionamento asse con trasduttore effetto hall #54199
    Sergio Bertana
    Amministratore del forum

    Dal programma che hai fatto vedo che utilizzi 3 ingressi digitali del modulo CPU:

    Di00 per rilevare il comando Up dell’attuatore
    Di01 per rilevare il comando Dw dell’attuatore
    Di02 per rilevare il trasduttore effetto hall dell’attuatore

    Dal problema che lamenti, modificherei il programma in questo modo.

    VAR
        Pulse : BOOL; (* Input pulse *)
        DwUp : BOOL; (* Direzione, Dw:FALSE, Up:TRUE *)
        Position : DINT; (* Posizione asse *)
        DInp : SysGetPhrDI; (* Digital input acquisition *)
    END_VAR
    
        // -------------------------------------------------------------------------
        // INIZIALIZZAZIONE
        // -------------------------------------------------------------------------
    
        IF (SysFirstLoop) THEN
            DInp.Address:=255; //Module address
            DInp.Mode:=DI_8_LL; //Acquisition mode
        END_IF;
    
        // -------------------------------------------------------------------------
        // CONTEGGIO IMPULSI
        // -------------------------------------------------------------------------
        // Eseguo acquisizione ingressi digitali.
    
        DInp(); //Digital input acquisition
    
        // Controllo quale comando è attivo se Up o Down.    
    
        IF TO_BOOL(DInp.Value AND 16#01) THEN DwUp:=TRUE; END_IF;
        IF TO_BOOL(DInp.Value AND 16#02) THEN DwUp:=FALSE; END_IF;
    
        // Conteggio impulsi da sensore trasduttore.
    
        IF (TO_BOOL(DInp.Value AND 16#04) <> Pulse) THEN
            Pulse:=TO_BOOL(DInp.Value AND 16#04); //Input pulse
    
            // Se si controlla "Pulse" incremento solo su fronte attivazione.
            // Togliendo controllo si incrementa anche su fronte disattivazione.
    
            IF (Pulse) THEN
                IF (DwUp) THEN Position:=Position+1; ELSE Position:=Position-1; END_IF;
            END_IF;
        END_IF;
    
    // [End of file]

    Non è molto diverso dal tuo, unica differenza è utilizzare una sola flag per indicare la direzione, in questo modo anche quando spegni il motore dell’attuatore rimane memorizzata l’ultima direzione. Così siccome sull’arresto non c’è un arresto immediato ma ci potrebbero essere ancora degli impulsi in questo modo vengono contati correttamente.

    Nota: E’ importante che la variabile Position sia di tipo DINT per permettere di andare in negativo nel caso servisse.

    in risposta a: Visualizzare immagini da PenDrive su comando PLC #54181
    Sergio Bertana
    Amministratore del forum

    Ecco le risposte:

    I formati supportati sono: jpg, bmp, gif, png.

    La dimensione immagine consigliata è non oltre 1024×768 a meno che non si usi un cMT-FHD allora si può andare oltre. Come dimensione file meglio stare sotto 1Mb.

    Se si prova ad aprire un file non esistente rimane aperto l’ultimo.

    in risposta a: Comando velocità rotazione da ingresso digitale #54177
    Sergio Bertana
    Amministratore del forum

    Gli inverter GD20 dispongono di 4 ingressi digitali, gli ingressi sono configurabili mediante i parametri del gruppo P05 Input terminal. Per ogni ingresso è possibile scegliere tra 43 opzioni diverse, di seguito riporto solo quelle relative alla tua domanda:

    0: No function
    1: Forward rotation operation
    2: Reverse rotation operation
    ...
    4: Forward jogging
    5: Reverse jogging
    ...
    16: Multi-step speed terminal 1
    17: Multi-step speed terminal 2
    18: Multi-step speed terminal 3
    19: Multi-step speed terminal 4

    Per selezionare una velocità diversa devi impostare su di un ingresso la funzione Multi-step speed, esistono 4 selezioni che combinate tra di loro ti permettono di scegliere tra 16 diversi valori di velocità. Il valore di velocità andrà impostato nel gruppo P10, Multi-step speed control.

    Se a te serve un’unica velocità imposterai uno degli ingressi per selezionare ad esempio il Multi-step speed 1 ed andrai nel parametro P10.04 ad impostare il valore di velocità.

    in risposta a: Visualizzare immagini da PenDrive su comando PLC #54122
    Sergio Bertana
    Amministratore del forum

    Utilizzando l’oggetto Picture View puoi visualizzare immagini da disco scegliendo come cartella il disco USB. Nelle proprietà dell’oggetto devi specificare la cartella su disco da cui acquisire le immagini, può essere direttamente la cartella root del disco o una cartella predefinita.

    In alternativa puoi abilitare il Dinamic folder path, che permette di definire la cartella utilizzando variabili HMI o PLC. In questo modo puoi definire la cartella direttamente da programma PLC.

    Attivando Specify file from address puoi definire una variabile HMI o PLC tramite la quale definire il nome del file immagine da visualizzare.

    Ho realizzato un semplice progetto PictureViewExample che visualizza immagini da USB, lo puoi testare direttamente in simulazione  su PC. Nel file di progetto ho caricato alcune immagini di esempio già pronte, i loro nomi sono Image01.jpg, Image02.jpg, ecc. dovrai caricare le immagini nella cartella usb1 nel percorso di installazione di EasyBuilder Pro (Esempio C:\Program Files\EBpro\usb1\).

    Attivando il progetto in simulazione  su PC basterà definire il nome della immagine desiderata nella casella di inputazione per vederla visualizzata (Screenshot).

    in risposta a: Informazioni su utilizzo server MySQL #54119
    Sergio Bertana
    Amministratore del forum

    Aggiungo il progetto di esempio DatabaseServerDemo, un’altro progetto che utilizza la connessione ad un database MySQL per esportare nel database dei dati acquisiti dal terminale.

    in risposta a: Informazioni su utilizzo server MySQL #54117
    Sergio Bertana
    Amministratore del forum

    Non specifichi se si tratta di modelli MT8102iP o MT8102iE, come puoi vedere dal capitolo Appendix A del manuale EsyBuilder Pro (Il documento è scaricabile dal ns sito). i modelli iP essendo la gamma entry level della famiglia non possono gestire nè le ricette ne la connessione al server SQL.

    I modelli iE hanno invece la possibilità di gestire ricette sul loro database interno ma non possono connettersi a database SQL esterni.

    Per poter gestire la connessione a database SQL esterni devi utilizzare prodotti della gamma cMT.

    Nel forum trovi topics che trattano gli argomenti che cerchi, in questo topic  ed in questo topic si parla di ricette.

    In questo topic si parla di connessione a server SQL.

    Allego per il download il progetto SQLQueryDemo che si connette ad un server MySQL (Nel progetto si utilizza la connessione in localhost). Il progetto si può testare direttamente sul PC in emulazione, occorre avere il server MySQL attivo.

    in risposta a: Macro per gestione items ID ricetta #54095
    Sergio Bertana
    Amministratore del forum

    Ho realizzato un semplice progetto con una macro che esporta il nome del’Item della ricetta, ecco la macro:

    macro_command main()
    
    char nome[5]
    short i,num
    short  loc=0 
    
    // verifico il numero di ricette presenti
    
    GetData(num, "Local HMI", RECIPE, "test.Count")
    num=num-1
    
    // Prelevo i singoli nomi e li metto su local word
    // Modificare SetData se si vuole trasferire su PLC
    
    for i=0 to num
      RecipeGetData(nome[0], "test.NOME",i)
      loc=i*5
      SetData(nome[0], "Local HMI", LW, loc, 5)
    next i
    
    end macro_command

    E’ possibile scaricare il progetto GetRecipeItem per testarlo da EasyBuilder Pro direttamente in emulazione su PC (Download).

    in risposta a: Blocco PLC su lettura encoder in task Fast #54049
    Sergio Bertana
    Amministratore del forum

    Per curiosità ho analizzato il problema ed ho eseguito il calcolo del tempo di esecuzione del tuo programma, ho inserito in testa al tuo programma il salvataggio del tempo di sistema, ed in coda il calcolo del tempo di esecuzione.

    VAR
        TimeBf : UDINT; (* Time buffer (uS) *)
        ExTime : UDINT; (* Tempo di esecuzione (uS) *)
        MaxTime : UDINT; (* Massimo tempo di esecuzione (uS) *)
    END_VAR
    
        TimeBf:=SysGetSysTime(TRUE);
        ...
        Programma cliente di cui calcolare tempo esecuzione.
        ...
        ExTime:=SysGetSysTime(TRUE)-TimeBf;
        IF (ExTime > MaxTime) THEN MaxTime:=ExTime; END_IF;

    Il tempo di esecuzione è di 315uS con un massimo di 320uS quindi occupa un terzo del tempo di task (1mS), infatti gira senza problemi. Ora visto che tu lamentavi il problema immagino avessi ridotto il tempo di esecuzione della task Fast, o che avessi altro codice da eseguire.

    Nota: Tutto il tempo è necessario per accedere alla scheda periferica di lettura encoder, se commento la riga di codice che esegue la lettura il tempo necessario per eseguire il programma passa a 7uS.

    in risposta a: Passaggio dati in POST in formato JSON verso server HTTP #54035
    Sergio Bertana
    Amministratore del forum

    Tutte le librerie sono comunque scaricabili dalla pagina di download del sito https://www.elsist.biz/lista-download/. Basta inserire nella casella di ricerca il nome o parte di esso della libreria cercata.

    Nota: Alle librerie inizialmente veniva aggiunto il suffisso _A000 dove la lettera ed i numeri indicavano la versione. Con l’ultima versione di LogicLab il suffisso è sparito e la libreria riporta un numero di versione che è visualizzato e gestito da LogicLab.

     

Stai visualizzando 15 post - dal 1,426 a 1,440 (di 4,379 totali)