86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
# ToUpload/generators/generate_scl_db.py
|
|
# -*- coding: utf-8 -*-
|
|
# No necesita importar json/os aquí, lo hará generate_scl_declarations
|
|
from .generator_utils import format_variable_name, generate_scl_declarations
|
|
|
|
|
|
# Modificar _generate_scl_header si es necesario, pero parece ok
|
|
def _generate_scl_header(data, scl_block_name):
|
|
# ... (código sin cambios) ...
|
|
scl_output = []
|
|
block_type = data.get("block_type", "Unknown")
|
|
block_name = data.get("block_name", "UnknownBlock")
|
|
block_number = data.get("block_number")
|
|
block_comment = data.get("block_comment", "")
|
|
|
|
# Agregar línea de identificación del bloque al inicio
|
|
if block_number and block_type:
|
|
if block_type == "GlobalDB":
|
|
scl_output.append(f"// DB{block_number}")
|
|
elif block_type == "InstanceDB":
|
|
scl_output.append(f"// DB{block_number}")
|
|
else:
|
|
# Para otros tipos de DB
|
|
scl_output.append(f"// DB{block_number}")
|
|
elif block_type:
|
|
scl_output.append(f"// {block_type}")
|
|
|
|
scl_output.append(f"// Block Type: {block_type}")
|
|
if block_name != scl_block_name:
|
|
scl_output.append(f"// Block Name (Original): {block_name}")
|
|
if block_number:
|
|
scl_output.append(f"// Block Number: {block_number}")
|
|
if block_comment:
|
|
scl_output.append(f"// Block Comment:")
|
|
[scl_output.append(f"// {line}") for line in block_comment.splitlines()]
|
|
scl_output.append("")
|
|
scl_output.append(f'DATA_BLOCK "{scl_block_name}"')
|
|
scl_output.append("{ S7_Optimized_Access := 'TRUE' }")
|
|
scl_output.append("VERSION : 0.1")
|
|
scl_output.append("")
|
|
return scl_output
|
|
|
|
|
|
# Modificar _generate_scl_interface para pasar project_root_dir
|
|
def _generate_scl_interface(interface_data, project_root_dir): # <-- Nuevo argumento
|
|
"""Genera la sección VAR para DB (basada en 'Static')."""
|
|
scl_output = []
|
|
static_vars = interface_data.get("Static", [])
|
|
if static_vars:
|
|
scl_output.append("VAR")
|
|
# Pasar project_root_dir a generate_scl_declarations
|
|
scl_output.extend(
|
|
generate_scl_declarations(
|
|
static_vars, indent_level=1, project_root_dir=project_root_dir
|
|
)
|
|
) # <-- Pasar ruta raíz
|
|
scl_output.append("END_VAR")
|
|
else:
|
|
print(
|
|
"Advertencia: No se encontró sección 'Static' o está vacía en la interfaz del DB."
|
|
)
|
|
scl_output.append("VAR\nEND_VAR") # Añadir vacío
|
|
scl_output.append("")
|
|
return scl_output
|
|
|
|
|
|
# Modificar generate_scl_for_db para aceptar y pasar project_root_dir
|
|
def generate_scl_for_db(data, project_root_dir): # <-- Nuevo argumento
|
|
"""Genera el contenido SCL completo para un DATA_BLOCK."""
|
|
scl_output = []
|
|
scl_block_name = format_variable_name(data.get("block_name", "UnknownDB"))
|
|
|
|
scl_output.extend(_generate_scl_header(data, scl_block_name))
|
|
|
|
interface_data = data.get("interface", {})
|
|
# Pasar project_root_dir a _generate_scl_interface
|
|
scl_output.extend(
|
|
_generate_scl_interface(interface_data, project_root_dir)
|
|
) # <-- Pasar ruta raíz
|
|
|
|
scl_output.append("BEGIN")
|
|
scl_output.append(" // Data Blocks have no executable code")
|
|
scl_output.append("END_DATA_BLOCK")
|
|
|
|
return scl_output
|