Vai al contenuto

Alessandro Campodonico

Risposte nei forum create

Stai visualizzando 15 post - dal 1 a 15 (di 25 totali)
  • Autore
    Post
  • in risposta a: Acquisizione valori via Modbus da contatori Iskraemeco #79936

    Io utilizzo la versione 5.12.0.36 di logiclab nella gestione libreria non ho l’opzione per aggiungere il pacchetto di libreria, per adesso preferisco non aggiornare in quanto mi ritrovo ( con vecchi programmi ) ad avere decine e decine di problemi in compilazione, per ora preferirei rimanere cosi.

    Ho importato eGETReal ora però non trova PVOID, cè un elenco della posizione di tutte queste funzioni o FB necessarie cosi da importarle tutte?

    in risposta a: Acquisizione valori via Modbus da contatori Iskraemeco #79920

    Grazie mille per le dritte,

    Si il mio problema è che devo leggere la corrente di un inverter tramite Modbus, e l’inverter appoggia la variabile float su 2 registri consecutivi WORD, quindi devo combinarli insieme e convertirli in REAL.

    La prima parte l’ho fatta (anche se WordsToDouble mi restituiva un errore “funzione sconosciuta” alla fine cercando un ho visto che nella libreria eLLabUtyLib cè l’FB WordsToDouble)

    Il problema ora è che anche eGetREAL mi ritorna errore ” funzione sconosciuta” ma non sono riuscito a trovarlo in nessuna libreria, come posso risolvere?

    in risposta a: Acquisizione valori via Modbus da contatori Iskraemeco #79882

    Rispolvero questo vecchio post ho provato ad utilizzare la funzione, con il seguente codice

    CombinedValue : DWORD;
    CombinedValueR : REAL;
    CombinedValueR:=IEE754DoubleToFloat(ADR(CombinedValue));

    Ma purtroppo ottengo un errore in compilazione SDF(1) – errore G0101:  VALUE => Tipo non corrispondente in assegnazione.

    La mia necessità sarebbe quella di leggere tramite modbus la corrente di assorbimento presa da 2 registri consecutivi a 16 bit, concatenarli in 1 variabile dword e convertirli in float(real).

    Ho visto che avete FB WordToDouble e questa funzione IEE754DoubleToFloat, con questi due sistemi dovrei riuscire ad ottenere quello che mi serve, il problema è l’errore in compilazione.

    in risposta a: Problema lettura RTC su modulo CPU Cortex #70268

    Buongiorno, ho provato ad eseguire il comando consigliato. questo è il risultato:

    [Admin]> I2CSts
    Find devices on I2C Auxiliary bus
    Device: 104 (0x68) Found
    
    Find devices on I2C extension bus
    Device: 32 (0x20) Found
    Device: 33 (0x21) Found

    Il modulo è un Cortex M7 Extended RS485 che se non erro dovrebbe avere già di default RTC a bordo.

    Se eseguo un reboot della CPU,  RTC torna a funzionare per un pò di tempo, poi ad un certo punto smette di funzionare. ho scaricato il file Log.txt tramite FTP ma tutti i Logs sono uguale a questo:

    [15/02/2023 00:20:44.472] [E] SFR050[ 3040] RTC read error

    Ho provveduto ad eliminare il file Logs sulla CPU e fare un reboot, per cercare di scaricare il file Logs al momento del blocco dell’RTC.

    in risposta a: Resettare il sistema da programma utente #70065

    Mi sono imbattuto in questa vecchia discussione, in quanto sarei interessato al reboot dello SlimLine da programma utente.

    Mi chiedevo se negli anni sia stata implementata una “sistema alternativo per riavviare lo slimline da programma, o se è sempre da tenere valida la soluzione

    WHILE (Di00CPU) DO END_WHILE

    in risposta a: Errore 10007502 su FB ModbusMaster_V1 #66688

    Grazie mille per la risposta,

    In realtà mi stai confermando quello che gia sospettavo ( un problema di disturbi ), in quanto ho una valvola proporzionale che a volte nonostante il comando analogico sia fisso fa qualche scatto, quindi penso proprio ci sia qualche disturbo che circola nel quadro, i cavi del bus non sono schermati, ma sono molto corti sarà 1 metro in tutto, pero penso ci sia qualche cavo che va fuori dal quadro con qualche problema.

    Appena torno a bordo ricontrollerò!

    in risposta a: Come mascherare cifre in variabili REAL #66547

    Grazie mille per la risposta, veloce e precisa come sempre, in questi giorni farò una prova.

    in risposta a: Comunicazione modbus tra SlimLine e Inverter #59081

    Girovagando nel forum sono venuto a conoscenza di questo FB ACModbus, considerando che in determinate strumentazioni utilizzo i vostri sistemi per comunicare via Modbus RS485 con 5 Inverter, mi piacerebbe avere qualche info in piu su questa FB che presumo sia nata recentemente.

    Se non ho capito male viene “comodo” usarla quando si ha necessita di leggere registri non consecutivi su più Device, corretto?

    In che modo migliora la comunicazione? L’utilizzo di questa FB potrebbe migliorare le performance della comunicazione e quindi anche la velocita?

    Grazie mille per le delucidazioni

    in risposta a: Errore esecuzione programma client REST #58590

    Grazie della risposta, incollo anche la parte di codice dove inserisco i dati nel registro FIFO.

        // -------------------------------------------------------------------------
        // TEMPORIZZAZIONE INVIO
        // -------------------------------------------------------------------------
        // Eseguo invio di 38 valori ogni ora.
    
        IF ((SysDateTime-DateTime) < 3600) THEN CaseNr:=0; RETURN; END_IF;
    
        // Temporizzo invio tra i valori (Invio ogni 1/2 secondo).
    
        IF ((SysGetSysTime(TRUE)-TimeBf) < 500000) THEN RETURN; END_IF;
        TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS)
    
        // -------------------------------------------------------------------------
        // INVIO DATI
        // -------------------------------------------------------------------------
        // Gestione case programma.
    
        i:=Sysmemset(ADR(RESTVars.Request), 0, SIZEOF(RESTVars.Request)); //REST request
    
        CASE (CaseNr) OF
            0: RESTVars.JEncode(Object:=ADR(RESTVars.Request), OSize:=SIZEOF(RESTVars.Request), Name:=ADR('Nr Partenze Pompa 1'), VType:=WORD_TYPE, VAddress:=ADR(IMPULSI_POMPA_1_HMI), Count:=1);
    
            1: RESTVars.JEncode(Object:=ADR(RESTVars.Request), OSize:=SIZEOF(RESTVars.Request), Name:=ADR('Nr Partenze Pompa 2'), VType:=WORD_TYPE, VAddress:=ADR(IMPULSI_POMPA_2_HMI), Count:=1);
    
            2: ...
            3: ... Continuo con l'invio dei vari dati (Ci sono 38 invvi totali)
            37: ...
    
        ELSE
            DateTime:=SysDateTime; //Date/Time Epoch
        END_CASE;
    
        // -------------------------------------------------------------------------
        // INVIO REST
        // -------------------------------------------------------------------------
    
        CaseNr:=CaseNr+1; //Case programma
        RESTVars.FIFO(In:=TRUE, Dp:=ADR(RESTVars.Request), Dls:=LEN(RESTVars.Request)); //Write record on FIFO
    
    // [End of file]
    in risposta a: Comunicazione modbus tra SlimLine e Inverter #58352

    Perfetto pare che aggiornando al ModbusMaster_v1 il problema sia sparito.

    Sempre molto disponibili e utili come sempre!

    in risposta a: Comunicazione modbus tra SlimLine e Inverter #58348

    Grazie della veloce risposta, volevo provare ad aggiornare la libreria con il FB ModbusMaster_v1 dove lo trovo?

    in risposta a: Comunicazione modbus tra SlimLine e Inverter #58344

    Stò utilizzando con ottimi risultati il FB Modbus Master per comunicare con 5 inverter. Però in modo apparentemente casuale il FB mi riporta un errore che spiandolo con Toolly è 10007506, se non ho capito male indica un errore nella ricezione dati, questo errore comunque non interrompe la comunicazione, che prosegue senza problemi. L’errore viene fuori a random un pò su tutti gli inverter più o meno ogni 2/4 minuti, ecco il report della console di spionaggio

    03:23:03 (.310)|Tx|02 03 1C 20 00 01 82 63
    03:23:03 (.011)|Rx|02 03 02 00
    03:23:03 (.002)|Rx|Error:10007606, On Case:212, Back:51
    ...
    03:23:05 (.310)|Tx|03 03 1C 20 00 01 83 B2
    03:23:05 (.016)|Rx|02 03 02 00 05 01 B7

    Si vede chiaramente che nella risposta mancano dei caratteri ma non capisco il motivo. La configurazione di Baud rate ecc direi che è corretta altrimenti penso non comunicherebbe mai, invece riesco a comandare gli inverter.

    Il timeout è 100mS, il delay è 10mS (ma anche portandolo a valori più alti 300mS) il problema si presenta lo stesso. Qualche Consiglio ?

    in risposta a: Libreria per comunicazione tra sistemi su Internet #54304

    Sto testando la libreria con un PLC master e 1 Slave (per ora), perche dovrei realizzare un programma di un macchinario (master) che trasferisce e riceve informazioni da qualche slave, per ora saranno un paio poi aumenteranno a circa 10. Mi servirebbero però alcuni chiarimenti a dei dubbi che mi sono venuti e che non sono riuscito a chiarirmi da solo.

    1) Nel manuale allegato all’ultima versione di logiclab nella pagina dedicata a TCPDEXCHNODEDEFS si evidenziano ingressi e uscite che in realtà nel programma dimostratico non sono riuscito a trovare ad esempio AutoTxD, TxHeartbeat, RxHeartbeat. Nonostante abbia provato a eseguirlo.

    Inoltre trovo un’incongruenza nella descrizione di RxOk | BOOL | R | Rx data Ok. Settato su ricezione dati dall’altro sistema, i dati sono stati trasferiti in RxBuffer. Deve essere resettato da programa utente.

    Poi sotto si legge che

    I campi RW devono essere impostati dal programma utente, i campi R non devono essere modificati da programma utente, possono solo essere letti. siccome RxOk fa parte del gruppo “R” non capisco se bisogna resettarlo oppure no, in caso affermativo come?

    2) Nel FB TCPDataExchClient cè una variabile ingresso Heartbeat, impostata a 5 (s) da quello che ho capito è un atutomatismo per mandare un pacchetto per controllare la connessione giusto? in ogni caso ho provato a cambiare il valore, se provo a mettere un valore minore di 5 il TCPDEXCHNODEDEFS va in errore, 5 secondi è il tempo minimo?

    3) Sempre nel manuale nella pagina riguardante TCPDataExchClient non riporta come variabili Heartbeat come se non ci fosse, ma in realta nel fb è presente.

    4) Non mi è chiaro come si potrebbe gestire un controllo sulla comunicazione, l’unica cosa che mi è venuta in mente è controllare la variabile Active di TCPDEXCHNODEDEFS, in true quando connessione stabilita e false quando connessione non riuscita è esatto? ci sono altri metodi?

    5) In caso i parametri da passare ai PLC fossero di size diverse (word, doppie word e real) come dovrei gestire il trasferimento dati a txbuffer. dovrei istanziare un altro FB TCPDataExchClient e TCPDEXCHNODEDEFS, ma non avendo un’uscita done non saprei.

    Per adesso direi basta vediamo se mi vengono altri dubbi.

    in risposta a: Gestire un misuratore di portata ad impulsi #53647

    Ho preso spunto dal programma che hai postato. queste sono le istruzioni:

        IF (SysFirstLoop) THEN
            TimeBf:=SysTime;
        END_IF;
    
        K:=6.0/TO_REAL(Sec); (* Costante per risultato divisione *)
        Sec:=500; (* Tempo in millisecondi *)
        
        IF ((SysTime-TimeBf) < Sec) THEN RETURN; END_IF;
        TimeBf:=SysTime; (* Time buffer (uS) *)
    
        (* Calcolo litri ogni volta che è passato il tempo  "Sec" *)
    
        MemoCtr:=CONT.Value-MemoCtr; (* Memo counter *)
        L_Min:=((TO_REAL(MemoCtr)*1.815714)*K)/2; (* Litri istantanei (L/Min) *);
        MemoCtr:=CONT.Value; (* Memo counter *)
    
    (* [End of file] *)

    Poi per migliorare un po la risoluzione ho settato CONT.Mode A 64 cosi da contare anche gli impulsi sul fornte di discesa ed avere il doppio degli impulsi, come si nota nella stringa di calcolo L_Min alla fine divido il risultato per “2”

    in risposta a: Gestire un misuratore di portata ad impulsi #53362

    Mi è arrivato il sensore, e ho iniziato a fare delle prove. Sto utilizzando il FB SysGetCounter, e riesco a leggere gli impulsi ovviamente sotto forma di counter. Mi servirebbe però un aiuto nella scrittura di un programma che mi calcoli i litri al minuto istantanei in base agli impulsi. Quello che ho realizzato io adesso è il seguente.

    LI:=LI+1;
    IF (LI < 100) THEN RETURN; END_IF;
    LI:=0;
    
    LITRI:=CONT.Value-Counter;
    Counter:=CONT.Value;
    
    ISTA:=LITRI*0.0001666666*600.0;

    Praticamente ogni 100 ms calcolo la differenza tra il Cont.value e Counter (la differenza sarebbero gli impulsi in 100ms). La costante 0.0001666666 sarebbe il calcolo da 6000 impulsi su litro e trovo praticamente i litri ad impulso e moltiplico per 600.0. Quello che ho fatto io pare che funzioni abbastanza, ma mi da l’idea che sia poco sicuro, nel senso che quando il counter raggiunge il suo limite e si reinizializza non so che succede.

    Altro limite è che confrontando ogni 100ms il numero degli inpulsi è un valore abbastanza piccolo quindi con minima variazione si ha una differenza del risultato abbastanza grande. Potreste suggerirmi qualcosa?

Stai visualizzando 15 post - dal 1 a 15 (di 25 totali)