6.6 KiB
1. Introducción
El formato SIMATIC SD (Source Document) es un formato de archivo textual, basado en YAML, introducido en TIA Portal V20. Su objetivo es modernizar la gestión de los programas de PLC (Controlador Lógico Programable), permitiendo que el código fuente de los bloques de programación sea legible tanto por humanos como por máquinas. Esto facilita enormemente la integración con sistemas de control de versiones (como Git), mejora la colaboración y permite la automatización de flujos de trabajo de desarrollo.
TIA Portal Openness es la Interfaz de Programación de Aplicaciones (API) que proporciona Siemens para interactuar programáticamente con proyectos, dispositivos y configuraciones de TIA Portal. A través de Openness, es posible automatizar diversas tareas de ingeniería, incluida la exportación de bloques de programa al formato SIMATIC SD.
Esta guía se centra en el procedimiento para exportar bloques de programación del lenguaje LAD, bloques de datos y tipos de datos PLC utilizando TIA Portal Openness con C#.
2. Requisitos Previos
Para poder utilizar la funcionalidad de exportación a SIMATIC SD mediante TIA Portal Openness y C#, es necesario cumplir con los siguientes requisitos:
-
Instalación de TIA Portal con TIA Portal Openness: Asegúrate de tener instalada una versión de TIA Portal (V20 o superior) que incluya el componente TIA Portal Openness.
-
Microsoft Visual Studio: Necesitarás Microsoft Visual Studio con el SDK de .NET Framework en la versión requerida por la API de TIA Portal Openness que estés utilizando (generalmente .NET Framework 4.8 o superior para TIA Portal V20).
-
Conocimientos de Programación: Se requieren conocimientos avanzados de programación en C# (o VB.NET) y familiaridad con las herramientas de desarrollo mencionadas.
-
Permisos de Usuario: El usuario que ejecute la aplicación C# que interactúa con TIA Portal Openness debe ser miembro del grupo de usuarios "Siemens TIA Openness" en el sistema operativo.
3. Acceso a los Bloques del Proyecto TIA Portal
TIA Portal Openness permite acceder a los bloques dentro de un proyecto de TIA Portal desde un entorno de desarrollo externo como Visual Studio. Esto se logra interactuando con la API de Openness, que expone objetos y métodos para navegar y manipular la estructura del proyecto.
La documentación de TIA Portal Openness, específicamente la sección "TIA Portal Openness API" bajo "Funciones para acceder a los datos de un dispositivo PLC", proporciona instrucciones detalladas sobre cómo establecer esta conexión y acceder a los componentes del PLC.
4. El Método ExportAsDocuments
El método clave para exportar bloques en formato SIMATIC SD es ExportAsDocuments
. Este método está disponible para varios objetos dentro de la API de Openness, principalmente para:
-
Bloques de PLC (
PlcBlock
): Permite exportar bloques de programa (FBs, FCs) y bloques de datos (DBs).- Referencia API:
M:Siemens.Engineering.SW.Blocks.PlcBlock.ExportAsDocuments(System.IO.DirectoryInfo,System.String)
- Referencia API:
-
Tipos de Datos PLC (
PlcType
): Permite exportar tipos de datos definidos por el usuario (UDTs).- Referencia API:
M:Siemens.Engineering.SW.Types.PlcType.ExportAsDocuments(System.IO.DirectoryInfo,System.String)
- Referencia API:
-
Documentos PLC Genéricos (
PlcDocument
): También existe una versión de este método para la clase basePlcDocument
.- Referencia API:
M:Siemens.Engineering.SW.PlcDocument.ExportAsDocuments(System.IO.DirectoryInfo,System.String)
- Referencia API:
4.1. Sintaxis del Método
La sintaxis general del método ExportAsDocuments
es la siguiente:
// Para un objeto PlcBlock
InstanciaDePlcBlock.ExportAsDocuments(DirectoryInfo directorioDestino, string nombreArchivoSinExtension);
// Para un objeto PlcType
InstanciaDePlcType.ExportAsDocuments(DirectoryInfo directorioDestino, string nombreArchivoSinExtension);
4.2. Parámetros
El método ExportAsDocuments
acepta dos parámetros principales:
-
directorioDestino
(System.IO.DirectoryInfo
):-
Un objeto que representa la ruta de la carpeta donde se guardarán los archivos exportados en formato SIMATIC SD.
-
Es importante asegurarse de que el directorio exista antes de llamar al método, o crearlo mediante programación si es necesario, para evitar errores.
-
-
nombreArchivoSinExtension
(string
):-
Una cadena de texto que especifica el nombre base para los archivos que se generarán.
-
TIA Portal generará dos archivos por cada bloque exportado utilizando este nombre base:
-
Un archivo con extensión
.s7dcl
(contiene el código del programa o la estructura de datos). -
Un archivo con extensión
.s7res
(almacena los comentarios y textos dependientes del idioma asociados al bloque).
-
-
Nota Importante: El nombre del bloque en TIA Portal y el
nombreArchivoSinExtension
pueden diferir. Si el nombre del bloque contiene caracteres que no son compatibles con el sistema de archivos, se debe proporcionar unnombreArchivoSinExtension
válido y diferente.
-
4.3. Resultado de la Exportación
La llamada al método ExportAsDocuments
devuelve un objeto de tipo Siemens.Engineering.SW.DocumentExportResult
. Este objeto contiene información sobre el resultado de la operación de exportación, como el estado (State
) y una lista de los documentos exportados (ExportedDocuments
) y cualquier mensaje (Messages
) generado durante el proceso.
5. Ejemplo de Código en C#
El siguiente fragmento de código muestra cómo se puede acceder a un bloque LAD llamado "Example_Block" y exportarlo en formato SIMATIC SD. Este ejemplo asume que ya se ha establecido una conexión a una instancia de TIA Portal, se ha abierto un proyecto y se tiene una referencia al objeto PlcSoftware
(representado aquí por la variable sw
).
using Siemens.Engineering;
using Siemens.Engineering.HW;
using Siemens.Engineering.SW;
using Siemens.Engineering.SW.Blocks;
using System.IO;
using System; // Para Console.WriteLine
public class SimaticSDExporter
{
// Asumimos que 'tiaPortalInstance' es una instancia de TiaPortal conectada
// y 'projectInstance' es el proyecto abierto.
// PlcSoftware plcSoftware = GetPlcSoftware(projectInstance); // Método hipotético para obtener PlcSoftware
public void ExportSingleBlock(PlcSoftware plcSoftware, string blockName, string exportDirectoryPath, string outputFileName)
{
if (plcSoftware == null)
{
Console.WriteLine("Error: El objeto PlcSoftware es nulo