Vai al contenuto

YottaA1MMng, Yottacontrol remote I/O modules

Vai all indice del manuale di programmazione
Tipo: Blocco funzione
Libreria LogicLab: eLLabMdbDevsLib
Libreria Codesys: Non disponibile

Questo blocco funzione da eseguire in task Back utilizzabile con modello a cascata, esegue la gestione dei moduli remoti Yottacontrol. 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 MType definire il tipo di modulo, in MMdb occorre passare l’indirizzo del FB di gestione protocollo Modbus, in Node definire l’indirizzo di nodo assegnato al modulo. Se modulo connesso si attiva MReady ed in uscita si avranno i dati acquisiti. E’ possibile modificare run-time il valore di MType per gestire più moduli utilizzando una sola istanza del FB.

Descrizione

Enable (BOOL) Comando abilitazione gestione modulo. Per rieseguire il comando disabilitare e poi riabilitare questo ingresso.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).
MType (YOTTA_A1_MDEFS) Tipo di modulo da gestire (Definizione).
MMdb (@ModbusMaster_v3) Indirizzo istanza FB ModbusMaster per gestione protocollo Modbus.
Node (USINT) Numero di nodo modbus su cui effettuare il comando (Range da 0 a 255).
RTime (TIME) Tempo attesa prima di ritentare i comandi in errore.
DOut (BOOL[0..15]) Comando uscite digitali (Funzione tipo di modulo).
AOut (WORD[0..7]) Valore uscite analogiche (Funzione tipo di modulo).
Done (BOOL) Esecuzione terminata, rimane attivo fino alla disabilitazione di Enable. Da collegare ad Enable del FB successivo se utilizzato in cascata.
MReady (BOOL) Attivo se comunicazione con modulo attiva.
SValues (BOOL) Su attivazione eseguire calcolo valori da settare in uscita al modulo.
AValues (BOOL) Su attivazione eseguire calcolo valori acquisiti dal modulo.
DInp (BOOL[0..15]) Stato ingressi digitali (Funzione tipo di modulo).
AInp (WORD[0..7]) Valore ingressi analogici (Funzione tipo di modulo).
Errors (UDINT) Contatore errori di esecuzione.

Immagine FB YottaA1MMng

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#40000000Er: Errore di esecuzione.

Esempi

Come utilizzare gli esempi
ST_YottaA1MMng: Viene eseguita la gestione di un modulo, modificare il tipo di modulo in base alle proprie esigenze. Nel programma viene gestita sia la connessione Modbus RTU seriale RS485 che Modbus TCP commentando la gestione da escludere. Sono riportate le formule di conversione da unità ingegneristica a valore di preset per le uscite analogiche e da valore acquisito ad unità ingegneristica per gli ingressi analogici.

LogicLab (Ptp141, ST_YottaA1MMng)
PROGRAM ST_YottaA1MMng
VAR
    i : UDINT; (* Auxiliary variable *)
    EUnit : REAL; (* Engineering unit *)
    Sp : SysSerialPort; (* Serial port management *)
    TCPClient : SysTCPClient; (* TCP client management *)
    MMdb : ModbusMaster_v3; (* Modbus master FB *)
    IOModule : YottaA1MMng; (* Yotta module *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_YottaA1MMng"
// *****************************************************************************
// The program manages a Yotta module.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // First program execution loop.

    IF (SysFirstLoop) THEN

        // Set serial port.

        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

        // Set TCP client FB.

        TCPClient.PeerAdd:=ADR('192.168.1.184'); //Peer address
        TCPClient.PeerPort:=502; //Peer port
        TCPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
        TCPClient.LocalPort:=0; //Local port
        TCPClient.FlushTm:=50; //Flush time (mS)
        TCPClient.LifeTm:=20; //Life time (S)
        TCPClient.RxSize:=128; //Rx buffer size
        TCPClient.TxSize:=128; //Tx buffer size

        // Set modbus master FB.

        MMdb.Type:=MODBUS_PROTOCOL#MDB_RTU; //Modbus protocol type
//      MMdb.Type:=MODBUS_PROTOCOL#MDB_TCP; //Modbus protocol type
        MMdb.Timeout:=T#500ms; //Timeout time
        MMdb.Delay:=T#100ms; //Delay time

        // Set Yotta module FB.

        IOModule.SpyOn:=TRUE; //Spy On
        IOModule.Node:=1; //Modbus node
        IOModule.MMdb:=ADR(MMdb); //Modbus master FB
        IOModule.MType:=YOTTA_A1_MDEFS#A1012; //Module type
        IOModule.MType:=YOTTA_A1_MDEFS#A1051; //Module type
        IOModule.MType:=YOTTA_A1_MDEFS#A1019; //Module type
        IOModule.RTime:=T#60s; //Retry time
    END_IF;

    // -------------------------------------------------------------------------
    // MODULE MANAGEMENT
    // -------------------------------------------------------------------------
    // Use serial connection for RS485 modules.

    Sp(Open:=TRUE); //Serial port management
    MMdb(File:=Sp.File); //Modbus master    

    // Use TCP connection for Ethernet and WiFi modules.

//  TCPClient(Connect:=TRUE); //TCPClient management
//  Mdb(File:=TCPClient.File); //Modbus master

    // Manage the module.

    IOModule(Enable:=NOT(IOModule.Done)); //Yotta A-1x55 module

    // -------------------------------------------------------------------------
    // ANALOG OUTPUTS SETTING
    // -------------------------------------------------------------------------
    // Convert engineering unit to module set value.
    // Use the proper formula according module settings.
    
    IF (IOModule.SValues) THEN

        // ---------------------------------------------------------------------
        // ANALOG OUTPUTS SETTING MODULE A-1x12
        // ---------------------------------------------------------------------
        // Outputs 0~1 Current output value

        IOModule.AOut[0]:=TO_WORD(EUnit*200.0); //0~20mA
        IOModule.AOut[0]:=TO_WORD((EUnit-4.0)*250.0); //4~20mA
    END_IF;

    // -------------------------------------------------------------------------
    // AANALOG INPUTS ACQUISITION
    // -------------------------------------------------------------------------
    // Convert module acquisition to engineering unit.
    // Use the proper formula according module settings.

    IF (IOModule.AValues) THEN

        // ---------------------------------------------------------------------
        // ANALOG INPUTS ACQUISITION MODULE A-1x12
        // ---------------------------------------------------------------------
        // Inputs 0~1 Current input value

        EUnit:=TO_REAL(IOModule.AInp[0])/1000.0;        //0~20mA
        EUnit:=(TO_REAL(IOModule.AInp[0])/1000.0)+4.0;    //4~20mA

        // Inputs 2~3 Temperature input value

        EUnit:=(TO_REAL(IOModule.AInp[0])-2000)/10.0;    //-200~+600°C

        // ---------------------------------------------------------------------
        // ANALOG INPUTS ACQUISITION MODULE A-1x19
        // ---------------------------------------------------------------------
        // Inputs 0~7 Current/Temperature input value

        EUnit:=(TO_REAL(IOModule.AInp[0])/1250.0)+4.0;    //0:4~20mA
        EUnit:=(TO_REAL(IOModule.AInp[0])/1250.0);        //1:0~20mA
        EUnit:=(TO_REAL(IOModule.AInp[0])-2100.0)/10.0;    //2:J Thermocouple (-210~+760°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-2700.0)/10.0;    //3:K Thermocouple (-270~+1370°C)
        EUnit:=TO_REAL(IOModule.AInp[0])-270.0;            //4:T Thermocouple (-270~+400°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-2700.0)/10.0;    //5:E Thermocouple (-270~+1000°C)
        EUnit:=TO_REAL(IOModule.AInp[0])/10.0;            //6:R Thermocouple (0~+1750°C)
        EUnit:=TO_REAL(IOModule.AInp[0])/10.0;            //7:S Thermocouple (0~+1750°C)
        EUnit:=TO_REAL(IOModule.AInp[0])/10.0;            //8:B Thermocouple (0~+1800°C)
        EUnit:=TO_REAL(IOModule.AInp[0])/10.0;            //9:10.2K Thermistor (0~+100°C)
        EUnit:=TO_REAL(IOModule.AInp[0])/10.0;            //10:10.3K Thermistor (0~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-100.0)/10.0;    //11:6.8K Thermistor (-10~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-100.0)/10.0;    //12:4.7K Thermistor (-10~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-200.0)/10.0;    //13:3.3K Thermistor (-20~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-200.0)/10.0;    //14:3K Thermistor (-20~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-200.0)/10.0;    //15:2.7K Thermistor (-20~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-200.0)/10.0;    //16:2.252K Thermistor (-20~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-300.0)/10.0;    //17:2.1K Thermistor (-30~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-300.0)/10.0;    //18:2K Thermistor (-30~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-300.0)/10.0;    //19:1.5K Thermistor (-30~+100°C)
        EUnit:=(TO_REAL(IOModule.AInp[0])-400.0)/10.0;    //20:1K Thermistor (-40~+100°C)
    END_IF;

// [End of file]
Was this article helpful?