Primera version

This commit is contained in:
2026-07-14 10:21:52 +02:00
parent 273e2be076
commit 430e3b4db0
222 changed files with 176320 additions and 0 deletions
@@ -0,0 +1,204 @@
DATA_BLOCK "DB1_SYS"
TITLE = Datos de sistema
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : ABH
VERSION : 0.1
NON_RETAIN
VAR
ON : Bool; // Siempre a 1
OFF : Bool; // Siempre a 0
SIM : Bool; // Sistema en simulacion
ACK : Bool; // Acuse general de errores
ARRANQUE : Bool; // Marca de primer arranque del sistema
Pulso100ms : Bool; // Pulso 100 ms
Pulso1seg : Bool; // Pulso 1 segundo
Pulso2seg : Bool; // Pulso 2 segundo
Pulso5seg : Bool; // Pulso 5 segundos
Pulso1min : Bool; // Pulso 1 minuto
Pulso1h : Bool; // Pulso 1 hora
FlipFlop1seg : Bool; // Flip flop 1 seg ON - 1 seg OFF
FlipFlop2seg : Bool; // Flip flop 2 seg ON - 2 seg OFF
FlipFlop5seg : Bool; // Flip flop 5 seg ON - 5 seg OFF
ResetEntidades { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // Reset todas las entidades
SincronizarFecha : Bool; // Orden sincronizacion fecha desde sistema superior
WatchDog : Int; // Watchdog para comunicaciones
Pulsador : Struct
EscribirFechaHora { S7_SetPoint := 'False'} : "UDT_ZC_PULSADOR"; // Pulsador cambio de fecha y hora desde hmi
Ack { S7_SetPoint := 'False'} : Array[0..9] of "UDT_ZC_PULSADOR"; // Pulsador acuse general de errores
END_STRUCT;
FechaHoraActual {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL; // Fecha y hora actual del sistema
END_VAR
VAR RETAIN
FechaHoraNuevaManual {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL; // Fecha y hora nueva escrita manualmente desde HMI
FechaHoraNuevaAuto {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL; // Fecha y hora nueva escrita automaticamente
END_VAR
VAR
TiempoCiclo : Real; // Tiempo de ciclo del PLC
END_VAR
VAR RETAIN
Usuario : Struct
Seleccion : Array[0..9] of Struct
Orden : Bool;
Usuario : String[25];
END_STRUCT;
Actual : String[25]; // Usuario actual
END_STRUCT;
END_VAR
VAR
RedProfinet : Array[0..1023] of Bool;
END_VAR
VAR RETAIN
Aux : Struct
P_Trig_Pulso100ms : Bool; // P_TRIG Pulso 100 ms
P_Trig_Pulso1Seg : Bool; // P_TRIG Pulso 1 segundo
Contador2seg : USInt; // Aux. Contador 2 segundos
Contador5seg : USInt; // Aux. Contador 5 segundos
Contador1min : USInt; // Aux. Contador 1 minuto
Contador1h : UInt; // Aux. Contador 1 hora
auxRuntime : LReal; // Aux. Runtime
END_STRUCT;
END_VAR
BEGIN
ON := TRUE;
OFF := FALSE;
SIM := FALSE;
ACK := FALSE;
ARRANQUE := FALSE;
Pulso100ms := FALSE;
Pulso1seg := FALSE;
Pulso2seg := FALSE;
Pulso5seg := FALSE;
Pulso1min := FALSE;
Pulso1h := FALSE;
FlipFlop1seg := TRUE;
FlipFlop2seg := TRUE;
FlipFlop5seg := TRUE;
ResetEntidades := FALSE;
SincronizarFecha := FALSE;
Pulsador.EscribirFechaHora.Hmi := FALSE;
Pulsador.EscribirFechaHora.Plc := FALSE;
Pulsador.EscribirFechaHora.Permiso := TRUE;
Pulsador.EscribirFechaHora.Visibilidad := TRUE;
Pulsador.EscribirFechaHora.AuxPulso := FALSE;
Pulsador.EscribirFechaHora.AuxTiempo := 0;
Pulsador.Ack[0].Hmi := FALSE;
Pulsador.Ack[0].Plc := FALSE;
Pulsador.Ack[0].Permiso := TRUE;
Pulsador.Ack[0].Visibilidad := FALSE;
Pulsador.Ack[0].AuxPulso := FALSE;
Pulsador.Ack[0].AuxTiempo := 0;
Pulsador.Ack[1].Hmi := FALSE;
Pulsador.Ack[1].Plc := FALSE;
Pulsador.Ack[1].Permiso := TRUE;
Pulsador.Ack[1].Visibilidad := FALSE;
Pulsador.Ack[1].AuxPulso := FALSE;
Pulsador.Ack[1].AuxTiempo := 0;
Pulsador.Ack[2].Hmi := FALSE;
Pulsador.Ack[2].Plc := FALSE;
Pulsador.Ack[2].Permiso := TRUE;
Pulsador.Ack[2].Visibilidad := FALSE;
Pulsador.Ack[2].AuxPulso := FALSE;
Pulsador.Ack[2].AuxTiempo := 0;
Pulsador.Ack[3].Hmi := FALSE;
Pulsador.Ack[3].Plc := FALSE;
Pulsador.Ack[3].Permiso := TRUE;
Pulsador.Ack[3].Visibilidad := FALSE;
Pulsador.Ack[3].AuxPulso := FALSE;
Pulsador.Ack[3].AuxTiempo := 0;
Pulsador.Ack[4].Hmi := FALSE;
Pulsador.Ack[4].Plc := FALSE;
Pulsador.Ack[4].Permiso := TRUE;
Pulsador.Ack[4].Visibilidad := FALSE;
Pulsador.Ack[4].AuxPulso := FALSE;
Pulsador.Ack[4].AuxTiempo := 0;
Pulsador.Ack[5].Hmi := FALSE;
Pulsador.Ack[5].Plc := FALSE;
Pulsador.Ack[5].Permiso := TRUE;
Pulsador.Ack[5].Visibilidad := FALSE;
Pulsador.Ack[5].AuxPulso := FALSE;
Pulsador.Ack[5].AuxTiempo := 0;
Pulsador.Ack[6].Hmi := FALSE;
Pulsador.Ack[6].Plc := FALSE;
Pulsador.Ack[6].Permiso := TRUE;
Pulsador.Ack[6].Visibilidad := FALSE;
Pulsador.Ack[6].AuxPulso := FALSE;
Pulsador.Ack[6].AuxTiempo := 0;
Pulsador.Ack[7].Hmi := FALSE;
Pulsador.Ack[7].Plc := FALSE;
Pulsador.Ack[7].Permiso := TRUE;
Pulsador.Ack[7].Visibilidad := FALSE;
Pulsador.Ack[7].AuxPulso := FALSE;
Pulsador.Ack[7].AuxTiempo := 0;
Pulsador.Ack[8].Hmi := FALSE;
Pulsador.Ack[8].Plc := FALSE;
Pulsador.Ack[8].Permiso := TRUE;
Pulsador.Ack[8].Visibilidad := FALSE;
Pulsador.Ack[8].AuxPulso := FALSE;
Pulsador.Ack[8].AuxTiempo := 0;
Pulsador.Ack[9].Hmi := FALSE;
Pulsador.Ack[9].Plc := FALSE;
Pulsador.Ack[9].Permiso := TRUE;
Pulsador.Ack[9].Visibilidad := FALSE;
Pulsador.Ack[9].AuxPulso := FALSE;
Pulsador.Ack[9].AuxTiempo := 0;
FechaHoraActual.YEAR := 2025;
FechaHoraActual.MONTH := 9;
FechaHoraActual.DAY := 18;
FechaHoraActual.WEEKDAY := 5;
FechaHoraActual.HOUR := 19;
FechaHoraActual.MINUTE := 1;
FechaHoraActual.SECOND := 56;
FechaHoraActual.NANOSECOND := 550304800;
FechaHoraActual := DTL#2025-09-18-19:01:56.550304800;
FechaHoraNuevaManual.YEAR := 2026;
FechaHoraNuevaManual.MONTH := 3;
FechaHoraNuevaManual.DAY := 26;
FechaHoraNuevaManual.WEEKDAY := 5;
FechaHoraNuevaManual.HOUR := 11;
FechaHoraNuevaManual.MINUTE := 31;
FechaHoraNuevaManual.SECOND := 44;
FechaHoraNuevaManual.NANOSECOND := 10900982;
FechaHoraNuevaManual := DTL#2026-03-26-11:31:44.010900982;
FechaHoraNuevaAuto.YEAR := 2026;
FechaHoraNuevaAuto.MONTH := 3;
FechaHoraNuevaAuto.DAY := 26;
FechaHoraNuevaAuto.WEEKDAY := 5;
FechaHoraNuevaAuto.HOUR := 11;
FechaHoraNuevaAuto.MINUTE := 31;
FechaHoraNuevaAuto.SECOND := 44;
FechaHoraNuevaAuto.NANOSECOND := 10900982;
FechaHoraNuevaAuto := DTL#2026-03-26-11:31:44.010900982;
TiempoCiclo := 28.34702;
Usuario.Seleccion[0].Orden := FALSE;
Usuario.Seleccion[0].Usuario := 'sive';
Usuario.Seleccion[1].Orden := FALSE;
Usuario.Seleccion[1].Usuario := '';
Usuario.Seleccion[2].Orden := FALSE;
Usuario.Seleccion[2].Usuario := '';
Usuario.Seleccion[3].Orden := FALSE;
Usuario.Seleccion[3].Usuario := '';
Usuario.Seleccion[4].Orden := FALSE;
Usuario.Seleccion[4].Usuario := '';
Usuario.Seleccion[5].Orden := FALSE;
Usuario.Seleccion[5].Usuario := 's';
Usuario.Seleccion[6].Orden := FALSE;
Usuario.Seleccion[6].Usuario := '';
Usuario.Seleccion[7].Orden := FALSE;
Usuario.Seleccion[7].Usuario := '';
Usuario.Seleccion[8].Orden := FALSE;
Usuario.Seleccion[8].Usuario := '';
Usuario.Seleccion[9].Orden := FALSE;
Usuario.Seleccion[9].Usuario := '';
Usuario.Actual := 's';
Aux.P_Trig_Pulso100ms := TRUE;
Aux.P_Trig_Pulso1Seg := TRUE;
Aux.Contador2seg := 0;
Aux.Contador5seg := 0;
Aux.Contador1min := 33;
Aux.Contador1h := 573;
Aux.auxRuntime := 3.12728340475131E-308;
END_DATA_BLOCK
@@ -0,0 +1,10 @@
DATA_BLOCK "DB3_CHECKSUM"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
NON_RETAIN
"FB3_ZC_CHECKSUM"
BEGIN
END_DATA_BLOCK
@@ -0,0 +1,106 @@
FUNCTION_BLOCK "FB3_ZC_CHECKSUM"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Comprobar : Bool;
Copiar : Bool;
END_VAR
VAR_OUTPUT
CheckSumOK : Bool;
END_VAR
VAR
s_GetCheckSum {InstructionName := 'GetChecksum'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : GetChecksum;
END_VAR
VAR RETAIN
s_EstadoCheckSum { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[0..7] of Byte;
s_CheckSumFabrica { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[0..7] of Byte;
END_VAR
VAR
s_Comprobar { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
s_OldComprobar { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
END_VAR
BEGIN
REGION DESCRIPCION
//=======================================================================
// (C)Copyright ZeusControl 2020 - 2026
//=======================================================================
(*
### Información del Sistema
| Hardware Compatible | Entorno de Ingeniería |
|---------------------|-----------------------|
| PLC serie 1200/1500 | TIA Portal 18 |
---
### Descripción Funcional
El bloque `FB3_CHECKSUM` implementa la lectura del checksum del programa actual del PLC y su comparación con el checksum de fábrica, permitiendo detectar modificaciones no autorizadas en el proyecto.
Funcionalidades principales:
- Detección de flanco ascendente en la entrada `#Comprobar` para ejecutar la comprobación bajo demanda (modo "pulso"), mediante la variable interna `#s_OldComprobar`.
- Lectura del checksum del bloque `Scope:=1` (objeto PLC) con `Range:=0` y `Subrange:=0` (rango completo), invocando la función de sistema `GetChecksum` a través del FB `GetChecksum` y depositando el resultado en `#s_EstadoCheckSum`.
- Captura del checksum de fábrica: cuando se activa la entrada `#Copiar`, se copia el checksum actual al valor de referencia `#s_CheckSumFabrica`, operación que se realiza una sola vez durante la puesta en marcha para fijar la línea base.
- Comparación continua entre el checksum actual y el de fábrica, exponiendo el resultado en la salida `#CheckSumOK` (TRUE cuando coinciden).
> **Restricciones:** Ninguna.
---
### Dependencias Requeridas
| Tipo | Elementos |
|------|-----------|
| FC | - |
| FB | `GetChecksum` |
| DB | - |
| UDT | - |
---
### Historial de Cambios
| Versión | Fecha | Técnico | Cambios |
|----------|------------|---------|---------|
| 01.00.00 | 28.09.2020 | (ABH) | Primera versión. |
| 01.00.01 | 02.07.2026 | (ABH) | Cambio a SCL. |
*)
END_REGION DESCRIPCION
// ==========================================================================================================
REGION ORDEN_COMPROBACION
// Comprobacion mediante un pulso
#s_Comprobar := #Comprobar AND NOT #s_OldComprobar;
// Estado anterior
#s_OldComprobar := #Comprobar;
END_REGION ORDEN_COMPROBACION
// ==========================================================================================================
REGION LECTURA_CHECKSUM
// Comprobacion mediante un pulso
#s_GetCheckSum(Scope:=1,
Range:=0,
Subrange:=0,
Checksum:=#s_EstadoCheckSum);
// Copia de checksum a valor de fabrica
IF #Copiar THEN
#s_CheckSumFabrica := #s_EstadoCheckSum;
END_IF;
END_REGION LECTURA_CHECKSUM
// ==========================================================================================================
REGION SALIDAS
// Checksum OK
#CheckSumOK := #s_EstadoCheckSum = #s_CheckSumFabrica;
END_REGION SALIDAS
END_FUNCTION_BLOCK
@@ -0,0 +1,410 @@
FUNCTION "FC1_ZC_SISTEMA" : Void
TITLE = FC1_ZC_SISTEMA
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : HCR
FAMILY : ZeusControl
VERSION : 2.0
//Funcion para gestion de marcas de sistema
VAR_INPUT
CPU_MarcasCiclo : Byte; // Byte Marca de ciclo CPU
CPU_MarcasSistema : Byte; // Byte Marcas de sistema
RedProfinet : HW_IOSYSTEM; // ID Profinet IO System
END_VAR
VAR_TEMP
for_i : Int; // Variable para bucles FOR
t_RetVal : Int; // Variable temporal para su uso en programa
END_VAR
BEGIN
REGION DESCRIPCION
(*
###### (C)Copyright ZeusControl 2020 - 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 central para la gestión de marcas de sistema, temporizaciones generales, usuarios y resets del sistema.
En ella se realizan las siguientes acciones:
- Cálculo dinámico del tiempo de ciclo del OB1 (en milisegundos) evaluando la variable auxiliar con la instrucción RUNTIME.
- Tratamiento y registro de trazabilidad de los 10 pulsadores de acuse de alarmas y del pulsador de modificación de fecha/hora mediante la función FC15026_ZC_PULSADOR.
- Consolidación del acuse general (ACK), agrupando las activaciones del PLC de todos los pulsadores de reconocimiento en una única marca.
- Generación de marcas estáticas (ON fijo y OFF fijo) y captura del primer ciclo de escáner tras el arranque.
- Creación de pulsos temporizados (100 ms, 1 s, 2 s, 5 s, 1 min, 1 h) y señales Flip-Flop a partir de las marcas de ciclo del hardware de la CPU.
- Lectura constante de la fecha y hora local (RD_LOC_T) y ejecución de la escritura en el sistema (WR_SYS_T) ante una orden del HMI.
- Escaneo continuo de las órdenes de selección para determinar y fijar el usuario actualmente activo en el sistema.
- Ejecución bajo demanda del reset general del array de entidades (solo aplicable con procesos parados), reinicializando sus variables a estados de disponibilidad, limpieza y vacío.
- Llamada a la rutina DB3_CHECKSUM para la validación y gestión de la suma de comprobación del programa.
---
### Dependencias Requeridas
| Tipo | Elementos |
|------|-----------|
| FC | `FC15026_ZC_PULSADOR` |
| FB | `FB3_ZC_CHECKSUM` |
| DB | `DB1_SYS`, `DB3_CHECKSUM`, `DB6_ENTIDAD` |
| UDT | - |
---
### Historial de Cambios
| Versión | Fecha | Técnico | Cambios |
|----------|------------|---------|---------|
| 01.00.00 | 03.11.2022 | (HCR) | Primera version. |
| 01.00.01 | 02.06.2023 | (ABH) | Optimizacion de bloque para integrar en libreria. Se eliminan marcas no utilizadas. Se reorganizan las variables y se ponen bien los comentarios. |
| 01.00.02 | 24.04.2025 | (HCR) | Se añade gestion de idioma. |
| 01.00.03 | 11.09.2025 | (ABH) | Se eliminan las constantes de idioma dentro del FC. Se utilizan constantes globales para facilitar su traduccion. |
| 02.00.00 | 25.03.2026 | (ABH) | Se cambia lenguaje a SCL. Se eliminan idiomas. Se añade watchdog para comunicaciones. Se integra estado red profinet. |
*)
END_REGION DESCRIPCION
// ==========================================================================================================
REGION TIEMPO_DE_CICLO
// Se almacena el tiempo de ciclo del OB1
"DB1_SYS".TiempoCiclo := LREAL_TO_REAL(RUNTIME("DB1_SYS".Aux.auxRuntime));
"DB1_SYS".TiempoCiclo := ("DB1_SYS".TiempoCiclo * 1000.0);
END_REGION TIEMPO_DE_CICLO
// ==========================================================================================================
REGION GESTION_PULSADORES
// Gestion pulsadores de ack
"DB1_SYS".Pulsador.Ack[0].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_01",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[0]);
"DB1_SYS".Pulsador.Ack[1].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_02",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[1]);
"DB1_SYS".Pulsador.Ack[2].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_03",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[2]);
"DB1_SYS".Pulsador.Ack[3].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_04",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[3]);
"DB1_SYS".Pulsador.Ack[4].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_05",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[4]);
"DB1_SYS".Pulsador.Ack[5].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_06",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[5]);
"DB1_SYS".Pulsador.Ack[6].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_07",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[6]);
"DB1_SYS".Pulsador.Ack[7].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_08",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[7]);
"DB1_SYS".Pulsador.Ack[8].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_09",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[8]);
"DB1_SYS".Pulsador.Ack[9].Permiso := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_ACK_10",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.Ack[9]);
// Gestion pulsador cambio de fecha y hora
"DB1_SYS".Pulsador.EscribirFechaHora.Permiso := TRUE;
"DB1_SYS".Pulsador.EscribirFechaHora.Visibilidad := TRUE;
"FC15026_ZC_PULSADOR"(Pulso1Seg := "DB1_SYS".Pulso1seg,
SP_Tiempo := 0,
TrazaCategoria := "TRZ_CAT_1_SYS",
TrazaIdProceso := 0,
TrazaIdPulsador := "TRZ_SYS_PUL_FECHA",
Usuario := "DB1_SYS".Usuario.Actual,
FechaHoraActual := "DB1_SYS".FechaHoraActual,
Pulsador := "DB1_SYS".Pulsador.EscribirFechaHora);
END_REGION GESTION_PULSADORES
// ==========================================================================================================
REGION GESTION_ACUSE_GENERAL
// Activacion de marca de acuse general
"DB1_SYS".ACK :=
"DB1_SYS".Pulsador.Ack[0].Plc OR
"DB1_SYS".Pulsador.Ack[1].Plc OR
"DB1_SYS".Pulsador.Ack[2].Plc OR
"DB1_SYS".Pulsador.Ack[3].Plc OR
"DB1_SYS".Pulsador.Ack[4].Plc OR
"DB1_SYS".Pulsador.Ack[5].Plc OR
"DB1_SYS".Pulsador.Ack[6].Plc OR
"DB1_SYS".Pulsador.Ack[7].Plc OR
"DB1_SYS".Pulsador.Ack[8].Plc OR
"DB1_SYS".Pulsador.Ack[9].Plc;
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
// Lectura de fecha y hora actual
#t_RetVal := RD_LOC_T("DB1_SYS".FechaHoraActual);
// Escritura de fecha y hora nueva escrita manualmente desde HMI
IF "DB1_SYS".Pulsador.EscribirFechaHora.Plc THEN
#t_RetVal := WR_SYS_T("DB1_SYS".FechaHoraNuevaManual);
END_IF;
// Escritura de fecha y hora nueva escrita autoamticamente desde Script, Scada, etc...
IF "DB1_SYS".SincronizarFecha THEN
#t_RetVal := WR_SYS_T("DB1_SYS".FechaHoraNuevaAuto);
END_IF;
END_REGION FECHA_Y_HORA
// ==========================================================================================================
REGION USUARIOS
// Gestion de usuario actual para trazas
FOR #for_i := 0 TO 9 DO
IF "DB1_SYS".Usuario.Seleccion[#for_i].Orden THEN
"DB1_SYS".Usuario.Actual := "DB1_SYS".Usuario.Seleccion[#for_i].Usuario;
"DB1_SYS".Usuario.Seleccion[#for_i].Orden := FALSE;
EXIT;
END_IF;
END_FOR;
END_REGION USUARIOS
// ==========================================================================================================
REGION RESET_ENTIDADES
// Reset todas las entidades
// CUIDADO!!!!!!!!
// TIENEN QUE ESTAR TODOS LOS PROCESOS PARADOS!!!!!!
IF "DB1_SYS".ResetEntidades THEN
FOR #for_i := 1 TO "N_MAX_ENTIDAD" DO
"DB6_ENTIDAD".ENT[#for_i].Estado.EnProduccion :=
"DB6_ENTIDAD".ENT[#for_i].Estado.EnCIP :=
"DB6_ENTIDAD".ENT[#for_i].Estado.EnSIP :=
"DB6_ENTIDAD".ENT[#for_i].Estado.ConProducto :=
"DB6_ENTIDAD".ENT[#for_i].Estado.ConAgua :=
"DB6_ENTIDAD".ENT[#for_i].Estado.Vacia :=
"DB6_ENTIDAD".ENT[#for_i].Estado.Sucia := FALSE;
"DB6_ENTIDAD".ENT[#for_i].Habilitar :=
"DB6_ENTIDAD".ENT[#for_i].Estado.Disponible :=
"DB6_ENTIDAD".ENT[#for_i].Estado.Limpia := TRUE;
"DB6_ENTIDAD".ENT[#for_i].Estado.CodEstado := 0;
"DB6_ENTIDAD".ENT[#for_i].Asignacion := 0;
"DB6_ENTIDAD".ENT[#for_i].ID := #for_i;
END_FOR;
"DB1_SYS".ResetEntidades := FALSE;
END_IF;
END_REGION RESET_ENTIDADES
// ==========================================================================================================
REGION CHECKSUM
// Gestion de checksum del programa
"DB3_CHECKSUM"();
END_REGION CHECKSUM
// ==========================================================================================================
REGION RED_PROFINET
// Comprobacion de red profinet
#t_RetVal := DeviceStates(LADDR := #RedProfinet, MODE := 4, STATE := "DB1_SYS".RedProfinet);
END_REGION RED_PROFINET
END_FUNCTION
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V18" />
<SW.Blocks.OB ID="0">
<AttributeList>
<HeaderAuthor>ABH</HeaderAuthor>
<HeaderFamily>ZeusControl</HeaderFamily>
<HeaderVersion>1.0</HeaderVersion>
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
<Section Name="Input">
<Member Name="LostRetentive" Datatype="Bool" Informative="true" />
<Member Name="LostRTC" Datatype="Bool" Informative="true" />
</Section>
<Section Name="Temp">
<Member Name="t_DummyInt" Datatype="Int" />
</Section>
<Section Name="Constant" />
</Sections></Interface>
<IsIECCheckEnabled>true</IsIECCheckEnabled>
<MemoryLayout>Optimized</MemoryLayout>
<Name>OB100_Startup</Name>
<Namespace />
<Number>100</Number>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
<SecondaryType>Startup</SecondaryType>
<SetENOAutomatically>false</SetENOAutomatically>
</AttributeList>
<ObjectList>
<MultilingualText ID="1" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="2" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<SW.Blocks.CompileUnit ID="3" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource><FlgNet xmlns="http://www.siemens.com/automation/Openness/SW/NetworkSource/FlgNet/v4">
<Parts>
<Access Scope="LocalVariable" UId="21">
<Symbol>
<Component Name="t_DummyInt" />
</Symbol>
</Access>
<Access Scope="GlobalVariable" UId="22">
<Symbol>
<Component Name="DB1_SYS" />
<Component Name="FechaHoraNuevaManual" />
</Symbol>
</Access>
<Part Name="RD_LOC_T" Version="1.0" UId="23">
<TemplateValue Name="date_type" Type="Type">DTL</TemplateValue>
</Part>
</Parts>
<Wires>
<Wire UId="24">
<Powerrail />
<NameCon UId="23" Name="en" />
</Wire>
<Wire UId="25">
<NameCon UId="23" Name="RET_VAL" />
<IdentCon UId="21" />
</Wire>
<Wire UId="26">
<NameCon UId="23" Name="OUT" />
<IdentCon UId="22" />
</Wire>
</Wires>
</FlgNet></NetworkSource>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="4" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="5" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="6" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="7" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>Al arrancar, actualizamos la fecha y hora nueva para editar desde HMI/SCADA</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<SW.Blocks.CompileUnit ID="8" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource />
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="9" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="A" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="B" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="C" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="D" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="E" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>OB100_Startup</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
</Document>
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V18" />
<SW.Blocks.OB ID="0">
<AttributeList>
<HeaderAuthor>ABH</HeaderAuthor>
<HeaderFamily>ZeusControl</HeaderFamily>
<HeaderVersion>1.0</HeaderVersion>
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
<Section Name="Input">
<Member Name="BlockNr" Datatype="UInt" Informative="true" />
<Member Name="Reaction" Datatype="USInt" Informative="true" />
<Member Name="Fault_ID" Datatype="Byte" Informative="true" />
<Member Name="BlockType" Datatype="USInt" Informative="true" />
<Member Name="Area" Datatype="USInt" Informative="true" />
<Member Name="DBNr" Datatype="DB_ANY" Informative="true" />
<Member Name="Csg_OBNr" Datatype="OB_ANY" Informative="true" />
<Member Name="Csg_Prio" Datatype="USInt" Informative="true" />
<Member Name="Width" Datatype="USInt" Informative="true" />
</Section>
<Section Name="Temp" />
<Section Name="Constant" />
</Sections></Interface>
<IsIECCheckEnabled>true</IsIECCheckEnabled>
<MemoryLayout>Optimized</MemoryLayout>
<Name>OB121_ProgrammingError</Name>
<Namespace />
<Number>121</Number>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
<SecondaryType>ProgrammingError</SecondaryType>
<SetENOAutomatically>false</SetENOAutomatically>
</AttributeList>
<ObjectList>
<MultilingualText ID="1" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="2" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<SW.Blocks.CompileUnit ID="3" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource />
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="4" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="5" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="6" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="7" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="8" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="9" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>OB121_ProgrammingError</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
</Document>
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V18" />
<SW.Blocks.OB ID="0">
<AttributeList>
<HeaderAuthor>ABH</HeaderAuthor>
<HeaderFamily>ZeusControl</HeaderFamily>
<HeaderVersion>1.0</HeaderVersion>
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
<Section Name="Input">
<Member Name="BlockNr" Datatype="UInt" Informative="true" />
<Member Name="Reaction" Datatype="USInt" Informative="true" />
<Member Name="Fault_ID" Datatype="Byte" Informative="true" />
<Member Name="BlockType" Datatype="USInt" Informative="true" />
<Member Name="Area" Datatype="USInt" Informative="true" />
<Member Name="DBNr" Datatype="DB_ANY" Informative="true" />
<Member Name="Csg_OBNr" Datatype="OB_ANY" Informative="true" />
<Member Name="Csg_Prio" Datatype="USInt" Informative="true" />
<Member Name="Width" Datatype="USInt" Informative="true" />
</Section>
<Section Name="Temp" />
<Section Name="Constant" />
</Sections></Interface>
<IsIECCheckEnabled>true</IsIECCheckEnabled>
<MemoryLayout>Optimized</MemoryLayout>
<Name>OB122_IOAccessError</Name>
<Namespace />
<Number>122</Number>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
<SecondaryType>IOAccessError</SecondaryType>
<SetENOAutomatically>false</SetENOAutomatically>
</AttributeList>
<ObjectList>
<MultilingualText ID="1" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="2" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<SW.Blocks.CompileUnit ID="3" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource />
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="4" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="5" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="6" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="7" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="8" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="9" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>OB122_IOAccessError</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
</Document>
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V18" />
<SW.Blocks.OB ID="0">
<AttributeList>
<HeaderAuthor>ABH</HeaderAuthor>
<HeaderFamily>ZeusControl</HeaderFamily>
<HeaderVersion>1.0</HeaderVersion>
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
<Section Name="Input">
<Member Name="LADDR" Datatype="HW_IO" Informative="true" />
<Member Name="USI" Datatype="Word" Informative="true" />
<Member Name="IChannel" Datatype="USInt" Informative="true" />
<Member Name="EventType" Datatype="Byte" Informative="true" />
<Member Name="PointAddr" Datatype="DWord" Informative="true" />
</Section>
<Section Name="Temp" />
<Section Name="Constant" />
</Sections></Interface>
<IsIECCheckEnabled>true</IsIECCheckEnabled>
<MemoryLayout>Optimized</MemoryLayout>
<Name>OB40_HardwareInterrupt</Name>
<Namespace />
<Number>40</Number>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
<SecondaryType>HardwareInterrupt</SecondaryType>
<SetENOAutomatically>false</SetENOAutomatically>
</AttributeList>
<ObjectList>
<MultilingualText ID="1" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="2" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<SW.Blocks.CompileUnit ID="3" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource />
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="4" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="5" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="6" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="7" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="8" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="9" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>OB40_HardwareInterrupt</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
</Document>
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V18" />
<SW.Blocks.OB ID="0">
<AttributeList>
<HeaderAuthor>ABH</HeaderAuthor>
<HeaderFamily>ZeusControl</HeaderFamily>
<HeaderVersion>1.0</HeaderVersion>
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
<Section Name="Input">
<Member Name="Fault_ID" Datatype="Byte" Informative="true" />
<Member Name="Csg_OBnr" Datatype="OB_ANY" Informative="true" />
<Member Name="Csg_Prio" Datatype="UInt" Informative="true" />
</Section>
<Section Name="Temp" />
<Section Name="Constant" />
</Sections></Interface>
<IsIECCheckEnabled>true</IsIECCheckEnabled>
<MemoryLayout>Optimized</MemoryLayout>
<Name>OB80_TimeErrorInterrupt</Name>
<Namespace />
<Number>80</Number>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
<SecondaryType>TimeErrorInterrupt</SecondaryType>
<SetENOAutomatically>false</SetENOAutomatically>
</AttributeList>
<ObjectList>
<MultilingualText ID="1" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="2" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<SW.Blocks.CompileUnit ID="3" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource />
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="4" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="5" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="6" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="7" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="8" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="9" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>OB80_TimeErrorInterrupt</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
</Document>
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V18" />
<SW.Blocks.OB ID="0">
<AttributeList>
<HeaderAuthor>ABH</HeaderAuthor>
<HeaderFamily>ZeusControl</HeaderFamily>
<HeaderVersion>1.0</HeaderVersion>
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
<Section Name="Input">
<Member Name="IO_State" Datatype="Word" Informative="true" />
<Member Name="LADDR" Datatype="HW_ANY" Informative="true" />
<Member Name="Channel" Datatype="UInt" Informative="true" />
<Member Name="MultiError" Datatype="Bool" Informative="true" />
</Section>
<Section Name="Temp" />
<Section Name="Constant" />
</Sections></Interface>
<IsIECCheckEnabled>true</IsIECCheckEnabled>
<MemoryLayout>Optimized</MemoryLayout>
<Name>OB82_DiagnosticErrorInterrupt</Name>
<Namespace />
<Number>82</Number>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
<SecondaryType>DiagnosticErrorInterrupt</SecondaryType>
<SetENOAutomatically>false</SetENOAutomatically>
</AttributeList>
<ObjectList>
<MultilingualText ID="1" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="2" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<SW.Blocks.CompileUnit ID="3" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource />
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="4" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="5" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="6" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="7" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="8" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="9" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>OB82_DiagnosticErrorInterrupt</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
</Document>
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V18" />
<SW.Blocks.OB ID="0">
<AttributeList>
<HeaderAuthor>ABH</HeaderAuthor>
<HeaderFamily>ZeusControl</HeaderFamily>
<HeaderVersion>1.0</HeaderVersion>
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
<Section Name="Input">
<Member Name="LADDR" Datatype="HW_IO" Informative="true" />
<Member Name="Event_Class" Datatype="Byte" Informative="true" />
<Member Name="Fault_ID" Datatype="Byte" Informative="true" />
</Section>
<Section Name="Temp" />
<Section Name="Constant" />
</Sections></Interface>
<IsIECCheckEnabled>true</IsIECCheckEnabled>
<MemoryLayout>Optimized</MemoryLayout>
<Name>OB83_PullOrPlugOfModules</Name>
<Namespace />
<Number>83</Number>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
<SecondaryType>PullOrPlugOfModules</SecondaryType>
<SetENOAutomatically>false</SetENOAutomatically>
</AttributeList>
<ObjectList>
<MultilingualText ID="1" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="2" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<SW.Blocks.CompileUnit ID="3" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource />
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="4" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="5" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="6" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="7" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="8" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="9" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>OB83_PullOrPlugOfModules</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
</Document>
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V18" />
<SW.Blocks.OB ID="0">
<AttributeList>
<HeaderAuthor>ABH</HeaderAuthor>
<HeaderFamily>ZeusControl</HeaderFamily>
<HeaderVersion>1.0</HeaderVersion>
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
<Section Name="Input">
<Member Name="LADDR" Datatype="HW_DEVICE" Informative="true" />
<Member Name="Event_Class" Datatype="Byte" Informative="true" />
<Member Name="Fault_ID" Datatype="Byte" Informative="true" />
</Section>
<Section Name="Temp" />
<Section Name="Constant" />
</Sections></Interface>
<IsIECCheckEnabled>true</IsIECCheckEnabled>
<MemoryLayout>Optimized</MemoryLayout>
<Name>OB86_RackOrStationFailure</Name>
<Namespace />
<Number>86</Number>
<ProgrammingLanguage>LAD</ProgrammingLanguage>
<SecondaryType>RackOrStationFailure</SecondaryType>
<SetENOAutomatically>false</SetENOAutomatically>
</AttributeList>
<ObjectList>
<MultilingualText ID="1" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="2" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<SW.Blocks.CompileUnit ID="3" CompositionName="CompileUnits">
<AttributeList>
<NetworkSource />
<ProgrammingLanguage>LAD</ProgrammingLanguage>
</AttributeList>
<ObjectList>
<MultilingualText ID="4" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="5" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
<MultilingualText ID="6" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="7" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="8" CompositionName="Title">
<ObjectList>
<MultilingualTextItem ID="9" CompositionName="Items">
<AttributeList>
<Culture>es-ES</Culture>
<Text>OB86_RackOrStationFailure</Text>
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
</Document>