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.

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#40000000 | Er: 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]