chore: Se añade marca modo FAT en el DB1. Se modifica FC50_MAIN para poder gestionar la marca FAT.

This commit is contained in:
2026-07-24 09:14:08 +02:00
parent fec92881d0
commit aa62159f2a
7 changed files with 147 additions and 129 deletions
@@ -44,6 +44,8 @@ DATA_BLOCK DB1_SYS
ResetEntidades : Bool;
{ S7_MLC := "MLC_3pE" }
SincronizarFecha : Bool;
{ S7_MLC := "MLC_dm" }
FAT : Bool;
{ S7_MLC := "MLC_3v5" }
WatchDog : Int;
Pulsador : STRUCT
@@ -124,6 +126,7 @@ DATA_BLOCK DB1_SYS
FlipFlop5seg := TRUE;
ResetEntidades := FALSE;
SincronizarFecha := FALSE;
FAT := FALSE;
Pulsador.EscribirFechaHora.Hmi := FALSE;
Pulsador.EscribirFechaHora.Plc := FALSE;
Pulsador.EscribirFechaHora.Permiso := TRUE;
@@ -33,6 +33,8 @@
es-ES: Reset todas las entidades
- id: MLC_3pE
es-ES: Orden sincronizacion fecha desde sistema superior
- id: MLC_dm
es-ES: Activar modo FAT para prueba de cuadros
- id: MLC_3v5
es-ES: Watchdog para comunicaciones
- id: MLC_3ER
@@ -88,6 +88,122 @@ FUNCTION "FC1_ZC_SISTEMA" : Void
END_REGION TIEMPO_DE_CICLO
// ==========================================================================================================
REGION GESTION_MARCAS_GENERALES_Y_FLANCOS
// ==========================================================================================================
// Marca siempre a ON
"DB1_SYS".OFF := FALSE;
// Marca siempre a OFF
"DB1_SYS".ON := TRUE;
// Marca primer arranque
"DB1_SYS".ARRANQUE := #CPU_MarcasSistema.%X0;
// ==========================================================================================================
// Pulso por 100 ms
"DB1_SYS".Pulso100ms := #CPU_MarcasCiclo.%X0 AND NOT "DB1_SYS".Aux.P_Trig_Pulso100ms;
// Pulso por 1 segundo
"DB1_SYS".Pulso1seg := #CPU_MarcasCiclo.%X5 AND NOT "DB1_SYS".Aux.P_Trig_Pulso1Seg;
// Pulso por 2 segundos
"DB1_SYS".Pulso2seg := FALSE;
IF "DB1_SYS".Pulso1seg THEN
"DB1_SYS".Aux.Contador2seg += 1;
IF "DB1_SYS".Aux.Contador2seg >= 2 THEN
"DB1_SYS".Pulso2seg := TRUE;
"DB1_SYS".Aux.Contador2seg := 0;
END_IF;
END_IF;
// Pulso por 5 segundos
"DB1_SYS".Pulso5seg := FALSE;
IF "DB1_SYS".Pulso1seg THEN
"DB1_SYS".Aux.Contador5seg += 1;
IF "DB1_SYS".Aux.Contador5seg >= 5 THEN
"DB1_SYS".Pulso5seg := TRUE;
"DB1_SYS".Aux.Contador5seg := 0;
END_IF;
END_IF;
// Pulso por 1 minuto
"DB1_SYS".Pulso1min := FALSE;
IF "DB1_SYS".Pulso1seg THEN
"DB1_SYS".Aux.Contador1min += 1;
IF "DB1_SYS".Aux.Contador1min >= 60 THEN
"DB1_SYS".Pulso1min := TRUE;
"DB1_SYS".Aux.Contador1min := 0;
END_IF;
END_IF;
// Pulso por 1 hora
"DB1_SYS".Pulso1h := FALSE;
IF "DB1_SYS".Pulso1seg THEN
"DB1_SYS".Aux.Contador1h += 1;
IF "DB1_SYS".Aux.Contador1h >= 3600 THEN
"DB1_SYS".Pulso1h := TRUE;
"DB1_SYS".Aux.Contador1h := 0;
END_IF;
END_IF;
// ==========================================================================================================
// Flip Flop 1 segundo
IF "DB1_SYS".Pulso1seg AND NOT "DB1_SYS".FlipFlop1seg THEN
"DB1_SYS".FlipFlop1seg := TRUE;
ELSIF "DB1_SYS".Pulso1seg AND "DB1_SYS".FlipFlop1seg THEN
"DB1_SYS".FlipFlop1seg := FALSE;
END_IF;
// Flip Flop 2 segundos
IF "DB1_SYS".Pulso2seg AND NOT "DB1_SYS".FlipFlop2seg THEN
"DB1_SYS".FlipFlop2seg := TRUE;
ELSIF "DB1_SYS".Pulso2seg AND "DB1_SYS".FlipFlop2seg THEN
"DB1_SYS".FlipFlop2seg := FALSE;
END_IF;
// Flip Flop 5 segundos
IF "DB1_SYS".Pulso5seg AND NOT "DB1_SYS".FlipFlop5seg THEN
"DB1_SYS".FlipFlop5seg := TRUE;
ELSIF "DB1_SYS".Pulso5seg AND "DB1_SYS".FlipFlop5seg THEN
"DB1_SYS".FlipFlop5seg := FALSE;
END_IF;
// ==========================================================================================================
// Watchdog
IF "DB1_SYS".Pulso100ms THEN
"DB1_SYS".WatchDog += 1;
IF "DB1_SYS".WatchDog > 20000 THEN
"DB1_SYS".WatchDog := 0;
END_IF;
END_IF;
// ==========================================================================================================
// Estados anteriores
"DB1_SYS".Aux.P_Trig_Pulso100ms := #CPU_MarcasCiclo.%X0;
"DB1_SYS".Aux.P_Trig_Pulso1Seg := #CPU_MarcasCiclo.%X5;
END_REGION GESTION_MARCAS_GENERALES_Y_FLANCOS
// ==========================================================================================================
REGION ARRANQUE
IF "DB1_SYS".ARRANQUE THEN
// Actualizamos la fecha y hora nueva para editar desde HMI/SCADA
#t_RetVal := RD_LOC_T("DB1_SYS".FechaHoraNuevaManual);
// Reseteamos marcas de simulacion y FAT
"DB1_SYS".SIM := FALSE;
"DB1_SYS".FAT := FALSE;
END_IF;
END_REGION ARRANQUE
// ==========================================================================================================
REGION GESTION_PULSADORES
@@ -226,107 +342,6 @@ FUNCTION "FC1_ZC_SISTEMA" : Void
END_REGION GESTION_ACUSE_GENERAL
// ==========================================================================================================
REGION GESTION_MARCAS_GENERALES_Y_FLANCOS
// ==========================================================================================================
// Marca siempre a ON
"DB1_SYS".OFF := FALSE;
// Marca siempre a OFF
"DB1_SYS".ON := TRUE;
// Marca primer arranque
"DB1_SYS".ARRANQUE := #CPU_MarcasSistema.%X0;
// ==========================================================================================================
// Pulso por 100 ms
"DB1_SYS".Pulso100ms := #CPU_MarcasCiclo.%X0 AND NOT "DB1_SYS".Aux.P_Trig_Pulso100ms;
// Pulso por 1 segundo
"DB1_SYS".Pulso1seg := #CPU_MarcasCiclo.%X5 AND NOT "DB1_SYS".Aux.P_Trig_Pulso1Seg;
// Pulso por 2 segundos
"DB1_SYS".Pulso2seg := FALSE;
IF "DB1_SYS".Pulso1seg THEN
"DB1_SYS".Aux.Contador2seg += 1;
IF "DB1_SYS".Aux.Contador2seg >= 2 THEN
"DB1_SYS".Pulso2seg := TRUE;
"DB1_SYS".Aux.Contador2seg := 0;
END_IF;
END_IF;
// Pulso por 5 segundos
"DB1_SYS".Pulso5seg := FALSE;
IF "DB1_SYS".Pulso1seg THEN
"DB1_SYS".Aux.Contador5seg += 1;
IF "DB1_SYS".Aux.Contador5seg >= 5 THEN
"DB1_SYS".Pulso5seg := TRUE;
"DB1_SYS".Aux.Contador5seg := 0;
END_IF;
END_IF;
// Pulso por 1 minuto
"DB1_SYS".Pulso1min := FALSE;
IF "DB1_SYS".Pulso1seg THEN
"DB1_SYS".Aux.Contador1min += 1;
IF "DB1_SYS".Aux.Contador1min >= 60 THEN
"DB1_SYS".Pulso1min := TRUE;
"DB1_SYS".Aux.Contador1min := 0;
END_IF;
END_IF;
// Pulso por 1 hora
"DB1_SYS".Pulso1h := FALSE;
IF "DB1_SYS".Pulso1seg THEN
"DB1_SYS".Aux.Contador1h += 1;
IF "DB1_SYS".Aux.Contador1h >= 3600 THEN
"DB1_SYS".Pulso1h := TRUE;
"DB1_SYS".Aux.Contador1h := 0;
END_IF;
END_IF;
// ==========================================================================================================
// Flip Flop 1 segundo
IF "DB1_SYS".Pulso1seg AND NOT "DB1_SYS".FlipFlop1seg THEN
"DB1_SYS".FlipFlop1seg := TRUE;
ELSIF "DB1_SYS".Pulso1seg AND "DB1_SYS".FlipFlop1seg THEN
"DB1_SYS".FlipFlop1seg := FALSE;
END_IF;
// Flip Flop 2 segundos
IF "DB1_SYS".Pulso2seg AND NOT "DB1_SYS".FlipFlop2seg THEN
"DB1_SYS".FlipFlop2seg := TRUE;
ELSIF "DB1_SYS".Pulso2seg AND "DB1_SYS".FlipFlop2seg THEN
"DB1_SYS".FlipFlop2seg := FALSE;
END_IF;
// Flip Flop 5 segundos
IF "DB1_SYS".Pulso5seg AND NOT "DB1_SYS".FlipFlop5seg THEN
"DB1_SYS".FlipFlop5seg := TRUE;
ELSIF "DB1_SYS".Pulso5seg AND "DB1_SYS".FlipFlop5seg THEN
"DB1_SYS".FlipFlop5seg := FALSE;
END_IF;
// ==========================================================================================================
// Watchdog
IF "DB1_SYS".Pulso100ms THEN
"DB1_SYS".WatchDog += 1;
IF "DB1_SYS".WatchDog > 20000 THEN
"DB1_SYS".WatchDog := 0;
END_IF;
END_IF;
// ==========================================================================================================
// Estados anteriores
"DB1_SYS".Aux.P_Trig_Pulso100ms := #CPU_MarcasCiclo.%X0;
"DB1_SYS".Aux.P_Trig_Pulso1Seg := #CPU_MarcasCiclo.%X5;
END_REGION GESTION_MARCAS_GENERALES_Y_FLANCOS
// ==========================================================================================================
REGION FECHA_Y_HORA
@@ -5,21 +5,4 @@
S7_Version := "0.1"
}
ORGANIZATION_BLOCK "OB100_Startup"
VAR_TEMP
t_dummyInt : Int;
END_VAR
{
S7_Language := "LAD";
S7_NetworkTitle := "MLC_3Ju"
}
NETWORK
RUNG wire#powerrail
{ S7_Templates := "date_type := DTL" }
RD_LOC_T(
RET_VAL => #t_dummyInt,
OUT => "DB1_SYS".FechaHoraNuevaManual
)
END_RUNG
END_NETWORK
END_ORGANIZATION_BLOCK
@@ -1,3 +0,0 @@
MultiLingualTexts:
- id: MLC_3Ju
es-ES: Al arrancar, actualizamos la fecha y hora nueva para editar desde HMI/SCADA
@@ -68,13 +68,37 @@ FUNCTION "FC50_MAIN" : Void
// ==========================================================================================================
REGION SISTEMA
// Llamada a marcas de sistema
"FC1_ZC_SISTEMA"(CPU_MarcasCiclo := "Clock_Byte",
CPU_MarcasSistema := "System_Byte",
RedProfinet := "Local~PROFINET_IO-System");
// Llamada a utilizades
"DB15994_ZC_INICIALIZAR_DISP"();
"DB15995_ZC_BUSCAR_DIR"();
END_REGION SISTEMA
// ==========================================================================================================
REGION FAT
// Llamada a bloques FAT
// Si tenemos la marca activada, salimos del bloque sin ejecutar nada mas para poder realizar
// las pruebas de señales de los cuadros.
IF "DB1_SYS".FAT THEN
"DB15990_FAT_DI"();
"DB15991_FAT_DO"();
"DB15992_FAT_AI"();
"DB15993_FAT_AO"();
RETURN;
END_IF;
END_REGION FAT
// ==========================================================================================================
REGION DISPOSITIVOS
@@ -379,10 +403,5 @@ FUNCTION "FC50_MAIN" : Void
END_REGION POST_PROGRAMA
END_NETWORK
END_FUNCTION
@@ -8,7 +8,6 @@ FUNCTION "Documentacion" : Void
{ S7_Language := "SCL" }
NETWORK
REGION DESCRIPCION
(*
###### (C)Copyright ZeusControl 2020 - 2026
@@ -20,7 +19,7 @@ FUNCTION "Documentacion" : Void
| PLC serie 1200/1500 | TIA Portal 18 |ASasASadsadsasd
---
> **Restricciones:** [!!! INDICA AQUÍ LIMITACIONES (O ESCRIBE "Ninguna") !!!]
> **Restricciones:** [!!! INDICA AQUÍ LIMITACIONES (O ESCRIBE "Ninguna.") !!!]
---
### Descripción Funcional
@@ -51,6 +50,6 @@ FUNCTION "Documentacion" : Void
*)
END_REGION DESCRIPCION
// borrar
END_NETWORK
END_FUNCTION