Actualización de directorios de trabajo y logs en el script de obtención de IO de TIA Portal

- Se modificaron los directorios de trabajo en `script_config.json` y `work_dir.json` para apuntar a la nueva ubicación de los archivos del proyecto 98050.
- Se actualizaron los logs de ejecución en `log_x1.txt` y `log_x4.txt` para reflejar las nuevas fechas, duraciones y resultados de los procesos de exportación.
- Se registraron errores en `log_x4.txt` relacionados con el acceso al proyecto, indicando que ya estaba abierto por otro usuario.
This commit is contained in:
Miguel 2025-06-19 19:07:49 +02:00
parent 99e3628955
commit 26bc892243
8 changed files with 2381 additions and 20928 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,949 +1,65 @@
--- Log de Ejecución: x4.py ---
Grupo: ObtainIOFromProjectTia
Directorio de Trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\ExportTia
Inicio: 2025-06-19 16:35:31
Fin: 2025-06-19 16:44:16
Duración: 0:08:45.122899
Directorio de Trabajo: D:\Trabajo\VM\44 - 98050 - Fiera\Reporte\ExportsTia\Source
Inicio: 2025-06-19 19:05:36
Fin: 2025-06-19 19:06:33
Duración: 0:00:57.281042
Estado: SUCCESS (Código de Salida: 0)
--- SALIDA ESTÁNDAR (STDOUT) ---
--- Exportador de Referencias Cruzadas de TIA Portal ---
Versión de TIA Portal detectada: 18.0 (de la extensión .ap18)
Versión de TIA Portal detectada: 19.0 (de la extensión .ap19)
Proyecto seleccionado: C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/InLavoro/PLC/SSAE0235/_NEW/SAE235_v0.1/SAE235_v0.1.ap18
Usando directorio base de exportación: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\ExportTia
Proyecto seleccionado: D:/Trabajo/VM/44 - 98050 - Fiera/InLavoro/PLC/98050_PLC_11/98050_PLC_11.ap19
Usando directorio base de exportación: D:\Trabajo\VM\44 - 98050 - Fiera\Reporte\ExportsTia\Source
Conectando a TIA Portal V18.0...
2025-06-19 16:35:35,853 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - Start TIA Portal, please acknowledge the security dialog.
2025-06-19 16:35:35,863 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - With user interface
Conectando a TIA Portal V19.0...
2025-06-19 19:05:42,182 [1] INFO Siemens.TiaPortal.OpennessApi19.Implementations.Global OpenPortal - Start TIA Portal, please acknowledge the security dialog.
2025-06-19 19:05:42,202 [1] INFO Siemens.TiaPortal.OpennessApi19.Implementations.Global OpenPortal - With user interface
Conectado a TIA Portal.
2025-06-19 16:35:50,144 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal GetProcessId - Process id: 3904
ID del proceso del Portal: 3904
2025-06-19 16:35:50,594 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal OpenProject - Open project... C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/InLavoro/PLC/SSAE0235/_NEW/SAE235_v0.1/SAE235_v0.1.ap18
2025-06-19 16:36:03,525 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Project GetPlcs - Found plc PLC with parent name S71500/ET200MP station_1
Se encontraron 1 PLC(s). Iniciando proceso de exportación de referencias cruzadas...
2025-06-19 19:05:52,371 [1] INFO Siemens.TiaPortal.OpennessApi19.Implementations.Portal GetProcessId - Process id: 24972
ID del proceso del Portal: 24972
2025-06-19 19:05:52,710 [1] INFO Siemens.TiaPortal.OpennessApi19.Implementations.Portal OpenProject - Open project... D:/Trabajo/VM/44 - 98050 - Fiera/InLavoro/PLC/98050_PLC_11/98050_PLC_11.ap19
--- Procesando PLC: PLC ---
Ocurrió un error inesperado: OpennessAccessException: Error when calling method 'OpenWithUpgrade' of type 'Siemens.Engineering.ProjectComposition'.
[PLC: PLC] Exportando referencias cruzadas de bloques de programa...
Destino: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\ExportTia\PLC\ProgramBlocks_CR
Se encontraron 380 bloques de programa.
Procesando bloque: _CYCL_EXC...
Exportando referencias cruzadas para _CYCL_EXC...
Procesando bloque: COMPLETE RESTART...
Exportando referencias cruzadas para COMPLETE RESTART...
Procesando bloque: I/O_FLT1...
Exportando referencias cruzadas para I/O_FLT1...
Procesando bloque: MOD_ERR...
Exportando referencias cruzadas para MOD_ERR...
Procesando bloque: ProDiagOB...
Exportando referencias cruzadas para ProDiagOB...
Procesando bloque: Programming error...
Exportando referencias cruzadas para Programming error...
Procesando bloque: RACK_FLT...
Exportando referencias cruzadas para RACK_FLT...
Procesando bloque: Time error interrupt...
Exportando referencias cruzadas para Time error interrupt...
Procesando bloque: Baialage...
Exportando referencias cruzadas para Baialage...
Procesando bloque: BlenderCtrl__Main...
Exportando referencias cruzadas para BlenderCtrl__Main...
Procesando bloque: BlenderCtrl_CIPModeInit...
Exportando referencias cruzadas para BlenderCtrl_CIPModeInit...
Procesando bloque: BlenderCtrl_ProdModeInit...
Exportando referencias cruzadas para BlenderCtrl_ProdModeInit...
Procesando bloque: BlenderCtrl_ResetSPWord...
Exportando referencias cruzadas para BlenderCtrl_ResetSPWord...
Procesando bloque: BlenderCtrl_UpdatePWord...
Exportando referencias cruzadas para BlenderCtrl_UpdatePWord...
Procesando bloque: BlenderPID_NextRecipe...
Exportando referencias cruzadas para BlenderPID_NextRecipe...
Procesando bloque: BlenderRinse...
Exportando referencias cruzadas para BlenderRinse...
Procesando bloque: BlenderRinse_Done...
Exportando referencias cruzadas para BlenderRinse_Done...
Procesando bloque: BlenderRun_ProdTime...
Exportando referencias cruzadas para BlenderRun_ProdTime...
Procesando bloque: BlenderRun_Stopping...
Exportando referencias cruzadas para BlenderRun_Stopping...
Procesando bloque: Blocco_1...
Exportando referencias cruzadas para Blocco_1...
Procesando bloque: Block_compare...
Exportando referencias cruzadas para Block_compare...
Procesando bloque: Block_move...
Exportando referencias cruzadas para Block_move...
Procesando bloque: CarboWaterLine_Seq...
Exportando referencias cruzadas para CarboWaterLine_Seq...
Procesando bloque: Cetrifugal_Head...
Exportando referencias cruzadas para Cetrifugal_Head...
Procesando bloque: CIP CVQ...
Exportando referencias cruzadas para CIP CVQ...
Procesando bloque: CIP FlipFlop...
Exportando referencias cruzadas para CIP FlipFlop...
Procesando bloque: CIPLocal_ProgInizialize...
Exportando referencias cruzadas para CIPLocal_ProgInizialize...
Procesando bloque: CIPLocal_WaitEvent_Ctrl...
Exportando referencias cruzadas para CIPLocal_WaitEvent_Ctrl...
Procesando bloque: CIPMain...
Exportando referencias cruzadas para CIPMain...
Procesando bloque: CIPMain_Flood...
Exportando referencias cruzadas para CIPMain_Flood...
Procesando bloque: CIPMain_Total Drain...
Exportando referencias cruzadas para CIPMain_Total Drain...
Procesando bloque: Clock Signal...
Exportando referencias cruzadas para Clock Signal...
Procesando bloque: CO2 Solubility...
Exportando referencias cruzadas para CO2 Solubility...
Procesando bloque: CO2EqPress...
Exportando referencias cruzadas para CO2EqPress...
Procesando bloque: CO2InjPressure...
Exportando referencias cruzadas para CO2InjPressure...
Procesando bloque: CTRLCoolingSystem...
Exportando referencias cruzadas para CTRLCoolingSystem...
Procesando bloque: DeairCO2TempComp...
Exportando referencias cruzadas para DeairCO2TempComp...
Procesando bloque: DeaireationValve...
Exportando referencias cruzadas para DeaireationValve...
Procesando bloque: Deaireator StartUp_Seq...
Exportando referencias cruzadas para Deaireator StartUp_Seq...
Procesando bloque: DeltaP...
Exportando referencias cruzadas para DeltaP...
Procesando bloque: FeedForward...
Exportando referencias cruzadas para FeedForward...
Procesando bloque: Flow_To_Press_Loss...
Exportando referencias cruzadas para Flow_To_Press_Loss...
Procesando bloque: Freq_To_mmH2O...
Exportando referencias cruzadas para Freq_To_mmH2O...
Procesando bloque: FrictionLoss...
Exportando referencias cruzadas para FrictionLoss...
Procesando bloque: FW_DRand...
Exportando referencias cruzadas para FW_DRand...
Procesando bloque: GetProdBrixCO2_Anal_Inpt...
Exportando referencias cruzadas para GetProdBrixCO2_Anal_Inpt...
Procesando bloque: Interlocking_Panel_1...
Exportando referencias cruzadas para Interlocking_Panel_1...
Procesando bloque: ITC Communic CIPRoom...
Exportando referencias cruzadas para ITC Communic CIPRoom...
Procesando bloque: ITC Communic Filler...
Exportando referencias cruzadas para ITC Communic Filler...
Procesando bloque: ITC Communic MainRoutine...
Exportando referencias cruzadas para ITC Communic MainRoutine...
Procesando bloque: ITC Communic ProdRoom...
Exportando referencias cruzadas para ITC Communic ProdRoom...
Procesando bloque: ITC DataIn...
Exportando referencias cruzadas para ITC DataIn...
Procesando bloque: ITC DataOut...
Exportando referencias cruzadas para ITC DataOut...
Procesando bloque: ITC Exchange MainRoutine...
Exportando referencias cruzadas para ITC Exchange MainRoutine...
Procesando bloque: ITC MainRoutine...
Exportando referencias cruzadas para ITC MainRoutine...
Procesando bloque: LIMIT_I...
Exportando referencias cruzadas para LIMIT_I...
Procesando bloque: LIMIT_R...
Exportando referencias cruzadas para LIMIT_R...
Procesando bloque: Maselli_PA_Control...
Exportando referencias cruzadas para Maselli_PA_Control...
Procesando bloque: Maselli_PA_Ctrl_Transfer...
Exportando referencias cruzadas para Maselli_PA_Ctrl_Transfer...
Procesando bloque: Maselli_PA_Ctrl_Write...
Exportando referencias cruzadas para Maselli_PA_Ctrl_Write...
Procesando bloque: MFMAnalogValues_Totalize...
Exportando referencias cruzadas para MFMAnalogValues_Totalize...
Procesando bloque: mmH2O_TO_Freq...
Exportando referencias cruzadas para mmH2O_TO_Freq...
Procesando bloque: ModValveFault...
Exportando referencias cruzadas para ModValveFault...
Procesando bloque: mPDS_SYR_PA_Control...
Exportando referencias cruzadas para mPDS_SYR_PA_Control...
Procesando bloque: ONS_R...
Exportando referencias cruzadas para ONS_R...
Procesando bloque: Prod Tank RunOut_Seq...
Exportando referencias cruzadas para Prod Tank RunOut_Seq...
Procesando bloque: ProductLiterInTank...
Exportando referencias cruzadas para ProductLiterInTank...
Procesando bloque: ProductPipeDrain_Seq...
Exportando referencias cruzadas para ProductPipeDrain_Seq...
Procesando bloque: ProductPipeRunOut_Seq...
Exportando referencias cruzadas para ProductPipeRunOut_Seq...
Procesando bloque: ProductQuality...
Exportando referencias cruzadas para ProductQuality...
Procesando bloque: SEL_I...
Exportando referencias cruzadas para SEL_I...
Procesando bloque: SEL_R...
Exportando referencias cruzadas para SEL_R...
Procesando bloque: SelCheckBrixSource...
Exportando referencias cruzadas para SelCheckBrixSource...
Procesando bloque: SLIM_Block...
Exportando referencias cruzadas para SLIM_Block...
Procesando bloque: SpeedAdjust...
Exportando referencias cruzadas para SpeedAdjust...
Procesando bloque: Syrup Line MFM Prep_Seq...
Exportando referencias cruzadas para Syrup Line MFM Prep_Seq...
Procesando bloque: Syrup MFM StartUp_Seq...
Exportando referencias cruzadas para Syrup MFM StartUp_Seq...
Procesando bloque: SyrupDensity...
Exportando referencias cruzadas para SyrupDensity...
Procesando bloque: SyrupRoomCtrl...
Exportando referencias cruzadas para SyrupRoomCtrl...
Procesando bloque: WaterDensity...
Exportando referencias cruzadas para WaterDensity...
Procesando bloque: WritePeripheral...
Exportando referencias cruzadas para WritePeripheral...
Procesando bloque: CIPRecipeManagement_Data...
Exportando referencias cruzadas para CIPRecipeManagement_Data...
Procesando bloque: Co2_Counters_DB...
Exportando referencias cruzadas para Co2_Counters_DB...
Procesando bloque: Default_SupervisionDB...
Exportando referencias cruzadas para Default_SupervisionDB...
Procesando bloque: ITC Communic CIP DI...
Exportando referencias cruzadas para ITC Communic CIP DI...
Procesando bloque: ITC Communic Filler DI...
Exportando referencias cruzadas para ITC Communic Filler DI...
Procesando bloque: ITC Communic Mixer DI...
Exportando referencias cruzadas para ITC Communic Mixer DI...
Procesando bloque: ITC Communic Product Room DI...
Exportando referencias cruzadas para ITC Communic Product Room DI...
Procesando bloque: Key Read & Write Data...
Exportando referencias cruzadas para Key Read & Write Data...
Procesando bloque: mPPM303StartUpRamp...
Exportando referencias cruzadas para mPPM303StartUpRamp...
Procesando bloque: PID_RMM304_Data...
Exportando referencias cruzadas para PID_RMM304_Data...
Procesando bloque: PID_RVN302_Data...
Exportando referencias cruzadas para PID_RVN302_Data...
Procesando bloque: PID_RVS318_Data...
Exportando referencias cruzadas para PID_RVS318_Data...
Procesando bloque: ProdBrixRecovery_DB...
Exportando referencias cruzadas para ProdBrixRecovery_DB...
Procesando bloque: Prod Tank Drain_Seq...
Exportando referencias cruzadas para Prod Tank Drain_Seq...
Procesando bloque: _StepMove...
Exportando referencias cruzadas para _StepMove...
Procesando bloque: _StepMove_Test...
Exportando referencias cruzadas para _StepMove_Test...
Procesando bloque: RecipeManagement_Data...
Exportando referencias cruzadas para RecipeManagement_Data...
Procesando bloque: Blender_Procedure Data...
Exportando referencias cruzadas para Blender_Procedure Data...
Procesando bloque: BlenderPID__Main_Data...
Exportando referencias cruzadas para BlenderPID__Main_Data...
Procesando bloque: BlenderRun_MeasFil_Data...
Exportando referencias cruzadas para BlenderRun_MeasFil_Data...
Procesando bloque: BrixTracking_Data...
Exportando referencias cruzadas para BrixTracking_Data...
Procesando bloque: CO2Tracking_Data...
Exportando referencias cruzadas para CO2Tracking_Data...
Procesando bloque: FirstProduction_Data...
Exportando referencias cruzadas para FirstProduction_Data...
Procesando bloque: Input_Data...
Exportando referencias cruzadas para Input_Data...
Procesando bloque: ISOonTCP_or_TCP_Protocol_DB...
Exportando referencias cruzadas para ISOonTCP_or_TCP_Protocol_DB...
Procesando bloque: MFM_Analog_Value_Data...
Exportando referencias cruzadas para MFM_Analog_Value_Data...
Procesando bloque: PID MAIN Data...
Exportando referencias cruzadas para PID MAIN Data...
Procesando bloque: PID_Filling_Head_Data...
Exportando referencias cruzadas para PID_Filling_Head_Data...
Procesando bloque: PID_RMM301_Data...
Exportando referencias cruzadas para PID_RMM301_Data...
Procesando bloque: PID_RMM303_Data...
Exportando referencias cruzadas para PID_RMM303_Data...
Procesando bloque: PID_RMP302_Data...
Exportando referencias cruzadas para PID_RMP302_Data...
Procesando bloque: PID_RVM301_Data...
Exportando referencias cruzadas para PID_RVM301_Data...
Procesando bloque: PID_RVM319_Data...
Exportando referencias cruzadas para PID_RVM319_Data...
Procesando bloque: PID_RVP303_Data...
Exportando referencias cruzadas para PID_RVP303_Data...
Procesando bloque: Sel_Check_Brix_Data...
Exportando referencias cruzadas para Sel_Check_Brix_Data...
Procesando bloque: Signal_Gen_Data...
Exportando referencias cruzadas para Signal_Gen_Data...
Procesando bloque: System_Run_Out_Data...
Exportando referencias cruzadas para System_Run_Out_Data...
Procesando bloque: SubCarb_DB...
Exportando referencias cruzadas para SubCarb_DB...
Procesando bloque: CYC_INT5...
Exportando referencias cruzadas para CYC_INT5...
Procesando bloque: BlenderCtrl_All Auto...
Exportando referencias cruzadas para BlenderCtrl_All Auto...
Procesando bloque: BlenderCtrl_InitErrors...
Exportando referencias cruzadas para BlenderCtrl_InitErrors...
Procesando bloque: BlenderCtrl_ManualActive...
Exportando referencias cruzadas para BlenderCtrl_ManualActive...
Procesando bloque: BlenderCtrl_MFM Command...
Exportando referencias cruzadas para BlenderCtrl_MFM Command...
Procesando bloque: BlenderPID_FlowMeterErro...
Exportando referencias cruzadas para BlenderPID_FlowMeterErro...
Procesando bloque: BlenderPID_PIDResInteg...
Exportando referencias cruzadas para BlenderPID_PIDResInteg...
Procesando bloque: BlenderPIDCtrl_PresRelea...
Exportando referencias cruzadas para BlenderPIDCtrl_PresRelea...
Procesando bloque: BlenderPIDCtrl_SaveValve...
Exportando referencias cruzadas para BlenderPIDCtrl_SaveValve...
Procesando bloque: BlenderRun__Control...
Exportando referencias cruzadas para BlenderRun__Control...
Procesando bloque: BlenderRun_SelectConstan...
Exportando referencias cruzadas para BlenderRun_SelectConstan...
Procesando bloque: BlendFill StartUp_Seq...
Exportando referencias cruzadas para BlendFill StartUp_Seq...
Procesando bloque: CIP_SimpleProgr_Init...
Exportando referencias cruzadas para CIP_SimpleProgr_Init...
Procesando bloque: CIPLocal...
Exportando referencias cruzadas para CIPLocal...
Procesando bloque: CIPLocal_ExecSimpleCIP...
Exportando referencias cruzadas para CIPLocal_ExecSimpleCIP...
Procesando bloque: CIPLocal_ExecStep...
Exportando referencias cruzadas para CIPLocal_ExecStep...
Procesando bloque: CIPLocal_ProgStepDown...
Exportando referencias cruzadas para CIPLocal_ProgStepDown...
Procesando bloque: CIPLocal_ProgStepUp...
Exportando referencias cruzadas para CIPLocal_ProgStepUp...
Procesando bloque: CIPReportManager...
Exportando referencias cruzadas para CIPReportManager...
Procesando bloque: CPU_DP Global Diag...
Exportando referencias cruzadas para CPU_DP Global Diag...
Procesando bloque: CVQ_1p7_8_Perc...
Exportando referencias cruzadas para CVQ_1p7_8_Perc...
Procesando bloque: DELETE...
Exportando referencias cruzadas para DELETE...
Procesando bloque: EQ_STRNG...
Exportando referencias cruzadas para EQ_STRNG...
Procesando bloque: FillerControl...
Exportando referencias cruzadas para FillerControl...
Procesando bloque: FillerControl_DataSend...
Exportando referencias cruzadas para FillerControl_DataSend...
Procesando bloque: FillingTime...
Exportando referencias cruzadas para FillingTime...
Procesando bloque: Input_CheckFlowMetersSta...
Exportando referencias cruzadas para Input_CheckFlowMetersSta...
Procesando bloque: Input_DigitalCtrl...
Exportando referencias cruzadas para Input_DigitalCtrl...
Procesando bloque: Input_DigitalScanner...
Exportando referencias cruzadas para Input_DigitalScanner...
Procesando bloque: Instrument_Scanner...
Exportando referencias cruzadas para Instrument_Scanner...
Procesando bloque: Interlocking_Panel...
Exportando referencias cruzadas para Interlocking_Panel...
Procesando bloque: Maselli_PA_Ctrl_Read...
Exportando referencias cruzadas para Maselli_PA_Ctrl_Read...
Procesando bloque: MaxCarboCO2 Vol...
Exportando referencias cruzadas para MaxCarboCO2 Vol...
Procesando bloque: MessageScroll...
Exportando referencias cruzadas para MessageScroll...
Procesando bloque: mPDS_SYR_PA_Ctrl_Read...
Exportando referencias cruzadas para mPDS_SYR_PA_Ctrl_Read...
Procesando bloque: Output_CO2InjPress...
Exportando referencias cruzadas para Output_CO2InjPress...
Procesando bloque: Pneumatic Valve Fault...
Exportando referencias cruzadas para Pneumatic Valve Fault...
Procesando bloque: PPM O2...
Exportando referencias cruzadas para PPM O2...
Procesando bloque: PPM303_VFC_Ctrl...
Exportando referencias cruzadas para PPM303_VFC_Ctrl...
Procesando bloque: PPM305_VFC_Ctrl...
Exportando referencias cruzadas para PPM305_VFC_Ctrl...
Procesando bloque: PPM307_VFC_Ctrl...
Exportando referencias cruzadas para PPM307_VFC_Ctrl...
Procesando bloque: PPN301_VFC_Ctrl...
Exportando referencias cruzadas para PPN301_VFC_Ctrl...
Procesando bloque: PPP302_VFC_Ctrl...
Exportando referencias cruzadas para PPP302_VFC_Ctrl...
Procesando bloque: ProdBrixRecovery_BrixCal...
Exportando referencias cruzadas para ProdBrixRecovery_BrixCal...
Procesando bloque: ProdReportManager...
Exportando referencias cruzadas para ProdReportManager...
Procesando bloque: ProductQuality_Messages...
Exportando referencias cruzadas para ProductQuality_Messages...
Procesando bloque: Profibus Network...
Exportando referencias cruzadas para Profibus Network...
Procesando bloque: QCO Monitor...
Exportando referencias cruzadas para QCO Monitor...
Procesando bloque: ReadAnalogIn...
Exportando referencias cruzadas para ReadAnalogIn...
Procesando bloque: RecipeCalculation...
Exportando referencias cruzadas para RecipeCalculation...
Procesando bloque: REPLACE_Mod...
Exportando referencias cruzadas para REPLACE_Mod...
Procesando bloque: SyrBrix_SyrupCorrPerc...
Exportando referencias cruzadas para SyrBrix_SyrupCorrPerc...
Procesando bloque: Syrup Rinse QCO_Seq...
Exportando referencias cruzadas para Syrup Rinse QCO_Seq...
Procesando bloque: SyrupRoomCtrl_UpdateVal...
Exportando referencias cruzadas para SyrupRoomCtrl_UpdateVal...
Procesando bloque: T_Timer...
Exportando referencias cruzadas para T_Timer...
Procesando bloque: TankLevelToHeight...
Exportando referencias cruzadas para TankLevelToHeight...
Procesando bloque: VacuumCtrl...
Exportando referencias cruzadas para VacuumCtrl...
Procesando bloque: ValveFlow...
Exportando referencias cruzadas para ValveFlow...
Procesando bloque: BlenderPID__Main...
Exportando referencias cruzadas para BlenderPID__Main...
Procesando bloque: BlenderPID_BlendingFault...
Exportando referencias cruzadas para BlenderPID_BlendingFault...
Procesando bloque: BlenderPID_PIDFFCalc...
Exportando referencias cruzadas para BlenderPID_PIDFFCalc...
Procesando bloque: BlenderPID_PIDInitParam...
Exportando referencias cruzadas para BlenderPID_PIDInitParam...
Procesando bloque: BlenderPID_PIDSPCalc...
Exportando referencias cruzadas para BlenderPID_PIDSPCalc...
Procesando bloque: BlenderPIDCtrl_Monitor...
Exportando referencias cruzadas para BlenderPIDCtrl_Monitor...
Procesando bloque: BlenderPIDCtrl_ReadAnIn...
Exportando referencias cruzadas para BlenderPIDCtrl_ReadAnIn...
Procesando bloque: BlenderPIDCtrl_SaveInteg...
Exportando referencias cruzadas para BlenderPIDCtrl_SaveInteg...
Procesando bloque: BlenderRun_MeasFilSpeed...
Exportando referencias cruzadas para BlenderRun_MeasFilSpeed...
Procesando bloque: BrixTracking_ProdSamples...
Exportando referencias cruzadas para BrixTracking_ProdSamples...
Procesando bloque: BrixTracking_SampleTime...
Exportando referencias cruzadas para BrixTracking_SampleTime...
Procesando bloque: CIPRecipeManagement...
Exportando referencias cruzadas para CIPRecipeManagement...
Procesando bloque: Co2_Counters...
Exportando referencias cruzadas para Co2_Counters...
Procesando bloque: CO2Tracking...
Exportando referencias cruzadas para CO2Tracking...
Procesando bloque: CO2Tracking_ProdSamples...
Exportando referencias cruzadas para CO2Tracking_ProdSamples...
Procesando bloque: CO2Tracking_SampleTime...
Exportando referencias cruzadas para CO2Tracking_SampleTime...
Procesando bloque: Default_SupervisionFB...
Exportando referencias cruzadas para Default_SupervisionFB...
Procesando bloque: Delay...
Exportando referencias cruzadas para Delay...
Procesando bloque: Input...
Exportando referencias cruzadas para Input...
Procesando bloque: Integral...
Exportando referencias cruzadas para Integral...
Procesando bloque: Key Read & Write...
Exportando referencias cruzadas para Key Read & Write...
Procesando bloque: LowPassFilter...
Exportando referencias cruzadas para LowPassFilter...
Procesando bloque: MFMAnalogValues...
Exportando referencias cruzadas para MFMAnalogValues...
Procesando bloque: MSE Slope...
Exportando referencias cruzadas para MSE Slope...
Procesando bloque: PID_Filling_Head_Calc...
Exportando referencias cruzadas para PID_Filling_Head_Calc...
Procesando bloque: PID_RMM301...
Exportando referencias cruzadas para PID_RMM301...
Procesando bloque: PID_RMM303...
Exportando referencias cruzadas para PID_RMM303...
Procesando bloque: PID_RMM304...
Exportando referencias cruzadas para PID_RMM304...
Procesando bloque: PID_RMP302...
Exportando referencias cruzadas para PID_RMP302...
Procesando bloque: PID_RVM301...
Exportando referencias cruzadas para PID_RVM301...
Procesando bloque: PID_RVM319_PRD...
Exportando referencias cruzadas para PID_RVM319_PRD...
Procesando bloque: PID_RVN302...
Exportando referencias cruzadas para PID_RVN302...
Procesando bloque: PID_RVP303...
Exportando referencias cruzadas para PID_RVP303...
Procesando bloque: PID_RVS318...
Exportando referencias cruzadas para PID_RVS318...
Procesando bloque: PIDControl...
Exportando referencias cruzadas para PIDControl...
Procesando bloque: Procedure...
Exportando referencias cruzadas para Procedure...
Procesando bloque: ProcedureBlendFill StartUp...
Exportando referencias cruzadas para ProcedureBlendFill StartUp...
Procesando bloque: ProcedureBrixTracking...
Exportando referencias cruzadas para ProcedureBrixTracking...
Procesando bloque: ProcedureCarboWaterLine...
Exportando referencias cruzadas para ProcedureCarboWaterLine...
Procesando bloque: ProcedureDeaireator StartUp...
Exportando referencias cruzadas para ProcedureDeaireator StartUp...
Procesando bloque: ProcedureFirstProduction...
Exportando referencias cruzadas para ProcedureFirstProduction...
Procesando bloque: ProcedureProdBrixRecovery...
Exportando referencias cruzadas para ProcedureProdBrixRecovery...
Procesando bloque: ProcedureProdTankDrain...
Exportando referencias cruzadas para ProcedureProdTankDrain...
Procesando bloque: ProcedureProdTankRunOut...
Exportando referencias cruzadas para ProcedureProdTankRunOut...
Procesando bloque: ProcedureSyrup RunOut...
Exportando referencias cruzadas para ProcedureSyrup RunOut...
Procesando bloque: ProcedureSyrupLineMFMPrep...
Exportando referencias cruzadas para ProcedureSyrupLineMFMPrep...
Procesando bloque: ProcedureSyrupMFMStartUp...
Exportando referencias cruzadas para ProcedureSyrupMFMStartUp...
Procesando bloque: ProductAvailable...
Exportando referencias cruzadas para ProductAvailable...
Procesando bloque: ProductPipeDrain...
Exportando referencias cruzadas para ProductPipeDrain...
Procesando bloque: ProductPipeRunOut...
Exportando referencias cruzadas para ProductPipeRunOut...
Procesando bloque: Signal Gen...
Exportando referencias cruzadas para Signal Gen...
Procesando bloque: SlewLimit...
Exportando referencias cruzadas para SlewLimit...
Procesando bloque: Statistical_Analisys...
Exportando referencias cruzadas para Statistical_Analisys...
Procesando bloque: SubCarb...
Exportando referencias cruzadas para SubCarb...
Procesando bloque: SyrBrix Autocorrection...
Exportando referencias cruzadas para SyrBrix Autocorrection...
Procesando bloque: System_Run_Out...
Exportando referencias cruzadas para System_Run_Out...
Procesando bloque: Blender_Constants...
Exportando referencias cruzadas para Blender_Constants...
Procesando bloque: Blender_Variables...
Exportando referencias cruzadas para Blender_Variables...
Procesando bloque: Blender_Variables_Pers...
Exportando referencias cruzadas para Blender_Variables_Pers...
Procesando bloque: Blocco_dati_Test...
Exportando referencias cruzadas para Blocco_dati_Test...
Procesando bloque: CIP_Program_Variables...
Exportando referencias cruzadas para CIP_Program_Variables...
Procesando bloque: CIPRecipe#01...
Exportando referencias cruzadas para CIPRecipe#01...
Procesando bloque: CIPRecipe#02...
Exportando referencias cruzadas para CIPRecipe#02...
Procesando bloque: CIPRecipe#03...
Exportando referencias cruzadas para CIPRecipe#03...
Procesando bloque: CIPRecipe#04...
Exportando referencias cruzadas para CIPRecipe#04...
Procesando bloque: CIPRecipe#05...
Exportando referencias cruzadas para CIPRecipe#05...
Procesando bloque: CIPRecipe#06...
Exportando referencias cruzadas para CIPRecipe#06...
Procesando bloque: CIPRecipe#07...
Exportando referencias cruzadas para CIPRecipe#07...
Procesando bloque: CIPRecipe#08...
Exportando referencias cruzadas para CIPRecipe#08...
Procesando bloque: CIPRecipe#09...
Exportando referencias cruzadas para CIPRecipe#09...
Procesando bloque: CIPRecipe#10...
Exportando referencias cruzadas para CIPRecipe#10...
Procesando bloque: CIPRecipe#11...
Exportando referencias cruzadas para CIPRecipe#11...
Procesando bloque: CIPRecipe#12...
Exportando referencias cruzadas para CIPRecipe#12...
Procesando bloque: CIPRecipe#13...
Exportando referencias cruzadas para CIPRecipe#13...
Procesando bloque: CIPRecipe#14...
Exportando referencias cruzadas para CIPRecipe#14...
Procesando bloque: CIPRecipe#15...
Exportando referencias cruzadas para CIPRecipe#15...
Procesando bloque: CIPRecipe#16...
Exportando referencias cruzadas para CIPRecipe#16...
Procesando bloque: CIPRecipe#17...
Exportando referencias cruzadas para CIPRecipe#17...
Procesando bloque: CIPRecipe#18...
Exportando referencias cruzadas para CIPRecipe#18...
Procesando bloque: CIPRecipe#19...
Exportando referencias cruzadas para CIPRecipe#19...
Procesando bloque: CIPRecipe#20...
Exportando referencias cruzadas para CIPRecipe#20...
Procesando bloque: CIPRecipe#21...
Exportando referencias cruzadas para CIPRecipe#21...
Procesando bloque: CIPRecipe#22...
Exportando referencias cruzadas para CIPRecipe#22...
Procesando bloque: CIPRecipe#23...
Exportando referencias cruzadas para CIPRecipe#23...
Procesando bloque: CIPRecipe#24...
Exportando referencias cruzadas para CIPRecipe#24...
Procesando bloque: CIPRecipe#25...
Exportando referencias cruzadas para CIPRecipe#25...
Procesando bloque: CIPRecipe#26...
Exportando referencias cruzadas para CIPRecipe#26...
Procesando bloque: CIPRecipe#27...
Exportando referencias cruzadas para CIPRecipe#27...
Procesando bloque: CIPRecipe#28...
Exportando referencias cruzadas para CIPRecipe#28...
Procesando bloque: CIPRecipe#29...
Exportando referencias cruzadas para CIPRecipe#29...
Procesando bloque: CIPRecipe#30...
Exportando referencias cruzadas para CIPRecipe#30...
Procesando bloque: CIPReportDB...
Exportando referencias cruzadas para CIPReportDB...
Procesando bloque: Filler_Head_Variables...
Exportando referencias cruzadas para Filler_Head_Variables...
Procesando bloque: GLOBAL_DIAG_DB...
Exportando referencias cruzadas para GLOBAL_DIAG_DB...
Procesando bloque: HMI CPU_DP Diag...
Exportando referencias cruzadas para HMI CPU_DP Diag...
Procesando bloque: HMI Key User...
Exportando referencias cruzadas para HMI Key User...
Procesando bloque: HMI_Alarms...
Exportando referencias cruzadas para HMI_Alarms...
Procesando bloque: HMI_Digital...
Exportando referencias cruzadas para HMI_Digital...
Procesando bloque: HMI_Instrument...
Exportando referencias cruzadas para HMI_Instrument...
Procesando bloque: HMI_IO_Showing...
Exportando referencias cruzadas para HMI_IO_Showing...
Procesando bloque: HMI_Local_CIP_Variables...
Exportando referencias cruzadas para HMI_Local_CIP_Variables...
Procesando bloque: HMI_PID...
Exportando referencias cruzadas para HMI_PID...
Procesando bloque: HMI_Recipe_Edit...
Exportando referencias cruzadas para HMI_Recipe_Edit...
Procesando bloque: HMI_Recipe_Name...
Exportando referencias cruzadas para HMI_Recipe_Name...
Procesando bloque: HMI_Refrige_IO_Showing...
Exportando referencias cruzadas para HMI_Refrige_IO_Showing...
Procesando bloque: HMI_Service...
Exportando referencias cruzadas para HMI_Service...
Procesando bloque: HMI_Variables_Cmd...
Exportando referencias cruzadas para HMI_Variables_Cmd...
Procesando bloque: HMI_Variables_Status...
Exportando referencias cruzadas para HMI_Variables_Status...
Procesando bloque: Interlocking_Variables...
Exportando referencias cruzadas para Interlocking_Variables...
ERROR GENERAL al exportar referencias cruzadas para el bloque Interlocking_Variables: OpennessAccessException: Unexpected exception - no exception message available.
ERROR al acceder a los bloques de programa para exportar referencias cruzadas: OpennessAccessException: Unexpected exception - no exception message available.
Cerrando instancia actual de TIA Portal...
2025-06-19 16:41:11,092 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal ClosePortal - Close TIA Portal
Re-abriendo TIA Portal (intento 1/5)...
Conectando a TIA Portal V18.0...
2025-06-19 16:41:11,295 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - Start TIA Portal, please acknowledge the security dialog.
2025-06-19 16:41:11,296 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - With user interface
Conectado a TIA Portal.
2025-06-19 16:41:26,719 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal GetProcessId - Process id: 28872
ID del proceso del Portal: 28872
2025-06-19 16:41:26,921 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal OpenProject - Open project... C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/InLavoro/PLC/SSAE0235/_NEW/SAE235_v0.1/SAE235_v0.1.ap18
2025-06-19 16:41:38,022 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Project GetPlcs - Found plc PLC with parent name S71500/ET200MP station_1
--- Procesando PLC: PLC ---
Unable to open the project under path 'D:\Trabajo\VM\44 - 98050 - Fiera\InLavoro\PLC\98050_PLC_11\98050_PLC_11.ap19'.
[PLC: PLC] Exportando referencias cruzadas de bloques de programa...
Destino: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\ExportTia\PLC\ProgramBlocks_CR
Se encontraron 380 bloques de programa.
Omitiendo bloque problemático previamente detectado: Interlocking_Variables
Procesando bloque: ITC Communic MainData...
Exportando referencias cruzadas para ITC Communic MainData...
Procesando bloque: Machine_Co2_Cons...
Exportando referencias cruzadas para Machine_Co2_Cons...
Procesando bloque: Maselli_PA_Data...
Exportando referencias cruzadas para Maselli_PA_Data...
Procesando bloque: PID_Variables...
Exportando referencias cruzadas para PID_Variables...
Procesando bloque: Pneumatic Valve Fault DB...
Exportando referencias cruzadas para Pneumatic Valve Fault DB...
Procesando bloque: Procedure_Variables...
Exportando referencias cruzadas para Procedure_Variables...
Procesando bloque: ProdReportDB...
Exportando referencias cruzadas para ProdReportDB...
Procesando bloque: Profibus_Variables...
Exportando referencias cruzadas para Profibus_Variables...
Procesando bloque: QCO Timing DB...
Exportando referencias cruzadas para QCO Timing DB...
Procesando bloque: ReadAnalogIn_Fault_DB...
Exportando referencias cruzadas para ReadAnalogIn_Fault_DB...
Procesando bloque: RecipeEditDataSave...
Exportando referencias cruzadas para RecipeEditDataSave...
Procesando bloque: SLIM_Variables...
Exportando referencias cruzadas para SLIM_Variables...
Procesando bloque: System_RunOut_Variables...
Exportando referencias cruzadas para System_RunOut_Variables...
Procesando bloque: BlenderCtrl_MachineInit...
Exportando referencias cruzadas para BlenderCtrl_MachineInit...
Procesando bloque: Pneumatic Valve Ctrl...
Exportando referencias cruzadas para Pneumatic Valve Ctrl...
Procesando bloque: PumpsControl...
Exportando referencias cruzadas para PumpsControl...
Procesando bloque: Safeties...
Exportando referencias cruzadas para Safeties...
Procesando bloque: HMI_Device...
Exportando referencias cruzadas para HMI_Device...
Procesando bloque: Prod Tank PressCtrl...
Exportando referencias cruzadas para Prod Tank PressCtrl...
Procesando bloque: BlenderPIDCtrl__Loop...
Exportando referencias cruzadas para BlenderPIDCtrl__Loop...
Procesando bloque: PID_Filling_Head...
Exportando referencias cruzadas para PID_Filling_Head...
Procesando bloque: TankLevel...
Exportando referencias cruzadas para TankLevel...
Procesando bloque: BlenderPID_ActualRecipe...
Exportando referencias cruzadas para BlenderPID_ActualRecipe...
Procesando bloque: RecipeManagement - Prod...
Exportando referencias cruzadas para RecipeManagement - Prod...
Procesando bloque: Output...
Exportando referencias cruzadas para Output...
Procesando bloque: Recipe #03...
Exportando referencias cruzadas para Recipe #03...
Procesando bloque: HMI_Blender_Parameters...
Exportando referencias cruzadas para HMI_Blender_Parameters...
Procesando bloque: BlenderPIDCtrl_WriteAnOu...
Exportando referencias cruzadas para BlenderPIDCtrl_WriteAnOu...
Procesando bloque: ISOonTCP_or_TCP_Protocol...
Exportando referencias cruzadas para ISOonTCP_or_TCP_Protocol...
Procesando bloque: mPDS_PA_Control...
Exportando referencias cruzadas para mPDS_PA_Control...
Procesando bloque: mPDS_PA_Ctrl_Parameters...
Exportando referencias cruzadas para mPDS_PA_Ctrl_Parameters...
Procesando bloque: mPDS_PA_Ctrl_Read...
Exportando referencias cruzadas para mPDS_PA_Ctrl_Read...
Procesando bloque: mPDS_PA_Ctrl_Transfer...
Exportando referencias cruzadas para mPDS_PA_Ctrl_Transfer...
Procesando bloque: mPDS_PA_Ctrl_Write...
Exportando referencias cruzadas para mPDS_PA_Ctrl_Write...
Procesando bloque: Output_AnalogValueToHMI...
Exportando referencias cruzadas para Output_AnalogValueToHMI...
Procesando bloque: mPDS_PA_Data...
Exportando referencias cruzadas para mPDS_PA_Data...
Procesando bloque: mPDS_SYR_PA_Ctrl_Write...
Exportando referencias cruzadas para mPDS_SYR_PA_Ctrl_Write...
Procesando bloque: mPDS_SYR_PA_Ctrl_Trans...
Exportando referencias cruzadas para mPDS_SYR_PA_Ctrl_Trans...
Procesando bloque: mPDS_SYR_PA_Ctrl_Param...
Exportando referencias cruzadas para mPDS_SYR_PA_Ctrl_Param...
Procesando bloque: mPDS_SYR_PA_Data...
Exportando referencias cruzadas para mPDS_SYR_PA_Data...
Procesando bloque: Recipe #02...
Exportando referencias cruzadas para Recipe #02...
Procesando bloque: Recipe #01...
Exportando referencias cruzadas para Recipe #01...
Procesando bloque: Recipe #04...
Exportando referencias cruzadas para Recipe #04...
Procesando bloque: Recipe #05...
Exportando referencias cruzadas para Recipe #05...
Procesando bloque: Recipe #06...
Exportando referencias cruzadas para Recipe #06...
Procesando bloque: Recipe #07...
Exportando referencias cruzadas para Recipe #07...
Procesando bloque: Recipe #08...
Exportando referencias cruzadas para Recipe #08...
Procesando bloque: Recipe #09...
Exportando referencias cruzadas para Recipe #09...
Procesando bloque: Recipe #10...
Exportando referencias cruzadas para Recipe #10...
Procesando bloque: Recipe #11...
Exportando referencias cruzadas para Recipe #11...
Procesando bloque: Recipe #12...
Exportando referencias cruzadas para Recipe #12...
Procesando bloque: Recipe #13...
Exportando referencias cruzadas para Recipe #13...
Procesando bloque: Recipe #14...
Exportando referencias cruzadas para Recipe #14...
Procesando bloque: Recipe #15...
Exportando referencias cruzadas para Recipe #15...
Procesando bloque: Recipe #16...
Exportando referencias cruzadas para Recipe #16...
Procesando bloque: Recipe #17...
Exportando referencias cruzadas para Recipe #17...
Procesando bloque: Recipe #18...
Exportando referencias cruzadas para Recipe #18...
Procesando bloque: Recipe #19...
Exportando referencias cruzadas para Recipe #19...
Procesando bloque: Recipe #20...
Exportando referencias cruzadas para Recipe #20...
Procesando bloque: Recipe #21...
Exportando referencias cruzadas para Recipe #21...
Procesando bloque: Recipe #22...
Exportando referencias cruzadas para Recipe #22...
Procesando bloque: Recipe #23...
Exportando referencias cruzadas para Recipe #23...
Procesando bloque: Recipe #24...
Exportando referencias cruzadas para Recipe #24...
Procesando bloque: Recipe #25...
Exportando referencias cruzadas para Recipe #25...
Procesando bloque: Recipe #26...
Exportando referencias cruzadas para Recipe #26...
Procesando bloque: Recipe #27...
Exportando referencias cruzadas para Recipe #27...
Procesando bloque: Recipe #28...
Exportando referencias cruzadas para Recipe #28...
Procesando bloque: Recipe #29...
Exportando referencias cruzadas para Recipe #29...
Procesando bloque: Recipe #30...
Exportando referencias cruzadas para Recipe #30...
Procesando bloque: Recipe #31...
Exportando referencias cruzadas para Recipe #31...
Procesando bloque: Recipe #32...
Exportando referencias cruzadas para Recipe #32...
Procesando bloque: Recipe #33...
Exportando referencias cruzadas para Recipe #33...
Procesando bloque: Recipe #34...
Exportando referencias cruzadas para Recipe #34...
Procesando bloque: Recipe #35...
Exportando referencias cruzadas para Recipe #35...
Procesando bloque: Recipe #36...
Exportando referencias cruzadas para Recipe #36...
Procesando bloque: Recipe #37...
Exportando referencias cruzadas para Recipe #37...
Procesando bloque: Recipe #38...
Exportando referencias cruzadas para Recipe #38...
Procesando bloque: Recipe #39...
Exportando referencias cruzadas para Recipe #39...
Procesando bloque: Recipe #40...
Exportando referencias cruzadas para Recipe #40...
Procesando bloque: Recipe #41...
Exportando referencias cruzadas para Recipe #41...
Procesando bloque: Recipe #42...
Exportando referencias cruzadas para Recipe #42...
Procesando bloque: Recipe #43...
Exportando referencias cruzadas para Recipe #43...
Procesando bloque: Recipe #44...
Exportando referencias cruzadas para Recipe #44...
Procesando bloque: Recipe #45...
Exportando referencias cruzadas para Recipe #45...
Procesando bloque: Recipe #46...
Exportando referencias cruzadas para Recipe #46...
Procesando bloque: Recipe #47...
Exportando referencias cruzadas para Recipe #47...
Procesando bloque: Recipe #48...
Exportando referencias cruzadas para Recipe #48...
Procesando bloque: Recipe #49...
Exportando referencias cruzadas para Recipe #49...
Procesando bloque: Recipe #50...
Exportando referencias cruzadas para Recipe #50...
Procesando bloque: GNS PLCdia MainRoutine...
Exportando referencias cruzadas para GNS PLCdia MainRoutine...
Procesando bloque: GNS PLCdia Profinet...
Exportando referencias cruzadas para GNS PLCdia Profinet...
Procesando bloque: GNS PLCdia Profibus...
Exportando referencias cruzadas para GNS PLCdia Profibus...
Procesando bloque: GNS PLCdia ProfibusData...
Exportando referencias cruzadas para GNS PLCdia ProfibusData...
Procesando bloque: GNS PLCdia ProfinetData...
Exportando referencias cruzadas para GNS PLCdia ProfinetData...
Resumen de exportación de referencias cruzadas de bloques: Exportados=94, Omitidos/Errores=1
[PLC: PLC] Exportando referencias cruzadas de tablas de variables...
Destino: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\ExportTia\PLC\PlcTags_CR
Se encontraron 10 tablas de variables.
Procesando tabla de variables: Memories...
Exportando referencias cruzadas para Memories...
Procesando tabla de variables: Tabella delle variabili standard...
Exportando referencias cruzadas para Tabella delle variabili standard...
Procesando tabla de variables: Timers_Counters...
Exportando referencias cruzadas para Timers_Counters...
Procesando tabla de variables: Inputs...
Exportando referencias cruzadas para Inputs...
Procesando tabla de variables: Outputs...
Exportando referencias cruzadas para Outputs...
Procesando tabla de variables: Tabella delle variabili_1...
Exportando referencias cruzadas para Tabella delle variabili_1...
Procesando tabla de variables: Tabella delle variabili_2...
Exportando referencias cruzadas para Tabella delle variabili_2...
Procesando tabla de variables: OutputsFesto...
Exportando referencias cruzadas para OutputsFesto...
Procesando tabla de variables: InputsMaster...
Exportando referencias cruzadas para InputsMaster...
Procesando tabla de variables: OutputsMaster...
Exportando referencias cruzadas para OutputsMaster...
Resumen de exportación de referencias cruzadas de tablas: Exportados=10, Omitidos/Errores=0
[PLC: PLC] Exportando referencias cruzadas de tipos de datos PLC (UDTs)...
Destino: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\ExportTia\PLC\PlcDataTypes_CR
Se encontraron 24 UDTs.
Procesando UDT: AnalogInstrument...
Exportando referencias cruzadas para AnalogInstrument...
Procesando UDT: CIP_Link_Type...
Exportando referencias cruzadas para CIP_Link_Type...
Procesando UDT: CIP_Simple_Type...
Exportando referencias cruzadas para CIP_Simple_Type...
Procesando UDT: CIP_Step_Type...
Exportando referencias cruzadas para CIP_Step_Type...
Procesando UDT: CIP_WaitEvent_Type...
Exportando referencias cruzadas para CIP_WaitEvent_Type...
Procesando UDT: Device...
Exportando referencias cruzadas para Device...
Procesando UDT: DigitalInstrument...
Exportando referencias cruzadas para DigitalInstrument...
Procesando UDT: FunctionButton...
Exportando referencias cruzadas para FunctionButton...
Procesando UDT: PID...
Exportando referencias cruzadas para PID...
Procesando UDT: QCO Phase...
Exportando referencias cruzadas para QCO Phase...
Procesando UDT: QCO Spare...
Exportando referencias cruzadas para QCO Spare...
Procesando UDT: QCO Timer...
Exportando referencias cruzadas para QCO Timer...
Procesando UDT: QCO Timer_Array_1...
Exportando referencias cruzadas para QCO Timer_Array_1...
Procesando UDT: Recipe_Prod...
Exportando referencias cruzadas para Recipe_Prod...
Procesando UDT: ReportCIPSimpleData...
Exportando referencias cruzadas para ReportCIPSimpleData...
Procesando UDT: TADDR_PAR...
Exportando referencias cruzadas para TADDR_PAR...
Procesando UDT: TCON_PAR...
Exportando referencias cruzadas para TCON_PAR...
Procesando UDT: TCON_PAR_LF...
Exportando referencias cruzadas para TCON_PAR_LF...
Procesando UDT: Tipo di dati utente_1...
Exportando referencias cruzadas para Tipo di dati utente_1...
Procesando UDT: Tipo di dati utente_2...
Exportando referencias cruzadas para Tipo di dati utente_2...
Procesando UDT: ASLeds...
Exportando referencias cruzadas para ASLeds...
Procesando UDT: IFLeds...
Exportando referencias cruzadas para IFLeds...
Procesando UDT: SV_FB_State...
Exportando referencias cruzadas para SV_FB_State...
Procesando UDT: SV_State...
Exportando referencias cruzadas para SV_State...
Resumen de exportación de referencias cruzadas de UDTs: Exportados=24, Omitidos/Errores=0
An error occurred while opening the project
[PLC: PLC] Intentando exportar referencias cruzadas de bloques de sistema...
Destino: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\ExportTia\PLC\SystemBlocks_CR
Se encontraron 9 bloques de sistema.
Procesando bloque de sistema: T_301...
Exportando referencias cruzadas para T_301...
Procesando bloque de sistema: IEC_Timer_0_DB_9...
Exportando referencias cruzadas para IEC_Timer_0_DB_9...
Procesando bloque de sistema: T_302...
Exportando referencias cruzadas para T_302...
Procesando bloque de sistema: GET_Reciver...
Exportando referencias cruzadas para GET_Reciver...
Procesando bloque de sistema: PUT_Send_Filler...
Exportando referencias cruzadas para PUT_Send_Filler...
Procesando bloque de sistema: LED...
Exportando referencias cruzadas para LED...
Procesando bloque de sistema: SCALE...
Exportando referencias cruzadas para SCALE...
Procesando bloque de sistema: CONT_C...
Exportando referencias cruzadas para CONT_C...
Procesando bloque de sistema: DeviceStates...
Exportando referencias cruzadas para DeviceStates...
Resumen de exportación de referencias cruzadas de bloques de sistema: Exportados=9, Omitidos/Errores=0
[PLC: PLC] Intentando exportar referencias cruzadas de unidades de software...
Destino: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\ExportTia\PLC\SoftwareUnits_CR
Se encontraron 0 unidades de software.
Resumen de exportación de referencias cruzadas de unidades de software: Exportados=0, Omitidos/Errores=0
--- Finalizado el procesamiento del PLC: PLC ---
Proceso de exportación de referencias cruzadas completado.
Cerrando TIA Portal...
2025-06-19 16:44:12,492 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal ClosePortal - Close TIA Portal
TIA Portal cerrado.
The project/library D:\Trabajo\VM\44 - 98050 - Fiera\InLavoro\PLC\98050_PLC_11\98050_PLC_11.ap19 cannot be accessed. It has already been opened by user Miguel on computer CSANUC. Note: If the application was not correctly closed, the open projects and libraries can only be opened again after a 2 minute delay.
Script finalizado.
--- ERRORES (STDERR) ---
2025-06-19 16:41:11,087 [1] ERROR Siemens.TiaPortal.OpennessApi18.Implementations.ProgramBlock ExportCrossReferences -
Siemens.TiaPortal.OpennessContracts.OpennessAccessException: Unexpected exception - no exception message available.
Traceback (most recent call last):
File "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\x4.py", line 175, in export_plc_cross_references
block.export_cross_references(
ValueError: OpennessAccessException: Unexpected exception - no exception message available.
Traceback (most recent call last):
File "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\x4.py", line 175, in export_plc_cross_references
block.export_cross_references(
ValueError: OpennessAccessException: Unexpected exception - no exception message available.
2025-06-19 19:05:53,136 [1] ERROR Siemens.TiaPortal.OpennessApi19.Implementations.Portal OpenProject -
Siemens.TiaPortal.OpennessContracts.OpennessAccessException: Error when calling method 'OpenWithUpgrade' of type 'Siemens.Engineering.ProjectComposition'.
During handling of the above exception, another exception occurred:
Unable to open the project under path 'D:\Trabajo\VM\44 - 98050 - Fiera\InLavoro\PLC\98050_PLC_11\98050_PLC_11.ap19'.
An error occurred while opening the project
The project/library D:\Trabajo\VM\44 - 98050 - Fiera\InLavoro\PLC\98050_PLC_11\98050_PLC_11.ap19 cannot be accessed. It has already been opened by user Miguel on computer CSANUC. Note: If the application was not correctly closed, the open projects and libraries can only be opened again after a 2 minute delay.
Traceback (most recent call last):
File "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\x4.py", line 196, in export_plc_cross_references
raise PortalDisposedException(block_ex, failed_block=block_name)
PortalDisposedException: OpennessAccessException: Unexpected exception - no exception message available.
File "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\x4.py", line 455, in <module>
portal_instance, project_object = open_portal_and_project(tia_version, project_file)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\x4.py", line 413, in open_portal_and_project
project_obj = portal.open_project(project_file_path=str(project_file_path))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: OpennessAccessException: Error when calling method 'OpenWithUpgrade' of type 'Siemens.Engineering.ProjectComposition'.
Unable to open the project under path 'D:\Trabajo\VM\44 - 98050 - Fiera\InLavoro\PLC\98050_PLC_11\98050_PLC_11.ap19'.
An error occurred while opening the project
The project/library D:\Trabajo\VM\44 - 98050 - Fiera\InLavoro\PLC\98050_PLC_11\98050_PLC_11.ap19 cannot be accessed. It has already been opened by user Miguel on computer CSANUC. Note: If the application was not correctly closed, the open projects and libraries can only be opened again after a 2 minute delay.
--- FIN DEL LOG ---

View File

@ -5,5 +5,5 @@
},
"level2": {},
"level3": {},
"working_directory": "C:\\Trabajo\\SIDEL\\13 - E5.007560 - Modifica O&U - SAE235\\Reporte\\ExportTia"
"working_directory": "D:\\Trabajo\\VM\\44 - 98050 - Fiera\\Reporte\\ExportsTia\\Source"
}

View File

@ -1,9 +1,10 @@
{
"path": "C:\\Trabajo\\SIDEL\\13 - E5.007560 - Modifica O&U - SAE235\\Reporte\\ExportTia",
"path": "D:\\Trabajo\\VM\\44 - 98050 - Fiera\\Reporte\\ExportsTia\\Source",
"history": [
"D:\\Trabajo\\VM\\44 - 98050 - Fiera\\Reporte\\ExportsTia\\Source",
"D:\\Trabajo\\VM\\44 - 98050 - Fiera\\Reporte\\ExportsTia",
"C:\\Trabajo\\SIDEL\\13 - E5.007560 - Modifica O&U - SAE235\\Reporte\\ExportTia",
"D:\\Trabajo\\VM\\22 - 93841 - Sidel - Tilting\\Reporte\\TiaExports",
"D:\\Trabajo\\VM\\44 - 98050 - Fiera\\Reporte\\ExportsTia\\Source",
"C:\\Trabajo\\SIDEL\\09 - SAE452 - Diet as Regular - San Giovanni in Bosco\\Reporte\\SourceDoc\\SourcdSD",
"C:\\Trabajo\\SIDEL\\09 - SAE452 - Diet as Regular - San Giovanni in Bosco\\Reporte\\SourceDoc\\SourceXML"
]

View File

@ -0,0 +1,141 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import os
# Agregar el directorio padre al path
sys.path.append('.')
# Importar el convertidor
from x1_lad_converter import SimpleLadConverter
def test_arraytoreal():
"""Probar específicamente ARRAYTOREAL.EXP para verificar preservación de indentación"""
print("=== TEST: ARRAYTOREAL.EXP - Preservación de indentación ST ===")
print("-" * 60)
# Buscar el archivo
possible_paths = [
"ExportTwinCat/ARRAYTOREAL.EXP",
"../ExportTwinCat/ARRAYTOREAL.EXP",
"../../ExportTwinCat/ARRAYTOREAL.EXP",
"C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/ExportTwinCat/ARRAYTOREAL.EXP"
]
test_file = None
for path in possible_paths:
if os.path.exists(path):
test_file = path
break
if test_file is None:
print(f"❌ Error: No se encontró ARRAYTOREAL.EXP")
return
print(f"✓ Archivo encontrado: {test_file}")
print("-" * 60)
# Leer archivo original para mostrar indentación
print("📄 CÓDIGO ORIGINAL:")
with open(test_file, 'r', encoding='utf-8', errors='ignore') as f:
original_lines = f.readlines()
# Mostrar solo las líneas de código ST (después de (* @END_DECLARATION := '0' *))
st_start = False
for i, line in enumerate(original_lines):
if "@END_DECLARATION" in line:
st_start = True
continue
if st_start and line.strip() and not line.strip().startswith("END_FUNCTION"):
print(f" {i+1:2d}: '{line.rstrip()}'")
print("-" * 60)
# Crear convertidor
converter = SimpleLadConverter()
# Parsear archivo
print("🔍 PARSEANDO ARCHIVO...")
converter.parse_file(test_file)
print(f"\n📊 INFORMACIÓN DETECTADA:")
print(f" ✓ Tipo: {getattr(converter, 'program_type', 'PROGRAM')}")
print(f" ✓ Nombre: {converter.program_name}")
print(f" ✓ Path: {converter.program_path}")
print(f" ✓ Variables: {list(converter.var_sections.keys())}")
print(f" ✓ Código ST: {'' if converter.st_main_code else 'No'}")
if converter.st_main_code:
print(f"\n📝 CÓDIGO ST EXTRAÍDO ({len(converter.st_main_code)} caracteres):")
for i, line in enumerate(converter.st_main_code.split('\n')[:10], 1):
print(f" {i:2d}: '{line}'")
# Generar código SCL
print(f"\n📝 GENERANDO CÓDIGO SCL...")
scl_code = converter.convert_to_structured()
# Guardar archivo de prueba
output_file = "test_arraytoreal_indent.scl"
with open(output_file, 'w', encoding='utf-8') as f:
f.write(scl_code)
print(f" ✓ Guardado en: {output_file}")
# Mostrar código SCL generado
print(f"\n📄 CÓDIGO SCL GENERADO:")
lines = scl_code.split('\n')
# Encontrar línea donde empieza el código ST
st_start_line = -1
for i, line in enumerate(lines):
if "Código ST original" in line:
st_start_line = i
break
if st_start_line > -1:
# Mostrar desde el código ST hasta el final de la función
for i in range(st_start_line, min(st_start_line + 20, len(lines))):
if i < len(lines):
line = lines[i]
if line.strip() and ("END_FUNCTION" in line or "END_PROGRAM" in line):
print(f" {i+1:2d}: {line}")
break
print(f" {i+1:2d}: {line}")
# Verificar preservación de indentación
print(f"\n🔍 VERIFICANDO PRESERVACIÓN DE INDENTACIÓN:")
if converter.st_main_code:
original_lines = converter.st_main_code.split('\n')
scl_lines = scl_code.split('\n')
# Encontrar líneas con indentación en el original
original_indented = []
for line in original_lines:
if line.startswith('\t') or line.startswith(' '):
original_indented.append(line)
# Verificar que se preserven en el SCL
if original_indented:
print(f" 📋 Líneas con indentación original: {len(original_indented)}")
print(f" Ejemplo: '{original_indented[0]}'" if original_indented else "")
# Verificar si aparecen en el SCL preservadas
preserved_count = 0
for orig_line in original_indented:
for scl_line in scl_lines:
if orig_line.strip() in scl_line and orig_line.startswith(('\t', ' ')):
preserved_count += 1
break
print(f" ✅ Indentación preservada: {preserved_count}/{len(original_indented)} líneas")
else:
print(f" No se encontraron líneas con indentación específica")
else:
print(f" ⚠ No hay código ST para verificar")
return scl_code
if __name__ == "__main__":
test_arraytoreal()

View File

@ -0,0 +1,37 @@
(* Código SCL generado desde LAD TwinCAT *)
(* Convertidor mejorado con SymPy - Estructura DNF preferida *)
(* Path original: \/Functions_Collection *)
FUNCTION ArrayToReal : REAL
VAR_INPUT
mIn_Value : POINTER TO BYTE;
END_VAR
VAR
i : INT;
p : UDINT;
p1 : UDINT;
mPoint : POINTER TO BYTE;
mPoint1 : POINTER TO BYTE;
mTemp : REAL;
END_VAR
(* === CÓDIGO PRINCIPAL === *)
(* Código ST original *)
(* @END_DECLARATION := '0' *)
mPoint := ADR(mTemp);
FOR i := 3 TO 0 BY -1
DO
p1 := mIn_Value;
mPoint1 := p1 + i;
mPoint^ := mPoint1^;
p := mPoint ;
p := p + 1 ;
mPoint := p ;
END_FOR
ArrayToReal := mTemp;
END_FUNCTION
END_FUNCTION

View File

@ -46,40 +46,53 @@ class SimpleLadConverter:
# Nuevas propiedades para estructura SCL completa
self.program_name = ""
self.program_type = "PROGRAM" # PROGRAM, FUNCTION, FUNCTION_BLOCK, TYPE, VAR_GLOBAL_LIST
self.program_path = ""
self.var_sections = {} # VAR, VAR_INPUT, VAR_OUTPUT, etc.
self.actions = {} # Diccionario de ACTIONs
self.st_main_code = None # Código ST del programa principal
self.type_content = None # Contenido completo de TYPE
def parse_file(self, file_path):
"""Parse el archivo LAD completo incluyendo variables y ACTIONs"""
with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()
# Guardar contenido original para extraer información adicional
self._original_content = content
# Extraer información del header
self._parse_header_info(content)
# Extraer declaraciones de variables
self._parse_variable_declarations(content)
# Encontrar sección LAD
lad_start = content.find('_LD_BODY')
if lad_start != -1:
# Extraer contenido LAD hasta ACTION o END_PROGRAM
action_start = content.find('\nACTION', lad_start)
end_program = content.find('\nEND_PROGRAM', lad_start)
lad_end = action_start if action_start != -1 else end_program
if lad_end == -1:
lad_end = len(content)
lad_content = content[lad_start:lad_end]
lines = lad_content.split('\n')
self._parse_networks(lines)
# Verificar si es un TYPE (solo datos) o VAR_GLOBAL_LIST
if hasattr(self, 'program_type') and self.program_type == 'TYPE':
print("Archivo TYPE detectado - Extrayendo declaraciones")
self._extract_type_content(content)
elif hasattr(self, 'program_type') and self.program_type == 'VAR_GLOBAL_LIST':
print("Archivo de variables globales detectado - Extrayendo todas las secciones")
self._extract_global_variables(content)
else:
print("No se encontró _LD_BODY - Asumiendo código ST")
# Extraer código ST del programa principal
self._extract_st_code(content)
# Encontrar sección LAD
lad_start = content.find('_LD_BODY')
if lad_start != -1:
# Extraer contenido LAD hasta ACTION o END_PROGRAM
action_start = content.find('\nACTION', lad_start)
end_program = content.find('\nEND_PROGRAM', lad_start)
lad_end = action_start if action_start != -1 else end_program
if lad_end == -1:
lad_end = len(content)
lad_content = content[lad_start:lad_end]
lines = lad_content.split('\n')
self._parse_networks(lines)
else:
print("No se encontró _LD_BODY - Asumiendo código ST")
# Extraer código ST del programa principal
self._extract_st_code(content)
# Extraer ACTIONs
self._parse_actions(content)
@ -91,10 +104,18 @@ class SimpleLadConverter:
if path_match:
self.program_path = path_match.group(1)
# Buscar nombre del programa/function_block
program_match = re.search(r'(PROGRAM|FUNCTION_BLOCK)\s+(\w+)', content)
if program_match:
self.program_name = program_match.group(2)
# Verificar si es un archivo de variables globales
global_var_match = re.search(r'\(\*\s*@GLOBAL_VARIABLE_LIST\s*:=\s*(\w+)\s*\*\)', content)
if global_var_match:
self.program_type = "VAR_GLOBAL_LIST"
self.program_name = global_var_match.group(1)
print(f"Archivo de variables globales detectado: {self.program_name}")
else:
# Buscar nombre del programa/function_block/function/type
program_match = re.search(r'(PROGRAM|FUNCTION_BLOCK|FUNCTION|TYPE)\s+(\w+)', content)
if program_match:
self.program_type = program_match.group(1)
self.program_name = program_match.group(2)
print(f"Programa encontrado: {self.program_name}")
if self.program_path:
@ -562,9 +583,26 @@ class SimpleLadConverter:
output.append(f"(* Path original: {self.program_path} *)")
output.append("")
# Declaración del programa
# Verificar si es un TYPE o VAR_GLOBAL_LIST - manejarlos diferente
program_type = self.program_type if hasattr(self, 'program_type') else "PROGRAM"
if program_type == "TYPE":
return self._convert_type_to_scl(output)
elif program_type == "VAR_GLOBAL_LIST":
return self._convert_global_vars_to_scl(output)
# Declaración del programa/función
program_name = self.program_name if self.program_name else "ConvertedProgram"
output.append(f"PROGRAM {program_name}")
# Para FUNCTIONs, necesitamos detectar el tipo de retorno
if program_type == "FUNCTION":
# Buscar tipo de retorno en el código original (ej: FUNCTION ArrayToReal : REAL)
return_type = self._extract_function_return_type()
if return_type:
output.append(f"FUNCTION {program_name} : {return_type}")
else:
output.append(f"FUNCTION {program_name} : BOOL") # Tipo por defecto
else:
output.append(f"{program_type} {program_name}")
# Declaraciones de variables
self._add_variable_sections(output)
@ -601,7 +639,7 @@ class SimpleLadConverter:
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")
# output.append(f" // Optimizada con SymPy DNF")
else:
# Fallback al método original
condition_str = self._convert_logic_to_string(network['logic'])
@ -624,11 +662,12 @@ class SimpleLadConverter:
output.append("")
elif self.st_main_code:
# Hay código ST - copiarlo directamente
# Hay código ST - copiarlo directamente preservando indentación
output.append(" (* Código ST original *)")
for line in self.st_main_code.split('\n'):
if line.strip():
output.append(f" {line.strip()}")
# Preservar indentación original pero agregar indentación base SCL
output.append(f" {line}")
else:
output.append("")
@ -637,12 +676,13 @@ class SimpleLadConverter:
output.append(" (* Sin código principal detectado *)")
output.append("")
# Fin del programa principal
output.append("END_PROGRAM")
# Agregar ACTIONs como subfunciones
self._add_actions_as_procedures(output, program_name)
# Fin del programa principal
program_type = self.program_type if hasattr(self, 'program_type') else "PROGRAM"
output.append(f"END_{program_type}")
return '\n'.join(output)
def _add_variable_sections(self, output):
@ -701,11 +741,12 @@ class SimpleLadConverter:
output.append("")
elif isinstance(action_data, dict) and action_data['type'] == 'ST':
# ACTION con código ST - copiar directamente
# ACTION con código ST - copiar directamente preservando indentación
output.append(" (* Código ST original *)")
for line in action_data['code'].split('\n'):
if line.strip():
output.append(f" {line.strip()}")
# Preservar indentación original pero agregar indentación base SCL
output.append(f" {line}")
else:
output.append("")
@ -714,7 +755,8 @@ class SimpleLadConverter:
output.append(" (* Código original - modo compatibilidad *)")
for line in str(action_data).split('\n'):
if line.strip():
output.append(f" {line.strip()}")
# Preservar indentación original pero agregar indentación base SCL
output.append(f" {line}")
else:
output.append("")
@ -1229,11 +1271,134 @@ class SimpleLadConverter:
print(f"Código ST principal extraído: {len(st_code)} caracteres")
else:
self.st_main_code = None
def _extract_function_return_type(self):
"""Extraer el tipo de retorno de una FUNCTION desde el header"""
if not hasattr(self, '_original_content'):
return None
# Buscar patrón FUNCTION nombre : TIPO
match = re.search(r'FUNCTION\s+\w+\s*:\s*(\w+)', self._original_content)
if match:
return match.group(1)
return None
def _extract_type_content(self, content):
"""Extraer el contenido completo de un TYPE"""
# Buscar desde TYPE hasta END_TYPE
type_start = content.find('TYPE')
if type_start == -1:
return
# Buscar END_TYPE
type_end = content.find('END_TYPE', type_start)
if type_end == -1:
type_end = len(content)
else:
type_end += len('END_TYPE')
# Extraer contenido del TYPE
type_content = content[type_start:type_end].strip()
if type_content:
self.type_content = type_content
print(f"Contenido TYPE extraído: {len(type_content)} caracteres")
else:
self.type_content = None
def _convert_type_to_scl(self, output):
"""Convertir TYPE a SCL - simplemente copiar el contenido original"""
if self.type_content:
# Copiar directamente el contenido del TYPE preservando formato
for line in self.type_content.split('\n'):
if line.strip():
output.append(line)
else:
output.append("")
else:
# Si no hay contenido TYPE, generar estructura básica
program_name = self.program_name if self.program_name else "UnknownType"
output.append(f"TYPE {program_name}:")
output.append("STRUCT")
output.append(" (* Contenido TYPE no detectado *)")
output.append(" Dummy : INT;")
output.append("END_STRUCT")
output.append("END_TYPE")
return '\n'.join(output)
def _extract_global_variables(self, content):
"""Extraer todas las secciones de variables globales"""
# Buscar todas las secciones VAR_GLOBAL
var_global_patterns = [
(r'VAR_GLOBAL\s+PERSISTENT(.*?)END_VAR', 'VAR_GLOBAL PERSISTENT'),
(r'VAR_GLOBAL((?:(?!PERSISTENT)(?!END_VAR).)*?)END_VAR', 'VAR_GLOBAL'),
]
for pattern, var_type in var_global_patterns:
matches = re.findall(pattern, content, re.DOTALL | re.IGNORECASE)
if matches:
variables = []
for match in matches:
# Parsear cada línea de variable
for line in match.split('\n'):
line = line.strip()
if (line and not line.startswith('(*') and
not line.startswith('(************') and
':' in line and not line.startswith('*')):
# Limpiar comentarios inline
if '(*' in line:
# Mantener el comentario inline
pass # No limpiar comentarios para preservar información
variables.append(line.strip())
if variables:
if var_type not in self.var_sections:
self.var_sections[var_type] = []
self.var_sections[var_type].extend(variables)
# Mostrar resumen
for var_type, variables in self.var_sections.items():
print(f"Variables {var_type}: {len(variables)} encontradas")
def _convert_global_vars_to_scl(self, output):
"""Convertir archivo de variables globales a SCL"""
# Para archivos de variables globales, simplemente copiar las declaraciones
# Agregar secciones de variables encontradas
section_order = ['VAR_GLOBAL', 'VAR_GLOBAL PERSISTENT']
for section_type in section_order:
if section_type in self.var_sections:
output.append(f"{section_type}")
for var_line in self.var_sections[section_type]:
# Asegurar que termine con punto y coma
if not var_line.endswith(';'):
var_line += ' ;'
output.append(f" {var_line}")
output.append("END_VAR")
output.append("")
# Si no se encontraron variables, agregar estructura básica
if not self.var_sections:
output.append("VAR_GLOBAL")
output.append(" (* No se detectaron variables globales *)")
output.append(" Dummy : INT ;")
output.append("END_VAR")
return '\n'.join(output)
def main():
"""Función principal - Convierte todos los archivos .EXP a .SCL"""
try:
print("=== Convertidor Masivo LAD a SCL con SymPy ===")
# 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}")
else:
print("=== Convertidor Masivo LAD a SCL con SymPy ===")
# Cargar configuración
configs = load_configuration()
@ -1277,16 +1442,38 @@ def main():
os.makedirs(full_scl_path)
print(f"Directorio creado: {full_scl_path}")
# Buscar todos los archivos .EXP
exp_pattern = os.path.join(working_directory, "*.EXP")
exp_files = glob.glob(exp_pattern)
# Determinar archivos a procesar
if debug_file:
# Modo debug - archivo específico
if not debug_file.endswith('.EXP'):
debug_file += '.EXP'
debug_file_path = os.path.join(working_directory, debug_file)
if not os.path.exists(debug_file_path):
print(f"Error: No se encontró el archivo {debug_file_path}")
return
exp_files = [debug_file_path]
print(f"Procesando archivo específico: {debug_file}")
print(f"Directorio de salida SCL: {full_scl_path}")
# 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
else:
# Modo normal - todos los archivos
exp_pattern = os.path.join(working_directory, "*.EXP")
exp_files = glob.glob(exp_pattern)
if not exp_files:
print(f"No se encontraron archivos .EXP en: {working_directory}")
return
print(f"Encontrados {len(exp_files)} archivos .EXP en: {working_directory}")
print(f"Directorio de salida SCL: {full_scl_path}")
if not exp_files:
print(f"No se encontraron archivos .EXP en: {working_directory}")
return
print(f"Encontrados {len(exp_files)} archivos .EXP en: {working_directory}")
print(f"Directorio de salida SCL: {full_scl_path}")
print()
# Procesar cada archivo

18031
data/log.txt

File diff suppressed because one or more lines are too long