Add technical documentation for parsing TIA Portal _XRef.xml files to generate call trees

- Introduced a comprehensive guide detailing the structure and interpretation of _XRef.xml files.
- Explained key XML elements necessary for constructing call trees, including SourceObject, ReferenceObject, and Location.
- Provided a step-by-step data extraction strategy for identifying caller-callee relationships.
- Included example Python code for parsing XML and aggregating call relationships.
- Addressed considerations for handling multiple files and variations across TIA Portal versions.
This commit is contained in:
Miguel 2025-05-05 12:33:30 +02:00
parent 8fcb441003
commit 1f64cdf448
12 changed files with 29787 additions and 257 deletions

View File

@ -0,0 +1,707 @@
--- Log de Ejecución: x4.py ---
Grupo: ObtainIOFromProjectTia
Directorio de Trabajo: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport
Inicio: 2025-05-05 12:09:26
Fin: 2025-05-05 12:16:20
Duración: 0:06:53.110393
Estado: SUCCESS (Código de Salida: 0)
--- SALIDA ESTÁNDAR (STDOUT) ---
--- TIA Portal Cross-Reference Exporter ---
Selected Project: C:/Trabajo/SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/InLavoro/PLC/SAE196_c0.2/SAE196_c0.2.ap18
Using Export Directory: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref
Connecting to TIA Portal V18.0...
2025-05-05 12:09:30,267 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - Start TIA Portal, please acknowledge the security dialog.
2025-05-05 12:09:30,279 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - With user interface
Connected to TIA Portal.
2025-05-05 12:09:48,418 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal GetProcessId - Process id: 24284
Portal Process ID: 24284
Opening project: SAE196_c0.2.ap18...
2025-05-05 12:09:48,668 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal OpenProject - Open project... C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\InLavoro\PLC\SAE196_c0.2\SAE196_c0.2.ap18
Project opened successfully.
2025-05-05 12:10:06,156 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Project GetPlcs - Found plc PLC with parent name S71500/ET200MP station_1
Found 1 PLC(s). Starting cross-reference export process...
--- Processing PLC: PLC ---
[PLC: PLC] Exporting Program Block Cross-References...
Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\ProgramBlocks_CR
Found 380 program blocks.
Processing block: _CYCL_EXC...
Exporting cross-references for _CYCL_EXC...
Processing block: COMPLETE RESTART...
Exporting cross-references for COMPLETE RESTART...
Processing block: I/O_FLT1...
Exporting cross-references for I/O_FLT1...
Processing block: MOD_ERR...
Exporting cross-references for MOD_ERR...
Processing block: ProDiagOB...
Exporting cross-references for ProDiagOB...
Processing block: Programming error...
Exporting cross-references for Programming error...
Processing block: RACK_FLT...
Exporting cross-references for RACK_FLT...
Processing block: Time error interrupt...
Exporting cross-references for Time error interrupt...
Processing block: Baialage...
Exporting cross-references for Baialage...
Processing block: BlenderCtrl__Main...
Exporting cross-references for BlenderCtrl__Main...
Processing block: BlenderCtrl_CIPModeInit...
Exporting cross-references for BlenderCtrl_CIPModeInit...
Processing block: BlenderCtrl_ProdModeInit...
Exporting cross-references for BlenderCtrl_ProdModeInit...
Processing block: BlenderCtrl_ResetSPWord...
Exporting cross-references for BlenderCtrl_ResetSPWord...
Processing block: BlenderCtrl_UpdatePWord...
Exporting cross-references for BlenderCtrl_UpdatePWord...
Processing block: BlenderPID_NextRecipe...
Exporting cross-references for BlenderPID_NextRecipe...
Processing block: BlenderRinse...
Exporting cross-references for BlenderRinse...
Processing block: BlenderRinse_Done...
Exporting cross-references for BlenderRinse_Done...
Processing block: BlenderRun_ProdTime...
Exporting cross-references for BlenderRun_ProdTime...
Processing block: BlenderRun_Stopping...
Exporting cross-references for BlenderRun_Stopping...
Processing block: Blocco_1...
Exporting cross-references for Blocco_1...
Processing block: Block_compare...
Exporting cross-references for Block_compare...
Processing block: Block_move...
Exporting cross-references for Block_move...
Processing block: CarboWaterLine_Seq...
Exporting cross-references for CarboWaterLine_Seq...
Processing block: Cetrifugal_Head...
Exporting cross-references for Cetrifugal_Head...
Processing block: CIP CVQ...
Exporting cross-references for CIP CVQ...
Processing block: CIP FlipFlop...
Exporting cross-references for CIP FlipFlop...
Processing block: CIPLocal_ProgInizialize...
Exporting cross-references for CIPLocal_ProgInizialize...
Processing block: CIPLocal_WaitEvent_Ctrl...
Exporting cross-references for CIPLocal_WaitEvent_Ctrl...
Processing block: CIPMain...
Exporting cross-references for CIPMain...
Processing block: CIPMain_Flood...
Exporting cross-references for CIPMain_Flood...
Processing block: CIPMain_Total Drain...
Exporting cross-references for CIPMain_Total Drain...
Processing block: Clock Signal...
Exporting cross-references for Clock Signal...
Processing block: CO2 Solubility...
Exporting cross-references for CO2 Solubility...
Processing block: CO2EqPress...
Exporting cross-references for CO2EqPress...
Processing block: CO2InjPressure...
Exporting cross-references for CO2InjPressure...
Processing block: CTRLCoolingSystem...
Exporting cross-references for CTRLCoolingSystem...
Processing block: DeairCO2TempComp...
Exporting cross-references for DeairCO2TempComp...
Processing block: DeaireationValve...
Exporting cross-references for DeaireationValve...
Processing block: Deaireator StartUp_Seq...
Exporting cross-references for Deaireator StartUp_Seq...
Processing block: DeltaP...
Exporting cross-references for DeltaP...
Processing block: FeedForward...
Exporting cross-references for FeedForward...
Processing block: Flow_To_Press_Loss...
Exporting cross-references for Flow_To_Press_Loss...
Processing block: Freq_To_mmH2O...
Exporting cross-references for Freq_To_mmH2O...
Processing block: FrictionLoss...
Exporting cross-references for FrictionLoss...
Processing block: FW_DRand...
Exporting cross-references for FW_DRand...
Processing block: GetProdBrixCO2_Anal_Inpt...
Exporting cross-references for GetProdBrixCO2_Anal_Inpt...
Processing block: Interlocking_Panel_1...
Exporting cross-references for Interlocking_Panel_1...
Processing block: ITC Communic CIPRoom...
Exporting cross-references for ITC Communic CIPRoom...
Processing block: ITC Communic Filler...
Exporting cross-references for ITC Communic Filler...
Processing block: ITC Communic MainRoutine...
Exporting cross-references for ITC Communic MainRoutine...
Processing block: ITC Communic ProdRoom...
Exporting cross-references for ITC Communic ProdRoom...
Processing block: ITC DataIn...
Exporting cross-references for ITC DataIn...
Processing block: ITC DataOut...
Exporting cross-references for ITC DataOut...
Processing block: ITC Exchange MainRoutine...
Exporting cross-references for ITC Exchange MainRoutine...
Processing block: ITC MainRoutine...
Exporting cross-references for ITC MainRoutine...
Processing block: LIMIT_I...
Exporting cross-references for LIMIT_I...
Processing block: LIMIT_R...
Exporting cross-references for LIMIT_R...
Processing block: Maselli_PA_Control...
Exporting cross-references for Maselli_PA_Control...
Processing block: Maselli_PA_Ctrl_Transfer...
Exporting cross-references for Maselli_PA_Ctrl_Transfer...
Processing block: Maselli_PA_Ctrl_Write...
Exporting cross-references for Maselli_PA_Ctrl_Write...
Processing block: MFMAnalogValues_Totalize...
Exporting cross-references for MFMAnalogValues_Totalize...
Processing block: mmH2O_TO_Freq...
Exporting cross-references for mmH2O_TO_Freq...
Processing block: ModValveFault...
Exporting cross-references for ModValveFault...
Processing block: mPDS_SYR_PA_Control...
Exporting cross-references for mPDS_SYR_PA_Control...
Processing block: ONS_R...
Exporting cross-references for ONS_R...
Processing block: Prod Tank RunOut_Seq...
Exporting cross-references for Prod Tank RunOut_Seq...
Processing block: ProductLiterInTank...
Exporting cross-references for ProductLiterInTank...
Processing block: ProductPipeDrain_Seq...
Exporting cross-references for ProductPipeDrain_Seq...
Processing block: ProductPipeRunOut_Seq...
Exporting cross-references for ProductPipeRunOut_Seq...
Processing block: ProductQuality...
Exporting cross-references for ProductQuality...
Processing block: SEL_I...
Exporting cross-references for SEL_I...
Processing block: SEL_R...
Exporting cross-references for SEL_R...
Processing block: SelCheckBrixSource...
Exporting cross-references for SelCheckBrixSource...
Processing block: SLIM_Block...
Exporting cross-references for SLIM_Block...
Processing block: SpeedAdjust...
Exporting cross-references for SpeedAdjust...
Processing block: Syrup Line MFM Prep_Seq...
Exporting cross-references for Syrup Line MFM Prep_Seq...
Processing block: Syrup MFM StartUp_Seq...
Exporting cross-references for Syrup MFM StartUp_Seq...
Processing block: SyrupDensity...
Exporting cross-references for SyrupDensity...
Processing block: SyrupRoomCtrl...
Exporting cross-references for SyrupRoomCtrl...
Processing block: WaterDensity...
Exporting cross-references for WaterDensity...
Processing block: WritePeripheral...
Exporting cross-references for WritePeripheral...
Processing block: CIPRecipeManagement_Data...
Exporting cross-references for CIPRecipeManagement_Data...
Processing block: Co2_Counters_DB...
Exporting cross-references for Co2_Counters_DB...
Processing block: Default_SupervisionDB...
Exporting cross-references for Default_SupervisionDB...
Processing block: ITC Communic CIP DI...
Exporting cross-references for ITC Communic CIP DI...
Processing block: ITC Communic Filler DI...
Exporting cross-references for ITC Communic Filler DI...
Processing block: ITC Communic Mixer DI...
Exporting cross-references for ITC Communic Mixer DI...
Processing block: ITC Communic Product Room DI...
Exporting cross-references for ITC Communic Product Room DI...
Processing block: Key Read & Write Data...
Exporting cross-references for Key Read & Write Data...
Processing block: mPPM303StartUpRamp...
Exporting cross-references for mPPM303StartUpRamp...
Processing block: PID_RMM304_Data...
Exporting cross-references for PID_RMM304_Data...
Processing block: PID_RVN302_Data...
Exporting cross-references for PID_RVN302_Data...
Processing block: PID_RVS318_Data...
Exporting cross-references for PID_RVS318_Data...
Processing block: ProdBrixRecovery_DB...
Exporting cross-references for ProdBrixRecovery_DB...
Processing block: Prod Tank Drain_Seq...
Exporting cross-references for Prod Tank Drain_Seq...
Processing block: _StepMove...
Exporting cross-references for _StepMove...
Processing block: _StepMove_Test...
Exporting cross-references for _StepMove_Test...
Processing block: RecipeManagement_Data...
Exporting cross-references for RecipeManagement_Data...
Processing block: Blender_Procedure Data...
Exporting cross-references for Blender_Procedure Data...
Processing block: BlenderPID__Main_Data...
Exporting cross-references for BlenderPID__Main_Data...
Processing block: BlenderRun_MeasFil_Data...
Exporting cross-references for BlenderRun_MeasFil_Data...
Processing block: BrixTracking_Data...
Exporting cross-references for BrixTracking_Data...
Processing block: CO2Tracking_Data...
Exporting cross-references for CO2Tracking_Data...
Processing block: FirstProduction_Data...
Exporting cross-references for FirstProduction_Data...
Processing block: Input_Data...
Exporting cross-references for Input_Data...
Processing block: ISOonTCP_or_TCP_Protocol_DB...
Exporting cross-references for ISOonTCP_or_TCP_Protocol_DB...
Processing block: MFM_Analog_Value_Data...
Exporting cross-references for MFM_Analog_Value_Data...
Processing block: PID MAIN Data...
Exporting cross-references for PID MAIN Data...
Processing block: PID_Filling_Head_Data...
Exporting cross-references for PID_Filling_Head_Data...
Processing block: PID_RMM301_Data...
Exporting cross-references for PID_RMM301_Data...
Processing block: PID_RMM303_Data...
Exporting cross-references for PID_RMM303_Data...
Processing block: PID_RMP302_Data...
Exporting cross-references for PID_RMP302_Data...
Processing block: PID_RVM301_Data...
Exporting cross-references for PID_RVM301_Data...
Processing block: PID_RVM319_Data...
Exporting cross-references for PID_RVM319_Data...
Processing block: PID_RVP303_Data...
Exporting cross-references for PID_RVP303_Data...
Processing block: Sel_Check_Brix_Data...
Exporting cross-references for Sel_Check_Brix_Data...
Processing block: Signal_Gen_Data...
Exporting cross-references for Signal_Gen_Data...
Processing block: System_Run_Out_Data...
Exporting cross-references for System_Run_Out_Data...
Processing block: SubCarb_DB...
Exporting cross-references for SubCarb_DB...
Processing block: CYC_INT5...
Exporting cross-references for CYC_INT5...
Processing block: BlenderCtrl_All Auto...
Exporting cross-references for BlenderCtrl_All Auto...
Processing block: BlenderCtrl_InitErrors...
Exporting cross-references for BlenderCtrl_InitErrors...
Processing block: BlenderCtrl_ManualActive...
Exporting cross-references for BlenderCtrl_ManualActive...
Processing block: BlenderCtrl_MFM Command...
Exporting cross-references for BlenderCtrl_MFM Command...
Processing block: BlenderPID_FlowMeterErro...
Exporting cross-references for BlenderPID_FlowMeterErro...
Processing block: BlenderPID_PIDResInteg...
Exporting cross-references for BlenderPID_PIDResInteg...
Processing block: BlenderPIDCtrl_PresRelea...
Exporting cross-references for BlenderPIDCtrl_PresRelea...
Processing block: BlenderPIDCtrl_SaveValve...
Exporting cross-references for BlenderPIDCtrl_SaveValve...
Processing block: BlenderRun__Control...
Exporting cross-references for BlenderRun__Control...
Processing block: BlenderRun_SelectConstan...
Exporting cross-references for BlenderRun_SelectConstan...
Processing block: BlendFill StartUp_Seq...
Exporting cross-references for BlendFill StartUp_Seq...
Processing block: CIP_SimpleProgr_Init...
Exporting cross-references for CIP_SimpleProgr_Init...
Processing block: CIPLocal...
Exporting cross-references for CIPLocal...
Processing block: CIPLocal_ExecSimpleCIP...
Exporting cross-references for CIPLocal_ExecSimpleCIP...
Processing block: CIPLocal_ExecStep...
Exporting cross-references for CIPLocal_ExecStep...
Processing block: CIPLocal_ProgStepDown...
Exporting cross-references for CIPLocal_ProgStepDown...
Processing block: CIPLocal_ProgStepUp...
Exporting cross-references for CIPLocal_ProgStepUp...
Processing block: CIPReportManager...
Exporting cross-references for CIPReportManager...
Processing block: CPU_DP Global Diag...
Exporting cross-references for CPU_DP Global Diag...
Processing block: CVQ_1p7_8_Perc...
Exporting cross-references for CVQ_1p7_8_Perc...
Processing block: DELETE...
Exporting cross-references for DELETE...
Processing block: EQ_STRNG...
Exporting cross-references for EQ_STRNG...
Processing block: FillerControl...
Exporting cross-references for FillerControl...
Processing block: FillerControl_DataSend...
Exporting cross-references for FillerControl_DataSend...
Processing block: FillingTime...
Exporting cross-references for FillingTime...
Processing block: Input_CheckFlowMetersSta...
Exporting cross-references for Input_CheckFlowMetersSta...
Processing block: Input_DigitalCtrl...
Exporting cross-references for Input_DigitalCtrl...
Processing block: Input_DigitalScanner...
Exporting cross-references for Input_DigitalScanner...
Processing block: Instrument_Scanner...
Exporting cross-references for Instrument_Scanner...
Processing block: Interlocking_Panel...
Exporting cross-references for Interlocking_Panel...
Processing block: Maselli_PA_Ctrl_Read...
Exporting cross-references for Maselli_PA_Ctrl_Read...
Processing block: MaxCarboCO2 Vol...
Exporting cross-references for MaxCarboCO2 Vol...
Processing block: MessageScroll...
Exporting cross-references for MessageScroll...
Processing block: mPDS_SYR_PA_Ctrl_Read...
Exporting cross-references for mPDS_SYR_PA_Ctrl_Read...
Processing block: Output_CO2InjPress...
Exporting cross-references for Output_CO2InjPress...
Processing block: Pneumatic Valve Fault...
Exporting cross-references for Pneumatic Valve Fault...
Processing block: PPM O2...
Exporting cross-references for PPM O2...
Processing block: PPM303_VFC_Ctrl...
Exporting cross-references for PPM303_VFC_Ctrl...
Processing block: PPM305_VFC_Ctrl...
Exporting cross-references for PPM305_VFC_Ctrl...
Processing block: PPM307_VFC_Ctrl...
Exporting cross-references for PPM307_VFC_Ctrl...
Processing block: PPN301_VFC_Ctrl...
Exporting cross-references for PPN301_VFC_Ctrl...
Processing block: PPP302_VFC_Ctrl...
Exporting cross-references for PPP302_VFC_Ctrl...
Processing block: ProdBrixRecovery_BrixCal...
Exporting cross-references for ProdBrixRecovery_BrixCal...
Processing block: ProdReportManager...
Exporting cross-references for ProdReportManager...
Processing block: ProductQuality_Messages...
Exporting cross-references for ProductQuality_Messages...
Processing block: Profibus Network...
Exporting cross-references for Profibus Network...
Processing block: QCO Monitor...
Exporting cross-references for QCO Monitor...
Processing block: ReadAnalogIn...
Exporting cross-references for ReadAnalogIn...
Processing block: RecipeCalculation...
Exporting cross-references for RecipeCalculation...
Processing block: REPLACE_Mod...
Exporting cross-references for REPLACE_Mod...
Processing block: SyrBrix_SyrupCorrPerc...
Exporting cross-references for SyrBrix_SyrupCorrPerc...
Processing block: Syrup Rinse QCO_Seq...
Exporting cross-references for Syrup Rinse QCO_Seq...
Processing block: SyrupRoomCtrl_UpdateVal...
Exporting cross-references for SyrupRoomCtrl_UpdateVal...
Processing block: T_Timer...
Exporting cross-references for T_Timer...
Processing block: TankLevelToHeight...
Exporting cross-references for TankLevelToHeight...
Processing block: VacuumCtrl...
Exporting cross-references for VacuumCtrl...
Processing block: ValveFlow...
Exporting cross-references for ValveFlow...
Processing block: BlenderPID__Main...
Exporting cross-references for BlenderPID__Main...
Processing block: BlenderPID_BlendingFault...
Exporting cross-references for BlenderPID_BlendingFault...
Processing block: BlenderPID_PIDFFCalc...
Exporting cross-references for BlenderPID_PIDFFCalc...
Processing block: BlenderPID_PIDInitParam...
Exporting cross-references for BlenderPID_PIDInitParam...
Processing block: BlenderPID_PIDSPCalc...
Exporting cross-references for BlenderPID_PIDSPCalc...
Processing block: BlenderPIDCtrl_Monitor...
Exporting cross-references for BlenderPIDCtrl_Monitor...
Processing block: BlenderPIDCtrl_ReadAnIn...
Exporting cross-references for BlenderPIDCtrl_ReadAnIn...
Processing block: BlenderPIDCtrl_SaveInteg...
Exporting cross-references for BlenderPIDCtrl_SaveInteg...
Processing block: BlenderRun_MeasFilSpeed...
Exporting cross-references for BlenderRun_MeasFilSpeed...
Processing block: BrixTracking_ProdSamples...
Exporting cross-references for BrixTracking_ProdSamples...
Processing block: BrixTracking_SampleTime...
Exporting cross-references for BrixTracking_SampleTime...
Processing block: CIPRecipeManagement...
Exporting cross-references for CIPRecipeManagement...
Processing block: Co2_Counters...
Exporting cross-references for Co2_Counters...
Processing block: CO2Tracking...
Exporting cross-references for CO2Tracking...
Processing block: CO2Tracking_ProdSamples...
Exporting cross-references for CO2Tracking_ProdSamples...
Processing block: CO2Tracking_SampleTime...
Exporting cross-references for CO2Tracking_SampleTime...
Processing block: Default_SupervisionFB...
Exporting cross-references for Default_SupervisionFB...
Processing block: Delay...
Exporting cross-references for Delay...
Processing block: Input...
Exporting cross-references for Input...
Processing block: Integral...
Exporting cross-references for Integral...
Processing block: Key Read & Write...
Exporting cross-references for Key Read & Write...
Processing block: LowPassFilter...
Exporting cross-references for LowPassFilter...
Processing block: MFMAnalogValues...
Exporting cross-references for MFMAnalogValues...
Processing block: MSE Slope...
Exporting cross-references for MSE Slope...
Processing block: PID_Filling_Head_Calc...
Exporting cross-references for PID_Filling_Head_Calc...
Processing block: PID_RMM301...
Exporting cross-references for PID_RMM301...
Processing block: PID_RMM303...
Exporting cross-references for PID_RMM303...
Processing block: PID_RMM304...
Exporting cross-references for PID_RMM304...
Processing block: PID_RMP302...
Exporting cross-references for PID_RMP302...
Processing block: PID_RVM301...
Exporting cross-references for PID_RVM301...
Processing block: PID_RVM319_PRD...
Exporting cross-references for PID_RVM319_PRD...
Processing block: PID_RVN302...
Exporting cross-references for PID_RVN302...
Processing block: PID_RVP303...
Exporting cross-references for PID_RVP303...
Processing block: PID_RVS318...
Exporting cross-references for PID_RVS318...
Processing block: PIDControl...
Exporting cross-references for PIDControl...
Processing block: Procedure...
Exporting cross-references for Procedure...
Processing block: ProcedureBlendFill StartUp...
Exporting cross-references for ProcedureBlendFill StartUp...
Processing block: ProcedureBrixTracking...
Exporting cross-references for ProcedureBrixTracking...
Processing block: ProcedureCarboWaterLine...
Exporting cross-references for ProcedureCarboWaterLine...
Processing block: ProcedureDeaireator StartUp...
Exporting cross-references for ProcedureDeaireator StartUp...
Processing block: ProcedureFirstProduction...
Exporting cross-references for ProcedureFirstProduction...
Processing block: ProcedureProdBrixRecovery...
Exporting cross-references for ProcedureProdBrixRecovery...
Processing block: ProcedureProdTankDrain...
Exporting cross-references for ProcedureProdTankDrain...
Processing block: ProcedureProdTankRunOut...
Exporting cross-references for ProcedureProdTankRunOut...
Processing block: ProcedureSyrup RunOut...
Exporting cross-references for ProcedureSyrup RunOut...
Processing block: ProcedureSyrupLineMFMPrep...
Exporting cross-references for ProcedureSyrupLineMFMPrep...
Processing block: ProcedureSyrupMFMStartUp...
Exporting cross-references for ProcedureSyrupMFMStartUp...
Processing block: ProductAvailable...
Exporting cross-references for ProductAvailable...
Processing block: ProductPipeDrain...
Exporting cross-references for ProductPipeDrain...
Processing block: ProductPipeRunOut...
Exporting cross-references for ProductPipeRunOut...
Processing block: Signal Gen...
Exporting cross-references for Signal Gen...
Processing block: SlewLimit...
Exporting cross-references for SlewLimit...
Processing block: Statistical_Analisys...
Exporting cross-references for Statistical_Analisys...
Processing block: SubCarb...
Exporting cross-references for SubCarb...
Processing block: SyrBrix Autocorrection...
Exporting cross-references for SyrBrix Autocorrection...
Processing block: System_Run_Out...
Exporting cross-references for System_Run_Out...
Processing block: Blender_Constants...
Exporting cross-references for Blender_Constants...
Processing block: Blender_Variables...
Exporting cross-references for Blender_Variables...
Processing block: Blender_Variables_Pers...
Exporting cross-references for Blender_Variables_Pers...
Processing block: Blocco_dati_Test...
Exporting cross-references for Blocco_dati_Test...
Processing block: CIP_Program_Variables...
Exporting cross-references for CIP_Program_Variables...
Processing block: CIPRecipe#01...
Exporting cross-references for CIPRecipe#01...
Processing block: CIPRecipe#02...
Exporting cross-references for CIPRecipe#02...
Processing block: CIPRecipe#03...
Exporting cross-references for CIPRecipe#03...
Processing block: CIPRecipe#04...
Exporting cross-references for CIPRecipe#04...
Processing block: CIPRecipe#05...
Exporting cross-references for CIPRecipe#05...
Processing block: CIPRecipe#06...
Exporting cross-references for CIPRecipe#06...
Processing block: CIPRecipe#07...
Exporting cross-references for CIPRecipe#07...
Processing block: CIPRecipe#08...
Exporting cross-references for CIPRecipe#08...
Processing block: CIPRecipe#09...
Exporting cross-references for CIPRecipe#09...
Processing block: CIPRecipe#10...
Exporting cross-references for CIPRecipe#10...
Processing block: CIPRecipe#11...
Exporting cross-references for CIPRecipe#11...
Processing block: CIPRecipe#12...
Exporting cross-references for CIPRecipe#12...
Processing block: CIPRecipe#13...
Exporting cross-references for CIPRecipe#13...
Processing block: CIPRecipe#14...
Exporting cross-references for CIPRecipe#14...
Processing block: CIPRecipe#15...
Exporting cross-references for CIPRecipe#15...
Processing block: CIPRecipe#16...
Exporting cross-references for CIPRecipe#16...
Processing block: CIPRecipe#17...
Exporting cross-references for CIPRecipe#17...
Processing block: CIPRecipe#18...
Exporting cross-references for CIPRecipe#18...
Processing block: CIPRecipe#19...
Exporting cross-references for CIPRecipe#19...
Processing block: CIPRecipe#20...
Exporting cross-references for CIPRecipe#20...
Processing block: CIPRecipe#21...
Exporting cross-references for CIPRecipe#21...
Processing block: CIPRecipe#22...
Exporting cross-references for CIPRecipe#22...
Processing block: CIPRecipe#23...
Exporting cross-references for CIPRecipe#23...
Processing block: CIPRecipe#24...
Exporting cross-references for CIPRecipe#24...
Processing block: CIPRecipe#25...
Exporting cross-references for CIPRecipe#25...
Processing block: CIPRecipe#26...
Exporting cross-references for CIPRecipe#26...
Processing block: CIPRecipe#27...
Exporting cross-references for CIPRecipe#27...
Processing block: CIPRecipe#28...
Exporting cross-references for CIPRecipe#28...
Processing block: CIPRecipe#29...
Exporting cross-references for CIPRecipe#29...
Processing block: CIPRecipe#30...
Exporting cross-references for CIPRecipe#30...
Processing block: CIPReportDB...
Exporting cross-references for CIPReportDB...
Processing block: Filler_Head_Variables...
Exporting cross-references for Filler_Head_Variables...
Processing block: GLOBAL_DIAG_DB...
Exporting cross-references for GLOBAL_DIAG_DB...
Processing block: HMI CPU_DP Diag...
Exporting cross-references for HMI CPU_DP Diag...
Processing block: HMI Key User...
Exporting cross-references for HMI Key User...
Processing block: HMI_Alarms...
Exporting cross-references for HMI_Alarms...
Processing block: HMI_Digital...
Exporting cross-references for HMI_Digital...
ERROR accessing Program Blocks for cross-reference export: RemotingException: El objeto '/7a4a4a73_a97d_46f2_83b4_4f5e9d0e966e/df6uqosgttpdtg38rqj6huml_447.rem' se desconectó o no existe en el servidor.
[PLC: PLC] Exporting PLC Tag Table Cross-References...
Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\PlcTags_CR
Found 10 Tag Tables.
Processing Tag Table: Memories...
Exporting cross-references for Memories...
Processing Tag Table: Tabella delle variabili standard...
Exporting cross-references for Tabella delle variabili standard...
Processing Tag Table: Timers_Counters...
Exporting cross-references for Timers_Counters...
Processing Tag Table: Inputs...
Exporting cross-references for Inputs...
Processing Tag Table: Outputs...
Exporting cross-references for Outputs...
Processing Tag Table: Tabella delle variabili_1...
Exporting cross-references for Tabella delle variabili_1...
Processing Tag Table: Tabella delle variabili_2...
Exporting cross-references for Tabella delle variabili_2...
Processing Tag Table: OutputsFesto...
Exporting cross-references for OutputsFesto...
Processing Tag Table: InputsMaster...
Exporting cross-references for InputsMaster...
Processing Tag Table: OutputsMaster...
Exporting cross-references for OutputsMaster...
Tag Table CR Export Summary: Exported=10, Skipped/Errors=0
[PLC: PLC] Exporting PLC Data Type (UDT) Cross-References...
Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\PlcDataTypes_CR
Found 24 UDTs.
Processing UDT: AnalogInstrument...
Exporting cross-references for AnalogInstrument...
Processing UDT: CIP_Link_Type...
Exporting cross-references for CIP_Link_Type...
Processing UDT: CIP_Simple_Type...
Exporting cross-references for CIP_Simple_Type...
Processing UDT: CIP_Step_Type...
Exporting cross-references for CIP_Step_Type...
Processing UDT: CIP_WaitEvent_Type...
Exporting cross-references for CIP_WaitEvent_Type...
Processing UDT: Device...
Exporting cross-references for Device...
Processing UDT: DigitalInstrument...
Exporting cross-references for DigitalInstrument...
Processing UDT: FunctionButton...
Exporting cross-references for FunctionButton...
Processing UDT: PID...
Exporting cross-references for PID...
Processing UDT: QCO Phase...
Exporting cross-references for QCO Phase...
Processing UDT: QCO Spare...
Exporting cross-references for QCO Spare...
Processing UDT: QCO Timer...
Exporting cross-references for QCO Timer...
Processing UDT: QCO Timer_Array_1...
Exporting cross-references for QCO Timer_Array_1...
Processing UDT: Recipe_Prod...
Exporting cross-references for Recipe_Prod...
Processing UDT: ReportCIPSimpleData...
Exporting cross-references for ReportCIPSimpleData...
Processing UDT: TADDR_PAR...
Exporting cross-references for TADDR_PAR...
Processing UDT: TCON_PAR...
Exporting cross-references for TCON_PAR...
Processing UDT: TCON_PAR_LF...
Exporting cross-references for TCON_PAR_LF...
Processing UDT: Tipo di dati utente_1...
Exporting cross-references for Tipo di dati utente_1...
Processing UDT: Tipo di dati utente_2...
Exporting cross-references for Tipo di dati utente_2...
Processing UDT: ASLeds...
Exporting cross-references for ASLeds...
Processing UDT: IFLeds...
Exporting cross-references for IFLeds...
Processing UDT: SV_FB_State...
Exporting cross-references for SV_FB_State...
Processing UDT: SV_State...
Exporting cross-references for SV_State...
UDT CR Export Summary: Exported=24, Skipped/Errors=0
[PLC: PLC] Attempting to Export System Block Cross-References...
Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\SystemBlocks_CR
Found 9 system blocks (using get_system_blocks).
Processing System Block: T_301...
Exporting cross-references for T_301...
Processing System Block: IEC_Timer_0_DB_9...
Exporting cross-references for IEC_Timer_0_DB_9...
Processing System Block: T_302...
Exporting cross-references for T_302...
Processing System Block: GET_Reciver...
Exporting cross-references for GET_Reciver...
Processing System Block: PUT_Send_Filler...
Exporting cross-references for PUT_Send_Filler...
Processing System Block: LED...
Exporting cross-references for LED...
Processing System Block: SCALE...
Exporting cross-references for SCALE...
Processing System Block: CONT_C...
Exporting cross-references for CONT_C...
Processing System Block: DeviceStates...
Exporting cross-references for DeviceStates...
System Block CR Export Summary: Exported=9, Skipped/Errors=0
[PLC: PLC] Attempting to Export Software Unit Cross-References...
Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\SoftwareUnits_CR
Found 0 Software Units.
Software Unit CR Export Summary: Exported=0, Skipped/Errors=0
--- Finished processing PLC: PLC ---
Cross-reference export process completed.
Closing TIA Portal...
2025-05-05 12:16:12,051 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal ClosePortal - Close TIA Portal
TIA Portal closed.
Script finished.
--- ERRORES (STDERR) ---
Traceback (most recent call last):
File "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\x4.py", line 100, in export_plc_cross_references
block_name = block.get_name()
^^^^^^^^^^^^^^^^
ValueError: RemotingException: El objeto '/7a4a4a73_a97d_46f2_83b4_4f5e9d0e966e/df6uqosgttpdtg38rqj6huml_447.rem' se desconectó o no existe en el servidor.
--- FIN DEL LOG ---

View File

@ -16,5 +16,11 @@
"short_description": "Extrae IOs de un proyecto TIA Portal y genera un archivo Markdown.",
"long_description": "Este script procesa un archivo AML exportado desde TIA Portal para extraer información de los IOs y generar un archivo Markdown con un resumen detallado.\n***\n**Lógica Principal:**\n\n1. **Selección de Archivo AML:** Abre un cuadro de diálogo para seleccionar el archivo AML exportado desde TIA Portal.\n2. **Procesamiento de Datos:**\n * Extrae información de dispositivos, redes y conexiones desde el archivo AML.\n * Identifica PLCs, redes y módulos IO.\n * Genera una estructura jerárquica de los dispositivos y sus conexiones.\n3. **Generación de Markdown:**\n * Crea un archivo Markdown con un resumen jerárquico de hardware y conexiones IO.\n * Incluye un árbol de conexiones IO hacia arriba para depuración.\n4. **Salida:** Guarda los resultados en archivos Markdown y JSON en el directorio configurado.",
"hidden": false
},
"x4.py": {
"display_name": "4: Exportar Referencias Cruzadas",
"short_description": "Script para exportar las referencias cruzadas",
"long_description": "",
"hidden": false
}
}

File diff suppressed because it is too large Load Diff

View File

@ -103,13 +103,13 @@ def export_plc_cross_references(plc, export_base_dir):
# Note: Consistency check might not be needed/available before cross-ref export
print(f" Exporting cross-references for {block_name}...")
block.export_cross_references(
target_directory_path=str(
target_directorypath=str(
blocks_cr_path
), # API likely needs string path
filter=CROSS_REF_FILTER,
)
blocks_cr_exported += 1
except ts.TiaException as block_ex:
except RuntimeError as block_ex:
print(
f" TIA ERROR exporting cross-references for block {block_name}: {block_ex}"
)
@ -149,10 +149,10 @@ def export_plc_cross_references(plc, export_base_dir):
try:
print(f" Exporting cross-references for {table_name}...")
table.export_cross_references(
target_directory_path=str(tags_cr_path), filter=CROSS_REF_FILTER
target_directorypath=str(tags_cr_path), filter=CROSS_REF_FILTER
)
tags_cr_exported += 1
except ts.TiaException as table_ex:
except RuntimeError as table_ex:
print(
f" TIA ERROR exporting cross-references for Tag Table {table_name}: {table_ex}"
)
@ -192,10 +192,10 @@ def export_plc_cross_references(plc, export_base_dir):
try:
print(f" Exporting cross-references for {udt_name}...")
udt.export_cross_references(
target_directory_path=str(udts_cr_path), filter=CROSS_REF_FILTER
target_directorypath=str(udts_cr_path), filter=CROSS_REF_FILTER
)
udts_cr_exported += 1
except ts.TiaException as udt_ex:
except RuntimeError as udt_ex:
print(
f" TIA ERROR exporting cross-references for UDT {udt_name}: {udt_ex}"
)
@ -238,11 +238,11 @@ def export_plc_cross_references(plc, export_base_dir):
try:
print(f" Exporting cross-references for {sys_block_name}...")
sys_block.export_cross_references(
target_directory_path=str(sys_blocks_cr_path),
target_directorypath=str(sys_blocks_cr_path),
filter=CROSS_REF_FILTER,
)
sys_blocks_cr_exported += 1
except ts.TiaException as sys_ex:
except RuntimeError as sys_ex:
print(
f" TIA ERROR exporting cross-references for System Block {sys_block_name}: {sys_ex}"
)
@ -292,11 +292,11 @@ def export_plc_cross_references(plc, export_base_dir):
try:
print(f" Exporting cross-references for {unit_name}...")
unit.export_cross_references(
target_directory_path=str(sw_units_cr_path),
target_directorypath=str(sw_units_cr_path),
filter=CROSS_REF_FILTER,
)
sw_units_cr_exported += 1
except ts.TiaException as unit_ex:
except RuntimeError as unit_ex:
print(
f" TIA ERROR exporting cross-references for Software Unit {unit_name}: {unit_ex}"
)
@ -402,7 +402,7 @@ if __name__ == "__main__":
print("\nCross-reference export process completed.")
except ts.TiaException as tia_ex:
except RuntimeError as tia_ex:
print(f"\nTIA Portal Openness Error: {tia_ex}")
traceback.print_exc()
except FileNotFoundError:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -233,6 +233,29 @@ if __name__ == "__main__":
for xml_file in xml_files_found
]
# --- NUEVO: Identificar bloques SCL nativos ---
log_message("\n--- Fase 0.5: Identificando archivos .scl nativos existentes ---", log_f)
native_scl_blocks = set()
try:
# Usar un patrón similar a la Fase 1.5 para encontrar SCLs en el proyecto fuente
search_scl_pattern_native = os.path.join(xml_project_dir, "**", "*.scl")
existing_scl_files_native = glob.glob(search_scl_pattern_native, recursive=True)
# Excluir directorios de salida para evitar auto-referencias si están anidados
scl_output_dir_abs_native = os.path.abspath(os.path.join(xml_project_dir, cfg_scl_output_dirname))
xref_output_dir_abs_native = os.path.abspath(os.path.join(xml_project_dir, cfg_xref_output_dirname))
for scl_file_path in existing_scl_files_native:
if not os.path.abspath(os.path.dirname(scl_file_path)).startswith(scl_output_dir_abs_native) and \
not os.path.abspath(os.path.dirname(scl_file_path)).startswith(xref_output_dir_abs_native):
base_name = os.path.splitext(os.path.basename(scl_file_path))[0]
native_scl_blocks.add(base_name)
log_message(f"Se identificaron {len(native_scl_blocks)} posibles bloques SCL nativos (con archivo .scl).", log_f)
except Exception as e:
log_message(f"Error durante la identificación de SCL nativos: {e}. Se continuará sin priorización.", log_f)
# --- FIN NUEVO ---
# --- Directorios de salida ---
# Estos directorios ahora se crearán DENTRO de xml_project_dir (es decir, dentro de 'PLC')
scl_output_dir = os.path.join(xml_project_dir, cfg_scl_output_dirname) # Usar valor de config
@ -252,6 +275,7 @@ if __name__ == "__main__":
skipped_full_count = 0
failed_count = 0
skipped_partial_count = 0
skipped_for_native_scl = 0 # <-- NUEVO: Contador para SCL nativos
for i, xml_filepath in enumerate(xml_files_found):
relative_path = os.path.relpath(xml_filepath, working_directory)
@ -266,6 +290,16 @@ if __name__ == "__main__":
parsing_dir, f"{base_filename}_processed.json" # <-- Corregido: nombre correcto
)
# --- NUEVO: Comprobar si es un SCL nativo ---
if base_filename in native_scl_blocks:
log_message(
f"--- SALTANDO PROCESAMIENTO XML (x1, x2, x3) para: {relative_path}. Se usará el archivo .scl original existente. ---",
log_f,
)
skipped_for_native_scl += 1
continue # Pasar al siguiente archivo XML
# --- FIN NUEVO ---
# 1. Comprobar estado de salto
skip_info = check_skip_status(
xml_filepath, processed_json_filepath, scl_output_dir, log_f
@ -513,6 +547,10 @@ if __name__ == "__main__":
log_f,
)
log_message(f"Archivos fallidos (en x1, x2, x3 o error inesperado): {failed_count}", log_f)
log_message( # <-- NUEVO: Reportar SCL nativos saltados
f"Archivos XML omitidos (priorizando .scl nativo): {skipped_for_native_scl}",
log_f,
)
log_message(f"Archivos SCL existentes copiados (Fase 1.5): {copied_scl_count}", log_f) # <-- ADDED: Report copied SCL
log_message(f"Archivos SCL existentes omitidos por conflicto (Fase 1.5): {skipped_scl_count}", log_f) # <-- ADDED: Report skipped SCL
log_message(

View File

@ -295,6 +295,8 @@ def convert_xml_to_json(xml_filepath, json_filepath):
print("Paso 3: Extrayendo atributos del bloque...")
attribute_list_node = the_block.xpath("./AttributeList") # Buscar hijo directo
block_name_val, block_number_val, block_lang_val = "Unknown", None, "Unknown"
instance_of_name_val = None # <-- NUEVO: Para InstanceDB
instance_of_type_val = None # <-- NUEVO: Para InstanceDB
block_comment_val = ""
if attribute_list_node:
@ -308,6 +310,12 @@ def convert_xml_to_json(xml_filepath, json_filepath):
# Asignar lenguaje por defecto si no se encuentra
block_lang_val = lang_node[0].strip() if lang_node else \
("DB" if block_type_found in ["GlobalDB", "InstanceDB"] else "Unknown") # <-- MODIFIED: Include InstanceDB for DB language default
# <-- NUEVO: Extraer info de instancia si es InstanceDB -->
if block_type_found == "InstanceDB":
inst_name_node = attr_list.xpath("./InstanceOfName/text()")
instance_of_name_val = inst_name_node[0].strip() if inst_name_node else None
inst_type_node = attr_list.xpath("./InstanceOfType/text()") # Generalmente 'FB'
instance_of_type_val = inst_type_node[0].strip() if inst_type_node else None
print(f"Paso 3: Atributos: Nombre='{block_name_val}', Número={block_number_val}, Lenguaje Bloque='{block_lang_val}'")
# Extraer comentario del bloque (puede estar en AttributeList o ObjectList)

View File

@ -62,10 +62,11 @@ INDENT_STEP = " "
# --- Funciones de Análisis (find_calls_in_scl, find_db_tag_usage, find_plc_tag_usage sin cambios) ---
# (Se omiten por brevedad, son las mismas de la versión anterior)
def find_calls_in_scl(scl_code, block_data):
# <-- MODIFICADO: Añadir instance_db_to_fb_map como parámetro -->
def find_calls_in_scl(scl_code, block_data, instance_db_to_fb_map):
calls = defaultdict(int)
known_blocks = set(block_data.keys())
# La lógica de known_instances puede ser menos relevante ahora, pero la dejamos por si acaso
known_instances = set()
for name, data in block_data.items():
block_info = data.get("data", {})
@ -146,17 +147,28 @@ def find_calls_in_scl(scl_code, block_data):
potential_name_quoted = match.group(1)
potential_name_clean = match.group(2)
if potential_name_clean.upper() in system_funcs:
continue
is_instance_call = (
potential_name_clean.startswith("#")
or potential_name_quoted in known_instances
)
if is_instance_call:
pass
elif potential_name_clean in known_blocks:
callee_type = block_data[potential_name_clean]["data"].get("block_type")
if callee_type in ["FC", "FB"]:
calls[potential_name_clean] += 1
continue # Ignorar palabras clave del lenguaje y funciones estándar
# <-- NUEVO: Comprobar si es una llamada a un DB de instancia conocido -->
fb_type_name = instance_db_to_fb_map.get(potential_name_clean)
if fb_type_name:
# ¡Encontrado! Es una llamada vía DB de instancia. Contabilizar para el FB base.
calls[fb_type_name] += 1
else:
# <-- Lógica Original (modificada para else) -->
# No es un DB de instancia conocido, ¿es una llamada a FC/FB directamente o una instancia local (#)?
is_local_instance_call = potential_name_clean.startswith("#")
# La comprobación 'potential_name_quoted in known_instances' es menos fiable, priorizamos el mapa.
if is_local_instance_call:
# Podríamos intentar resolver el tipo de la instancia local si tuviéramos esa info aquí,
# pero por ahora, simplemente la ignoramos para no contarla incorrectamente.
pass
elif potential_name_clean in known_blocks:
# Es un nombre de bloque conocido, ¿es FC o FB?
callee_type = block_data[potential_name_clean]["data"].get("block_type")
if callee_type in ["FC", "FB"]:
calls[potential_name_clean] += 1 # Llamada directa a FC o FB
return calls
@ -387,7 +399,7 @@ def generate_call_tree_output(call_graph, block_data, base_xref_dir, max_call_de
a los archivos .md en xref_output/source.
"""
output_lines = ["# Árbol de Referencias Cruzadas de Llamadas\n"]
output_lines.append(f"(Profundidad máxima: {MAX_CALL_DEPTH})\n")
output_lines.append(f"(Profundidad máxima: {max_call_depth})\n") # <-- Usar el parámetro
root_nodes = sorted( # Encontrar OBs
[
name
@ -560,6 +572,21 @@ def generate_cross_references(
if not block_data:
print("Error: No se pudieron cargar datos.", file=sys.stderr)
return False
print(
f"Datos cargados para {len(block_data)} bloques."
)
# <-- NUEVO: Crear mapa de DB de Instancia a FB -->
instance_db_to_fb_map = {}
for block_name, block_entry in block_data.items():
b_data = block_entry.get("data", {})
if b_data.get("block_type") == "InstanceDB":
instance_of_name = b_data.get("InstanceOfName") # Clave añadida en x1
if instance_of_name and instance_of_name in block_data: # Verificar que el FB existe
instance_db_to_fb_map[block_name] = instance_of_name
elif instance_of_name:
print(f"Advertencia: InstanceDB '{block_name}' instancia a '{instance_of_name}', pero ese FB no se encontró en los datos cargados.", file=sys.stderr)
print(f"Mapa InstanciaDB -> FB creado con {len(instance_db_to_fb_map)} entradas.")
print(
f"Datos cargados para {len(block_data)} bloques ({len(plc_tag_names)} PLC Tags globales)."
)
@ -575,34 +602,37 @@ def generate_cross_references(
if block_type not in ["OB", "FC", "FB"]:
continue
caller_name = block_name
for network in data.get("networks", []):
combined_scl = ""
network_has_code = False
for instruction in network.get("logic", []):
if not instruction.get("grouped", False):
scl_code = instruction.get("scl", "")
edge_update_code = instruction.get("_edge_mem_update_scl", "")
if scl_code or edge_update_code:
network_has_code = True
combined_scl += (
(scl_code or "") + "\n" + (edge_update_code or "") + "\n"
)
if not network_has_code:
continue
calls_found = find_calls_in_scl(combined_scl, block_data)
# <-- MODIFICADO: Leer el archivo SCL completo en lugar de reconstruir desde JSON -->
scl_filename = format_variable_name(caller_name) + ".scl"
# Construir la ruta al archivo SCL dentro del directorio scl_output
scl_filepath = os.path.join(project_root_dir, scl_output_dirname, scl_filename)
full_scl_content = ""
if os.path.exists(scl_filepath):
try:
with open(scl_filepath, "r", encoding="utf-8") as f_scl:
full_scl_content = f_scl.read()
except Exception as read_err:
print(f" Advertencia: No se pudo leer el archivo SCL '{scl_filepath}' para análisis: {read_err}", file=sys.stderr)
else:
print(f" Advertencia: No se encontró el archivo SCL '{scl_filepath}' para análisis. El bloque podría no tener código ejecutable o hubo un error previo.", file=sys.stderr)
if full_scl_content:
# <-- MODIFICADO: Pasar el mapa a find_calls_in_scl -->
calls_found = find_calls_in_scl(full_scl_content, block_data, instance_db_to_fb_map)
for callee_name, count in calls_found.items():
if callee_name in block_data and block_data[callee_name]["data"].get(
"block_type"
) in ["FC", "FB"]:
call_graph[caller_name][callee_name] += count
db_usage_found = find_db_tag_usage(combined_scl)
db_usage_found = find_db_tag_usage(full_scl_content)
for db_tag, access_counts in db_usage_found.items():
db_name_part = db_tag.split(".")[0]
db_name_part = db_tag.split(".")[0].strip('"') # Limpiar comillas
if db_name_part in all_db_names or (
db_name_part.startswith("DB") and db_name_part[2:].isdigit()
):
db_users[db_name_part].add(caller_name)
plc_usage_found = find_plc_tag_usage(combined_scl, plc_tag_names)
plc_usage_found = find_plc_tag_usage(full_scl_content, plc_tag_names)
for plc_tag, access_counts in plc_usage_found.items():
plc_tag_users[plc_tag].add(caller_name)
@ -616,7 +646,7 @@ def generate_cross_references(
try:
# <-- MODIFICADO: Llamar a la nueva función sin project_root_dir -->
call_tree_lines = generate_call_tree_output( # Pasar parámetros
call_graph, block_data, output_dir_abs
call_graph, block_data, output_dir_abs, max_call_depth, xref_source_subdir # <-- Pasar max_call_depth
)
with open(call_xref_path, "w", encoding="utf-8") as f:
[f.write(line + "\n") for line in call_tree_lines]

View File

@ -0,0 +1,193 @@
## Technical Documentation: Parsing TIA Portal `_XRef.xml` Files for Call Tree Generation
**Version:** 1.0 **Date:** 2025-05-05
### 1. Introduction
This document describes the structure and interpretation of the XML files (`*_XRef.xml`) generated by the TIA Portal Openness `export_cross_references` function (available via libraries like `siemens_tia_scripting`). The primary goal is to enable software developers to programmatically parse these files to extract block call relationships and build a comprehensive call tree for a PLC program.
The `_XRef.xml` file contains detailed information about all objects referenced _by_ a specific source object (e.g., an OB, FB, or FC). By processing these files for all relevant blocks, a complete picture of the program's call structure can be assembled.
### 2. File Format Overview
The `_XRef.xml` file is a standard XML document. Its high-level structure typically looks like this:
XML
```xml
<?xml version="1.0" encoding="utf-8"?>
<CrossReferences xmlns:i="..." xmlns="...">
<Sources>
<SourceObject> <Name>...</Name>
<Address>...</Address>
<Device>...</Device>
<Path>...</Path>
<TypeName>...</TypeName>
<UnderlyingObject>...</UnderlyingObject>
<Children />
<References> <ReferenceObject> <Name>...</Name>
<Address>...</Address>
<Device>...</Device>
<Path>...</Path>
<TypeName>...</TypeName> <UnderlyingObject>...</UnderlyingObject>
<Locations> <Location>
<Access>...</Access> <Address>...</Address>
<Name>...</Name>
<ReferenceLocation>...</ReferenceLocation> <ReferenceType>Uses</ReferenceType>
</Location>
</Locations>
</ReferenceObject>
</References>
</SourceObject>
</Sources>
</CrossReferences>
```
### 3. Key XML Elements for Call Tree Construction
To build a call tree, you need to identify the _caller_ and the _callee_ for each block call. The following XML elements are essential:
1. **`<SourceObject>`:** Represents the block performing the calls (the **caller**).
- **`<Name>`:** The symbolic name of the caller block (e.g., `_CYCL_EXC`).
- **`<Address>`:** The absolute address (e.g., `%OB1`).
- **`<TypeName>`:** The type of the caller block (e.g., `LAD-Organization block`).
2. **`<ReferenceObject>`:** Represents an object being referenced by the `SourceObject`. This _could_ be the **callee**.
- **`<Name>`:** The symbolic name of the referenced object (e.g., `BlenderCtrl__Main`, `Co2_Counters_DB`).
- **`<Address>`:** The absolute address (e.g., `%FC2000`, `%DB1021`).
- **`<TypeName>`:** The type of the referenced object (e.g., `LAD-Function`, `Instance DB of Co2_Counters [FB1020]`). This is vital for identifying FCs and FBs (via their instance DBs).
3. **`<Location>`:** Specifies exactly how and where the `ReferenceObject` is used within the `SourceObject`.
- **`<Access>`:** **This is the most critical element for call trees.** Look for the value `Call`. This indicates a direct Function Call (FC). An access type of `InstanceDB` indicates the usage of an instance DB, which implies a Function Block (FB) call is occurring.
- **`<ReferenceLocation>`:** Provides human-readable context about where the reference occurs within the caller's code (e.g., `@_CYCL_EXC ▶ NW3 (Blender CTRL)`). Useful for debugging or visualization.
### 4. Data Extraction Strategy for Call Tree
A program parsing these files should follow these steps for each `_XRef.xml` file:
1. **Parse XML:** Load the `_XRef.xml` file using a suitable XML parsing library (e.g., Python's `xml.etree.ElementTree` or `lxml`).
2. **Identify Caller:** Navigate to the `<SourceObject>` element and extract its `<Name>`. This is the caller block for all references within this file.
3. **Iterate References:** Loop through each `<ReferenceObject>` within the `<References>` section of the `<SourceObject>`.
4. **Iterate Locations:** For each `<ReferenceObject>`, loop through its `<Location>` elements.
5. **Filter for Calls:** Check the text content of the `<Access>` tag within each `<Location>`.
- **If `Access` is `Call`:**
- The `<Name>` of the current `<ReferenceObject>` is the **callee** (an FC).
- Record the relationship: `Caller Name` -> `Callee Name (FC)`.
- **If `Access` is `InstanceDB`:**
- This signifies an FB call is happening using this instance DB.
- The `<Name>` of the current `<ReferenceObject>` is the Instance DB name (e.g., `Co2_Counters_DB`).
- To find the actual FB being called, examine the `<TypeName>` of this `ReferenceObject`. It usually contains the FB name/number (e.g., `Instance DB of Co2_Counters [FB1020]`). Extract the FB name (`Co2_Counters`) or number (`FB1020`). This is the **callee**.
- Record the relationship: `Caller Name` -> `Callee Name (FB)`.
6. **Store Relationships:** Store the identified caller-callee pairs in a suitable data structure.
### 5. Building the Call Tree Data Structure
After parsing one or more `_XRef.xml` files, the extracted relationships can be stored. Common approaches include:
- **Dictionary (Adjacency List):** A dictionary where keys are caller names and values are lists of callee names.
Python
```python
call_tree = {
'_CYCL_EXC': ['BlenderCtrl__Main', 'MessageScroll', 'ITC_MainRoutine', 'Co2_Counters', 'ProcedureProdBrixRecovery', 'Key Read & Write', 'GNS_PLCdia_MainRoutine'],
'BlenderCtrl__Main': ['SomeOtherBlock', ...],
# ... other callers
}
```
- **Graph Representation:** Using libraries like `networkx` in Python to create a directed graph where blocks are nodes and calls are edges. This allows for more complex analysis (e.g., finding paths, cycles).
- **Custom Objects:** Define `Block` and `Call` classes for a more object-oriented representation.
### 6. Handling Multiple Files
A single `_XRef.xml` file only details the references _from_ one `SourceObject`. To build a complete call tree for the entire program or PLC:
1. **Export References:** Use the Openness script to call `export_cross_references` for _all_ relevant OBs, FBs, and FCs in the project.
2. **Process All Files:** Run the parsing logic described above on each generated `_XRef.xml` file.
3. **Aggregate Results:** Combine the caller-callee relationships extracted from all files into a single data structure (e.g., merge dictionaries or add nodes/edges to the graph).
### 7. Example (Conceptual Python using `xml.etree.ElementTree`)
Python
```python
import xml.etree.ElementTree as ET
import re # For extracting FB name from TypeName
def parse_xref_for_calls(xml_file_path):
"""Parses a _XRef.xml file and extracts call relationships."""
calls = {} # {caller: [callee1, callee2, ...]}
try:
tree = ET.parse(xml_file_path)
root = tree.getroot()
# Namespace handling might be needed depending on the xmlns
ns = {'ns0': 'TestNamespace1'} # Adjust namespace if different in your file
for source_object in root.findall('.//ns0:SourceObject', ns):
caller_name = source_object.findtext('ns0:Name', default='UnknownCaller', namespaces=ns)
if caller_name not in calls:
calls[caller_name] = []
for ref_object in source_object.findall('.//ns0:ReferenceObject', ns):
ref_name = ref_object.findtext('ns0:Name', default='UnknownRef', namespaces=ns)
ref_type_name = ref_object.findtext('ns0:TypeName', default='', namespaces=ns)
for location in ref_object.findall('.//ns0:Location', ns):
access_type = location.findtext('ns0:Access', default='', namespaces=ns)
if access_type == 'Call':
# Direct FC call
if ref_name not in calls[caller_name]:
calls[caller_name].append(ref_name)
elif access_type == 'InstanceDB':
# FB call via Instance DB
# Extract FB name/number from TypeName (e.g., "Instance DB of BlockName [FB123]")
match = re.search(r'Instance DB of (.*?) \[([A-Za-z]+[0-9]+)\]', ref_type_name)
callee_fb_name = 'UnknownFB'
if match:
# Prefer symbolic name if available, else use number
callee_fb_name = match.group(1) if match.group(1) else match.group(2)
elif 'Instance DB of' in ref_type_name: # Fallback if regex fails
callee_fb_name = ref_type_name.split('Instance DB of ')[-1].strip()
if callee_fb_name not in calls[caller_name]:
calls[caller_name].append(callee_fb_name)
except ET.ParseError as e:
print(f"Error parsing XML file {xml_file_path}: {e}")
except FileNotFoundError:
print(f"Error: File not found {xml_file_path}")
# Clean up entries with no calls
calls = {k: v for k, v in calls.items() if v}
return calls
# --- Aggregation Example ---
# all_calls = {}
# for xref_file in list_of_all_xref_files:
# file_calls = parse_xref_for_calls(xref_file)
# for caller, callees in file_calls.items():
# if caller not in all_calls:
# all_calls[caller] = []
# for callee in callees:
# if callee not in all_calls[caller]:
# all_calls[caller].append(callee)
# print(all_calls)
```
_Note: Namespace handling (`ns=...`) in ElementTree might need adjustment based on the exact default namespace declared in your XML files._
### 8. Considerations
- **Function Block Calls:** Remember that FB calls are identified indirectly via the `InstanceDB` access type and parsing the `<TypeName>` of the `ReferenceObject`.
- **System Blocks (SFC/SFB):** Calls to system functions/blocks should appear similarly to FC/FB calls and can be included in the tree. Their `<TypeName>` might indicate they are system blocks.
- **TIA Portal Versions:** While the basic structure is consistent, minor variations in tags or namespaces might exist between different TIA Portal versions. Always test with exports from your specific version.
- **Data References:** This documentation focuses on the call tree. The XML also contains `Read`, `Write`, `RW` access types, which can be parsed similarly to build a full cross-reference map for tags and data blocks.
### 9. Conclusion
The `_XRef.xml` files provide a detailed, machine-readable description of block references within a TIA Portal project. By parsing the XML structure, focusing on the `<SourceObject>`, `<ReferenceObject>`, and specifically the `<Access>` tag within `<Location>`, developers can reliably extract block call information and construct program call trees for analysis, documentation, or visualization purposes. Remember to aggregate data from multiple files for a complete program overview.

View File

@ -1,161 +1,680 @@
[23:55:47] Iniciando ejecución de x0_main.py en C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport...
[23:55:48] Advertencia: No se pudo importar 'format_variable_name' desde processors.processor_utils.
[23:55:48] Usando una implementación local básica.
[23:55:48] INFO: format_variable_name importado desde generators.generator_utils
[23:55:48] INFO: format_variable_name importado desde generators.generator_utils
[23:55:48] ======================================== LOG START ========================================
[23:55:48] Directorio de trabajo base configurado: 'C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport'
[23:55:48] Buscando archivos XML recursivamente en el subdirectorio: 'C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC'
[23:55:48] Se encontraron 1 archivos XML para procesar:
[23:55:48] - PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml
[23:55:48] --- Fase 1: Procesamiento Individual (x1, x2, x3) ---
[23:55:48] --- Procesando archivo: PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml ---
[23:55:48] --- Ejecutando x1 (convert_xml_to_json) para: PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml ---
[23:55:48] Iniciando conversión de 'C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml' a 'C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\ProgramBlocks_XML\parsing\BlenderPID__Main_Data.json'...
[23:55:48] Cargando parsers de red...
[23:55:48] Cargando parsers desde: 'D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\XML Parser to SCL\parsers'
[23:55:48] Total de lenguajes con parser cargado: 5
[23:55:48] Lenguajes soportados: ['LAD', 'FBD', 'GRAPH', 'SCL', 'STL']
[23:55:48] Metadatos XML: ModTime=1746220371.8349743, Size=51679
[23:55:48] Paso 1: Parseando archivo XML...
[23:55:48] Paso 1: Parseo XML completado.
[23:55:48] Paso 2: Detectando tipo de objeto principal...
[23:55:48] Paso 2: No es UDT ni Tag Table. Buscando SW.Blocks.* ...
[23:55:48] Paso 2b: Bloque SW.Blocks.InstanceDB (Tipo: InstanceDB) encontrado (ID=0).
[23:55:48] Paso 3: Extrayendo atributos del bloque...
[23:55:48] Paso 3: Atributos: Nombre='BlenderPID__Main_Data', Número=950, Lenguaje Bloque='DB'
[23:55:48] Paso 3b: Comentario bloque: '...'
[23:55:48] Paso 4: Extrayendo la interfaz del bloque...
[23:55:48] Paso 5: Saltando procesamiento de redes para InstanceDB.
[23:55:48] Paso 6: Escribiendo el resultado en el archivo JSON...
[23:55:48] Paso 6: Escritura JSON completada.
[23:55:48] Conversión finalizada. JSON guardado en: 'PLC\ProgramBlocks_XML\parsing\BlenderPID__Main_Data.json'
[23:55:48] --- Ejecutando x2 (process_json_to_scl) para: PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml ---
[23:55:48] Cargando JSON desde: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\ProgramBlocks_XML\parsing\BlenderPID__Main_Data.json
[23:55:48] Procesando bloque tipo: InstanceDB
[23:55:48] INFO: El bloque es InstanceDB. Saltando procesamiento lógico de x2.
[23:55:48] Guardando JSON de InstanceDB (con metadatos) en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\ProgramBlocks_XML\parsing\BlenderPID__Main_Data_processed.json
[23:55:48] Guardado de InstanceDB completado.
[23:55:48] --- Ejecutando x3 (generate_scl_or_markdown) para: PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml ---
[23:55:48] Cargando JSON procesado desde: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\ProgramBlocks_XML\parsing\BlenderPID__Main_Data_processed.json
[23:55:48] Generando salida para: InstanceDB 'BlenderPID__Main_Data' (Original: BlenderPID__Main_Data)
[23:55:48] -> Modo de generación: INSTANCE_DATA_BLOCK SCL
[23:55:48] WARNING: No se encontró definición para 'Integral'. Se buscó en directorios estándar.
[23:55:48] WARNING: No se encontró definición para 'Integral'. Se buscó en directorios estándar.
[23:55:48] WARNING: No se encontró definición para 'Integral'. Se buscó en directorios estándar.
[23:55:48] WARNING: No se encontró definición para 'LowPassFilter'. Se buscó en directorios estándar.
[23:55:48] WARNING: No se encontró definición para 'BlenderPID_PIDSPCalc'. Se buscó en directorios estándar.
[23:55:48] WARNING: No se encontró definición para 'BlenderPID_PIDInitParam'. Se buscó en directorios estándar.
[23:55:48] WARNING: No se encontró definición para 'BlenderPID_ActualRecipe'. Se buscó en directorios estándar.
[23:55:48] -> Escribiendo archivo de salida final en: PLC\scl_output\BlenderPID__Main_Data.scl
[23:55:48] Generación de .SCL completada.
[23:55:48] --- Fase 2: Ejecutando x4_cross_reference.py (salida en 'xref_output/') ---
[23:55:48] Ejecutando x4 (generate_cross_references) sobre: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC, salida en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output
[23:55:48] --- Iniciando Generación de Referencias Cruzadas y Fuentes MD (x4) ---
[23:55:48] Buscando archivos JSON procesados en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC
[23:55:48] Directorio de salida XRef: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output
[23:55:48] Directorio fuente SCL/MD: scl_output
[23:55:48] Subdirectorio fuentes MD para XRef: source
[23:55:48] Copiando y preparando archivos fuente para Obsidian en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output\source
[23:55:48] Archivos fuente preparados: 1 SCL convertidos, 0 MD copiados.
[23:55:48] Archivos JSON encontrados: 1
[23:55:48] Datos cargados para 1 bloques (0 PLC Tags globales).
[23:55:48] Analizando llamadas y uso de DBs/PLC Tags...
[23:55:48] Generando ÁRBOL XRef de llamadas en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output\xref_calls_tree.md
[23:55:48] Generando RESUMEN XRef de uso de DBs en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output\xref_db_usage_summary.md
[23:55:48] Generando RESUMEN XRef de uso de PLC Tags en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output\xref_plc_tags_summary.md
[23:55:48] --- Generación de Referencias Cruzadas y Fuentes MD (x4) Completada ---
[23:55:48] --- Fase 3: Ejecutando x5_aggregate.py (salida en 'full_project_representation.md') ---
[23:55:48] Ejecutando x5 (aggregate_outputs) sobre: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC, salida agregada en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\full_project_representation.md
[23:55:48] --- Iniciando Agregación de Archivos (x5) ---
[23:55:48] Leyendo desde directorios: 'scl_output' y 'xref_output' (relativos a la raíz)
[23:55:48] Directorio Raíz del Proyecto: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC
[23:55:48] Archivo de Salida: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\full_project_representation.md
[23:55:48] Buscando archivos SCL con patrón: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\**\*.scl
[23:55:48] Buscando archivos MD con patrón: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\**\*.md
[23:55:48] Se agregarán 5 archivos.
[23:55:48] Agregando: ProgramBlocks_SCL\BlenderPID__Main.scl
[23:55:48] Agregando: scl_output\BlenderPID__Main_Data.scl
[23:55:48] Agregando: xref_output\source\BlenderPID__Main_Data.md
[23:55:48] Agregando: xref_output\xref_db_usage_summary.md
[23:55:48] Agregando: xref_output\xref_plc_tags_summary.md
[23:55:48] Agregación completada. Archivo guardado en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\full_project_representation.md
[23:55:48] -------------------- Resumen Final del Procesamiento Completo --------------------
[23:55:48] Total de archivos XML encontrados: 1
[23:55:48] Archivos procesados/actualizados exitosamente (x1-x3): 1
[23:55:48] Archivos completamente saltados (x1, x2, x3): 0
[23:55:48] Archivos parcialmente saltados (x1, x2 saltados; x3 ejecutado): 0
[23:55:48] Archivos fallidos (en x1, x2, x3 o error inesperado): 0
[23:55:48] Fase 2 (Generación XRef - x4): Completada
[23:55:48] Fase 3 (Agregación - x5): Completada
[23:55:48] --------------------------------------------------------------------------------
[23:55:48] Proceso finalizado exitosamente.
[23:55:48] Proceso finalizado exitosamente. Consulta 'log.txt' para detalles.
[23:55:48] ========================================= LOG END ==========================================
[23:55:48] Ejecución de x0_main.py finalizada (success). Duración: 0:00:01.146105. Se detectaron errores (ver log).
[23:55:48] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\XML Parser to SCL\log_x0_main.txt
[00:02:17] Iniciando ejecución de x0_main.py en C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport...
[00:02:18] Advertencia: No se pudo importar 'format_variable_name' desde processors.processor_utils.
[00:02:18] Usando una implementación local básica.
[00:02:18] INFO: format_variable_name importado desde generators.generator_utils
[00:02:18] INFO: format_variable_name importado desde generators.generator_utils
[00:02:18] ======================================== LOG START ========================================
[00:02:18] Directorio de trabajo base configurado: 'C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport'
[00:02:18] Buscando archivos XML recursivamente en el subdirectorio: 'C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC'
[00:02:18] Se encontraron 1 archivos XML para procesar:
[00:02:18] - PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml
[00:02:18] --- Fase 1: Procesamiento Individual (x1, x2, x3) ---
[00:02:18] --- Procesando archivo: PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml ---
[00:02:18] --- SALTANDO TODO (x1, x2, x3) para: PLC\ProgramBlocks_XML\BlenderPID__Main_Data.xml (XML no modificado, salida final actualizada)
[00:02:18] --- Fase 1.5: Copiando archivos SCL existentes desde 'C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC' a 'C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\scl_output' ---
[00:02:18] Se encontraron 1 archivos .scl existentes para copiar:
[00:02:18] Copia de SCL existentes finalizada. Copiados: 1, Omitidos (conflicto nombre): 0
[00:02:18] --- Fase 2: Ejecutando x4_cross_reference.py (salida en 'xref_output/') ---
[00:02:18] Ejecutando x4 (generate_cross_references) sobre: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC, salida en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output
[00:02:18] --- Iniciando Generación de Referencias Cruzadas y Fuentes MD (x4) ---
[00:02:18] Buscando archivos JSON procesados en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC
[00:02:18] Directorio de salida XRef: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output
[00:02:18] Directorio fuente SCL/MD: scl_output
[00:02:18] Subdirectorio fuentes MD para XRef: source
[00:02:18] Copiando y preparando archivos fuente para Obsidian en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output\source
[00:02:18] Archivos fuente preparados: 2 SCL convertidos, 0 MD copiados.
[00:02:18] Archivos JSON encontrados: 1
[00:02:18] Datos cargados para 1 bloques (0 PLC Tags globales).
[00:02:18] Analizando llamadas y uso de DBs/PLC Tags...
[00:02:18] Generando ÁRBOL XRef de llamadas en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output\xref_calls_tree.md
[00:02:18] Generando RESUMEN XRef de uso de DBs en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output\xref_db_usage_summary.md
[00:02:18] Generando RESUMEN XRef de uso de PLC Tags en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output\xref_plc_tags_summary.md
[00:02:18] --- Generación de Referencias Cruzadas y Fuentes MD (x4) Completada ---
[00:02:18] --- Fase 3: Ejecutando x5_aggregate.py (salida en 'full_project_representation.md') ---
[00:02:18] Ejecutando x5 (aggregate_outputs) sobre: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC, salida agregada en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\full_project_representation.md
[00:02:18] --- Iniciando Agregación de Archivos (x5) ---
[00:02:18] Leyendo desde directorios: 'scl_output' y 'xref_output' (relativos a la raíz)
[00:02:18] Directorio Raíz del Proyecto: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC
[00:02:18] Archivo de Salida: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\full_project_representation.md
[00:02:18] Buscando archivos SCL con patrón: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\**\*.scl
[00:02:18] Buscando archivos MD con patrón: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\**\*.md
[00:02:18] Se agregarán 7 archivos.
[00:02:18] Agregando: ProgramBlocks_SCL\BlenderPID__Main.scl
[00:02:18] Agregando: scl_output\BlenderPID__Main.scl
[00:02:18] Agregando: scl_output\BlenderPID__Main_Data.scl
[00:02:18] Agregando: xref_output\source\BlenderPID__Main.md
[00:02:18] Agregando: xref_output\source\BlenderPID__Main_Data.md
[00:02:18] Agregando: xref_output\xref_db_usage_summary.md
[00:02:18] Agregando: xref_output\xref_plc_tags_summary.md
[00:02:18] Agregación completada. Archivo guardado en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\full_project_representation.md
[00:02:18] -------------------- Resumen Final del Procesamiento Completo --------------------
[00:02:18] Total de archivos XML encontrados: 1
[00:02:18] Archivos procesados/actualizados exitosamente (x1-x3): 1
[00:02:18] Archivos completamente saltados (x1, x2, x3): 1
[00:02:18] Archivos parcialmente saltados (x1, x2 saltados; x3 ejecutado): 0
[00:02:18] Archivos fallidos (en x1, x2, x3 o error inesperado): 0
[00:02:18] Archivos SCL existentes copiados (Fase 1.5): 1
[00:02:18] Archivos SCL existentes omitidos por conflicto (Fase 1.5): 0
[00:02:18] Fase 2 (Generación XRef - x4): Completada
[00:02:18] Fase 3 (Agregación - x5): Completada
[00:02:18] --------------------------------------------------------------------------------
[00:02:18] Proceso finalizado exitosamente.
[00:02:18] Proceso finalizado exitosamente. Consulta 'log.txt' para detalles.
[00:02:18] ========================================= LOG END ==========================================
[00:02:18] Ejecución de x0_main.py finalizada (success). Duración: 0:00:01.136828. Se detectaron errores (ver log).
[00:02:18] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\XML Parser to SCL\log_x0_main.txt
[12:09:26] Iniciando ejecución de x4.py en C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport...
[12:09:27] --- TIA Portal Cross-Reference Exporter ---
[12:09:29] Selected Project: C:/Trabajo/SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/InLavoro/PLC/SAE196_c0.2/SAE196_c0.2.ap18
[12:09:29] Using Export Directory: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref
[12:09:29] Connecting to TIA Portal V18.0...
[12:09:30] 2025-05-05 12:09:30,267 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - Start TIA Portal, please acknowledge the security dialog.
[12:09:30] 2025-05-05 12:09:30,279 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - With user interface
[12:09:48] Connected to TIA Portal.
[12:09:48] 2025-05-05 12:09:48,418 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal GetProcessId - Process id: 24284
[12:09:48] Portal Process ID: 24284
[12:09:48] Opening project: SAE196_c0.2.ap18...
[12:09:48] 2025-05-05 12:09:48,668 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal OpenProject - Open project... C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\InLavoro\PLC\SAE196_c0.2\SAE196_c0.2.ap18
[12:10:02] Project opened successfully.
[12:10:06] 2025-05-05 12:10:06,156 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Project GetPlcs - Found plc PLC with parent name S71500/ET200MP station_1
[12:10:08] Found 1 PLC(s). Starting cross-reference export process...
[12:10:08] --- Processing PLC: PLC ---
[12:10:08] [PLC: PLC] Exporting Program Block Cross-References...
[12:10:08] Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\ProgramBlocks_CR
[12:10:08] Found 380 program blocks.
[12:10:09] Processing block: _CYCL_EXC...
[12:10:09] Exporting cross-references for _CYCL_EXC...
[12:10:11] Processing block: COMPLETE RESTART...
[12:10:11] Exporting cross-references for COMPLETE RESTART...
[12:10:12] Processing block: I/O_FLT1...
[12:10:12] Exporting cross-references for I/O_FLT1...
[12:10:12] Processing block: MOD_ERR...
[12:10:12] Exporting cross-references for MOD_ERR...
[12:10:12] Processing block: ProDiagOB...
[12:10:12] Exporting cross-references for ProDiagOB...
[12:10:12] Processing block: Programming error...
[12:10:12] Exporting cross-references for Programming error...
[12:10:12] Processing block: RACK_FLT...
[12:10:12] Exporting cross-references for RACK_FLT...
[12:10:12] Processing block: Time error interrupt...
[12:10:12] Exporting cross-references for Time error interrupt...
[12:10:12] Processing block: Baialage...
[12:10:12] Exporting cross-references for Baialage...
[12:10:13] Processing block: BlenderCtrl__Main...
[12:10:13] Exporting cross-references for BlenderCtrl__Main...
[12:10:16] Processing block: BlenderCtrl_CIPModeInit...
[12:10:16] Exporting cross-references for BlenderCtrl_CIPModeInit...
[12:10:16] Processing block: BlenderCtrl_ProdModeInit...
[12:10:16] Exporting cross-references for BlenderCtrl_ProdModeInit...
[12:10:16] Processing block: BlenderCtrl_ResetSPWord...
[12:10:16] Exporting cross-references for BlenderCtrl_ResetSPWord...
[12:10:17] Processing block: BlenderCtrl_UpdatePWord...
[12:10:17] Exporting cross-references for BlenderCtrl_UpdatePWord...
[12:10:18] Processing block: BlenderPID_NextRecipe...
[12:10:18] Exporting cross-references for BlenderPID_NextRecipe...
[12:10:19] Processing block: BlenderRinse...
[12:10:19] Exporting cross-references for BlenderRinse...
[12:10:19] Processing block: BlenderRinse_Done...
[12:10:19] Exporting cross-references for BlenderRinse_Done...
[12:10:19] Processing block: BlenderRun_ProdTime...
[12:10:19] Exporting cross-references for BlenderRun_ProdTime...
[12:10:19] Processing block: BlenderRun_Stopping...
[12:10:19] Exporting cross-references for BlenderRun_Stopping...
[12:10:19] Processing block: Blocco_1...
[12:10:19] Exporting cross-references for Blocco_1...
[12:10:19] Processing block: Block_compare...
[12:10:19] Exporting cross-references for Block_compare...
[12:10:20] Processing block: Block_move...
[12:10:20] Exporting cross-references for Block_move...
[12:10:20] Processing block: CarboWaterLine_Seq...
[12:10:20] Exporting cross-references for CarboWaterLine_Seq...
[12:10:20] Processing block: Cetrifugal_Head...
[12:10:20] Exporting cross-references for Cetrifugal_Head...
[12:10:21] Processing block: CIP CVQ...
[12:10:21] Exporting cross-references for CIP CVQ...
[12:10:21] Processing block: CIP FlipFlop...
[12:10:21] Exporting cross-references for CIP FlipFlop...
[12:10:21] Processing block: CIPLocal_ProgInizialize...
[12:10:21] Exporting cross-references for CIPLocal_ProgInizialize...
[12:10:21] Processing block: CIPLocal_WaitEvent_Ctrl...
[12:10:21] Exporting cross-references for CIPLocal_WaitEvent_Ctrl...
[12:10:22] Processing block: CIPMain...
[12:10:22] Exporting cross-references for CIPMain...
[12:10:22] Processing block: CIPMain_Flood...
[12:10:22] Exporting cross-references for CIPMain_Flood...
[12:10:22] Processing block: CIPMain_Total Drain...
[12:10:22] Exporting cross-references for CIPMain_Total Drain...
[12:10:23] Processing block: Clock Signal...
[12:10:23] Exporting cross-references for Clock Signal...
[12:10:23] Processing block: CO2 Solubility...
[12:10:23] Exporting cross-references for CO2 Solubility...
[12:10:23] Processing block: CO2EqPress...
[12:10:23] Exporting cross-references for CO2EqPress...
[12:10:23] Processing block: CO2InjPressure...
[12:10:23] Exporting cross-references for CO2InjPressure...
[12:10:23] Processing block: CTRLCoolingSystem...
[12:10:23] Exporting cross-references for CTRLCoolingSystem...
[12:10:23] Processing block: DeairCO2TempComp...
[12:10:23] Exporting cross-references for DeairCO2TempComp...
[12:10:23] Processing block: DeaireationValve...
[12:10:23] Exporting cross-references for DeaireationValve...
[12:10:24] Processing block: Deaireator StartUp_Seq...
[12:10:24] Exporting cross-references for Deaireator StartUp_Seq...
[12:10:25] Processing block: DeltaP...
[12:10:25] Exporting cross-references for DeltaP...
[12:10:25] Processing block: FeedForward...
[12:10:25] Exporting cross-references for FeedForward...
[12:10:25] Processing block: Flow_To_Press_Loss...
[12:10:25] Exporting cross-references for Flow_To_Press_Loss...
[12:10:25] Processing block: Freq_To_mmH2O...
[12:10:25] Exporting cross-references for Freq_To_mmH2O...
[12:10:25] Processing block: FrictionLoss...
[12:10:25] Exporting cross-references for FrictionLoss...
[12:10:25] Processing block: FW_DRand...
[12:10:25] Exporting cross-references for FW_DRand...
[12:10:25] Processing block: GetProdBrixCO2_Anal_Inpt...
[12:10:25] Exporting cross-references for GetProdBrixCO2_Anal_Inpt...
[12:10:25] Processing block: Interlocking_Panel_1...
[12:10:25] Exporting cross-references for Interlocking_Panel_1...
[12:10:26] Processing block: ITC Communic CIPRoom...
[12:10:26] Exporting cross-references for ITC Communic CIPRoom...
[12:10:26] Processing block: ITC Communic Filler...
[12:10:26] Exporting cross-references for ITC Communic Filler...
[12:10:26] Processing block: ITC Communic MainRoutine...
[12:10:26] Exporting cross-references for ITC Communic MainRoutine...
[12:10:26] Processing block: ITC Communic ProdRoom...
[12:10:26] Exporting cross-references for ITC Communic ProdRoom...
[12:10:27] Processing block: ITC DataIn...
[12:10:27] Exporting cross-references for ITC DataIn...
[12:10:27] Processing block: ITC DataOut...
[12:10:27] Exporting cross-references for ITC DataOut...
[12:10:27] Processing block: ITC Exchange MainRoutine...
[12:10:27] Exporting cross-references for ITC Exchange MainRoutine...
[12:10:27] Processing block: ITC MainRoutine...
[12:10:27] Exporting cross-references for ITC MainRoutine...
[12:10:27] Processing block: LIMIT_I...
[12:10:27] Exporting cross-references for LIMIT_I...
[12:10:27] Processing block: LIMIT_R...
[12:10:27] Exporting cross-references for LIMIT_R...
[12:10:27] Processing block: Maselli_PA_Control...
[12:10:27] Exporting cross-references for Maselli_PA_Control...
[12:10:27] Processing block: Maselli_PA_Ctrl_Transfer...
[12:10:27] Exporting cross-references for Maselli_PA_Ctrl_Transfer...
[12:10:28] Processing block: Maselli_PA_Ctrl_Write...
[12:10:28] Exporting cross-references for Maselli_PA_Ctrl_Write...
[12:10:28] Processing block: MFMAnalogValues_Totalize...
[12:10:28] Exporting cross-references for MFMAnalogValues_Totalize...
[12:10:28] Processing block: mmH2O_TO_Freq...
[12:10:28] Exporting cross-references for mmH2O_TO_Freq...
[12:10:28] Processing block: ModValveFault...
[12:10:28] Exporting cross-references for ModValveFault...
[12:10:29] Processing block: mPDS_SYR_PA_Control...
[12:10:29] Exporting cross-references for mPDS_SYR_PA_Control...
[12:10:29] Processing block: ONS_R...
[12:10:29] Exporting cross-references for ONS_R...
[12:10:29] Processing block: Prod Tank RunOut_Seq...
[12:10:29] Exporting cross-references for Prod Tank RunOut_Seq...
[12:10:30] Processing block: ProductLiterInTank...
[12:10:30] Exporting cross-references for ProductLiterInTank...
[12:10:30] Processing block: ProductPipeDrain_Seq...
[12:10:30] Exporting cross-references for ProductPipeDrain_Seq...
[12:10:30] Processing block: ProductPipeRunOut_Seq...
[12:10:30] Exporting cross-references for ProductPipeRunOut_Seq...
[12:10:31] Processing block: ProductQuality...
[12:10:31] Exporting cross-references for ProductQuality...
[12:10:31] Processing block: SEL_I...
[12:10:31] Exporting cross-references for SEL_I...
[12:10:31] Processing block: SEL_R...
[12:10:31] Exporting cross-references for SEL_R...
[12:10:32] Processing block: SelCheckBrixSource...
[12:10:32] Exporting cross-references for SelCheckBrixSource...
[12:10:32] Processing block: SLIM_Block...
[12:10:32] Exporting cross-references for SLIM_Block...
[12:10:32] Processing block: SpeedAdjust...
[12:10:32] Exporting cross-references for SpeedAdjust...
[12:10:33] Processing block: Syrup Line MFM Prep_Seq...
[12:10:33] Exporting cross-references for Syrup Line MFM Prep_Seq...
[12:10:33] Processing block: Syrup MFM StartUp_Seq...
[12:10:33] Exporting cross-references for Syrup MFM StartUp_Seq...
[12:10:34] Processing block: SyrupDensity...
[12:10:34] Exporting cross-references for SyrupDensity...
[12:10:34] Processing block: SyrupRoomCtrl...
[12:10:34] Exporting cross-references for SyrupRoomCtrl...
[12:10:34] Processing block: WaterDensity...
[12:10:34] Exporting cross-references for WaterDensity...
[12:10:34] Processing block: WritePeripheral...
[12:10:34] Exporting cross-references for WritePeripheral...
[12:10:34] Processing block: CIPRecipeManagement_Data...
[12:10:34] Exporting cross-references for CIPRecipeManagement_Data...
[12:10:36] Processing block: Co2_Counters_DB...
[12:10:36] Exporting cross-references for Co2_Counters_DB...
[12:10:36] Processing block: Default_SupervisionDB...
[12:10:36] Exporting cross-references for Default_SupervisionDB...
[12:10:37] Processing block: ITC Communic CIP DI...
[12:10:37] Exporting cross-references for ITC Communic CIP DI...
[12:10:41] Processing block: ITC Communic Filler DI...
[12:10:41] Exporting cross-references for ITC Communic Filler DI...
[12:10:46] Processing block: ITC Communic Mixer DI...
[12:10:46] Exporting cross-references for ITC Communic Mixer DI...
[12:10:50] Processing block: ITC Communic Product Room DI...
[12:10:50] Exporting cross-references for ITC Communic Product Room DI...
[12:10:54] Processing block: Key Read & Write Data...
[12:10:54] Exporting cross-references for Key Read & Write Data...
[12:10:55] Processing block: mPPM303StartUpRamp...
[12:10:55] Exporting cross-references for mPPM303StartUpRamp...
[12:10:55] Processing block: PID_RMM304_Data...
[12:10:55] Exporting cross-references for PID_RMM304_Data...
[12:10:56] Processing block: PID_RVN302_Data...
[12:10:56] Exporting cross-references for PID_RVN302_Data...
[12:10:56] Processing block: PID_RVS318_Data...
[12:10:56] Exporting cross-references for PID_RVS318_Data...
[12:10:57] Processing block: ProdBrixRecovery_DB...
[12:10:57] Exporting cross-references for ProdBrixRecovery_DB...
[12:10:57] Processing block: Prod Tank Drain_Seq...
[12:10:57] Exporting cross-references for Prod Tank Drain_Seq...
[12:10:58] Processing block: _StepMove...
[12:10:58] Exporting cross-references for _StepMove...
[12:10:58] Processing block: _StepMove_Test...
[12:10:58] Exporting cross-references for _StepMove_Test...
[12:10:58] Processing block: RecipeManagement_Data...
[12:10:58] Exporting cross-references for RecipeManagement_Data...
[12:11:00] Processing block: Blender_Procedure Data...
[12:11:00] Exporting cross-references for Blender_Procedure Data...
[12:11:03] Processing block: BlenderPID__Main_Data...
[12:11:03] Exporting cross-references for BlenderPID__Main_Data...
[12:11:06] Processing block: BlenderRun_MeasFil_Data...
[12:11:06] Exporting cross-references for BlenderRun_MeasFil_Data...
[12:11:07] Processing block: BrixTracking_Data...
[12:11:07] Exporting cross-references for BrixTracking_Data...
[12:11:09] Processing block: CO2Tracking_Data...
[12:11:09] Exporting cross-references for CO2Tracking_Data...
[12:11:12] Processing block: FirstProduction_Data...
[12:11:12] Exporting cross-references for FirstProduction_Data...
[12:11:13] Processing block: Input_Data...
[12:11:13] Exporting cross-references for Input_Data...
[12:11:22] Processing block: ISOonTCP_or_TCP_Protocol_DB...
[12:11:22] Exporting cross-references for ISOonTCP_or_TCP_Protocol_DB...
[12:11:28] Processing block: MFM_Analog_Value_Data...
[12:11:28] Exporting cross-references for MFM_Analog_Value_Data...
[12:11:32] Processing block: PID MAIN Data...
[12:11:32] Exporting cross-references for PID MAIN Data...
[12:11:46] Processing block: PID_Filling_Head_Data...
[12:11:46] Exporting cross-references for PID_Filling_Head_Data...
[12:11:47] Processing block: PID_RMM301_Data...
[12:11:47] Exporting cross-references for PID_RMM301_Data...
[12:11:48] Processing block: PID_RMM303_Data...
[12:11:48] Exporting cross-references for PID_RMM303_Data...
[12:11:49] Processing block: PID_RMP302_Data...
[12:11:49] Exporting cross-references for PID_RMP302_Data...
[12:11:49] Processing block: PID_RVM301_Data...
[12:11:49] Exporting cross-references for PID_RVM301_Data...
[12:11:50] Processing block: PID_RVM319_Data...
[12:11:50] Exporting cross-references for PID_RVM319_Data...
[12:11:51] Processing block: PID_RVP303_Data...
[12:11:51] Exporting cross-references for PID_RVP303_Data...
[12:11:51] Processing block: Sel_Check_Brix_Data...
[12:11:51] Exporting cross-references for Sel_Check_Brix_Data...
[12:11:52] Processing block: Signal_Gen_Data...
[12:11:52] Exporting cross-references for Signal_Gen_Data...
[12:11:52] Processing block: System_Run_Out_Data...
[12:11:52] Exporting cross-references for System_Run_Out_Data...
[12:11:54] Processing block: SubCarb_DB...
[12:11:54] Exporting cross-references for SubCarb_DB...
[12:11:55] Processing block: CYC_INT5...
[12:11:55] Exporting cross-references for CYC_INT5...
[12:11:55] Processing block: BlenderCtrl_All Auto...
[12:11:55] Exporting cross-references for BlenderCtrl_All Auto...
[12:11:55] Processing block: BlenderCtrl_InitErrors...
[12:11:55] Exporting cross-references for BlenderCtrl_InitErrors...
[12:11:55] Processing block: BlenderCtrl_ManualActive...
[12:11:55] Exporting cross-references for BlenderCtrl_ManualActive...
[12:11:55] Processing block: BlenderCtrl_MFM Command...
[12:11:55] Exporting cross-references for BlenderCtrl_MFM Command...
[12:11:55] Processing block: BlenderPID_FlowMeterErro...
[12:11:55] Exporting cross-references for BlenderPID_FlowMeterErro...
[12:11:56] Processing block: BlenderPID_PIDResInteg...
[12:11:56] Exporting cross-references for BlenderPID_PIDResInteg...
[12:11:56] Processing block: BlenderPIDCtrl_PresRelea...
[12:11:56] Exporting cross-references for BlenderPIDCtrl_PresRelea...
[12:11:56] Processing block: BlenderPIDCtrl_SaveValve...
[12:11:56] Exporting cross-references for BlenderPIDCtrl_SaveValve...
[12:11:56] Processing block: BlenderRun__Control...
[12:11:56] Exporting cross-references for BlenderRun__Control...
[12:11:58] Processing block: BlenderRun_SelectConstan...
[12:11:58] Exporting cross-references for BlenderRun_SelectConstan...
[12:11:58] Processing block: BlendFill StartUp_Seq...
[12:11:58] Exporting cross-references for BlendFill StartUp_Seq...
[12:11:59] Processing block: CIP_SimpleProgr_Init...
[12:11:59] Exporting cross-references for CIP_SimpleProgr_Init...
[12:12:01] Processing block: CIPLocal...
[12:12:01] Exporting cross-references for CIPLocal...
[12:12:03] Processing block: CIPLocal_ExecSimpleCIP...
[12:12:03] Exporting cross-references for CIPLocal_ExecSimpleCIP...
[12:12:03] Processing block: CIPLocal_ExecStep...
[12:12:03] Exporting cross-references for CIPLocal_ExecStep...
[12:12:04] Processing block: CIPLocal_ProgStepDown...
[12:12:04] Exporting cross-references for CIPLocal_ProgStepDown...
[12:12:05] Processing block: CIPLocal_ProgStepUp...
[12:12:05] Exporting cross-references for CIPLocal_ProgStepUp...
[12:12:05] Processing block: CIPReportManager...
[12:12:05] Exporting cross-references for CIPReportManager...
[12:12:06] Processing block: CPU_DP Global Diag...
[12:12:06] Exporting cross-references for CPU_DP Global Diag...
[12:12:06] Processing block: CVQ_1p7_8_Perc...
[12:12:06] Exporting cross-references for CVQ_1p7_8_Perc...
[12:12:06] Processing block: DELETE...
[12:12:06] Exporting cross-references for DELETE...
[12:12:07] Processing block: EQ_STRNG...
[12:12:07] Exporting cross-references for EQ_STRNG...
[12:12:07] Processing block: FillerControl...
[12:12:07] Exporting cross-references for FillerControl...
[12:12:10] Processing block: FillerControl_DataSend...
[12:12:10] Exporting cross-references for FillerControl_DataSend...
[12:12:11] Processing block: FillingTime...
[12:12:11] Exporting cross-references for FillingTime...
[12:12:12] Processing block: Input_CheckFlowMetersSta...
[12:12:12] Exporting cross-references for Input_CheckFlowMetersSta...
[12:12:13] Processing block: Input_DigitalCtrl...
[12:12:13] Exporting cross-references for Input_DigitalCtrl...
[12:12:14] Processing block: Input_DigitalScanner...
[12:12:14] Exporting cross-references for Input_DigitalScanner...
[12:12:14] Processing block: Instrument_Scanner...
[12:12:14] Exporting cross-references for Instrument_Scanner...
[12:12:15] Processing block: Interlocking_Panel...
[12:12:15] Exporting cross-references for Interlocking_Panel...
[12:12:17] Processing block: Maselli_PA_Ctrl_Read...
[12:12:17] Exporting cross-references for Maselli_PA_Ctrl_Read...
[12:12:18] Processing block: MaxCarboCO2 Vol...
[12:12:18] Exporting cross-references for MaxCarboCO2 Vol...
[12:12:18] Processing block: MessageScroll...
[12:12:18] Exporting cross-references for MessageScroll...
[12:12:18] Processing block: mPDS_SYR_PA_Ctrl_Read...
[12:12:18] Exporting cross-references for mPDS_SYR_PA_Ctrl_Read...
[12:12:19] Processing block: Output_CO2InjPress...
[12:12:19] Exporting cross-references for Output_CO2InjPress...
[12:12:19] Processing block: Pneumatic Valve Fault...
[12:12:19] Exporting cross-references for Pneumatic Valve Fault...
[12:12:19] Processing block: PPM O2...
[12:12:19] Exporting cross-references for PPM O2...
[12:12:19] Processing block: PPM303_VFC_Ctrl...
[12:12:19] Exporting cross-references for PPM303_VFC_Ctrl...
[12:12:20] Processing block: PPM305_VFC_Ctrl...
[12:12:20] Exporting cross-references for PPM305_VFC_Ctrl...
[12:12:20] Processing block: PPM307_VFC_Ctrl...
[12:12:20] Exporting cross-references for PPM307_VFC_Ctrl...
[12:12:20] Processing block: PPN301_VFC_Ctrl...
[12:12:20] Exporting cross-references for PPN301_VFC_Ctrl...
[12:12:20] Processing block: PPP302_VFC_Ctrl...
[12:12:20] Exporting cross-references for PPP302_VFC_Ctrl...
[12:12:21] Processing block: ProdBrixRecovery_BrixCal...
[12:12:21] Exporting cross-references for ProdBrixRecovery_BrixCal...
[12:12:21] Processing block: ProdReportManager...
[12:12:21] Exporting cross-references for ProdReportManager...
[12:12:24] Processing block: ProductQuality_Messages...
[12:12:24] Exporting cross-references for ProductQuality_Messages...
[12:12:24] Processing block: Profibus Network...
[12:12:24] Exporting cross-references for Profibus Network...
[12:12:25] Processing block: QCO Monitor...
[12:12:25] Exporting cross-references for QCO Monitor...
[12:12:26] Processing block: ReadAnalogIn...
[12:12:26] Exporting cross-references for ReadAnalogIn...
[12:12:26] Processing block: RecipeCalculation...
[12:12:26] Exporting cross-references for RecipeCalculation...
[12:12:27] Processing block: REPLACE_Mod...
[12:12:27] Exporting cross-references for REPLACE_Mod...
[12:12:27] Processing block: SyrBrix_SyrupCorrPerc...
[12:12:27] Exporting cross-references for SyrBrix_SyrupCorrPerc...
[12:12:27] Processing block: Syrup Rinse QCO_Seq...
[12:12:27] Exporting cross-references for Syrup Rinse QCO_Seq...
[12:12:27] Processing block: SyrupRoomCtrl_UpdateVal...
[12:12:27] Exporting cross-references for SyrupRoomCtrl_UpdateVal...
[12:12:27] Processing block: T_Timer...
[12:12:27] Exporting cross-references for T_Timer...
[12:12:28] Processing block: TankLevelToHeight...
[12:12:28] Exporting cross-references for TankLevelToHeight...
[12:12:28] Processing block: VacuumCtrl...
[12:12:28] Exporting cross-references for VacuumCtrl...
[12:12:28] Processing block: ValveFlow...
[12:12:28] Exporting cross-references for ValveFlow...
[12:12:28] Processing block: BlenderPID__Main...
[12:12:28] Exporting cross-references for BlenderPID__Main...
[12:12:29] Processing block: BlenderPID_BlendingFault...
[12:12:29] Exporting cross-references for BlenderPID_BlendingFault...
[12:12:30] Processing block: BlenderPID_PIDFFCalc...
[12:12:30] Exporting cross-references for BlenderPID_PIDFFCalc...
[12:12:30] Processing block: BlenderPID_PIDInitParam...
[12:12:30] Exporting cross-references for BlenderPID_PIDInitParam...
[12:12:31] Processing block: BlenderPID_PIDSPCalc...
[12:12:31] Exporting cross-references for BlenderPID_PIDSPCalc...
[12:12:32] Processing block: BlenderPIDCtrl_Monitor...
[12:12:32] Exporting cross-references for BlenderPIDCtrl_Monitor...
[12:12:33] Processing block: BlenderPIDCtrl_ReadAnIn...
[12:12:33] Exporting cross-references for BlenderPIDCtrl_ReadAnIn...
[12:12:33] Processing block: BlenderPIDCtrl_SaveInteg...
[12:12:33] Exporting cross-references for BlenderPIDCtrl_SaveInteg...
[12:12:34] Processing block: BlenderRun_MeasFilSpeed...
[12:12:34] Exporting cross-references for BlenderRun_MeasFilSpeed...
[12:12:35] Processing block: BrixTracking_ProdSamples...
[12:12:35] Exporting cross-references for BrixTracking_ProdSamples...
[12:12:35] Processing block: BrixTracking_SampleTime...
[12:12:35] Exporting cross-references for BrixTracking_SampleTime...
[12:12:36] Processing block: CIPRecipeManagement...
[12:12:36] Exporting cross-references for CIPRecipeManagement...
[12:12:37] Processing block: Co2_Counters...
[12:12:37] Exporting cross-references for Co2_Counters...
[12:12:37] Processing block: CO2Tracking...
[12:12:37] Exporting cross-references for CO2Tracking...
[12:12:37] Processing block: CO2Tracking_ProdSamples...
[12:12:37] Exporting cross-references for CO2Tracking_ProdSamples...
[12:12:38] Processing block: CO2Tracking_SampleTime...
[12:12:38] Exporting cross-references for CO2Tracking_SampleTime...
[12:12:38] Processing block: Default_SupervisionFB...
[12:12:38] Exporting cross-references for Default_SupervisionFB...
[12:12:38] Processing block: Delay...
[12:12:38] Exporting cross-references for Delay...
[12:12:38] Processing block: Input...
[12:12:38] Exporting cross-references for Input...
[12:12:41] Processing block: Integral...
[12:12:41] Exporting cross-references for Integral...
[12:12:41] Processing block: Key Read & Write...
[12:12:41] Exporting cross-references for Key Read & Write...
[12:12:46] Processing block: LowPassFilter...
[12:12:46] Exporting cross-references for LowPassFilter...
[12:12:46] Processing block: MFMAnalogValues...
[12:12:46] Exporting cross-references for MFMAnalogValues...
[12:12:48] Processing block: MSE Slope...
[12:12:48] Exporting cross-references for MSE Slope...
[12:12:48] Processing block: PID_Filling_Head_Calc...
[12:12:48] Exporting cross-references for PID_Filling_Head_Calc...
[12:12:48] Processing block: PID_RMM301...
[12:12:48] Exporting cross-references for PID_RMM301...
[12:12:49] Processing block: PID_RMM303...
[12:12:49] Exporting cross-references for PID_RMM303...
[12:12:49] Processing block: PID_RMM304...
[12:12:49] Exporting cross-references for PID_RMM304...
[12:12:50] Processing block: PID_RMP302...
[12:12:50] Exporting cross-references for PID_RMP302...
[12:12:50] Processing block: PID_RVM301...
[12:12:50] Exporting cross-references for PID_RVM301...
[12:12:50] Processing block: PID_RVM319_PRD...
[12:12:50] Exporting cross-references for PID_RVM319_PRD...
[12:12:51] Processing block: PID_RVN302...
[12:12:51] Exporting cross-references for PID_RVN302...
[12:12:52] Processing block: PID_RVP303...
[12:12:52] Exporting cross-references for PID_RVP303...
[12:12:52] Processing block: PID_RVS318...
[12:12:52] Exporting cross-references for PID_RVS318...
[12:12:52] Processing block: PIDControl...
[12:12:52] Exporting cross-references for PIDControl...
[12:12:53] Processing block: Procedure...
[12:12:53] Exporting cross-references for Procedure...
[12:12:53] Processing block: ProcedureBlendFill StartUp...
[12:12:53] Exporting cross-references for ProcedureBlendFill StartUp...
[12:12:54] Processing block: ProcedureBrixTracking...
[12:12:54] Exporting cross-references for ProcedureBrixTracking...
[12:12:54] Processing block: ProcedureCarboWaterLine...
[12:12:54] Exporting cross-references for ProcedureCarboWaterLine...
[12:12:55] Processing block: ProcedureDeaireator StartUp...
[12:12:55] Exporting cross-references for ProcedureDeaireator StartUp...
[12:12:56] Processing block: ProcedureFirstProduction...
[12:12:56] Exporting cross-references for ProcedureFirstProduction...
[12:12:56] Processing block: ProcedureProdBrixRecovery...
[12:12:56] Exporting cross-references for ProcedureProdBrixRecovery...
[12:12:57] Processing block: ProcedureProdTankDrain...
[12:12:57] Exporting cross-references for ProcedureProdTankDrain...
[12:12:57] Processing block: ProcedureProdTankRunOut...
[12:12:57] Exporting cross-references for ProcedureProdTankRunOut...
[12:12:58] Processing block: ProcedureSyrup RunOut...
[12:12:58] Exporting cross-references for ProcedureSyrup RunOut...
[12:12:58] Processing block: ProcedureSyrupLineMFMPrep...
[12:12:58] Exporting cross-references for ProcedureSyrupLineMFMPrep...
[12:12:59] Processing block: ProcedureSyrupMFMStartUp...
[12:12:59] Exporting cross-references for ProcedureSyrupMFMStartUp...
[12:13:00] Processing block: ProductAvailable...
[12:13:00] Exporting cross-references for ProductAvailable...
[12:13:00] Processing block: ProductPipeDrain...
[12:13:00] Exporting cross-references for ProductPipeDrain...
[12:13:00] Processing block: ProductPipeRunOut...
[12:13:00] Exporting cross-references for ProductPipeRunOut...
[12:13:01] Processing block: Signal Gen...
[12:13:01] Exporting cross-references for Signal Gen...
[12:13:01] Processing block: SlewLimit...
[12:13:01] Exporting cross-references for SlewLimit...
[12:13:01] Processing block: Statistical_Analisys...
[12:13:01] Exporting cross-references for Statistical_Analisys...
[12:13:02] Processing block: SubCarb...
[12:13:02] Exporting cross-references for SubCarb...
[12:13:02] Processing block: SyrBrix Autocorrection...
[12:13:02] Exporting cross-references for SyrBrix Autocorrection...
[12:13:03] Processing block: System_Run_Out...
[12:13:03] Exporting cross-references for System_Run_Out...
[12:13:04] Processing block: Blender_Constants...
[12:13:04] Exporting cross-references for Blender_Constants...
[12:13:06] Processing block: Blender_Variables...
[12:13:06] Exporting cross-references for Blender_Variables...
[12:13:12] Processing block: Blender_Variables_Pers...
[12:13:12] Exporting cross-references for Blender_Variables_Pers...
[12:13:14] Processing block: Blocco_dati_Test...
[12:13:14] Exporting cross-references for Blocco_dati_Test...
[12:13:16] Processing block: CIP_Program_Variables...
[12:13:16] Exporting cross-references for CIP_Program_Variables...
[12:13:30] Processing block: CIPRecipe#01...
[12:13:30] Exporting cross-references for CIPRecipe#01...
[12:13:32] Processing block: CIPRecipe#02...
[12:13:32] Exporting cross-references for CIPRecipe#02...
[12:13:34] Processing block: CIPRecipe#03...
[12:13:34] Exporting cross-references for CIPRecipe#03...
[12:13:36] Processing block: CIPRecipe#04...
[12:13:36] Exporting cross-references for CIPRecipe#04...
[12:13:38] Processing block: CIPRecipe#05...
[12:13:38] Exporting cross-references for CIPRecipe#05...
[12:13:40] Processing block: CIPRecipe#06...
[12:13:40] Exporting cross-references for CIPRecipe#06...
[12:13:42] Processing block: CIPRecipe#07...
[12:13:42] Exporting cross-references for CIPRecipe#07...
[12:13:44] Processing block: CIPRecipe#08...
[12:13:44] Exporting cross-references for CIPRecipe#08...
[12:13:46] Processing block: CIPRecipe#09...
[12:13:46] Exporting cross-references for CIPRecipe#09...
[12:13:48] Processing block: CIPRecipe#10...
[12:13:48] Exporting cross-references for CIPRecipe#10...
[12:13:49] Processing block: CIPRecipe#11...
[12:13:49] Exporting cross-references for CIPRecipe#11...
[12:13:51] Processing block: CIPRecipe#12...
[12:13:51] Exporting cross-references for CIPRecipe#12...
[12:13:54] Processing block: CIPRecipe#13...
[12:13:54] Exporting cross-references for CIPRecipe#13...
[12:13:56] Processing block: CIPRecipe#14...
[12:13:56] Exporting cross-references for CIPRecipe#14...
[12:13:58] Processing block: CIPRecipe#15...
[12:13:58] Exporting cross-references for CIPRecipe#15...
[12:14:01] Processing block: CIPRecipe#16...
[12:14:01] Exporting cross-references for CIPRecipe#16...
[12:14:03] Processing block: CIPRecipe#17...
[12:14:03] Exporting cross-references for CIPRecipe#17...
[12:14:05] Processing block: CIPRecipe#18...
[12:14:05] Exporting cross-references for CIPRecipe#18...
[12:14:07] Processing block: CIPRecipe#19...
[12:14:07] Exporting cross-references for CIPRecipe#19...
[12:14:09] Processing block: CIPRecipe#20...
[12:14:09] Exporting cross-references for CIPRecipe#20...
[12:14:11] Processing block: CIPRecipe#21...
[12:14:11] Exporting cross-references for CIPRecipe#21...
[12:14:13] Processing block: CIPRecipe#22...
[12:14:13] Exporting cross-references for CIPRecipe#22...
[12:14:15] Processing block: CIPRecipe#23...
[12:14:15] Exporting cross-references for CIPRecipe#23...
[12:14:17] Processing block: CIPRecipe#24...
[12:14:17] Exporting cross-references for CIPRecipe#24...
[12:14:19] Processing block: CIPRecipe#25...
[12:14:19] Exporting cross-references for CIPRecipe#25...
[12:14:21] Processing block: CIPRecipe#26...
[12:14:21] Exporting cross-references for CIPRecipe#26...
[12:14:24] Processing block: CIPRecipe#27...
[12:14:24] Exporting cross-references for CIPRecipe#27...
[12:14:27] Processing block: CIPRecipe#28...
[12:14:27] Exporting cross-references for CIPRecipe#28...
[12:14:30] Processing block: CIPRecipe#29...
[12:14:30] Exporting cross-references for CIPRecipe#29...
[12:14:32] Processing block: CIPRecipe#30...
[12:14:32] Exporting cross-references for CIPRecipe#30...
[12:14:34] Processing block: CIPReportDB...
[12:14:34] Exporting cross-references for CIPReportDB...
[12:14:39] Processing block: Filler_Head_Variables...
[12:14:39] Exporting cross-references for Filler_Head_Variables...
[12:14:40] Processing block: GLOBAL_DIAG_DB...
[12:14:40] Exporting cross-references for GLOBAL_DIAG_DB...
[12:14:41] Processing block: HMI CPU_DP Diag...
[12:14:41] Exporting cross-references for HMI CPU_DP Diag...
[12:14:44] Processing block: HMI Key User...
[12:14:44] Exporting cross-references for HMI Key User...
[12:15:10] Processing block: HMI_Alarms...
[12:15:10] Exporting cross-references for HMI_Alarms...
[12:15:14] Processing block: HMI_Digital...
[12:15:14] Exporting cross-references for HMI_Digital...
[12:15:17] ERROR accessing Program Blocks for cross-reference export: RemotingException: El objeto '/7a4a4a73_a97d_46f2_83b4_4f5e9d0e966e/df6uqosgttpdtg38rqj6huml_447.rem' se desconectó o no existe en el servidor.
[12:15:17] [PLC: PLC] Exporting PLC Tag Table Cross-References...
[12:15:17] Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\PlcTags_CR
[12:15:17] Found 10 Tag Tables.
[12:15:17] Processing Tag Table: Memories...
[12:15:17] Exporting cross-references for Memories...
[12:15:17] Processing Tag Table: Tabella delle variabili standard...
[12:15:17] Exporting cross-references for Tabella delle variabili standard...
[12:15:17] Processing Tag Table: Timers_Counters...
[12:15:17] Exporting cross-references for Timers_Counters...
[12:15:17] Processing Tag Table: Inputs...
[12:15:17] Exporting cross-references for Inputs...
[12:15:17] Processing Tag Table: Outputs...
[12:15:17] Exporting cross-references for Outputs...
[12:15:17] Processing Tag Table: Tabella delle variabili_1...
[12:15:17] Exporting cross-references for Tabella delle variabili_1...
[12:15:17] Processing Tag Table: Tabella delle variabili_2...
[12:15:17] Exporting cross-references for Tabella delle variabili_2...
[12:15:17] Processing Tag Table: OutputsFesto...
[12:15:17] Exporting cross-references for OutputsFesto...
[12:15:17] Processing Tag Table: InputsMaster...
[12:15:17] Exporting cross-references for InputsMaster...
[12:15:17] Processing Tag Table: OutputsMaster...
[12:15:17] Exporting cross-references for OutputsMaster...
[12:15:17] Tag Table CR Export Summary: Exported=10, Skipped/Errors=0
[12:15:17] [PLC: PLC] Exporting PLC Data Type (UDT) Cross-References...
[12:15:17] Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\PlcDataTypes_CR
[12:15:17] Found 24 UDTs.
[12:15:17] Processing UDT: AnalogInstrument...
[12:15:17] Exporting cross-references for AnalogInstrument...
[12:15:17] Processing UDT: CIP_Link_Type...
[12:15:17] Exporting cross-references for CIP_Link_Type...
[12:15:20] Processing UDT: CIP_Simple_Type...
[12:15:20] Exporting cross-references for CIP_Simple_Type...
[12:15:20] Processing UDT: CIP_Step_Type...
[12:15:20] Exporting cross-references for CIP_Step_Type...
[12:15:20] Processing UDT: CIP_WaitEvent_Type...
[12:15:20] Exporting cross-references for CIP_WaitEvent_Type...
[12:15:21] Processing UDT: Device...
[12:15:21] Exporting cross-references for Device...
[12:15:21] Processing UDT: DigitalInstrument...
[12:15:21] Exporting cross-references for DigitalInstrument...
[12:15:21] Processing UDT: FunctionButton...
[12:15:21] Exporting cross-references for FunctionButton...
[12:15:21] Processing UDT: PID...
[12:15:21] Exporting cross-references for PID...
[12:15:22] Processing UDT: QCO Phase...
[12:15:22] Exporting cross-references for QCO Phase...
[12:15:22] Processing UDT: QCO Spare...
[12:15:22] Exporting cross-references for QCO Spare...
[12:15:22] Processing UDT: QCO Timer...
[12:15:22] Exporting cross-references for QCO Timer...
[12:15:23] Processing UDT: QCO Timer_Array_1...
[12:15:23] Exporting cross-references for QCO Timer_Array_1...
[12:15:26] Processing UDT: Recipe_Prod...
[12:15:26] Exporting cross-references for Recipe_Prod...
[12:15:28] Processing UDT: ReportCIPSimpleData...
[12:15:28] Exporting cross-references for ReportCIPSimpleData...
[12:15:28] Processing UDT: TADDR_PAR...
[12:15:28] Exporting cross-references for TADDR_PAR...
[12:15:28] Processing UDT: TCON_PAR...
[12:15:28] Exporting cross-references for TCON_PAR...
[12:15:28] Processing UDT: TCON_PAR_LF...
[12:15:28] Exporting cross-references for TCON_PAR_LF...
[12:15:29] Processing UDT: Tipo di dati utente_1...
[12:15:29] Exporting cross-references for Tipo di dati utente_1...
[12:15:29] Processing UDT: Tipo di dati utente_2...
[12:15:29] Exporting cross-references for Tipo di dati utente_2...
[12:16:10] Processing UDT: ASLeds...
[12:16:10] Exporting cross-references for ASLeds...
[12:16:10] Processing UDT: IFLeds...
[12:16:10] Exporting cross-references for IFLeds...
[12:16:10] Processing UDT: SV_FB_State...
[12:16:10] Exporting cross-references for SV_FB_State...
[12:16:10] Processing UDT: SV_State...
[12:16:10] Exporting cross-references for SV_State...
[12:16:11] UDT CR Export Summary: Exported=24, Skipped/Errors=0
[12:16:11] [PLC: PLC] Attempting to Export System Block Cross-References...
[12:16:11] Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\SystemBlocks_CR
[12:16:11] Found 9 system blocks (using get_system_blocks).
[12:16:11] Processing System Block: T_301...
[12:16:11] Exporting cross-references for T_301...
[12:16:11] Processing System Block: IEC_Timer_0_DB_9...
[12:16:11] Exporting cross-references for IEC_Timer_0_DB_9...
[12:16:11] Processing System Block: T_302...
[12:16:11] Exporting cross-references for T_302...
[12:16:11] Processing System Block: GET_Reciver...
[12:16:11] Exporting cross-references for GET_Reciver...
[12:16:11] Processing System Block: PUT_Send_Filler...
[12:16:11] Exporting cross-references for PUT_Send_Filler...
[12:16:11] Processing System Block: LED...
[12:16:11] Exporting cross-references for LED...
[12:16:11] Processing System Block: SCALE...
[12:16:11] Exporting cross-references for SCALE...
[12:16:11] Processing System Block: CONT_C...
[12:16:11] Exporting cross-references for CONT_C...
[12:16:11] Processing System Block: DeviceStates...
[12:16:11] Exporting cross-references for DeviceStates...
[12:16:12] System Block CR Export Summary: Exported=9, Skipped/Errors=0
[12:16:12] [PLC: PLC] Attempting to Export Software Unit Cross-References...
[12:16:12] Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\SoftwareUnits_CR
[12:16:12] Found 0 Software Units.
[12:16:12] Software Unit CR Export Summary: Exported=0, Skipped/Errors=0
[12:16:12] --- Finished processing PLC: PLC ---
[12:16:12] Cross-reference export process completed.
[12:16:12] Closing TIA Portal...
[12:16:12] 2025-05-05 12:16:12,051 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal ClosePortal - Close TIA Portal
[12:16:15] TIA Portal closed.
[12:16:15] Script finished.
[12:16:20] Ejecución de x4.py finalizada (success). Duración: 0:06:53.110393. Se detectaron errores (ver log).
[12:16:20] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\log_x4.txt