Questo blocco funzione da eseguire in task Back utilizzabile con modello a cascata, esegue la lettura delle variabili da sensore combinato temperatura, umidità e CO2 STHC102 della Sensit tramite connessione seriale RS485 con protocollo Modbus (9600, n, 8, 1). Permette di essere utilizzato in cascata con altri FB della libreria, collegando il Done di una FB con Enable di quella successiva è possibile creare catene di FB che condividono la stessa connessione Modbus.
In MMdb occorre passare l’indirizzo del FB di gestione protocollo Modbus, in Node definire l’indirizzo di nodo assegnato al dispositivo (Default 1). Se dispositivo connesso si attiva DReady ed in uscita si avranno i dati acquisiti.
Upgrade list
- Se l’oggetto aggiornato non è nell’ultima versione del package, vedi capitolo “Aggiornamento librerie” in questo articolo.
- Gli oggetti obsoleti sono inseriti nella libreria eLLabObsoleteLib fare riferimento al relativo manuale ed al manuale programmazione in formato pdf.
SensitSTHC102_v1
Utilizza il nuovo blocco funzione ModbusMaster_v1, tutti gli altri parametri rimangono inalterati.
SensitSTHC102_v2
Utilizza il nuovo blocco funzione ModbusMaster_v2, tutti gli altri parametri rimangono inalterati.
SensitSTHC102_v3
Utilizza il nuovo blocco funzione ModbusMaster_v3, tutti gli altri parametri rimangono inalterati.
SensitSTHC102_v4
Inserita gestione nuovo sensore STHCPV, aggiunto variabili in uscita Type, APressure e IAQ.
Descrizione
Enable (BOOL) Comando abilitazione gestione.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento del FB (Vedi articolo).
MMdb (@ModbusMaster_v3) Indirizzo istanza FB ModbusMaster per gestione protocollo Modbus.
Node (USINT) Nodo Modbus assegnato al dispositivo.
Done (BOOL) Esecuzione terminata, rimane attivo fino alla disabilitazione di Enable.
Fault (BOOL) Attivo per un loop se errore di esecuzione.
Ok (BOOL) Attivo per un loop al termine della acquisizione dati.
DReady (BOOL) Attivo se dispositivo connesso.
Errors (UDINT) Numero errori di esecuzione.
Type (STRING[16]) Tipo di sensore.
ModuleID (WORD) Identificativo modulo (16#F204).
Firmware (UINT) Versione firmware.
Serial (UDINT) Numero di serie.
APressure (REAL) Pressione atmosferica (Pa).
Temperature (REAL) Temperatura (°C).
Humidity (REAL) Umidità (%).
CO2 (REAL) CO2 (ppm).
IAQ (REAL) Air quality.

Impostazione parametri
La configurazione del sensore è eseguita con comandi Modbus, i registri interessati sono:
- Registro 3: Status: Occorre settare il bit 0 LSB che abilita la scrittura in EEPROM ed il bit 2 MSB che trasferisce in EEPROM i dati ricevuti dai successivi comandi Modbus.
- Registro 4: Sul byte LSB occore definire l’indirizzo Modbus e sul byte MSB il baud rate da impostare.
10:1200, 11:2400, 12:4800, 13:9600 (Default), 14:19200, 15:38400, 16:57600, 17:115200 - Registro 5: Sul byte LSB occore definire sui bits 0-1 la parità 0:No parity (Default), 1:Even, 2:Odd
Sul bit 2 il numero di bits dato 0:1 bit, 1:2 bit
Il byte MSB è 0.
Eseguito il comando Modbus di impostazione affinchè i nuovi parametri vengano accettati è necessario spegnere e riaccendere il sensore. Negli esempi in basso il programma in ST che gestisce la configurazione del sensore.
Trigger di spy
Se SpyOn attivo è possibile utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Livelli di trigger
Trigger | Descrizione |
---|---|
16#10000000 | Lg: Log esecuzione. |
Esempi
Come utilizzare gli esempi.
SensitSTHC102Config: Da utilizzare per configurare il sensore, dopo avere definito i valori da impostare, trasferire il programma, al primo loop di esecuzione viene effettuata la configurazione del sensore. IsConfigured si attiva se configurazione riuscita. Terminata la configurazione spegnere ed accendere il sensore per utilizzare i nuovi parametri.
ST_SensitSTHC102: Sono gestiti 3 sensori STHC connessi in Modbus i vari FB sono eseguiti in cascata, in questo modo terminata l’esecuzione del primo, viene eseguito il successivo e così di seguito fino all’ultimo che disabilita il primo facendo ripartire la sequenza.
LogicLab (Ptp141, SensitSTHC102Config)
PROGRAM SensitSTHC102Config
VAR
IsConfigured : BOOL; (* Sensor is configured *)
Sp : SysSerialPort; (* Serial port management *)
MMdb : ModbusMaster_v3; (* Modbus master *)
ACData : ACMODBUS_DATA_V3; (* Array command data *)
RValues : ARRAY[0..2] OF WORD; (* Register values *)
ACMdb : ACModbus_v3; (* Array command modbus *)
END_VAR
// *****************************************************************************
// PROGRAM "SensitSTHC102Config"
// *****************************************************************************
// This program configures the Sensit STHC102 sensor.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initializations.
IF (SysFirstLoop) THEN
// Serial port settings.
Sp.COM:=ADR('COM2'); //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.
MMdb.Type:=MODBUS_PROTOCOL#MDB_RTU; //Modbus protocol type
MMdb.Timeout:=T#1s; //Timeout time
MMdb.Delay:=T#100ms; //Delay time
// Array command modbus settings.
ACMdb.ACAdd:=ADR(ACData); //Array command address
ACMdb.ACNr:=1; //Array command number
ACMdb.RTime:=T#10s; //Retry time
// Array command parameters settings.
ACData.Command.0:=TRUE; //Spy On
ACData.Command.1:=FALSE; //Absolute addressing
ACData.FCode:=16#10; //Modbus function code
ACData.Address:=3; //Modbus register address
ACData.Points:=3; //Modbus register points
ACData.Buffer:=ADR(RValues); //Memory buffer address
// STHC102 Status register.
// LSB Bit 0: Enable writing in EEPROM
// MSB Bit 1: When the next data is written it's stored in EEPROM
RValues[0]:=16#0201; //Register 3: Status
// ---------------------------------------------------------------------
// STHC CONFIGURATION PARAMETERS
// ---------------------------------------------------------------------
// The following parameters must be set according to your requirements.
// ---------------------------------------------------------------------
// Define the modbus node of the sensors to be configured.
ACData.Node:=1; //Modbus node (01)
// Set the serial baud rate to be set on the sensor.
// 10: 1200 bps
// 11: 2400 bps
// 12: 4800 bps
// 13: 9600 bps (Default)
// 14: 19200 bps
// 15: 38400 bps
// 16: 57600 bps
// 17: 115200 bps
RValues[1]:=13; //Serial baud rate (9600 bps)
// Set the modbus node to be set on the sensor.
RValues[1]:=(RValues[1]*256)+2; //Modbus node (02)
// Set the serial number of bit to be set on the sensor.
// 0: One (Default)
// 1: Two
RValues[2]:=0; //Serial number of bit (One)
// Set the serial parity to be set on the sensor.
// 0: No parity (Default)
// 1: Even parity
// 2: Odd parity
RValues[2]:=(RValues[2]*4)+0; //Serial parity (No parity)
END_IF;
// -------------------------------------------------------------------------
// EXECUTE THE SENSOR SETTING
// -------------------------------------------------------------------------
// Manage the Modbus communication.
Sp(Open:=TRUE); //Serial port management
MMdb(File:=Sp.File); //Modbus master
ACMdb(MMdb:=ADR(MMdb)); //Array command modbus
// Wait the serial port opening.
ACMdb.Enable:=NOT(IsConfigured) AND Sp.Opened; //Enable FB
IF (ACData.Status.0) THEN IsConfigured:=TRUE; END_IF;
// [End of file]
LogicLab (Ptp141, ST_SensitSTHC102)
PROGRAM ST_SensitSTHC102
VAR
i : UDINT; (* Auxiliary variable *)
Sp : SysSerialPort; (* Serial port management *)
MMdb : ModbusMaster_v3; (* Modbus master *)
STHC : ARRAY[0..2] OF SensitSTHC102_v4; (* STHC102 thermometer *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_SensitSTHC102"
// *****************************************************************************
// This program acquires 3 Sensit STHC102 sensors.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initializations.
IF (SysFirstLoop) THEN
// Serial port settings.
Sp.COM:=ADR('COM2'); //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.
MMdb.SpyOn:=TRUE; //Spy On
MMdb.Type:=MODBUS_PROTOCOL#MDB_RTU; //Modbus protocol type
MMdb.Timeout:=T#1s; //Timeout time
MMdb.Delay:=T#100ms; //Delay time
// STHC parameters settings.
STHC[0].Node:=1; //Modbus node
STHC[0].MMdb:=ADR(MMdb); //ModbusMaster pointer
STHC[1].Node:=2; //Modbus node
STHC[1].MMdb:=ADR(MMdb); //ModbusMaster pointer
STHC[2].Node:=3; //Modbus node
STHC[2].MMdb:=ADR(MMdb); //ModbusMaster pointer
END_IF;
// -------------------------------------------------------------------------
// STHC SENSORS MANAGEMENT
// -------------------------------------------------------------------------
// Manage the Modbus communication.
Sp(Open:=TRUE); //Serial port management
MMdb.File:=Sp.File; //File pointer
MMdb(); //Modbus master
// Acquires the sensors.
STHC[0].Enable:=NOT(STHC[2].Done); //FB enable
STHC[1].Enable:=STHC[0].Done; //FB enable
STHC[2].Enable:=STHC[1].Done; //FB enable
FOR i:=0 TO 2 DO STHC[i](); END_FOR;
// [End of file]