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.
Topologia di Bus

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:
- Bus senza derivazioni, è la migliore per il cablaggio, la lunghezza massima del cavo è di 350 metri con un totale di 20 sensori.
- 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.
- Bus con derivazioni lunghe, non è consigliata in quanto riduce la lunghezza massima del cavo a 100 metri con un totale di 20 sensori.
- 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.