Cambio de formato de exportacion a S7dcl.

This commit is contained in:
2026-07-20 16:03:44 +02:00
parent 350bcb6b01
commit d551a132c0
714 changed files with 44789 additions and 30182 deletions
@@ -1,12 +0,0 @@
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,10 @@
{
S7_Author := "ABH";
S7_BlockNumber := "15990";
S7_Family := "ZeusControl";
S7_Optimized := "TRUE";
S7_StandardRetain := "FALSE";
S7_Version := "1.0"
}
DATA_BLOCK DB15990_FAT_DI : FB15990_ZC_FAT_DI
END_DATA_BLOCK
@@ -1,12 +0,0 @@
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,10 @@
{
S7_Author := "ABH";
S7_BlockNumber := "15991";
S7_Family := "ZeusControl";
S7_Optimized := "TRUE";
S7_StandardRetain := "FALSE";
S7_Version := "1.0"
}
DATA_BLOCK DB15991_FAT_DO : FB15991_ZC_FAT_DO
END_DATA_BLOCK
@@ -1,12 +0,0 @@
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,10 @@
{
S7_Author := "ABH";
S7_BlockNumber := "15992";
S7_Family := "ZeusControl";
S7_Optimized := "TRUE";
S7_StandardRetain := "FALSE";
S7_Version := "1.0"
}
DATA_BLOCK DB15992_FAT_AI : FB15992_ZC_FAT_AI
END_DATA_BLOCK
@@ -1,12 +0,0 @@
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,10 @@
{
S7_Author := "ABH";
S7_BlockNumber := "15993";
S7_Family := "ZeusControl";
S7_Optimized := "TRUE";
S7_StandardRetain := "FALSE";
S7_Version := "1.0"
}
DATA_BLOCK DB15993_FAT_AO : FB15993_ZC_FAT_AO
END_DATA_BLOCK
@@ -0,0 +1,140 @@
{
S7_Author := "ABH";
S7_BlockComment := "MLC_z4";
S7_BlockNumber := "15990";
S7_BlockTitle := "MLC_53k";
S7_EditorMode := "SCL";
S7_Family := "ZeusControl";
S7_IECCheck := "TRUE";
S7_Optimized := "TRUE";
S7_Version := "1.0"
}
FUNCTION_BLOCK "FB15990_ZC_FAT_DI"
VAR_INPUT
{ S7_MLC := "MLC_4Jr" }
ByteEntrada : DInt := 0;
{ S7_MLC := "MLC_hD" }
Area : Int := 0;
END_VAR
VAR_OUTPUT
{ S7_MLC := "MLC_44r" }
Input_0 : Bool;
{ S7_MLC := "MLC_4YS" }
Input_1 : Bool;
{ S7_MLC := "MLC_3Hi" }
Input_2 : Bool;
{ S7_MLC := "MLC_3X6" }
Input_3 : Bool;
{ S7_MLC := "MLC_Zt" }
Input_4 : Bool;
{ S7_MLC := "MLC_a6" }
Input_5 : Bool;
{ S7_MLC := "MLC_p4" }
Input_6 : Bool;
{ S7_MLC := "MLC_Xp" }
Input_7 : Bool;
END_VAR
VAR_TEMP
t_Area : Byte;
t_Input : Byte;
END_VAR
VAR CONSTANT
{ S7_MLC := "MLC_mF" }
INPUT : Byte := 16#81;
{ S7_MLC := "MLC_4ht" }
OUTPUT : Byte := 16#82;
{ S7_MLC := "MLC_4PB" }
MARCAS : Byte := 16#83;
{ S7_MLC := "MLC_dZ" }
"DB" : Byte := 16#84;
{ S7_MLC := "MLC_536" }
PERIFERIA : Byte := 16#1;
END_VAR
{ S7_Language := "SCL" }
NETWORK
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_NETWORK
END_FUNCTION_BLOCK
@@ -0,0 +1,35 @@
MultiLingualTexts:
- id: MLC_53k
es-ES: FB15990_ZC_FAT_DI
- id: MLC_z4
es-ES: Bloque de funcion para pruebas de entradas digitales
- id: MLC_4Jr
es-ES: Direccion Byte entrada
- id: MLC_hD
es-ES: 0= Input / 1= Output / 2= Marcas / 3= DB / 4= Periferia
- id: MLC_44r
es-ES: Bit 0
- id: MLC_4YS
es-ES: Bit 1
- id: MLC_3Hi
es-ES: Bit 2
- id: MLC_3X6
es-ES: Bit 3
- id: MLC_Zt
es-ES: Bit 4
- id: MLC_a6
es-ES: Bit 5
- id: MLC_p4
es-ES: Bit 6
- id: MLC_Xp
es-ES: Bit 7
- id: MLC_mF
es-ES: Input
- id: MLC_4ht
es-ES: Output
- id: MLC_4PB
es-ES: Marcas
- id: MLC_dZ
es-ES: DB
- id: MLC_536
es-ES: Entrada de periferia (solo S7-1500)
@@ -1,123 +0,0 @@
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,154 @@
{
S7_Author := "ABH";
S7_BlockComment := "MLC_4QY";
S7_BlockNumber := "15991";
S7_BlockTitle := "MLC_WB";
S7_EditorMode := "SCL";
S7_Family := "ZeusControl";
S7_IECCheck := "TRUE";
S7_Optimized := "TRUE";
S7_Version := "1.0"
}
FUNCTION_BLOCK "FB15991_ZC_FAT_DO"
VAR_INPUT
{ S7_MLC := "MLC_WW" }
ByteSalida : DInt := 0;
{ S7_MLC := "MLC_3T4" }
Area : Int := 1;
END_VAR
VAR
OrdenSalida : Array[0..7] of Bool := [
{ S7_MLC := "MLC_4Lh" }
(),
{ S7_MLC := "MLC_Nt" }
(),
{ S7_MLC := "MLC_457" }
(),
{ S7_MLC := "MLC_3ft" }
(),
{ S7_MLC := "MLC_pk" }
(),
{ S7_MLC := "MLC_4NU" }
(),
{ S7_MLC := "MLC_3bZ" }
(),
{ S7_MLC := "MLC_4nz" }
()
];
END_VAR
VAR RETAIN
s_oldByteSalida : DInt;
END_VAR
VAR_TEMP
for_i : Int;
t_Area : Byte;
END_VAR
VAR CONSTANT
{ S7_MLC := "MLC_4Pr" }
INPUT : Byte := 16#81;
{ S7_MLC := "MLC_WS" }
OUTPUT : Byte := 16#82;
{ S7_MLC := "MLC_3dW" }
MARCAS : Byte := 16#83;
{ S7_MLC := "MLC_3Rj" }
"DB" : Byte := 16#84;
{ S7_MLC := "MLC_Ww" }
PERIFERIA : Byte := 16#1;
END_VAR
{ S7_Language := "SCL" }
NETWORK
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_NETWORK
END_FUNCTION_BLOCK
@@ -0,0 +1,35 @@
MultiLingualTexts:
- id: MLC_WB
es-ES: FB15991_ZC_FAT_DO
- id: MLC_4QY
es-ES: Bloque de funcion para pruebas de salidas digitales
- id: MLC_WW
es-ES: Direccion Byte salida
- id: MLC_3T4
es-ES: 0= Input / 1= Output / 2= Marcas / 3= DB / 4= Periferia
- id: MLC_4Lh
es-ES: Bit 0
- id: MLC_Nt
es-ES: Bit 1
- id: MLC_457
es-ES: Bit 2
- id: MLC_3ft
es-ES: Bit 3
- id: MLC_pk
es-ES: Bit 4
- id: MLC_4NU
es-ES: Bit 5
- id: MLC_3bZ
es-ES: Bit 6
- id: MLC_4nz
es-ES: Bit 7
- id: MLC_4Pr
es-ES: Input
- id: MLC_WS
es-ES: Output
- id: MLC_3dW
es-ES: Marcas
- id: MLC_3Rj
es-ES: DB
- id: MLC_Ww
es-ES: Entrada de periferia (solo S7-1500)
@@ -1,128 +0,0 @@
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,124 @@
{
S7_Author := "ABH";
S7_BlockComment := "MLC_42w";
S7_BlockNumber := "15992";
S7_BlockTitle := "MLC_4Ga";
S7_EditorMode := "SCL";
S7_Family := "ZeusControl";
S7_IECCheck := "TRUE";
S7_Optimized := "TRUE";
S7_Version := "1.0"
}
FUNCTION_BLOCK "FB15992_ZC_FAT_AI"
VAR_INPUT
{ S7_MLC := "MLC_4Ya" }
ByteEntrada : DInt := 0;
{ S7_MLC := "MLC_44A" }
Area : Int := 0;
END_VAR
VAR_OUTPUT
{ S7_MLC := "MLC_ge" }
Input_Raw : DInt;
{ S7_MLC := "MLC_N4" }
Input_0_100 : Real;
END_VAR
VAR_TEMP
t_Area : Byte;
t_Input : DInt;
END_VAR
VAR CONSTANT
{ S7_MLC := "MLC_4xu" }
INPUT : Byte := 16#81;
{ S7_MLC := "MLC_qs" }
OUTPUT : Byte := 16#82;
{ S7_MLC := "MLC_39s" }
MARCAS : Byte := 16#83;
{ S7_MLC := "MLC_pG" }
"DB" : Byte := 16#84;
{ S7_MLC := "MLC_sK" }
PERIFERIA : Byte := 16#1;
{ S7_MLC := "MLC_3aw" }
VALOR_MAX_TARJETA : Real := 27648.0;
END_VAR
{ S7_Language := "SCL" }
NETWORK
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_NETWORK
END_FUNCTION_BLOCK
@@ -0,0 +1,25 @@
MultiLingualTexts:
- id: MLC_4Ga
es-ES: FB15992_ZC_FAT_AI
- id: MLC_42w
es-ES: Bloque de funcion para pruebas de entradas analogicas
- id: MLC_4Ya
es-ES: Direccion Byte entrada
- id: MLC_44A
es-ES: 0= Input / 1= Output / 2= Marcas / 3= DB / 4= Periferia
- id: MLC_ge
es-ES: Valor bruto del canal
- id: MLC_N4
es-ES: Valor porcentaje
- id: MLC_4xu
es-ES: Input
- id: MLC_qs
es-ES: Output
- id: MLC_39s
es-ES: Marcas
- id: MLC_pG
es-ES: DB
- id: MLC_sK
es-ES: Entrada de periferia (solo S7-1500)
- id: MLC_3aw
es-ES: Valor maximo de tarjeta
@@ -1,112 +0,0 @@
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,155 @@
{
S7_Author := "ABH";
S7_BlockComment := "MLC_3U2";
S7_BlockNumber := "15993";
S7_BlockTitle := "MLC_3Nh";
S7_EditorMode := "SCL";
S7_Family := "ZeusControl";
S7_IECCheck := "TRUE";
S7_Optimized := "TRUE";
S7_Version := "1.0"
}
FUNCTION_BLOCK "FB15993_ZC_FAT_AO"
VAR_INPUT
{ S7_MLC := "MLC_3t3" }
ByteSalida : DInt := 0;
{ S7_MLC := "MLC_4VZ" }
Area : Int := 1;
END_VAR
VAR_OUTPUT
{ S7_MLC := "MLC_3i8" }
Salida_Raw : DInt;
END_VAR
VAR_IN_OUT
{ S7_MLC := "MLC_aA" }
Salida_0_100 : Real;
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
{ S7_MLC := "MLC_4Zv" }
INPUT : Byte := 16#81;
{ S7_MLC := "MLC_4vc" }
OUTPUT : Byte := 16#82;
{ S7_MLC := "MLC_3tz" }
MARCAS : Byte := 16#83;
{ S7_MLC := "MLC_cU" }
"DB" : Byte := 16#84;
{ S7_MLC := "MLC_53q" }
PERIFERIA : Byte := 16#1;
{ S7_MLC := "MLC_4js" }
VALOR_MAX_TARJETA : Real := 27648.0;
VALOR_CERO : Word;
END_VAR
{ S7_Language := "SCL" }
NETWORK
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_NETWORK
END_FUNCTION_BLOCK
@@ -0,0 +1,25 @@
MultiLingualTexts:
- id: MLC_3Nh
es-ES: FB15993_ZC_FAT_AO
- id: MLC_3U2
es-ES: Bloque de funcion para pruebas de salidas analogicas
- id: MLC_3t3
es-ES: Direccion Byte entrada
- id: MLC_4VZ
es-ES: 0= Input / 1= Output / 2= Marcas / 3= DB / 4= Periferia
- id: MLC_3i8
es-ES: Valor bruto del canal
- id: MLC_aA
es-ES: Valor en porcentaje
- id: MLC_4Zv
es-ES: Input
- id: MLC_4vc
es-ES: Output
- id: MLC_3tz
es-ES: Marcas
- id: MLC_cU
es-ES: DB
- id: MLC_53q
es-ES: Entrada de periferia (solo S7-1500)
- id: MLC_4js
es-ES: Valor maximo de tarjeta
@@ -1,145 +0,0 @@
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
@@ -1,12 +0,0 @@
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,10 @@
{
S7_Author := "ABH";
S7_BlockNumber := "15994";
S7_Family := "ZeusControl";
S7_Optimized := "TRUE";
S7_StandardRetain := "FALSE";
S7_Version := "1.0"
}
DATA_BLOCK DB15994_ZC_INICIALIZAR_DISP : FB15994_ZC_INICIALIZAR_DISP
END_DATA_BLOCK
@@ -1,12 +0,0 @@
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,10 @@
{
S7_Author := "ABH";
S7_BlockNumber := "15995";
S7_Family := "ZeusControl";
S7_Optimized := "TRUE";
S7_StandardRetain := "FALSE";
S7_Version := "1.0"
}
DATA_BLOCK DB15995_ZC_BUSCAR_DIR : FB15995_ZC_BUSCAR_DIR
END_DATA_BLOCK
@@ -0,0 +1,122 @@
{
S7_Author := "ABH";
S7_BlockNumber := "15994";
S7_BlockTitle := "MLC_h3";
S7_EditorMode := "SCL";
S7_Family := "ZeusControl";
S7_IECCheck := "TRUE";
S7_Optimized := "TRUE";
S7_Version := "1.0"
}
FUNCTION_BLOCK "FB15994_ZC_INICIALIZAR_DISP"
VAR_INPUT
N_MAX_MUX_DISP : Int;
END_VAR
VAR
s_Inicializar : Bool;
END_VAR
VAR_TEMP
for_i : Int;
END_VAR
{ S7_Language := "SCL" }
NETWORK
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_NETWORK
END_FUNCTION_BLOCK
@@ -0,0 +1,3 @@
MultiLingualTexts:
- id: MLC_h3
es-ES: FB15994_ZC_INICIALIZAR_DISP
@@ -1,119 +0,0 @@
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,400 @@
{
S7_Author := "ABH";
S7_BlockComment := "MLC_3m2";
S7_BlockNumber := "15995";
S7_BlockTitle := "MLC_4LA";
S7_EditorMode := "SCL";
S7_Family := "ZeusControl";
S7_IECCheck := "TRUE";
S7_Optimized := "TRUE";
S7_Version := "1.0"
}
FUNCTION_BLOCK "FB15995_ZC_BUSCAR_DIR"
VAR
{ S7_MLC := "MLC_3f4" }
s_Buscar : Bool;
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
{ S7_Language := "SCL" }
NETWORK
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_NETWORK
END_FUNCTION_BLOCK
@@ -0,0 +1,7 @@
MultiLingualTexts:
- id: MLC_4LA
es-ES: FB15995_ZC_BUSCAR_DIR
- id: MLC_3m2
es-ES: Bloque de funcion para comprobacion de direcciones configuradas en el sistema
- id: MLC_3f4
es-ES: Orden buscar
@@ -1,396 +0,0 @@
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