Primera version
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
DATA_BLOCK "DB11_INF"
|
||||
TITLE = DB11_INFORMES
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
AUTHOR : ABH
|
||||
FAMILY : ZeusControl
|
||||
VERSION : 1.0
|
||||
NON_RETAIN
|
||||
VAR RETAIN
|
||||
Gestion { S7_SetPoint := 'False'} : "UDT_ZC_INF_GESTION";
|
||||
Buffer { S7_SetPoint := 'False'} : Array[0.."N_MAX_INF_BUFFER"] of "UDT_ZC_INF_DATOS";
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
Gestion.HabilitacionGeneral := TRUE;
|
||||
Gestion.EstadoConexion := TRUE;
|
||||
Gestion.OrdenIniciar := FALSE;
|
||||
Gestion.Etapa := 0;
|
||||
Gestion.SP_Tiempo := 10;
|
||||
Gestion.TiempoActual := 0;
|
||||
Gestion.NumeroMaxIntentos := 3;
|
||||
|
||||
END_DATA_BLOCK
|
||||
|
||||
@@ -0,0 +1,246 @@
|
||||
FUNCTION_BLOCK "FB15051_ZC_INF_CPR"
|
||||
TITLE = FB15051_ZC_INF_CPR
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
AUTHOR : ABH
|
||||
FAMILY : ZeusControl
|
||||
VERSION : 1.0
|
||||
VAR_INPUT
|
||||
GuardarDatos : Bool; // Orden guardar datos
|
||||
FinGuardarDatos : Bool; // Orden finalizar guardar datos
|
||||
FechaActual {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL; // Fecha y hora actual
|
||||
TipoProceso : Int; // Tipo de proceso
|
||||
Destino : Int; // Destino
|
||||
Producto : Int; // Producto
|
||||
Producto1Destino : Int; // Producto 1 en destino
|
||||
Producto2Destino : Int; // Producto 2 en destino
|
||||
Nombre : String[40]; // Nombre
|
||||
Matricula : String[10]; // Matricula
|
||||
LetraQ : String[10]; // Letra Q
|
||||
KilosSP : Real; // Kilos SP
|
||||
KilosDescargados : Real; // Cantidad
|
||||
DensidadMedia : LReal; // Densidad Media
|
||||
TempMediaDescarga : LReal; // Temperatura media en descarga
|
||||
TempMediaEnfriamiento : LReal; // Temperatura media enfriamiento
|
||||
EmpujeRealizado : Bool; // Empuje realizado
|
||||
AclaradoRealizado : Bool; // Aclarado realizado
|
||||
END_VAR
|
||||
|
||||
VAR_OUTPUT
|
||||
GuardarSQL : Bool;
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
Mux : "UDT_ZC_MUX"; // Variable Mux
|
||||
Informe : Array[*] of "UDT_ZC_INF_CPR_PROD"; // Informes de compacto
|
||||
END_VAR
|
||||
|
||||
VAR RETAIN
|
||||
s_OrdenGuardarDatos : Bool; // Orden adquirir datos de informes
|
||||
s_OrdenGuardarFechaInicio : Bool; // Orden guardar fecha de inicio y dezplazar informes
|
||||
END_VAR
|
||||
VAR
|
||||
s_OrdenGuardarFechaFin : Bool; // Orden guardar fecha de fin
|
||||
s_OrdenBorrarInforme : Bool; // Orden borrar informe
|
||||
s_NumeroBorrado : Int; // -1= Todos / Valor= Numero de registro
|
||||
END_VAR
|
||||
VAR RETAIN
|
||||
s_P_Trig_TomarFechaInicio : Bool; // Pulso
|
||||
s_P_Trig_TomarFechaFin : Bool; // Pulso
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
for_i : Int; // Variable para bucles FOR
|
||||
t_dummyInt : Int;
|
||||
t_IndiceSuperior : Int; // Indice superior del array
|
||||
t_IndiceInferior : Int; // Indice inferior del array
|
||||
t_InformeVacio : "UDT_ZC_INF_CPR_PROD";
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
ACTUAL : Int := 1;
|
||||
TIPO_DESCARGA_PARCIAL : Int := 1; // TIPO DE PROCESO DESCARGA PARCIAL
|
||||
TIPO_DESCARGA_TOTAL : Int := 2; // TIPO DE PROCESO DESCARGA TOTAL
|
||||
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 |
|
||||
|
||||
---
|
||||
> **Restricciones:** Ninguna.
|
||||
|
||||
---
|
||||
### Descripción Funcional
|
||||
|
||||
Bloque de funcion para la gestión de informes de descargas de compacto de recepcion.
|
||||
|
||||
En ella se realizan las siguientes acciones:
|
||||
|
||||
- Cálculo dinámico de indices de array de informes.
|
||||
- Gestion de ordenes de inicio y fin informe.
|
||||
- Desplazamiento y captura de datos de informe.
|
||||
- Borrado de informes.
|
||||
|
||||
---
|
||||
### Dependencias Requeridas
|
||||
| Tipo | Elementos |
|
||||
|------|-----------|
|
||||
| FC | `FC15005_ZC_DTL_TO_ZC_FECHA` |
|
||||
| FB | - |
|
||||
| DB | - |
|
||||
| UDT | `UDT_ZC_MUX`, `UDT_ZC_INF_CPR_PROD` |
|
||||
|
||||
---
|
||||
### Historial de Cambios
|
||||
| Versión | Fecha | Técnico | Cambios |
|
||||
|----------|------------|---------|---------|
|
||||
| 00.00.01 | 01.08.2023 | (HCR) | Primera version. |
|
||||
| 00.00.02 | 16.04.2024 | (ABH) | Se cambian los nombre a variables para estandarizar. |
|
||||
| 01.00.02 | 13.07.2026 | (ABH) | Cambio a SCL. |
|
||||
*)
|
||||
END_REGION DESCRIPCION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION LIMITES_Y_MULTIPLEXADO
|
||||
|
||||
// Calculo limites array de informes
|
||||
#t_IndiceInferior := DINT_TO_INT(LOWER_BOUND(ARR := #Informe, DIM := 1));
|
||||
#t_IndiceSuperior := DINT_TO_INT(UPPER_BOUND(ARR := #Informe, DIM := 1));
|
||||
|
||||
// Si no hay informes configurados, salimos inmediatamente.
|
||||
IF #t_IndiceInferior <= 0 THEN
|
||||
#Mux.Index := 0;
|
||||
RETURN;
|
||||
END_IF;
|
||||
|
||||
// Limites multiplexado
|
||||
IF #Mux.Index < 1 THEN
|
||||
#Mux.Index := 0;
|
||||
END_IF;
|
||||
IF #Mux.Index > #t_IndiceSuperior THEN
|
||||
#Mux.Index := #t_IndiceSuperior;
|
||||
END_IF;
|
||||
|
||||
END_REGION LIMITES_Y_MULTIPLEXADO
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION ORDEN_INICIO_FIN
|
||||
|
||||
// Orden de inicio
|
||||
IF #GuardarDatos AND NOT #s_P_Trig_TomarFechaInicio THEN
|
||||
#s_OrdenGuardarFechaInicio := TRUE;
|
||||
#s_OrdenGuardarDatos := TRUE;
|
||||
END_IF;
|
||||
|
||||
// Orden de fin
|
||||
#GuardarSQL := FALSE;
|
||||
IF #FinGuardarDatos AND NOT #s_P_Trig_TomarFechaFin THEN
|
||||
#s_OrdenGuardarFechaFin := TRUE;
|
||||
#GuardarSQL := TRUE;
|
||||
END_IF;
|
||||
|
||||
// Estados anteriores
|
||||
#s_P_Trig_TomarFechaInicio := #GuardarDatos;
|
||||
#s_P_Trig_TomarFechaFin := #FinGuardarDatos;
|
||||
|
||||
END_REGION ORDEN_INICIO_FIN
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION ADQUISICION_DE_DATOS
|
||||
|
||||
// Con flanco de guardar datos fecha de inicio, desplazamos los registros y almacenamos la fecha de inicio
|
||||
IF #s_OrdenGuardarFechaInicio THEN
|
||||
|
||||
// Desplazamiento de datos
|
||||
#t_dummyInt := MOVE_BLK_VARIANT(SRC := #Informe, COUNT := INT_TO_UDINT(#t_IndiceSuperior - 1), SRC_INDEX := 0, DEST_INDEX := 1, DEST => #Informe);
|
||||
|
||||
// Tomar valor de fecha de inicio
|
||||
#Informe[#ACTUAL].FechaInicio := "FC15005_ZC_DTL_TO_ZC_FECHA"(#FechaActual);
|
||||
#s_OrdenGuardarFechaInicio := FALSE;
|
||||
END_IF;
|
||||
|
||||
// Tomar datos
|
||||
IF #s_OrdenGuardarDatos THEN
|
||||
#Informe[#ACTUAL].Descarga.TipoProceso := #TipoProceso;
|
||||
#Informe[#ACTUAL].Descarga.Destino := #Destino;
|
||||
IF #TipoProceso = #TIPO_DESCARGA_PARCIAL OR #TipoProceso = #TIPO_DESCARGA_TOTAL THEN
|
||||
#Informe[#ACTUAL].Descarga.Producto := #Producto;
|
||||
#Informe[#ACTUAL].Descarga.Producto1Destino := #Producto1Destino;
|
||||
#Informe[#ACTUAL].Descarga.Producto2Destino := #Producto2Destino;
|
||||
#Informe[#ACTUAL].Descarga.KilosSP := #KilosSP;
|
||||
#Informe[#ACTUAL].Descarga.KilosDescargados := #KilosDescargados;
|
||||
#Informe[#ACTUAL].Descarga.DensidadMedia := #DensidadMedia;
|
||||
#Informe[#ACTUAL].Descarga.TemperaturaMediaDescarga := #TempMediaDescarga;
|
||||
#Informe[#ACTUAL].Descarga.TemperaturaMediaEnfriamiento := #TempMediaEnfriamiento;
|
||||
#Informe[#ACTUAL].Descarga.Nombre := #Nombre;
|
||||
#Informe[#ACTUAL].Descarga.Matricula := #Matricula;
|
||||
#Informe[#ACTUAL].Descarga.LetraQ := #LetraQ;
|
||||
END_IF;
|
||||
#Informe[#ACTUAL].Descarga.EmpujeRealizado := #EmpujeRealizado;
|
||||
#Informe[#ACTUAL].Descarga.AclaradoRealizado := #AclaradoRealizado;
|
||||
END_IF;
|
||||
|
||||
// Con flanco de guardar datos fecha de fin almacenamos la fecha de fin y resetemos guardar datos
|
||||
IF #s_OrdenGuardarFechaFin THEN
|
||||
#Informe[#ACTUAL].FechaFin := "FC15005_ZC_DTL_TO_ZC_FECHA"(#FechaActual);
|
||||
#s_OrdenGuardarDatos := FALSE;
|
||||
#s_OrdenGuardarFechaFin := FALSE;
|
||||
END_IF;
|
||||
|
||||
END_REGION ADQUISICION_DE_DATOS
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION BORRADO_INFORMES
|
||||
|
||||
// Borrado de todos los registros
|
||||
IF #s_OrdenBorrarInforme THEN
|
||||
IF #s_NumeroBorrado = -1 OR #s_NumeroBorrado = 0 THEN
|
||||
|
||||
// Borrado total
|
||||
FOR #for_i := 1 TO #t_IndiceSuperior DO
|
||||
#Informe[#for_i] := #t_InformeVacio;
|
||||
END_FOR;
|
||||
|
||||
ELSIF #s_NumeroBorrado >= 1 AND #s_NumeroBorrado < #t_IndiceSuperior THEN
|
||||
|
||||
// Borrado registro especifico
|
||||
#Informe[#s_NumeroBorrado] := #t_InformeVacio;
|
||||
|
||||
// Desplazamiento de datos
|
||||
#t_dummyInt := MOVE_BLK_VARIANT(SRC := #Informe,
|
||||
COUNT := INT_TO_UDINT(#t_IndiceSuperior - #s_NumeroBorrado),
|
||||
SRC_INDEX := #s_NumeroBorrado,
|
||||
DEST_INDEX := #s_NumeroBorrado - 1,
|
||||
DEST => #Informe);
|
||||
|
||||
// Borrado del ultimo registro
|
||||
#Informe[#t_IndiceSuperior] := #t_InformeVacio;
|
||||
|
||||
ELSIF #s_NumeroBorrado = #t_IndiceSuperior THEN
|
||||
|
||||
// Borrado de ultimo registro
|
||||
#Informe[#s_NumeroBorrado] := #t_InformeVacio;
|
||||
|
||||
END_IF;
|
||||
|
||||
#s_OrdenBorrarInforme := FALSE;
|
||||
|
||||
END_IF;
|
||||
|
||||
|
||||
END_REGION BORRADO_INFORMES
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
@@ -0,0 +1,236 @@
|
||||
FUNCTION_BLOCK "FB15052_ZC_INF_PROD_MEM"
|
||||
TITLE = FB15052_ZC_INF_PROD_MEM
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
AUTHOR : ABH
|
||||
FAMILY : ZeusControl
|
||||
VERSION : 1.0
|
||||
//Bloque de gestion para adquisicion de datos para informe de produccion maquina membranas
|
||||
VAR_INPUT
|
||||
OrdenInicioInforme { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Orden inicio informe
|
||||
OrdenFinInforme : Bool; // Orden fin informe
|
||||
EnProduccion : Bool; // En produccion
|
||||
FechaHoraActual {InstructionName := 'DTL'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DTL; // Fecha y hora actual
|
||||
Producto : Int; // Producto
|
||||
DestinoConcentrado : Int; // Destino concentrado
|
||||
DestinoPermeado : Int; // Destino permeado
|
||||
LitrosEntrada : LReal; // Totalizador litros Entrada
|
||||
LitrosConcentrado : LReal; // Totalizador litros Concentrado
|
||||
Brix : LReal; // Media Brix en produccion
|
||||
Fcv : Real; // Media FCV En produccion
|
||||
TempEntrada : LReal; // Media temperatura entrada
|
||||
TempConcentrado : LReal; // Media temperatura concentrado
|
||||
TempPermeado : LReal; // Media temperatura permeado
|
||||
TiempoProduccion : "UDT_ZC_CONTADOR_TIEMPO"; // Tiempo Produccion
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
Informe : Array[*] of "UDT_ZC_INF_PROD_MEM";
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
s_OrdenInicioInforme { S7_SetPoint := 'True'} : Bool; // Orden inicio informe
|
||||
s_OrdenFinInforme { S7_SetPoint := 'True'} : Bool; // Orden fin informe
|
||||
END_VAR
|
||||
VAR RETAIN
|
||||
s_oldInicio { S7_SetPoint := 'True'} : Bool; // Estado anterior inicio
|
||||
s_oldFin { S7_SetPoint := 'True'} : Bool; // Estado anterior fin
|
||||
END_VAR
|
||||
VAR
|
||||
s_OrdenBorrarInforme : Bool; // Orden borrar informe
|
||||
s_NumeroBorrado : Int; // -1= Todos / Valor= Numero de registro
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
for_i : Int;
|
||||
t_dummyInt : Int;
|
||||
t_IndiceSuperior : Int; // Indice superior del array
|
||||
t_IndiceInferior : Int; // Indice inferior del array
|
||||
t_InformeVacio : "UDT_ZC_INF_PROD_MEM";
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
ACTUAL : Int := 1;
|
||||
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
|
||||
Bloque de funcion que implementa la gestión de los datos de informe de producción de una máquina de membranas, manteniendo un histórico de hasta `#N_REGISTROS` producciones con todos los datos relevantes del proceso (volúmenes, Brix, FCV, temperaturas, tiempos, destinos y producto) para su trazabilidad y consulta desde el sistema de supervisión.
|
||||
|
||||
Funcionalidades principales:
|
||||
- Detección de flanco ascendente en las órdenes `#OrdenInicioInforme` y `#OrdenFinInforme` mediante las variables estáticas `#s_P_Trig_Inicio` y `#s_P_Trig_Fin`, generando los pulsos internos `#s_OrdenInicioInforme` y `#s_OrdenFinInforme`.
|
||||
- Inicialización de informe: al recibir `#s_OrdenInicioInforme` se desplazan los informes existentes una posición hacia abajo mediante `MOVE_BLK_VARIANT`, se reinicializan los campos del nuevo informe activo (`#Informe[#ACTUAL]`: fechas, tiempo de producción, destinos, producto, litros, Brix, FCV y temperaturas) y se almacena la fecha/hora de inicio mediante la conversión realizada por `FC15005_ZC_DTL_TO_ZC_FECHA`.
|
||||
- Datos en curso: mientras `#EnProduccion` está activo, se copian en `#Informe[#ACTUAL]` los valores de proceso en tiempo real: tiempo de producción, destinos de concentrado y permeado, código de producto, litros (entrada, concentrado y permeado por diferencia), Brix, FCV y las tres temperaturas (concentrado, permeado y entrada), aplicando `LREAL_TO_REAL` para adaptar la precisión al tipo de dato del UDT.
|
||||
- Fin de informe: al detectar `#s_OrdenFinInforme` se registra la fecha/hora de fin en `#Informe[#ACTUAL].FechaFin`.
|
||||
- Borrado masivo: la entrada `#s_Borrar` permite limpiar completamente todos los registros del array, inicializando fechas, tiempos, litros, Brix, FCV, temperatura de concentrado y código de producto a sus valores neutros. La propia variable de orden se autodesactiva tras la operación.
|
||||
|
||||
> **Restricciones:** PLC serie 1200/1500.
|
||||
|
||||
---
|
||||
### Dependencias Requeridas
|
||||
| Tipo | Elementos |
|
||||
|------|-----------|
|
||||
| FC | `FC15005_ZC_DTL_TO_ZC_FECHA` |
|
||||
| FB | - |
|
||||
| DB | - |
|
||||
| UDT | `UDT_ZC_CONTADOR_TIEMPO`, `UDT_ZC_INF_PROD_MEM` |
|
||||
|
||||
---
|
||||
### Historial de Cambios
|
||||
| Versión | Fecha | Técnico | Cambios |
|
||||
|----------|------------|---------|---------|
|
||||
| 01.00.00 | 24.05.2023 | (ABH) | Primera versión. |
|
||||
| 01.00.01 | 16.02.2024 | (ABH) | Cambios en datos de REAL a LREAL para coincidir con UDT. |
|
||||
| 01.00.02 | 23.05.2024 | (HCR) | Se añaden temperaturas de entrada, destinos concentrado y destinos permeado. |
|
||||
| 01.00.03 | 03.07.2026 | (ABH) | Cambio a SCL. |
|
||||
*)
|
||||
END_REGION DESCRIPCION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION LIMITES
|
||||
|
||||
// Calculo limites array de informes
|
||||
#t_IndiceInferior := DINT_TO_INT(LOWER_BOUND(ARR := #Informe, DIM := 1));
|
||||
#t_IndiceSuperior := DINT_TO_INT(UPPER_BOUND(ARR := #Informe, DIM := 1));
|
||||
|
||||
// Si no hay informes configurados, salimos inmediatamente.
|
||||
IF #t_IndiceInferior <= 0 THEN
|
||||
RETURN;
|
||||
END_IF;
|
||||
|
||||
END_REGION LIMITES
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION GESTION_ORDENES
|
||||
|
||||
// Orden de inicio
|
||||
#s_OrdenInicioInforme := #OrdenInicioInforme AND NOT #s_oldInicio;
|
||||
|
||||
// Orden de fin
|
||||
#s_OrdenFinInforme := #OrdenFinInforme AND NOT #s_oldFin;
|
||||
|
||||
// Estados anteriores
|
||||
#s_oldInicio := #OrdenInicioInforme;
|
||||
#s_oldFin := #OrdenFinInforme;
|
||||
|
||||
END_REGION GESTION_ORDENES
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION INICIALIZACION
|
||||
|
||||
// Con flanco de inicio informe, desplazamos los registros, reinicializamos los datos y almacenamos la fecha y hora de inicio, todo en la poisicion 1
|
||||
IF #s_OrdenInicioInforme THEN
|
||||
|
||||
// Desplazamiento de datos
|
||||
#t_dummyInt := MOVE_BLK_VARIANT(SRC := #Informe, COUNT := INT_TO_UDINT(#t_IndiceSuperior - 1), SRC_INDEX := 0, DEST_INDEX := 1, DEST => #Informe);
|
||||
|
||||
// Reinicializacion de los datos
|
||||
#Informe[#ACTUAL] := #t_InformeVacio;
|
||||
|
||||
// Guardado de fecha y hora actual
|
||||
#Informe[#ACTUAL].FechaInicio := "FC15005_ZC_DTL_TO_ZC_FECHA"(FechaDTL := #FechaHoraActual);
|
||||
|
||||
END_IF;
|
||||
|
||||
END_REGION INICIALIZACION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION DATOS_DURANTE_PRODUCCION
|
||||
|
||||
// Se guardan los datos durante la produccion
|
||||
IF #EnProduccion THEN
|
||||
|
||||
#Informe[#ACTUAL].TiempoProduccion.Hora := #TiempoProduccion.Hora;
|
||||
#Informe[#ACTUAL].TiempoProduccion.Minuto := #TiempoProduccion.Minuto;
|
||||
#Informe[#ACTUAL].TiempoProduccion.Segundo := #TiempoProduccion.Segundo;
|
||||
|
||||
#Informe[#ACTUAL].DestinoConcentrado := #DestinoConcentrado;
|
||||
#Informe[#ACTUAL].DestinoPermeado := #DestinoPermeado;
|
||||
#Informe[#ACTUAL].Producto := #Producto;
|
||||
|
||||
#Informe[#ACTUAL].LitrosEntrada := LREAL_TO_REAL(#LitrosEntrada);
|
||||
#Informe[#ACTUAL].LitrosConcentrado := LREAL_TO_REAL(#LitrosConcentrado);
|
||||
#Informe[#ACTUAL].LitrosPermeado := LREAL_TO_REAL(#LitrosEntrada - #LitrosConcentrado);
|
||||
|
||||
#Informe[#ACTUAL].Brix := LREAL_TO_REAL(#Brix);
|
||||
#Informe[#ACTUAL].FCV := #Fcv;
|
||||
|
||||
#Informe[#ACTUAL].TempConcentrado := LREAL_TO_REAL(#TempConcentrado);
|
||||
#Informe[#ACTUAL].TempPermeado := LREAL_TO_REAL(#TempPermeado);
|
||||
#Informe[#ACTUAL].TempEntrada := LREAL_TO_REAL(#TempEntrada);
|
||||
|
||||
END_IF;
|
||||
|
||||
END_REGION DATOS_DURANTE_PRODUCCION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION FIN_INFORME
|
||||
|
||||
// Se guardan los datos durante la produccion
|
||||
IF #s_OrdenFinInforme THEN
|
||||
|
||||
// Guardado de fecha y hora actual
|
||||
#Informe[#ACTUAL].FechaFin := "FC15005_ZC_DTL_TO_ZC_FECHA"(FechaDTL := #FechaHoraActual);
|
||||
|
||||
END_IF;
|
||||
|
||||
END_REGION FIN_INFORME
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION BORRADO_DATOS
|
||||
|
||||
// Borrado de todos los registros
|
||||
IF #s_OrdenBorrarInforme THEN
|
||||
IF #s_NumeroBorrado = -1 OR #s_NumeroBorrado = 0 THEN
|
||||
|
||||
FOR #for_i := 1 TO #t_IndiceSuperior DO
|
||||
#Informe[#for_i] := #t_InformeVacio;
|
||||
END_FOR;
|
||||
|
||||
ELSIF #s_NumeroBorrado >= 1 AND #s_NumeroBorrado < #t_IndiceSuperior THEN
|
||||
|
||||
// Borrado registro especifico
|
||||
#Informe[#s_NumeroBorrado] := #t_InformeVacio;
|
||||
|
||||
// Desplazamiento de datos
|
||||
#t_dummyInt := MOVE_BLK_VARIANT(SRC := #Informe,
|
||||
COUNT := INT_TO_UDINT(#t_IndiceSuperior - #s_NumeroBorrado),
|
||||
SRC_INDEX := #s_NumeroBorrado,
|
||||
DEST_INDEX := #s_NumeroBorrado - 1,
|
||||
DEST => #Informe);
|
||||
|
||||
// Borrado del ultimo registro
|
||||
#Informe[#t_IndiceSuperior] := #t_InformeVacio;
|
||||
|
||||
ELSIF #s_NumeroBorrado = #t_IndiceSuperior THEN
|
||||
|
||||
// Borrado de ultimo registro
|
||||
#Informe[#s_NumeroBorrado] := #t_InformeVacio;
|
||||
|
||||
END_IF;
|
||||
|
||||
#s_OrdenBorrarInforme := FALSE;
|
||||
|
||||
END_IF;
|
||||
|
||||
END_REGION BORRADO_DATOS
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
@@ -0,0 +1,264 @@
|
||||
FUNCTION_BLOCK "FB15053_ZC_INF_LIMP_MAQ"
|
||||
TITLE = FB15053_ZC_INF_LIMP_MAQ
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
AUTHOR : ABH
|
||||
FAMILY : ZeusControl
|
||||
VERSION : 1.0
|
||||
//Bloque de gestion para adquisicion de datos para informe de limpieza de maquinas
|
||||
VAR_INPUT
|
||||
EnLimpieza : Bool; // En limpieza
|
||||
LimpBasica1 : Bool; // En limpieza basica 1
|
||||
LimpAcida : Bool; // En limpieza acida
|
||||
LimpBasica2 : Bool; // En limpieza basica 2
|
||||
Pulso1Seg : Bool; // Pulso de 1 segundo
|
||||
FechaHoraActual {InstructionName := 'DTL'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DTL; // Fecha y hora actual
|
||||
TempBasica1 : LReal; // Temperatura basica 1
|
||||
CTLimpBasica1 : LReal; // Conductividad limpieza basica 1
|
||||
CTEnjBasica1 : LReal; // Conductividad enjuague basica 1
|
||||
PorcentajeQRefBasica1 : LReal; // Porcentaje Q Referencia basica 1
|
||||
TempAcida : LReal; // Temperatura acida
|
||||
CTLimpAcida : LReal; // Conductividad limpieza acida
|
||||
CTEnjAcida : LReal; // Conductividad enjuague acida
|
||||
PorcentajeQRefAcida : LReal; // Porcentaje Q Referencia acida
|
||||
TempBasica2 : LReal; // Temperatura basica 2
|
||||
CTLimpBasica2 : LReal; // Conductividad limpieza basica 2
|
||||
CTEnjBasica2 : LReal; // Conductividad enjuague basica 2
|
||||
PorcentajeQRefBasica2 : LReal; // Porcentaje Q Referencia basica 2
|
||||
TipoLimpieza : Int; // Tipo de limpieza
|
||||
TiempoLimpieza : "UDT_ZC_CONTADOR_TIEMPO"; // Tiempo de limpieza
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
Informe : Array[*] of "UDT_ZC_INF_LIMP_MAQ"; // Informe
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
s_OrdenInicioInforme { S7_SetPoint := 'True'} : Bool; // Orden inicio informe
|
||||
s_OrdenFinInforme { S7_SetPoint := 'True'} : Bool; // Orden fin informe
|
||||
END_VAR
|
||||
VAR RETAIN
|
||||
s_oldInicio { S7_SetPoint := 'True'} : Bool; // Estado anterior inicio
|
||||
s_oldFin { S7_SetPoint := 'True'} : Bool; // Estado anterior fin
|
||||
END_VAR
|
||||
VAR
|
||||
s_OrdenBorrarInforme : Bool; // Orden borrar informe
|
||||
s_NumeroBorrado : Int; // -1= Todos / Valor= Numero de registro
|
||||
END_VAR
|
||||
VAR RETAIN
|
||||
TiempoRecircBasica1 : Int; // Tiempo en recirculacion basica 1
|
||||
TiempoRecircAcida : Int; // Tiempo en recirculacion acida
|
||||
TiempoRecircBasica2 : Int; // Tiempo en recirculacion basica 2
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
for_i : Int;
|
||||
t_dummyInt : Int;
|
||||
t_IndiceSuperior : Int; // Indice superior del array
|
||||
t_IndiceInferior : Int; // Indice inferior del array
|
||||
t_InformeVacio : "UDT_ZC_INF_LIMP_MAQ";
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
ACTUAL : Int := 1;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
REGION DESCRIPCION
|
||||
//=======================================================================
|
||||
// (C)Copyright ZeusControl 2025 - 2026
|
||||
//=======================================================================
|
||||
(*
|
||||
### Información del Sistema
|
||||
| Hardware Compatible | Entorno de Ingeniería |
|
||||
|---------------------|-----------------------|
|
||||
| PLC serie 1200/1500 | TIA Portal 18 |
|
||||
|
||||
---
|
||||
### Descripción Funcional
|
||||
Bloque de funcion que implementa la gestión de los datos de informe de limpieza de la máquina, manteniendo un histórico de hasta `#N_REGISTROS` limpiezas con todos los datos relevantes de cada fase (básica 1, ácida y básica 2): tiempo total, tipo de limpieza, temperaturas, conductividades de limpieza y enjuague, porcentaje de caudal de referencia y tiempo de recirculación por etapa. Se utiliza en máquinas de membranas para trazabilidad y consulta desde el sistema de supervisión.
|
||||
|
||||
Funcionalidades principales:
|
||||
- Detección de flanco ascendente y descendente en `#EnLimpieza` mediante las variables estáticas `#s_P_Trig_Inicio` y `#s_P_Trig_Fin`, generando el pulso de inicio `#s_OrdenInicioInforme` y el de fin `#s_OrdenFinInforme`.
|
||||
- Inicialización del informe: al recibir `#s_OrdenInicioInforme` se desplazan los informes existentes una posición hacia abajo mediante `MOVE_BLK_VARIANT`, se reinicializan a cero los contadores internos de recirculación (`#TiempoRecircBasica1`, `#TiempoRecircAcida`, `#TiempoRecircBasica2`) y los campos del nuevo informe activo (`#Informe[1]`: tipo de limpieza, tiempos de recirculación por fase, tiempo total, temperaturas, conductividades y porcentajes de caudal de referencia de cada fase). Se almacena la fecha/hora de inicio mediante la conversión realizada por `FC15005_ZC_DTL_TO_ZC_FECHA`.
|
||||
- Datos en curso: mientras `#EnLimpieza` está activo, se incrementan los contadores de tiempo de recirculación de cada fase (`#TiempoRecircBasica1`, `#TiempoRecircAcida`, `#TiempoRecircBasica2`) cuando el pulso de 1 segundo y el flag de fase correspondiente (`#LimpBasica1`, `#LimpAcida`, `#LimpBasica2`) están activos, y se copian en `#Informe[1]` los valores de proceso en tiempo real: tipo de limpieza, tiempo total de limpieza, temperatura, conductividad de limpieza, conductividad de enjuague, porcentaje de caudal de referencia y tiempo de recirculación para cada una de las tres fases.
|
||||
- Fin de informe: al detectar `#s_OrdenFinInforme` se registra la fecha/hora de fin en `#Informe[1].FechaFin`.
|
||||
- Borrado masivo: la entrada `#s_Borrar` permite limpiar completamente todos los registros del array, inicializando fechas, tipo de limpieza, tiempos de recirculación, tiempo total, temperaturas, conductividades y porcentajes de caudal de referencia a sus valores neutros. La propia variable de orden se autodesactiva tras la operación.
|
||||
|
||||
> **Restricciones:** Ninguna.
|
||||
|
||||
---
|
||||
### Dependencias Requeridas
|
||||
| Tipo | Elementos |
|
||||
|------|-----------|
|
||||
| FC | `FC15005_ZC_DTL_TO_ZC_FECHA` |
|
||||
| FB | - |
|
||||
| DB | - |
|
||||
| UDT | `UDT_ZC_CONTADOR_TIEMPO`, `ZC_INF_LIMP_MAQ` |
|
||||
|
||||
---
|
||||
### Historial de Cambios
|
||||
| Versión | Fecha | Técnico | Cambios |
|
||||
|----------|------------|---------|---------|
|
||||
| 01.00.00 | 10.11.2025 | (CNR) | Primera versión. |
|
||||
| 01.00.01 | 03.07.2026 | (ABH) | Cambio a SCL. |
|
||||
*)
|
||||
END_REGION DESCRIPCION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION LIMITES
|
||||
|
||||
// Calculo limites array de informes
|
||||
#t_IndiceInferior := DINT_TO_INT(LOWER_BOUND(ARR := #Informe, DIM := 1));
|
||||
#t_IndiceSuperior := DINT_TO_INT(UPPER_BOUND(ARR := #Informe, DIM := 1));
|
||||
|
||||
// Si no hay informes configurados, salimos inmediatamente.
|
||||
IF #t_IndiceInferior <= 0 THEN
|
||||
RETURN;
|
||||
END_IF;
|
||||
|
||||
END_REGION LIMITES
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION GESTION_ORDENES
|
||||
|
||||
// Orden inicio produccion
|
||||
#s_OrdenInicioInforme := #EnLimpieza AND NOT #s_oldInicio;
|
||||
|
||||
// Orden fin produccion
|
||||
#s_OrdenFinInforme := NOT #EnLimpieza AND #s_oldFin;
|
||||
|
||||
// Estados anteriores
|
||||
#s_oldInicio := #EnLimpieza;
|
||||
#s_oldFin := #EnLimpieza;
|
||||
|
||||
END_REGION GESTION_ORDENES
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION INICIALIZACION
|
||||
|
||||
// Con flanco de inicio informe, desplazamos los registros, reinicializamos los datos y almacenamos la fecha y hora de inicio, todo en la poisicion 1
|
||||
IF #s_OrdenInicioInforme THEN
|
||||
|
||||
|
||||
// Desplazamiento de datos
|
||||
#t_dummyInt := MOVE_BLK_VARIANT(SRC := #Informe, COUNT := INT_TO_UDINT(#t_IndiceSuperior - 1), SRC_INDEX := 0, DEST_INDEX := 1, DEST => #Informe);
|
||||
|
||||
// Reinicializacion de los datos
|
||||
#Informe[#ACTUAL] := #t_InformeVacio;
|
||||
|
||||
#TiempoRecircBasica1 := 0;
|
||||
#TiempoRecircAcida := 0;
|
||||
#TiempoRecircBasica2 := 0;
|
||||
|
||||
// Guardado de fecha y hora actual
|
||||
#Informe[#ACTUAL].FechaInicio := "FC15005_ZC_DTL_TO_ZC_FECHA"(FechaDTL := #FechaHoraActual);
|
||||
|
||||
END_IF;
|
||||
|
||||
END_REGION INICIALIZACION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION DATOS_DURANTE_PRODUCCION
|
||||
|
||||
// Se guardan los datos durante la produccion
|
||||
IF #EnLimpieza THEN
|
||||
|
||||
IF #Pulso1Seg AND #LimpBasica1 THEN
|
||||
#TiempoRecircBasica1 += 1;
|
||||
END_IF;
|
||||
IF #Pulso1Seg AND #LimpAcida THEN
|
||||
#TiempoRecircAcida += 1;
|
||||
END_IF;
|
||||
IF #Pulso1Seg AND #LimpBasica2 THEN
|
||||
#TiempoRecircBasica2 += 1;
|
||||
END_IF;
|
||||
|
||||
#Informe[#ACTUAL].TipoLimpieza := #TipoLimpieza;
|
||||
|
||||
#Informe[#ACTUAL].TiempoLimpieza.Hora := #TiempoLimpieza.Hora;
|
||||
#Informe[#ACTUAL].TiempoLimpieza.Minuto := #TiempoLimpieza.Minuto;
|
||||
#Informe[#ACTUAL].TiempoLimpieza.Segundo := #TiempoLimpieza.Segundo;
|
||||
|
||||
#Informe[#ACTUAL].TempBasica1 := #TempBasica1;
|
||||
#Informe[#ACTUAL].CTLimpBasica1 := #CTLimpBasica1;
|
||||
#Informe[#ACTUAL].CTEnjBasica1 := #CTEnjBasica1;
|
||||
#Informe[#ACTUAL].PorcentajeQRefBasica1 := #PorcentajeQRefBasica1;
|
||||
#Informe[#ACTUAL].TiempoRecircBasica1 := #TiempoRecircBasica1;
|
||||
|
||||
#Informe[#ACTUAL].TempAcida := #TempAcida;
|
||||
#Informe[#ACTUAL].CTLimpAcida := #CTLimpAcida;
|
||||
#Informe[#ACTUAL].CTEnjAcida := #CTEnjAcida;
|
||||
#Informe[#ACTUAL].PorcentajeQRefAcida := #PorcentajeQRefAcida;
|
||||
#Informe[#ACTUAL].TiempoRecircAcida := #TiempoRecircAcida;
|
||||
|
||||
#Informe[#ACTUAL].TempBasica2 := #TempBasica2;
|
||||
#Informe[#ACTUAL].CTLimpBasica2 := #CTLimpBasica2;
|
||||
#Informe[#ACTUAL].CTEnjBasica2 := #CTEnjBasica2;
|
||||
#Informe[#ACTUAL].PorcentajeQRefBasica2 := #PorcentajeQRefBasica2;
|
||||
#Informe[#ACTUAL].TiempoRecircBasica2 := #TiempoRecircBasica2;
|
||||
|
||||
END_IF;
|
||||
|
||||
END_REGION DATOS_DURANTE_PRODUCCION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION FIN_INFORME
|
||||
|
||||
// Se guardan los datos durante la produccion
|
||||
IF #s_OrdenFinInforme THEN
|
||||
|
||||
// Guardado de fecha y hora actual
|
||||
#Informe[#ACTUAL].FechaFin := "FC15005_ZC_DTL_TO_ZC_FECHA"(FechaDTL := #FechaHoraActual);
|
||||
|
||||
END_IF;
|
||||
|
||||
END_REGION FIN_INFORME
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION BORRADO_DATOS
|
||||
|
||||
// Borrado de todos los registros
|
||||
IF #s_OrdenBorrarInforme THEN
|
||||
IF #s_NumeroBorrado = -1 OR #s_NumeroBorrado = 0 THEN
|
||||
|
||||
FOR #for_i := 1 TO #t_IndiceSuperior DO
|
||||
#Informe[#for_i] := #t_InformeVacio;
|
||||
END_FOR;
|
||||
|
||||
ELSIF #s_NumeroBorrado >= 1 AND #s_NumeroBorrado < #t_IndiceSuperior THEN
|
||||
|
||||
// Borrado registro especifico
|
||||
#Informe[#s_NumeroBorrado] := #t_InformeVacio;
|
||||
|
||||
// Desplazamiento de datos
|
||||
#t_dummyInt := MOVE_BLK_VARIANT(SRC := #Informe,
|
||||
COUNT := INT_TO_UDINT(#t_IndiceSuperior - #s_NumeroBorrado),
|
||||
SRC_INDEX := #s_NumeroBorrado,
|
||||
DEST_INDEX := #s_NumeroBorrado - 1,
|
||||
DEST => #Informe);
|
||||
|
||||
// Borrado del ultimo registro
|
||||
#Informe[#t_IndiceSuperior] := #t_InformeVacio;
|
||||
|
||||
ELSIF #s_NumeroBorrado = #t_IndiceSuperior THEN
|
||||
|
||||
// Borrado de ultimo registro
|
||||
#Informe[#s_NumeroBorrado] := #t_InformeVacio;
|
||||
|
||||
END_IF;
|
||||
|
||||
#s_OrdenBorrarInforme := FALSE;
|
||||
|
||||
END_IF;
|
||||
|
||||
END_REGION BORRADO_DATOS
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
@@ -0,0 +1,477 @@
|
||||
FUNCTION "FC11_ZC_INF_GESTOR" : Void
|
||||
TITLE = FC11_ZC_GESTOR_INFORMES
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
AUTHOR : ABH
|
||||
FAMILY : ZeusControl
|
||||
VERSION : 1.0
|
||||
//Funcion para gestion de informes
|
||||
VAR_INPUT
|
||||
Pulso1Seg : Bool; // Pulso de 1 segundo
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
for_i : Int; // Variable para bucles FOR
|
||||
t_PosicionRegistro : Int; // Posicion del registro encontrado en el buffer
|
||||
t_RegistroEncontrado : Bool; // Indicador de registro encontrado
|
||||
t_RetVal : Int; // Variable para su uso en programa
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
REPOSO : Int := 0; // Etapa reposo
|
||||
ESPERA_ENTRE_AVISOS : Int := 10; // Etapa espera entre avisos
|
||||
LANZAR_AVISO : Int := 20; // Etapa lanzar aviso
|
||||
ESPERA_CONFIRMACION : Int := 30; // Etapa espera confirmacion
|
||||
FALLO : Int := 40; // Etapa fallo
|
||||
BORRAR_DATOS : Int := 50; // Etapa borrar datos
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
REGION DESCRIPCION
|
||||
(*
|
||||
###### (C)Copyright ZeusControl 2024 - 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 la gestión e interfaz de escritura de informes hacia el sistema SCADA/HMI mediante una máquina de estados y la lectura de un buffer.
|
||||
|
||||
Las tareas que realiza son las siguientes:
|
||||
|
||||
- Extracción de datos del buffer: Búsqueda inversa del registro más antiguo pendiente de envío evaluando la condición `Registrar` = 1 mediante un bucle `FOR`.
|
||||
- Transferencia del registro a la estructura estática `Gestion.Datos` y generación de un `Id` único basado en la fecha y hora actual.
|
||||
- Limpieza inmediata de todas las variables (Booleanos, Reales, Enteros, Fechas y Strings) en la posición original del buffer.
|
||||
- Ejecución de la etapa **REPOSO**: Activación de la secuencia ante la orden `OrdenIniciar`, siempre que se detecte conexión con el SCADA y la habilitación general esté activa.
|
||||
- Ejecución de la etapa **ESPERA_ENTRE_AVISOS**: Temporización basada en pulsos de 1 segundo (`Pulso1Seg`) antes de un reintento. Deriva a fallo si se supera el máximo de intentos.
|
||||
- Ejecución de la etapa **LANZAR_AVISO**: Activación de la señal `Aviso.Registrar` hacia el SCADA y paso a espera tras cumplirse el tiempo parametrizado.
|
||||
- Ejecución de la etapa **ESPERA_CONFIRMACION**: Monitoreo de la respuesta del sistema superior. Si `Aviso.Estado` es igual a 4, el envío es exitoso. Si hay error (estado 12) o agotamiento de tiempo, se incrementa el contador de intentos y se repite el ciclo.
|
||||
- Ejecución de la etapa **FALLO**: Generación de una traza de sistema (`TRZ_CAT_1_SYS`) registrando el código de error `TRZ_SYS_INF_ERR` ante la imposibilidad de entrega del informe.
|
||||
- Ejecución de la etapa **BORRAR_DATOS**: Reseteo íntegro de la estructura `Gestion.Datos` para preparar el sistema para el próximo ciclo de comunicación y retorno al estado de reposo.
|
||||
|
||||
---
|
||||
### Dependencias Requeridas
|
||||
| Tipo | Elementos |
|
||||
|------|-----------|
|
||||
| FC | - |
|
||||
| FB | - |
|
||||
| DB | - |
|
||||
| UDT | - |
|
||||
|
||||
---
|
||||
### Historial de Cambios
|
||||
| Versión | Fecha | Técnico | Cambios |
|
||||
|----------|------------|---------|---------|
|
||||
| 01.00.00 | 30.07.2024 | (ABH) | Primera version. |
|
||||
| 01.00.01 | 11.09.2024 | (ABH) | Se añade la generacion de ID con fecha y hora en el momento del guardar en SQL. |
|
||||
*)
|
||||
END_REGION DESCRIPCION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION GESTION_INFORMES
|
||||
|
||||
// =============================================================================
|
||||
// COPIAMOS EL ULTIMO REGISTRO (El mas antiguo) A LA VARIABLE REGISTRO QUE ES LA
|
||||
// ENCARGADA DE COMUNICARLA CON EL SCADA/HMI
|
||||
IF "DB11_INF".Gestion.HabilitacionGeneral AND "DB11_INF".Gestion.Datos.Registrar = 0 AND #Pulso1Seg THEN
|
||||
|
||||
// =============================================================================
|
||||
// Buscamos el ultimo registro
|
||||
FOR #for_i := "N_MAX_INF_BUFFER" TO 0 BY -1 DO
|
||||
|
||||
// =============================================================================
|
||||
// Registro encontrado
|
||||
IF "DB11_INF".Buffer[#for_i].Registrar = 1 THEN
|
||||
#t_PosicionRegistro := #for_i;
|
||||
#t_RegistroEncontrado := TRUE;
|
||||
EXIT;
|
||||
END_IF;
|
||||
|
||||
END_FOR;
|
||||
|
||||
// =============================================================================
|
||||
// Si hemos encontrado el registro, copiamos a variable estatica
|
||||
IF #t_RegistroEncontrado THEN
|
||||
|
||||
// =============================================================================
|
||||
// Copiamos el los datos de la traza a variable estatica para tratarla
|
||||
"DB11_INF".Gestion.Datos := "DB11_INF".Buffer[#t_PosicionRegistro];
|
||||
"DB11_INF".Gestion.Datos.Id := "FC15006_ZC_DTL_TO_STRING"(FechaDTL := "DB1_SYS".FechaHoraActual, Formato := 3);
|
||||
|
||||
// =============================================================================
|
||||
// Quitamos el registro del buffer
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Registrar := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Id := '';
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Tipo := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Codigo := '';
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_1.Ano := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_1.Mes := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_1.Dia := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_1.DiaSemana := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_1.Hora := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_1.Minuto := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_1.Segundo := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_1.NanoSegundo := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_2.Ano := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_2.Mes := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_2.Dia := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_2.DiaSemana := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_2.Hora := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_2.Minuto := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_2.Segundo := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_2.NanoSegundo := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_3.Ano := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_3.Mes := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_3.Dia := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_3.DiaSemana := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_3.Hora := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_3.Minuto := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_3.Segundo := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Fecha_3.NanoSegundo := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_1 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_2 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_3 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_4 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_5 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_6 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_7 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_8 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_9 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_10 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_11 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_12 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_13 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_14 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_15 := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_1 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_2 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_3 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_4 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_5 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_6 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_7 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_8 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_9 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_10 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_11 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_12 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_13 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_14 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_15 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_16 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_17 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_18 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_19 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_20 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_21 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_22 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_23 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_24 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_25 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_26 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_27 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_28 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_29 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_30 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_31 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Bool_32 := FALSE;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_1 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_2 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_3 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_4 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_5 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_6 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_7 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_8 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_9 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_10 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_11 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_12 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_13 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_14 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_15 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_16 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_17 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_18 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_19 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Real_20 := 0.0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_1 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_2 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_3 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_4 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_5 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_6 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_7 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_8 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_9 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_10 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_11 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_12 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_13 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_14 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_15 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_16 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_17 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_18 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_19 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].Int_20 := 0;
|
||||
|
||||
END_IF;
|
||||
|
||||
END_IF;
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// Si existe registro a trazar, lanzamos la orden de iniciar la secuencia
|
||||
IF "DB11_INF".Gestion.Datos.Registrar = 1 AND "DB11_INF".Gestion.Etapa = #REPOSO AND "DB11_INF".Gestion.EstadoConexion THEN
|
||||
|
||||
// Lanzamos la orden de iniciar la secuencia de registro
|
||||
"DB11_INF".Gestion.OrdenIniciar := TRUE;
|
||||
|
||||
END_IF;
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION SECUENCIA_INFORME
|
||||
|
||||
|
||||
IF NOT "DB11_INF".Gestion.HabilitacionGeneral AND "DB11_INF".Gestion.Etapa <> #REPOSO THEN
|
||||
"DB11_INF".Gestion.Etapa := #BORRAR_DATOS;
|
||||
END_IF;
|
||||
|
||||
|
||||
CASE "DB11_INF".Gestion.Etapa OF
|
||||
|
||||
|
||||
// =============================================================================
|
||||
#REPOSO:
|
||||
IF "DB11_INF".Gestion.OrdenIniciar THEN
|
||||
"DB11_INF".Gestion.Etapa := #LANZAR_AVISO;
|
||||
"DB11_INF".Gestion.OrdenIniciar := FALSE;
|
||||
"DB11_INF".Gestion.Aviso.Registrar := 0;
|
||||
"DB11_INF".Gestion.TiempoActual := 0;
|
||||
"DB11_INF".Gestion.Aviso.NumeroIntentosActual := 0;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
// =============================================================================
|
||||
#ESPERA_ENTRE_AVISOS:
|
||||
// Contador de tiempo de etapa
|
||||
IF #Pulso1Seg THEN
|
||||
"DB11_INF".Gestion.TiempoActual += 1;
|
||||
END_IF;
|
||||
// Tiempo maximo de espera
|
||||
IF ("DB11_INF".Gestion.TiempoActual >= "DB11_INF".Gestion.SP_Tiempo) THEN
|
||||
"DB11_INF".Gestion.TiempoActual := 0;
|
||||
"DB11_INF".Gestion.Etapa := #LANZAR_AVISO;
|
||||
END_IF;
|
||||
|
||||
// Si ya se ha alcanzado el numero maximo de intentos, generamos la traza
|
||||
IF "DB11_INF".Gestion.Aviso.NumeroIntentosActual >= "DB11_INF".Gestion.NumeroMaxIntentos THEN
|
||||
"DB11_INF".Gestion.Etapa := #FALLO;
|
||||
"DB11_INF".Gestion.Aviso.Registrar := 0;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
// =============================================================================
|
||||
#LANZAR_AVISO:
|
||||
|
||||
IF #Pulso1Seg THEN
|
||||
"DB11_INF".Gestion.TiempoActual += 1;
|
||||
END_IF;
|
||||
"DB11_INF".Gestion.Aviso.Registrar := TRUE;
|
||||
|
||||
|
||||
|
||||
IF ("DB11_INF".Gestion.TiempoActual >= "DB11_INF".Gestion.SP_Tiempo) THEN
|
||||
"DB11_INF".Gestion.Etapa := #ESPERA_CONFIRMACION;
|
||||
END_IF;
|
||||
|
||||
|
||||
// =============================================================================
|
||||
#ESPERA_CONFIRMACION:
|
||||
|
||||
IF #Pulso1Seg THEN
|
||||
"DB11_INF".Gestion.TiempoActual += 1;
|
||||
END_IF;
|
||||
|
||||
// Confirmacion desde SCADA OK
|
||||
IF "DB11_INF".Gestion.Aviso.Estado = 4 THEN
|
||||
"DB11_INF".Gestion.TiempoActual := 0;
|
||||
"DB11_INF".Gestion.Aviso.Estado := 0;
|
||||
"DB11_INF".Gestion.Aviso.Registrar := FALSE;
|
||||
"DB11_INF".Gestion.Etapa := #BORRAR_DATOS;
|
||||
END_IF;
|
||||
|
||||
// Tiempo maximo de espera
|
||||
IF ("DB11_INF".Gestion.TiempoActual >= "DB11_INF".Gestion.SP_Tiempo)
|
||||
OR
|
||||
("DB11_INF".Gestion.Aviso.Estado = 12)
|
||||
THEN
|
||||
"DB11_INF".Gestion.TiempoActual := 0;
|
||||
"DB11_INF".Gestion.Aviso.Estado := 0;
|
||||
"DB11_INF".Gestion.Aviso.Registrar := FALSE;
|
||||
"DB11_INF".Gestion.Etapa := #ESPERA_ENTRE_AVISOS;
|
||||
"DB11_INF".Gestion.Aviso.NumeroIntentosActual += 1;
|
||||
END_IF;
|
||||
|
||||
|
||||
// =============================================================================
|
||||
#BORRAR_DATOS:
|
||||
|
||||
"DB11_INF".Gestion.Datos.Registrar := 0;
|
||||
"DB11_INF".Gestion.Datos.Id := '';
|
||||
"DB11_INF".Gestion.Datos.Tipo := 0;
|
||||
"DB11_INF".Gestion.Datos.Codigo := '';
|
||||
"DB11_INF".Gestion.Datos.Fecha_1.Ano := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_1.Mes := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_1.Dia := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_1.DiaSemana := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_1.Hora := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_1.Minuto := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_1.Segundo := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_1.NanoSegundo := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_2.Ano := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_2.Mes := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_2.Dia := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_2.DiaSemana := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_2.Hora := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_2.Minuto := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_2.Segundo := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_2.NanoSegundo := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_3.Ano := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_3.Mes := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_3.Dia := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_3.DiaSemana := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_3.Hora := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_3.Minuto := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_3.Segundo := 0;
|
||||
"DB11_INF".Gestion.Datos.Fecha_3.NanoSegundo := 0;
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_1 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_2 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_3 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_4 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_5 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_6 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_7 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_8 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_9 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_10 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_11 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_12 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_13 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_14 :=
|
||||
"DB11_INF".Buffer[#t_PosicionRegistro].CodString_15 := 0;
|
||||
"DB11_INF".Gestion.Datos.Bool_1 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_2 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_3 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_4 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_5 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_6 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_7 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_8 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_9 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_10 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_11 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_12 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_13 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_14 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_15 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_16 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_17 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_18 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_19 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_20 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_21 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_22 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_23 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_24 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_25 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_26 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_27 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_28 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_29 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_30 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_31 :=
|
||||
"DB11_INF".Gestion.Datos.Bool_32 := FALSE;
|
||||
"DB11_INF".Gestion.Datos.Real_1 :=
|
||||
"DB11_INF".Gestion.Datos.Real_2 :=
|
||||
"DB11_INF".Gestion.Datos.Real_3 :=
|
||||
"DB11_INF".Gestion.Datos.Real_4 :=
|
||||
"DB11_INF".Gestion.Datos.Real_5 :=
|
||||
"DB11_INF".Gestion.Datos.Real_6 :=
|
||||
"DB11_INF".Gestion.Datos.Real_7 :=
|
||||
"DB11_INF".Gestion.Datos.Real_8 :=
|
||||
"DB11_INF".Gestion.Datos.Real_9 :=
|
||||
"DB11_INF".Gestion.Datos.Real_10 :=
|
||||
"DB11_INF".Gestion.Datos.Real_11 :=
|
||||
"DB11_INF".Gestion.Datos.Real_12 :=
|
||||
"DB11_INF".Gestion.Datos.Real_13 :=
|
||||
"DB11_INF".Gestion.Datos.Real_14 :=
|
||||
"DB11_INF".Gestion.Datos.Real_15 :=
|
||||
"DB11_INF".Gestion.Datos.Real_16 :=
|
||||
"DB11_INF".Gestion.Datos.Real_17 :=
|
||||
"DB11_INF".Gestion.Datos.Real_18 :=
|
||||
"DB11_INF".Gestion.Datos.Real_19 :=
|
||||
"DB11_INF".Gestion.Datos.Real_20 := 0.0;
|
||||
"DB11_INF".Gestion.Datos.Int_1 :=
|
||||
"DB11_INF".Gestion.Datos.Int_2 :=
|
||||
"DB11_INF".Gestion.Datos.Int_3 :=
|
||||
"DB11_INF".Gestion.Datos.Int_4 :=
|
||||
"DB11_INF".Gestion.Datos.Int_5 :=
|
||||
"DB11_INF".Gestion.Datos.Int_6 :=
|
||||
"DB11_INF".Gestion.Datos.Int_7 :=
|
||||
"DB11_INF".Gestion.Datos.Int_8 :=
|
||||
"DB11_INF".Gestion.Datos.Int_9 :=
|
||||
"DB11_INF".Gestion.Datos.Int_10 :=
|
||||
"DB11_INF".Gestion.Datos.Int_11 :=
|
||||
"DB11_INF".Gestion.Datos.Int_12 :=
|
||||
"DB11_INF".Gestion.Datos.Int_13 :=
|
||||
"DB11_INF".Gestion.Datos.Int_14 :=
|
||||
"DB11_INF".Gestion.Datos.Int_15 :=
|
||||
"DB11_INF".Gestion.Datos.Int_16 :=
|
||||
"DB11_INF".Gestion.Datos.Int_17 :=
|
||||
"DB11_INF".Gestion.Datos.Int_18 :=
|
||||
"DB11_INF".Gestion.Datos.Int_19 :=
|
||||
"DB11_INF".Gestion.Datos.Int_20 := 0;
|
||||
"DB11_INF".Gestion.Aviso.Registrar := 0;
|
||||
"DB11_INF".Gestion.Etapa := #REPOSO;
|
||||
|
||||
// =============================================================================
|
||||
#FALLO:
|
||||
|
||||
"FC8_ZC_TRZ_REGISTRO"(FechaHora := "DB1_SYS".FechaHoraActual,
|
||||
Registrar := 1,
|
||||
Categoria := "TRZ_CAT_1_SYS",
|
||||
User := '',
|
||||
CodInt_1 := "TRZ_SYS_INF_ERR",
|
||||
CodInt_2 := 0,
|
||||
CodInt_3 := 0,
|
||||
CodInt_4 := 0,
|
||||
CodInt_5 := 0,
|
||||
CodReal_1 := 0.0,
|
||||
CodReal_2 := 0.0);
|
||||
"DB11_INF".Gestion.Datos.Registrar := 0;
|
||||
"DB11_INF".Gestion.Etapa := #REPOSO;
|
||||
|
||||
END_CASE;
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
END_FUNCTION
|
||||
|
||||
@@ -0,0 +1,365 @@
|
||||
FUNCTION "FC12_ZC_INF_REGISTRO" : Void
|
||||
TITLE = FC12_ZC_INFORME_REGISTRO
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
AUTHOR : ABH
|
||||
FAMILY : ZeusControl
|
||||
VERSION : 1.0
|
||||
//Funcion para almacenar una traza en el buffer de informes
|
||||
VAR_INPUT
|
||||
Registrar : USInt; // Orden registrar (0= no registrar / 1= registrar)
|
||||
Tipo : Int; // Tipo
|
||||
Codigo : String; // Codigo produccion
|
||||
Fecha_1_Ano : UInt; // Fecha 1 Año
|
||||
Fecha_1_Mes : USInt; // Fecha 1 Mes
|
||||
Fecha_1_Dia : USInt; // Fecha 1 Dia
|
||||
Fecha_1_DiaSemana : USInt; // Fecha 1 Dia de la semana
|
||||
Fecha_1_Hora : USInt; // Fecha 1 Hora
|
||||
Fecha_1_Minuto : USInt; // Fecha 1 Minuto
|
||||
Fecha_1_Segundo : USInt; // Fecha 1 Segundo
|
||||
Fecha_1_NanoSegundo : UDInt; // Fecha 1 Nanosegundo
|
||||
Fecha_2_Ano : UInt; // Fecha 2 Año
|
||||
Fecha_2_Mes : USInt; // Fecha 2 Mes
|
||||
Fecha_2_Dia : USInt; // Fecha 2 Dia
|
||||
Fecha_2_DiaSemana : USInt; // Fecha 2 Dia de la semana
|
||||
Fecha_2_Hora : USInt; // Fecha 2 Hora
|
||||
Fecha_2_Minuto : USInt; // Fecha 2 Minuto
|
||||
Fecha_2_Segundo : USInt; // Fecha 2 Segundo
|
||||
Fecha_2_NanoSegundo : UDInt; // Fecha 2 Nanosegundo
|
||||
Fecha_3_Ano : UInt; // Fecha 3 Año
|
||||
Fecha_3_Mes : USInt; // Fecha 3 Mes
|
||||
Fecha_3_Dia : USInt; // Fecha 3 Dia
|
||||
Fecha_3_DiaSemana : USInt; // Fecha 3 Dia de la semana
|
||||
Fecha_3_Hora : USInt; // Fecha 3 Hora
|
||||
Fecha_3_Minuto : USInt; // Fecha 3 Minuto
|
||||
Fecha_3_Segundo : USInt; // Fecha 3 Segundo
|
||||
Fecha_3_NanoSegundo : UDInt; // Fecha 3 Nanosegundo
|
||||
Fecha_4_Ano : UInt; // Fecha 4 Año
|
||||
Fecha_4_Mes : USInt; // Fecha 4 Mes
|
||||
Fecha_4_Dia : USInt; // Fecha 4 Dia
|
||||
Fecha_4_DiaSemana : USInt; // Fecha 4 Dia de la semana
|
||||
Fecha_4_Hora : USInt; // Fecha 4 Hora
|
||||
Fecha_4_Minuto : USInt; // Fecha 4 Minuto
|
||||
Fecha_4_Segundo : USInt; // Fecha 4 Segundo
|
||||
Fecha_4_NanoSegundo : UDInt; // Fecha 4 Nanosegundo
|
||||
CodString_1 : Int; // Codigo string 1
|
||||
CodString_2 : Int; // Codigo string 2
|
||||
CodString_3 : Int; // Codigo string 3
|
||||
CodString_4 : Int; // Codigo string 4
|
||||
CodString_5 : Int; // Codigo string 5
|
||||
CodString_6 : Int; // Codigo string 6
|
||||
CodString_7 : Int; // Codigo string 7
|
||||
CodString_8 : Int; // Codigo string 8
|
||||
CodString_9 : Int; // Codigo string 9
|
||||
CodString_10 : Int; // Codigo string 10
|
||||
CodString_11 : Int; // Codigo string 11
|
||||
CodString_12 : Int; // Codigo string 12
|
||||
CodString_13 : Int; // Codigo string 13
|
||||
CodString_14 : Int; // Codigo string 14
|
||||
CodString_15 : Int; // Codigo string 15
|
||||
Bool_1 : Bool; // Valor booleano 1
|
||||
Bool_2 : Bool; // Valor booleano 2
|
||||
Bool_3 : Bool; // Valor booleano 3
|
||||
Bool_4 : Bool; // Valor booleano 4
|
||||
Bool_5 : Bool; // Valor booleano 5
|
||||
Bool_6 : Bool; // Valor booleano 6
|
||||
Bool_7 : Bool; // Valor booleano 7
|
||||
Bool_8 : Bool; // Valor booleano 8
|
||||
Bool_9 : Bool; // Valor booleano 9
|
||||
Bool_10 : Bool; // Valor booleano 10
|
||||
Bool_11 : Bool; // Valor booleano 11
|
||||
Bool_12 : Bool; // Valor booleano 12
|
||||
Bool_13 : Bool; // Valor booleano 13
|
||||
Bool_14 : Bool; // Valor booleano 14
|
||||
Bool_15 : Bool; // Valor booleano 15
|
||||
Bool_16 : Bool; // Valor booleano 16
|
||||
Bool_17 : Bool; // Valor booleano 17
|
||||
Bool_18 : Bool; // Valor booleano 18
|
||||
Bool_19 : Bool; // Valor booleano 19
|
||||
Bool_20 : Bool; // Valor booleano 20
|
||||
Bool_21 : Bool; // Valor booleano 21
|
||||
Bool_22 : Bool; // Valor booleano 22
|
||||
Bool_23 : Bool; // Valor booleano 23
|
||||
Bool_24 : Bool; // Valor booleano 24
|
||||
Bool_25 : Bool; // Valor booleano 25
|
||||
Bool_26 : Bool; // Valor booleano 26
|
||||
Bool_27 : Bool; // Valor booleano 27
|
||||
Bool_28 : Bool; // Valor booleano 28
|
||||
Bool_29 : Bool; // Valor booleano 29
|
||||
Bool_30 : Bool; // Valor booleano 30
|
||||
Bool_31 : Bool; // Valor booleano 31
|
||||
Bool_32 : Bool; // Valor booleano 32
|
||||
Real_1 : Real; // Valor real 1
|
||||
Real_2 : Real; // Valor real 2
|
||||
Real_3 : Real; // Valor real 3
|
||||
Real_4 : Real; // Valor real 4
|
||||
Real_5 : Real; // Valor real 5
|
||||
Real_6 : Real; // Valor real 6
|
||||
Real_7 : Real; // Valor real 7
|
||||
Real_8 : Real; // Valor real 8
|
||||
Real_9 : Real; // Valor real 9
|
||||
Real_10 : Real; // Valor real 10
|
||||
Real_11 : Real; // Valor real 11
|
||||
Real_12 : Real; // Valor real 12
|
||||
Real_13 : Real; // Valor real 13
|
||||
Real_14 : Real; // Valor real 14
|
||||
Real_15 : Real; // Valor real 15
|
||||
Real_16 : Real; // Valor real 16
|
||||
Real_17 : Real; // Valor real 17
|
||||
Real_18 : Real; // Valor real 18
|
||||
Real_19 : Real; // Valor real 19
|
||||
Real_20 : Real; // Valor real 20
|
||||
Int_1 : Int; // Valor entero 1
|
||||
Int_2 : Int; // Valor entero 2
|
||||
Int_3 : Int; // Valor entero 3
|
||||
Int_4 : Int; // Valor entero 4
|
||||
Int_5 : Int; // Valor entero 5
|
||||
Int_6 : Int; // Valor entero 6
|
||||
Int_7 : Int; // Valor entero 7
|
||||
Int_8 : Int; // Valor entero 8
|
||||
Int_9 : Int; // Valor entero 9
|
||||
Int_10 : Int; // Valor entero 10
|
||||
Int_11 : Int; // Valor entero 11
|
||||
Int_12 : Int; // Valor entero 12
|
||||
Int_13 : Int; // Valor entero 13
|
||||
Int_14 : Int; // Valor entero 14
|
||||
Int_15 : Int; // Valor entero 15
|
||||
Int_16 : Int; // Valor entero 16
|
||||
Int_17 : Int; // Valor entero 17
|
||||
Int_18 : Int; // Valor entero 18
|
||||
Int_19 : Int; // Valor entero 19
|
||||
Int_20 : Int; // Valor entero 20
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
t_dummy : Int;
|
||||
t_fecha_vacia {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
REGION DESCRIPCION
|
||||
(*
|
||||
###### (C)Copyright ZeusControl 2024 - 2026
|
||||
|
||||
---
|
||||
### 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 almacenamiento y estructuración masiva de registros de trazabilidad dentro del buffer de informes del sistema.
|
||||
|
||||
En ella se realizan las siguientes acciones:
|
||||
|
||||
- Comprobación de habilitación: Verificación de la variable de permiso `HabilitacionGeneral`; si no se encuentra activa, se omite la ejecución del bloque mediante un retorno anticipado.
|
||||
- Desplazamiento de datos (FIFO):
|
||||
- Ejecución de la instrucción de bloque para desplazar todos los registros existentes en el Buffer una posición hacia abajo.
|
||||
- Liberación del índice 0 del array para permitir la inserción del nuevo registro sin sobrescribir el histórico reciente.
|
||||
- Gestión e inserción del nuevo registro:
|
||||
- Generación y asignación de un identificador único (Id) transformando la fecha y hora actual del sistema a formato cadena.
|
||||
- Escritura de los metadatos de control y catalogación (Registrar, Tipo, Codigo) en la primera posición del buffer.
|
||||
- Procesamiento y validación de hasta 4 marcas de tiempo dinámicas (Fecha_1 a Fecha_4), forzando una fecha por defecto (01/01/1970) si el año recibido es 0.
|
||||
- Mapeo y transferencia masiva de todas las variables de proceso vinculadas al evento, incluyendo cadenas de texto (CodString_1 a 15), booleanos (Bool_1 a 32), reales (Real_1 a 20) y enteros (Int_1 a 20).
|
||||
|
||||
---
|
||||
### Dependencias Requeridas
|
||||
| Tipo | Elementos |
|
||||
|------|-----------|
|
||||
| FC | - |
|
||||
| FB | - |
|
||||
| DB | - |
|
||||
| UDT | - |
|
||||
|
||||
---
|
||||
### Historial de Cambios
|
||||
| Versión | Fecha | Técnico | Cambios |
|
||||
|----------|------------|---------|---------|
|
||||
| 01.00.01 | 30.07.2024 | (ABH) | Primera version. |
|
||||
| 01.00.02 | 11.09.2024 | (ABH) | Se elimina la generacion de ID, para que lo genere el gestor. |
|
||||
| 01.00.03 | 06.11.2025 | (ABH) | Fix escritura de hora si año seleccionado es 0. |
|
||||
*)
|
||||
END_REGION DESCRIPCION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION COMPROBACION_HABILITACION
|
||||
|
||||
// Si no esta habilitado los informes, salimos de la funcion.
|
||||
IF NOT "DB11_INF".Gestion.HabilitacionGeneral THEN
|
||||
RETURN;
|
||||
END_IF;
|
||||
|
||||
END_REGION COMPROBACION_HABILITACION
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION DESPLAZAMIENTO_DE_DATOS
|
||||
|
||||
// Desplazamos los datos del buffer una posicion hacia abajo
|
||||
#t_dummy := MOVE_BLK_VARIANT(SRC := "DB11_INF".Buffer, COUNT := INT_TO_UDINT(("N_MAX_INF_BUFFER")), SRC_INDEX := 0, DEST_INDEX := 1, DEST => "DB11_INF".Buffer);
|
||||
|
||||
END_REGION DESPLAZAMIENTO_DE_DATOS
|
||||
|
||||
|
||||
// ==========================================================================================================
|
||||
REGION GESTION_REGISTRO_INFORME
|
||||
|
||||
// Grabamos el nuevo registro
|
||||
"DB11_INF".Buffer[0].Registrar := #Registrar;
|
||||
"DB11_INF".Buffer[0].Id := "FC15006_ZC_DTL_TO_STRING"(FechaDTL := "DB1_SYS".FechaHoraActual, Formato := 3);
|
||||
"DB11_INF".Buffer[0].Tipo := #Tipo;
|
||||
"DB11_INF".Buffer[0].Codigo := #Codigo;
|
||||
IF #Fecha_1_Ano = 0 THEN
|
||||
"DB11_INF".Buffer[0].Fecha_1.Ano := 1970;
|
||||
"DB11_INF".Buffer[0].Fecha_1.Mes := 1;
|
||||
"DB11_INF".Buffer[0].Fecha_1.Dia := 1;
|
||||
"DB11_INF".Buffer[0].Fecha_1.DiaSemana := 5;
|
||||
ELSE
|
||||
"DB11_INF".Buffer[0].Fecha_1.Ano := #Fecha_1_Ano;
|
||||
"DB11_INF".Buffer[0].Fecha_1.Mes := #Fecha_1_Mes;
|
||||
"DB11_INF".Buffer[0].Fecha_1.Dia := #Fecha_1_Dia;
|
||||
"DB11_INF".Buffer[0].Fecha_1.DiaSemana := #Fecha_1_DiaSemana;
|
||||
END_IF;
|
||||
"DB11_INF".Buffer[0].Fecha_1.Hora := #Fecha_1_Hora;
|
||||
"DB11_INF".Buffer[0].Fecha_1.Minuto := #Fecha_1_Minuto;
|
||||
"DB11_INF".Buffer[0].Fecha_1.Segundo := #Fecha_1_Segundo;
|
||||
"DB11_INF".Buffer[0].Fecha_1.NanoSegundo := #Fecha_1_NanoSegundo;
|
||||
IF #Fecha_2_Ano = 0 THEN
|
||||
"DB11_INF".Buffer[0].Fecha_2.Ano := 1970;
|
||||
"DB11_INF".Buffer[0].Fecha_2.Mes := 1;
|
||||
"DB11_INF".Buffer[0].Fecha_2.Dia := 1;
|
||||
"DB11_INF".Buffer[0].Fecha_2.DiaSemana := 5;
|
||||
ELSE
|
||||
"DB11_INF".Buffer[0].Fecha_2.Ano := #Fecha_2_Ano;
|
||||
"DB11_INF".Buffer[0].Fecha_2.Mes := #Fecha_2_Mes;
|
||||
"DB11_INF".Buffer[0].Fecha_2.Dia := #Fecha_2_Dia;
|
||||
"DB11_INF".Buffer[0].Fecha_2.DiaSemana := #Fecha_2_DiaSemana;
|
||||
END_IF;
|
||||
"DB11_INF".Buffer[0].Fecha_2.Hora := #Fecha_2_Hora;
|
||||
"DB11_INF".Buffer[0].Fecha_2.Minuto := #Fecha_2_Minuto;
|
||||
"DB11_INF".Buffer[0].Fecha_2.Segundo := #Fecha_2_Segundo;
|
||||
"DB11_INF".Buffer[0].Fecha_2.NanoSegundo := #Fecha_2_NanoSegundo;
|
||||
IF #Fecha_3_Ano = 0 THEN
|
||||
"DB11_INF".Buffer[0].Fecha_3.Ano := 1970;
|
||||
"DB11_INF".Buffer[0].Fecha_3.Mes := 1;
|
||||
"DB11_INF".Buffer[0].Fecha_3.Dia := 1;
|
||||
"DB11_INF".Buffer[0].Fecha_3.DiaSemana := 5;
|
||||
ELSE
|
||||
"DB11_INF".Buffer[0].Fecha_3.Ano := #Fecha_3_Ano;
|
||||
"DB11_INF".Buffer[0].Fecha_3.Mes := #Fecha_3_Mes;
|
||||
"DB11_INF".Buffer[0].Fecha_3.Dia := #Fecha_3_Dia;
|
||||
"DB11_INF".Buffer[0].Fecha_3.DiaSemana := #Fecha_3_DiaSemana;
|
||||
END_IF;
|
||||
IF #Fecha_4_Ano = 0 THEN
|
||||
"DB11_INF".Buffer[0].Fecha_4.Ano := 1970;
|
||||
"DB11_INF".Buffer[0].Fecha_4.Mes := 1;
|
||||
"DB11_INF".Buffer[0].Fecha_4.Dia := 1;
|
||||
"DB11_INF".Buffer[0].Fecha_4.DiaSemana := 5;
|
||||
ELSE
|
||||
"DB11_INF".Buffer[0].Fecha_4.Ano := #Fecha_4_Ano;
|
||||
"DB11_INF".Buffer[0].Fecha_4.Mes := #Fecha_4_Mes;
|
||||
"DB11_INF".Buffer[0].Fecha_4.Dia := #Fecha_4_Dia;
|
||||
"DB11_INF".Buffer[0].Fecha_4.DiaSemana := #Fecha_4_DiaSemana;
|
||||
END_IF;
|
||||
"DB11_INF".Buffer[0].Fecha_3.Hora := #Fecha_3_Hora;
|
||||
"DB11_INF".Buffer[0].Fecha_3.Minuto := #Fecha_3_Minuto;
|
||||
"DB11_INF".Buffer[0].Fecha_3.Segundo := #Fecha_3_Segundo;
|
||||
"DB11_INF".Buffer[0].Fecha_3.NanoSegundo := #Fecha_3_NanoSegundo;
|
||||
"DB11_INF".Buffer[0].CodString_1 := #CodString_1;
|
||||
"DB11_INF".Buffer[0].CodString_2 := #CodString_2;
|
||||
"DB11_INF".Buffer[0].CodString_3 := #CodString_3;
|
||||
"DB11_INF".Buffer[0].CodString_4 := #CodString_4;
|
||||
"DB11_INF".Buffer[0].CodString_5 := #CodString_5;
|
||||
"DB11_INF".Buffer[0].CodString_6 := #CodString_6;
|
||||
"DB11_INF".Buffer[0].CodString_7 := #CodString_7;
|
||||
"DB11_INF".Buffer[0].CodString_8 := #CodString_8;
|
||||
"DB11_INF".Buffer[0].CodString_9 := #CodString_9;
|
||||
"DB11_INF".Buffer[0].CodString_10 := #CodString_10;
|
||||
"DB11_INF".Buffer[0].CodString_11 := #CodString_11;
|
||||
"DB11_INF".Buffer[0].CodString_12 := #CodString_12;
|
||||
"DB11_INF".Buffer[0].CodString_13 := #CodString_13;
|
||||
"DB11_INF".Buffer[0].CodString_14 := #CodString_14;
|
||||
"DB11_INF".Buffer[0].CodString_15 := #CodString_15;
|
||||
"DB11_INF".Buffer[0].Bool_1 := #Bool_1;
|
||||
"DB11_INF".Buffer[0].Bool_2 := #Bool_2;
|
||||
"DB11_INF".Buffer[0].Bool_3 := #Bool_3;
|
||||
"DB11_INF".Buffer[0].Bool_4 := #Bool_4;
|
||||
"DB11_INF".Buffer[0].Bool_5 := #Bool_5;
|
||||
"DB11_INF".Buffer[0].Bool_6 := #Bool_6;
|
||||
"DB11_INF".Buffer[0].Bool_7 := #Bool_7;
|
||||
"DB11_INF".Buffer[0].Bool_8 := #Bool_8;
|
||||
"DB11_INF".Buffer[0].Bool_9 := #Bool_9;
|
||||
"DB11_INF".Buffer[0].Bool_10 := #Bool_10;
|
||||
"DB11_INF".Buffer[0].Bool_11 := #Bool_11;
|
||||
"DB11_INF".Buffer[0].Bool_12 := #Bool_12;
|
||||
"DB11_INF".Buffer[0].Bool_13 := #Bool_13;
|
||||
"DB11_INF".Buffer[0].Bool_14 := #Bool_14;
|
||||
"DB11_INF".Buffer[0].Bool_15 := #Bool_15;
|
||||
"DB11_INF".Buffer[0].Bool_16 := #Bool_16;
|
||||
"DB11_INF".Buffer[0].Bool_17 := #Bool_17;
|
||||
"DB11_INF".Buffer[0].Bool_18 := #Bool_18;
|
||||
"DB11_INF".Buffer[0].Bool_19 := #Bool_19;
|
||||
"DB11_INF".Buffer[0].Bool_20 := #Bool_20;
|
||||
"DB11_INF".Buffer[0].Bool_21 := #Bool_21;
|
||||
"DB11_INF".Buffer[0].Bool_22 := #Bool_22;
|
||||
"DB11_INF".Buffer[0].Bool_23 := #Bool_23;
|
||||
"DB11_INF".Buffer[0].Bool_24 := #Bool_24;
|
||||
"DB11_INF".Buffer[0].Bool_25 := #Bool_25;
|
||||
"DB11_INF".Buffer[0].Bool_26 := #Bool_26;
|
||||
"DB11_INF".Buffer[0].Bool_27 := #Bool_27;
|
||||
"DB11_INF".Buffer[0].Bool_28 := #Bool_28;
|
||||
"DB11_INF".Buffer[0].Bool_29 := #Bool_29;
|
||||
"DB11_INF".Buffer[0].Bool_30 := #Bool_30;
|
||||
"DB11_INF".Buffer[0].Bool_31 := #Bool_31;
|
||||
"DB11_INF".Buffer[0].Bool_32 := #Bool_32;
|
||||
"DB11_INF".Buffer[0].Real_1 := #Real_1;
|
||||
"DB11_INF".Buffer[0].Real_2 := #Real_2;
|
||||
"DB11_INF".Buffer[0].Real_3 := #Real_3;
|
||||
"DB11_INF".Buffer[0].Real_4 := #Real_4;
|
||||
"DB11_INF".Buffer[0].Real_5 := #Real_5;
|
||||
"DB11_INF".Buffer[0].Real_6 := #Real_6;
|
||||
"DB11_INF".Buffer[0].Real_7 := #Real_7;
|
||||
"DB11_INF".Buffer[0].Real_8 := #Real_8;
|
||||
"DB11_INF".Buffer[0].Real_9 := #Real_9;
|
||||
"DB11_INF".Buffer[0].Real_10 := #Real_10;
|
||||
"DB11_INF".Buffer[0].Real_11 := #Real_11;
|
||||
"DB11_INF".Buffer[0].Real_12 := #Real_12;
|
||||
"DB11_INF".Buffer[0].Real_13 := #Real_13;
|
||||
"DB11_INF".Buffer[0].Real_14 := #Real_14;
|
||||
"DB11_INF".Buffer[0].Real_15 := #Real_15;
|
||||
"DB11_INF".Buffer[0].Real_16 := #Real_16;
|
||||
"DB11_INF".Buffer[0].Real_17 := #Real_17;
|
||||
"DB11_INF".Buffer[0].Real_18 := #Real_18;
|
||||
"DB11_INF".Buffer[0].Real_19 := #Real_19;
|
||||
"DB11_INF".Buffer[0].Real_20 := #Real_20;
|
||||
"DB11_INF".Buffer[0].Int_1 := #Int_1;
|
||||
"DB11_INF".Buffer[0].Int_2 := #Int_2;
|
||||
"DB11_INF".Buffer[0].Int_3 := #Int_3;
|
||||
"DB11_INF".Buffer[0].Int_4 := #Int_4;
|
||||
"DB11_INF".Buffer[0].Int_5 := #Int_5;
|
||||
"DB11_INF".Buffer[0].Int_6 := #Int_6;
|
||||
"DB11_INF".Buffer[0].Int_7 := #Int_7;
|
||||
"DB11_INF".Buffer[0].Int_8 := #Int_8;
|
||||
"DB11_INF".Buffer[0].Int_9 := #Int_9;
|
||||
"DB11_INF".Buffer[0].Int_10 := #Int_10;
|
||||
"DB11_INF".Buffer[0].Int_11 := #Int_11;
|
||||
"DB11_INF".Buffer[0].Int_12 := #Int_12;
|
||||
"DB11_INF".Buffer[0].Int_13 := #Int_13;
|
||||
"DB11_INF".Buffer[0].Int_14 := #Int_14;
|
||||
"DB11_INF".Buffer[0].Int_15 := #Int_15;
|
||||
"DB11_INF".Buffer[0].Int_16 := #Int_16;
|
||||
"DB11_INF".Buffer[0].Int_17 := #Int_17;
|
||||
"DB11_INF".Buffer[0].Int_18 := #Int_18;
|
||||
"DB11_INF".Buffer[0].Int_19 := #Int_19;
|
||||
"DB11_INF".Buffer[0].Int_20 := #Int_20;
|
||||
|
||||
END_REGION GESTION_REGISTRO_INFORME
|
||||
|
||||
END_FUNCTION
|
||||
|
||||
Reference in New Issue
Block a user