Reorganizacion de libreria.

This commit is contained in:
2026-07-20 08:15:06 +02:00
parent e0b9f4a206
commit 2b9dbc1f27
280 changed files with 9799 additions and 9398 deletions
@@ -0,0 +1,12 @@
DATA_BLOCK "DB15990_FAT_DI"
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
NON_RETAIN
"FB15990_ZC_FAT_DI"
BEGIN
END_DATA_BLOCK
@@ -0,0 +1,12 @@
DATA_BLOCK "DB15991_FAT_DO"
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
NON_RETAIN
"FB15991_ZC_FAT_DO"
BEGIN
END_DATA_BLOCK
@@ -0,0 +1,12 @@
DATA_BLOCK "DB15992_FAT_AI"
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
NON_RETAIN
"FB15992_ZC_FAT_AI"
BEGIN
END_DATA_BLOCK
@@ -0,0 +1,12 @@
DATA_BLOCK "DB15993_FAT_AO"
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
NON_RETAIN
"FB15993_ZC_FAT_AO"
BEGIN
END_DATA_BLOCK
@@ -0,0 +1,123 @@
FUNCTION_BLOCK "FB15990_ZC_FAT_DI"
TITLE = FB15990_ZC_FAT_DI
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
//Bloque de funcion para pruebas de entradas digitales
VAR_INPUT
ByteEntrada { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : DInt := 0; // Direccion Byte entrada
Area { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Int := 0; // 0= Input / 1= Output / 2= Marcas / 3= DB / 4= Periferia
END_VAR
VAR_OUTPUT
Input_0 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Bool; // Bit 0
Input_1 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Bool; // Bit 1
Input_2 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Bool; // Bit 2
Input_3 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Bool; // Bit 3
Input_4 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Bool; // Bit 4
Input_5 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Bool; // Bit 5
Input_6 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Bool; // Bit 6
Input_7 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Bool; // Bit 7
END_VAR
VAR_TEMP
t_Area : Byte;
t_Input : Byte;
END_VAR
VAR CONSTANT
INPUT : Byte := 16#81; // Input
OUTPUT : Byte := 16#82; // Output
MARCAS : Byte := 16#83; // Marcas
"DB" : Byte := 16#84; // DB
PERIFERIA : Byte := 16#1; // Entrada de periferia (solo S7-1500)
END_VAR
BEGIN
REGION DESCRIPCION
(*
###### (C)Copyright ZeusControl 2023 - 2023
---
### Información del Sistema
| Hardware Compatible | Entorno de Ingeniería |
|---------------------|-----------------------|
| PLC serie 1200/1500 | TIA Portal 18 |
---
> **Restricciones:** Ninguna.
---
### Descripción Funcional
Función para el forzado de las entradas digitales para las pruebas FAT de los cuadros.
---
### Dependencias Requeridas
| Tipo | Elementos |
|------|-----------|
| FC | - |
| FB | - |
| DB | - |
| UDT | - |
---
### Historial de Cambios
| Versión | Fecha | Técnico | Cambios |
|----------|------------|---------|---------|
| 01.00.00 | 12.09.2023 | (ABH) | Primera version. |
*)
END_REGION DESCRIPCION
// ==========================================================================================================
REGION GESTION_TIPO
// Gestion de tipo
CASE #Area OF
0:
#t_Area := #INPUT;
1:
#t_Area := #OUTPUT;
2:
#t_Area := #MARCAS;
3:
#t_Area := #DB;
4:
#t_Area := #PERIFERIA;
ELSE
#t_Area := #INPUT;
END_CASE;
END_REGION GESTION_TIPO
// ==========================================================================================================
REGION LECTURA
// Lectura de BYTE de entradas
#t_Input := PEEK_BYTE(area := #t_Area, dbNumber := 0, byteOffset := #ByteEntrada);
END_REGION LECTURA
// ==========================================================================================================
REGION SALIDAS
// Gestion de salidas
#Input_0 := #t_Input.%X0;
#Input_1 := #t_Input.%X1;
#Input_2 := #t_Input.%X2;
#Input_3 := #t_Input.%X3;
#Input_4 := #t_Input.%X4;
#Input_5 := #t_Input.%X5;
#Input_6 := #t_Input.%X6;
#Input_7 := #t_Input.%X7;
END_REGION SALIDAS
END_FUNCTION_BLOCK
@@ -0,0 +1,128 @@
FUNCTION_BLOCK "FB15991_ZC_FAT_DO"
TITLE = FB15991_ZC_FAT_DO
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
//Bloque de funcion para pruebas de salidas digitales
VAR_INPUT
ByteSalida : DInt := 0; // Direccion Byte salida
Area : Int := 1; // 0= Input / 1= Output / 2= Marcas / 3= DB / 4= Periferia
END_VAR
VAR
OrdenSalida : Array[0..7] of Bool;
END_VAR
VAR RETAIN
s_oldByteSalida : DInt;
END_VAR
VAR_TEMP
for_i : Int;
t_Area : Byte;
END_VAR
VAR CONSTANT
INPUT : Byte := 16#81; // Input
OUTPUT : Byte := 16#82; // Output
MARCAS : Byte := 16#83; // Marcas
"DB" : Byte := 16#84; // DB
PERIFERIA : Byte := 16#1; // Entrada de periferia (solo S7-1500)
END_VAR
BEGIN
REGION DESCRIPCION
(*
###### (C)Copyright ZeusControl 2023 - 2024
---
### Información del Sistema
| Hardware Compatible | Entorno de Ingeniería |
|---------------------|-----------------------|
| PLC serie 1200/1500 | TIA Portal 18 |
---
> **Restricciones:** Ninguna.
---
### Descripción Funcional
Función para el forzado de las salidas digitales para las pruebas FAT de los cuadros.
---
### Dependencias Requeridas
| Tipo | Elementos |
|------|-----------|
| FC | - |
| FB | - |
| DB | - |
| UDT | - |
---
### Historial de Cambios
| Versión | Fecha | Técnico | Cambios |
|----------|------------|---------|---------|
| 01.00.00 | 12.09.2023 | (ABH) | Primera version. |
| 01.00.01 | 24.05.2024 | (ABH) | Se añade gestion desactivacion de salidas al cambio de direccion. |
*)
END_REGION DESCRIPCION
// ==========================================================================================================
REGION GESTION_TIPO
// Gestion de tipo
CASE #Area OF
0:
#t_Area := #INPUT;
1:
#t_Area := #OUTPUT;
2:
#t_Area := #MARCAS;
3:
#t_Area := #DB;
4:
#t_Area := #PERIFERIA;
ELSE
#t_Area := #INPUT;
END_CASE;
END_REGION GESTION_TIPO
REGION SALIDAS
// Gestion desactivacion salidas al cambio de direccion
IF #s_oldByteSalida <> #ByteSalida THEN
FOR #for_i := 0 TO 7 DO
POKE_BOOL(area := #t_Area,
dbNumber := 0,
byteOffset := #s_oldByteSalida,
bitOffset := #for_i,
value := FALSE);
#OrdenSalida[#for_i] := FALSE;
END_FOR;
END_IF;
// Escritura de bit de salidas
FOR #for_i := 0 TO 7 DO
POKE_BOOL(area := #t_Area,
dbNumber := 0,
byteOffset := #ByteSalida,
bitOffset := #for_i,
value := #OrdenSalida[#for_i]);
END_FOR;
#s_oldByteSalida := #ByteSalida;
END_REGION SALIDAS
END_FUNCTION_BLOCK
@@ -0,0 +1,112 @@
FUNCTION_BLOCK "FB15992_ZC_FAT_AI"
TITLE = FB15992_ZC_FAT_AI
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
//Bloque de funcion para pruebas de entradas analogicas
VAR_INPUT
ByteEntrada { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : DInt := 0; // Direccion Byte entrada
Area { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Int := 0; // 0= Input / 1= Output / 2= Marcas / 3= DB / 4= Periferia
END_VAR
VAR_OUTPUT
Input_Raw { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : DInt; // Valor bruto del canal
Input_0_100 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Real; // Valor porcentaje
END_VAR
VAR_TEMP
t_Area : Byte;
t_Input : DInt;
END_VAR
VAR CONSTANT
INPUT : Byte := 16#81; // Input
OUTPUT : Byte := 16#82; // Output
MARCAS : Byte := 16#83; // Marcas
"DB" : Byte := 16#84; // DB
PERIFERIA : Byte := 16#1; // Entrada de periferia (solo S7-1500)
VALOR_MAX_TARJETA : Real := 27648.0; // Valor maximo de tarjeta
END_VAR
BEGIN
REGION DESCRIPCION
(*
###### (C)Copyright ZeusControl 2023 - 2023
---
### Información del Sistema
| Hardware Compatible | Entorno de Ingeniería |
|---------------------|-----------------------|
| PLC serie 1200/1500 | TIA Portal 18 |
---
> **Restricciones:** Ninguna.
---
### Descripción Funcional
Función para el forzado de las entradas analogicas para las pruebas FAT de los cuadros.
---
### Dependencias Requeridas
| Tipo | Elementos |
|------|-----------|
| FC | - |
| FB | - |
| DB | - |
| UDT | - |
---
### Historial de Cambios
| Versión | Fecha | Técnico | Cambios |
|----------|------------|---------|---------|
| 01.00.00 | 12.09.2023 | (ABH) | Primera version. |
*)
END_REGION DESCRIPCION
// ==========================================================================================================
REGION GESTION_TIPO
// Gestion de tipo
CASE #Area OF
0:
#t_Area := #INPUT;
1:
#t_Area := #OUTPUT;
2:
#t_Area := #MARCAS;
3:
#t_Area := #DB;
4:
#t_Area := #PERIFERIA;
ELSE
#t_Area := #INPUT;
END_CASE;
END_REGION GESTION_TIPO
// ==========================================================================================================
REGION LECTURA
// Lectura de entrada analogica
#t_Input := WORD_TO_INT(PEEK_WORD(area := #t_Area, dbNumber := 0, byteOffset := #ByteEntrada));
END_REGION LECTURA
// ==========================================================================================================
REGION SALIDAS
// Gestion de salidas
#Input_Raw := #t_Input;
#Input_0_100 := (DINT_TO_REAL(#t_Input) * 100) / #VALOR_MAX_TARJETA;
END_REGION SALIDAS
END_FUNCTION_BLOCK
@@ -0,0 +1,145 @@
FUNCTION_BLOCK "FB15993_ZC_FAT_AO"
TITLE = FB15993_ZC_FAT_AO
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
//Bloque de funcion para pruebas de salidas analogicas
VAR_INPUT
ByteSalida { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : DInt := 0; // Direccion Byte entrada
Area { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Int := 1; // 0= Input / 1= Output / 2= Marcas / 3= DB / 4= Periferia
END_VAR
VAR_OUTPUT
Salida_Raw { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : DInt; // Valor bruto del canal
END_VAR
VAR_IN_OUT
Salida_0_100 { S7_HiddenAssignment := 'HideIfNoParamAssigned'} : Real; // Valor en porcentaje
END_VAR
VAR RETAIN
s_oldByteSalida : DInt;
END_VAR
VAR_TEMP
t_Area : Byte;
t_Salida : Int;
t_Salida_0_100 : Real;
END_VAR
VAR CONSTANT
INPUT : Byte := 16#81; // Input
OUTPUT : Byte := 16#82; // Output
MARCAS : Byte := 16#83; // Marcas
"DB" : Byte := 16#84; // DB
PERIFERIA : Byte := 16#1; // Entrada de periferia (solo S7-1500)
VALOR_MAX_TARJETA : Real := 27648.0; // Valor maximo de tarjeta
VALOR_CERO : Word;
END_VAR
BEGIN
REGION DESCRIPCION
(*
###### (C)Copyright ZeusControl 2023 - 2023
---
### Información del Sistema
| Hardware Compatible | Entorno de Ingeniería |
|---------------------|-----------------------|
| PLC serie 1200/1500 | TIA Portal 18 |
---
> **Restricciones:** Ninguna.
---
### Descripción Funcional
Función para el forzado de las salidas analogicas para las pruebas FAT de los cuadros.
---
### Dependencias Requeridas
| Tipo | Elementos |
|------|-----------|
| FC | - |
| FB | - |
| DB | - |
| UDT | - |
---
### Historial de Cambios
| Versión | Fecha | Técnico | Cambios |
|----------|------------|---------|---------|
| 01.00.00 | 12.09.2023 | (ABH) | Primera version. |
| 01.00.00 | 24.05.2024 | (ABH) | Se añade gestion desactivacion de salidas al cambio de direccion. |
*)
END_REGION DESCRIPCION
// ==========================================================================================================
REGION GESTION_TIPO
// Gestion de tipo
CASE #Area OF
0:
#t_Area := #INPUT;
1:
#t_Area := #OUTPUT;
2:
#t_Area := #MARCAS;
3:
#t_Area := #DB;
4:
#t_Area := #PERIFERIA;
ELSE
#t_Area := #INPUT;
END_CASE;
END_REGION GESTION_TIPO
// ==========================================================================================================
REGION CALCULOS
// Calculo de valor puntos tarjeta en base a porcentaje
#t_Salida_0_100 := #Salida_0_100;
IF #t_Salida_0_100 < 0.0 THEN
#t_Salida_0_100 := 0.0;
END_IF;
IF #t_Salida_0_100 > 100.0 THEN
#t_Salida_0_100 := 100.0;
END_IF;
#t_Salida := REAL_TO_INT((#t_Salida_0_100 * #VALOR_MAX_TARJETA) / 100);
END_REGION CALCULOS
// ==========================================================================================================
REGION SALIDAS
// Gestion desactivacion salidas al cambio de direccion
IF #s_oldByteSalida <> #ByteSalida THEN
POKE(area := 16#82,
dbNumber := 0,
byteOffset := #s_oldByteSalida,
value := #VALOR_CERO);
#Salida_0_100 := 0;
END_IF;
// Escritura de salida analogica
POKE(area := 16#82,
dbNumber := 0,
byteOffset := #ByteSalida,
value := INT_TO_WORD(#t_Salida));
// Gestion de salidas
#Salida_Raw := #t_Salida;
#s_oldByteSalida := #ByteSalida;
END_REGION SALIDAS
END_FUNCTION_BLOCK
@@ -0,0 +1,12 @@
DATA_BLOCK "DB15994_ZC_INICIALIZAR_DISP"
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
NON_RETAIN
"FB15994_ZC_INICIALIZAR_DISP"
BEGIN
END_DATA_BLOCK
@@ -0,0 +1,12 @@
DATA_BLOCK "DB15995_ZC_BUSCAR_DIR"
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
NON_RETAIN
"FB15995_ZC_BUSCAR_DIR"
BEGIN
END_DATA_BLOCK
@@ -0,0 +1,119 @@
FUNCTION_BLOCK "FB15994_ZC_INICIALIZAR_DISP"
TITLE = FB15994_ZC_INICIALIZAR_DISP
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
VAR_INPUT
N_MAX_MUX_DISP : Int;
END_VAR
VAR
s_Inicializar : Bool;
END_VAR
VAR_TEMP
for_i : Int;
END_VAR
BEGIN
REGION DESCRIPCION
(*
###### (C)Copyright ZeusControl 2025 - 2025
---
### Información del Sistema
| Hardware Compatible | Entorno de Ingeniería |
|---------------------|-----------------------|
| PLC serie 1200/1500 | TIA Portal 18 |
---
> **Restricciones:** Ninguna.
---
### Descripción Funcional
Función para la inicializacion de valores de dispositivos.el forzado de las entradas digitales para las pruebas FAT de los cuadros.
En ella se realizan las siguientes acciones:
- Comprobacion de inicializar, para salida rapida de la funcion.
- Reset de los indices del multiplexado para evitar problemas al cargar los datos.
- Copia de valores copiados desde excel para inicializar las configuraciones de los dispositivos.
---
### Dependencias Requeridas
| Tipo | Elementos |
|------|-----------|
| FC | - |
| FB | - |
| DB | `DB2000_ED`, `DB2001_EA`, `DB2005_SD`, `DB2006_SA`, `DB2010_V`, `DB2015_M`, `DB2016_M_VF`, `DB2025_TOT`, `DB2039_TQ` |
| UDT | - |
---
### Historial de Cambios
| Versión | Fecha | Técnico | Cambios |
|----------|------------|---------|---------|
| 01.00.00 | 21.05.2025 | (ABH) | Primera version. |
*)
END_REGION DESCRIPCION
// ==========================================================================================================
REGION INICIALIZACION
// Si no hay orden de inicializar, salimos del bloque
IF NOT #s_Inicializar THEN
RETURN;
END_IF;
END_REGION INICIALIZACION
// ==========================================================================================================
REGION RESET_INDICES_MULTIPLEXADO
FOR #for_i := 0 TO #N_MAX_MUX_DISP DO
"DB2800_ED_MUX".Mux.Scada[#for_i].Index :=
"DB2801_EA_MUX".Mux.Scada[#for_i].Index :=
"DB2805_SD_MUX".Mux.Scada[#for_i].Index :=
"DB2806_SA_MUX".Mux.Scada[#for_i].Index :=
"DB2810_V_MUX".Mux.Scada[#for_i].Index :=
"DB2815_M_MUX".Mux.Scada[#for_i].Index :=
"DB2816_M_VF_MUX".Mux.Scada[#for_i].Index :=
"DB2817_M_SINA_MUX".Mux.Scada[#for_i].Index :=
"DB2825_TOT_MUX".Mux.Scada[#for_i].Index :=
"DB2840_TQ_MUX".Mux.Scada[#for_i].Index :=
"DB2841_TQ_AE_MUX".Mux.Scada[#for_i].Index := 0;
END_FOR;
END_REGION
// ==========================================================================================================
// RELLENAR CON VALORES DE EXCEL.
// RECORDAR:
// DESPUES DE INICIALIZAR, BORRAR LOS DATOS PARA NO GASTAR MEMORIA DEL PLC
REGION VALORES_DISPOSITIVOS
END_REGION
// ==========================================================================================================
REGION RESET_ORDENES
// Reset orden inicializar
#s_Inicializar := FALSE;
END_REGION
END_FUNCTION_BLOCK
@@ -0,0 +1,396 @@
FUNCTION_BLOCK "FB15995_ZC_BUSCAR_DIR"
TITLE = FB15995_ZC_BUSCAR_DIR
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
FAMILY : ZeusControl
VERSION : 1.0
//Bloque de funcion para comprobacion de direcciones configuradas en el sistema
VAR
s_Buscar : Bool; // Orden buscar
END_VAR
VAR RETAIN
s_EntradaDigital : Struct
Habilitar : Bool;
Encontrada : Bool;
NumeroByte : Int;
NumeroBit : Int;
Dispositivo : String;
END_STRUCT;
s_Salidadigital : Struct
Habilitar : Bool;
Encontrada : Bool;
NumeroByte : Int;
NumeroBit : Int;
Dispositivo : String;
END_STRUCT;
s_EntradaAnalogica : Struct
Habilitar : Bool;
Encontrada : Bool;
NumeroByte : Int;
Dispositivo : String;
END_STRUCT;
s_SalidaAnalogica : Struct
Habilitar : Bool;
Encontrada : Bool;
NumeroByte : Int;
Dispositivo : String;
END_STRUCT;
END_VAR
VAR_TEMP
for_i : Int;
t_N_MAX_ED : Int;
t_N_MAX_EA : Int;
t_N_MAX_SD : Int;
t_N_MAX_SA : Int;
t_N_MAX_V : Int;
t_N_MAX_M : Int;
t_N_MAX_M_VF : Int;
t_N_MAX_TOT : Int;
END_VAR
VAR CONSTANT
DISP_ED : String := 'ED-';
DISP_EA : String := 'EA-';
DISP_SD : String := 'SD-';
DISP_SA : String := 'SA-';
DISP_V : String := 'V-';
DISP_M : String := 'M-';
DISP_M_VF : String := 'M-VF-';
DISP_TOT : String := 'TOT-';
END_VAR
BEGIN
REGION DESCRIPCION
//=======================================================================
// (C)Copyright ZeusControl 2023 - 2026
//=======================================================================
(*
### Información del Sistema
| Hardware Compatible | Entorno de Ingeniería |
|---------------------|-----------------------|
| PLC serie 1200/1500 | TIA Portal 18 |
---
### Descripción Funcional
El bloque implementa un buscador de direccionamiento de E/S que, a partir de una dirección física (byte/bit para digitales o byte para analógicas), localiza todos los dispositivos del proyecto que la utilizan y devuelve una cadena de texto con la relación de los mismos. Es una herramienta de trazabilidad y diagnóstico que facilita al ingeniero la identificación rápida del uso de cada punto de E/S.
Funcionalidades principales:
- Búsqueda de entradas digitales (`s_EntradaDigital`): se le indica un byte y un bit, y el bloque recorre los dispositivos `ED` (Entradas Digitales), `V` (Válvulas), `M` (Motores), `M_VF` (Motores con Variador de Frecuencia) y `TOT` (Totalizados) comparando el byte/bit configurado en cada uno con el solicitado. Para las válvulas y motores también coteja los retornos de reposo y trabajo, así como el retorno de confirmación de marcha y térmico.
- Búsqueda de entradas analógicas (`s_EntradaAnalogica`): se le indica un byte y el bloque recorre los dispositivos `EA` (Entradas Analógicas) comparando la dirección de entrada configurada.
- Búsqueda de salidas digitales (`s_Salidadigital`): se le indica un byte y un bit, y el bloque recorre los dispositivos `SD` (Salidas Digitales), `V` (Válvulas), `M` (Motores) y `M_VF` (Motores con Variador de Frecuencia) comparando el byte/bit de salida configurado.
- Búsqueda de salidas analógicas (`s_SalidaAnalogica`): se le indica un byte y el bloque recorre los dispositivos `SA` (Salidas Analógicas) y `M_VF` (Motores con Variador de Frecuencia, salida analógica de consigna) comparando la dirección de salida configurada.
- En cada búsqueda se valida el rango del bit (entre 1 y 7) cuando aplica, y se construye la cadena de resultados concatenando el prefijo del tipo de dispositivo (`#DISP_ED`, `#DISP_V`, `#DISP_M`, `#DISP_M_VF`, `#DISP_TOT`, `#DISP_EA`, `#DISP_SD`, `#DISP_SA`) con el índice convertido a texto mediante `FC15001_ZC_INT_TO_STRING`, separando cada coincidencia con el carácter `;`.
- Activación del flag `Encontrada` cuando existe al menos una coincidencia.
- Inicialización de la estructura de resultados (`Encontrada := FALSE` y `Dispositivo := ''`) al inicio de cada búsqueda, y reseteo del bit fuera de rango.
> **Restricciones:** Ninguna.
---
### Dependencias Requeridas
| Tipo | Elementos |
|------|-----------|
| FC | `FC15001_ZC_INT_TO_STRING` |
| FB | - |
| DB | `DB2000_ED`, `DB2001_EA`, `DB2005_SD`, `DB2006_SA`, `DB2010_V`, `DB2015_M`, `DB2016_M_VF`, `DB2025_TOT` |
| UDT | `ZC_DISP_ED`, `ZC_DISP_EA`, `ZC_DISP_SD`, `ZC_DISP_SA`, `ZC_DISP_V`, `ZC_DISP_M`, `ZC_DISP_M_VF`, `ZC_DISP_TOT` |
---
### Historial de Cambios
| Versión | Fecha | Técnico | Cambios |
|----------|------------|---------|---------|
| 00.00.01 | 12.09.2023 | (ABH) | Primera version. |
| 01.00.00 | 02.07.2026 | (ABH) | Se añade orden "Buscar" para optimizacion de codigo. |
*)
END_REGION DESCRIPCION
// ==========================================================================================================
REGION GESTION_ORDEN_BUSCAR
// Si no hay orden de buscar, salimos del bloque
IF NOT #s_Buscar THEN
RETURN;
END_IF;
END_REGION GESTION_ORDEN_BUSCAR
// ==========================================================================================================
REGION TRASPASO_PARAMETROS_N_MAX
#t_N_MAX_ED := "N_MAX_DISP_ED";
#t_N_MAX_EA := "N_MAX_DISP_EA";
#t_N_MAX_SD := "N_MAX_DISP_SD";
#t_N_MAX_SA := "N_MAX_DISP_SA";
#t_N_MAX_V := "N_MAX_DISP_V";
#t_N_MAX_M := "N_MAX_DISP_M";
#t_N_MAX_M_VF := "N_MAX_DISP_M_VF";
#t_N_MAX_TOT := "N_MAX_DISP_TOT";
END_REGION TRASPASO_PARAMETROS_N_MAX
// ==========================================================================================================
REGION BUSQUEDA_ENTRADA_DIGITAL
// Reinicializacion de valores
#s_EntradaDigital.Encontrada := FALSE;
#s_EntradaDigital.Dispositivo := '';
// Solo buscamos si esta habilitado
IF #s_EntradaDigital.Habilitar THEN
// Limite de valores
IF #s_EntradaDigital.NumeroBit > 7 THEN
#s_EntradaDigital.NumeroBit := 7;
END_IF;
IF #s_EntradaDigital.NumeroBit < 1 THEN
#s_EntradaDigital.NumeroBit := 1;
END_IF;
// ================================================================================================
// Busqueda en salida digital
IF #t_N_MAX_ED > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_ED DO
IF #s_EntradaDigital.NumeroByte = "DB2000_ED".ED[#for_i].Config_DirEntradaByte
AND
#s_EntradaDigital.NumeroBit = "DB2000_ED".ED[#for_i].Config_DirEntradaBit
THEN
#s_EntradaDigital.Encontrada := TRUE;
#s_EntradaDigital.Dispositivo := CONCAT_STRING(IN1 := #s_EntradaDigital.Dispositivo, IN2 := #DISP_ED, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
// ================================================================================================
// Busqueda en valvula
IF #t_N_MAX_V > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_V DO
IF (#s_EntradaDigital.NumeroByte = "DB2010_V".V[#for_i].Config_DireccionRetReposoByte
AND
#s_EntradaDigital.NumeroBit = "DB2010_V".V[#for_i].Config_DireccionRetReposoBit)
OR
(#s_EntradaDigital.NumeroByte = "DB2010_V".V[#for_i].Config_DireccionRetTrabajoByte
AND
#s_EntradaDigital.NumeroBit = "DB2010_V".V[#for_i].Config_DireccionRetTrabajoBit)
THEN
#s_EntradaDigital.Encontrada := TRUE;
#s_EntradaDigital.Dispositivo := CONCAT_STRING(IN1 := #s_EntradaDigital.Dispositivo, IN2 := #DISP_V, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
// ================================================================================================
// Busqueda en motor
IF #t_N_MAX_M > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_M DO
IF (#s_EntradaDigital.NumeroByte = "DB2015_M".M[#for_i].Config_DireccionRetConfMarchaByte
AND
#s_EntradaDigital.NumeroBit = "DB2015_M".M[#for_i].Config_DireccionRetConfMarchaBit)
OR
(#s_EntradaDigital.NumeroByte = "DB2015_M".M[#for_i].Config_DireccionRetTermicoByte
AND
#s_EntradaDigital.NumeroBit = "DB2015_M".M[#for_i].Config_DireccionRetTermicoBit)
THEN
#s_EntradaDigital.Encontrada := TRUE;
#s_EntradaDigital.Dispositivo := CONCAT_STRING(IN1 := #s_EntradaDigital.Dispositivo, IN2 := #DISP_M, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
// ================================================================================================
// Busqueda en motor variador
IF #t_N_MAX_M_VF > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_M_VF DO
IF (#s_EntradaDigital.NumeroByte = "DB2016_M_VF".M_VF[#for_i].Config_DireccionRetConfMarchaByte
AND
#s_EntradaDigital.NumeroBit = "DB2016_M_VF".M_VF[#for_i].Config_DireccionRetConfMarchaBit)
OR
(#s_EntradaDigital.NumeroByte = "DB2016_M_VF".M_VF[#for_i].Config_DireccionRetTermicoByte
AND
#s_EntradaDigital.NumeroBit = "DB2016_M_VF".M_VF[#for_i].Config_DireccionRetTermicoBit)
THEN
#s_EntradaDigital.Encontrada := TRUE;
#s_EntradaDigital.Dispositivo := CONCAT_STRING(IN1 := #s_EntradaDigital.Dispositivo, IN2 := #DISP_M_VF, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
// ================================================================================================
// Busqueda en totalizador
IF #t_N_MAX_TOT > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_TOT DO
IF #s_EntradaDigital.NumeroByte = "DB2025_TOT".TOT[#for_i].Config_DireccionEntradaByte
AND
#s_EntradaDigital.NumeroBit = "DB2025_TOT".TOT[#for_i].Config_DireccionEntradaBit
THEN
#s_EntradaDigital.Encontrada := TRUE;
#s_EntradaDigital.Dispositivo := CONCAT_STRING(IN1 := #s_EntradaDigital.Dispositivo, IN2 := #DISP_TOT, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
END_IF;
END_REGION BUSQUEDA_ENTRADA_DIGITAL
// ==========================================================================================================
REGION BUSQUEDA_ENTRADA_ANALOGICA
// Reinicializacion de valores
#s_EntradaAnalogica.Encontrada := FALSE;
#s_EntradaAnalogica.Dispositivo := '';
// Solo buscamos si esta habilitado
IF #s_EntradaAnalogica.Habilitar THEN
// ================================================================================================
// Busqueda en entrada analogica
IF #t_N_MAX_EA > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_EA DO
IF #s_EntradaAnalogica.NumeroByte = "DB2001_EA".EA[#for_i].Config_DireccionEntradaByte
THEN
#s_EntradaAnalogica.Encontrada := TRUE;
#s_EntradaAnalogica.Dispositivo := CONCAT_STRING(IN1 := #s_EntradaAnalogica.Dispositivo, IN2 := #DISP_EA, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
END_IF;
END_REGION BUSQUEDA_ENTRADA_ANALOGICA
// ==========================================================================================================
REGION BUSQUEDA_SALIDA_DIGITAL
// Reinicializacion de valores
#s_Salidadigital.Encontrada := FALSE;
#s_Salidadigital.Dispositivo := '';
// Solo buscamos si esta habilitado
IF #s_Salidadigital.Habilitar THEN
// Limite de valores
IF #s_Salidadigital.NumeroBit > 7 THEN
#s_Salidadigital.NumeroBit := 7;
END_IF;
IF #s_Salidadigital.NumeroBit < 1 THEN
#s_Salidadigital.NumeroBit := 1;
END_IF;
// ================================================================================================
// Busqueda en salida digital
IF #t_N_MAX_SD > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_SD DO
IF #s_Salidadigital.NumeroByte = "DB2005_SD".SD[#for_i].Config_DireccionSalidaByte
AND
#s_Salidadigital.NumeroBit = "DB2005_SD".SD[#for_i].Config_DireccionSalidaBit
THEN
#s_Salidadigital.Encontrada := TRUE;
#s_Salidadigital.Dispositivo := CONCAT_STRING(IN1 := #s_Salidadigital.Dispositivo, IN2 := #DISP_SD, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
// ================================================================================================
// Busqueda en valvula
IF #t_N_MAX_V > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_V DO
IF #s_Salidadigital.NumeroByte = "DB2010_V".V[#for_i].Config_DireccionSalidaByte
AND
#s_Salidadigital.NumeroBit = "DB2010_V".V[#for_i].Config_DireccionSalidaBit
THEN
#s_Salidadigital.Encontrada := TRUE;
#s_Salidadigital.Dispositivo := CONCAT_STRING(IN1 := #s_Salidadigital.Dispositivo, IN2 := #DISP_V, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
// ================================================================================================
// Busqueda en motor
IF #t_N_MAX_M > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_M DO
IF #s_Salidadigital.NumeroByte = "DB2015_M".M[#for_i].Config_DireccionSalidaByte
AND
#s_Salidadigital.NumeroBit = "DB2015_M".M[#for_i].Config_DireccionSalidaBit
THEN
#s_Salidadigital.Encontrada := TRUE;
#s_Salidadigital.Dispositivo := CONCAT_STRING(IN1 := #s_Salidadigital.Dispositivo, IN2 := #DISP_M, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
// ================================================================================================
// Busqueda en motor variador
IF #t_N_MAX_M_VF > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_M_VF DO
IF #s_Salidadigital.NumeroByte = "DB2016_M_VF".M_VF[#for_i].Config_DireccionSalidaByte
AND
#s_Salidadigital.NumeroBit = "DB2016_M_VF".M_VF[#for_i].Config_DireccionSalidaBit
THEN
#s_Salidadigital.Encontrada := TRUE;
#s_Salidadigital.Dispositivo := CONCAT_STRING(IN1 := #s_Salidadigital.Dispositivo, IN2 := #DISP_M_VF, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
END_IF;
END_REGION BUSQUEDA_SALIDA_DIGITAL
// ==========================================================================================================
REGION BUSQUEDA_SALIDA_ANALOGICA
// Reinicializacion de valores
#s_SalidaAnalogica.Encontrada := FALSE;
#s_SalidaAnalogica.Dispositivo := '';
// Solo buscamos si esta habilitado
IF #s_SalidaAnalogica.Habilitar THEN
// ================================================================================================
// Busqueda en salida analogica
IF #t_N_MAX_SA > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_SA DO
IF #s_SalidaAnalogica.NumeroByte = "DB2006_SA".SA[#for_i].Config_DireccionSalidaByte
THEN
#s_SalidaAnalogica.Encontrada := TRUE;
#s_SalidaAnalogica.Dispositivo := CONCAT_STRING(IN1 := #s_SalidaAnalogica.Dispositivo, IN2 := #DISP_SA, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
// ================================================================================================
// Busqueda en motor variador
IF #t_N_MAX_M_VF > 0 THEN
FOR #for_i := 1 TO #t_N_MAX_M_VF DO
IF #s_SalidaAnalogica.NumeroByte = "DB2016_M_VF".M_VF[#for_i].Config_DireccionSalidaAnalogicaByte
THEN
#s_SalidaAnalogica.Encontrada := TRUE;
#s_SalidaAnalogica.Dispositivo := CONCAT_STRING(IN1 := #s_SalidaAnalogica.Dispositivo, IN2 := #DISP_M_VF, IN3 := "FC15001_ZC_INT_TO_STRING"(#for_i), IN4 := ';');
END_IF;
END_FOR;
END_IF;
END_IF;
END_REGION BUSQUEDA_SALIDA_ANALOGICA
// ==========================================================================================================
REGION RESET_ORDENES
// Reset orden buscar
#s_Buscar := FALSE;
END_REGION RESET_ORDENES
END_FUNCTION_BLOCK