Gestire dispositivi 1-Wire

Maxim Integrated (ex Dallas Semiconductor) ha sviluppato un sistema di comunicazione a singolo filo noto con il nome di 1-Wire bus. Questo Bus permette l’interazione tra dispositivi come sensori di temperatura, memorie, lettori RFiD ecc. utilizzando un yunico filo di comunicazione. E’ un sistema di comunicazione di tipo half-duplex, bi-direzionale, la comunicazione avviene tra il dispositivo “master” ed i dispositivi “slave” che condividono il bus.

Schema di principio bus 1-Wire

Topologia di Bus

Topologia collegamento Bus 1-Wire

I dispositivi 1-Wire garantiscono semplicità ed economicità di utilizzo, per ottenere un funzionamento ottimale occorre prestare attenzione al cablaggio del Bus. Utilizzare un cavo Cat5e, Cat6 o Cat7, per lunghe distanze e per il passaggio con i cavi di rete meglio utilizzare un cavo schermato, utilizzando sempre un doppino intrecciato per Dati e GND. Collegare un massimo di 20 sensori sul Bus indipendentemente dalla topologia di cablaggio. In base alla topologia di rete possiamo avere:

  1. Bus senza derivazioni, è la migliore per il cablaggio, la lunghezza massima del cavo è di 350 metri con un totale di 20 sensori.
  2. Bus con derivazioni corte, può dare risultati simili alla topologia senza rami, la lunghezza massima del cavo è di 300 metri con un totale di 20 sensori.
  3. Bus con derivazioni lunghe, non è consigliata in quanto riduce la lunghezza massima del cavo a 100 metri con un totale di 20 sensori.
  4. Bus a stella, siccome tutti i sensori sono riuniti in un punto è consigliata solo per piccole installazioni. La lunghezza massima del cavo è di 100 metri con un totale di 20 sensori.

Offerta Elsist

Oltre ai prodotti HW-group tutti basati su sensori 1-Wire, proponiamo una vasta gamma di dispositivi con protocollo 1-Wire, come sensori di temperatura, lettori TAGs, lettori RFiD, ecc. tutti i dispositivi sono collegabili a dispositivi master commerciali.

Il gateway ADA-401WP CEL-MAR permette di utilizzare i sensori 1-Wire in ambienti industriale rendendoli accessibili tramite protocollo Modbus RTU in RS485. Per acquisire i sensori con i nostri sistemi SlimLine con protocollo Modbus RTU è possibile utilizzare il FB ModbusMaster. Il programma ST_Gateway_ADA_401WP, esegue la lettura da un gateway a cui sono connessi 4 sensori, il valore acquisito viene scalato e convertito in variabili REAL.

LogicLab (Ptp114)
PROGRAM ST_Gateway_ADA_401WP
VAR
    Sp : SysSerialPort; (* Serial port *)
    Mdb : ModbusMaster; (* Modbus master FB *)
    RxData : ARRAY[ 0..3 ] OF INT; (* Rx data buffer *)
    Temperature : REAL; (* Temperature (°C) *)
    Sunlight : REAL; (* Sunlight (% SLux) *)
    TSet : REAL; (* Temperature set ((TA)°C) *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_Gateway_ADA_401WP"
// *****************************************************************************
// By using Modbus RTU over a serial line are readed 4 registers from ADA-401WP
// with node 64, 4 sensors are connected to the ADA-401WP gateway, the acquired
// value is scaled and converted into REAL variables.
//
// Channel 0: DES-300 temperature setting switch
// Channel 1: DES-216 solar light sensor
// Channel 2: DES-216 temperature sensor
//
// All the measurement value from measuring channels are presented by a 16-bit
// register. The registers with measuring value are in the format of 16-bit
// signed integer (C/C++ type short int).
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initializations.

    IF (SysFirstLoop) THEN

        // Serial port settings.

        Sp.COM:=ADR('COM0'); //COM port definition
        Sp.Baudrate:=9600; //Baudrate
        Sp.Parity:='N'; //Parity
        Sp.DataBits:=8; //Data bits
        Sp.StopBits:=1; //Stop bits
        Sp.DTRManagement:=DTR_AUTO_WO_TIMES; //DTR management
        Sp.DTRComplement:=FALSE; //DTR complement
        Sp.EchoFlush:=FALSE; //Received echo flush
        Sp.DTROnTime:=0; //DTR On time delay (mS)
        Sp.DTROffTime:=0; //DTR Off time delay (mS)
        Sp.FlushTm:=0; //Flush time (mS)
        Sp.RxSize:=0; //Rx buffer size
        Sp.TxSize:=0; //Tx buffer size

        // Modbus master settings.

        Mdb.SpyOn:=TRUE; //Spy On    
        Mdb.Type:=0; //Modbus type    
        Mdb.Node:=64; //Device modbus node    
        Mdb.FCode:=16#03; //Modbus function code    
        Mdb.Address:=1; //Modbus register address    
        Mdb.Points:=SIZEOF(RxData)/SIZEOF(RxData[0]); //Modbus register points    
        Mdb.Buffer:=ADR(RxData); //Memory buffer address    
        Mdb.IFTime:=286; //Interframe time (uS)    
        Mdb.Timeout:=500; //Timeout time (mS)    
        Mdb.Delay:=100; //Delay time (mS)    
    END_IF;

    // -------------------------------------------------------------------------
    // MODBUS MANAGEMENT
    // -------------------------------------------------------------------------
    // Manage the modbus master communication.

    Sp(Open:=TRUE); //Serial port management
    Mdb.File:=Sp.File; //File pointer    
    Mdb(); //Modbus master
    Mdb.Enable:=Sp.Opened AND NOT(Mdb.Done); //Modbus enable    

    // -------------------------------------------------------------------------
    // TEMPERATURE ADJUSTER CONVERSION
    // -------------------------------------------------------------------------
    // Sensor on channel 0 is a DES-300 temperature adjuster.
    // The actual value of temperature set by the use of temperature adjuster in
    // °C (5 To 40 [TA(°C)]) is obtained from register value diveded by 100.

    TSet:=TO_REAL(RxData[0])/100.0; //Temperature set ((TA)°C)

    // -------------------------------------------------------------------------
    // SUNLIGHT CONVERSION
    // -------------------------------------------------------------------------
    // Sensor on channel 1 is a DES-216 sunlight sensor.
    // The actual value of sunlight in percent % (0 To 100 [%SLux]) is obtained
    // from register value diveded by 10.

    Sunlight:=TO_REAL(RxData[1])/10.0; //Sunlight (% SLux)

    // -------------------------------------------------------------------------
    // TEMPERATURE CONVERSION
    // -------------------------------------------------------------------------
    // Sensor on channel 2 is a DES-216 temperature sensor.
    // The actual value of temperature in °C (-55 To +125 [°C]) is obtained from
    // register value diveded by 100.

    Temperature:=TO_REAL(RxData[2])/100.0; //Temperature (°C)

// [End of file]

Molti dei nostri moduli CPU SlimLine hanno nativa la gestione del protocollo 1-Wire master, è quindi possibile collegare direttamente i dispositivi al modulo. In alternativa è possibile utilizzare l’Adattatore 1-Wire a RS232 collegandolo ad una delle porte RS232. Nella libreria eLLab1WireLib forniamo i blocchi funzione per la gestione dei dispositivi 1-Wire, il FB OWireCore esegue la gestione del Bus, FB specifici permettono la gestione dei vari dispositivi connessi al Bus.

Was this article helpful?