Questo blocco funzione da eseguire in task Back utilizzabile con modello a cascata, esegue la lettura del valore di umidità e temperatura da un sensore SHT3x della Sensirion come questo. Può essere utilizzato in cascata con altri FB della libreria, collegando il Done di un FB con Enable di quello successivo è possibile creare catene di FB che condividono lo stesso bus I2C.
In I2CMng occorre passare l’indirizzo del FB I2CBusManager di gestione bus I2C, in Address definire l’indirizzo I2C del sensore da acquisire. Eseguita l’acquisizione si attiva l’uscita Done e se valori acquisiti si attiva l’uscita Ok ed in uscita si avranno i dati acquisiti.
Descrizione
Enable (BOOL) Comando abilitazione gestione.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).
I2CMng (@I2CBusManager) Indirizzo istanza FB I2CBusManager di gestione bus I2C.
Address (USINT) Indirizzo I2C del sensore (Default 16#44).
Done (BOOL) Esecuzione terminata, rimane attivo fino alla disabilitazione di Enable.
Fault (BOOL) Attivo per un loop se errore acquisizione.
Ok (BOOL) Attivo per un loop su acquisizione dati.
Errors (UDINT) Ritorna conteggio numero di errori acquisizione.
Temperature (REAL) Valore di temperatura (°C).
Humidity (REAL) Valore umidità (%).

Trigger di spy
Se SpyOn attivo è possibile utilizzare utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Livelli di trigger
Trigger | Descrizione |
---|---|
16#00000001 | Ok: Fine acquisizione. |
16#40000000 | Er: Errore acquisizione. |
Esempi
ST_SHT3xAcquire: Viene eseguita l’acquisizione del valore di temperatura e di umidità da un sensore SHT30-DIS della Sensirion connesso al bus I2C di estensione del modulo SlimLine.
ST_SHT3xAcquireOnIOs: Viene eseguita l’acquisizione del valore di temperatura e di umidità da un sensore SHT30-DIS della Sensirion connesso al bus I2C simulato tramite I/O logici del modulo CPUSlimLine. Per lo schema di connessione degli I/O fare riferimento alla I2CBusManager.
LogicLab (Ptp176, ST_SHT3xAcquire)
PROGRAM ST_SHT3xAcquire
VAR
I2CBus : I2CBusManager; (* I2C bus management *)
Sensor : SHT3xAcquire; (* Sensor acquisition *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_SHT3xAcquire"
// *****************************************************************************
// Temperature and humidity acquisistion from a Sensirion SHT30-DIS attached to
// the extension bus.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// First program loop initialization.
IF (SysFirstLoop) THEN
// Initialize the I2C management.
I2CBus.I2CMode:=0; //I2C mode selection
// Initialize the sensor acquisition.
Sensor.SpyOn:=TRUE; //Spy on
Sensor.Address:=16#44; //I2C Address
Sensor.I2CMng:=ADR(I2CBus); //I2C bus managemen
END_IF;
// -------------------------------------------------------------------------
// SENSOR ACQUISITION
// -------------------------------------------------------------------------
// The sensor is acquired.
Sensor(Enable:=NOT(Sensor.Done)); //Sensor acquisition
// [End of file]
LogicLab (Ptp176, ST_SHT3xAcquireOnIOs)
PROGRAM ST_SHT3xAcquireOnIOs
VAR
DInp : SysGetPhrDI; (* Digital input acquisistion *)
DOut : SysSetPhrDO; (* Digital output management *)
I2CBus : I2CBusManager; (* I2C bus management *)
Sensor : SHT3xAcquire; (* Sensor acquisition *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_SHT3xAcquireOnIOs"
// *****************************************************************************
// Temperature and humidity acquisition from a Sensirion SHT30-DIS.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// First program loop initialization.
IF (SysFirstLoop) THEN
// Initialize the logic I/O management.
DInp.Address:=255; //Module address
DInp.Mode:=DI_I_8_LL; //Input mode
DOut.Address:=255; //Module address
DOut.Mode:=DO_8_LL; //Output mode
DOut.Mask:=16#00000003; //Output mask
// Initialize the I2C management.
I2CBus.SpyOn:=FALSE; //Spy on
I2CBus.I2CMode:=1; //I2C mode selection
I2CBus.BFrequency:=100.0; //Bus frequency (Hz)
// Initialize the sensor acquisition.
Sensor.SpyOn:=TRUE; //Spy on
Sensor.Address:=16#44; //I2C Address
Sensor.I2CMng:=ADR(I2CBus); //I2C bus management
END_IF;
// -------------------------------------------------------------------------
// I2C BUS MANAGEMENT
// -------------------------------------------------------------------------
// Manage the I2C bus on CPU module logic I/Os.
// The Di00 is used as Clock, Di01 is used as Data.
DInp(); //Dgital inputs acquisition
I2CBus.IClock:=NOT(DInp.Value.0); //Clock in signal
I2CBus.IData:=NOT(DInp.Value.1); //Data in signal
// The Do00 is used as Clock, Do01 is used as Data.
DOut.Value.0:=NOT(I2CBus.OClock); //Clock out signal
DOut.Value.1:=NOT(I2CBus.OData); //Data out signal
DOut(); //Digital output management
// -------------------------------------------------------------------------
// SENSOR ACQUISITION
// -------------------------------------------------------------------------
// The sensor is acquired.
Sensor(Enable:=NOT(Sensor.Done)); //Sensor acquisition
// [End of file]