SensitSTHC102, Sensit STHC 102 thermometer acquisition

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

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. Se dispositivo connesso si attiva DReady ed in uscita si avranno i dati acquisiti.

Upgrade list

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.

Information Circle

Blocco funzione

CODESYS: Non disponibile

LogicLab: eLLabMdbDevsLib

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.
ModuleID (WORD) Identificativo modulo (16#F204).
Firmware (UINT) Versione firmware.
Serial (UDINT) Numero di serie.
Temperature (REAL) Temperatura (°C).
Humidity (REAL) Umidità (%).
CO2 (REAL) CO2 (ppm).

Immagine FB SensitSTHC102
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
TriggerDescrizione
16#10000000Lg: 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_v3; (* 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]
Was this article helpful?