60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
# generators/generate_scl_db.py
|
|
# -*- coding: utf-8 -*-
|
|
from .generator_utils import format_variable_name, generate_scl_declarations
|
|
|
|
def _generate_scl_header(data, scl_block_name):
|
|
"""Genera el encabezado SCL para DB."""
|
|
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", "")
|
|
|
|
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:")
|
|
for line in block_comment.splitlines():
|
|
scl_output.append(f"// {line}")
|
|
scl_output.append("")
|
|
scl_output.append(f'DATA_BLOCK "{scl_block_name}"') # Keyword específica
|
|
scl_output.append("{ S7_Optimized_Access := 'TRUE' }")
|
|
scl_output.append("VERSION : 0.1")
|
|
scl_output.append("")
|
|
return scl_output
|
|
|
|
def _generate_scl_interface(interface_data):
|
|
"""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")
|
|
scl_output.extend(generate_scl_declarations(static_vars, indent_level=1))
|
|
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
|
|
|
|
def generate_scl_for_db(data):
|
|
"""Genera el contenido SCL completo para un DATA_BLOCK."""
|
|
scl_output = []
|
|
scl_block_name = format_variable_name(data.get("block_name", "UnknownDB"))
|
|
|
|
# Generar cabecera
|
|
scl_output.extend(_generate_scl_header(data, scl_block_name))
|
|
|
|
# Generar interfaz
|
|
interface_data = data.get("interface", {})
|
|
scl_output.extend(_generate_scl_interface(interface_data))
|
|
|
|
# Generar cuerpo (vacío para DB)
|
|
scl_output.append("BEGIN")
|
|
scl_output.append(" // Data Blocks have no executable code")
|
|
scl_output.append("END_DATA_BLOCK")
|
|
|
|
return scl_output |