Vai al contenuto

Acquisizione temperatura con sensori pirometrici

Home Forum Discussioni su problematiche generali Acquisizione temperatura con sensori pirometrici

Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Autore
    Post
  • #81122
    Anonimo
    Inattivo

    Dovrei realizzare un sistema per l’acquisizione di 18 sensori di temperatura pirometrici, pensavo di utilizzare come sensori i MEMS Thermal Sensors D6T della Omron.

    1. Ho visto che i sensori hanno una interfaccia I2C posso acquisirli utilizzando i Vs controllori programmabili?
    2. Qual’è la distanza di collegamento tra il PLC ed i sensori?
    3. Quanti sensori posso acquisire con un modulo PLC?
    #81124
    Sergio Bertana
    Amministratore del forum

    Abbiamo già affrontato l’acquisizione di questi sensori vediamo di rispondere alle tue domande. Ipotizzando di collegare il sensore al bus di espansione del ns modulo CPU per l’acquisizione utilizzeremo la funzione SysI2CWrRd.

    1. I sensori hanno interfaccia I2C ma come si evince dal manuale utente hanno indirizzo fisso (16#0A) quindi è possibile collegare un solo sensore al bus.
    2. Essendo il bus I2C delle estensioni dei ns moduli CPU, un bus a 400Khz la distanza massima ipotizzabile in sicurezza potrebbe essere 1 o 2 metri.
    3. Avendo il sesore unico indirizzo si può collegare 1 solo sensore.

    Ecco il programma che abbiamo realizzato per l’acquisizione di un sensore a 16 zone. Nell’array Pn sono presenti le 16 temperature delle zone acquisite dal sensore.

    PROGRAM D6TMeasure
    
    VAR
        i : UDINT; (* Auxiliary variable *)
        CaseNr : USINT; (* Program case *)
        TimeBf : UDINT; (* Time buffer (uS) *)
        Errors : ARRAY[0..1] OF UDINT; (* Error counter *)
        I2CWrite : ARRAY[0..1] OF BYTE; (* I2C write buffer *)
        I2CRead : ARRAY[0..63] OF BYTE; (* I2C read buffer *)
        PTAT : REAL; (*Reference temperature (°C) *)
        Pn: ARRAY[0..15] OF REAL; (* Temperature points (°C) *)
    END_VAR
    
    // *****************************************************************************
    // PROGRAM "D6TMeasure"
    // *****************************************************************************
    // Acquires a Omron MEMS Thermal Sensors D6T.
    // -----------------------------------------------------------------------------
    
        // -------------------------------------------------------------------------
        // PROGRAM CASES
        // -------------------------------------------------------------------------
        // Program cases management.
    
        CASE (CaseNr) OF
    
            // ---------------------------------------------------------------------
            // Conversion command "Single Shot Mode high repeatability" clock
            // streching disabled.
    
            0:
            I2CWrite[0]:=16#4C; //Comando scrittura
            IF NOT(SysI2CWrRd(Address:=16#0A, WrBytes:=1, WrBuffer:=ADR(I2CWrite), RdBytes:=0, RdBuffer:=NULL)) THEN
                Errors[0]:=Errors[0]+1; //Error counter
                CaseNr:=0; //Program case
                RETURN;
            END_IF;
    
            // Save time to wait.
    
            TimeBf:=SysGetSysTime(TRUE);
            CaseNr:=CaseNr+1; //Program case
    
            // ---------------------------------------------------------------------
            // Wait conversion complete (Max time oh high repeatability 15 mS).
    
             1:
             IF ((SysGetSysTime(TRUE)-TimeBf) < 500000) THEN RETURN; END_IF;
    
            // Read the conversion results.
    
            IF NOT(SysI2CWrRd(Address:=16#0A, WrBytes:=0, WrBuffer:=NULL, RdBytes:=35, RdBuffer:=ADR(I2CRead))) THEN
                Errors[1]:=Errors[1]+1; //Error counter
                CaseNr:=0; //Program case
                RETURN;
            END_IF;
    
            // Acquire the reference temperature.
    
            PTAT:=TO_REAL(TO_INT((TO_UINT(I2CRead[1])*256+I2CRead[0])))/10.0;
    
            // Acquire the Pn temperatures.
    
            FOR i:=0 TO 15 DO
                Pn[i]:=TO_REAL(TO_INT((TO_UINT(I2CRead[3+(2*i)])*256+I2CRead[2+(2*i)])))/10.0;
            END_FOR;
    
            CaseNr:=0; //Program case
        END_CASE;
    
    // [End of file]
    #81131
    Sergio Bertana
    Amministratore del forum

    Aggiungo che vista la tua esigenza di acquisire più sensori e magari a distanze superiori ai 1 o 2 metri, posso consigliare di utilizzare il FB I2CBusManager con I2CMode:=1. In questo modo i segnali del bus I2C sono gestiti utilizzando una routine software con degli I/O digitali, la gestione del bus ha frequenze decisamente inferiori ma con segnali optoisolati dal sistema. Questo permette di aumentare molto la distanza garantendo anche una immunità ai disturbi.

    Anche in questo modo avresti il problema dell’unico sensore per ogni bus (Visto che l’indirizzo è fisso), ma utilizzando ad esempio il modulo MPS056B310 con 4 ingressi e 4 uscite potresti pilotare 2 diversi bus I2C ed acquisire 2 sensori.

    In alternativa si pootrebbe realizzare un FB ad-hoc dove si utilizza un ingresso ed 1 uscita per il segnale DATA e con 3 uscite si possono gestire 3 segnali CLOCK da utilizzare per il comando di 3 sensori. In questo modo un unico modulo CPU potrebbe acquisire 3 sensori.

    #81263
    Sergio Bertana
    Amministratore del forum

    Ho ripreso in mano il vecchio progetto e pensando alla tua esigenza di gestire più sensori in I2C localizzati distanti dal sensore di acquisizione ho utilizzato un modulo 817 con 4 optoisolatori che si trova a pochi euro su moltissimi siti in Internet. Collegando gli I/O di un nostro modulo di estensione statico come questo, è possibile arrivare al modulo con 2 ingressi e 2 uscite digitali con segnali a 24Vdc aumentando l’immunità al rumore.

    Il modulo provvede ad abbassare il livello del segnale ai 5Vdc per il sensore, un alimentatore a 5Vdc fornirà la tensione di alimentazione al sensore e tramite due resistenze di pull-up da 2200Ohm fornirà il livello alto ai segnali Clock e Data del bus I2C. Sul modulo 817 ho cortocircuitato (Resistenza oOhm) alcune resistenze (Vedi schema elettrico).

    Disponendo di molti I/O digitali con un solo modulo di estensione e un isolatore per ogni sensore potrai acquisire tutti i sensori di cui necessiti.

Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Devi essere connesso per rispondere a questo topic.