From ffc686e140d691bf92bf7c8d7222b7563eeb1c96 Mon Sep 17 00:00:00 2001 From: Miguel Date: Thu, 10 Jul 2025 11:24:11 +0200 Subject: [PATCH] =?UTF-8?q?Se=20a=C3=B1adieron=20requisitos=20de=20codific?= =?UTF-8?q?aci=C3=B3n=20de=20salida=20en=20el=20archivo=20de=20configuraci?= =?UTF-8?q?=C3=B3n=20del=20backend,=20especificando=20que=20la=20salida=20?= =?UTF-8?q?est=C3=A1ndar=20debe=20ser=20en=20UTF-8=20para=20evitar=20probl?= =?UTF-8?q?emas=20de=20caracteres=20corruptos.=20Adem=C3=A1s,=20se=20reali?= =?UTF-8?q?zaron=20mejoras=20en=20el=20script=20`x1=5Flad=5Fconverter.py`,?= =?UTF-8?q?=20incluyendo=20la=20implementaci=C3=B3n=20de=20clases=20para?= =?UTF-8?q?=20gestionar=20funciones=20y=20bloques=20de=20funciones,=20as?= =?UTF-8?q?=C3=AD=20como=20la=20recopilaci=C3=B3n=20de=20interfaces=20de?= =?UTF-8?q?=20funciones=20en=20la=20primera=20pasada=20del=20convertidor.?= =?UTF-8?q?=20Se=20actualizaron=20los=20logs=20para=20reflejar=20la=20ejec?= =?UTF-8?q?uci=C3=B3n=20y=20los=20resultados=20del=20proceso=20de=20conver?= =?UTF-8?q?si=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .doc/backend_setup.md | 44 + .../TwinCat/scl/BLENDER_PID_CTRL_LOOP.scl | 1 + .../TwinCat/.doc/backend_setup.md | 44 + .../script_groups/TwinCat/x1_lad_converter.py | 877 ++- data/log.txt | 5375 ++++++++++++++++- 5 files changed, 5983 insertions(+), 358 deletions(-) create mode 100644 backend/script_groups/Analisis/TwinCat/scl/BLENDER_PID_CTRL_LOOP.scl diff --git a/.doc/backend_setup.md b/.doc/backend_setup.md index 3ec3ef8..349a87e 100644 --- a/.doc/backend_setup.md +++ b/.doc/backend_setup.md @@ -202,4 +202,48 @@ Para un grupo "XML Parser to SCL": "hidden": true } } +``` + +## 7. Requisitos de Codificación de Salida (stdout) + +Toda la salida estándar (`stdout`) generada por los scripts (por ejemplo, mediante la función `print()`) es capturada en tiempo real y mostrada en el panel de logs del frontend. + +Para garantizar que el texto se muestre correctamente y evitar caracteres corruptos (mojibake), **la salida de los scripts debe tener codificación UTF-8**. + +### Configuración Automática + +El sistema está diseñado para facilitar esto. Al ejecutar un script, el entorno se configura automáticamente para que la salida de Python sea UTF-8. Específicamente, se establece la variable de entorno `PYTHONIOENCODING=utf-8`. + +Gracias a esto, en la mayoría de los casos, **no necesitas hacer nada especial**. Simplemente usa `print()` y la codificación será la correcta. + +### Casos Especiales y Solución de Problemas + +Pueden surgir problemas si tu script lee datos de fuentes externas (como archivos) que tienen una codificación diferente. Si imprimes contenido directamente sin decodificarlo primero, podrías enviar bytes no válidos a la salida. + +La regla es: **decodifica los datos de entrada a un string de Python lo antes posible, y deja que `print()` se encargue de la codificación de salida.** + +**Ejemplo de cómo manejar un archivo con codificación `latin-1`:** + +```python +# INCORRECTO: Si el archivo no es UTF-8, esto puede enviar bytes inválidos. +# El launcher intentará decodificarlos como UTF-8 y podría fallar o mostrar basura. +try: + with open('mi_archivo_legacy.txt', 'rb') as f: + print(f.read()) +except Exception as e: + print(f"Esto probablemente falle o muestre texto corrupto: {e}") + + +# CORRECTO: Leer el archivo especificando su codificación para decodificarlo a un string. +# Una vez que es un string de Python, `print` lo manejará correctamente. +try: + with open('mi_archivo_legacy.txt', 'r', encoding='latin-1') as f: + contenido = f.read() + # Ahora `contenido` es un string de Python. + # print() lo codificará a UTF-8 automáticamente gracias a la configuración del entorno. + print(contenido) +except FileNotFoundError: + print("El archivo 'mi_archivo_legacy.txt' no fue encontrado para el ejemplo.") +except Exception as e: + print(f"Error al procesar el archivo: {e}") ``` \ No newline at end of file diff --git a/backend/script_groups/Analisis/TwinCat/scl/BLENDER_PID_CTRL_LOOP.scl b/backend/script_groups/Analisis/TwinCat/scl/BLENDER_PID_CTRL_LOOP.scl new file mode 100644 index 0000000..81b92e2 --- /dev/null +++ b/backend/script_groups/Analisis/TwinCat/scl/BLENDER_PID_CTRL_LOOP.scl @@ -0,0 +1 @@ +(* Código SCL generado desde LAD TwinCAT *)\n(* Convertidor mejorado con SymPy - Estructura DNF preferida *)\n(* Path original: *)\n\nPROGRAM \n\n (* Código LAD convertido a SCL *)\n\n\nEND_PROGRAM \ No newline at end of file diff --git a/backend/script_groups/TwinCat/.doc/backend_setup.md b/backend/script_groups/TwinCat/.doc/backend_setup.md index 3ec3ef8..349a87e 100644 --- a/backend/script_groups/TwinCat/.doc/backend_setup.md +++ b/backend/script_groups/TwinCat/.doc/backend_setup.md @@ -202,4 +202,48 @@ Para un grupo "XML Parser to SCL": "hidden": true } } +``` + +## 7. Requisitos de Codificación de Salida (stdout) + +Toda la salida estándar (`stdout`) generada por los scripts (por ejemplo, mediante la función `print()`) es capturada en tiempo real y mostrada en el panel de logs del frontend. + +Para garantizar que el texto se muestre correctamente y evitar caracteres corruptos (mojibake), **la salida de los scripts debe tener codificación UTF-8**. + +### Configuración Automática + +El sistema está diseñado para facilitar esto. Al ejecutar un script, el entorno se configura automáticamente para que la salida de Python sea UTF-8. Específicamente, se establece la variable de entorno `PYTHONIOENCODING=utf-8`. + +Gracias a esto, en la mayoría de los casos, **no necesitas hacer nada especial**. Simplemente usa `print()` y la codificación será la correcta. + +### Casos Especiales y Solución de Problemas + +Pueden surgir problemas si tu script lee datos de fuentes externas (como archivos) que tienen una codificación diferente. Si imprimes contenido directamente sin decodificarlo primero, podrías enviar bytes no válidos a la salida. + +La regla es: **decodifica los datos de entrada a un string de Python lo antes posible, y deja que `print()` se encargue de la codificación de salida.** + +**Ejemplo de cómo manejar un archivo con codificación `latin-1`:** + +```python +# INCORRECTO: Si el archivo no es UTF-8, esto puede enviar bytes inválidos. +# El launcher intentará decodificarlos como UTF-8 y podría fallar o mostrar basura. +try: + with open('mi_archivo_legacy.txt', 'rb') as f: + print(f.read()) +except Exception as e: + print(f"Esto probablemente falle o muestre texto corrupto: {e}") + + +# CORRECTO: Leer el archivo especificando su codificación para decodificarlo a un string. +# Una vez que es un string de Python, `print` lo manejará correctamente. +try: + with open('mi_archivo_legacy.txt', 'r', encoding='latin-1') as f: + contenido = f.read() + # Ahora `contenido` es un string de Python. + # print() lo codificará a UTF-8 automáticamente gracias a la configuración del entorno. + print(contenido) +except FileNotFoundError: + print("El archivo 'mi_archivo_legacy.txt' no fue encontrado para el ejemplo.") +except Exception as e: + print(f"Error al procesar el archivo: {e}") ``` \ No newline at end of file diff --git a/backend/script_groups/TwinCat/x1_lad_converter.py b/backend/script_groups/TwinCat/x1_lad_converter.py index 73a514c..a2482a5 100644 --- a/backend/script_groups/TwinCat/x1_lad_converter.py +++ b/backend/script_groups/TwinCat/x1_lad_converter.py @@ -1,8 +1,10 @@ +print("=== SCRIPT FILE ACCESSED BY PYTHON ===") #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Convertidor simplificado de LAD TwinCAT a pseudocódigo estructurado Versión mejorada con SymPy para optimización de expresiones lógicas +Version con dos pasadas: 1) Recopilar funciones 2) Convertir con interfaz conocida """ import re @@ -23,6 +25,88 @@ sys.path.append(script_root) from backend.script_utils import load_configuration +class FunctionInfo: + """Información sobre una función extraída""" + + def __init__(self, name, return_type="BOOL"): + self.name = name + self.return_type = return_type + self.inputs = [] # Lista de (nombre, tipo) + self.outputs = [] # Lista de (nombre, tipo) + self.source_file = "" + self.function_type = "FUNCTION" # FUNCTION, FUNCTION_BLOCK, etc. + + def add_input(self, name, data_type): + """Agregar parámetro de entrada""" + self.inputs.append((name.strip(), data_type.strip())) + + def add_output(self, name, data_type): + """Agregar parámetro de salida""" + self.outputs.append((name.strip(), data_type.strip())) + + def get_call_signature(self): + """Obtener signatura para llamada a función""" + input_params = [name for name, _ in self.inputs] + return f"{self.name}({', '.join(input_params)})" + + def __str__(self): + inputs_str = ", ".join([f"{name}: {dtype}" for name, dtype in self.inputs]) + outputs_str = ", ".join([f"{name}: {dtype}" for name, dtype in self.outputs]) + return f"{self.function_type} {self.name}: {self.return_type} | IN: [{inputs_str}] | OUT: [{outputs_str}]" + + +class FunctionRegistry: + """Registro de funciones disponibles""" + + def __init__(self): + self.functions = {} # nombre -> FunctionInfo + self.function_blocks = {} # nombre -> FunctionInfo + + def add_function(self, func_info): + """Agregar función al registro""" + if func_info.function_type == "FUNCTION": + self.functions[func_info.name] = func_info + elif func_info.function_type == "FUNCTION_BLOCK": + self.function_blocks[func_info.name] = func_info + else: + self.functions[func_info.name] = func_info + + def get_function(self, name): + """Obtener información de función por nombre""" + return self.functions.get(name, None) + + def get_function_block(self, name): + """Obtener información de function block por nombre""" + return self.function_blocks.get(name, None) + + def has_function(self, name): + """Verificar si existe la función""" + return name in self.functions + + def has_function_block(self, name): + """Verificar si existe el function block""" + return name in self.function_blocks + + def get_all_functions(self): + """Obtener todas las funciones registradas""" + return list(self.functions.values()) + + def get_all_function_blocks(self): + """Obtener todos los function blocks registrados""" + return list(self.function_blocks.values()) + + def print_summary(self): + """Imprimir resumen del registro""" + print(f"=== REGISTRO DE FUNCIONES ===") + print(f"Funciones: {len(self.functions)}") + for name, func_info in self.functions.items(): + print(f" {func_info}") + print(f"Function Blocks: {len(self.function_blocks)}") + for name, func_info in self.function_blocks.items(): + print(f" {func_info}") + print() + + class SymbolManager: """Gestor de símbolos para SymPy""" @@ -41,11 +125,12 @@ class SymbolManager: class SimpleLadConverter: """Convertidor simplificado de LAD a código estructurado""" - def __init__(self): + def __init__(self, function_registry=None): self.networks = [] self.current_network_id = 0 self.symbol_manager = SymbolManager() self.sympy_expressions = {} # Mapeo de network_id -> sympy expression + self.function_registry = function_registry or FunctionRegistry() # Nuevas propiedades para estructura SCL completa self.program_name = "" @@ -104,6 +189,70 @@ class SimpleLadConverter: # Extraer ACTIONs self._parse_actions(content) + def parse_function_interface(self, file_path): + """Parsear solo la interfaz de una función (primera pasada)""" + with open(file_path, "r", encoding="utf-8", errors="ignore") as f: + content = f.read() + + # Verificar si es una función + func_match = re.search( + r"(FUNCTION|FUNCTION_BLOCK)\s+(\w+)\s*:\s*(\w+)", content + ) + if not func_match: + return None + + func_type = func_match.group(1) + func_name = func_match.group(2) + return_type = func_match.group(3) + + # Crear objeto FunctionInfo + func_info = FunctionInfo(func_name, return_type) + func_info.function_type = func_type + func_info.source_file = os.path.basename(file_path) + + # Extraer parámetros de entrada + var_input_match = re.search(r"VAR_INPUT(.*?)END_VAR", content, re.DOTALL) + if var_input_match: + input_section = var_input_match.group(1) + for line in input_section.split("\n"): + line = line.strip() + if line and ":" in line and not line.startswith("(*"): + # Limpiar comentarios inline + if "(*" in line: + line = line[: line.find("(*")] + + # Parsear declaración de variable + line = line.replace(";", "").strip() + if ":" in line: + parts = line.split(":") + if len(parts) >= 2: + var_name = parts[0].strip() + var_type = parts[1].strip() + func_info.add_input(var_name, var_type) + + # Extraer parámetros de salida + var_output_match = re.search(r"VAR_OUTPUT(.*?)END_VAR", content, re.DOTALL) + if var_output_match: + output_section = var_output_match.group(1) + for line in output_section.split("\n"): + line = line.strip() + if line and ":" in line and not line.startswith("(*"): + # Limpiar comentarios inline + if "(*" in line: + line = line[: line.find("(*")] + + # Parsear declaración de variable + line = line.replace(";", "").strip() + if ":" in line: + parts = line.split(":") + if len(parts) >= 2: + var_name = parts[0].strip() + var_type = parts[1].strip() + func_info.add_output(var_name, var_type) + + print(f" Función encontrada: {func_info}") + return func_info + def _parse_header_info(self, content): """Extraer información del header del programa""" # Buscar PATH y nombre del programa @@ -172,10 +321,24 @@ class SimpleLadConverter: print(f"Se esperan {expected_networks} redes según el archivo") break + # LÍMITE DE SEGURIDAD: No procesar más de 50 redes para evitar colgarse + if expected_networks > 50: + print( + f"⚠️ ADVERTENCIA: {expected_networks} redes es demasiado. Limitando a 50 redes para evitar colgarse." + ) + expected_networks = 50 + while i < len(lines): if lines[i].strip() == "_NETWORK": self.current_network_id += 1 print(f"Procesando red {self.current_network_id}...") + print(f" Comenzando en línea {i}: '{lines[i].strip()}'") + + # Mostrar las próximas líneas para debug + print(f" Próximas líneas después de _NETWORK:") + for j in range(i + 1, min(i + 10, len(lines))): + print(f" Línea {j}: '{lines[j].strip()}'") + i = self._parse_network(lines, i) else: i += 1 @@ -186,6 +349,17 @@ class SimpleLadConverter: ) print("Esto puede indicar redes con _EMPTY o estructuras no reconocidas") + # DEBUG: Mostrar todas las líneas _NETWORK encontradas + print("DEBUG: Buscando todas las instancias de _NETWORK...") + for idx, line in enumerate(lines): + if line.strip() == "_NETWORK": + print(f" Línea {idx}: _NETWORK") + if idx + 1 < len(lines): + print(f" Siguiente línea: '{lines[idx + 1].strip()}'") + if idx + 2 < len(lines): + print(f" Línea +2: '{lines[idx + 2].strip()}'") + print() + def _parse_network(self, lines, start_idx): """Parse una red individual con soporte mejorado para operadores LAD""" network = { @@ -193,6 +367,7 @@ class SimpleLadConverter: "comment": "", "logic": None, "target": "", + "calls": [], # NUEVO: para almacenar llamadas a FB/FUN "function_blocks": [], } @@ -211,9 +386,37 @@ class SimpleLadConverter: break elif line == "_LD_ASSIGN": i += 1 + print(f" 🔍 Procesando _LD_ASSIGN en línea {i}") + # Parsear la lógica LAD después de _LD_ASSIGN i, logic = self._parse_lad_expression(lines, i) network["logic"] = logic + print(f" 📋 Lógica parseada: {logic}") + + # Después de la lógica, buscar una lista de ejecución (ENABLELIST) + # Continuar buscando ENABLELIST desde donde terminó el parser de lógica + while i < len(lines): + line_content = lines[i].strip() + print(f" 🔎 Buscando ENABLELIST en línea {i}: '{line_content}'") + + if line_content.startswith("ENABLELIST"): + print(f" ✅ Encontrado ENABLELIST en línea {i}") + i, calls = self._parse_enable_list(lines, i) + network["calls"] = calls + print( + f" ✅ Red {network['id']}: Encontradas {len(calls)} llamadas en ENABLELIST" + ) + break + elif line_content == "_NETWORK": + print(f" 🔚 Fin de red encontrado en línea {i}") + break + elif line_content.startswith("_OUTPUTS"): + print(f" 📤 Sección de outputs encontrada en línea {i}") + break + else: + # Continuar buscando + i += 1 + elif line.startswith("_OUTPUT"): # Buscar variable de salida i += 1 @@ -229,8 +432,16 @@ class SimpleLadConverter: print(f" Red {network['id']} agregada. Total redes: {len(self.networks)}") if network["logic"]: print( - f" Con lógica: {network['logic']['type']} - {network['logic'].get('name', 'Sin nombre')}" + f" Con lógica: {network['logic'].get('type')} - {network['logic'].get('name', 'Sin nombre')}" ) + if network["calls"]: + print(f" Con {len(network['calls'])} llamadas de ejecución.") + # Mostrar detalles de las llamadas + for call in network["calls"]: + if call["name"] and self.function_registry.has_function(call["name"]): + print(f" 🎯 Función reconocida: {call['name']}") + else: + print(f" 📋 Llamada: {call['type']} - {call['name']}") print(f" Target: '{network['target']}'") return i @@ -256,7 +467,11 @@ class SimpleLadConverter: # Buscar funciones en las siguientes líneas i, empty_logic = self._parse_empty_network(lines, i) return i, empty_logic - elif line.startswith("_OUTPUT") or line == "ENABLELIST : 0": + elif ( + line.startswith("_OUTPUT") + or line == "ENABLELIST : 0" + or line.startswith("ENABLELIST :") + ): break else: i += 1 @@ -380,7 +595,7 @@ class SimpleLadConverter: if "." in line and fb_name == "???" and action_call is None: action_call = line print(f" ✓ ACTION call encontrada (fallback): {action_call}") - return i, { + return i + 1, { "type": "ACTION_CALL", "name": action_call, "inputs": inputs, @@ -398,7 +613,13 @@ class SimpleLadConverter: ) break - return i, {"type": "FUNCTION_BLOCK", "name": fb_name, "inputs": inputs} + return i, { + "type": "FUNCTION_BLOCK", + "name": fb_name, + "instance_name": fb_name, # Usar el mismo nombre como instancia + "inputs": inputs, + "outputs": [], + } def _find_action_call_name(self, lines, start_idx): """Buscar el nombre completo de la ACTION después de ???""" @@ -447,6 +668,218 @@ class SimpleLadConverter: return i + 1, " ".join(comment_lines) + def _parse_enable_list(self, lines, start_idx): + """Parsear una lista de ejecución ENABLELIST""" + i = start_idx + calls = [] + + # Buscar línea ENABLELIST + while i < len(lines) and not lines[i].strip().startswith("ENABLELIST"): + i += 1 + + if i < len(lines) and lines[i].strip().startswith("ENABLELIST"): + enable_line = lines[i].strip() + num_enabled = ( + int(enable_line.split(":")[1].strip()) if ":" in enable_line else 0 + ) + print(f" 📋 Procesando ENABLELIST con {num_enabled} llamadas") + i += 1 # Moverse a la siguiente línea después de ENABLELIST + + for call_idx in range(num_enabled): + if i >= len(lines): + break + + print( + f" 🔍 Buscando llamada {call_idx+1}/{num_enabled} en línea {i}" + ) + + # Buscar el próximo _ASSIGN + assign_found = False + while i < len(lines) and not assign_found: + line_content = lines[i].strip() + print(f" 🔎 Línea {i}: '{line_content}'") + + if line_content == "_ASSIGN": + assign_found = True + i += 1 + print(f" ✅ Encontrado _ASSIGN en línea {i-1}") + i, call = self._parse_execution_block(lines, i) + if call: + calls.append(call) + print( + f" ✅ Llamada parseada: {call['type']} - {call['name']}" + ) + else: + print(f" ❌ No se pudo parsear la llamada") + break + elif line_content.startswith("ENABLELIST_END"): + print(f" 🔚 Encontrado ENABLELIST_END prematuro") + break + else: + i += 1 + + if not assign_found: + print(f" ❌ No se encontró _ASSIGN para llamada {call_idx+1}") + break + + # Avanzar hasta el final de la lista de habilitación + while i < len(lines) and not lines[i].strip().startswith("ENABLELIST_END"): + i += 1 + if i < len(lines) and lines[i].strip() == "ENABLELIST_END": + print(f" 🔚 Encontrado ENABLELIST_END en línea {i}") + i += 1 + + print(f" 📊 Total de llamadas parseadas: {len(calls)}") + return i, calls + + def _parse_execution_block(self, lines, start_idx): + """Parsear un bloque de ejecución (_FUNCTION o _FUNCTIONBLOCK)""" + i = start_idx + call_data = { + "type": None, # FUNCTION, FUNCTION_BLOCK, OPERATOR + "instance_name": None, # Para FB + "name": None, # Para FUNCTION o OPERATOR + "inputs": [], + "outputs": [], # Lista de variables de salida + } + + # Encontrar el tipo de bloque (_FUNCTION, _FUNCTIONBLOCK, etc.) + block_type_line_idx = -1 + temp_i = i + while temp_i < len(lines) and temp_i < i + 15: + line = lines[temp_i].strip() + if ( + line.startswith("_FUNCTIONBLOCK") + or line.startswith("_FUNCTION") + or line.startswith("_OPERATOR") + ): + block_type_line_idx = temp_i + break + temp_i += 1 + + if block_type_line_idx == -1: + return i, None + + i = block_type_line_idx + line = lines[i].strip() + + if line.startswith("_FUNCTIONBLOCK"): + call_data["type"] = "FUNCTION_BLOCK" + i += 1 + call_data["instance_name"] = lines[i].strip() + elif line.startswith("_FUNCTION"): + call_data["type"] = "FUNCTION" + elif line.startswith("_OPERATOR"): + call_data["type"] = "OPERATOR" + + i += 1 + + # Saltar _BOX_EXPR y _ENABLED + while i < len(lines) and ( + lines[i].strip().startswith("_BOX_EXPR") + or lines[i].strip().startswith("_ENABLED") + ): + i += 1 + + # Parsear inputs (_OPERAND) + while i < len(lines): + line = lines[i].strip() + if line.startswith("_OPERAND"): + i += 1 + # Saltar _EXPRESSION y polaridad si existen + if i < len(lines) and lines[i].strip() == "_EXPRESSION": + i += 2 # Salta _EXPRESSION y _POSITIV/_NEGATIV + + if i < len(lines): + call_data["inputs"].append(lines[i].strip()) + i += 1 + else: + break + elif line.startswith("ENABLELIST"): # Algunos FBs anidados + i += 1 + else: + break + + # El nombre de la función/bloque viene después de los operandos + name_found = False + while i < len(lines) and not name_found: + line = lines[i].strip() + if ( + line + and not line.startswith("_") + and not line.startswith("ENABLELIST") + and "FB41_PID" not in line # Excepción para PID + ): + call_data["name"] = line + name_found = True + + # Verificar si es una función conocida en el registry + if call_data[ + "type" + ] == "FUNCTION" and self.function_registry.has_function(line): + print(f" ✓ Función conocida detectada: {line}") + elif call_data[ + "type" + ] == "FUNCTION_BLOCK" and self.function_registry.has_function_block( + line + ): + print(f" ✓ Function Block conocido detectado: {line}") + + elif line.startswith("_OUTPUTS"): + break + i += 1 + + # Si el nombre no se encontró (caso de FBs como PID), usar la instancia + if not call_data["name"] and call_data["type"] == "FUNCTION_BLOCK": + # El nombre del tipo de FB está después de los outputs en algunos casos + pass + + # Parsear outputs + while i < len(lines): + line = lines[i].strip() + if line.startswith("_OUTPUTS"): + i += 1 # Saltar línea _OUTPUTS + + # Bucle para cada _OUTPUT + while i < len(lines) and lines[i].strip().startswith("_OUTPUT"): + i += 1 # Saltar línea _OUTPUT + # Saltar polaridad y _NO_SET + while i < len(lines) and lines[i].strip() in [ + "_POSITIV", + "_NEGATIV", + "_NO_SET", + ]: + i += 1 + + if i < len(lines): + output_var = lines[i].strip() + if output_var != "_EMPTY": + call_data["outputs"].append(output_var) + i += 1 + else: + break + elif line.startswith("ENABLELIST_END"): + # Parar aquí - fin del ENABLELIST + break + elif line == "_ASSIGN": + # Parar aquí - otra llamada en el ENABLELIST + print( + f" 🔚 Encontrado siguiente _ASSIGN en línea {i}, terminando parsing de llamada actual" + ) + break + else: + # El nombre del tipo de FB puede estar aquí + if call_data["type"] == "FUNCTION_BLOCK" and not call_data["name"]: + if line and not line.startswith("_"): + call_data["name"] = line + + # Verificar si es un FB conocido + if self.function_registry.has_function_block(line): + print(f" ✓ Function Block conocido detectado: {line}") + i += 1 + + return i, call_data + def _parse_empty_network(self, lines, start_idx): """Parse una red que empieza con _EMPTY y puede contener funciones""" i = start_idx @@ -574,25 +1007,10 @@ class SimpleLadConverter: return i, logic elif line.startswith("_FUNCTION"): print(f" ENCONTRADO _FUNCTION en _ASSIGN: línea {i}") - # Buscar el nombre de la función en las siguientes líneas - func_name = None - j = i + 1 - while j < len(lines) and j < i + 8: - func_line = lines[j].strip() - print(f" Buscando nombre función línea {j}: '{func_line}'") - if ( - func_line - and not func_line.startswith("_") - and "ENABLELIST" not in func_line - and ":" not in func_line - ): - func_name = func_line - print(f" ENCONTRADO nombre función: {func_name}") - break - j += 1 - - if func_name: - return j, {"type": "FUNCTION_CALL", "name": func_name, "inputs": []} + # Usar la misma lógica que _parse_execution_block + i, call_info = self._parse_execution_block(lines, i) + if call_info: + return i, call_info else: i += 1 elif line == "ENABLELIST_END": @@ -614,6 +1032,7 @@ class SimpleLadConverter: "logic": function_logic, "target": target_name, "function_blocks": [], + "calls": [function_logic], # ✅ Añadir la llamada al array calls } self.networks.append(function_network) @@ -672,58 +1091,61 @@ class SimpleLadConverter: if network["comment"]: output.append(f" // {network['comment']}") - if network["logic"] and network["target"]: - # Verificar si es una llamada a ACTION sin condiciones - if network["logic"]["type"] == "ACTION_CALL" and network[ - "target" - ] in [ - "mDummy", - "EN_Out", - ]: # Variables dummy típicas - # Es una llamada a ACTION incondicional - action_name = network["logic"]["name"] - output.append(f" CALL {action_name}();") - output.append( - f" {network['target']} := TRUE; // ACTION ejecutada" - ) - elif network["logic"]["type"] == "FUNCTION_CALL" and network[ - "target" - ] in [ - "mDummy", - "EN_Out", - "gTankProdAmount", - ]: # Variables típicas - # Es una llamada a FUNCTION incondicional - function_call = self._convert_logic_to_string(network["logic"]) - output.append(f" {network['target']} := {function_call};") + # Procesar lógica si existe + condition_str = "" + if network["logic"]: + # Usar expresión DNF optimizada si está disponible + if network["id"] in self.sympy_expressions: + sympy_expr = self.sympy_expressions[network["id"]] + condition_str = self._format_dnf_for_lad(sympy_expr) else: - # Usar expresión DNF optimizada si está disponible - if network["id"] in self.sympy_expressions: - sympy_expr = self.sympy_expressions[network["id"]] - condition_str = self._format_dnf_for_lad(sympy_expr) - # output.append(f" // Optimizada con SymPy DNF") - else: - # Fallback al método original - condition_str = self._convert_logic_to_string( - network["logic"] - ) - output.append(f" // Sin optimización SymPy") + # Fallback al método original + condition_str = self._convert_logic_to_string(network["logic"]) - if condition_str: - # Si hay saltos de línea en la condición (múltiples términos OR) - if "\n" in condition_str: - output.append(f" IF {condition_str} THEN") - else: - output.append(f" IF {condition_str} THEN") + # Asegurar que el campo 'calls' existe antes de accederlo + network_calls = network.get("calls", []) - output.append(f" {network['target']} := TRUE;") - output.append(" ELSE") - output.append(f" {network['target']} := FALSE;") - output.append(" END_IF;") + # ✅ PROCESAR LLAMADAS INDEPENDIENTEMENTE DE LA LÓGICA + if network_calls: + print( + f" 🔧 GENERANDO CÓDIGO - Red {network['id']} tiene {len(network_calls)} llamadas" + ) + + # Si hay condición, generar IF + if condition_str: + if "\n" in condition_str: + output.append(f" IF {condition_str} THEN") else: - output.append( - f" {network['target']} := TRUE; // Logic no reconocida" - ) + output.append(f" IF {condition_str} THEN") + + # Generar las llamadas a función/FB + print( + f" 🔧 Generando {len(network_calls)} llamadas para Red {network['id']}" + ) + for call in network_calls: + print(f" 🔧 Procesando: {call['type']} - {call['name']}") + call_str = self._convert_call_to_string( + call, " " if condition_str else " " + ) + print(f" 🔧 Código generado: {call_str}") + output.append(call_str) + + # Si había condición, cerrar IF + if condition_str: + output.append(" END_IF;") + + elif network["target"]: + # Red sin llamadas pero con target + if condition_str: + output.append(f" IF {condition_str} THEN") + output.append(f" {network['target']} := TRUE;") + output.append(" ELSE") + output.append(f" {network['target']} := FALSE;") + output.append(" END_IF;") + else: + output.append( + f" {network['target']} := TRUE; // Sin condición" + ) output.append("") @@ -767,6 +1189,93 @@ class SimpleLadConverter: output.append("END_VAR") output.append("") + def _convert_call_to_string(self, call, indent=""): + """Convertir una llamada de ejecución a string SCL""" + if not call: + return "" + + if call["type"] == "FUNCTION": + # Buscar información de la función en el registry + func_info = self.function_registry.get_function(call["name"]) + + if func_info: + # Usar información del registry para generar llamada correcta + # Mapear inputs disponibles a parámetros de la función + param_assignments = [] + for i, (param_name, param_type) in enumerate(func_info.inputs): + if i < len(call["inputs"]): + param_assignments.append(f"{param_name} := {call['inputs'][i]}") + + inputs_str = ", ".join(param_assignments) + output_var = call["outputs"][0] if call["outputs"] else "mDummy" + + print( + f" 🎯 Generando llamada a función con interfaz conocida: {call['name']}" + ) + print(f" Parámetros: {inputs_str}") + print(f" Salida: {output_var}") + + # Generar llamada con parámetros nombrados + return f"{indent}{output_var} := {call['name']}({inputs_str});" + else: + # Fallback al método original si no hay información + inputs_str = ", ".join(call["inputs"]) + output_var = call["outputs"][0] if call["outputs"] else "mDummy" + return f"{indent}{output_var} := {call['name']}({inputs_str}); // Sin info de interfaz" + + elif call["type"] == "FUNCTION_BLOCK": + # Buscar información del FB en el registry + fb_info = self.function_registry.get_function_block(call["name"]) + instance_name = call["instance_name"] + + if fb_info: + # Usar información del registry para generar llamada correcta + param_assignments = [] + for i, (param_name, param_type) in enumerate(fb_info.inputs): + if i < len(call["inputs"]): + param_assignments.append(f"{param_name} := {call['inputs'][i]}") + + inputs_str = ", ".join(param_assignments) + fb_call = f"{indent}{instance_name}({inputs_str});" + + # Generar asignaciones de salida usando información del registry + if call["outputs"] and fb_info.outputs: + for i, output_var in enumerate(call["outputs"]): + if i < len(fb_info.outputs): + output_param_name = fb_info.outputs[i][0] + fb_call += f"\n{indent}{output_var} := {instance_name}.{output_param_name};" + + return fb_call + else: + # Fallback al método original + inputs_str = ", ".join(call["inputs"]) + fb_call = ( + f"{indent}{instance_name}({inputs_str}); // Sin info de interfaz" + ) + + if call["outputs"]: + output_var = call["outputs"][0] + # Heurística: el nombre de la salida suele ser 'FilterOut' o similar + output_pin_name = "FilterOut" # Suposición basada en LowPassFilter + if "stat" in instance_name.lower(): + output_pin_name = ( + "MeanValue" # Suposición para StatisticalAnalisys + ) + + fb_call += ( + f"\n{indent}{output_var} := {instance_name}.{output_pin_name};" + ) + + return fb_call + + elif call["type"] == "OPERATOR": + # Formato: output := Operator(input1, input2, ...) + inputs_str = ", ".join(call["inputs"]) + output_var = call["outputs"][0] if call["outputs"] else "mDummy" + return f"{indent}{output_var} := {call['name']}({inputs_str});" + + return f"{indent}(* Llamada no reconocida: {call['type']} - {call['name']} *)" + def _add_actions_as_procedures(self, output, program_name): """Agregar ACTIONs como procedimientos independientes""" if not self.actions: @@ -789,22 +1298,46 @@ class SimpleLadConverter: output.append(" (* Código LAD convertido a SCL *)") for network in action_data["networks"]: + # Asegurar que el campo 'calls' existe + if "calls" not in network: + network["calls"] = [] + output.append(f" // Red {network['id']}") if network["comment"]: output.append(f" // {network['comment']}") - if network["logic"] and network["target"]: - condition_str = self._convert_logic_to_string(network["logic"]) + # Generar código para la red (condición + llamadas) + condition_str = self._convert_logic_to_string(network["logic"]) + + # Asegurar que el campo 'calls' existe antes de accederlo + network_calls = network.get("calls", []) + + if condition_str or (not network["logic"] and network_calls): if condition_str: - output.append(f" IF {condition_str} THEN") - output.append(f" {network['target']} := TRUE;") - output.append(" ELSE") - output.append(f" {network['target']} := FALSE;") + if "\n" in condition_str: + output.append(f" IF {condition_str} THEN") + else: + output.append(f" IF {condition_str} THEN") + + indent = " " if condition_str else " " + if network_calls: + for call in network_calls: + call_str = self._convert_call_to_string(call, indent) + output.append(call_str) + + elif network["target"]: + output.append(f"{indent}{network['target']} := TRUE;") + + if condition_str: + if not network_calls and network["target"]: + output.append(" ELSE") + output.append(f" {network['target']} := FALSE;") output.append(" END_IF;") - else: - output.append( - f" {network['target']} := TRUE; // Logic no reconocida" - ) + + elif network["target"]: + output.append( + f" {network['target']} := TRUE; // Sin condición, solo target" + ) output.append("") @@ -872,14 +1405,42 @@ class SimpleLadConverter: return "" elif logic["type"] == "FUNCTION_BLOCK": - inputs_str = ", ".join(logic["inputs"]) if logic["inputs"] else "" - return f"{logic['name']}({inputs_str})" + # Buscar información del FB en el registry + fb_info = self.function_registry.get_function_block(logic["name"]) + if fb_info: + # Generar llamada con parámetros conocidos + param_assignments = [] + for i, (param_name, param_type) in enumerate(fb_info.inputs): + if i < len(logic["inputs"]): + param_assignments.append( + f"{param_name} := {logic['inputs'][i]}" + ) + inputs_str = ", ".join(param_assignments) + return f"{logic['name']}({inputs_str})" + else: + # Fallback al método original + inputs_str = ", ".join(logic["inputs"]) if logic["inputs"] else "" + return f"{logic['name']}({inputs_str})" elif logic["type"] == "ACTION_CALL": return logic["name"] # Solo devolver el nombre, no CALL aquí elif logic["type"] == "FUNCTION_CALL": - return f"{logic['name']}()" + # Buscar información de la función en el registry + func_info = self.function_registry.get_function(logic["name"]) + if func_info: + # Generar llamada con parámetros conocidos + param_assignments = [] + for i, (param_name, param_type) in enumerate(func_info.inputs): + if i < len(logic.get("inputs", [])): + param_assignments.append( + f"{param_name} := {logic['inputs'][i]}" + ) + inputs_str = ", ".join(param_assignments) + return f"{logic['name']}({inputs_str})" + else: + # Fallback al método original + return f"{logic['name']}()" return "" @@ -909,6 +1470,18 @@ class SimpleLadConverter: else: print(" Sin lógica") + # ¡AGREGAR DEBUGGING PARA LLAMADAS! + if "calls" in network and network["calls"]: + print(f" ✅ Llamadas: {len(network['calls'])}") + for i, call in enumerate(network["calls"]): + print(f" {i+1}. {call['type']}: {call['name']}") + if call["inputs"]: + print(f" Inputs: {call['inputs']}") + if call.get("outputs"): + print(f" Outputs: {call['outputs']}") + else: + print(" ❌ Sin llamadas") + def _debug_logic_string(self, logic, indent=0): """Crear string de debug para la lógica""" if not logic: @@ -1484,17 +2057,89 @@ class SimpleLadConverter: return "\n".join(output) -def main(): - """Función principal - Convierte todos los archivos .EXP a .SCL""" +def is_function_only_file(file_path): + """Verificar si un archivo contiene solo una función (sin código LAD)""" try: + with open(file_path, "r", encoding="utf-8", errors="ignore") as f: + content = f.read() + + # Buscar patrón de función + func_match = re.search( + r"(FUNCTION|FUNCTION_BLOCK)\s+(\w+)\s*:\s*(\w+)", content + ) + if not func_match: + return False + + # Verificar que NO tenga código LAD + has_lad = "_LD_BODY" in content + + # Verificar que tenga principalmente declaraciones de variables + has_vars = "VAR_INPUT" in content or "VAR_OUTPUT" in content or "VAR" in content + + # Es un archivo de función si tiene función, variables, pero no LAD + return func_match and has_vars and not has_lad + except: + return False + + +def collect_function_interfaces(input_directory, debug_mode=False): + """Primera pasada: recopilar información de todas las funciones""" + print("=== PRIMERA PASADA: RECOPILANDO INTERFACES DE FUNCIONES ===") + + function_registry = FunctionRegistry() + + # Obtener todos los archivos .EXP + exp_pattern = os.path.join(input_directory, "*.EXP") + exp_files = glob.glob(exp_pattern) + + function_files = [] + + for exp_file in exp_files: + filename = os.path.basename(exp_file) + + # Verificar si es un archivo de función + if is_function_only_file(exp_file): + function_files.append(exp_file) + print(f" Analizando función: {filename}") + + # Crear convertidor temporal solo para extraer interfaz + temp_converter = SimpleLadConverter() + func_info = temp_converter.parse_function_interface(exp_file) + + if func_info: + function_registry.add_function(func_info) + else: + if debug_mode: + print(f" Saltando (no es función pura): {filename}") + + print(f"\nFunciones encontradas: {len(function_registry.functions)}") + print(f"Function Blocks encontrados: {len(function_registry.function_blocks)}") + + if debug_mode: + function_registry.print_summary() + + return function_registry, function_files + + +def main(): + """Función principal - Convierte todos los archivos .EXP a .SCL con dos pasadas""" + try: + import time + + timestamp = time.strftime("%Y-%m-%d %H:%M:%S") + print("=== SCRIPT VERIFICADO Y EJECUTÁNDOSE CORRECTAMENTE ===") + print(f"🕒 Timestamp: {timestamp}") + print("=== INICIANDO CONVERTIDOR SCRIPT (2 PASADAS) ===") + # Verificar si se pasó un archivo específico como parámetro para debug debug_file = None if len(sys.argv) > 1: debug_file = sys.argv[1] print(f"=== MODO DEBUG: Procesando archivo específico ===") print(f"Archivo: {debug_file}") + print("🔧 VERIFICACIÓN: Script modificado y ejecutándose en tiempo real") else: - print("=== Convertidor Masivo LAD a SCL con SymPy ===") + print("=== Convertidor Masivo LAD a SCL con SymPy (2 Pasadas) ===") # Cargar configuración configs = load_configuration() @@ -1505,12 +2150,15 @@ def main(): "Advertencia: No se pudo cargar la configuración, usando valores por defecto" ) working_directory = "./" - scl_output_dir = "TwinCat/scl" + scl_output_dir = "scl" debug_mode = True show_optimizations = True show_generated_code = False max_display_lines = 50 force_regenerate = False + level1_config = {} + level2_config = {} + level3_config = {} else: # Obtener configuraciones working_directory = configs.get("working_directory", "./") @@ -1531,8 +2179,23 @@ def main(): "force_regenerate", False ) # Nueva opción - # Directorio de entrada para archivos .EXP (de level3 o working_directory como fallback) - input_directory = level3_config.get("twincat_exp_directory", working_directory) + # Directorio de entrada para archivos .EXP + # En modo debug, usar el directorio actual si no hay configuración específica + if debug_file: + # Modo debug: usar directorio actual donde están los archivos EXP + input_directory = os.path.dirname(os.path.abspath(__file__)) + # Buscar directorio ExportTwinCat si existe + export_dir = os.path.join(input_directory, "../ExportTwinCat") + if os.path.exists(export_dir): + input_directory = os.path.abspath(export_dir) + print(f"Detectado directorio ExportTwinCat: {input_directory}") + else: + print(f"Usando directorio actual: {input_directory}") + else: + # Modo normal: usar configuración + input_directory = level3_config.get( + "twincat_exp_directory", working_directory + ) # Verificar directorio de trabajo if not os.path.exists(working_directory): @@ -1550,6 +2213,13 @@ def main(): os.makedirs(full_scl_path) print(f"Directorio creado: {full_scl_path}") + # PRIMERA PASADA: Recopilar interfaces de funciones + # IMPORTANTE: Siempre hacer primera pasada, incluso en modo debug + print(f"Directorio para primera pasada: {input_directory}") + function_registry, function_files = collect_function_interfaces( + input_directory, debug_mode + ) + # Determinar archivos a procesar if debug_file: # Modo debug - archivo específico @@ -1562,15 +2232,31 @@ def main(): return exp_files = [debug_file_path] + print(f"🔍 MODO DEBUG ACTIVADO") print(f"Procesando archivo específico: {debug_file}") print(f"Directorio de entrada: {input_directory}") print(f"Directorio de salida SCL: {full_scl_path}") + print(f"Funciones en registry: {len(function_registry.functions)}") + print( + f"Function Blocks en registry: {len(function_registry.function_blocks)}" + ) # En modo debug, forzar regeneración y mostrar más información force_regenerate = True debug_mode = True show_generated_code = True max_display_lines = 100 + + # Mostrar información detallada del registry en modo debug + if function_registry.functions: + print("\n🔧 FUNCIONES DETECTADAS:") + for name, func_info in function_registry.functions.items(): + print(f" ✓ {name}: {func_info.return_type}") + if func_info.inputs: + print(f" IN: {[f'{n}:{t}' for n, t in func_info.inputs]}") + if func_info.outputs: + print(f" OUT: {[f'{n}:{t}' for n, t in func_info.outputs]}") + print() else: # Modo normal - todos los archivos exp_pattern = os.path.join(input_directory, "*.EXP") @@ -1584,6 +2270,7 @@ def main(): print(f"Directorio de salida SCL: {full_scl_path}") print() + print("=== SEGUNDA PASADA: CONVERSIÓN CON INTERFACES CONOCIDAS ===") # Procesar cada archivo successful_conversions = 0 @@ -1610,8 +2297,8 @@ def main(): print(f"Salida: {scl_filename}") try: - # Crear nuevo convertidor para cada archivo - converter = SimpleLadConverter() + # Crear nuevo convertidor para cada archivo CON el registry de funciones + converter = SimpleLadConverter(function_registry) # Parsear archivo converter.parse_file(exp_file) @@ -1666,6 +2353,10 @@ def main(): # Resumen final print(f"{'='*60}") print(f"RESUMEN DE CONVERSIÓN:") + print(f" 📋 Funciones registradas: {len(function_registry.functions)}") + print( + f" 📋 Function Blocks registrados: {len(function_registry.function_blocks)}" + ) print(f" ✓ Exitosas: {successful_conversions}") print(f" ✗ Fallidas: {failed_conversions}") print(f" 📁 Directorio salida: {full_scl_path}") diff --git a/data/log.txt b/data/log.txt index a8a9918..c81abbf 100644 --- a/data/log.txt +++ b/data/log.txt @@ -1,265 +1,5110 @@ -[16:07:48] Iniciando ejecución de x6_full_io_documentation.py en C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis... -[16:07:48] 🚀 Iniciando documentación completa de IOs de TwinCAT -[16:07:48] ================================================================================ -[16:07:48] 📁 Directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis -[16:07:48] 📁 Directorio de resultados: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat -[16:07:48] 🔍 Escaneando definiciones TwinCAT activas en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat/scl -[16:07:48] ✅ Encontradas 141 definiciones de IO activas. -[16:07:48] 🔍 Buscando usos de variables definidas en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat/scl -[16:07:48] 📄 Analizando uso en: ADSVARREAD.scl -[16:07:48] 📄 Analizando uso en: ADSVARTRANSLATE.scl -[16:07:49] 📄 Analizando uso en: ADSVARWRITE.scl -[16:07:49] 📄 Analizando uso en: AMMONIACTRL.scl -[16:07:49] 📄 Analizando uso en: ARRAYTOREAL.scl -[16:07:49] 📄 Analizando uso en: BLENDERPROCEDURE_VARIABLES.scl -[16:07:49] 📄 Analizando uso en: BLENDERRINSE.scl -[16:07:49] 📄 Analizando uso en: BLENDER_PID_CTRL_LOOP.scl -[16:07:49] 📄 Analizando uso en: BLENDER_PROCEDURECALL.scl -[16:07:49] 📄 Analizando uso en: BLENDER_RUNCONTROL.scl -[16:07:49] 📄 Analizando uso en: BLENDER_VARIABLES.scl -[16:07:49] 📄 Analizando uso en: BLENDFILLRECSTRUCT.scl -[16:07:49] 📄 Analizando uso en: BLENDFILLSENDSTRUCT.scl -[16:07:49] 📄 Analizando uso en: BLENDFILLSYSTEM_STARTUP.scl -[16:07:49] 📄 Analizando uso en: BRIXTRACKING.scl -[16:07:49] 📄 Analizando uso en: BYTES_TO_DWORD.scl -[16:07:49] 📄 Analizando uso en: BYTES_TO_WORD.scl -[16:07:49] 📄 Analizando uso en: CALC_INJPRESS.scl -[16:07:49] 📄 Analizando uso en: CARBOWATERLINE.scl -[16:07:50] 📄 Analizando uso en: CENTRALCIP_CTRL.scl -[16:07:50] 📄 Analizando uso en: CETRIFUGAL_HEAD.scl -[16:07:50] 📄 Analizando uso en: CIPRECEIVESTRUCT.scl -[16:07:50] 📄 Analizando uso en: CIPSENDSTRUCT.scl -[16:07:50] 📄 Analizando uso en: CIP_CVQ.scl -[16:07:50] 📄 Analizando uso en: CIP_LINK_TYPE.scl -[16:07:50] 📄 Analizando uso en: CIP_LIST_ELEMENT.scl -[16:07:50] 📄 Analizando uso en: CIP_MAIN.scl -[16:07:50] 📄 Analizando uso en: CIP_PROGRAM_VARIABLES.scl -[16:07:50] 📄 Analizando uso en: CIP_SIMPLE_TYPE.scl -[16:07:50] 📄 Analizando uso en: CIP_STEP_TYPE.scl -[16:07:50] 📄 Analizando uso en: CIP_WAITEVENT_TYPE.scl -[16:07:50] 📄 Analizando uso en: CLEANBOOLARRAY.scl -[16:07:50] 📄 Analizando uso en: CLOCK_SIGNAL.scl -[16:07:50] 📄 Analizando uso en: CLOCK_VARIABLES.scl -[16:07:50] 📄 Analizando uso en: CO2EQPRESS.scl -[16:07:50] 📄 Analizando uso en: CO2INJPRESSURE.scl -[16:07:50] 📄 Analizando uso en: CO2_SOLUBILITY.scl -[16:07:50] 📄 Analizando uso en: CONVERTREAL.scl -[16:07:50] 📄 Analizando uso en: CVQ_0_6_PERC.scl -[16:07:50] 📄 Analizando uso en: CVQ_1P7_8_PERC.scl -[16:07:50] 📄 Analizando uso en: DATA_FROM_CIP.scl -[16:07:50] 📄 Analizando uso en: DATA_TO_CIP.scl -[16:07:50] 📄 Analizando uso en: DEAIRCO2TEMPCOMP.scl -[16:07:50] 📄 Analizando uso en: DEAIREATIONVALVE.scl -[16:07:50] 📄 Analizando uso en: DEAIREATOR_STARTUP.scl -[16:07:50] 📄 Analizando uso en: DELAY.scl -[16:07:50] 📄 Analizando uso en: DELTAP.scl -[16:07:50] 📄 Analizando uso en: DENSIMETER_CALIBRATION.scl -[16:07:50] 📄 Analizando uso en: DERIVE.scl -[16:07:50] 📄 Analizando uso en: DEVICENET_VARIABLES.scl -[16:07:50] 📄 Analizando uso en: DWORD_TO_BYTES.scl -[16:07:50] 📄 Analizando uso en: EXEC_SIMPLE_CIP.scl -[16:07:50] 📄 Analizando uso en: FASTRINSE.scl -[16:07:50] 📄 Analizando uso en: FB41_PIDCONTROLLER.scl -[16:07:50] 📄 Analizando uso en: FC_CONTROL_WORD.scl -[16:07:50] 📄 Analizando uso en: FC_STATUS_WORD.scl -[16:07:50] 📄 Analizando uso en: FEEDFORWARD.scl -[16:07:50] 📄 Analizando uso en: FILLERHEAD.scl -[16:07:50] 📄 Analizando uso en: FILLERRECEIVESTRUCT.scl -[16:07:50] 📄 Analizando uso en: FILLERRINSE.scl -[16:07:50] 📄 Analizando uso en: FILLERRINSETANK_CTRL.scl -[16:07:50] 📄 Analizando uso en: FILLERSENDSTRUCT.scl -[16:07:50] 📄 Analizando uso en: FILLER_CONTROL.scl -[16:07:50] 📄 Analizando uso en: FILLINGTIME.scl -[16:07:50] 📄 Analizando uso en: FIRSTPRODUCTION.scl -[16:07:51] 📄 Analizando uso en: FLOW_TO_PRESS_LOSS.scl -[16:07:51] 📄 Analizando uso en: FREQ_TO_MMH2O.scl -[16:07:51] 📄 Analizando uso en: FRICTIONLOSS.scl -[16:07:51] 📄 Analizando uso en: GETPRODBRIXCO2_FROMANALOGINPUT.scl -[16:07:51] 📄 Analizando uso en: GETPRODO2_FROMANALOGINPUT.scl -[16:07:51] 📄 Analizando uso en: GLOBAL_ALARMS.scl -[16:07:51] 📄 Analizando uso en: GLOBAL_VARIABLES_IN_OUT.scl -[16:07:51] 📄 Analizando uso en: HMI_ALARMS.scl -[16:07:51] 📄 Analizando uso en: HMI_BLENDER_PARAMETERS.scl -[16:07:51] 📄 Analizando uso en: HMI_IO_SHOWING.scl -[16:07:51] 📄 Analizando uso en: HMI_LOCAL_CIP_VARIABLES.scl -[16:07:51] 📄 Analizando uso en: HMI_SERVICE.scl -[16:07:51] 📄 Analizando uso en: HMI_VARIABLES_CMD.scl -[16:07:51] 📄 Analizando uso en: HMI_VARIABLES_STATUS.scl -[16:07:51] 📄 Analizando uso en: INPUT.scl -[16:07:51] 📄 Analizando uso en: INPUT_CIP_SIGNALS.scl -[16:07:51] 📄 Analizando uso en: INPUT_SIGNAL.scl -[16:07:51] 📄 Analizando uso en: INTEGRAL.scl -[16:07:51] 📄 Analizando uso en: LOCALCIP_CTRL.scl -[16:07:51] 📄 Analizando uso en: LOWPASSFILTER.scl -[16:07:51] 📄 Analizando uso en: LOWPASSFILTEROPT.scl -[16:07:51] 📄 Analizando uso en: MASELLI.scl -[16:07:51] 📄 Analizando uso en: MASELLIOPTO_TYPE.scl -[16:07:51] 📄 Analizando uso en: MASELLIUC05_TYPE.scl -[16:07:51] 📄 Analizando uso en: MASELLIUR22_TYPE.scl -[16:07:51] 📄 Analizando uso en: MASELLI_CONTROL.scl -[16:07:51] 📄 Analizando uso en: MAXCARBOCO2_VOL.scl -[16:07:51] 📄 Analizando uso en: MESSAGESCROLL.scl -[16:07:51] 📄 Analizando uso en: MESSAGE_SCROLL.scl -[16:07:51] 📄 Analizando uso en: MFMANALOG_VALUES.scl -[16:07:51] 📄 Analizando uso en: MFM_REAL_STRUCT.scl -[16:07:51] 📄 Analizando uso en: MMH2O_TO_FREQ.scl -[16:07:51] 📄 Analizando uso en: MODVALVEFAULT.scl -[16:07:51] 📄 Analizando uso en: MOVEARRAY.scl -[16:07:51] 📄 Analizando uso en: MPDS1000.scl -[16:07:51] 📄 Analizando uso en: MPDS1000_CONTROL.scl -[16:07:52] 📄 Analizando uso en: MPDS1000_TYPE.scl -[16:07:52] 📄 Analizando uso en: MPDS2000.scl -[16:07:52] 📄 Analizando uso en: MPDS2000_CONTROL.scl -[16:07:52] 📄 Analizando uso en: MPDS2000_TYPE.scl -[16:07:52] 📄 Analizando uso en: MPDS_PA_CONTROL.scl -[16:07:52] 📄 Analizando uso en: MSE_SLOPE.scl -[16:07:52] 📄 Analizando uso en: MYVAR.scl -[16:07:52] 📄 Analizando uso en: OR_ARRAYBOOL.scl -[16:07:52] 📄 Analizando uso en: OUTPUT.scl -[16:07:52] 📄 Analizando uso en: PARAMETERNAMETYPE.scl -[16:07:52] 📄 Analizando uso en: PA_MPDS.scl -[16:07:52] 📄 Analizando uso en: PERIPHERIAL.scl -[16:07:52] 📄 Analizando uso en: PID_VARIABLES.scl -[16:07:52] 📄 Analizando uso en: PLC CONFIGURATION.scl -[16:07:52] 📄 Analizando uso en: PNEUMATIC_VALVE_CTRL.scl -[16:07:52] 📄 Analizando uso en: PPM_O2.scl -[16:07:52] 📄 Analizando uso en: PRODBRIXRECOVERY.scl -[16:07:52] 📄 Analizando uso en: PRODTANK_DRAIN.scl -[16:07:52] 📄 Analizando uso en: PRODTANK_RUNOUT.scl -[16:07:52] 📄 Analizando uso en: PRODUCTAVAILABLE.scl -[16:07:52] 📄 Analizando uso en: PRODUCTION_VARIABLES.scl -[16:07:52] 📄 Analizando uso en: PRODUCTLITERINTANK.scl -[16:07:52] 📄 Analizando uso en: PRODUCTPIPEDRAIN.scl -[16:07:52] 📄 Analizando uso en: PRODUCTPIPERUNOUT.scl -[16:07:52] 📄 Analizando uso en: PRODUCTQUALITY.scl -[16:07:53] 📄 Analizando uso en: PRODUCTTANKBRIX.scl -[16:07:53] 📄 Analizando uso en: PRODUCTTANK_PRESSCTRL.scl -[16:07:53] 📄 Analizando uso en: PROFIBUS_DATA.scl -[16:07:53] 📄 Analizando uso en: PROFIBUS_NETWORK.scl -[16:07:53] 📄 Analizando uso en: PROFIBUS_VARIABLES.scl -[16:07:53] 📄 Analizando uso en: PULSEPRESSURE.scl -[16:07:53] 📄 Analizando uso en: PUMPSCONTROL.scl -[16:07:53] 📄 Analizando uso en: READANALOGIN.scl -[16:07:53] 📄 Analizando uso en: READPERIPHERIAL.scl -[16:07:53] 📄 Analizando uso en: SAFETIES.scl -[16:07:53] 📄 Analizando uso en: SELCHECKBRIXSOURCE.scl -[16:07:53] 📄 Analizando uso en: SIGNALS_INTEFACE.scl -[16:07:53] 📄 Analizando uso en: SIGNAL_GEN.scl -[16:07:53] 📄 Analizando uso en: SINUSOIDAL_SIGNAL.scl -[16:07:53] 📄 Analizando uso en: SLEWLIMIT.scl -[16:07:53] 📄 Analizando uso en: SLIM_BLOCK.scl -[16:07:53] 📄 Analizando uso en: SLIM_VARIABLES.scl -[16:07:53] 📄 Analizando uso en: SOFTNET_VARIABLES.scl -[16:07:53] 📄 Analizando uso en: SPEEDADJUST.scl -[16:07:53] 📄 Analizando uso en: SP_AND_P_VARIABLES.scl -[16:07:53] 📄 Analizando uso en: STANDARD.LIB_5.6.98 09_39_02.scl -[16:07:53] 📄 Analizando uso en: STATISTICALANALISYS.scl -[16:07:53] 📄 Analizando uso en: SYRBRIX_AUTOCORRECTION.scl -[16:07:53] 📄 Analizando uso en: SYRUPDENSITY.scl -[16:07:53] 📄 Analizando uso en: SYRUPROOMCTRL.scl -[16:07:53] 📄 Analizando uso en: SYRUP_LINE_MFM_PREP.scl -[16:07:53] 📄 Analizando uso en: SYRUP_MFM_STARTUP.scl -[16:07:53] 📄 Analizando uso en: SYRUP_RUNOUT.scl -[16:07:53] 📄 Analizando uso en: SYSTEMRUNOUT_VARIABLES.scl -[16:07:53] 📄 Analizando uso en: SYSTEM_DATAS.scl -[16:07:53] 📄 Analizando uso en: SYSTEM_RUN_OUT.scl -[16:07:53] 📄 Analizando uso en: TANKLEVEL.scl -[16:07:53] 📄 Analizando uso en: TANKLEVELTOHEIGHT.scl -[16:07:53] 📄 Analizando uso en: TASK CONFIGURATION.scl -[16:07:53] 📄 Analizando uso en: TCPLCUTILITIES.LIB_11.12.01 09_39_02.scl -[16:07:53] 📄 Analizando uso en: TCSYSTEM.LIB_16.9.02 09_39_02.scl -[16:07:53] 📄 Analizando uso en: TESTFLOWMETERS.scl -[16:07:54] 📄 Analizando uso en: UDP_STRUCT.scl -[16:07:54] 📄 Analizando uso en: UV_LAMP.scl -[16:07:54] 📄 Analizando uso en: VACUUMCTRL.scl -[16:07:54] 📄 Analizando uso en: VALVEFAULT.scl -[16:07:54] 📄 Analizando uso en: VALVEFLOW.scl -[16:07:54] 📄 Analizando uso en: VARIABLE_CONFIGURATION.scl -[16:07:54] 📄 Analizando uso en: VOID.scl -[16:07:54] 📄 Analizando uso en: WATERDENSITY.scl -[16:07:54] 📄 Analizando uso en: WORD_TO_BYTES.scl -[16:07:54] 📄 Analizando uso en: WRITEPERIPHERIAL.scl -[16:07:54] 📄 Analizando uso en: _BLENDER_CTRL_MAIN.scl -[16:07:54] 📄 Analizando uso en: _BLENDER_PID_MAIN.scl -[16:07:54] 📄 Analizando uso en: _BOOLARRAY_TO_DWORD.scl -[16:07:54] 📄 Analizando uso en: _BOOLARRAY_TO_WORD.scl -[16:07:54] 📄 Analizando uso en: _DWORD_SWAP_BYTEARRAY.scl -[16:07:54] 📄 Analizando uso en: _DWORD_TO_BOOLARRAY.scl -[16:07:54] 📄 Analizando uso en: _FILLING_HEAD_PID_CTRL.scl -[16:07:54] 📄 Analizando uso en: _PUMPCONTROL.scl -[16:07:54] 📄 Analizando uso en: _STEPMOVE.scl -[16:07:54] 📄 Analizando uso en: _WORD_TO_BOOLARRAY.scl -[16:07:54] ✅ Encontrados 196 usos para 61 variables distintas. -[16:07:54] 📄 Generando tabla resumen: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat\TwinCAT_Full_IO_List.md -[16:07:54] ✅ Tabla resumen generada exitosamente. -[16:07:54] 📄 Generando reporte de snippets: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat\TwinCAT_IO_Usage_Snippets.md -[16:07:54] Generando snippets para 61 variables con uso... -[16:07:54] 📝 Procesando 1/61: gProduct_VFC_StatusWord (2 usos) -[16:07:54] 📝 Procesando 2/61: DI_AuxVoltage_On (1 usos) -[16:07:54] 📝 Procesando 3/61: DI_Reset_Horn_Btn (2 usos) -[16:07:54] 📝 Procesando 4/61: DI_Reset_Btn (77 usos) -[16:07:54] 📝 Procesando 5/61: DI_Blender_Stop_Btn (3 usos) -[16:07:54] 📝 Procesando 6/61: DI_Blender_Start_Btn (1 usos) -[16:07:54] 📝 Procesando 7/61: DI_PowerSuppliesOk (2 usos) -[16:07:54] 📝 Procesando 8/61: DI_Min_Deair_Level (1 usos) -[16:07:54] 📝 Procesando 9/61: DI_ProdTankEmpty (1 usos) -[16:07:54] 📝 Procesando 10/61: DI_BatteryNotReady (1 usos) -[16:07:54] 📝 Procesando 11/61: DI_VM1_Water_Valve_Closed (1 usos) -[16:07:54] 📝 Procesando 12/61: DI_VM2_Syrup_Valve_Closed (1 usos) -[16:07:54] 📝 Procesando 13/61: DI_VM3_CO2_Valve_Closed (1 usos) -[16:07:54] 📝 Procesando 14/61: DI_Product_Pump_Contactor (1 usos) -[16:07:54] 📝 Procesando 15/61: DI_SyrRoom_Pump_Ready (1 usos) -[16:07:54] 📝 Procesando 16/61: DI_CIP_CIPMode (1 usos) -[16:07:54] 📝 Procesando 17/61: DI_CIP_RinseMode (1 usos) -[16:07:54] 📝 Procesando 18/61: DI_CIP_DrainRequest (1 usos) -[16:07:54] 📝 Procesando 19/61: DI_CIP_CIPCompleted (1 usos) -[16:07:54] 📝 Procesando 20/61: DI_Air_InletPress_OK (1 usos) -[16:07:54] 📝 Procesando 21/61: DI_Syrup_Line_Drain_Sensor (1 usos) -[16:07:54] 📝 Procesando 22/61: gWaterTotCtrl_Node20 (3 usos) -[16:07:54] 📝 Procesando 23/61: gSyrControl_Node21 (7 usos) -[16:07:54] 📝 Procesando 24/61: gCO2Control_Node22 (7 usos) -[16:07:54] 📝 Procesando 25/61: gProductTotCtrl_Node17 (3 usos) -[16:07:54] 📝 Procesando 26/61: gProduct_VFC_ControlWord (2 usos) -[16:07:54] 📝 Procesando 27/61: gProduct_VFC_MainRefValue (2 usos) -[16:07:54] 📝 Procesando 28/61: DO_HoldBrixMeter (2 usos) -[16:07:54] 📝 Procesando 29/61: DO_SyrupRoomPump_Run (2 usos) -[16:07:54] 📝 Procesando 30/61: DO_SyrupRoomWaterReq (2 usos) -[16:07:54] 📝 Procesando 31/61: DO_CIP_CIPRequest (2 usos) -[16:07:54] 📝 Procesando 32/61: DO_CIP_DrainCompleted (2 usos) -[16:07:54] 📝 Procesando 33/61: DO_Horn (2 usos) -[16:07:54] 📝 Procesando 34/61: DO_Blender_Run_Lamp (2 usos) -[16:07:54] 📝 Procesando 35/61: DO_Alarm_Lamp (2 usos) -[16:07:54] 📝 Procesando 36/61: DO_RotorAlarm_Lamp (2 usos) -[16:07:54] 📝 Procesando 37/61: DO_Water_Pump_Run (2 usos) -[16:07:54] 📝 Procesando 38/61: DO_Syrup_Pump_Run (2 usos) -[16:07:54] 📝 Procesando 39/61: DO_Product_Pump_Run (3 usos) -[16:07:54] 📝 Procesando 40/61: DO_EV11_BlowOff_Valve (2 usos) -[16:07:54] 📝 Procesando 41/61: DO_EV13_Prod_Recirc_Valve (2 usos) -[16:07:54] 📝 Procesando 42/61: DO_EV14_DeairDrain_Valve (2 usos) -[16:07:54] 📝 Procesando 43/61: DO_EV15_ProductTank_Drain_Valve (2 usos) -[16:07:54] 📝 Procesando 44/61: DO_EV17_BufferTankSprayBall_Valve (2 usos) -[16:07:54] 📝 Procesando 45/61: DO_EV18_DeairOverfill_Valve (2 usos) -[16:07:54] 📝 Procesando 46/61: DO_EV21_ProdTankOverfill_Valve (2 usos) -[16:07:54] 📝 Procesando 47/61: DO_EV22_WaterPumpPrime_Valve (2 usos) -[16:07:54] 📝 Procesando 48/61: DO_EV23_SerpentineDrain_valve (2 usos) -[16:07:54] 📝 Procesando 49/61: DO_EV24_SyrupRecirc_Valve (2 usos) -[16:07:54] 📝 Procesando 50/61: DO_EV26_CO2InjShutOff_Valve (2 usos) -[16:07:54] 📝 Procesando 51/61: DO_EV27_DeairSprayBall_Valve (2 usos) -[16:07:54] 📝 Procesando 52/61: DO_EV28_DeairStartCO2Inj_Valve (2 usos) -[16:07:54] 📝 Procesando 53/61: DO_EV44_SyrupLineDrain (2 usos) -[16:07:54] 📝 Procesando 54/61: DO_EV45_ProductChillerDrain (2 usos) -[16:07:54] 📝 Procesando 55/61: DO_EV61_SyrupTankSprayBall (2 usos) -[16:07:54] 📝 Procesando 56/61: DO_EV62_ProductOutlet (3 usos) -[16:07:54] 📝 Procesando 57/61: DO_EV69_Blender_ProductPipeDrain (2 usos) -[16:07:54] 📝 Procesando 58/61: DO_EV81_Prod_Recirc_Chiller_Valve (2 usos) -[16:07:54] 📝 Procesando 59/61: DO_EV01_Deair_Lvl_Ctrl_Valve (2 usos) -[16:07:54] 📝 Procesando 60/61: DO_EV02_Deair_FillUp_Valve (2 usos) -[16:07:54] 📝 Procesando 61/61: gPAmPDSInlinePumpStop (2 usos) -[16:07:54] Generando tabla para 80 variables no usadas... -[16:07:54] ✅ Reporte de snippets generado exitosamente. -[16:07:54] 🎉 Análisis completado exitosamente! -[16:07:54] 📁 Archivos generados en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat -[16:07:54] 📄 TwinCAT_Full_IO_List.md -[16:07:54] 📄 TwinCAT_IO_Usage_Snippets.md -[16:07:54] Ejecución de x6_full_io_documentation.py finalizada (success). Duración: 0:00:06.496612. -[16:07:54] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\TwinCat\log_x6_full_io_documentation.txt +[11:20:26] Iniciando ejecución de x1_lad_converter.py en C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis... +[11:20:26] === SCRIPT FILE ACCESSED BY PYTHON === +[11:20:26] === SCRIPT VERIFICADO Y EJECUTÁNDOSE CORRECTAMENTE === +[11:20:26] 🕒 Timestamp: 2025-07-10 11:20:26 +[11:20:26] === INICIANDO CONVERTIDOR SCRIPT (2 PASADAS) === +[11:20:26] === Convertidor Masivo LAD a SCL con SymPy (2 Pasadas) === +[11:20:26] Directorio para primera pasada: C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/ExportTwinCat +[11:20:26] === PRIMERA PASADA: RECOPILANDO INTERFACES DE FUNCIONES === +[11:20:26] Saltando (no es función pura): ADSVARREAD.EXP +[11:20:26] Saltando (no es función pura): ADSVARTRANSLATE.EXP +[11:20:26] Saltando (no es función pura): ADSVARWRITE.EXP +[11:20:26] Saltando (no es función pura): AMMONIACTRL.EXP +[11:20:26] Analizando función: ARRAYTOREAL.EXP +[11:20:26] Función encontrada: FUNCTION ArrayToReal: REAL | IN: [mIn_Value: POINTER TO BYTE] | OUT: [] +[11:20:26] Saltando (no es función pura): BLENDERPROCEDURE_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): BLENDERRINSE.EXP +[11:20:26] Saltando (no es función pura): BLENDER_PID_CTRL_LOOP.EXP +[11:20:26] Saltando (no es función pura): BLENDER_PROCEDURECALL.EXP +[11:20:26] Saltando (no es función pura): BLENDER_RUNCONTROL.EXP +[11:20:26] Saltando (no es función pura): BLENDER_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): BLENDFILLRECSTRUCT.EXP +[11:20:26] Saltando (no es función pura): BLENDFILLSENDSTRUCT.EXP +[11:20:26] Saltando (no es función pura): BLENDFILLSYSTEM_STARTUP.EXP +[11:20:26] Saltando (no es función pura): BRIXTRACKING.EXP +[11:20:26] Analizando función: BYTES_TO_DWORD.EXP +[11:20:26] Función encontrada: FUNCTION Bytes_To_Dword: DWORD | IN: [] | OUT: [] +[11:20:26] Analizando función: BYTES_TO_WORD.EXP +[11:20:26] Función encontrada: FUNCTION Bytes_To_Word: WORD | IN: [] | OUT: [] +[11:20:26] Analizando función: CALC_INJPRESS.EXP +[11:20:26] Función encontrada: FUNCTION Calc_InjPress: REAL | IN: [i_GasTemperature: REAL, i_GasMW: REAL, i_GasDensity: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): CARBOWATERLINE.EXP +[11:20:26] Saltando (no es función pura): CENTRALCIP_CTRL.EXP +[11:20:26] Analizando función: CETRIFUGAL_HEAD.EXP +[11:20:26] Función encontrada: FUNCTION Cetrifugal_Head: REAL | IN: [i_Diameter: REAL, i_NumValve: REAL, i_Speed: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): CIPRECEIVESTRUCT.EXP +[11:20:26] Saltando (no es función pura): CIPSENDSTRUCT.EXP +[11:20:26] Analizando función: CIP_CVQ.EXP +[11:20:26] Función encontrada: FUNCTION CIP_CVQ: REAL | IN: [i_TempIn: REAL, i_TempOut: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): CIP_LINK_TYPE.EXP +[11:20:26] Saltando (no es función pura): CIP_LIST_ELEMENT.EXP +[11:20:26] Saltando (no es función pura): CIP_MAIN.EXP +[11:20:26] Saltando (no es función pura): CIP_PROGRAM_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): CIP_SIMPLE_TYPE.EXP +[11:20:26] Saltando (no es función pura): CIP_STEP_TYPE.EXP +[11:20:26] Saltando (no es función pura): CIP_WAITEVENT_TYPE.EXP +[11:20:26] Analizando función: CLEANBOOLARRAY.EXP +[11:20:26] Función encontrada: FUNCTION CleanBoolArray: BOOL | IN: [i_ArrayPtr: DWORD, i_UpBound: INT] | OUT: [] +[11:20:26] Saltando (no es función pura): CLOCK_SIGNAL.EXP +[11:20:26] Saltando (no es función pura): CLOCK_VARIABLES.EXP +[11:20:26] Analizando función: CO2EQPRESS.EXP +[11:20:26] Función encontrada: FUNCTION CO2EqPress: REAL | IN: [i_CO2Vol: REAL, i_Temp: REAL] | OUT: [] +[11:20:26] Analizando función: CO2INJPRESSURE.EXP +[11:20:26] Función encontrada: FUNCTION CO2InjPressure: REAL | IN: [i_Temp: REAL, i_Dens: REAL] | OUT: [] +[11:20:26] Analizando función: CO2_SOLUBILITY.EXP +[11:20:26] Función encontrada: FUNCTION CO2_Solubility: REAL | IN: [i_Temp: REAL] | OUT: [] +[11:20:26] Analizando función: CONVERTREAL.EXP +[11:20:26] Función encontrada: FUNCTION ConvertReal: MFM_Real_Struct | IN: [mIn_ValueFromMFM: ARRAY[0..4] OF BYTE] | OUT: [] +[11:20:26] Analizando función: CVQ_0_6_PERC.EXP +[11:20:26] Función encontrada: FUNCTION CVQ_0_6_Perc: REAL | IN: [i_Temp: REAL] | OUT: [] +[11:20:26] Analizando función: CVQ_1P7_8_PERC.EXP +[11:20:26] Función encontrada: FUNCTION CVQ_1p7_8_Perc: REAL | IN: [i_Temp: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): DATA_FROM_CIP.EXP +[11:20:26] Saltando (no es función pura): DATA_TO_CIP.EXP +[11:20:26] Analizando función: DEAIRCO2TEMPCOMP.EXP +[11:20:26] Función encontrada: FUNCTION DeairCO2TempComp: REAL | IN: [i_Temp: REAL, i_CO2Off: REAL] | OUT: [] +[11:20:26] Analizando función: DEAIREATIONVALVE.EXP +[11:20:26] Función encontrada: FUNCTION DeaireationValve: REAL | IN: [in_DeaireationFlow: REAL, in_InletPressure: REAL, in_FlowCoefficient: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): DEAIREATOR_STARTUP.EXP +[11:20:26] Saltando (no es función pura): DELAY.EXP +[11:20:26] Analizando función: DELTAP.EXP +[11:20:26] Función encontrada: FUNCTION DeltaP: REAL | IN: [i_Flow: REAL, i_K: REAL, i_Valve: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): DENSIMETER_CALIBRATION.EXP +[11:20:26] Saltando (no es función pura): DERIVE.EXP +[11:20:26] Saltando (no es función pura): DEVICENET_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): DWORD_TO_BYTES.EXP +[11:20:26] Saltando (no es función pura): EXEC_SIMPLE_CIP.EXP +[11:20:26] Saltando (no es función pura): FASTRINSE.EXP +[11:20:26] Saltando (no es función pura): FB41_PIDCONTROLLER.EXP +[11:20:26] Saltando (no es función pura): FC_CONTROL_WORD.EXP +[11:20:26] Saltando (no es función pura): FC_STATUS_WORD.EXP +[11:20:26] Analizando función: FEEDFORWARD.EXP +[11:20:26] Función encontrada: FUNCTION FeedForward: REAL | IN: [i_Flow: REAL, i_KFF: REAL, i_Delta_P: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): FILLERHEAD.EXP +[11:20:26] Saltando (no es función pura): FILLERRECEIVESTRUCT.EXP +[11:20:26] Saltando (no es función pura): FILLERRINSE.EXP +[11:20:26] Saltando (no es función pura): FILLERRINSETANK_CTRL.EXP +[11:20:26] Saltando (no es función pura): FILLERSENDSTRUCT.EXP +[11:20:26] Saltando (no es función pura): FILLER_CONTROL.EXP +[11:20:26] Analizando función: FILLINGTIME.EXP +[11:20:26] Función encontrada: FUNCTION FillingTime: REAL | IN: [i_FillingValveHead: REAL, i_BottleSize: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): FIRSTPRODUCTION.EXP +[11:20:26] Analizando función: FLOW_TO_PRESS_LOSS.EXP +[11:20:26] Función encontrada: FUNCTION Flow_To_Press_Loss: REAL | IN: [i_Flow: REAL, i_K_Loss: REAL] | OUT: [] +[11:20:26] Analizando función: FREQ_TO_MMH2O.EXP +[11:20:26] Función encontrada: FUNCTION Freq_To_mmH2O: REAL | IN: [i_Freq: REAL, i_K_freq: REAL] | OUT: [] +[11:20:26] Analizando función: FRICTIONLOSS.EXP +[11:20:26] Función encontrada: FUNCTION FrictionLoss: REAL | IN: [i_Flow: REAL, i_K: REAL, i_Dens: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): GETPRODBRIXCO2_FROMANALOGINPUT.EXP +[11:20:26] Saltando (no es función pura): GETPRODO2_FROMANALOGINPUT.EXP +[11:20:26] Saltando (no es función pura): GLOBAL_ALARMS.EXP +[11:20:26] Saltando (no es función pura): GLOBAL_VARIABLES_IN_OUT.EXP +[11:20:26] Saltando (no es función pura): HMI_ALARMS.EXP +[11:20:26] Saltando (no es función pura): HMI_BLENDER_PARAMETERS.EXP +[11:20:26] Saltando (no es función pura): HMI_IO_SHOWING.EXP +[11:20:26] Saltando (no es función pura): HMI_LOCAL_CIP_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): HMI_SERVICE.EXP +[11:20:26] Saltando (no es función pura): HMI_VARIABLES_CMD.EXP +[11:20:26] Saltando (no es función pura): HMI_VARIABLES_STATUS.EXP +[11:20:26] Saltando (no es función pura): INPUT.EXP +[11:20:26] Saltando (no es función pura): INPUT_CIP_SIGNALS.EXP +[11:20:26] Saltando (no es función pura): INPUT_SIGNAL.EXP +[11:20:26] Saltando (no es función pura): INTEGRAL.EXP +[11:20:26] Saltando (no es función pura): LOCALCIP_CTRL.EXP +[11:20:26] Saltando (no es función pura): LOWPASSFILTER.EXP +[11:20:26] Saltando (no es función pura): LOWPASSFILTEROPT.EXP +[11:20:26] Saltando (no es función pura): MASELLI.EXP +[11:20:26] Saltando (no es función pura): MASELLIOPTO_TYPE.EXP +[11:20:26] Saltando (no es función pura): MASELLIUC05_TYPE.EXP +[11:20:26] Saltando (no es función pura): MASELLIUR22_TYPE.EXP +[11:20:26] Saltando (no es función pura): MASELLI_CONTROL.EXP +[11:20:26] Analizando función: MAXCARBOCO2_VOL.EXP +[11:20:26] Función encontrada: FUNCTION MaxCarboCO2_Vol: REAL | IN: [i_Temp: REAL, i_Press: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): MESSAGESCROLL.EXP +[11:20:26] Saltando (no es función pura): MESSAGE_SCROLL.EXP +[11:20:26] Saltando (no es función pura): MFMANALOG_VALUES.EXP +[11:20:26] Saltando (no es función pura): MFM_REAL_STRUCT.EXP +[11:20:26] Analizando función: MMH2O_TO_FREQ.EXP +[11:20:26] Función encontrada: FUNCTION mmH2O_TO_Freq: REAL | IN: [i_Head: REAL, i_K_Pump: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): MODVALVEFAULT.EXP +[11:20:26] Analizando función: MOVEARRAY.EXP +[11:20:26] Función encontrada: FUNCTION MoveArray: BOOL | IN: [i_InArrayPtr: DWORD, i_OutArrayPtr: DWORD, i_UpBound: INT] | OUT: [] +[11:20:26] Saltando (no es función pura): MPDS1000.EXP +[11:20:26] Saltando (no es función pura): MPDS1000_CONTROL.EXP +[11:20:26] Saltando (no es función pura): MPDS1000_TYPE.EXP +[11:20:26] Saltando (no es función pura): MPDS2000.EXP +[11:20:26] Saltando (no es función pura): MPDS2000_CONTROL.EXP +[11:20:26] Saltando (no es función pura): MPDS2000_TYPE.EXP +[11:20:26] Saltando (no es función pura): MPDS_PA_CONTROL.EXP +[11:20:26] Saltando (no es función pura): MSE_SLOPE.EXP +[11:20:26] Saltando (no es función pura): MYVAR.EXP +[11:20:26] Analizando función: OR_ARRAYBOOL.EXP +[11:20:26] Función encontrada: FUNCTION OR_ArrayBool: BOOL | IN: [i_ArrayPtr: DWORD, i_UpBound: INT] | OUT: [] +[11:20:26] Saltando (no es función pura): OUTPUT.EXP +[11:20:26] Saltando (no es función pura): PARAMETERNAMETYPE.EXP +[11:20:26] Saltando (no es función pura): PA_MPDS.EXP +[11:20:26] Saltando (no es función pura): PERIPHERIAL.EXP +[11:20:26] Saltando (no es función pura): PID_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): PLC CONFIGURATION.EXP +[11:20:26] Saltando (no es función pura): PNEUMATIC_VALVE_CTRL.EXP +[11:20:26] Analizando función: PPM_O2.EXP +[11:20:26] Función encontrada: FUNCTION PPM_O2: REAL | IN: [i_Temp: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): PRODBRIXRECOVERY.EXP +[11:20:26] Saltando (no es función pura): PRODTANK_DRAIN.EXP +[11:20:26] Saltando (no es función pura): PRODTANK_RUNOUT.EXP +[11:20:26] Saltando (no es función pura): PRODUCTAVAILABLE.EXP +[11:20:26] Saltando (no es función pura): PRODUCTION_VARIABLES.EXP +[11:20:26] Analizando función: PRODUCTLITERINTANK.EXP +[11:20:26] Función encontrada: FUNCTION ProductLiterInTank: REAL | IN: [i_TankLevel: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): PRODUCTPIPEDRAIN.EXP +[11:20:26] Saltando (no es función pura): PRODUCTPIPERUNOUT.EXP +[11:20:26] Saltando (no es función pura): PRODUCTQUALITY.EXP +[11:20:26] Saltando (no es función pura): PRODUCTTANKBRIX.EXP +[11:20:26] Saltando (no es función pura): PRODUCTTANK_PRESSCTRL.EXP +[11:20:26] Saltando (no es función pura): PROFIBUS_DATA.EXP +[11:20:26] Saltando (no es función pura): PROFIBUS_NETWORK.EXP +[11:20:26] Saltando (no es función pura): PROFIBUS_VARIABLES.EXP +[11:20:26] Analizando función: PULSEPRESSURE.EXP +[11:20:26] Función encontrada: FUNCTION PulsePressure: REAL | IN: [i_Flow: REAL, i_DN_Pipe: REAL, i_Mass: REAL, i_T_Filling: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): PUMPSCONTROL.EXP +[11:20:26] Analizando función: READANALOGIN.EXP +[11:20:26] Función encontrada: FUNCTION ReadAnalogIn: Peripherial | IN: [i_Periferial: INT, i_MaxAnalog: REAL, i_MinAnalog: REAL, i_PerMin: INT, i_PerMax: INT] | OUT: [] +[11:20:26] Analizando función: READPERIPHERIAL.EXP +[11:20:26] Función encontrada: FUNCTION ReadPeripherial: REAL | IN: [i_Periferial: INT, i_MaxAnalog: REAL, i_MinAnalog: REAL, i_PerMin: INT, i_PerMax: INT] | OUT: [] +[11:20:26] Saltando (no es función pura): SAFETIES.EXP +[11:20:26] Saltando (no es función pura): SELCHECKBRIXSOURCE.EXP +[11:20:26] Saltando (no es función pura): SIGNALS_INTEFACE.EXP +[11:20:26] Saltando (no es función pura): SIGNAL_GEN.EXP +[11:20:26] Analizando función: SINUSOIDAL_SIGNAL.EXP +[11:20:26] Función encontrada: FUNCTION Sinusoidal_Signal: REAL | IN: [i_Amplitude: UINT, i_Frequency: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): SLEWLIMIT.EXP +[11:20:26] Saltando (no es función pura): SLIM_BLOCK.EXP +[11:20:26] Saltando (no es función pura): SLIM_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): SOFTNET_VARIABLES.EXP +[11:20:26] Analizando función: SPEEDADJUST.EXP +[11:20:26] Función encontrada: FUNCTION SpeedAdjust: REAL | IN: [i_PrdTnkLvl: REAL, i_TrgTnkLvl: REAL, i_IstLvl: REAL, i_SpeedPerc: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): SP_AND_P_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): STANDARD.LIB_5.6.98 09_39_02.EXP +[11:20:26] Saltando (no es función pura): STATISTICALANALISYS.EXP +[11:20:26] Saltando (no es función pura): SYRBRIX_AUTOCORRECTION.EXP +[11:20:26] Analizando función: SYRUPDENSITY.EXP +[11:20:26] Función encontrada: FUNCTION SyrupDensity: REAL | IN: [i_SyrupBrix: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): SYRUPROOMCTRL.EXP +[11:20:26] Saltando (no es función pura): SYRUP_LINE_MFM_PREP.EXP +[11:20:26] Saltando (no es función pura): SYRUP_MFM_STARTUP.EXP +[11:20:26] Saltando (no es función pura): SYRUP_RUNOUT.EXP +[11:20:26] Saltando (no es función pura): SYSTEMRUNOUT_VARIABLES.EXP +[11:20:26] Saltando (no es función pura): SYSTEM_DATAS.EXP +[11:20:26] Saltando (no es función pura): SYSTEM_RUN_OUT.EXP +[11:20:26] Saltando (no es función pura): TANKLEVEL.EXP +[11:20:26] Analizando función: TANKLEVELTOHEIGHT.EXP +[11:20:26] Función encontrada: FUNCTION TankLevelToHeight: REAL | IN: [Level_Percentage: REAL, Level_Perc0: REAL, Level_Height0: REAL, Level_Perc1: REAL, Level_Height1: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): TASK CONFIGURATION.EXP +[11:20:26] Saltando (no es función pura): TCPLCUTILITIES.LIB_11.12.01 09_39_02.EXP +[11:20:26] Saltando (no es función pura): TCSYSTEM.LIB_16.9.02 09_39_02.EXP +[11:20:26] Saltando (no es función pura): TESTFLOWMETERS.EXP +[11:20:26] Saltando (no es función pura): UDP_STRUCT.EXP +[11:20:26] Saltando (no es función pura): UV_LAMP.EXP +[11:20:26] Saltando (no es función pura): VACUUMCTRL.EXP +[11:20:26] Saltando (no es función pura): VALVEFAULT.EXP +[11:20:26] Analizando función: VALVEFLOW.EXP +[11:20:26] Función encontrada: FUNCTION ValveFlow: REAL | IN: [i_DeltaP: REAL, i_ValveOp: REAL, i_KFF: REAL, i_Dens: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): VARIABLE_CONFIGURATION.EXP +[11:20:26] Saltando (no es función pura): VOID.EXP +[11:20:26] Analizando función: WATERDENSITY.EXP +[11:20:26] Función encontrada: FUNCTION WaterDensity: REAL | IN: [i_Temperature: REAL] | OUT: [] +[11:20:26] Saltando (no es función pura): WORD_TO_BYTES.EXP +[11:20:26] Analizando función: WRITEPERIPHERIAL.EXP +[11:20:26] Función encontrada: FUNCTION WritePeripherial: WORD | IN: [i_Analog: REAL, i_MaxAnalog: REAL, i_MinAnalog: REAL, i_PerMin: UINT, i_PerMax: UINT] | OUT: [] +[11:20:26] Saltando (no es función pura): _BLENDER_CTRL_MAIN.EXP +[11:20:26] Saltando (no es función pura): _BLENDER_PID_MAIN.EXP +[11:20:26] Analizando función: _BOOLARRAY_TO_DWORD.EXP +[11:20:26] Función encontrada: FUNCTION _BoolArray_To_DWord: DWORD | IN: [i_Array: ARRAY [0..31] OF BOOL] | OUT: [] +[11:20:26] Analizando función: _BOOLARRAY_TO_WORD.EXP +[11:20:26] Función encontrada: FUNCTION _BoolArray_To_Word: WORD | IN: [i_Array: ARRAY [0..15] OF BOOL] | OUT: [] +[11:20:26] Analizando función: _DWORD_SWAP_BYTEARRAY.EXP +[11:20:26] Función encontrada: FUNCTION _Dword_Swap_ByteArray: ARRAY | IN: [i_Real: REAL] | OUT: [] +[11:20:26] Analizando función: _DWORD_TO_BOOLARRAY.EXP +[11:20:26] Función encontrada: FUNCTION _DWord_To_BoolArray: ARRAY | IN: [i_DWord: DWORD] | OUT: [] +[11:20:26] Saltando (no es función pura): _FILLING_HEAD_PID_CTRL.EXP +[11:20:26] Saltando (no es función pura): _PUMPCONTROL.EXP +[11:20:26] Saltando (no es función pura): _STEPMOVE.EXP +[11:20:26] Analizando función: _WORD_TO_BOOLARRAY.EXP +[11:20:26] Función encontrada: FUNCTION _Word_To_BoolArray: ARRAY | IN: [i_Word: WORD] | OUT: [] +[11:20:26] Funciones encontradas: 42 +[11:20:26] Function Blocks encontrados: 0 +[11:20:26] === REGISTRO DE FUNCIONES === +[11:20:26] Funciones: 42 +[11:20:26] FUNCTION ArrayToReal: REAL | IN: [mIn_Value: POINTER TO BYTE] | OUT: [] +[11:20:26] FUNCTION Bytes_To_Dword: DWORD | IN: [] | OUT: [] +[11:20:26] FUNCTION Bytes_To_Word: WORD | IN: [] | OUT: [] +[11:20:26] FUNCTION Calc_InjPress: REAL | IN: [i_GasTemperature: REAL, i_GasMW: REAL, i_GasDensity: REAL] | OUT: [] +[11:20:26] FUNCTION Cetrifugal_Head: REAL | IN: [i_Diameter: REAL, i_NumValve: REAL, i_Speed: REAL] | OUT: [] +[11:20:26] FUNCTION CIP_CVQ: REAL | IN: [i_TempIn: REAL, i_TempOut: REAL] | OUT: [] +[11:20:26] FUNCTION CleanBoolArray: BOOL | IN: [i_ArrayPtr: DWORD, i_UpBound: INT] | OUT: [] +[11:20:26] FUNCTION CO2EqPress: REAL | IN: [i_CO2Vol: REAL, i_Temp: REAL] | OUT: [] +[11:20:26] FUNCTION CO2InjPressure: REAL | IN: [i_Temp: REAL, i_Dens: REAL] | OUT: [] +[11:20:26] FUNCTION CO2_Solubility: REAL | IN: [i_Temp: REAL] | OUT: [] +[11:20:26] FUNCTION ConvertReal: MFM_Real_Struct | IN: [mIn_ValueFromMFM: ARRAY[0..4] OF BYTE] | OUT: [] +[11:20:26] FUNCTION CVQ_0_6_Perc: REAL | IN: [i_Temp: REAL] | OUT: [] +[11:20:26] FUNCTION CVQ_1p7_8_Perc: REAL | IN: [i_Temp: REAL] | OUT: [] +[11:20:26] FUNCTION DeairCO2TempComp: REAL | IN: [i_Temp: REAL, i_CO2Off: REAL] | OUT: [] +[11:20:26] FUNCTION DeaireationValve: REAL | IN: [in_DeaireationFlow: REAL, in_InletPressure: REAL, in_FlowCoefficient: REAL] | OUT: [] +[11:20:26] FUNCTION DeltaP: REAL | IN: [i_Flow: REAL, i_K: REAL, i_Valve: REAL] | OUT: [] +[11:20:26] FUNCTION FeedForward: REAL | IN: [i_Flow: REAL, i_KFF: REAL, i_Delta_P: REAL] | OUT: [] +[11:20:26] FUNCTION FillingTime: REAL | IN: [i_FillingValveHead: REAL, i_BottleSize: REAL] | OUT: [] +[11:20:26] FUNCTION Flow_To_Press_Loss: REAL | IN: [i_Flow: REAL, i_K_Loss: REAL] | OUT: [] +[11:20:26] FUNCTION Freq_To_mmH2O: REAL | IN: [i_Freq: REAL, i_K_freq: REAL] | OUT: [] +[11:20:26] FUNCTION FrictionLoss: REAL | IN: [i_Flow: REAL, i_K: REAL, i_Dens: REAL] | OUT: [] +[11:20:26] FUNCTION MaxCarboCO2_Vol: REAL | IN: [i_Temp: REAL, i_Press: REAL] | OUT: [] +[11:20:26] FUNCTION mmH2O_TO_Freq: REAL | IN: [i_Head: REAL, i_K_Pump: REAL] | OUT: [] +[11:20:26] FUNCTION MoveArray: BOOL | IN: [i_InArrayPtr: DWORD, i_OutArrayPtr: DWORD, i_UpBound: INT] | OUT: [] +[11:20:26] FUNCTION OR_ArrayBool: BOOL | IN: [i_ArrayPtr: DWORD, i_UpBound: INT] | OUT: [] +[11:20:26] FUNCTION PPM_O2: REAL | IN: [i_Temp: REAL] | OUT: [] +[11:20:26] FUNCTION ProductLiterInTank: REAL | IN: [i_TankLevel: REAL] | OUT: [] +[11:20:26] FUNCTION PulsePressure: REAL | IN: [i_Flow: REAL, i_DN_Pipe: REAL, i_Mass: REAL, i_T_Filling: REAL] | OUT: [] +[11:20:26] FUNCTION ReadAnalogIn: Peripherial | IN: [i_Periferial: INT, i_MaxAnalog: REAL, i_MinAnalog: REAL, i_PerMin: INT, i_PerMax: INT] | OUT: [] +[11:20:26] FUNCTION ReadPeripherial: REAL | IN: [i_Periferial: INT, i_MaxAnalog: REAL, i_MinAnalog: REAL, i_PerMin: INT, i_PerMax: INT] | OUT: [] +[11:20:26] FUNCTION Sinusoidal_Signal: REAL | IN: [i_Amplitude: UINT, i_Frequency: REAL] | OUT: [] +[11:20:26] FUNCTION SpeedAdjust: REAL | IN: [i_PrdTnkLvl: REAL, i_TrgTnkLvl: REAL, i_IstLvl: REAL, i_SpeedPerc: REAL] | OUT: [] +[11:20:26] FUNCTION SyrupDensity: REAL | IN: [i_SyrupBrix: REAL] | OUT: [] +[11:20:26] FUNCTION TankLevelToHeight: REAL | IN: [Level_Percentage: REAL, Level_Perc0: REAL, Level_Height0: REAL, Level_Perc1: REAL, Level_Height1: REAL] | OUT: [] +[11:20:26] FUNCTION ValveFlow: REAL | IN: [i_DeltaP: REAL, i_ValveOp: REAL, i_KFF: REAL, i_Dens: REAL] | OUT: [] +[11:20:26] FUNCTION WaterDensity: REAL | IN: [i_Temperature: REAL] | OUT: [] +[11:20:26] FUNCTION WritePeripherial: WORD | IN: [i_Analog: REAL, i_MaxAnalog: REAL, i_MinAnalog: REAL, i_PerMin: UINT, i_PerMax: UINT] | OUT: [] +[11:20:26] FUNCTION _BoolArray_To_DWord: DWORD | IN: [i_Array: ARRAY [0..31] OF BOOL] | OUT: [] +[11:20:26] FUNCTION _BoolArray_To_Word: WORD | IN: [i_Array: ARRAY [0..15] OF BOOL] | OUT: [] +[11:20:26] FUNCTION _Dword_Swap_ByteArray: ARRAY | IN: [i_Real: REAL] | OUT: [] +[11:20:26] FUNCTION _DWord_To_BoolArray: ARRAY | IN: [i_DWord: DWORD] | OUT: [] +[11:20:26] FUNCTION _Word_To_BoolArray: ARRAY | IN: [i_Word: WORD] | OUT: [] +[11:20:26] Function Blocks: 0 +[11:20:26] Encontrados 183 archivos .EXP en: C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/ExportTwinCat +[11:20:26] Directorio de salida SCL: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat/scl +[11:20:26] === SEGUNDA PASADA: CONVERSIÓN CON INTERFACES CONOCIDAS === +[11:20:26] ============================================================ +[11:20:26] SALTANDO: ADSVARREAD.EXP - Ya existe ADSVARREAD.scl +[11:20:26] (usa force_regenerate: true en configuración para forzar regeneración) +[11:20:26] ============================================================ +[11:20:26] SALTANDO: ADSVARTRANSLATE.EXP - Ya existe ADSVARTRANSLATE.scl +[11:20:26] (usa force_regenerate: true en configuración para forzar regeneración) +[11:20:26] ============================================================ +[11:20:26] SALTANDO: ADSVARWRITE.EXP - Ya existe ADSVARWRITE.scl +[11:20:26] (usa force_regenerate: true en configuración para forzar regeneración) +[11:20:26] ============================================================ +[11:20:26] SALTANDO: AMMONIACTRL.EXP - Ya existe AMMONIACTRL.scl +[11:20:26] (usa force_regenerate: true en configuración para forzar regeneración) +[11:20:26] ============================================================ +[11:20:26] SALTANDO: ARRAYTOREAL.EXP - Ya existe ARRAYTOREAL.scl +[11:20:26] (usa force_regenerate: true en configuración para forzar regeneración) +[11:20:26] ============================================================ +[11:20:26] SALTANDO: BLENDERPROCEDURE_VARIABLES.EXP - Ya existe BLENDERPROCEDURE_VARIABLES.scl +[11:20:26] (usa force_regenerate: true en configuración para forzar regeneración) +[11:20:26] ============================================================ +[11:20:26] SALTANDO: BLENDERRINSE.EXP - Ya existe BLENDERRINSE.scl +[11:20:26] (usa force_regenerate: true en configuración para forzar regeneración) +[11:20:26] ============================================================ +[11:20:26] Procesando: BLENDER_PID_CTRL_LOOP.EXP +[11:20:26] Salida: BLENDER_PID_CTRL_LOOP.scl +[11:20:26] Programa encontrado: Blender_PID_Ctrl_Loop +[11:20:26] Path: \/TASK1_PID\/PID_Controllers +[11:20:26] Variables VAR_OUTPUT: 1 encontradas +[11:20:26] Variables VAR: 88 encontradas +[11:20:26] Se esperan 82 redes según el archivo +[11:20:26] ⚠️ ADVERTENCIA: 82 redes es demasiado. Limitando a 50 redes para evitar colgarse. +[11:20:26] Procesando red 1... +[11:20:26] Comenzando en línea 2: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3: '' +[11:20:26] Línea 4: '_COMMENT' +[11:20:26] Línea 5: '' +[11:20:26] Línea 6: '_END_COMMENT' +[11:20:26] Línea 7: '_LD_ASSIGN' +[11:20:26] Línea 8: '_EMPTY' +[11:20:26] Línea 9: '_EXPRESSION' +[11:20:26] Línea 10: '_POSITIV' +[11:20:26] Línea 11: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 8 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 8 +[11:20:26] Entrando a _parse_empty_network desde línea 9 +[11:20:26] Línea 9: '_EXPRESSION' +[11:20:26] Línea 10: '_POSITIV' +[11:20:26] Línea 11: '' +[11:20:26] Línea 12: '' +[11:20:26] Línea 13: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 14: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 14 +[11:20:26] Entrando a _parse_assign_section desde línea 15 +[11:20:26] Línea 15: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 15 +[11:20:26] Detectado Function Block directo: _FBD_PROGRAM +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 15 +[11:20:26] Línea 21: 'Blender_PID_Ctrl_Loop.Read_AnalogInput' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 2 creada para FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': '_FBD_PROGRAM', 'instance_name': '_FBD_PROGRAM', 'inputs': [], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 22: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 22 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 38 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderBlending', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlendErrorEn', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gManual_PID_H2O', 'negated': True}, {'type': 'CONTACT', 'name': 'gManual_PID_SYR', 'negated': True}, {'type': 'CONTACT', 'name': 'gWaterRecipe', 'negated': True}, {'type': 'CONTACT', 'name': 'gStopBlendCarboError', 'negated': True}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 68: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 69: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 70: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 71: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 72: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 73: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 74: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 74 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 75 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 1: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 1 agregada. Total redes: 2 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Target: 'gBlendErrorEn' +[11:20:26] Procesando red 3... +[11:20:26] Comenzando en línea 81: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 82: '' +[11:20:26] Línea 83: '_COMMENT' +[11:20:26] Línea 84: '' +[11:20:26] Línea 85: '_END_COMMENT' +[11:20:26] Línea 86: '_LD_ASSIGN' +[11:20:26] Línea 87: '_LD_AND' +[11:20:26] Línea 88: '_LD_OPERATOR : 5' +[11:20:26] Línea 89: '_LD_OR' +[11:20:26] Línea 90: '_LD_OPERATOR : 2' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 87 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderBlending', 'negated': False}, {'type': 'CONTACT', 'name': 'gCarboCO2ErrorEn', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gManual_PID_CO2', 'negated': True}, {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gCarboStillProduct', 'negated': False}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_DoubleDeair', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gStopBlendCarboError', 'negated': True}, {'type': 'CONTACT', 'name': 'gWorkshopTest', 'negated': True}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 125: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 126: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 127: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 128: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 129: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 130: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 131: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 131 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 132 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 3: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 3 agregada. Total redes: 3 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Target: 'gCarboCO2ErrorEn' +[11:20:26] Procesando red 4... +[11:20:26] Comenzando en línea 138: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 139: '' +[11:20:26] Línea 140: '_COMMENT' +[11:20:26] Línea 141: '' +[11:20:26] Línea 142: '_END_COMMENT' +[11:20:26] Línea 143: '_LD_ASSIGN' +[11:20:26] Línea 144: '_LD_CONTACT' +[11:20:26] Línea 145: 'gAlwaysOff' +[11:20:26] Línea 146: '_EXPRESSION' +[11:20:26] Línea 147: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 144 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 148: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 149: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 150: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 151: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 152: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 152 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 153 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 4: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 4 agregada. Total redes: 4 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mI_Sel_H2O' +[11:20:26] Procesando red 5... +[11:20:26] Comenzando en línea 159: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 160: '' +[11:20:26] Línea 161: '_COMMENT' +[11:20:26] Línea 162: '' +[11:20:26] Línea 163: '_END_COMMENT' +[11:20:26] Línea 164: '_LD_ASSIGN' +[11:20:26] Línea 165: '_LD_CONTACT' +[11:20:26] Línea 166: 'gAlwaysOff' +[11:20:26] Línea 167: '_EXPRESSION' +[11:20:26] Línea 168: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 165 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 169: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 170: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 171: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 172: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 173: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 173 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 174 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 5: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 5 agregada. Total redes: 5 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mP_Sel_H2O' +[11:20:26] Procesando red 6... +[11:20:26] Comenzando en línea 180: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 181: '' +[11:20:26] Línea 182: '_COMMENT' +[11:20:26] Línea 183: '' +[11:20:26] Línea 184: '_END_COMMENT' +[11:20:26] Línea 185: '_LD_ASSIGN' +[11:20:26] Línea 186: '_LD_CONTACT' +[11:20:26] Línea 187: 'gAlwaysOff' +[11:20:26] Línea 188: '_EXPRESSION' +[11:20:26] Línea 189: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 186 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 190: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 191: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 192: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 193: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 194: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 194 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 195 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 6: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 6 agregada. Total redes: 6 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mD_Sel_H2O' +[11:20:26] Procesando red 7... +[11:20:26] Comenzando en línea 201: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 202: '' +[11:20:26] Línea 203: '_COMMENT' +[11:20:26] Línea 204: '' +[11:20:26] Línea 205: '_END_COMMENT' +[11:20:26] Línea 206: '_LD_ASSIGN' +[11:20:26] Línea 207: '_LD_OR' +[11:20:26] Línea 208: '_LD_OPERATOR : 4' +[11:20:26] Línea 209: '_LD_CONTACT' +[11:20:26] Línea 210: 'gBlenderBlending' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 207 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderBlending', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderCIPMode', 'negated': False}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gRinseCloseVM1', 'negated': True}, {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderRinse_Running', 'negated': False}, {'type': 'CONTACT', 'name': 'gProdTankRunOut_Running', 'negated': False}, {'type': 'CONTACT', 'name': 'gProdPipeRunOut_Running', 'negated': False}]}]}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderRun_Latch', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_CMD_BlenderMaintenance', 'negated': False}]}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 251: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 252: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 253: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 254: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 255: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 256: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 257: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 258: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 259: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 259 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 260 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 7: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 7 agregada. Total redes: 7 +[11:20:26] Con lógica: OR - Sin nombre +[11:20:26] Target: 'gPID_H2O_Enabled' +[11:20:26] Procesando red 8... +[11:20:26] Comenzando en línea 266: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 267: '' +[11:20:26] Línea 268: '_COMMENT' +[11:20:26] Línea 269: '' +[11:20:26] Línea 270: '_END_COMMENT' +[11:20:26] Línea 271: '_LD_ASSIGN' +[11:20:26] Línea 272: '_LD_AND' +[11:20:26] Línea 273: '_LD_OPERATOR : 2' +[11:20:26] Línea 274: '_LD_CONTACT' +[11:20:26] Línea 275: 'gPID_H2O_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 272 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_H2O_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderStableFlow', 'negated': True}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 282: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 283: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 284: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 285: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 286: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 287: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 288: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 288 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 289 +[11:20:26] 🔎 Línea 289: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 289 +[11:20:26] ✅ Llamada parseada: OPERATOR - MOVE +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 307 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 8: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 315 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gPID_H2O_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gI_ITL_PID_H2O', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 325: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 326: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 327: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 328: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 329: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 330: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 331: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 331 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 332 +[11:20:26] 🔎 Línea 332: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 332 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - None +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 448 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 8: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 456 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gI_ITL_PID_H2O', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 460: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 461: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 462: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 463: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 464: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 464 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 465 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 8: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 8 agregada. Total redes: 8 +[11:20:26] Con lógica: CONTACT - gI_ITL_PID_H2O +[11:20:26] Target: 'gI_ITL_PID_H2O' +[11:20:26] Procesando red 9... +[11:20:26] Comenzando en línea 471: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 472: '' +[11:20:26] Línea 473: '_COMMENT' +[11:20:26] Línea 474: '' +[11:20:26] Línea 475: '_END_COMMENT' +[11:20:26] Línea 476: '_LD_ASSIGN' +[11:20:26] Línea 477: '_LD_AND' +[11:20:26] Línea 478: '_LD_OPERATOR : 2' +[11:20:26] Línea 479: '_LD_CONTACT' +[11:20:26] Línea 480: 'gPID_H2O_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 477 +[11:20:26] Detectado Function Block directo: mH2OPIDEn +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 483 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_H2O_Enabled', 'negated': False}, {'type': 'FUNCTION_BLOCK', 'name': 'mH2OPIDEn', 'instance_name': 'mH2OPIDEn', 'inputs': [], 'outputs': []}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 489: 'F_TRIG' +[11:20:26] 🔎 Buscando ENABLELIST en línea 490: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 490 +[11:20:26] Red 9 agregada. Total redes: 9 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Target: 'mH2OONS' +[11:20:26] Procesando red 10... +[11:20:26] Comenzando en línea 504: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 505: '' +[11:20:26] Línea 506: '_COMMENT' +[11:20:26] Línea 507: '' +[11:20:26] Línea 508: '_END_COMMENT' +[11:20:26] Línea 509: '_LD_ASSIGN' +[11:20:26] Línea 510: '_LD_CONTACT' +[11:20:26] Línea 511: 'mH2OONS' +[11:20:26] Línea 512: '_EXPRESSION' +[11:20:26] Línea 513: '_POSITIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 510 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'mH2OONS', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 514: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 515: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 516: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 517: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 518: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 518 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 519 +[11:20:26] 🔎 Línea 519: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 519 +[11:20:26] ✅ Llamada parseada: OPERATOR - MOVE +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 537 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 10: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 545 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 545 +[11:20:26] Entrando a _parse_empty_network desde línea 546 +[11:20:26] Línea 546: '_EXPRESSION' +[11:20:26] Línea 547: '_POSITIV' +[11:20:26] Línea 548: '' +[11:20:26] Línea 549: '' +[11:20:26] Línea 550: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 551: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 551 +[11:20:26] Entrando a _parse_assign_section desde línea 552 +[11:20:26] Línea 552: '_OPERATOR' +[11:20:26] Línea 553: '_BOX_EXPR : 3' +[11:20:26] Línea 554: '_ENABLED' +[11:20:26] Línea 555: '_OPERAND' +[11:20:26] Línea 556: '_EXPRESSION' +[11:20:26] Línea 557: '_POSITIV' +[11:20:26] Línea 558: 'gPID_H2O_Enabled' +[11:20:26] Línea 559: '_OPERAND' +[11:20:26] Línea 560: '_EXPRESSION' +[11:20:26] Línea 561: '_POSITIV' +[11:20:26] Línea 562: '0.0' +[11:20:26] Línea 563: '_OPERAND' +[11:20:26] Línea 564: '_EXPRESSION' +[11:20:26] Línea 565: '_POSITIV' +[11:20:26] Línea 566: 'gR_Out_H2O_PID' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 567: '_EXPRESSION' +[11:20:26] Línea 568: '_POSITIV' +[11:20:26] Línea 569: 'SEL' +[11:20:26] Línea 570: '_EXPRESSION' +[11:20:26] Línea 571: '_POSITIV' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 572: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 572 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 589 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 593: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 594: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 595: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 596: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 597: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 597 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 598 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 10: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 10 agregada. Total redes: 10 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mI_Sel_SYR' +[11:20:26] Procesando red 11... +[11:20:26] Comenzando en línea 604: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 605: '' +[11:20:26] Línea 606: '_COMMENT' +[11:20:26] Línea 607: '' +[11:20:26] Línea 608: '_END_COMMENT' +[11:20:26] Línea 609: '_LD_ASSIGN' +[11:20:26] Línea 610: '_LD_CONTACT' +[11:20:26] Línea 611: 'gAlwaysOff' +[11:20:26] Línea 612: '_EXPRESSION' +[11:20:26] Línea 613: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 610 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 614: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 615: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 616: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 617: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 618: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 618 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 619 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 11: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 11 agregada. Total redes: 11 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mP_Sel_SYR' +[11:20:26] Procesando red 12... +[11:20:26] Comenzando en línea 625: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 626: '' +[11:20:26] Línea 627: '_COMMENT' +[11:20:26] Línea 628: '' +[11:20:26] Línea 629: '_END_COMMENT' +[11:20:26] Línea 630: '_LD_ASSIGN' +[11:20:26] Línea 631: '_LD_CONTACT' +[11:20:26] Línea 632: 'gAlwaysOff' +[11:20:26] Línea 633: '_EXPRESSION' +[11:20:26] Línea 634: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 631 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 635: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 636: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 637: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 638: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 639: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 639 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 640 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 12: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 12 agregada. Total redes: 12 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mD_Sel_SYR' +[11:20:26] Procesando red 13... +[11:20:26] Comenzando en línea 646: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 647: '' +[11:20:26] Línea 648: '_COMMENT' +[11:20:26] Línea 649: '' +[11:20:26] Línea 650: '_END_COMMENT' +[11:20:26] Línea 651: '_LD_ASSIGN' +[11:20:26] Línea 652: '_LD_OR' +[11:20:26] Línea 653: '_LD_OPERATOR : 4' +[11:20:26] Línea 654: '_LD_AND' +[11:20:26] Línea 655: '_LD_OPERATOR : 2' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 652 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderBlending', 'negated': False}, {'type': 'CONTACT', 'name': 'gWaterRecipe', 'negated': True}]}, {'type': 'CONTACT', 'name': 'gBlenderCIPMode', 'negated': False}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gRinseCloseVM2', 'negated': True}, {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderRinse_Running', 'negated': False}, {'type': 'CONTACT', 'name': 'gProdTankRunOut_Running', 'negated': False}, {'type': 'CONTACT', 'name': 'gProdPipeRunOut_Running', 'negated': False}]}]}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderRun_Latch', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_CMD_BlenderMaintenance', 'negated': False}]}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 704: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 705: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 706: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 707: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 708: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 709: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 710: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 711: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 712: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 712 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 713 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 13: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 13 agregada. Total redes: 13 +[11:20:26] Con lógica: OR - Sin nombre +[11:20:26] Target: 'gPID_SYR_Enabled' +[11:20:26] Procesando red 14... +[11:20:26] Comenzando en línea 719: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 720: '' +[11:20:26] Línea 721: '_COMMENT' +[11:20:26] Línea 722: '' +[11:20:26] Línea 723: '_END_COMMENT' +[11:20:26] Línea 724: '_LD_ASSIGN' +[11:20:26] Línea 725: '_LD_AND' +[11:20:26] Línea 726: '_LD_OPERATOR : 2' +[11:20:26] Línea 727: '_LD_CONTACT' +[11:20:26] Línea 728: 'gPID_SYR_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 725 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_SYR_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderStableFlow', 'negated': True}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 735: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 736: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 737: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 738: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 739: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 740: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 741: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 741 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 742 +[11:20:26] 🔎 Línea 742: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 742 +[11:20:26] ✅ Llamada parseada: OPERATOR - MOVE +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 760 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 14: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 768 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gPID_SYR_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gI_ITL_PID_SYR', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 778: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 779: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 780: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 781: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 782: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 783: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 784: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 784 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 785 +[11:20:26] 🔎 Línea 785: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 785 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - None +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 901 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 14: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 909 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gI_ITL_PID_SYR', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 913: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 914: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 915: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 916: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 917: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 917 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 918 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 14: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 14 agregada. Total redes: 14 +[11:20:26] Con lógica: CONTACT - gI_ITL_PID_SYR +[11:20:26] Target: 'gI_ITL_PID_SYR' +[11:20:26] Procesando red 15... +[11:20:26] Comenzando en línea 924: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 925: '' +[11:20:26] Línea 926: '_COMMENT' +[11:20:26] Línea 927: '' +[11:20:26] Línea 928: '_END_COMMENT' +[11:20:26] Línea 929: '_LD_ASSIGN' +[11:20:26] Línea 930: '_LD_AND' +[11:20:26] Línea 931: '_LD_OPERATOR : 2' +[11:20:26] Línea 932: '_LD_CONTACT' +[11:20:26] Línea 933: 'gPID_SYR_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 930 +[11:20:26] Detectado Function Block directo: mSyrPIDEn +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 936 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_SYR_Enabled', 'negated': False}, {'type': 'FUNCTION_BLOCK', 'name': 'mSyrPIDEn', 'instance_name': 'mSyrPIDEn', 'inputs': [], 'outputs': []}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 942: 'F_TRIG' +[11:20:26] 🔎 Buscando ENABLELIST en línea 943: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 943 +[11:20:26] Red 15 agregada. Total redes: 15 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Target: 'mSyrONS' +[11:20:26] Procesando red 16... +[11:20:26] Comenzando en línea 957: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 958: '' +[11:20:26] Línea 959: '_COMMENT' +[11:20:26] Línea 960: '' +[11:20:26] Línea 961: '_END_COMMENT' +[11:20:26] Línea 962: '_LD_ASSIGN' +[11:20:26] Línea 963: '_LD_CONTACT' +[11:20:26] Línea 964: 'mSyrONS' +[11:20:26] Línea 965: '_EXPRESSION' +[11:20:26] Línea 966: '_POSITIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 963 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'mSyrONS', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 967: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 968: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 969: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 970: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 971: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 971 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 972 +[11:20:26] 🔎 Línea 972: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 972 +[11:20:26] ✅ Llamada parseada: OPERATOR - MOVE +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 990 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 16: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 998 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 998 +[11:20:26] Entrando a _parse_empty_network desde línea 999 +[11:20:26] Línea 999: '_EXPRESSION' +[11:20:26] Línea 1000: '_POSITIV' +[11:20:26] Línea 1001: '' +[11:20:26] Línea 1002: '' +[11:20:26] Línea 1003: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 1004: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 1004 +[11:20:26] Entrando a _parse_assign_section desde línea 1005 +[11:20:26] Línea 1005: '_OPERATOR' +[11:20:26] Línea 1006: '_BOX_EXPR : 3' +[11:20:26] Línea 1007: '_ENABLED' +[11:20:26] Línea 1008: '_OPERAND' +[11:20:26] Línea 1009: '_EXPRESSION' +[11:20:26] Línea 1010: '_POSITIV' +[11:20:26] Línea 1011: 'gPID_SYR_Enabled' +[11:20:26] Línea 1012: '_OPERAND' +[11:20:26] Línea 1013: '_EXPRESSION' +[11:20:26] Línea 1014: '_POSITIV' +[11:20:26] Línea 1015: '0.0' +[11:20:26] Línea 1016: '_OPERAND' +[11:20:26] Línea 1017: '_EXPRESSION' +[11:20:26] Línea 1018: '_POSITIV' +[11:20:26] Línea 1019: 'gR_Out_SYR_PID' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 1020: '_EXPRESSION' +[11:20:26] Línea 1021: '_POSITIV' +[11:20:26] Línea 1022: 'SEL' +[11:20:26] Línea 1023: '_EXPRESSION' +[11:20:26] Línea 1024: '_POSITIV' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 1025: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 1025 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1042 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1046: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1047: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1048: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1049: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1050: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1050 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1051 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 16: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 16 agregada. Total redes: 16 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mI_Sel_CO2' +[11:20:26] Procesando red 17... +[11:20:26] Comenzando en línea 1057: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1058: '' +[11:20:26] Línea 1059: '_COMMENT' +[11:20:26] Línea 1060: '' +[11:20:26] Línea 1061: '_END_COMMENT' +[11:20:26] Línea 1062: '_LD_ASSIGN' +[11:20:26] Línea 1063: '_LD_CONTACT' +[11:20:26] Línea 1064: 'gAlwaysOff' +[11:20:26] Línea 1065: '_EXPRESSION' +[11:20:26] Línea 1066: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1063 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1067: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1068: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1069: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1070: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1071: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1071 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1072 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 17: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 17 agregada. Total redes: 17 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mP_Sel_CO2' +[11:20:26] Procesando red 18... +[11:20:26] Comenzando en línea 1078: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1079: '' +[11:20:26] Línea 1080: '_COMMENT' +[11:20:26] Línea 1081: '' +[11:20:26] Línea 1082: '_END_COMMENT' +[11:20:26] Línea 1083: '_LD_ASSIGN' +[11:20:26] Línea 1084: '_LD_CONTACT' +[11:20:26] Línea 1085: 'gAlwaysOff' +[11:20:26] Línea 1086: '_EXPRESSION' +[11:20:26] Línea 1087: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1084 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1088: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1089: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1090: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1091: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1092: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1092 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1093 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 18: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 18 agregada. Total redes: 18 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mD_Sel_CO2' +[11:20:26] Procesando red 19... +[11:20:26] Comenzando en línea 1099: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1100: '' +[11:20:26] Línea 1101: '_COMMENT' +[11:20:26] Línea 1102: '' +[11:20:26] Línea 1103: '_END_COMMENT' +[11:20:26] Línea 1104: '_LD_ASSIGN' +[11:20:26] Línea 1105: '_LD_OR' +[11:20:26] Línea 1106: '_LD_OPERATOR : 2' +[11:20:26] Línea 1107: '_LD_AND' +[11:20:26] Línea 1108: '_LD_OPERATOR : 2' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1105 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'AND', 'operands': [{'type': 'OR', 'operands': [{'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderBlending', 'negated': False}, {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gCarboStillProduct', 'negated': False}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_DoubleDeair', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_RemoteInjection', 'negated': True}]}, {'type': 'CONTACT', 'name': 'gP_CarboPipe_En', 'negated': False}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gP_CIP_CO2_Inj', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderCIPMode', 'negated': False}]}]}, {'type': 'CONTACT', 'name': 'gWorkshopTest', 'negated': True}]}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderRun_Latch', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_CMD_BlenderMaintenance', 'negated': False}]}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1169: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1170: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1171: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1172: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1173: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1174: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1175: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1176: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1177: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1177 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1178 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 19: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 19 agregada. Total redes: 19 +[11:20:26] Con lógica: OR - Sin nombre +[11:20:26] Target: 'gPID_CarboCO2_Enabled' +[11:20:26] Procesando red 20... +[11:20:26] Comenzando en línea 1184: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1185: '' +[11:20:26] Línea 1186: '_COMMENT' +[11:20:26] Línea 1187: '' +[11:20:26] Línea 1188: '_END_COMMENT' +[11:20:26] Línea 1189: '_LD_ASSIGN' +[11:20:26] Línea 1190: '_LD_AND' +[11:20:26] Línea 1191: '_LD_OPERATOR : 5' +[11:20:26] Línea 1192: '_LD_CONTACT' +[11:20:26] Línea 1193: 'gPID_CarboCO2_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1190 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_CarboCO2_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderStableFlow', 'negated': True}, {'type': 'CONTACT', 'name': 'gP_CarboPipe_En', 'negated': True}, {'type': 'CONTACT', 'name': 'gBlenderRinse_Running', 'negated': True}, {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1212: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1213: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1214: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1215: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1216: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1217: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1218: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1218 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 1219 +[11:20:26] 🔎 Línea 1219: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 1219 +[11:20:26] ✅ Llamada parseada: OPERATOR - MOVE +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1237 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 20: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1245 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gPID_CarboCO2_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gI_ITL_PID_CO2', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1255: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1256: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1257: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1258: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1259: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1260: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1261: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1261 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 1262 +[11:20:26] 🔎 Línea 1262: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 1262 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - None +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1378 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 20: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1386 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gI_ITL_PID_CO2', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1390: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1391: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1392: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1393: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1394: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1394 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1395 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 20: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 20 agregada. Total redes: 20 +[11:20:26] Con lógica: CONTACT - gI_ITL_PID_CO2 +[11:20:26] Target: 'gI_ITL_PID_CO2' +[11:20:26] Procesando red 21... +[11:20:26] Comenzando en línea 1401: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1402: '' +[11:20:26] Línea 1403: '_COMMENT' +[11:20:26] Línea 1404: '' +[11:20:26] Línea 1405: '_END_COMMENT' +[11:20:26] Línea 1406: '_LD_ASSIGN' +[11:20:26] Línea 1407: '_LD_AND' +[11:20:26] Línea 1408: '_LD_OPERATOR : 2' +[11:20:26] Línea 1409: '_LD_CONTACT' +[11:20:26] Línea 1410: 'gPID_CarboCO2_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1407 +[11:20:26] Detectado Function Block directo: mCO2PIDEn +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 1413 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_CarboCO2_Enabled', 'negated': False}, {'type': 'FUNCTION_BLOCK', 'name': 'mCO2PIDEn', 'instance_name': 'mCO2PIDEn', 'inputs': [], 'outputs': []}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1419: 'F_TRIG' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1420: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 1420 +[11:20:26] Red 21 agregada. Total redes: 21 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Target: 'mCO2ONS' +[11:20:26] Procesando red 22... +[11:20:26] Comenzando en línea 1434: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1435: '' +[11:20:26] Línea 1436: '_COMMENT' +[11:20:26] Línea 1437: '' +[11:20:26] Línea 1438: '_END_COMMENT' +[11:20:26] Línea 1439: '_LD_ASSIGN' +[11:20:26] Línea 1440: '_LD_CONTACT' +[11:20:26] Línea 1441: 'mCO2ONS' +[11:20:26] Línea 1442: '_EXPRESSION' +[11:20:26] Línea 1443: '_POSITIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1440 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'mCO2ONS', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1444: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1445: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1446: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1447: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1448: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1448 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 1449 +[11:20:26] 🔎 Línea 1449: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 1449 +[11:20:26] ✅ Llamada parseada: OPERATOR - MOVE +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1467 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 22: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1475 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 1475 +[11:20:26] Entrando a _parse_empty_network desde línea 1476 +[11:20:26] Línea 1476: '_EXPRESSION' +[11:20:26] Línea 1477: '_POSITIV' +[11:20:26] Línea 1478: '' +[11:20:26] Línea 1479: '' +[11:20:26] Línea 1480: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 1481: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 1481 +[11:20:26] Entrando a _parse_assign_section desde línea 1482 +[11:20:26] Línea 1482: '_OPERATOR' +[11:20:26] Línea 1483: '_BOX_EXPR : 3' +[11:20:26] Línea 1484: '_ENABLED' +[11:20:26] Línea 1485: '_OPERAND' +[11:20:26] Línea 1486: '_EXPRESSION' +[11:20:26] Línea 1487: '_POSITIV' +[11:20:26] Línea 1488: 'gPID_CarboCO2_Enabled' +[11:20:26] Línea 1489: '_OPERAND' +[11:20:26] Línea 1490: '_EXPRESSION' +[11:20:26] Línea 1491: '_POSITIV' +[11:20:26] Línea 1492: '0.0' +[11:20:26] Línea 1493: '_OPERAND' +[11:20:26] Línea 1494: '_EXPRESSION' +[11:20:26] Línea 1495: '_POSITIV' +[11:20:26] Línea 1496: 'gR_Out_CO2_PID' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 1497: '_EXPRESSION' +[11:20:26] Línea 1498: '_POSITIV' +[11:20:26] Línea 1499: 'SEL' +[11:20:26] Línea 1500: '_EXPRESSION' +[11:20:26] Línea 1501: '_POSITIV' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 1502: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 1502 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1519 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 1519 +[11:20:26] Entrando a _parse_empty_network desde línea 1520 +[11:20:26] Línea 1520: '_EXPRESSION' +[11:20:26] Línea 1521: '_POSITIV' +[11:20:26] Línea 1522: '' +[11:20:26] Línea 1523: '' +[11:20:26] Línea 1524: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 1525: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 1525 +[11:20:26] Entrando a _parse_assign_section desde línea 1526 +[11:20:26] Línea 1526: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 1526 +[11:20:26] Detectado Function Block directo: _FBD_PROGRAM +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 1526 +[11:20:26] Línea 1532: 'Blender_PID_Ctrl_Loop.PIDMonitor' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 23 creada para FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': '_FBD_PROGRAM', 'instance_name': '_FBD_PROGRAM', 'inputs': [], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1533: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 1533 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1549 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 1549 +[11:20:26] Entrando a _parse_empty_network desde línea 1550 +[11:20:26] Línea 1550: '_EXPRESSION' +[11:20:26] Línea 1551: '_POSITIV' +[11:20:26] Línea 1552: '' +[11:20:26] Línea 1553: '' +[11:20:26] Línea 1554: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 1555: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 1555 +[11:20:26] Entrando a _parse_assign_section desde línea 1556 +[11:20:26] Línea 1556: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 1556 +[11:20:26] Detectado Function Block directo: _FBD_PROGRAM +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 1556 +[11:20:26] Línea 1562: 'Blender_PID_Ctrl_Loop.SaveIntegral' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 24 creada para FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': '_FBD_PROGRAM', 'instance_name': '_FBD_PROGRAM', 'inputs': [], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1563: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 1563 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1579 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1583: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1584: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1585: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1586: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1587: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1587 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1588 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 22: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 22 agregada. Total redes: 24 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mI_Sel_PressCO2' +[11:20:26] Procesando red 25... +[11:20:26] Comenzando en línea 1594: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1595: '' +[11:20:26] Línea 1596: '_COMMENT' +[11:20:26] Línea 1597: '' +[11:20:26] Línea 1598: '_END_COMMENT' +[11:20:26] Línea 1599: '_LD_ASSIGN' +[11:20:26] Línea 1600: '_LD_CONTACT' +[11:20:26] Línea 1601: 'gAlwaysOff' +[11:20:26] Línea 1602: '_EXPRESSION' +[11:20:26] Línea 1603: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1600 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1604: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1605: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1606: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1607: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1608: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1608 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1609 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 25: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 25 agregada. Total redes: 25 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mP_Sel_PressCO2' +[11:20:26] Procesando red 26... +[11:20:26] Comenzando en línea 1615: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1616: '' +[11:20:26] Línea 1617: '_COMMENT' +[11:20:26] Línea 1618: '' +[11:20:26] Línea 1619: '_END_COMMENT' +[11:20:26] Línea 1620: '_LD_ASSIGN' +[11:20:26] Línea 1621: '_LD_CONTACT' +[11:20:26] Línea 1622: 'gAlwaysOff' +[11:20:26] Línea 1623: '_EXPRESSION' +[11:20:26] Línea 1624: '_POSITIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1621 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1625: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1626: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1627: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1628: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1629: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1629 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1630 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 26: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 26 agregada. Total redes: 26 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mD_Sel_PressCO2' +[11:20:26] Procesando red 27... +[11:20:26] Comenzando en línea 1636: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1637: '' +[11:20:26] Línea 1638: '_COMMENT' +[11:20:26] Línea 1639: '' +[11:20:26] Línea 1640: '_END_COMMENT' +[11:20:26] Línea 1641: '_LD_ASSIGN' +[11:20:26] Línea 1642: '_EMPTY' +[11:20:26] Línea 1643: '_EXPRESSION' +[11:20:26] Línea 1644: '_POSITIV' +[11:20:26] Línea 1645: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1642 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 1642 +[11:20:26] Entrando a _parse_empty_network desde línea 1643 +[11:20:26] Línea 1643: '_EXPRESSION' +[11:20:26] Línea 1644: '_POSITIV' +[11:20:26] Línea 1645: '' +[11:20:26] Línea 1646: '' +[11:20:26] Línea 1647: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 1648: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 1648 +[11:20:26] Entrando a _parse_assign_section desde línea 1649 +[11:20:26] Línea 1649: '_OPERATOR' +[11:20:26] Línea 1650: '_BOX_EXPR : 1' +[11:20:26] Línea 1651: '_ENABLED' +[11:20:26] Línea 1652: '_OPERAND' +[11:20:26] Línea 1653: '_EXPRESSION' +[11:20:26] Línea 1654: '_POSITIV' +[11:20:26] Línea 1655: '40' +[11:20:26] Línea 1656: '_EXPRESSION' +[11:20:26] Línea 1657: '_POSITIV' +[11:20:26] Línea 1658: 'MOVE' +[11:20:26] Línea 1659: '_EXPRESSION' +[11:20:26] Línea 1660: '_POSITIV' +[11:20:26] Línea 1661: '_OUTPUTS : 1' +[11:20:26] Línea 1662: '_OUTPUT' +[11:20:26] Línea 1663: '_POSITIV' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 1664: '_NO_SET' +[11:20:26] Línea 1665: 'gR_PressCO2_TI' +[11:20:26] Línea 1666: 'ENABLELIST_END' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 1667: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 1667 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1674 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gProdTankPress_Running', 'negated': False}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gManual_PID_PressCO2', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderCIPMode', 'negated': True}]}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1690: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1691: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1692: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1693: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1694: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1695: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1696: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1697: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1698: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1698 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1699 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 27: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 27 agregada. Total redes: 27 +[11:20:26] Con lógica: OR - Sin nombre +[11:20:26] Target: 'gPID_PressCO2_Enabled' +[11:20:26] Procesando red 28... +[11:20:26] Comenzando en línea 1705: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1706: '' +[11:20:26] Línea 1707: '_COMMENT' +[11:20:26] Línea 1708: '' +[11:20:26] Línea 1709: '_END_COMMENT' +[11:20:26] Línea 1710: '_LD_ASSIGN' +[11:20:26] Línea 1711: '_LD_OR' +[11:20:26] Línea 1712: '_LD_OPERATOR : 2' +[11:20:26] Línea 1713: '_LD_CONTACT' +[11:20:26] Línea 1714: 'gPID_PressCO2_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1711 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gPID_PressCO2_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gI_ITL_PID_PressCO2', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1721: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1722: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1723: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1724: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1725: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1726: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1727: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1727 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 1728 +[11:20:26] 🔎 Línea 1728: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 1728 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - gP_LimitCO2PressValve +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1866 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 28: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1874 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gI_ITL_PID_PressCO2', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1878: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1879: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1880: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1881: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1882: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1882 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1883 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 28: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 28 agregada. Total redes: 28 +[11:20:26] Con lógica: CONTACT - gI_ITL_PID_PressCO2 +[11:20:26] Target: 'gI_ITL_PID_PressCO2' +[11:20:26] Procesando red 29... +[11:20:26] Comenzando en línea 1889: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1890: '' +[11:20:26] Línea 1891: '_COMMENT' +[11:20:26] Línea 1892: '' +[11:20:26] Línea 1893: '_END_COMMENT' +[11:20:26] Línea 1894: '_LD_ASSIGN' +[11:20:26] Línea 1895: '_EMPTY' +[11:20:26] Línea 1896: '_EXPRESSION' +[11:20:26] Línea 1897: '_POSITIV' +[11:20:26] Línea 1898: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1895 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 1895 +[11:20:26] Entrando a _parse_empty_network desde línea 1896 +[11:20:26] Línea 1896: '_EXPRESSION' +[11:20:26] Línea 1897: '_POSITIV' +[11:20:26] Línea 1898: '' +[11:20:26] Línea 1899: '' +[11:20:26] Línea 1900: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 1901: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 1901 +[11:20:26] Entrando a _parse_assign_section desde línea 1902 +[11:20:26] Línea 1902: '_OPERATOR' +[11:20:26] Línea 1903: '_BOX_EXPR : 3' +[11:20:26] Línea 1904: '_ENABLED' +[11:20:26] Línea 1905: '_OPERAND' +[11:20:26] Línea 1906: '_EXPRESSION' +[11:20:26] Línea 1907: '_POSITIV' +[11:20:26] Línea 1908: 'gPID_PressCO2_Enabled' +[11:20:26] Línea 1909: '_OPERAND' +[11:20:26] Línea 1910: '_EXPRESSION' +[11:20:26] Línea 1911: '_POSITIV' +[11:20:26] Línea 1912: '0.0' +[11:20:26] Línea 1913: '_OPERAND' +[11:20:26] Línea 1914: '_EXPRESSION' +[11:20:26] Línea 1915: '_POSITIV' +[11:20:26] Línea 1916: 'gR_Out_PressCO2_PID' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 1917: '_EXPRESSION' +[11:20:26] Línea 1918: '_POSITIV' +[11:20:26] Línea 1919: 'SEL' +[11:20:26] Línea 1920: '_EXPRESSION' +[11:20:26] Línea 1921: '_POSITIV' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 1922: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 1922 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1939 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 1939 +[11:20:26] Entrando a _parse_empty_network desde línea 1940 +[11:20:26] Línea 1940: '_EXPRESSION' +[11:20:26] Línea 1941: '_POSITIV' +[11:20:26] Línea 1942: '' +[11:20:26] Línea 1943: '' +[11:20:26] Línea 1944: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 1945: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 1945 +[11:20:26] Entrando a _parse_assign_section desde línea 1946 +[11:20:26] Línea 1946: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 1946 +[11:20:26] Detectado Function Block directo: _FBD_PROGRAM +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 1946 +[11:20:26] Línea 1952: 'Blender_PID_Ctrl_Loop.PressureRelease' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 30 creada para FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': '_FBD_PROGRAM', 'instance_name': '_FBD_PROGRAM', 'inputs': [], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1953: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 1953 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1969 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1973: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1974: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1975: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1976: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1977: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1977 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1978 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 29: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 29 agregada. Total redes: 30 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mI_Sel_SYRLevel' +[11:20:26] Procesando red 31... +[11:20:26] Comenzando en línea 1984: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 1985: '' +[11:20:26] Línea 1986: '_COMMENT' +[11:20:26] Línea 1987: '' +[11:20:26] Línea 1988: '_END_COMMENT' +[11:20:26] Línea 1989: '_LD_ASSIGN' +[11:20:26] Línea 1990: '_LD_CONTACT' +[11:20:26] Línea 1991: 'gAlwaysOff' +[11:20:26] Línea 1992: '_EXPRESSION' +[11:20:26] Línea 1993: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 1990 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 1994: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1995: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1996: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1997: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 1998: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 1998 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 1999 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 31: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 31 agregada. Total redes: 31 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mP_Sel_SYRLevel' +[11:20:26] Procesando red 32... +[11:20:26] Comenzando en línea 2005: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2006: '' +[11:20:26] Línea 2007: '_COMMENT' +[11:20:26] Línea 2008: '' +[11:20:26] Línea 2009: '_END_COMMENT' +[11:20:26] Línea 2010: '_LD_ASSIGN' +[11:20:26] Línea 2011: '_LD_CONTACT' +[11:20:26] Línea 2012: 'gAlwaysOff' +[11:20:26] Línea 2013: '_EXPRESSION' +[11:20:26] Línea 2014: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2011 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2015: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2016: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2017: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2018: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2019: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2019 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2020 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 32: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 32 agregada. Total redes: 32 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mD_Sel_SYRLevel' +[11:20:26] Procesando red 33... +[11:20:26] Comenzando en línea 2026: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2027: '' +[11:20:26] Línea 2028: '_COMMENT' +[11:20:26] Línea 2029: '' +[11:20:26] Línea 2030: '_END_COMMENT' +[11:20:26] Línea 2031: '_LD_ASSIGN' +[11:20:26] Línea 2032: '_LD_OR' +[11:20:26] Línea 2033: '_LD_OPERATOR : 4' +[11:20:26] Línea 2034: '_LD_AND' +[11:20:26] Línea 2035: '_LD_OPERATOR : 2' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2032 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'AND', 'operands': [{'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderCIPMode', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderRinseMode', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gCIPSyrupStopLevel', 'negated': True}]}, {'type': 'AND', 'operands': [{'type': 'OR', 'operands': [{'type': 'AND', 'operands': [{'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gSyrRunOut_Latch', 'negated': False}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gFirstProd_Latch', 'negated': False}, {'type': 'CONTACT', 'name': 'gSyrLineMFMPrep_Done', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gFastChangeOverActivated', 'negated': True}]}, {'type': 'CONTACT', 'name': 'gBlenderRun_Latch', 'negated': False}]}, {'type': 'AND', 'operands': [{'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gSyrLineMFMPrep_Running', 'negated': False}, {'type': 'CONTACT', 'name': 'gSyrMFMStartUp_Running', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gInSyrRoomOk', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gSyrupTankLoading', 'negated': False}, {'type': 'CONTACT', 'name': 'gProdPipeRunOut_Running', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gWaterRecipe', 'negated': True}, {'type': 'CONTACT', 'name': 'gBlenderProdMode', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderRinseMode', 'negated': True}]}, {'type': 'CONTACT', 'name': 'gP_EV03', 'negated': False}, {'type': 'CONTACT', 'name': 'gManual_PID_SYR_Level', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2142: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2143: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2144: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2145: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2146: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2147: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2148: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2148 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2149 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 33: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 33 agregada. Total redes: 33 +[11:20:26] Con lógica: OR - Sin nombre +[11:20:26] Target: 'gPID_SYRLevel_Enabled' +[11:20:26] Procesando red 34... +[11:20:26] Comenzando en línea 2155: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2156: '' +[11:20:26] Línea 2157: '_COMMENT' +[11:20:26] Línea 2158: '' +[11:20:26] Línea 2159: '_END_COMMENT' +[11:20:26] Línea 2160: '_LD_ASSIGN' +[11:20:26] Línea 2161: '_LD_AND' +[11:20:26] Línea 2162: '_LD_OPERATOR : 3' +[11:20:26] Línea 2163: '_LD_CONTACT' +[11:20:26] Línea 2164: 'gPID_SYRLevel_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2161 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_SYRLevel_Enabled', 'negated': False}, {'type': 'OR', 'operands': [{'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gSyrLineMFMPrep_Running', 'negated': True}, {'type': 'CONTACT', 'name': 'gSyrMFMStartUp_Running', 'negated': True}, {'type': 'CONTACT', 'name': 'gBlenderRun_Running', 'negated': True}]}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderCIPMode', 'negated': False}, {'type': 'CONTACT', 'name': 'gBlenderRun_Wait', 'negated': False}]}]}, {'type': 'CONTACT', 'name': 'gProdPipeRunOut_Running', 'negated': True}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2203: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2204: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2205: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2206: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2207: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2208: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2209: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2209 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 2210 +[11:20:26] 🔎 Línea 2210: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 2210 +[11:20:26] ✅ Llamada parseada: OPERATOR - MOVE +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2228 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 34: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2236 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gPID_SYRLevel_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gI_ITL_PID_SYR_Level', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2246: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2247: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2248: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2249: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2250: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2251: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2252: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2252 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 2253 +[11:20:26] 🔎 Línea 2253: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 2253 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - None +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2369 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 34: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2377 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gI_ITL_PID_SYR_Level', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2381: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2382: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2383: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2384: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2385: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2385 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2386 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 34: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 34 agregada. Total redes: 34 +[11:20:26] Con lógica: CONTACT - gI_ITL_PID_SYR_Level +[11:20:26] Target: 'gI_ITL_PID_SYR_Level' +[11:20:26] Procesando red 35... +[11:20:26] Comenzando en línea 2392: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2393: '' +[11:20:26] Línea 2394: '_COMMENT' +[11:20:26] Línea 2395: '' +[11:20:26] Línea 2396: '_END_COMMENT' +[11:20:26] Línea 2397: '_LD_ASSIGN' +[11:20:26] Línea 2398: '_EMPTY' +[11:20:26] Línea 2399: '_EXPRESSION' +[11:20:26] Línea 2400: '_POSITIV' +[11:20:26] Línea 2401: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2398 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 2398 +[11:20:26] Entrando a _parse_empty_network desde línea 2399 +[11:20:26] Línea 2399: '_EXPRESSION' +[11:20:26] Línea 2400: '_POSITIV' +[11:20:26] Línea 2401: '' +[11:20:26] Línea 2402: '' +[11:20:26] Línea 2403: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 2404: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 2404 +[11:20:26] Entrando a _parse_assign_section desde línea 2405 +[11:20:26] Línea 2405: '_OPERATOR' +[11:20:26] Línea 2406: '_BOX_EXPR : 2' +[11:20:26] Línea 2407: '_ENABLED' +[11:20:26] Línea 2408: '_OPERAND' +[11:20:26] Línea 2409: '_EXPRESSION' +[11:20:26] Línea 2410: '_POSITIV' +[11:20:26] Línea 2411: 'gSyrupTankLevel' +[11:20:26] Línea 2412: '_OPERATOR' +[11:20:26] Línea 2413: '_BOX_EXPR : 3' +[11:20:26] Línea 2414: '_OPERAND' +[11:20:26] Línea 2415: '_EXPRESSION' +[11:20:26] Línea 2416: '_POSITIV' +[11:20:26] Línea 2417: 'gSyrRunOut_Latch' +[11:20:26] Línea 2418: '_OPERAND' +[11:20:26] Línea 2419: '_EXPRESSION' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 2420: '_POSITIV' +[11:20:26] Línea 2421: '85' +[11:20:26] Línea 2422: '_OPERAND' +[11:20:26] Línea 2423: '_EXPRESSION' +[11:20:26] Línea 2424: '_POSITIV' +[11:20:26] Línea 2425: '15' +[11:20:26] Línea 2426: '_EXPRESSION' +[11:20:26] Línea 2427: '_POSITIV' +[11:20:26] Línea 2428: 'SEL' +[11:20:26] Línea 2429: '_EXPRESSION' +[11:20:26] Línea 2430: '_POSITIV' +[11:20:26] Línea 2431: 'GT' +[11:20:26] Línea 2432: '_EXPRESSION' +[11:20:26] Línea 2433: '_POSITIV' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 2434: '_OUTPUTS : 1' +[11:20:26] 📤 Sección de outputs encontrada en línea 2434 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2447 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 2447 +[11:20:26] Entrando a _parse_empty_network desde línea 2448 +[11:20:26] Línea 2448: '_EXPRESSION' +[11:20:26] Línea 2449: '_POSITIV' +[11:20:26] Línea 2450: '' +[11:20:26] Línea 2451: '' +[11:20:26] Línea 2452: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 2453: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 2453 +[11:20:26] Entrando a _parse_assign_section desde línea 2454 +[11:20:26] Línea 2454: '_OPERATOR' +[11:20:26] Línea 2455: '_BOX_EXPR : 3' +[11:20:26] Línea 2456: '_ENABLED' +[11:20:26] Línea 2457: '_OPERATOR' +[11:20:26] Línea 2458: '_BOX_EXPR : 2' +[11:20:26] Línea 2459: '_OPERAND' +[11:20:26] Línea 2460: '_EXPRESSION' +[11:20:26] Línea 2461: '_POSITIV' +[11:20:26] Línea 2462: 'gPID_SYRLevel_Enabled' +[11:20:26] Línea 2463: '_OPERATOR' +[11:20:26] Línea 2464: '_BOX_EXPR : 3' +[11:20:26] Línea 2465: '_OPERAND' +[11:20:26] Línea 2466: '_EXPRESSION' +[11:20:26] Línea 2467: '_NEGATIV' +[11:20:26] Línea 2468: 'mMaxSyrLevelAnalog' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 2469: '_OPERAND' +[11:20:26] Línea 2470: '_EXPRESSION' +[11:20:26] Línea 2471: '_POSITIV' +[11:20:26] Línea 2472: 'gManual_PID_SYR_Level' +[11:20:26] Línea 2473: '_OPERAND' +[11:20:26] Línea 2474: '_EXPRESSION' +[11:20:26] Línea 2475: '_POSITIV' +[11:20:26] Línea 2476: 'gBlenderCIPMode' +[11:20:26] Línea 2477: '_EXPRESSION' +[11:20:26] Línea 2478: '_POSITIV' +[11:20:26] Línea 2479: 'OR' +[11:20:26] Línea 2480: '_EXPRESSION' +[11:20:26] Línea 2481: '_POSITIV' +[11:20:26] Línea 2482: 'AND' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 2483: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2484: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2485: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2486: '0.0' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2487: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2488: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2489: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2490: 'gR_Out_SYR_Level_PID' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2491: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2492: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2493: 'SEL' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2494: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2495: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2496: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 2496 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2513 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2517: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2518: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2519: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2520: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2521: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2521 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2522 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 35: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 35 agregada. Total redes: 35 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mI_Sel_WaterTemp' +[11:20:26] Procesando red 36... +[11:20:26] Comenzando en línea 2528: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2529: '' +[11:20:26] Línea 2530: '_COMMENT' +[11:20:26] Línea 2531: '' +[11:20:26] Línea 2532: '_END_COMMENT' +[11:20:26] Línea 2533: '_LD_ASSIGN' +[11:20:26] Línea 2534: '_LD_CONTACT' +[11:20:26] Línea 2535: 'gAlwaysOff' +[11:20:26] Línea 2536: '_EXPRESSION' +[11:20:26] Línea 2537: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2534 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2538: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2539: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2540: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2541: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2542: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2542 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2543 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 36: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 36 agregada. Total redes: 36 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mP_Sel_WaterTemp' +[11:20:26] Procesando red 37... +[11:20:26] Comenzando en línea 2549: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2550: '' +[11:20:26] Línea 2551: '_COMMENT' +[11:20:26] Línea 2552: '' +[11:20:26] Línea 2553: '_END_COMMENT' +[11:20:26] Línea 2554: '_LD_ASSIGN' +[11:20:26] Línea 2555: '_LD_CONTACT' +[11:20:26] Línea 2556: 'gAlwaysOff' +[11:20:26] Línea 2557: '_EXPRESSION' +[11:20:26] Línea 2558: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2555 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2559: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2560: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2561: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2562: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2563: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2563 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2564 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 37: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 37 agregada. Total redes: 37 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mD_Sel_waterTemp' +[11:20:26] Procesando red 38... +[11:20:26] Comenzando en línea 2570: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2571: '' +[11:20:26] Línea 2572: '_COMMENT' +[11:20:26] Línea 2573: '' +[11:20:26] Línea 2574: '_END_COMMENT' +[11:20:26] Línea 2575: '_LD_ASSIGN' +[11:20:26] Línea 2576: '_EMPTY' +[11:20:26] Línea 2577: '_EXPRESSION' +[11:20:26] Línea 2578: '_POSITIV' +[11:20:26] Línea 2579: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2576 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 2576 +[11:20:26] Entrando a _parse_empty_network desde línea 2577 +[11:20:26] Línea 2577: '_EXPRESSION' +[11:20:26] Línea 2578: '_POSITIV' +[11:20:26] Línea 2579: '' +[11:20:26] Línea 2580: '' +[11:20:26] Línea 2581: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 2582: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 2582 +[11:20:26] Entrando a _parse_assign_section desde línea 2583 +[11:20:26] Línea 2583: '_OPERATOR' +[11:20:26] Línea 2584: '_BOX_EXPR : 2' +[11:20:26] Línea 2585: '_ENABLED' +[11:20:26] Línea 2586: '_OPERATOR' +[11:20:26] Línea 2587: '_BOX_EXPR : 4' +[11:20:26] Línea 2588: '_OPERATOR' +[11:20:26] Línea 2589: '_BOX_EXPR : 4' +[11:20:26] Línea 2590: '_OPERAND' +[11:20:26] Línea 2591: '_EXPRESSION' +[11:20:26] Línea 2592: '_POSITIV' +[11:20:26] Línea 2593: 'gBlenderBlending' +[11:20:26] Línea 2594: '_OPERAND' +[11:20:26] Línea 2595: '_EXPRESSION' +[11:20:26] Línea 2596: '_POSITIV' +[11:20:26] Línea 2597: 'gCarboWaterLine_Running' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 2598: '_OPERATOR' +[11:20:26] Línea 2599: '_BOX_EXPR : 2' +[11:20:26] Línea 2600: '_OPERAND' +[11:20:26] Línea 2601: '_EXPRESSION' +[11:20:26] Línea 2602: '_POSITIV' +[11:20:26] Línea 2603: 'gH_ColdRinseRun' +[11:20:26] Línea 2604: '_OPERAND' +[11:20:26] Línea 2605: '_EXPRESSION' +[11:20:26] Línea 2606: '_POSITIV' +[11:20:26] Línea 2607: 'gBlenderRinse_Running' +[11:20:26] Línea 2608: '_EXPRESSION' +[11:20:26] Línea 2609: '_POSITIV' +[11:20:26] Línea 2610: 'AND' +[11:20:26] Línea 2611: '_OPERAND' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 2612: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2613: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2614: 'gManual_PID_TempWater' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2615: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2616: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2617: 'OR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2618: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2619: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2620: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2621: 'gWaterChillerEn' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2622: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2623: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2624: '_NEGATIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2625: 'gBlenderCIPMode' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2626: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2627: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2628: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2629: 'gCoolerEnabled' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2630: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2631: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2632: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2633: '_OPERATOR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2634: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2635: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2636: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2637: '_NEGATIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2638: 'gBlenderRun_Latch' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2639: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2640: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2641: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2642: 'gH_CMD_BlenderMaintenance' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2643: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2644: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2645: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2646: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2647: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2648: 'OR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2649: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2650: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2651: '_OUTPUTS : 1' +[11:20:26] 📤 Sección de outputs encontrada en línea 2651 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2664 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 2664 +[11:20:26] Entrando a _parse_empty_network desde línea 2665 +[11:20:26] Línea 2665: '_EXPRESSION' +[11:20:26] Línea 2666: '_POSITIV' +[11:20:26] Línea 2667: '' +[11:20:26] Línea 2668: '' +[11:20:26] Línea 2669: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 2670: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 2670 +[11:20:26] Entrando a _parse_assign_section desde línea 2671 +[11:20:26] Línea 2671: '_OPERATOR' +[11:20:26] Línea 2672: '_BOX_EXPR : 3' +[11:20:26] Línea 2673: '_ENABLED' +[11:20:26] Línea 2674: '_OPERATOR' +[11:20:26] Línea 2675: '_BOX_EXPR : 2' +[11:20:26] Línea 2676: '_OPERATOR' +[11:20:26] Línea 2677: '_BOX_EXPR : 4' +[11:20:26] Línea 2678: '_OPERAND' +[11:20:26] Línea 2679: '_EXPRESSION' +[11:20:26] Línea 2680: '_POSITIV' +[11:20:26] Línea 2681: 'gPID_WaterTemp_Enabled' +[11:20:26] Línea 2682: '_OPERAND' +[11:20:26] Línea 2683: '_EXPRESSION' +[11:20:26] Línea 2684: '_NEGATIV' +[11:20:26] Línea 2685: 'gBlenderEnToRamp' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 2686: '_OPERAND' +[11:20:26] Línea 2687: '_EXPRESSION' +[11:20:26] Línea 2688: '_NEGATIV' +[11:20:26] Línea 2689: 'gCarboWaterLine_Running' +[11:20:26] Línea 2690: '_OPERAND' +[11:20:26] Línea 2691: '_EXPRESSION' +[11:20:26] Línea 2692: '_NEGATIV' +[11:20:26] Línea 2693: 'gBlenderRinse_Running' +[11:20:26] Línea 2694: '_EXPRESSION' +[11:20:26] Línea 2695: '_POSITIV' +[11:20:26] Línea 2696: 'AND' +[11:20:26] Línea 2697: '_OPERATOR' +[11:20:26] Línea 2698: '_BOX_EXPR : 2' +[11:20:26] Línea 2699: '_OPERAND' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 2700: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2701: '_NEGATIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2702: 'gBlenderRun_Latch' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2703: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2704: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2705: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2706: 'gH_CMD_BlenderMaintenance' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2707: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2708: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2709: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2710: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2711: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2712: 'OR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2713: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2714: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2715: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2716: 'gR_TempWater_SP' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2717: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2718: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2719: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2720: 'gTempWater_PV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2721: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2722: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2723: 'SEL' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2724: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2725: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2726: '_OUTPUTS : 1' +[11:20:26] 📤 Sección de outputs encontrada en línea 2726 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2739 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_WaterTemp_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gPID_WaterTemp_EnInt', 'negated': True}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2749: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2750: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2751: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2752: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2753: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2754: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2755: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2755 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2756 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 38: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 38 agregada. Total redes: 38 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Target: 'gHold_int_PID_TempWater' +[11:20:26] Procesando red 39... +[11:20:26] Comenzando en línea 2762: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2763: '' +[11:20:26] Línea 2764: '_COMMENT' +[11:20:26] Línea 2765: '' +[11:20:26] Línea 2766: '_END_COMMENT' +[11:20:26] Línea 2767: '_LD_ASSIGN' +[11:20:26] Línea 2768: '_LD_OR' +[11:20:26] Línea 2769: '_LD_OPERATOR : 2' +[11:20:26] Línea 2770: '_LD_CONTACT' +[11:20:26] Línea 2771: 'gPID_WaterTemp_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2768 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gPID_WaterTemp_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gI_ITL_PID_TempWater', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2778: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2779: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2780: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2781: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2782: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2783: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2784: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2784 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 2785 +[11:20:26] 🔎 Línea 2785: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 2785 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - gH_ProdTempValve_Man_SP_ON +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2914 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 39: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2922 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gI_ITL_PID_TempWater', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 2926: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2927: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2928: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2929: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2930: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 2930 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 2931 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 39: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 39 agregada. Total redes: 39 +[11:20:26] Con lógica: CONTACT - gI_ITL_PID_TempWater +[11:20:26] Target: 'gI_ITL_PID_TempWater' +[11:20:26] Procesando red 40... +[11:20:26] Comenzando en línea 2937: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 2938: '' +[11:20:26] Línea 2939: '_COMMENT' +[11:20:26] Línea 2940: '' +[11:20:26] Línea 2941: '_END_COMMENT' +[11:20:26] Línea 2942: '_LD_ASSIGN' +[11:20:26] Línea 2943: '_EMPTY' +[11:20:26] Línea 2944: '_EXPRESSION' +[11:20:26] Línea 2945: '_POSITIV' +[11:20:26] Línea 2946: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 2943 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 2943 +[11:20:26] Entrando a _parse_empty_network desde línea 2944 +[11:20:26] Línea 2944: '_EXPRESSION' +[11:20:26] Línea 2945: '_POSITIV' +[11:20:26] Línea 2946: '' +[11:20:26] Línea 2947: '' +[11:20:26] Línea 2948: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 2949: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 2949 +[11:20:26] Entrando a _parse_assign_section desde línea 2950 +[11:20:26] Línea 2950: '_OPERATOR' +[11:20:26] Línea 2951: '_BOX_EXPR : 3' +[11:20:26] Línea 2952: '_ENABLED' +[11:20:26] Línea 2953: '_OPERAND' +[11:20:26] Línea 2954: '_EXPRESSION' +[11:20:26] Línea 2955: '_POSITIV' +[11:20:26] Línea 2956: 'gPID_WaterTemp_Enabled' +[11:20:26] Línea 2957: '_OPERATOR' +[11:20:26] Línea 2958: '_BOX_EXPR : 3' +[11:20:26] Línea 2959: '_OPERATOR' +[11:20:26] Línea 2960: '_BOX_EXPR : 3' +[11:20:26] Línea 2961: '_OPERAND' +[11:20:26] Línea 2962: '_EXPRESSION' +[11:20:26] Línea 2963: '_POSITIV' +[11:20:26] Línea 2964: 'gGencoldChillerEn' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 2965: '_OPERATOR' +[11:20:26] Línea 2966: '_BOX_EXPR : 2' +[11:20:26] Línea 2967: '_OPERAND' +[11:20:26] Línea 2968: '_EXPRESSION' +[11:20:26] Línea 2969: '_POSITIV' +[11:20:26] Línea 2970: 'gBlenderCIPMode' +[11:20:26] Línea 2971: '_OPERAND' +[11:20:26] Línea 2972: '_EXPRESSION' +[11:20:26] Línea 2973: '_POSITIV' +[11:20:26] Línea 2974: 'gH_WarmRinseRun' +[11:20:26] Línea 2975: '_EXPRESSION' +[11:20:26] Línea 2976: '_POSITIV' +[11:20:26] Línea 2977: 'OR' +[11:20:26] Línea 2978: '_OPERAND' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 2979: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2980: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2981: 'gCoolerEnabled' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2982: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2983: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2984: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2985: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2986: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2987: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2988: '0.0' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2989: '_FUNCTION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2990: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2991: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2992: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2993: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2994: 'gDeairWaterTemp' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2995: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2996: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2997: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2998: 'gTempWater_PV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 2999: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3000: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3001: 'CIP_CVQ' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3002: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3003: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3004: 'SEL' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3005: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3006: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3007: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3008: 'gR_Out_TempWater_PID' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3009: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3010: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3011: 'SEL' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3012: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3013: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3014: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 3014 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3031 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3035: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3036: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3037: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3038: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3039: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3039 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3040 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 40: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 40 agregada. Total redes: 40 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mI_Sel_ProdTemp' +[11:20:26] Procesando red 41... +[11:20:26] Comenzando en línea 3046: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3047: '' +[11:20:26] Línea 3048: '_COMMENT' +[11:20:26] Línea 3049: '' +[11:20:26] Línea 3050: '_END_COMMENT' +[11:20:26] Línea 3051: '_LD_ASSIGN' +[11:20:26] Línea 3052: '_LD_CONTACT' +[11:20:26] Línea 3053: 'gAlwaysOff' +[11:20:26] Línea 3054: '_EXPRESSION' +[11:20:26] Línea 3055: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3052 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3056: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3057: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3058: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3059: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3060: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3060 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3061 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 41: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 41 agregada. Total redes: 41 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mP_Sel_ProdTemp' +[11:20:26] Procesando red 42... +[11:20:26] Comenzando en línea 3067: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3068: '' +[11:20:26] Línea 3069: '_COMMENT' +[11:20:26] Línea 3070: '' +[11:20:26] Línea 3071: '_END_COMMENT' +[11:20:26] Línea 3072: '_LD_ASSIGN' +[11:20:26] Línea 3073: '_LD_CONTACT' +[11:20:26] Línea 3074: 'gAlwaysOff' +[11:20:26] Línea 3075: '_EXPRESSION' +[11:20:26] Línea 3076: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3073 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3077: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3078: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3079: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3080: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3081: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3081 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3082 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 42: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 42 agregada. Total redes: 42 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mD_Sel_ProdTemp' +[11:20:26] Procesando red 43... +[11:20:26] Comenzando en línea 3088: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3089: '' +[11:20:26] Línea 3090: '_COMMENT' +[11:20:26] Línea 3091: '' +[11:20:26] Línea 3092: '_END_COMMENT' +[11:20:26] Línea 3093: '_LD_ASSIGN' +[11:20:26] Línea 3094: '_EMPTY' +[11:20:26] Línea 3095: '_EXPRESSION' +[11:20:26] Línea 3096: '_POSITIV' +[11:20:26] Línea 3097: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3094 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 3094 +[11:20:26] Entrando a _parse_empty_network desde línea 3095 +[11:20:26] Línea 3095: '_EXPRESSION' +[11:20:26] Línea 3096: '_POSITIV' +[11:20:26] Línea 3097: '' +[11:20:26] Línea 3098: '' +[11:20:26] Línea 3099: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 3100: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 3100 +[11:20:26] Entrando a _parse_assign_section desde línea 3101 +[11:20:26] Línea 3101: '_OPERATOR' +[11:20:26] Línea 3102: '_BOX_EXPR : 2' +[11:20:26] Línea 3103: '_ENABLED' +[11:20:26] Línea 3104: '_OPERATOR' +[11:20:26] Línea 3105: '_BOX_EXPR : 4' +[11:20:26] Línea 3106: '_OPERAND' +[11:20:26] Línea 3107: '_EXPRESSION' +[11:20:26] Línea 3108: '_NEGATIV' +[11:20:26] Línea 3109: 'gBlenderCIPMode' +[11:20:26] Línea 3110: '_OPERATOR' +[11:20:26] Línea 3111: '_BOX_EXPR : 2' +[11:20:26] Línea 3112: '_OPERATOR' +[11:20:26] Línea 3113: '_BOX_EXPR : 3' +[11:20:26] Línea 3114: '_OPERAND' +[11:20:26] Línea 3115: '_EXPRESSION' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 3116: '_POSITIV' +[11:20:26] Línea 3117: 'gBlenderProdMode' +[11:20:26] Línea 3118: '_OPERATOR' +[11:20:26] Línea 3119: '_BOX_EXPR : 4' +[11:20:26] Línea 3120: '_OPERAND' +[11:20:26] Línea 3121: '_EXPRESSION' +[11:20:26] Línea 3122: '_POSITIV' +[11:20:26] Línea 3123: 'gBlenderRun_Running' +[11:20:26] Línea 3124: '_OPERATOR' +[11:20:26] Línea 3125: '_BOX_EXPR : 2' +[11:20:26] Línea 3126: '_OPERAND' +[11:20:26] Línea 3127: '_EXPRESSION' +[11:20:26] Línea 3128: '_POSITIV' +[11:20:26] Línea 3129: 'gBlenderRun_Latch' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 3130: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3131: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3132: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3133: 'gEnableRecircPHE' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3134: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3135: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3136: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3137: '_OPERATOR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3138: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3139: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3140: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3141: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3142: 'gH_ColdRinseRun' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3143: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3144: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3145: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3146: 'gBlenderRinse_Running' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3147: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3148: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3149: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3150: '_OPERATOR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3151: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3152: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3153: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3154: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3155: 'gCarboWaterLine_Running' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3156: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3157: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3158: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3159: 'gProductDoubleStadiumChillerEn' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3160: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3161: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3162: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3163: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3164: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3165: 'OR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3166: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3167: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3168: '_NEGATIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3169: 'gH_WarmRinseRun' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3170: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3171: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3172: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3173: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3174: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3175: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3176: 'gManual_PID_TempProd' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3177: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3178: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3179: 'OR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3180: '_OPERATOR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3181: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3182: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3183: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3184: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3185: 'gProductChillerEn' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3186: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3187: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3188: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3189: 'gProductDoubleStadiumChillerEn' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3190: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3191: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3192: 'OR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3193: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3194: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3195: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3196: 'gCoolerEnabled' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3197: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3198: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3199: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3200: '_OPERATOR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3201: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3202: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3203: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3204: '_NEGATIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3205: 'gBlenderRun_Latch' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3206: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3207: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3208: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3209: 'gH_CMD_BlenderMaintenance' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3210: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3211: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3212: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3213: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3214: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3215: 'OR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3216: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3217: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3218: '_OUTPUTS : 1' +[11:20:26] 📤 Sección de outputs encontrada en línea 3218 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3231 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 3231 +[11:20:26] Entrando a _parse_empty_network desde línea 3232 +[11:20:26] Línea 3232: '_EXPRESSION' +[11:20:26] Línea 3233: '_POSITIV' +[11:20:26] Línea 3234: '' +[11:20:26] Línea 3235: '' +[11:20:26] Línea 3236: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 3237: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 3237 +[11:20:26] Entrando a _parse_assign_section desde línea 3238 +[11:20:26] Línea 3238: '_OPERATOR' +[11:20:26] Línea 3239: '_BOX_EXPR : 3' +[11:20:26] Línea 3240: '_ENABLED' +[11:20:26] Línea 3241: '_OPERATOR' +[11:20:26] Línea 3242: '_BOX_EXPR : 2' +[11:20:26] Línea 3243: '_OPERATOR' +[11:20:26] Línea 3244: '_BOX_EXPR : 4' +[11:20:26] Línea 3245: '_OPERAND' +[11:20:26] Línea 3246: '_EXPRESSION' +[11:20:26] Línea 3247: '_POSITIV' +[11:20:26] Línea 3248: 'gPID_ProdTemp_Enabled' +[11:20:26] Línea 3249: '_OPERAND' +[11:20:26] Línea 3250: '_EXPRESSION' +[11:20:26] Línea 3251: '_NEGATIV' +[11:20:26] Línea 3252: 'gBlenderEnToRamp' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 3253: '_OPERAND' +[11:20:26] Línea 3254: '_EXPRESSION' +[11:20:26] Línea 3255: '_NEGATIV' +[11:20:26] Línea 3256: 'gCarboWaterLine_Running' +[11:20:26] Línea 3257: '_OPERAND' +[11:20:26] Línea 3258: '_EXPRESSION' +[11:20:26] Línea 3259: '_NEGATIV' +[11:20:26] Línea 3260: 'gBlenderRinse_Running' +[11:20:26] Línea 3261: '_EXPRESSION' +[11:20:26] Línea 3262: '_POSITIV' +[11:20:26] Línea 3263: 'AND' +[11:20:26] Línea 3264: '_OPERATOR' +[11:20:26] Línea 3265: '_BOX_EXPR : 2' +[11:20:26] Línea 3266: '_OPERAND' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 3267: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3268: '_NEGATIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3269: 'gBlenderRun_Latch' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3270: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3271: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3272: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3273: 'gH_CMD_BlenderMaintenance' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3274: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3275: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3276: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3277: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3278: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3279: 'OR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3280: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3281: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3282: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3283: 'gH_A_Recipe_SP_ProdTemp' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3284: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3285: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3286: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3287: 'gR_TempProd_SP' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3288: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3289: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3290: 'SEL' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3291: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3292: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3293: '_OUTPUTS : 1' +[11:20:26] 📤 Sección de outputs encontrada en línea 3293 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3306 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gPID_ProdTemp_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gPID_ProdTemp_EnInt', 'negated': True}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3316: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3317: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3318: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3319: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3320: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3321: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3322: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3322 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3323 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 43: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 43 agregada. Total redes: 43 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Target: 'gHold_int_PID_TempProd' +[11:20:26] Procesando red 44... +[11:20:26] Comenzando en línea 3329: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3330: '' +[11:20:26] Línea 3331: '_COMMENT' +[11:20:26] Línea 3332: '' +[11:20:26] Línea 3333: '_END_COMMENT' +[11:20:26] Línea 3334: '_LD_ASSIGN' +[11:20:26] Línea 3335: '_LD_OR' +[11:20:26] Línea 3336: '_LD_OPERATOR : 2' +[11:20:26] Línea 3337: '_LD_CONTACT' +[11:20:26] Línea 3338: 'gPID_ProdTemp_Enabled' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3335 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gPID_ProdTemp_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gI_ITL_PID_TempProd', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3345: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3346: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3347: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3348: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3349: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3350: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3351: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3351 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 3352 +[11:20:26] 🔎 Línea 3352: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 3352 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - gH_ProdTempValve_Man_SP_ON +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3481 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 44: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3489 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gI_ITL_PID_TempProd', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3493: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3494: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3495: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3496: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3497: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3497 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3498 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 44: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 44 agregada. Total redes: 44 +[11:20:26] Con lógica: CONTACT - gI_ITL_PID_TempProd +[11:20:26] Target: 'gI_ITL_PID_TempProd' +[11:20:26] Procesando red 45... +[11:20:26] Comenzando en línea 3504: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3505: '' +[11:20:26] Línea 3506: '_COMMENT' +[11:20:26] Línea 3507: '' +[11:20:26] Línea 3508: '_END_COMMENT' +[11:20:26] Línea 3509: '_LD_ASSIGN' +[11:20:26] Línea 3510: '_EMPTY' +[11:20:26] Línea 3511: '_EXPRESSION' +[11:20:26] Línea 3512: '_POSITIV' +[11:20:26] Línea 3513: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3510 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 3510 +[11:20:26] Entrando a _parse_empty_network desde línea 3511 +[11:20:26] Línea 3511: '_EXPRESSION' +[11:20:26] Línea 3512: '_POSITIV' +[11:20:26] Línea 3513: '' +[11:20:26] Línea 3514: '' +[11:20:26] Línea 3515: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 3516: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 3516 +[11:20:26] Entrando a _parse_assign_section desde línea 3517 +[11:20:26] Línea 3517: '_OPERATOR' +[11:20:26] Línea 3518: '_BOX_EXPR : 3' +[11:20:26] Línea 3519: '_ENABLED' +[11:20:26] Línea 3520: '_OPERAND' +[11:20:26] Línea 3521: '_EXPRESSION' +[11:20:26] Línea 3522: '_POSITIV' +[11:20:26] Línea 3523: 'gPID_ProdTemp_Enabled' +[11:20:26] Línea 3524: '_OPERATOR' +[11:20:26] Línea 3525: '_BOX_EXPR : 3' +[11:20:26] Línea 3526: '_OPERATOR' +[11:20:26] Línea 3527: '_BOX_EXPR : 3' +[11:20:26] Línea 3528: '_OPERAND' +[11:20:26] Línea 3529: '_EXPRESSION' +[11:20:26] Línea 3530: '_POSITIV' +[11:20:26] Línea 3531: 'gGencoldChillerEn' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 3532: '_OPERATOR' +[11:20:26] Línea 3533: '_BOX_EXPR : 2' +[11:20:26] Línea 3534: '_OPERAND' +[11:20:26] Línea 3535: '_EXPRESSION' +[11:20:26] Línea 3536: '_POSITIV' +[11:20:26] Línea 3537: 'gBlenderCIPMode' +[11:20:26] Línea 3538: '_OPERAND' +[11:20:26] Línea 3539: '_EXPRESSION' +[11:20:26] Línea 3540: '_POSITIV' +[11:20:26] Línea 3541: 'gH_WarmRinseRun' +[11:20:26] Línea 3542: '_EXPRESSION' +[11:20:26] Línea 3543: '_POSITIV' +[11:20:26] Línea 3544: 'OR' +[11:20:26] Línea 3545: '_OPERAND' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 3546: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3547: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3548: 'gCoolerEnabled' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3549: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3550: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3551: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3552: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3553: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3554: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3555: '0.0' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3556: '_FUNCTION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3557: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3558: '_OPERATOR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3559: '_BOX_EXPR : 3' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3560: '_OPERATOR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3561: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3562: '_OPERATOR' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3563: '_BOX_EXPR : 2' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3564: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3565: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3566: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3567: 'gH_Blender_OPT_CoolerControl' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3568: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3569: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3570: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3571: '3' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3572: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3573: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3574: 'EQ' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3575: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3576: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3577: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3578: 'gGencoldChillerEn' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3579: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3580: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3581: 'AND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3582: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3583: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3584: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3585: 'gDeairWaterTemp' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3586: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3587: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3588: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3589: 'gTempWater_PV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3590: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3591: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3592: 'SEL' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3593: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3594: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3595: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3596: 'gTempProd_PV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3597: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3598: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3599: 'CIP_CVQ' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3600: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3601: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3602: 'SEL' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3603: '_OPERAND' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3604: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3605: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3606: 'gR_Out_TempProd_PID' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3607: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3608: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3609: 'SEL' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3610: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3611: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3612: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 3612 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3629 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3633: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3634: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3635: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3636: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3637: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3637 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3638 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 45: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 45 agregada. Total redes: 45 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mI_Sel_CIPTemp' +[11:20:26] Procesando red 46... +[11:20:26] Comenzando en línea 3644: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3645: '' +[11:20:26] Línea 3646: '_COMMENT' +[11:20:26] Línea 3647: '' +[11:20:26] Línea 3648: '_END_COMMENT' +[11:20:26] Línea 3649: '_LD_ASSIGN' +[11:20:26] Línea 3650: '_LD_CONTACT' +[11:20:26] Línea 3651: 'gAlwaysOff' +[11:20:26] Línea 3652: '_EXPRESSION' +[11:20:26] Línea 3653: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3650 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3654: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3655: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3656: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3657: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3658: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3658 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3659 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 46: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 46 agregada. Total redes: 46 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mP_Sel_CIPTemp' +[11:20:26] Procesando red 47... +[11:20:26] Comenzando en línea 3665: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3666: '' +[11:20:26] Línea 3667: '_COMMENT' +[11:20:26] Línea 3668: '' +[11:20:26] Línea 3669: '_END_COMMENT' +[11:20:26] Línea 3670: '_LD_ASSIGN' +[11:20:26] Línea 3671: '_LD_CONTACT' +[11:20:26] Línea 3672: 'gAlwaysOff' +[11:20:26] Línea 3673: '_EXPRESSION' +[11:20:26] Línea 3674: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3671 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gAlwaysOff', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3675: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3676: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3677: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3678: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3679: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3679 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3680 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 47: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 47 agregada. Total redes: 47 +[11:20:26] Con lógica: CONTACT - gAlwaysOff +[11:20:26] Target: 'mD_Sel_CIPTemp' +[11:20:26] Procesando red 48... +[11:20:26] Comenzando en línea 3686: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3687: '' +[11:20:26] Línea 3688: '_COMMENT' +[11:20:26] Línea 3689: '' +[11:20:26] Línea 3690: '_END_COMMENT' +[11:20:26] Línea 3691: '_LD_ASSIGN' +[11:20:26] Línea 3692: '_LD_OR' +[11:20:26] Línea 3693: '_LD_OPERATOR : 2' +[11:20:26] Línea 3694: '_LD_AND' +[11:20:26] Línea 3695: '_LD_OPERATOR : 5' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3692 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'AND', 'operands': [{'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gP_CIP_Temp_En', 'negated': False}, {'type': 'CONTACT', 'name': 'gManual_PID_CIPTemp', 'negated': False}]}, {'type': 'CONTACT', 'name': 'gBlenderCIPMode', 'negated': False}, {'type': 'CONTACT', 'name': 'gH_EV36_Status', 'negated': False}, {'type': 'CONTACT', 'name': 'gIn_FlowSwitch', 'negated': False}, {'type': 'CONTACT', 'name': 'gCIP_Run_Latch', 'negated': False}]}, {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gBlenderRun_Latch', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_CMD_BlenderMaintenance', 'negated': False}]}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3736: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3737: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3738: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3739: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3740: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3741: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3742: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3743: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3744: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3744 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3745 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 48: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 48 agregada. Total redes: 48 +[11:20:26] Con lógica: OR - Sin nombre +[11:20:26] Target: 'gPID_CIPTemp_Enabled' +[11:20:26] Procesando red 49... +[11:20:26] Comenzando en línea 3751: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3752: '' +[11:20:26] Línea 3753: '_COMMENT' +[11:20:26] Línea 3754: '' +[11:20:26] Línea 3755: '_END_COMMENT' +[11:20:26] Línea 3756: '_LD_ASSIGN' +[11:20:26] Línea 3757: '_EMPTY' +[11:20:26] Línea 3758: '_EXPRESSION' +[11:20:26] Línea 3759: '_POSITIV' +[11:20:26] Línea 3760: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3757 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 3757 +[11:20:26] Entrando a _parse_empty_network desde línea 3758 +[11:20:26] Línea 3758: '_EXPRESSION' +[11:20:26] Línea 3759: '_POSITIV' +[11:20:26] Línea 3760: '' +[11:20:26] Línea 3761: '' +[11:20:26] Línea 3762: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 3763: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 3763 +[11:20:26] Entrando a _parse_assign_section desde línea 3764 +[11:20:26] Línea 3764: '_OPERATOR' +[11:20:26] Línea 3765: '_BOX_EXPR : 3' +[11:20:26] Línea 3766: '_ENABLED' +[11:20:26] Línea 3767: '_OPERATOR' +[11:20:26] Línea 3768: '_BOX_EXPR : 2' +[11:20:26] Línea 3769: '_OPERAND' +[11:20:26] Línea 3770: '_EXPRESSION' +[11:20:26] Línea 3771: '_NEGATIV' +[11:20:26] Línea 3772: 'gBlenderRun_Latch' +[11:20:26] Línea 3773: '_OPERAND' +[11:20:26] Línea 3774: '_EXPRESSION' +[11:20:26] Línea 3775: '_POSITIV' +[11:20:26] Línea 3776: 'gH_CMD_BlenderMaintenance' +[11:20:26] Línea 3777: '_EXPRESSION' +[11:20:26] Línea 3778: '_POSITIV' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 3779: 'AND' +[11:20:26] Línea 3780: '_OPERAND' +[11:20:26] Línea 3781: '_EXPRESSION' +[11:20:26] Línea 3782: '_POSITIV' +[11:20:26] Línea 3783: 'gR_CIPTemp_SP' +[11:20:26] Línea 3784: '_OPERAND' +[11:20:26] Línea 3785: '_EXPRESSION' +[11:20:26] Línea 3786: '_POSITIV' +[11:20:26] Línea 3787: 'gCIPTemp_PV' +[11:20:26] Línea 3788: '_EXPRESSION' +[11:20:26] Línea 3789: '_POSITIV' +[11:20:26] Línea 3790: 'SEL' +[11:20:26] Línea 3791: '_EXPRESSION' +[11:20:26] Línea 3792: '_POSITIV' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 3793: '_OUTPUTS : 1' +[11:20:26] 📤 Sección de outputs encontrada en línea 3793 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3806 +[11:20:26] 📋 Lógica parseada: {'type': 'OR', 'operands': [{'type': 'CONTACT', 'name': 'gPID_CIPTemp_Enabled', 'negated': False}, {'type': 'CONTACT', 'name': 'gI_ITL_PID_CIPTemp', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3816: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3817: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3818: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3819: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3820: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3821: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3822: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3822 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 3823 +[11:20:26] 🔎 Línea 3823: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 3823 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - gH_CIPTempValve_Man_SP_ON +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3952 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 49: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3960 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gI_ITL_PID_CIPTemp', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 3964: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3965: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3966: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3967: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 3968: 'ENABLELIST : 0' +[11:20:26] ✅ Encontrado ENABLELIST en línea 3968 +[11:20:26] 📋 Procesando ENABLELIST con 0 llamadas +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 3969 +[11:20:26] 📊 Total de llamadas parseadas: 0 +[11:20:26] ✅ Red 49: Encontradas 0 llamadas en ENABLELIST +[11:20:26] Red 49 agregada. Total redes: 49 +[11:20:26] Con lógica: CONTACT - gI_ITL_PID_CIPTemp +[11:20:26] Target: 'gI_ITL_PID_CIPTemp' +[11:20:26] Procesando red 50... +[11:20:26] Comenzando en línea 3975: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3976: '' +[11:20:26] Línea 3977: '_COMMENT' +[11:20:26] Línea 3978: '' +[11:20:26] Línea 3979: '_END_COMMENT' +[11:20:26] Línea 3980: '_LD_ASSIGN' +[11:20:26] Línea 3981: '_EMPTY' +[11:20:26] Línea 3982: '_EXPRESSION' +[11:20:26] Línea 3983: '_POSITIV' +[11:20:26] Línea 3984: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 3981 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 3981 +[11:20:26] Entrando a _parse_empty_network desde línea 3982 +[11:20:26] Línea 3982: '_EXPRESSION' +[11:20:26] Línea 3983: '_POSITIV' +[11:20:26] Línea 3984: '' +[11:20:26] Línea 3985: '' +[11:20:26] Línea 3986: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 3987: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 3987 +[11:20:26] Entrando a _parse_assign_section desde línea 3988 +[11:20:26] Línea 3988: '_OPERATOR' +[11:20:26] Línea 3989: '_BOX_EXPR : 3' +[11:20:26] Línea 3990: '_ENABLED' +[11:20:26] Línea 3991: '_OPERAND' +[11:20:26] Línea 3992: '_EXPRESSION' +[11:20:26] Línea 3993: '_POSITIV' +[11:20:26] Línea 3994: 'gPID_CIPTemp_Enabled' +[11:20:26] Línea 3995: '_OPERAND' +[11:20:26] Línea 3996: '_EXPRESSION' +[11:20:26] Línea 3997: '_POSITIV' +[11:20:26] Línea 3998: '0.0' +[11:20:26] Línea 3999: '_OPERAND' +[11:20:26] Línea 4000: '_EXPRESSION' +[11:20:26] Línea 4001: '_POSITIV' +[11:20:26] Línea 4002: 'gR_Out_CIPTemp_PID' +[11:20:26] _parse_assign_section terminó sin encontrar función +[11:20:26] Línea 4003: '_EXPRESSION' +[11:20:26] Línea 4004: '_POSITIV' +[11:20:26] Línea 4005: 'SEL' +[11:20:26] Línea 4006: '_EXPRESSION' +[11:20:26] Línea 4007: '_POSITIV' +[11:20:26] _parse_empty_network terminó sin encontrar función +[11:20:26] 📋 Lógica parseada: None +[11:20:26] 🔎 Buscando ENABLELIST en línea 4008: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 4008 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 4025 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 4025 +[11:20:26] Entrando a _parse_empty_network desde línea 4026 +[11:20:26] Línea 4026: '_EXPRESSION' +[11:20:26] Línea 4027: '_POSITIV' +[11:20:26] Línea 4028: '' +[11:20:26] Línea 4029: '' +[11:20:26] Línea 4030: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 4031: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 4031 +[11:20:26] Entrando a _parse_assign_section desde línea 4032 +[11:20:26] Línea 4032: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 4032 +[11:20:26] Detectado patrón ??? en línea 4033 - Buscando ACTION call... +[11:20:26] Buscando ACTION name desde línea 4034... +[11:20:26] Línea 4034: '_BOX_EXPR : 0' +[11:20:26] Línea 4035: '_ENABLED' +[11:20:26] Línea 4036: '_EXPRESSION' +[11:20:26] Línea 4037: '_POSITIV' +[11:20:26] Línea 4038: '_Filling_Head_PID_Ctrl' +[11:20:26] Línea 4039: '_OUTPUTS : 0' +[11:20:26] Línea 4040: '_EXPRESSION' +[11:20:26] Línea 4041: '_POSITIV' +[11:20:26] Línea 4042: '_OUTPUTS : 1' +[11:20:26] Línea 4043: '_OUTPUT' +[11:20:26] Línea 4044: '_POSITIV' +[11:20:26] Línea 4045: '_NO_SET' +[11:20:26] Línea 4046: 'mDummy' +[11:20:26] Línea 4047: 'ENABLELIST_END' +[11:20:26] Línea 4048: '_OUTPUTS : 0' +[11:20:26] ⚠ No se encontró ACTION name en 15 líneas +[11:20:26] ⚠ Patrón ??? pero no se encontró nombre de ACTION +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 51 creada para FUNCTION_BLOCK: ??? +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': '???', 'instance_name': '???', 'inputs': [], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 4039: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 4039 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 4055 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 4055 +[11:20:26] Entrando a _parse_empty_network desde línea 4056 +[11:20:26] Línea 4056: '_EXPRESSION' +[11:20:26] Línea 4057: '_POSITIV' +[11:20:26] Línea 4058: '' +[11:20:26] Línea 4059: '' +[11:20:26] Línea 4060: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 4061: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 4061 +[11:20:26] Entrando a _parse_assign_section desde línea 4062 +[11:20:26] Línea 4062: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 4062 +[11:20:26] Detectado Function Block directo: _FBD_PROGRAM +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 4062 +[11:20:26] Línea 4068: 'Blender_PID_Ctrl_Loop.Write_AnalogOut' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 52 creada para FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': '_FBD_PROGRAM', 'instance_name': '_FBD_PROGRAM', 'inputs': [], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 4069: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 4069 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 4085 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 4085 +[11:20:26] Entrando a _parse_empty_network desde línea 4086 +[11:20:26] Línea 4086: '_EXPRESSION' +[11:20:26] Línea 4087: '_POSITIV' +[11:20:26] Línea 4088: '' +[11:20:26] Línea 4089: '' +[11:20:26] Línea 4090: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 4091: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 4091 +[11:20:26] Entrando a _parse_assign_section desde línea 4092 +[11:20:26] Línea 4092: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 4092 +[11:20:26] Detectado patrón ??? en línea 4093 - Buscando ACTION call... +[11:20:26] Buscando ACTION name desde línea 4094... +[11:20:26] Línea 4094: '_BOX_EXPR : 0' +[11:20:26] Línea 4095: '_ENABLED' +[11:20:26] Línea 4096: '_EXPRESSION' +[11:20:26] Línea 4097: '_POSITIV' +[11:20:26] Línea 4098: 'Blender_PID_Ctrl_Loop.SaveValveOut' +[11:20:26] ✓ ACTION name encontrado: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] ✓ ACTION call encontrada: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] Línea 4094: '_BOX_EXPR : 0' +[11:20:26] Línea 4095: '_ENABLED' +[11:20:26] Línea 4096: '_EXPRESSION' +[11:20:26] Línea 4097: '_POSITIV' +[11:20:26] Línea 4098: 'Blender_PID_Ctrl_Loop.SaveValveOut' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 53 creada para ACTION_CALL: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'ACTION_CALL', 'name': 'Blender_PID_Ctrl_Loop.SaveValveOut', 'inputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 4099: '_OUTPUTS : 0' +[11:20:26] 📤 Sección de outputs encontrada en línea 4099 +[11:20:26] Red 50 agregada. Total redes: 53 +[11:20:26] Con lógica: ACTION_CALL - Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] Target: 'mDummy' +[11:20:26] ADVERTENCIA: Se esperaban 50 redes pero solo se parsearon 53 +[11:20:26] Esto puede indicar redes con _EMPTY o estructuras no reconocidas +[11:20:26] DEBUG: Buscando todas las instancias de _NETWORK... +[11:20:26] Línea 2: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 32: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 81: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 138: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 159: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 180: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 201: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 266: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 309: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 450: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 471: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 504: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 539: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 583: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 604: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 625: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 646: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 719: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 762: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 903: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 924: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 957: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 992: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1036: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1057: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1078: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1099: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1184: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1239: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1380: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1401: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1434: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1469: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1513: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1543: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1573: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1594: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1615: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1636: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1668: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1705: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1868: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1889: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1933: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1963: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 1984: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2005: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2026: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2155: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2230: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2371: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2392: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2441: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2507: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2528: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2549: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2570: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2658: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2733: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2762: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2916: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 2937: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3025: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3046: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3067: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3088: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3225: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3300: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3329: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3483: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3504: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3623: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3644: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3665: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3686: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3751: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3800: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3954: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 3975: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 4019: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 4049: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 4079: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] ACTION LAD encontrada: PIDMonitor (3856 caracteres) +[11:20:26] Se esperan 9 redes según el archivo +[11:20:26] Procesando red 1... +[11:20:26] Comenzando en línea 2: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3: '' +[11:20:26] Línea 4: '_COMMENT' +[11:20:26] Línea 5: '' +[11:20:26] Línea 6: '_END_COMMENT' +[11:20:26] Línea 7: '_LD_ASSIGN' +[11:20:26] Línea 8: '_EMPTY' +[11:20:26] Línea 9: '_EXPRESSION' +[11:20:26] Línea 10: '_POSITIV' +[11:20:26] Línea 11: '' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 8 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 8 +[11:20:26] Entrando a _parse_empty_network desde línea 9 +[11:20:26] Línea 9: '_EXPRESSION' +[11:20:26] Línea 10: '_POSITIV' +[11:20:26] Línea 11: '' +[11:20:26] Línea 12: '' +[11:20:26] Línea 13: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 14: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 14 +[11:20:26] Entrando a _parse_assign_section desde línea 15 +[11:20:26] Línea 15: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 15 +[11:20:26] Detectado Function Block directo: mWaterStat +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 15 +[11:20:26] Línea 22: 'gR_Out_H2O_PID' +[11:20:26] Línea 23: '_OPERAND' +[11:20:26] Línea 24: '_EXPRESSION' +[11:20:26] Línea 25: '_POSITIV' +[11:20:26] Línea 26: '14' +[11:20:26] Línea 27: '_OPERAND' +[11:20:26] Línea 28: '_EXPRESSION' +[11:20:26] Línea 29: '_POSITIV' +[11:20:26] Línea 30: '1' +[11:20:26] Línea 31: '_EXPRESSION' +[11:20:26] Línea 32: '_POSITIV' +[11:20:26] Línea 33: 'StatisticalAnalisys' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 2 creada para FUNCTION_BLOCK: mWaterStat +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': 'mWaterStat', 'instance_name': 'mWaterStat', 'inputs': ['_POSITIV'], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 34: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 34 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 58 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gWaterPIDCtrlOk', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 62: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 63: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 64: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 65: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 66: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 66 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 67 +[11:20:26] 🔎 Línea 67: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 67 +[11:20:26] ✅ Llamada parseada: OPERATOR - LT +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 89 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 97 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gWaterPIDCtrlOk', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 101: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 102: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 103: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 104: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 105: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 105 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 106 +[11:20:26] 🔎 Línea 106: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 106 +[11:20:26] ✅ Llamada parseada: OPERATOR - GT +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 128 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 136 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 136 +[11:20:26] Entrando a _parse_empty_network desde línea 137 +[11:20:26] Línea 137: '_EXPRESSION' +[11:20:26] Línea 138: '_POSITIV' +[11:20:26] Línea 139: '' +[11:20:26] Línea 140: '' +[11:20:26] Línea 141: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 142: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 142 +[11:20:26] Entrando a _parse_assign_section desde línea 143 +[11:20:26] Línea 143: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 143 +[11:20:26] Detectado Function Block directo: mSyrupStat +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 143 +[11:20:26] Línea 150: 'gR_Out_SYR_PID' +[11:20:26] Línea 151: '_OPERAND' +[11:20:26] Línea 152: '_EXPRESSION' +[11:20:26] Línea 153: '_POSITIV' +[11:20:26] Línea 154: '14' +[11:20:26] Línea 155: '_OPERAND' +[11:20:26] Línea 156: '_EXPRESSION' +[11:20:26] Línea 157: '_POSITIV' +[11:20:26] Línea 158: '1' +[11:20:26] Línea 159: '_EXPRESSION' +[11:20:26] Línea 160: '_POSITIV' +[11:20:26] Línea 161: 'StatisticalAnalisys' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 3 creada para FUNCTION_BLOCK: mSyrupStat +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': 'mSyrupStat', 'instance_name': 'mSyrupStat', 'inputs': ['_POSITIV'], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 162: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 162 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 186 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gSyrupPIDCtrlOk', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 190: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 191: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 192: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 193: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 194: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 194 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 195 +[11:20:26] 🔎 Línea 195: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 195 +[11:20:26] ✅ Llamada parseada: OPERATOR - LT +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 217 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 225 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gSyrupPIDCtrlOk', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 229: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 230: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 231: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 232: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 233: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 233 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 234 +[11:20:26] 🔎 Línea 234: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 234 +[11:20:26] ✅ Llamada parseada: OPERATOR - GT +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 256 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 264 +[11:20:26] Encontrada _EMPTY dentro de _LD_ASSIGN en línea 264 +[11:20:26] Entrando a _parse_empty_network desde línea 265 +[11:20:26] Línea 265: '_EXPRESSION' +[11:20:26] Línea 266: '_POSITIV' +[11:20:26] Línea 267: '' +[11:20:26] Línea 268: '' +[11:20:26] Línea 269: 'ENABLELIST : 1' +[11:20:26] Encontrado ENABLELIST, continuando búsqueda... +[11:20:26] Línea 270: '_ASSIGN' +[11:20:26] ENCONTRADO _ASSIGN en línea 270 +[11:20:26] Entrando a _parse_assign_section desde línea 271 +[11:20:26] Línea 271: '_FUNCTIONBLOCK' +[11:20:26] ENCONTRADO _FUNCTIONBLOCK en _ASSIGN: línea 271 +[11:20:26] Detectado Function Block directo: mCarboCO2Stat +[11:20:26] ADVERTENCIA: Bucle infinito evitado en function block en línea 271 +[11:20:26] Línea 278: 'gR_Out_CO2_PID' +[11:20:26] Línea 279: '_OPERAND' +[11:20:26] Línea 280: '_EXPRESSION' +[11:20:26] Línea 281: '_POSITIV' +[11:20:26] Línea 282: '12' +[11:20:26] Línea 283: '_OPERAND' +[11:20:26] Línea 284: '_EXPRESSION' +[11:20:26] Línea 285: '_POSITIV' +[11:20:26] Línea 286: '1' +[11:20:26] Línea 287: '_EXPRESSION' +[11:20:26] Línea 288: '_POSITIV' +[11:20:26] Línea 289: 'StatisticalAnalisys' +[11:20:26] Función encontrada pero sin target específico +[11:20:26] Usando target por defecto: mDummy +[11:20:26] Red de función 4 creada para FUNCTION_BLOCK: mCarboCO2Stat +[11:20:26] Target: 'mDummy' +[11:20:26] 📋 Lógica parseada: {'type': 'FUNCTION_BLOCK', 'name': 'mCarboCO2Stat', 'instance_name': 'mCarboCO2Stat', 'inputs': ['_POSITIV'], 'outputs': []} +[11:20:26] 🔎 Buscando ENABLELIST en línea 290: '_OUTPUTS : 2' +[11:20:26] 📤 Sección de outputs encontrada en línea 290 +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 314 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gCarboCO2PIDCtrlOk', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 318: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 319: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 320: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 321: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 322: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 322 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 323 +[11:20:26] 🔎 Línea 323: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 323 +[11:20:26] ✅ Llamada parseada: OPERATOR - LT +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 345 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 353 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gCarboCO2PIDCtrlOk', 'negated': False} +[11:20:26] 🔎 Buscando ENABLELIST en línea 357: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 358: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 359: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 360: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 361: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 361 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 362 +[11:20:26] 🔎 Línea 362: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 362 +[11:20:26] ✅ Llamada parseada: OPERATOR - GT +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 384 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] Red 1 agregada. Total redes: 4 +[11:20:26] Con lógica: CONTACT - gCarboCO2PIDCtrlOk +[11:20:26] Con 1 llamadas de ejecución. +[11:20:26] 📋 Llamada: OPERATOR - GT +[11:20:26] Target: 'gCarboCO2Stat_MeanValue' +[11:20:26] ADVERTENCIA: Se esperaban 9 redes pero solo se parsearon 4 +[11:20:26] Esto puede indicar redes con _EMPTY o estructuras no reconocidas +[11:20:26] DEBUG: Buscando todas las instancias de _NETWORK... +[11:20:26] Línea 2: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 52: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 91: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 130: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 180: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 219: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 258: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 308: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 347: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] ACTION ST encontrada: PressureRelease (536 caracteres) +[11:20:26] ACTION LAD encontrada: Read_AnalogInput (4192 caracteres) +[11:20:26] Se esperan 5 redes según el archivo +[11:20:26] Procesando red 1... +[11:20:26] Comenzando en línea 2: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3: '' +[11:20:26] Línea 4: '_COMMENT' +[11:20:26] Línea 5: '' +[11:20:26] Línea 6: '_END_COMMENT' +[11:20:26] Línea 7: '_LD_ASSIGN' +[11:20:26] Línea 8: '_LD_CONTACT' +[11:20:26] Línea 9: 'gH_Blender_OPT_Simulation' +[11:20:26] Línea 10: '_EXPRESSION' +[11:20:26] Línea 11: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 8 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 12: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 13: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 14: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 15: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 16: 'ENABLELIST : 2' +[11:20:26] ✅ Encontrado ENABLELIST en línea 16 +[11:20:26] 📋 Procesando ENABLELIST con 2 llamadas +[11:20:26] 🔍 Buscando llamada 1/2 en línea 17 +[11:20:26] 🔎 Línea 17: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 17 +[11:20:26] 🔚 Encontrado siguiente _ASSIGN en línea 51, terminando parsing de llamada actual +[11:20:26] ✅ Llamada parseada: FUNCTION - ReadPeripherial +[11:20:26] 🔍 Buscando llamada 2/2 en línea 51 +[11:20:26] 🔎 Línea 51: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 51 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - LowPassFilter +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 79 +[11:20:26] 📊 Total de llamadas parseadas: 2 +[11:20:26] ✅ Red 1: Encontradas 2 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 87 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 91: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 92: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 93: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 94: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 95: 'ENABLELIST : 2' +[11:20:26] ✅ Encontrado ENABLELIST en línea 95 +[11:20:26] 📋 Procesando ENABLELIST con 2 llamadas +[11:20:26] 🔍 Buscando llamada 1/2 en línea 96 +[11:20:26] 🔎 Línea 96: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 96 +[11:20:26] 🔚 Encontrado siguiente _ASSIGN en línea 130, terminando parsing de llamada actual +[11:20:26] ✅ Llamada parseada: FUNCTION - ReadPeripherial +[11:20:26] 🔍 Buscando llamada 2/2 en línea 130 +[11:20:26] 🔎 Línea 130: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 130 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - LowPassFilter +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 158 +[11:20:26] 📊 Total de llamadas parseadas: 2 +[11:20:26] ✅ Red 1: Encontradas 2 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 166 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 170: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 171: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 172: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 173: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 174: 'ENABLELIST : 2' +[11:20:26] ✅ Encontrado ENABLELIST en línea 174 +[11:20:26] 📋 Procesando ENABLELIST con 2 llamadas +[11:20:26] 🔍 Buscando llamada 1/2 en línea 175 +[11:20:26] 🔎 Línea 175: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 175 +[11:20:26] 🔚 Encontrado siguiente _ASSIGN en línea 209, terminando parsing de llamada actual +[11:20:26] ✅ Llamada parseada: FUNCTION - ReadPeripherial +[11:20:26] 🔍 Buscando llamada 2/2 en línea 209 +[11:20:26] 🔎 Línea 209: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 209 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - LowPassFilter +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 237 +[11:20:26] 📊 Total de llamadas parseadas: 2 +[11:20:26] ✅ Red 1: Encontradas 2 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 245 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 249: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 250: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 251: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 252: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 253: 'ENABLELIST : 2' +[11:20:26] ✅ Encontrado ENABLELIST en línea 253 +[11:20:26] 📋 Procesando ENABLELIST con 2 llamadas +[11:20:26] 🔍 Buscando llamada 1/2 en línea 254 +[11:20:26] 🔎 Línea 254: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 254 +[11:20:26] 🔚 Encontrado siguiente _ASSIGN en línea 288, terminando parsing de llamada actual +[11:20:26] ✅ Llamada parseada: FUNCTION - ReadPeripherial +[11:20:26] 🔍 Buscando llamada 2/2 en línea 288 +[11:20:26] 🔎 Línea 288: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 288 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - LowPassFilter +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 316 +[11:20:26] 📊 Total de llamadas parseadas: 2 +[11:20:26] ✅ Red 1: Encontradas 2 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 324 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gH_Blender_OPT_Conductimeter_Profibus', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_LocalCIP', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 334: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 335: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 336: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 337: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 338: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 339: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 340: 'ENABLELIST : 2' +[11:20:26] ✅ Encontrado ENABLELIST en línea 340 +[11:20:26] 📋 Procesando ENABLELIST con 2 llamadas +[11:20:26] 🔍 Buscando llamada 1/2 en línea 341 +[11:20:26] 🔎 Línea 341: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 341 +[11:20:26] 🔚 Encontrado siguiente _ASSIGN en línea 375, terminando parsing de llamada actual +[11:20:26] ✅ Llamada parseada: FUNCTION - ReadPeripherial +[11:20:26] 🔍 Buscando llamada 2/2 en línea 375 +[11:20:26] 🔎 Línea 375: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 375 +[11:20:26] ✅ Llamada parseada: FUNCTION_BLOCK - LowPassFilter +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 403 +[11:20:26] 📊 Total de llamadas parseadas: 2 +[11:20:26] ✅ Red 1: Encontradas 2 llamadas en ENABLELIST +[11:20:26] Red 1 agregada. Total redes: 1 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Con 2 llamadas de ejecución. +[11:20:26] 📋 Llamada: FUNCTION - ReadPeripherial +[11:20:26] 📋 Llamada: FUNCTION_BLOCK - LowPassFilter +[11:20:26] Target: '' +[11:20:26] ADVERTENCIA: Se esperaban 5 redes pero solo se parsearon 1 +[11:20:26] Esto puede indicar redes con _EMPTY o estructuras no reconocidas +[11:20:26] DEBUG: Buscando todas las instancias de _NETWORK... +[11:20:26] Línea 2: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 81: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 160: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 239: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 318: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] ACTION ST encontrada: SaveIntegral (2301 caracteres) +[11:20:26] ACTION ST encontrada: SaveValveOut (353 caracteres) +[11:20:26] ACTION LAD encontrada: Write_AnalogOut (7698 caracteres) +[11:20:26] Se esperan 13 redes según el archivo +[11:20:26] Procesando red 1... +[11:20:26] Comenzando en línea 2: '_NETWORK' +[11:20:26] Próximas líneas después de _NETWORK: +[11:20:26] Línea 3: '' +[11:20:26] Línea 4: '_COMMENT' +[11:20:26] Línea 5: '' +[11:20:26] Línea 6: '_END_COMMENT' +[11:20:26] Línea 7: '_LD_ASSIGN' +[11:20:26] Línea 8: '_LD_CONTACT' +[11:20:26] Línea 9: 'gH_Blender_OPT_Simulation' +[11:20:26] Línea 10: '_EXPRESSION' +[11:20:26] Línea 11: '_NEGATIV' +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 8 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 12: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 13: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 14: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 15: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 16: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 16 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 17 +[11:20:26] 🔎 Línea 17: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 17 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 51 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 59 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 63: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 64: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 65: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 66: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 67: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 67 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 68 +[11:20:26] 🔎 Línea 68: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 68 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 102 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 110 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 114: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 115: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 116: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 117: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 118: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 118 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 119 +[11:20:26] 🔎 Línea 119: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 119 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 153 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 161 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 165: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 166: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 167: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 168: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 169: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 169 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 170 +[11:20:26] 🔎 Línea 170: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 170 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 204 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 212 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 216: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 217: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 218: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 219: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 220: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 220 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 221 +[11:20:26] 🔎 Línea 221: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 221 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 255 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 263 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 267: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 268: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 269: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 270: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 271: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 271 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 272 +[11:20:26] 🔎 Línea 272: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 272 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 306 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 314 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 318: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 319: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 320: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 321: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 322: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 322 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 323 +[11:20:26] 🔎 Línea 323: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 323 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 357 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 365 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Flowtronic', 'negated': True}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 375: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 376: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 377: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 378: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 379: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 380: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 381: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 381 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 382 +[11:20:26] 🔎 Línea 382: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 382 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 416 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 424 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Flowtronic', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 434: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 435: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 436: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 437: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 438: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 439: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 440: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 440 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 441 +[11:20:26] 🔎 Línea 441: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 441 +[11:20:26] ✅ Llamada parseada: FUNCTION - gH_VEP_DeaireationValve_Auto +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 501 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 509 +[11:20:26] 📋 Lógica parseada: {'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True} +[11:20:26] 🔎 Buscando ENABLELIST en línea 513: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 514: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 515: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 516: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 517: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 517 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 518 +[11:20:26] 🔎 Línea 518: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 518 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 552 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 560 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_LocalCIP', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 570: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 571: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 572: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 573: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 574: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 575: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 576: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 576 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 577 +[11:20:26] 🔎 Línea 577: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 577 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 611 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 619 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_LocalCIP', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 629: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 630: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 631: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 632: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 633: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 634: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 635: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 635 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 636 +[11:20:26] 🔎 Línea 636: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 636 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 670 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] 🔍 Procesando _LD_ASSIGN en línea 678 +[11:20:26] 📋 Lógica parseada: {'type': 'AND', 'operands': [{'type': 'CONTACT', 'name': 'gH_Blender_OPT_Simulation', 'negated': True}, {'type': 'CONTACT', 'name': 'gH_Blender_OPT_LocalCIP', 'negated': False}]} +[11:20:26] 🔎 Buscando ENABLELIST en línea 688: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 689: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 690: '_EXPRESSION' +[11:20:26] 🔎 Buscando ENABLELIST en línea 691: '_POSITIV' +[11:20:26] 🔎 Buscando ENABLELIST en línea 692: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 693: '' +[11:20:26] 🔎 Buscando ENABLELIST en línea 694: 'ENABLELIST : 1' +[11:20:26] ✅ Encontrado ENABLELIST en línea 694 +[11:20:26] 📋 Procesando ENABLELIST con 1 llamadas +[11:20:26] 🔍 Buscando llamada 1/1 en línea 695 +[11:20:26] 🔎 Línea 695: '_ASSIGN' +[11:20:26] ✅ Encontrado _ASSIGN en línea 695 +[11:20:26] ✅ Llamada parseada: FUNCTION - WritePeripherial +[11:20:26] 🔚 Encontrado ENABLELIST_END en línea 729 +[11:20:26] 📊 Total de llamadas parseadas: 1 +[11:20:26] ✅ Red 1: Encontradas 1 llamadas en ENABLELIST +[11:20:26] Red 1 agregada. Total redes: 1 +[11:20:26] Con lógica: AND - Sin nombre +[11:20:26] Con 1 llamadas de ejecución. +[11:20:26] 📋 Llamada: FUNCTION - WritePeripherial +[11:20:26] Target: '' +[11:20:26] ADVERTENCIA: Se esperaban 13 redes pero solo se parsearon 1 +[11:20:26] Esto puede indicar redes con _EMPTY o estructuras no reconocidas +[11:20:26] DEBUG: Buscando todas las instancias de _NETWORK... +[11:20:26] Línea 2: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 53: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 104: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 155: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 206: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 257: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 308: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 359: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 418: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 503: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 554: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 613: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Línea 672: _NETWORK +[11:20:26] Siguiente línea: '' +[11:20:26] Línea +2: '_COMMENT' +[11:20:26] Total ACTIONs: 6 +[11:20:26] ✓ Redes encontradas: 53 +[11:20:26] ✓ Secciones de variables: ['VAR_OUTPUT', 'VAR'] +[11:20:26] ✓ ACTIONs encontradas: ['PIDMonitor', 'PressureRelease', 'Read_AnalogInput', 'SaveIntegral', 'SaveValveOut', 'Write_AnalogOut'] +[11:20:26] === DEBUG INFO - 53 networks encontrados === +[11:20:26] Red 2: +[11:20:26] Comentario: Llamada a función: _FBD_PROGRAM +[11:20:26] Target: mDummy +[11:20:26] Lógica: FUNCTION_BLOCK: _FBD_PROGRAM inputs: [] +[11:20:26] Condición: _FBD_PROGRAM() +[11:20:26] ✅ Llamadas: 1 +[11:20:26] 1. FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Red 1: +[11:20:26] Target: gBlendErrorEn +[11:20:26] Lógica: AND: +[11:20:26] OR: +[11:20:26] CONTACT: gBlenderBlending +[11:20:26] CONTACT: gBlendErrorEn +[11:20:26] CONTACT: gManual_PID_H2O (NEGADO) +[11:20:26] CONTACT: gManual_PID_SYR (NEGADO) +[11:20:26] CONTACT: gWaterRecipe (NEGADO) +[11:20:26] CONTACT: gStopBlendCarboError (NEGADO) +[11:20:26] Condición: ((gBlenderBlending OR gBlendErrorEn) AND NOT gManual_PID_H2O AND NOT gManual_PID_SYR AND NOT gWaterRecipe AND NOT gStopBlendCarboError) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 3: +[11:20:26] Target: gCarboCO2ErrorEn +[11:20:26] Lógica: AND: +[11:20:26] OR: +[11:20:26] CONTACT: gBlenderBlending +[11:20:26] CONTACT: gCarboCO2ErrorEn +[11:20:26] CONTACT: gManual_PID_CO2 (NEGADO) +[11:20:26] OR: +[11:20:26] CONTACT: gCarboStillProduct +[11:20:26] CONTACT: gH_Blender_OPT_DoubleDeair +[11:20:26] CONTACT: gStopBlendCarboError (NEGADO) +[11:20:26] CONTACT: gWorkshopTest (NEGADO) +[11:20:26] Condición: ((gBlenderBlending OR gCarboCO2ErrorEn) AND NOT gManual_PID_CO2 AND (gCarboStillProduct OR gH_Blender_OPT_DoubleDeair) AND NOT gStopBlendCarboError AND NOT gWorkshopTest) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 4: +[11:20:26] Target: mI_Sel_H2O +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 5: +[11:20:26] Target: mP_Sel_H2O +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 6: +[11:20:26] Target: mD_Sel_H2O +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 7: +[11:20:26] Target: gPID_H2O_Enabled +[11:20:26] Lógica: OR: +[11:20:26] CONTACT: gBlenderBlending +[11:20:26] CONTACT: gBlenderCIPMode +[11:20:26] AND: +[11:20:26] CONTACT: gRinseCloseVM1 (NEGADO) +[11:20:26] OR: +[11:20:26] CONTACT: gBlenderRinse_Running +[11:20:26] CONTACT: gProdTankRunOut_Running +[11:20:26] CONTACT: gProdPipeRunOut_Running +[11:20:26] AND: +[11:20:26] CONTACT: gBlenderRun_Latch (NEGADO) +[11:20:26] CONTACT: gH_CMD_BlenderMaintenance +[11:20:26] Condición: (gBlenderBlending OR gBlenderCIPMode OR (NOT gRinseCloseVM1 AND (gBlenderRinse_Running OR gProdTankRunOut_Running OR gProdPipeRunOut_Running)) OR (NOT gBlenderRun_Latch AND gH_CMD_BlenderMaintenance)) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 8: +[11:20:26] Target: gI_ITL_PID_H2O +[11:20:26] Lógica: CONTACT: gI_ITL_PID_H2O +[11:20:26] Condición: gI_ITL_PID_H2O +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 9: +[11:20:26] Target: mH2OONS +[11:20:26] Lógica: AND: +[11:20:26] CONTACT: gPID_H2O_Enabled +[11:20:26] FUNCTION_BLOCK: mH2OPIDEn inputs: [] +[11:20:26] Condición: (gPID_H2O_Enabled AND mH2OPIDEn()) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 10: +[11:20:26] Target: mI_Sel_SYR +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 11: +[11:20:26] Target: mP_Sel_SYR +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 12: +[11:20:26] Target: mD_Sel_SYR +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 13: +[11:20:26] Target: gPID_SYR_Enabled +[11:20:26] Lógica: OR: +[11:20:26] AND: +[11:20:26] CONTACT: gBlenderBlending +[11:20:26] CONTACT: gWaterRecipe (NEGADO) +[11:20:26] CONTACT: gBlenderCIPMode +[11:20:26] AND: +[11:20:26] CONTACT: gRinseCloseVM2 (NEGADO) +[11:20:26] OR: +[11:20:26] CONTACT: gBlenderRinse_Running +[11:20:26] CONTACT: gProdTankRunOut_Running +[11:20:26] CONTACT: gProdPipeRunOut_Running +[11:20:26] AND: +[11:20:26] CONTACT: gBlenderRun_Latch (NEGADO) +[11:20:26] CONTACT: gH_CMD_BlenderMaintenance +[11:20:26] Condición: ((gBlenderBlending AND NOT gWaterRecipe) OR gBlenderCIPMode OR (NOT gRinseCloseVM2 AND (gBlenderRinse_Running OR gProdTankRunOut_Running OR gProdPipeRunOut_Running)) OR (NOT gBlenderRun_Latch AND gH_CMD_BlenderMaintenance)) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 14: +[11:20:26] Target: gI_ITL_PID_SYR +[11:20:26] Lógica: CONTACT: gI_ITL_PID_SYR +[11:20:26] Condición: gI_ITL_PID_SYR +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 15: +[11:20:26] Target: mSyrONS +[11:20:26] Lógica: AND: +[11:20:26] CONTACT: gPID_SYR_Enabled +[11:20:26] FUNCTION_BLOCK: mSyrPIDEn inputs: [] +[11:20:26] Condición: (gPID_SYR_Enabled AND mSyrPIDEn()) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 16: +[11:20:26] Target: mI_Sel_CO2 +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 17: +[11:20:26] Target: mP_Sel_CO2 +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 18: +[11:20:26] Target: mD_Sel_CO2 +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 19: +[11:20:26] Target: gPID_CarboCO2_Enabled +[11:20:26] Lógica: OR: +[11:20:26] AND: +[11:20:26] OR: +[11:20:26] AND: +[11:20:26] CONTACT: gBlenderBlending +[11:20:26] OR: +[11:20:26] CONTACT: gCarboStillProduct +[11:20:26] CONTACT: gH_Blender_OPT_DoubleDeair +[11:20:26] CONTACT: gH_Blender_OPT_RemoteInjection (NEGADO) +[11:20:26] CONTACT: gP_CarboPipe_En +[11:20:26] AND: +[11:20:26] CONTACT: gP_CIP_CO2_Inj +[11:20:26] CONTACT: gBlenderCIPMode +[11:20:26] CONTACT: gWorkshopTest (NEGADO) +[11:20:26] AND: +[11:20:26] CONTACT: gBlenderRun_Latch (NEGADO) +[11:20:26] CONTACT: gH_CMD_BlenderMaintenance +[11:20:26] Condición: ((((gBlenderBlending AND (gCarboStillProduct OR gH_Blender_OPT_DoubleDeair) AND NOT gH_Blender_OPT_RemoteInjection) OR gP_CarboPipe_En OR (gP_CIP_CO2_Inj AND gBlenderCIPMode)) AND NOT gWorkshopTest) OR (NOT gBlenderRun_Latch AND gH_CMD_BlenderMaintenance)) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 20: +[11:20:26] Target: gI_ITL_PID_CO2 +[11:20:26] Lógica: CONTACT: gI_ITL_PID_CO2 +[11:20:26] Condición: gI_ITL_PID_CO2 +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 21: +[11:20:26] Target: mCO2ONS +[11:20:26] Lógica: AND: +[11:20:26] CONTACT: gPID_CarboCO2_Enabled +[11:20:26] FUNCTION_BLOCK: mCO2PIDEn inputs: [] +[11:20:26] Condición: (gPID_CarboCO2_Enabled AND mCO2PIDEn()) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 23: +[11:20:26] Comentario: Llamada a función: _FBD_PROGRAM +[11:20:26] Target: mDummy +[11:20:26] Lógica: FUNCTION_BLOCK: _FBD_PROGRAM inputs: [] +[11:20:26] Condición: _FBD_PROGRAM() +[11:20:26] ✅ Llamadas: 1 +[11:20:26] 1. FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Red 24: +[11:20:26] Comentario: Llamada a función: _FBD_PROGRAM +[11:20:26] Target: mDummy +[11:20:26] Lógica: FUNCTION_BLOCK: _FBD_PROGRAM inputs: [] +[11:20:26] Condición: _FBD_PROGRAM() +[11:20:26] ✅ Llamadas: 1 +[11:20:26] 1. FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Red 22: +[11:20:26] Target: mI_Sel_PressCO2 +[11:20:26] Lógica: CONTACT: gAlwaysOff +[11:20:26] Condición: gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 25: +[11:20:26] Target: mP_Sel_PressCO2 +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 26: +[11:20:26] Target: mD_Sel_PressCO2 +[11:20:26] Lógica: CONTACT: gAlwaysOff +[11:20:26] Condición: gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 27: +[11:20:26] Target: gPID_PressCO2_Enabled +[11:20:26] Lógica: OR: +[11:20:26] CONTACT: gProdTankPress_Running +[11:20:26] AND: +[11:20:26] CONTACT: gManual_PID_PressCO2 +[11:20:26] CONTACT: gBlenderCIPMode (NEGADO) +[11:20:26] Condición: (gProdTankPress_Running OR (gManual_PID_PressCO2 AND NOT gBlenderCIPMode)) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 28: +[11:20:26] Target: gI_ITL_PID_PressCO2 +[11:20:26] Lógica: CONTACT: gI_ITL_PID_PressCO2 +[11:20:26] Condición: gI_ITL_PID_PressCO2 +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 30: +[11:20:26] Comentario: Llamada a función: _FBD_PROGRAM +[11:20:26] Target: mDummy +[11:20:26] Lógica: FUNCTION_BLOCK: _FBD_PROGRAM inputs: [] +[11:20:26] Condición: _FBD_PROGRAM() +[11:20:26] ✅ Llamadas: 1 +[11:20:26] 1. FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Red 29: +[11:20:26] Target: mI_Sel_SYRLevel +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 31: +[11:20:26] Target: mP_Sel_SYRLevel +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 32: +[11:20:26] Target: mD_Sel_SYRLevel +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 33: +[11:20:26] Target: gPID_SYRLevel_Enabled +[11:20:26] Lógica: OR: +[11:20:26] AND: +[11:20:26] OR: +[11:20:26] CONTACT: gBlenderCIPMode +[11:20:26] CONTACT: gBlenderRinseMode +[11:20:26] CONTACT: gCIPSyrupStopLevel (NEGADO) +[11:20:26] AND: +[11:20:26] OR: +[11:20:26] AND: +[11:20:26] OR: +[11:20:26] CONTACT: gSyrRunOut_Latch +[11:20:26] AND: +[11:20:26] CONTACT: gFirstProd_Latch +[11:20:26] CONTACT: gSyrLineMFMPrep_Done +[11:20:26] CONTACT: gFastChangeOverActivated (NEGADO) +[11:20:26] CONTACT: gBlenderRun_Latch +[11:20:26] AND: +[11:20:26] OR: +[11:20:26] CONTACT: gSyrLineMFMPrep_Running +[11:20:26] CONTACT: gSyrMFMStartUp_Running +[11:20:26] CONTACT: gInSyrRoomOk +[11:20:26] CONTACT: gSyrupTankLoading +[11:20:26] CONTACT: gProdPipeRunOut_Running +[11:20:26] CONTACT: gWaterRecipe (NEGADO) +[11:20:26] CONTACT: gBlenderProdMode +[11:20:26] CONTACT: gBlenderRinseMode (NEGADO) +[11:20:26] CONTACT: gP_EV03 +[11:20:26] CONTACT: gManual_PID_SYR_Level +[11:20:26] Condición: (((gBlenderCIPMode OR gBlenderRinseMode) AND NOT gCIPSyrupStopLevel) OR ((((gSyrRunOut_Latch OR (gFirstProd_Latch AND gSyrLineMFMPrep_Done) OR NOT gFastChangeOverActivated) AND gBlenderRun_Latch) OR ((gSyrLineMFMPrep_Running OR gSyrMFMStartUp_Running) AND gInSyrRoomOk) OR gSyrupTankLoading OR gProdPipeRunOut_Running) AND NOT gWaterRecipe AND gBlenderProdMode AND NOT gBlenderRinseMode) OR gP_EV03 OR gManual_PID_SYR_Level) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 34: +[11:20:26] Target: gI_ITL_PID_SYR_Level +[11:20:26] Lógica: CONTACT: gI_ITL_PID_SYR_Level +[11:20:26] Condición: gI_ITL_PID_SYR_Level +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 35: +[11:20:26] Target: mI_Sel_WaterTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 36: +[11:20:26] Target: mP_Sel_WaterTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 37: +[11:20:26] Target: mD_Sel_waterTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 38: +[11:20:26] Target: gHold_int_PID_TempWater +[11:20:26] Lógica: AND: +[11:20:26] CONTACT: gPID_WaterTemp_Enabled +[11:20:26] CONTACT: gPID_WaterTemp_EnInt (NEGADO) +[11:20:26] Condición: (gPID_WaterTemp_Enabled AND NOT gPID_WaterTemp_EnInt) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 39: +[11:20:26] Target: gI_ITL_PID_TempWater +[11:20:26] Lógica: CONTACT: gI_ITL_PID_TempWater +[11:20:26] Condición: gI_ITL_PID_TempWater +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 40: +[11:20:26] Target: mI_Sel_ProdTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 41: +[11:20:26] Target: mP_Sel_ProdTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 42: +[11:20:26] Target: mD_Sel_ProdTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 43: +[11:20:26] Target: gHold_int_PID_TempProd +[11:20:26] Lógica: AND: +[11:20:26] CONTACT: gPID_ProdTemp_Enabled +[11:20:26] CONTACT: gPID_ProdTemp_EnInt (NEGADO) +[11:20:26] Condición: (gPID_ProdTemp_Enabled AND NOT gPID_ProdTemp_EnInt) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 44: +[11:20:26] Target: gI_ITL_PID_TempProd +[11:20:26] Lógica: CONTACT: gI_ITL_PID_TempProd +[11:20:26] Condición: gI_ITL_PID_TempProd +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 45: +[11:20:26] Target: mI_Sel_CIPTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 46: +[11:20:26] Target: mP_Sel_CIPTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 47: +[11:20:26] Target: mD_Sel_CIPTemp +[11:20:26] Lógica: CONTACT: gAlwaysOff (NEGADO) +[11:20:26] Condición: NOT gAlwaysOff +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 48: +[11:20:26] Target: gPID_CIPTemp_Enabled +[11:20:26] Lógica: OR: +[11:20:26] AND: +[11:20:26] OR: +[11:20:26] CONTACT: gP_CIP_Temp_En +[11:20:26] CONTACT: gManual_PID_CIPTemp +[11:20:26] CONTACT: gBlenderCIPMode +[11:20:26] CONTACT: gH_EV36_Status +[11:20:26] CONTACT: gIn_FlowSwitch +[11:20:26] CONTACT: gCIP_Run_Latch +[11:20:26] AND: +[11:20:26] CONTACT: gBlenderRun_Latch (NEGADO) +[11:20:26] CONTACT: gH_CMD_BlenderMaintenance +[11:20:26] Condición: (((gP_CIP_Temp_En OR gManual_PID_CIPTemp) AND gBlenderCIPMode AND gH_EV36_Status AND gIn_FlowSwitch AND gCIP_Run_Latch) OR (NOT gBlenderRun_Latch AND gH_CMD_BlenderMaintenance)) +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 49: +[11:20:26] Target: gI_ITL_PID_CIPTemp +[11:20:26] Lógica: CONTACT: gI_ITL_PID_CIPTemp +[11:20:26] Condición: gI_ITL_PID_CIPTemp +[11:20:26] ❌ Sin llamadas +[11:20:26] Red 51: +[11:20:26] Comentario: Llamada a función: ??? +[11:20:26] Target: mDummy +[11:20:26] Lógica: FUNCTION_BLOCK: ??? inputs: [] +[11:20:26] Condición: ???() +[11:20:26] ✅ Llamadas: 1 +[11:20:26] 1. FUNCTION_BLOCK: ??? +[11:20:26] Red 52: +[11:20:26] Comentario: Llamada a función: _FBD_PROGRAM +[11:20:26] Target: mDummy +[11:20:26] Lógica: FUNCTION_BLOCK: _FBD_PROGRAM inputs: [] +[11:20:26] Condición: _FBD_PROGRAM() +[11:20:26] ✅ Llamadas: 1 +[11:20:26] 1. FUNCTION_BLOCK: _FBD_PROGRAM +[11:20:26] Red 53: +[11:20:26] Comentario: Llamada a función: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] Target: mDummy +[11:20:26] Lógica: ACTION_CALL: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] Condición: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] ✅ Llamadas: 1 +[11:20:26] 1. ACTION_CALL: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] Red 50: +[11:20:26] Target: mDummy +[11:20:26] Lógica: ACTION_CALL: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] Condición: Blender_PID_Ctrl_Loop.SaveValveOut +[11:20:26] ❌ Sin llamadas +[11:20:26] === Optimizando expresiones con SymPy (forzando DNF para LAD) === +[11:20:26] Optimizando Red 2: +[11:20:26] Expresión original: _FBD_PROGRAM__ +[11:20:26] Simplificada: _FBD_PROGRAM__ +[11:20:26] DNF (forma LAD preferida): _FBD_PROGRAM__ +[11:20:26] Optimizando Red 1: +[11:20:26] Expresión original: ~gManual_PID_H2O & ~gManual_PID_SYR & ~gStopBlendCarboError & ~gWaterRecipe & (gBlendErrorEn | gBlenderBlending) +[11:20:26] Simplificada: ~gManual_PID_H2O & ~gManual_PID_SYR & ~gStopBlendCarboError & ~gWaterRecipe & (gBlendErrorEn | gBlenderBlending) +[11:20:26] DNF (forma LAD preferida): (gBlendErrorEn & ~gManual_PID_H2O & ~gManual_PID_SYR & ~gStopBlendCarboError & ~gWaterRecipe) | (gBlenderBlending & ~gManual_PID_H2O & ~gManual_PID_SYR & ~gStopBlendCarboError & ~gWaterRecipe) +[11:20:26] Post-procesada: ~gManual_PID_H2O & ~gManual_PID_SYR & ~gStopBlendCarboError & ~gWaterRecipe & (gBlendErrorEn | gBlenderBlending) +[11:20:26] Optimizando Red 3: +[11:20:26] Expresión original: ~gManual_PID_CO2 & ~gStopBlendCarboError & ~gWorkshopTest & (gBlenderBlending | gCarboCO2ErrorEn) & (gCarboStillProduct | gH_Blender_OPT_DoubleDeair) +[11:20:26] Simplificada: ~gManual_PID_CO2 & ~gStopBlendCarboError & ~gWorkshopTest & (gBlenderBlending | gCarboCO2ErrorEn) & (gCarboStillProduct | gH_Blender_OPT_DoubleDeair) +[11:20:26] DNF (forma LAD preferida): (gBlenderBlending & gCarboStillProduct & ~gManual_PID_CO2 & ~gStopBlendCarboError & ~gWorkshopTest) | (gBlenderBlending & gH_Blender_OPT_DoubleDeair & ~gManual_PID_CO2 & ~gStopBlendCarboError & ~gWorkshopTest) | (gCarboCO2ErrorEn & gCarboStillProduct & ~gManual_PID_CO2 & ~gStopBlendCarboError & ~gWorkshopTest) | (gCarboCO2ErrorEn & gH_Blender_OPT_DoubleDeair & ~gManual_PID_CO2 & ~gStopBlendCarboError & ~gWorkshopTest) +[11:20:26] Post-procesada: ~gManual_PID_CO2 & ~gStopBlendCarboError & ~gWorkshopTest & (gBlenderBlending | gCarboCO2ErrorEn) & (gCarboStillProduct | gH_Blender_OPT_DoubleDeair) +[11:20:26] Optimizando Red 4: +[11:20:26] Expresión original: ~gAlwaysOff +[11:20:26] Simplificada: ~gAlwaysOff +[11:20:26] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:26] Optimizando Red 5: +[11:20:26] Expresión original: ~gAlwaysOff +[11:20:26] Simplificada: ~gAlwaysOff +[11:20:26] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:26] Optimizando Red 6: +[11:20:26] Expresión original: ~gAlwaysOff +[11:20:26] Simplificada: ~gAlwaysOff +[11:20:26] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:26] Optimizando Red 7: +[11:20:26] Expresión original: gBlenderBlending | gBlenderCIPMode | (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (~gRinseCloseVM1 & (gBlenderRinse_Running | gProdPipeRunOut_Running | gProdTankRunOut_Running)) +[11:20:27] Simplificada: gBlenderBlending | gBlenderCIPMode | (gBlenderRinse_Running & ~gRinseCloseVM1) | (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gProdPipeRunOut_Running & ~gRinseCloseVM1) | (gProdTankRunOut_Running & ~gRinseCloseVM1) +[11:20:27] DNF (forma LAD preferida): gBlenderBlending | gBlenderCIPMode | (gBlenderRinse_Running & ~gRinseCloseVM1) | (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gProdPipeRunOut_Running & ~gRinseCloseVM1) | (gProdTankRunOut_Running & ~gRinseCloseVM1) +[11:20:27] Optimizando Red 8: +[11:20:27] Expresión original: gI_ITL_PID_H2O +[11:20:27] Simplificada: gI_ITL_PID_H2O +[11:20:27] DNF (forma LAD preferida): gI_ITL_PID_H2O +[11:20:27] Optimizando Red 9: +[11:20:27] Expresión original: gPID_H2O_Enabled & mH2OPIDEn__ +[11:20:27] Simplificada: gPID_H2O_Enabled & mH2OPIDEn__ +[11:20:27] DNF (forma LAD preferida): gPID_H2O_Enabled & mH2OPIDEn__ +[11:20:27] Optimizando Red 10: +[11:20:27] Expresión original: ~gAlwaysOff +[11:20:27] Simplificada: ~gAlwaysOff +[11:20:27] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:27] Optimizando Red 11: +[11:20:27] Expresión original: ~gAlwaysOff +[11:20:27] Simplificada: ~gAlwaysOff +[11:20:27] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:27] Optimizando Red 12: +[11:20:27] Expresión original: ~gAlwaysOff +[11:20:27] Simplificada: ~gAlwaysOff +[11:20:27] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:27] Optimizando Red 13: +[11:20:27] Expresión original: gBlenderCIPMode | (gBlenderBlending & ~gWaterRecipe) | (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (~gRinseCloseVM2 & (gBlenderRinse_Running | gProdPipeRunOut_Running | gProdTankRunOut_Running)) +[11:20:27] Simplificada: gBlenderCIPMode | (gBlenderBlending & ~gWaterRecipe) | (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (~gRinseCloseVM2 & (gBlenderRinse_Running | gProdPipeRunOut_Running | gProdTankRunOut_Running)) +[11:20:27] DNF (forma LAD preferida): gBlenderCIPMode | (gBlenderBlending & ~gWaterRecipe) | (gBlenderRinse_Running & ~gRinseCloseVM2) | (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gProdPipeRunOut_Running & ~gRinseCloseVM2) | (gProdTankRunOut_Running & ~gRinseCloseVM2) +[11:20:27] Optimizando Red 14: +[11:20:27] Expresión original: gI_ITL_PID_SYR +[11:20:27] Simplificada: gI_ITL_PID_SYR +[11:20:27] DNF (forma LAD preferida): gI_ITL_PID_SYR +[11:20:27] Optimizando Red 15: +[11:20:27] Expresión original: gPID_SYR_Enabled & mSyrPIDEn__ +[11:20:27] Simplificada: gPID_SYR_Enabled & mSyrPIDEn__ +[11:20:27] DNF (forma LAD preferida): gPID_SYR_Enabled & mSyrPIDEn__ +[11:20:27] Optimizando Red 16: +[11:20:27] Expresión original: ~gAlwaysOff +[11:20:27] Simplificada: ~gAlwaysOff +[11:20:27] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:27] Optimizando Red 17: +[11:20:27] Expresión original: ~gAlwaysOff +[11:20:27] Simplificada: ~gAlwaysOff +[11:20:27] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:27] Optimizando Red 18: +[11:20:27] Expresión original: ~gAlwaysOff +[11:20:27] Simplificada: ~gAlwaysOff +[11:20:27] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:27] Optimizando Red 19: +[11:20:27] Expresión original: (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (~gWorkshopTest & (gP_CarboPipe_En | (gBlenderCIPMode & gP_CIP_CO2_Inj) | (gBlenderBlending & ~gH_Blender_OPT_RemoteInjection & (gCarboStillProduct | gH_Blender_OPT_DoubleDeair)))) +[11:20:27] Simplificada: (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (~gWorkshopTest & (gBlenderBlending | gBlenderCIPMode | gP_CarboPipe_En) & (gBlenderBlending | gP_CIP_CO2_Inj | gP_CarboPipe_En) & (gBlenderCIPMode | gP_CarboPipe_En | ~gH_Blender_OPT_RemoteInjection) & (gP_CIP_CO2_Inj | gP_CarboPipe_En | ~gH_Blender_OPT_RemoteInjection) & (gBlenderCIPMode | gCarboStillProduct | gH_Blender_OPT_DoubleDeair | gP_CarboPipe_En) & (gCarboStillProduct | gH_Blender_OPT_DoubleDeair | gP_CIP_CO2_Inj | gP_CarboPipe_En)) +[11:20:27] DNF (forma LAD preferida): (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderCIPMode & gP_CIP_CO2_Inj & ~gWorkshopTest) | (gBlenderCIPMode & gP_CarboPipe_En & ~gWorkshopTest) | (gCarboStillProduct & gP_CarboPipe_En & ~gWorkshopTest) | (gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gWorkshopTest) | (gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gP_CIP_CO2_Inj & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gP_CIP_CO2_Inj & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gWorkshopTest) | (gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderCIPMode & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gWorkshopTest) | (gCarboStillProduct & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gH_Blender_OPT_DoubleDeair & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gCarboStillProduct & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gP_CIP_CO2_Inj & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gCarboStillProduct & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gCarboStillProduct & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gBlenderCIPMode & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderBlending & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) | (gBlenderCIPMode & gCarboStillProduct & gH_Blender_OPT_DoubleDeair & gP_CIP_CO2_Inj & gP_CarboPipe_En & ~gH_Blender_OPT_RemoteInjection & ~gWorkshopTest) +[11:20:28] Optimizando Red 20: +[11:20:28] Expresión original: gI_ITL_PID_CO2 +[11:20:28] Simplificada: gI_ITL_PID_CO2 +[11:20:28] DNF (forma LAD preferida): gI_ITL_PID_CO2 +[11:20:28] Optimizando Red 21: +[11:20:28] Expresión original: gPID_CarboCO2_Enabled & mCO2PIDEn__ +[11:20:28] Simplificada: gPID_CarboCO2_Enabled & mCO2PIDEn__ +[11:20:28] DNF (forma LAD preferida): gPID_CarboCO2_Enabled & mCO2PIDEn__ +[11:20:28] Optimizando Red 23: +[11:20:28] Expresión original: _FBD_PROGRAM__ +[11:20:28] Simplificada: _FBD_PROGRAM__ +[11:20:28] DNF (forma LAD preferida): _FBD_PROGRAM__ +[11:20:28] Optimizando Red 24: +[11:20:28] Expresión original: _FBD_PROGRAM__ +[11:20:28] Simplificada: _FBD_PROGRAM__ +[11:20:28] DNF (forma LAD preferida): _FBD_PROGRAM__ +[11:20:28] Optimizando Red 22: +[11:20:28] Expresión original: gAlwaysOff +[11:20:28] Simplificada: gAlwaysOff +[11:20:28] DNF (forma LAD preferida): gAlwaysOff +[11:20:28] Optimizando Red 25: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 26: +[11:20:28] Expresión original: gAlwaysOff +[11:20:28] Simplificada: gAlwaysOff +[11:20:28] DNF (forma LAD preferida): gAlwaysOff +[11:20:28] Optimizando Red 27: +[11:20:28] Expresión original: gProdTankPress_Running | (gManual_PID_PressCO2 & ~gBlenderCIPMode) +[11:20:28] Simplificada: gProdTankPress_Running | (gManual_PID_PressCO2 & ~gBlenderCIPMode) +[11:20:28] DNF (forma LAD preferida): gProdTankPress_Running | (gManual_PID_PressCO2 & ~gBlenderCIPMode) +[11:20:28] Optimizando Red 28: +[11:20:28] Expresión original: gI_ITL_PID_PressCO2 +[11:20:28] Simplificada: gI_ITL_PID_PressCO2 +[11:20:28] DNF (forma LAD preferida): gI_ITL_PID_PressCO2 +[11:20:28] Optimizando Red 30: +[11:20:28] Expresión original: _FBD_PROGRAM__ +[11:20:28] Simplificada: _FBD_PROGRAM__ +[11:20:28] DNF (forma LAD preferida): _FBD_PROGRAM__ +[11:20:28] Optimizando Red 29: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 31: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 32: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 33: +[11:20:28] Expresión original: gManual_PID_SYR_Level | gP_EV03 | (~gCIPSyrupStopLevel & (gBlenderCIPMode | gBlenderRinseMode)) | (gBlenderProdMode & ~gBlenderRinseMode & ~gWaterRecipe & (gProdPipeRunOut_Running | gSyrupTankLoading | (gInSyrRoomOk & (gSyrLineMFMPrep_Running | gSyrMFMStartUp_Running)) | (gBlenderRun_Latch & (gSyrRunOut_Latch | ~gFastChangeOverActivated | (gFirstProd_Latch & gSyrLineMFMPrep_Done))))) +[11:20:28] Simplificada: gManual_PID_SYR_Level | gP_EV03 | (~gCIPSyrupStopLevel & (gBlenderCIPMode | gBlenderRinseMode)) | (gBlenderProdMode & ~gBlenderRinseMode & ~gWaterRecipe & (gProdPipeRunOut_Running | gSyrupTankLoading | (gInSyrRoomOk & (gSyrLineMFMPrep_Running | gSyrMFMStartUp_Running)) | (gBlenderRun_Latch & (gFirstProd_Latch | gSyrRunOut_Latch | ~gFastChangeOverActivated) & (gSyrLineMFMPrep_Done | gSyrRunOut_Latch | ~gFastChangeOverActivated)))) +[11:20:28] ADVERTENCIA: Expresión muy compleja (17 símbolos, complejidad 376) +[11:20:28] Saltando conversión DNF por rendimiento - usando simplificación básica +[11:20:28] Optimizando Red 34: +[11:20:28] Expresión original: gI_ITL_PID_SYR_Level +[11:20:28] Simplificada: gI_ITL_PID_SYR_Level +[11:20:28] DNF (forma LAD preferida): gI_ITL_PID_SYR_Level +[11:20:28] Optimizando Red 35: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 36: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 37: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 38: +[11:20:28] Expresión original: gPID_WaterTemp_Enabled & ~gPID_WaterTemp_EnInt +[11:20:28] Simplificada: gPID_WaterTemp_Enabled & ~gPID_WaterTemp_EnInt +[11:20:28] DNF (forma LAD preferida): gPID_WaterTemp_Enabled & ~gPID_WaterTemp_EnInt +[11:20:28] Optimizando Red 39: +[11:20:28] Expresión original: gI_ITL_PID_TempWater +[11:20:28] Simplificada: gI_ITL_PID_TempWater +[11:20:28] DNF (forma LAD preferida): gI_ITL_PID_TempWater +[11:20:28] Optimizando Red 40: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 41: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 42: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 43: +[11:20:28] Expresión original: gPID_ProdTemp_Enabled & ~gPID_ProdTemp_EnInt +[11:20:28] Simplificada: gPID_ProdTemp_Enabled & ~gPID_ProdTemp_EnInt +[11:20:28] DNF (forma LAD preferida): gPID_ProdTemp_Enabled & ~gPID_ProdTemp_EnInt +[11:20:28] Optimizando Red 44: +[11:20:28] Expresión original: gI_ITL_PID_TempProd +[11:20:28] Simplificada: gI_ITL_PID_TempProd +[11:20:28] DNF (forma LAD preferida): gI_ITL_PID_TempProd +[11:20:28] Optimizando Red 45: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 46: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 47: +[11:20:28] Expresión original: ~gAlwaysOff +[11:20:28] Simplificada: ~gAlwaysOff +[11:20:28] DNF (forma LAD preferida): ~gAlwaysOff +[11:20:28] Optimizando Red 48: +[11:20:28] Expresión original: (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_EV36_Status & gIn_FlowSwitch & (gManual_PID_CIPTemp | gP_CIP_Temp_En)) +[11:20:28] Simplificada: (gBlenderCIPMode | gH_CMD_BlenderMaintenance) & (gCIP_Run_Latch | gH_CMD_BlenderMaintenance) & (gH_CMD_BlenderMaintenance | gH_EV36_Status) & (gH_CMD_BlenderMaintenance | gIn_FlowSwitch) & (gBlenderCIPMode | ~gBlenderRun_Latch) & (gCIP_Run_Latch | ~gBlenderRun_Latch) & (gH_EV36_Status | ~gBlenderRun_Latch) & (gIn_FlowSwitch | ~gBlenderRun_Latch) & (gH_CMD_BlenderMaintenance | gManual_PID_CIPTemp | gP_CIP_Temp_En) & (gManual_PID_CIPTemp | gP_CIP_Temp_En | ~gBlenderRun_Latch) +[11:20:29] DNF (forma LAD preferida): (gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gH_EV36_Status & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gIn_FlowSwitch & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gH_EV36_Status & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gH_EV36_Status & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gH_EV36_Status & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp) | (gBlenderCIPMode & gCIP_Run_Latch & gH_EV36_Status & gIn_FlowSwitch & gP_CIP_Temp_En) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gH_EV36_Status & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gH_EV36_Status & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gH_EV36_Status & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gP_CIP_Temp_En) | (gBlenderCIPMode & gCIP_Run_Latch & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_EV36_Status & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gH_EV36_Status & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) | (gBlenderCIPMode & gCIP_Run_Latch & gH_CMD_BlenderMaintenance & gH_EV36_Status & gIn_FlowSwitch & gManual_PID_CIPTemp & gP_CIP_Temp_En & ~gBlenderRun_Latch) +[11:20:30] Post-procesada: (gBlenderCIPMode | gH_CMD_BlenderMaintenance) & (gCIP_Run_Latch | gH_CMD_BlenderMaintenance) & (gH_CMD_BlenderMaintenance | gH_EV36_Status) & (gH_CMD_BlenderMaintenance | gIn_FlowSwitch) & (gBlenderCIPMode | ~gBlenderRun_Latch) & (gCIP_Run_Latch | ~gBlenderRun_Latch) & (gH_EV36_Status | ~gBlenderRun_Latch) & (gIn_FlowSwitch | ~gBlenderRun_Latch) & (gH_CMD_BlenderMaintenance | gManual_PID_CIPTemp | gP_CIP_Temp_En) & (gManual_PID_CIPTemp | gP_CIP_Temp_En | ~gBlenderRun_Latch) +[11:20:30] Optimizando Red 49: +[11:20:30] Expresión original: gI_ITL_PID_CIPTemp +[11:20:30] Simplificada: gI_ITL_PID_CIPTemp +[11:20:30] DNF (forma LAD preferida): gI_ITL_PID_CIPTemp +[11:20:30] Optimizando Red 51: +[11:20:30] Expresión original: _____ +[11:20:30] Simplificada: _____ +[11:20:30] DNF (forma LAD preferida): _____ +[11:20:30] Optimizando Red 52: +[11:20:30] Expresión original: _FBD_PROGRAM__ +[11:20:30] Simplificada: _FBD_PROGRAM__ +[11:20:30] DNF (forma LAD preferida): _FBD_PROGRAM__ +[11:20:30] Optimizando Red 53: +[11:20:30] Expresión original: CALL_Blender_PID_Ctrl_Loop_SaveValveOut +[11:20:30] Simplificada: CALL_Blender_PID_Ctrl_Loop_SaveValveOut +[11:20:30] DNF (forma LAD preferida): CALL_Blender_PID_Ctrl_Loop_SaveValveOut +[11:20:30] Optimizando Red 50: +[11:20:30] Expresión original: CALL_Blender_PID_Ctrl_Loop_SaveValveOut +[11:20:30] Simplificada: CALL_Blender_PID_Ctrl_Loop_SaveValveOut +[11:20:30] DNF (forma LAD preferida): CALL_Blender_PID_Ctrl_Loop_SaveValveOut +[11:20:30] === Analizando agrupación de condiciones === +[11:20:30] Analizando 53 networks para agrupación: +[11:20:33] Red 1 y Red 3 comparten: 2 símbolos comunes +[11:20:33] Red 1 y Red 13 comparten: 2 símbolos comunes +[11:20:36] Red 3 y Red 19 comparten: 4 símbolos comunes +[11:20:41] Red 4 y Red 22 son complementarias +[11:20:41] Red 4 y Red 26 son complementarias +[11:20:43] Red 5 y Red 22 son complementarias +[11:20:43] Red 5 y Red 26 son complementarias +[11:20:45] Red 6 y Red 22 son complementarias +[11:20:45] Red 6 y Red 26 son complementarias +[11:20:47] Red 7 y Red 13 comparten: 7 símbolos comunes +[11:20:49] Red 7 y Red 19 comparten: 4 símbolos comunes +[11:20:54] Red 7 y Red 33 comparten: 3 símbolos comunes +[11:21:00] Red 7 y Red 48 comparten: 3 símbolos comunes +[11:21:05] Red 10 y Red 22 son complementarias +[11:21:05] Red 10 y Red 26 son complementarias +[11:21:07] Red 11 y Red 22 son complementarias +[11:21:07] Red 11 y Red 26 son complementarias +[11:21:08] Red 12 y Red 22 son complementarias +[11:21:08] Red 12 y Red 26 son complementarias +[11:21:08] Red 13 y Red 19 comparten: 4 símbolos comunes +[11:21:09] Red 13 y Red 33 comparten: 4 símbolos comunes +[11:21:09] Red 13 y Red 48 comparten: 3 símbolos comunes +[11:21:13] Red 16 y Red 22 son complementarias +[11:21:13] Red 16 y Red 26 son complementarias +[11:21:14] Red 17 y Red 22 son complementarias +[11:21:14] Red 17 y Red 26 son complementarias +[11:21:15] Red 18 y Red 22 son complementarias +[11:21:15] Red 18 y Red 26 son complementarias +[11:21:26] Red 19 y Red 33 comparten: 2 símbolos comunes +[11:21:38] Red 19 y Red 48 comparten: 3 símbolos comunes +[11:21:45] Red 22 y Red 25 son complementarias +[11:21:45] Red 22 y Red 29 son complementarias +[11:21:45] Red 22 y Red 31 son complementarias +[11:21:45] Red 22 y Red 32 son complementarias +[11:21:45] Red 22 y Red 35 son complementarias +[11:21:45] Red 22 y Red 36 son complementarias +[11:21:45] Red 22 y Red 37 son complementarias +[11:21:45] Red 22 y Red 40 son complementarias +[11:21:45] Red 22 y Red 41 son complementarias +[11:21:45] Red 22 y Red 42 son complementarias +[11:21:45] Red 22 y Red 45 son complementarias +[11:21:45] Red 22 y Red 46 son complementarias +[11:21:45] Red 22 y Red 47 son complementarias +[11:21:46] Red 25 y Red 26 son complementarias +[11:21:46] Red 26 y Red 29 son complementarias +[11:21:46] Red 26 y Red 31 son complementarias +[11:21:46] Red 26 y Red 32 son complementarias +[11:21:46] Red 26 y Red 35 son complementarias +[11:21:46] Red 26 y Red 36 son complementarias +[11:21:46] Red 26 y Red 37 son complementarias +[11:21:46] Red 26 y Red 40 son complementarias +[11:21:46] Red 26 y Red 41 son complementarias +[11:21:46] Red 26 y Red 42 son complementarias +[11:21:46] Red 26 y Red 45 son complementarias +[11:21:46] Red 26 y Red 46 son complementarias +[11:21:46] Red 26 y Red 47 son complementarias +[11:21:49] Red 33 y Red 48 comparten: 2 símbolos comunes +[11:21:55] Generando código SCL... +[11:21:55] 🔧 GENERANDO CÓDIGO - Red 2 tiene 1 llamadas +[11:21:55] 🔧 Generando 1 llamadas para Red 2 +[11:21:55] 🔧 Procesando: FUNCTION_BLOCK - _FBD_PROGRAM +[11:21:55] 🔧 Código generado: _FBD_PROGRAM(); // Sin info de interfaz +[11:21:55] 🔧 GENERANDO CÓDIGO - Red 23 tiene 1 llamadas +[11:21:55] 🔧 Generando 1 llamadas para Red 23 +[11:21:55] 🔧 Procesando: FUNCTION_BLOCK - _FBD_PROGRAM +[11:21:55] 🔧 Código generado: _FBD_PROGRAM(); // Sin info de interfaz +[11:21:55] 🔧 GENERANDO CÓDIGO - Red 24 tiene 1 llamadas +[11:21:55] 🔧 Generando 1 llamadas para Red 24 +[11:21:55] 🔧 Procesando: FUNCTION_BLOCK - _FBD_PROGRAM +[11:21:55] 🔧 Código generado: _FBD_PROGRAM(); // Sin info de interfaz +[11:21:55] 🔧 GENERANDO CÓDIGO - Red 30 tiene 1 llamadas +[11:21:55] 🔧 Generando 1 llamadas para Red 30 +[11:21:55] 🔧 Procesando: FUNCTION_BLOCK - _FBD_PROGRAM +[11:21:55] 🔧 Código generado: _FBD_PROGRAM(); // Sin info de interfaz +[11:21:55] 🔧 GENERANDO CÓDIGO - Red 51 tiene 1 llamadas +[11:21:55] 🔧 Generando 1 llamadas para Red 51 +[11:21:55] 🔧 Procesando: FUNCTION_BLOCK - ??? +[11:21:55] 🔧 Código generado: ???(); // Sin info de interfaz +[11:21:55] 🔧 GENERANDO CÓDIGO - Red 52 tiene 1 llamadas +[11:21:55] 🔧 Generando 1 llamadas para Red 52 +[11:21:55] 🔧 Procesando: FUNCTION_BLOCK - _FBD_PROGRAM +[11:21:55] 🔧 Código generado: _FBD_PROGRAM(); // Sin info de interfaz +[11:21:55] 🔧 GENERANDO CÓDIGO - Red 53 tiene 1 llamadas +[11:21:55] 🔧 Generando 1 llamadas para Red 53 +[11:21:55] 🔧 Procesando: ACTION_CALL - Blender_PID_Ctrl_Loop.SaveValveOut +[11:21:55] 🔧 Código generado: (* Llamada no reconocida: ACTION_CALL - Blender_PID_Ctrl_Loop.SaveValveOut *) +[11:21:55] 🎯 Generando llamada a función con interfaz conocida: ReadPeripherial +[11:21:55] Parámetros: i_Periferial := AI_CIPHeaterTemperature, i_MaxAnalog := 100.0, i_MinAnalog := 0.0, i_PerMin := 0, i_PerMax := gAnalogMaxValue +[11:21:55] Salida: mRealTemp +[11:21:55] 🎯 Generando llamada a función con interfaz conocida: WritePeripherial +[11:21:55] Parámetros: i_Analog := gIn_C1_Conductivity_Caustic, i_MaxAnalog := 200.0, i_MinAnalog := 0.0, i_PerMin := 0, i_PerMax := gAnalogMaxValue +[11:21:55] Salida: AO_CIPCausticCond +[11:21:55] ✓ Guardado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat/scl\BLENDER_PID_CTRL_LOOP.scl +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BLENDER_PROCEDURECALL.EXP - Ya existe BLENDER_PROCEDURECALL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BLENDER_RUNCONTROL.EXP - Ya existe BLENDER_RUNCONTROL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BLENDER_VARIABLES.EXP - Ya existe BLENDER_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BLENDFILLRECSTRUCT.EXP - Ya existe BLENDFILLRECSTRUCT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BLENDFILLSENDSTRUCT.EXP - Ya existe BLENDFILLSENDSTRUCT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BLENDFILLSYSTEM_STARTUP.EXP - Ya existe BLENDFILLSYSTEM_STARTUP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BRIXTRACKING.EXP - Ya existe BRIXTRACKING.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BYTES_TO_DWORD.EXP - Ya existe BYTES_TO_DWORD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: BYTES_TO_WORD.EXP - Ya existe BYTES_TO_WORD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CALC_INJPRESS.EXP - Ya existe CALC_INJPRESS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CARBOWATERLINE.EXP - Ya existe CARBOWATERLINE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CENTRALCIP_CTRL.EXP - Ya existe CENTRALCIP_CTRL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CETRIFUGAL_HEAD.EXP - Ya existe CETRIFUGAL_HEAD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIPRECEIVESTRUCT.EXP - Ya existe CIPRECEIVESTRUCT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIPSENDSTRUCT.EXP - Ya existe CIPSENDSTRUCT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIP_CVQ.EXP - Ya existe CIP_CVQ.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIP_LINK_TYPE.EXP - Ya existe CIP_LINK_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIP_LIST_ELEMENT.EXP - Ya existe CIP_LIST_ELEMENT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIP_MAIN.EXP - Ya existe CIP_MAIN.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIP_PROGRAM_VARIABLES.EXP - Ya existe CIP_PROGRAM_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIP_SIMPLE_TYPE.EXP - Ya existe CIP_SIMPLE_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIP_STEP_TYPE.EXP - Ya existe CIP_STEP_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CIP_WAITEVENT_TYPE.EXP - Ya existe CIP_WAITEVENT_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CLEANBOOLARRAY.EXP - Ya existe CLEANBOOLARRAY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CLOCK_SIGNAL.EXP - Ya existe CLOCK_SIGNAL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CLOCK_VARIABLES.EXP - Ya existe CLOCK_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CO2EQPRESS.EXP - Ya existe CO2EQPRESS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CO2INJPRESSURE.EXP - Ya existe CO2INJPRESSURE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CO2_SOLUBILITY.EXP - Ya existe CO2_SOLUBILITY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CONVERTREAL.EXP - Ya existe CONVERTREAL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CVQ_0_6_PERC.EXP - Ya existe CVQ_0_6_PERC.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: CVQ_1P7_8_PERC.EXP - Ya existe CVQ_1P7_8_PERC.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DATA_FROM_CIP.EXP - Ya existe DATA_FROM_CIP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DATA_TO_CIP.EXP - Ya existe DATA_TO_CIP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DEAIRCO2TEMPCOMP.EXP - Ya existe DEAIRCO2TEMPCOMP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DEAIREATIONVALVE.EXP - Ya existe DEAIREATIONVALVE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DEAIREATOR_STARTUP.EXP - Ya existe DEAIREATOR_STARTUP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DELAY.EXP - Ya existe DELAY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DELTAP.EXP - Ya existe DELTAP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DENSIMETER_CALIBRATION.EXP - Ya existe DENSIMETER_CALIBRATION.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DERIVE.EXP - Ya existe DERIVE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DEVICENET_VARIABLES.EXP - Ya existe DEVICENET_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: DWORD_TO_BYTES.EXP - Ya existe DWORD_TO_BYTES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: EXEC_SIMPLE_CIP.EXP - Ya existe EXEC_SIMPLE_CIP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FASTRINSE.EXP - Ya existe FASTRINSE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FB41_PIDCONTROLLER.EXP - Ya existe FB41_PIDCONTROLLER.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FC_CONTROL_WORD.EXP - Ya existe FC_CONTROL_WORD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FC_STATUS_WORD.EXP - Ya existe FC_STATUS_WORD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FEEDFORWARD.EXP - Ya existe FEEDFORWARD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FILLERHEAD.EXP - Ya existe FILLERHEAD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FILLERRECEIVESTRUCT.EXP - Ya existe FILLERRECEIVESTRUCT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FILLERRINSE.EXP - Ya existe FILLERRINSE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FILLERRINSETANK_CTRL.EXP - Ya existe FILLERRINSETANK_CTRL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FILLERSENDSTRUCT.EXP - Ya existe FILLERSENDSTRUCT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FILLER_CONTROL.EXP - Ya existe FILLER_CONTROL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FILLINGTIME.EXP - Ya existe FILLINGTIME.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FIRSTPRODUCTION.EXP - Ya existe FIRSTPRODUCTION.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FLOW_TO_PRESS_LOSS.EXP - Ya existe FLOW_TO_PRESS_LOSS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FREQ_TO_MMH2O.EXP - Ya existe FREQ_TO_MMH2O.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: FRICTIONLOSS.EXP - Ya existe FRICTIONLOSS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: GETPRODBRIXCO2_FROMANALOGINPUT.EXP - Ya existe GETPRODBRIXCO2_FROMANALOGINPUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: GETPRODO2_FROMANALOGINPUT.EXP - Ya existe GETPRODO2_FROMANALOGINPUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: GLOBAL_ALARMS.EXP - Ya existe GLOBAL_ALARMS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: GLOBAL_VARIABLES_IN_OUT.EXP - Ya existe GLOBAL_VARIABLES_IN_OUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: HMI_ALARMS.EXP - Ya existe HMI_ALARMS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: HMI_BLENDER_PARAMETERS.EXP - Ya existe HMI_BLENDER_PARAMETERS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: HMI_IO_SHOWING.EXP - Ya existe HMI_IO_SHOWING.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: HMI_LOCAL_CIP_VARIABLES.EXP - Ya existe HMI_LOCAL_CIP_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: HMI_SERVICE.EXP - Ya existe HMI_SERVICE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: HMI_VARIABLES_CMD.EXP - Ya existe HMI_VARIABLES_CMD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: HMI_VARIABLES_STATUS.EXP - Ya existe HMI_VARIABLES_STATUS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: INPUT.EXP - Ya existe INPUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: INPUT_CIP_SIGNALS.EXP - Ya existe INPUT_CIP_SIGNALS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: INPUT_SIGNAL.EXP - Ya existe INPUT_SIGNAL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: INTEGRAL.EXP - Ya existe INTEGRAL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: LOCALCIP_CTRL.EXP - Ya existe LOCALCIP_CTRL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: LOWPASSFILTER.EXP - Ya existe LOWPASSFILTER.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: LOWPASSFILTEROPT.EXP - Ya existe LOWPASSFILTEROPT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MASELLI.EXP - Ya existe MASELLI.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MASELLIOPTO_TYPE.EXP - Ya existe MASELLIOPTO_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MASELLIUC05_TYPE.EXP - Ya existe MASELLIUC05_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MASELLIUR22_TYPE.EXP - Ya existe MASELLIUR22_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MASELLI_CONTROL.EXP - Ya existe MASELLI_CONTROL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MAXCARBOCO2_VOL.EXP - Ya existe MAXCARBOCO2_VOL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MESSAGESCROLL.EXP - Ya existe MESSAGESCROLL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MESSAGE_SCROLL.EXP - Ya existe MESSAGE_SCROLL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MFMANALOG_VALUES.EXP - Ya existe MFMANALOG_VALUES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MFM_REAL_STRUCT.EXP - Ya existe MFM_REAL_STRUCT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MMH2O_TO_FREQ.EXP - Ya existe MMH2O_TO_FREQ.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MODVALVEFAULT.EXP - Ya existe MODVALVEFAULT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MOVEARRAY.EXP - Ya existe MOVEARRAY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MPDS1000.EXP - Ya existe MPDS1000.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MPDS1000_CONTROL.EXP - Ya existe MPDS1000_CONTROL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MPDS1000_TYPE.EXP - Ya existe MPDS1000_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MPDS2000.EXP - Ya existe MPDS2000.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MPDS2000_CONTROL.EXP - Ya existe MPDS2000_CONTROL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MPDS2000_TYPE.EXP - Ya existe MPDS2000_TYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MPDS_PA_CONTROL.EXP - Ya existe MPDS_PA_CONTROL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MSE_SLOPE.EXP - Ya existe MSE_SLOPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: MYVAR.EXP - Ya existe MYVAR.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: OR_ARRAYBOOL.EXP - Ya existe OR_ARRAYBOOL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: OUTPUT.EXP - Ya existe OUTPUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PARAMETERNAMETYPE.EXP - Ya existe PARAMETERNAMETYPE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PA_MPDS.EXP - Ya existe PA_MPDS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PERIPHERIAL.EXP - Ya existe PERIPHERIAL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PID_VARIABLES.EXP - Ya existe PID_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PLC CONFIGURATION.EXP - Ya existe PLC CONFIGURATION.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PNEUMATIC_VALVE_CTRL.EXP - Ya existe PNEUMATIC_VALVE_CTRL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PPM_O2.EXP - Ya existe PPM_O2.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODBRIXRECOVERY.EXP - Ya existe PRODBRIXRECOVERY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODTANK_DRAIN.EXP - Ya existe PRODTANK_DRAIN.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODTANK_RUNOUT.EXP - Ya existe PRODTANK_RUNOUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODUCTAVAILABLE.EXP - Ya existe PRODUCTAVAILABLE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODUCTION_VARIABLES.EXP - Ya existe PRODUCTION_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODUCTLITERINTANK.EXP - Ya existe PRODUCTLITERINTANK.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODUCTPIPEDRAIN.EXP - Ya existe PRODUCTPIPEDRAIN.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODUCTPIPERUNOUT.EXP - Ya existe PRODUCTPIPERUNOUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODUCTQUALITY.EXP - Ya existe PRODUCTQUALITY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODUCTTANKBRIX.EXP - Ya existe PRODUCTTANKBRIX.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PRODUCTTANK_PRESSCTRL.EXP - Ya existe PRODUCTTANK_PRESSCTRL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PROFIBUS_DATA.EXP - Ya existe PROFIBUS_DATA.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PROFIBUS_NETWORK.EXP - Ya existe PROFIBUS_NETWORK.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PROFIBUS_VARIABLES.EXP - Ya existe PROFIBUS_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PULSEPRESSURE.EXP - Ya existe PULSEPRESSURE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: PUMPSCONTROL.EXP - Ya existe PUMPSCONTROL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: READANALOGIN.EXP - Ya existe READANALOGIN.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: READPERIPHERIAL.EXP - Ya existe READPERIPHERIAL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SAFETIES.EXP - Ya existe SAFETIES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SELCHECKBRIXSOURCE.EXP - Ya existe SELCHECKBRIXSOURCE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SIGNALS_INTEFACE.EXP - Ya existe SIGNALS_INTEFACE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SIGNAL_GEN.EXP - Ya existe SIGNAL_GEN.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SINUSOIDAL_SIGNAL.EXP - Ya existe SINUSOIDAL_SIGNAL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SLEWLIMIT.EXP - Ya existe SLEWLIMIT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SLIM_BLOCK.EXP - Ya existe SLIM_BLOCK.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SLIM_VARIABLES.EXP - Ya existe SLIM_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SOFTNET_VARIABLES.EXP - Ya existe SOFTNET_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SPEEDADJUST.EXP - Ya existe SPEEDADJUST.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SP_AND_P_VARIABLES.EXP - Ya existe SP_AND_P_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: STANDARD.LIB_5.6.98 09_39_02.EXP - Ya existe STANDARD.LIB_5.6.98 09_39_02.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: STATISTICALANALISYS.EXP - Ya existe STATISTICALANALISYS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYRBRIX_AUTOCORRECTION.EXP - Ya existe SYRBRIX_AUTOCORRECTION.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYRUPDENSITY.EXP - Ya existe SYRUPDENSITY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYRUPROOMCTRL.EXP - Ya existe SYRUPROOMCTRL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYRUP_LINE_MFM_PREP.EXP - Ya existe SYRUP_LINE_MFM_PREP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYRUP_MFM_STARTUP.EXP - Ya existe SYRUP_MFM_STARTUP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYRUP_RUNOUT.EXP - Ya existe SYRUP_RUNOUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYSTEMRUNOUT_VARIABLES.EXP - Ya existe SYSTEMRUNOUT_VARIABLES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYSTEM_DATAS.EXP - Ya existe SYSTEM_DATAS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: SYSTEM_RUN_OUT.EXP - Ya existe SYSTEM_RUN_OUT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: TANKLEVEL.EXP - Ya existe TANKLEVEL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: TANKLEVELTOHEIGHT.EXP - Ya existe TANKLEVELTOHEIGHT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: TASK CONFIGURATION.EXP - Ya existe TASK CONFIGURATION.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: TCPLCUTILITIES.LIB_11.12.01 09_39_02.EXP - Ya existe TCPLCUTILITIES.LIB_11.12.01 09_39_02.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: TCSYSTEM.LIB_16.9.02 09_39_02.EXP - Ya existe TCSYSTEM.LIB_16.9.02 09_39_02.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: TESTFLOWMETERS.EXP - Ya existe TESTFLOWMETERS.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: UDP_STRUCT.EXP - Ya existe UDP_STRUCT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: UV_LAMP.EXP - Ya existe UV_LAMP.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: VACUUMCTRL.EXP - Ya existe VACUUMCTRL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: VALVEFAULT.EXP - Ya existe VALVEFAULT.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: VALVEFLOW.EXP - Ya existe VALVEFLOW.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: VARIABLE_CONFIGURATION.EXP - Ya existe VARIABLE_CONFIGURATION.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: VOID.EXP - Ya existe VOID.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: WATERDENSITY.EXP - Ya existe WATERDENSITY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: WORD_TO_BYTES.EXP - Ya existe WORD_TO_BYTES.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: WRITEPERIPHERIAL.EXP - Ya existe WRITEPERIPHERIAL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _BLENDER_CTRL_MAIN.EXP - Ya existe _BLENDER_CTRL_MAIN.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _BLENDER_PID_MAIN.EXP - Ya existe _BLENDER_PID_MAIN.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _BOOLARRAY_TO_DWORD.EXP - Ya existe _BOOLARRAY_TO_DWORD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _BOOLARRAY_TO_WORD.EXP - Ya existe _BOOLARRAY_TO_WORD.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _DWORD_SWAP_BYTEARRAY.EXP - Ya existe _DWORD_SWAP_BYTEARRAY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _DWORD_TO_BOOLARRAY.EXP - Ya existe _DWORD_TO_BOOLARRAY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _FILLING_HEAD_PID_CTRL.EXP - Ya existe _FILLING_HEAD_PID_CTRL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _PUMPCONTROL.EXP - Ya existe _PUMPCONTROL.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _STEPMOVE.EXP - Ya existe _STEPMOVE.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] SALTANDO: _WORD_TO_BOOLARRAY.EXP - Ya existe _WORD_TO_BOOLARRAY.scl +[11:21:55] (usa force_regenerate: true en configuración para forzar regeneración) +[11:21:55] ============================================================ +[11:21:55] RESUMEN DE CONVERSIÓN: +[11:21:55] 📋 Funciones registradas: 42 +[11:21:55] 📋 Function Blocks registrados: 0 +[11:21:55] ✓ Exitosas: 183 +[11:21:55] ✗ Fallidas: 0 +[11:21:55] 📁 Directorio salida: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\TwinCat/scl +[11:21:55] ✓ Conversión masiva completada! +[11:21:55] Ejecución de x1_lad_converter.py finalizada (success). Duración: 0:01:29.405107. +[11:21:55] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\TwinCat\log_x1_lad_converter.txt