using System; using System.IO; using Siemens.Engineering; using Siemens.Engineering.HW.Features; class SimaticSDExporter { static void Main(string[] args) { if (args.Length < 2) { Console.WriteLine("Uso: SimaticSDExporter.exe "); return; } string projectPath = args[0]; string exportDir = args[1]; TiaPortal portal = null; Project project = null; try { // Abrir TIA Portal V20 portal = TiaPortal.Open(TiaPortalMode.WithUserInterface); Console.WriteLine("✅ TIA Portal V20 abierto"); // Abrir proyecto project = portal.Projects.Open(projectPath); Console.WriteLine($"✅ Proyecto abierto: {project.Name}"); // Buscar PLCs foreach (Device device in project.Devices) { foreach (DeviceItem deviceItem in device.DeviceItems) { if (deviceItem.GetService() != null) { var sw = deviceItem.GetService().Software; Console.WriteLine($"Procesando PLC: {deviceItem.Name}"); // Exportar bloques en SIMATIC SD foreach (var block in sw.BlockGroup.Blocks) { try { string blockExportDir = Path.Combine(exportDir, deviceItem.Name, "SIMATIC_SD"); Directory.CreateDirectory(blockExportDir); // ¡AQUÍ ESTÁ EL MÉTODO SIMATIC SD! block.ExportAsDocuments( new DirectoryInfo(blockExportDir), block.Name ); Console.WriteLine($"✅ {block.Name} exportado en SIMATIC SD"); } catch (Exception blockEx) { Console.WriteLine($"❌ Error con {block.Name}: {blockEx.Message}"); } } } } } Console.WriteLine("🎉 Exportación SIMATIC SD completada"); } catch (Exception ex) { Console.WriteLine($"❌ Error: {ex.Message}"); } finally { project?.Close(); portal?.Close(); } } }