Add README and execution log for ObtainIOFromProjectTia and XML Parser to SCL

- Created a README file for the ObtainIOFromProjectTia script group detailing the directory structure and file organization.
- Added a detailed execution log for the x4_cross_reference.py script, including timestamps, output summaries, and error logs.
This commit is contained in:
Miguel 2025-05-12 12:05:14 +02:00
parent 1f64cdf448
commit 88ff4a25a2
21 changed files with 5407 additions and 3476 deletions

View File

@ -1,22 +1,22 @@
--- Log de Ejecución: x1.py --- --- Log de Ejecución: x1.py ---
Grupo: EmailCrono Grupo: EmailCrono
Directorio de Trabajo: C:\Trabajo\SIDEL\EMAILs\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS Directorio de Trabajo: C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email
Inicio: 2025-05-03 17:15:12 Inicio: 2025-05-09 16:58:28
Fin: 2025-05-03 17:15:14 Fin: 2025-05-09 16:58:29
Duración: 0:00:01.628641 Duración: 0:00:00.434600
Estado: SUCCESS (Código de Salida: 0) Estado: SUCCESS (Código de Salida: 0)
--- SALIDA ESTÁNDAR (STDOUT) --- --- SALIDA ESTÁNDAR (STDOUT) ---
Working directory: C:\Trabajo\SIDEL\EMAILs\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS Working directory: C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email
Input directory: C:\Trabajo\SIDEL\EMAILs\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS Input directory: C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email
Output directory: C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/00 - MASTER/EMAILs Output directory: C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/10 - E5.007095 - Modifica O&U - SAE463
Cronologia file: C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/00 - MASTER/EMAILs\cronologia.md Cronologia file: C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/10 - E5.007095 - Modifica O&U - SAE463\cronologia.md
Attachments directory: C:\Trabajo\SIDEL\EMAILs\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS\adjuntos Attachments directory: C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email\adjuntos
Beautify rules file: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\EmailCrono\config\beautify_rules.json Beautify rules file: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\EmailCrono\config\beautify_rules.json
Found 1 .eml files Found 1 .eml files
Loaded 0 existing messages Loaded 0 existing messages
Processing C:\Trabajo\SIDEL\EMAILs\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS.eml Processing C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email\R_ {EXT} E5.006894 - Modifica O&U - SAE463 New Analyzer.eml
Aplicando reglas de prioridad 1 Aplicando reglas de prioridad 1
Aplicando reglas de prioridad 2 Aplicando reglas de prioridad 2
Aplicando reglas de prioridad 3 Aplicando reglas de prioridad 3
@ -27,7 +27,7 @@ Estadísticas de procesamiento:
- Mensajes únicos añadidos: 1 - Mensajes únicos añadidos: 1
- Mensajes duplicados ignorados: 0 - Mensajes duplicados ignorados: 0
Writing 1 messages to C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/00 - MASTER/EMAILs\cronologia.md Writing 1 messages to C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/10 - E5.007095 - Modifica O&U - SAE463\cronologia.md
--- ERRORES (STDERR) --- --- ERRORES (STDERR) ---
Ninguno Ninguno

View File

@ -8,7 +8,7 @@
"cronologia_file": "cronologia.md" "cronologia_file": "cronologia.md"
}, },
"level3": { "level3": {
"output_directory": "C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/00 - MASTER/EMAILs" "output_directory": "C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/10 - E5.007095 - Modifica O&U - SAE463"
}, },
"working_directory": "C:\\Trabajo\\SIDEL\\EMAILs\\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS" "working_directory": "C:\\Trabajo\\SIDEL\\10 - E5.007095 - Modifica O&U - SAE463\\Reporte\\Email"
} }

View File

@ -1,6 +1,8 @@
{ {
"path": "C:\\Trabajo\\SIDEL\\EMAILs\\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS", "path": "C:\\Trabajo\\SIDEL\\10 - E5.007095 - Modifica O&U - SAE463\\Reporte\\Email",
"history": [ "history": [
"C:\\Trabajo\\SIDEL\\10 - E5.007095 - Modifica O&U - SAE463\\Reporte\\Email",
"C:\\Trabajo\\SIDEL\\08 - Masselli TEST\\Reporte\\EMAILs",
"C:\\Trabajo\\SIDEL\\EMAILs\\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS", "C:\\Trabajo\\SIDEL\\EMAILs\\I_ E5.007727 _ Evo On - SFSRFH300172 + SFSRFH300109 - ANDIA LACTEOS",
"C:\\Estudio", "C:\\Estudio",
"C:\\Trabajo\\VM\\40 - 93040 - HENKEL - NEXT2 Problem\\Reporte\\EmailTody", "C:\\Trabajo\\VM\\40 - 93040 - HENKEL - NEXT2 Problem\\Reporte\\EmailTody",

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
--- Log de Ejecución: x2.py --- --- Log de Ejecución: x2.py ---
Grupo: ObtainIOFromProjectTia Grupo: ObtainIOFromProjectTia
Directorio de Trabajo: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport Directorio de Trabajo: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport
Inicio: 2025-05-02 23:34:21 Inicio: 2025-05-05 12:39:16
Fin: 2025-05-02 23:36:20 Fin: 2025-05-05 12:40:41
Duración: 0:01:58.373747 Duración: 0:01:25.846312
Estado: SUCCESS (Código de Salida: 0) Estado: SUCCESS (Código de Salida: 0)
--- SALIDA ESTÁNDAR (STDOUT) --- --- SALIDA ESTÁNDAR (STDOUT) ---
@ -16,17 +16,17 @@ Will generate summary to: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE19
Export log file: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.log Export log file: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.log
Connecting to TIA Portal V18.0... Connecting to TIA Portal V18.0...
2025-05-02 23:34:30,132 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - Start TIA Portal, please acknowledge the security dialog. 2025-05-05 12:39:20,828 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - Start TIA Portal, please acknowledge the security dialog.
2025-05-02 23:34:30,155 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - With user interface 2025-05-05 12:39:20,847 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - With user interface
Connected. Connected.
Opening project: SAE196_c0.2.ap18... Opening project: SAE196_c0.2.ap18...
2025-05-02 23:35:01,950 [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 2025-05-05 12:39:43,534 [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. Project opened.
Exporting CAx data for the project to C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.aml... Exporting CAx data for the project to C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.aml...
CAx data exported successfully. CAx data exported successfully.
Closing TIA Portal... Closing TIA Portal...
2025-05-02 23:36:15,947 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal ClosePortal - Close TIA Portal 2025-05-05 12:40:38,187 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal ClosePortal - Close TIA Portal
TIA Portal closed. TIA Portal closed.
Parsing AML file: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.aml Parsing AML file: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.aml
Markdown summary written to: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Summary.md Markdown summary written to: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Summary.md

View File

@ -1,9 +1,9 @@
--- Log de Ejecución: x3.py --- --- Log de Ejecución: x3.py ---
Grupo: ObtainIOFromProjectTia Grupo: ObtainIOFromProjectTia
Directorio de Trabajo: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport Directorio de Trabajo: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport
Inicio: 2025-05-02 23:43:07 Inicio: 2025-05-05 12:48:16
Fin: 2025-05-02 23:43:12 Fin: 2025-05-05 12:48:22
Duración: 0:00:05.235415 Duración: 0:00:06.125698
Estado: SUCCESS (Código de Salida: 0) Estado: SUCCESS (Código de Salida: 0)
--- SALIDA ESTÁNDAR (STDOUT) --- --- SALIDA ESTÁNDAR (STDOUT) ---
@ -17,22 +17,22 @@ Output IO Debug Tree MD: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196
Processing AML file: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.aml Processing AML file: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.aml
Pass 1: Found 203 InternalElement(s). Populating device dictionary... Pass 1: Found 203 InternalElement(s). Populating device dictionary...
Pass 2: Identifying PLCs and Networks (Refined v2)... Pass 2: Identifying PLCs and Networks (Refined v2)...
Identified Network: PROFIBUS_1 (bcc6f2bd-3d71-4407-90f2-bccff6064051) Type: Profibus Identified Network: PROFIBUS_1 (17667a38-6bbe-481a-a234-6c9ac582adb9) Type: Profibus
Identified Network: ETHERNET_1 (c6d49787-a076-4592-994d-876eea123dfd) Type: Ethernet/Profinet Identified Network: ETHERNET_1 (4fa8d8c4-4fb5-4df5-a82e-ec6829530c2e) Type: Ethernet/Profinet
Identified PLC: PLC (a48e038f-0bcc-4b48-8373-033da316c62b) - Type: CPU 1516F-3 PN/DP OrderNo: 6ES7 516-3FP03-0AB0 Identified PLC: PLC (a48e038f-0bcc-4b48-8373-033da316c62b) - Type: CPU 1516F-3 PN/DP OrderNo: 6ES7 516-3FP03-0AB0
Pass 3: Processing InternalLinks (Robust Network Mapping & IO)... Pass 3: Processing InternalLinks (Robust Network Mapping & IO)...
Found 118 InternalLink(s). Found 118 InternalLink(s).
Mapping Device/Node 'E1' (NodeID:1643b51f-7067-4565-8f8e-109a1a775fed, Addr:10.1.33.11) to Network 'ETHERNET_1' Mapping Device/Node 'E1' (NodeID:e15ed19e-b5e1-4cc2-9690-ee5b2132ed74, Addr:10.1.33.11) to Network 'ETHERNET_1'
--> Associating Network 'ETHERNET_1' with PLC 'PLC' (via Node 'E1' Addr: 10.1.33.11) --> Associating Network 'ETHERNET_1' with PLC 'PLC' (via Node 'E1' Addr: 10.1.33.11)
Mapping Device/Node 'P1' (NodeID:5aff409b-2573-485f-82bf-0e08c9200086, Addr:1) to Network 'PROFIBUS_1' Mapping Device/Node 'P1' (NodeID:d9426769-3159-4c09-af54-e00a677183fd, Addr:1) to Network 'PROFIBUS_1'
--> Associating Network 'PROFIBUS_1' with PLC 'PLC' (via Node 'P1' Addr: 1) --> Associating Network 'PROFIBUS_1' with PLC 'PLC' (via Node 'P1' Addr: 1)
Mapping Device/Node 'PB1' (NodeID:c796e175-c770-43f0-8191-fc91996c0147, Addr:12) to Network 'PROFIBUS_1' Mapping Device/Node 'PB1' (NodeID:086deb3e-1f8a-471c-8d00-879d11991c6d, Addr:12) to Network 'PROFIBUS_1'
Mapping Device/Node 'PB1' (NodeID:0b44f55a-63c1-49e8-beea-24dc5d3226e3, Addr:20) to Network 'PROFIBUS_1' Mapping Device/Node 'PB1' (NodeID:7cf9f331-96fd-4a89-bf31-7faf501077cd, Addr:20) to Network 'PROFIBUS_1'
Mapping Device/Node 'PB1' (NodeID:25cfc251-f946-40c5-992d-ad6387677acb, Addr:21) to Network 'PROFIBUS_1' Mapping Device/Node 'PB1' (NodeID:d5a8a086-5c97-4c7d-b488-823e7d75370e, Addr:21) to Network 'PROFIBUS_1'
Mapping Device/Node 'PB1' (NodeID:57999375-ec72-46ef-8ec2-6c3178e8acf8, Addr:22) to Network 'PROFIBUS_1' Mapping Device/Node 'PB1' (NodeID:e2893de8-90e6-42e6-9e83-7838a57f5038, Addr:22) to Network 'PROFIBUS_1'
Mapping Device/Node 'PB1' (NodeID:54e8db6a-9443-41a4-a85b-cf0722c1d299, Addr:10) to Network 'PROFIBUS_1' Mapping Device/Node 'PB1' (NodeID:af0f7eb6-720e-42c3-9a97-bf75183d0dc2, Addr:10) to Network 'PROFIBUS_1'
Mapping Device/Node 'PB1' (NodeID:4786bab6-4097-4651-ac19-6cadfc7ea735, Addr:8) to Network 'PROFIBUS_1' Mapping Device/Node 'PB1' (NodeID:bfff87c4-b07c-441c-b977-58e967b96587, Addr:8) to Network 'PROFIBUS_1'
Mapping Device/Node 'PB1' (NodeID:1f08afcb-111f-428f-915e-69363af1b09a, Addr:40) to Network 'PROFIBUS_1' Mapping Device/Node 'PB1' (NodeID:69c65f28-7810-44e6-aae6-fcecb035f91b, Addr:40) to Network 'PROFIBUS_1'
Data extraction and structuring complete. Data extraction and structuring complete.
Generating JSON output: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.hierarchical.json Generating JSON output: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\SAE196_c0.2_CAx_Export.hierarchical.json
JSON data written successfully. JSON data written successfully.

View File

@ -1,33 +1,33 @@
--- Log de Ejecución: x4.py --- --- Log de Ejecución: x4.py ---
Grupo: ObtainIOFromProjectTia Grupo: ObtainIOFromProjectTia
Directorio de Trabajo: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport Directorio de Trabajo: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport
Inicio: 2025-05-05 12:09:26 Inicio: 2025-05-05 13:26:23
Fin: 2025-05-05 12:16:20 Fin: 2025-05-05 13:35:16
Duración: 0:06:53.110393 Duración: 0:08:53.119788
Estado: SUCCESS (Código de Salida: 0) Estado: SUCCESS (Código de Salida: 0)
--- SALIDA ESTÁNDAR (STDOUT) --- --- SALIDA ESTÁNDAR (STDOUT) ---
--- TIA Portal Cross-Reference Exporter --- --- 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 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 Using Base Export Directory: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport
Connecting to TIA Portal V18.0... 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 13:26:29,175 [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 2025-05-05 13:26:29,200 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - With user interface
Connected to TIA Portal. Connected to TIA Portal.
2025-05-05 12:09:48,418 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal GetProcessId - Process id: 24284 2025-05-05 13:27:07,831 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal GetProcessId - Process id: 5272
Portal Process ID: 24284 Portal Process ID: 5272
Opening project: SAE196_c0.2.ap18... 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 2025-05-05 13:27:08,303 [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. 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 2025-05-05 13:27:39,932 [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... Found 1 PLC(s). Starting cross-reference export process...
--- Processing PLC: PLC --- --- Processing PLC: PLC ---
[PLC: PLC] Exporting Program Block Cross-References... [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 Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\ProgramBlocks_CR
Found 380 program blocks. Found 380 program blocks.
Processing block: _CYCL_EXC... Processing block: _CYCL_EXC...
Exporting cross-references for _CYCL_EXC... Exporting cross-references for _CYCL_EXC...
@ -305,284 +305,10 @@ Found 1 PLC(s). Starting cross-reference export process...
Exporting cross-references for CIPLocal_ProgStepUp... Exporting cross-references for CIPLocal_ProgStepUp...
Processing block: CIPReportManager... Processing block: CIPReportManager...
Exporting cross-references for CIPReportManager... Exporting cross-references for CIPReportManager...
Processing block: CPU_DP Global Diag... ERROR accessing Program Blocks for cross-reference export: RemotingException: El objeto '/460a527c_f027_40c0_bbfb_2f9184c04002/hwhq0szmkxqfz2pc1xmghz0a_310.rem' se desconectó o no existe en el servidor.
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... [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 Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\PlcTags_CR
Found 10 Tag Tables. Found 10 Tag Tables.
Processing Tag Table: Memories... Processing Tag Table: Memories...
Exporting cross-references for Memories... Exporting cross-references for Memories...
@ -607,7 +333,7 @@ Found 1 PLC(s). Starting cross-reference export process...
Tag Table CR Export Summary: Exported=10, Skipped/Errors=0 Tag Table CR Export Summary: Exported=10, Skipped/Errors=0
[PLC: PLC] Exporting PLC Data Type (UDT) Cross-References... [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 Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\PlcDataTypes_CR
Found 24 UDTs. Found 24 UDTs.
Processing UDT: AnalogInstrument... Processing UDT: AnalogInstrument...
Exporting cross-references for AnalogInstrument... Exporting cross-references for AnalogInstrument...
@ -660,7 +386,7 @@ Found 1 PLC(s). Starting cross-reference export process...
UDT CR Export Summary: Exported=24, Skipped/Errors=0 UDT CR Export Summary: Exported=24, Skipped/Errors=0
[PLC: PLC] Attempting to Export System Block Cross-References... [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 Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\SystemBlocks_CR
Found 9 system blocks (using get_system_blocks). Found 9 system blocks (using get_system_blocks).
Processing System Block: T_301... Processing System Block: T_301...
Exporting cross-references for T_301... Exporting cross-references for T_301...
@ -683,7 +409,7 @@ Found 1 PLC(s). Starting cross-reference export process...
System Block CR Export Summary: Exported=9, Skipped/Errors=0 System Block CR Export Summary: Exported=9, Skipped/Errors=0
[PLC: PLC] Attempting to Export Software Unit Cross-References... [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 Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\SoftwareUnits_CR
Found 0 Software Units. Found 0 Software Units.
Software Unit CR Export Summary: Exported=0, Skipped/Errors=0 Software Unit CR Export Summary: Exported=0, Skipped/Errors=0
@ -692,16 +418,16 @@ Found 1 PLC(s). Starting cross-reference export process...
Cross-reference export process completed. Cross-reference export process completed.
Closing TIA Portal... Closing TIA Portal...
2025-05-05 12:16:12,051 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal ClosePortal - Close TIA Portal 2025-05-05 13:35:02,332 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal ClosePortal - Close TIA Portal
TIA Portal closed. TIA Portal closed.
Script finished. Script finished.
--- ERRORES (STDERR) --- --- ERRORES (STDERR) ---
Traceback (most recent call last): Traceback (most recent call last):
File "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\x4.py", line 100, in export_plc_cross_references File "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\ObtainIOFromProjectTia\x4.py", line 99, in export_plc_cross_references
block_name = block.get_name() 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. ValueError: RemotingException: El objeto '/460a527c_f027_40c0_bbfb_2f9184c04002/hwhq0szmkxqfz2pc1xmghz0a_310.rem' se desconectó o no existe en el servidor.
--- FIN DEL LOG --- --- FIN DEL LOG ---

View File

@ -0,0 +1,39 @@
### Directory structure
<working_directory>/
├── <PLC1_Name>/
│ ├── ProgramBlocks_XML/
│ │ └── ... (archivos XML de bloques)
│ ├── ProgramBlocks_SCL/
│ │ └── ... (archivos SCL de bloques)
│ ├── ProgramBlocks_CR/
│ │ └── ... (archivos XML de referencias cruzadas de bloques)
│ ├── PlcTags/
│ │ └── ... (archivos XML de tablas de tags)
│ ├── PlcTags_CR/
│ │ └── ... (archivos XML de referencias cruzadas de tablas de tags)
│ ├── PlcDataTypes_CR/
│ │ └── ... (archivos XML de referencias cruzadas de UDTs)
│ ├── SystemBlocks_CR/
│ │ └── ...
│ └── SoftwareUnits_CR/
│ └── ...
│ └── Documentation/
│ └── Source
│ └── ... (archivos md de bloques de programa)
│ └── JSON
│ └── ... (archivos JSON temporales)
│ └── xref_calls_tree.md
│ └── xref_db_usage_summary.md
│ └── xref_plc_tags_summary.md
│ └── full_project_representation.md
│ └── SAE196_c0.2_CAx_Export_Hardware_Tree.md
├── <PLC2_Name>/
│ ├── ProgramBlocks_XML/
│ │ └── ...
│ └── ...
└── ...

View File

@ -12,8 +12,8 @@
"hidden": false "hidden": false
}, },
"x3.py": { "x3.py": {
"display_name": "3: Exportar IOs desde CAx", "display_name": "3: Procesar la exportación AML y generar documentación de IOs",
"short_description": "Extrae IOs de un proyecto TIA Portal y genera un archivo Markdown.", "short_description": "Extrae IOs de un archivo AML exportado del 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.", "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 "hidden": false
}, },

View File

@ -18,7 +18,6 @@ from backend.script_utils import load_configuration
# --- Configuration --- # --- Configuration ---
TIA_PORTAL_VERSION = "18.0" # Target TIA Portal version (e.g., "18.0") TIA_PORTAL_VERSION = "18.0" # Target TIA Portal version (e.g., "18.0")
CROSS_REF_SUBFOLDER = "cross_ref" # Subfolder name within working_directory
# Filter for cross-references. Based on documentation: # Filter for cross-references. Based on documentation:
# 1: 'AllObjects', 2: 'ObjectsWithReferences', 3: 'ObjectsWithoutReferences', 4: 'UnusedObjects' # 1: 'AllObjects', 2: 'ObjectsWithReferences', 3: 'ObjectsWithoutReferences', 4: 'UnusedObjects'
# Using 1 to export all. 0 might also work as a default in some API versions. # Using 1 to export all. 0 might also work as a default in some API versions.
@ -346,13 +345,13 @@ if __name__ == "__main__":
project_file = select_project_file() project_file = select_project_file()
# 2. Define Export Directory using working_directory and subfolder # 2. Define Export Directory using working_directory and subfolder
export_dir = Path(working_directory) / CROSS_REF_SUBFOLDER # The export base directory is the working directory. PLC-specific folders will be created inside.
export_base_dir = Path(working_directory)
try: try:
export_dir.mkdir(parents=True, exist_ok=True) # Ensure the base working directory exists (it should, but check doesn't hurt)
export_base_dir.mkdir(parents=True, exist_ok=True)
print(f"\nSelected Project: {project_file}") print(f"\nSelected Project: {project_file}")
print( print(f"Using Base Export Directory: {export_base_dir.resolve()}")
f"Using Export Directory: {export_dir.resolve()}"
) # Use resolve() for absolute path
except Exception as e: except Exception as e:
print(f"ERROR: Could not create export directory '{export_dir}'. Error: {e}") print(f"ERROR: Could not create export directory '{export_dir}'. Error: {e}")
sys.exit(1) sys.exit(1)
@ -397,7 +396,7 @@ if __name__ == "__main__":
for plc_device in plcs: for plc_device in plcs:
export_plc_cross_references( export_plc_cross_references(
plc=plc_device, plc=plc_device,
export_base_dir=export_dir, # Pass the specific cross-ref dir export_base_dir=export_base_dir, # Pass the base directory
) )
print("\nCross-reference export process completed.") print("\nCross-reference export process completed.")

View File

@ -1,11 +1,11 @@
{ {
"scl_output_dir": "scl_output", "aggregated_filename": "full_project_representation.md",
"xref_output_dir": "xref_output",
"xref_source_subdir": "source",
"call_xref_filename": "xref_calls_tree.md", "call_xref_filename": "xref_calls_tree.md",
"db_usage_xref_filename": "xref_db_usage_summary.md", "db_usage_xref_filename": "xref_db_usage_summary.md",
"max_call_depth": "10",
"max_users_list": "20",
"plc_tag_xref_filename": "xref_plc_tags_summary.md", "plc_tag_xref_filename": "xref_plc_tags_summary.md",
"max_call_depth": 5, "scl_output_dir": "scl_output",
"max_users_list": 20, "xref_output_dir": "xref_output",
"aggregated_filename": "full_project_representation.md" "xref_source_subdir": "source"
} }

View File

@ -14,7 +14,7 @@ try:
processors_dir = os.path.join(project_base_dir, 'processors') processors_dir = os.path.join(project_base_dir, 'processors')
if processors_dir not in sys.path: if processors_dir not in sys.path:
sys.path.insert(0, processors_dir) # Añadir al path si no está sys.path.insert(0, processors_dir) # Añadir al path si no está
from processor_utils import format_variable_name from processors.processor_utils import format_variable_name
except ImportError: except ImportError:
print("Advertencia: No se pudo importar 'format_variable_name' desde processors.processor_utils.") print("Advertencia: No se pudo importar 'format_variable_name' desde processors.processor_utils.")
print("Usando una implementación local básica.") print("Usando una implementación local básica.")

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,34 @@
--- Log de Ejecución: x4_cross_reference.py ---
Grupo: XML Parser to SCL
Directorio de Trabajo: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport
Inicio: 2025-05-05 16:34:28
Fin: 2025-05-05 16:34:30
Duración: 0:00:01.642768
Estado: SUCCESS (Código de Salida: 0)
--- SALIDA ESTÁNDAR (STDOUT) ---
(x4 - Standalone) Ejecutando generación de referencias cruzadas...
--- Iniciando Generación de Referencias Cruzadas y Fuentes MD (x4) ---
Buscando archivos JSON procesados en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC
Directorio de salida XRef: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\xref_output
Directorio fuente SCL/MD (para análisis DB/Tag y copia): scl_output
Subdirectorio fuentes MD para XRef: source
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
Archivos fuente preparados: 378 SCL convertidos, 30 MD copiados.
Buscando archivos XML XRef en: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\PLC\ProgramBlocks_CR
Archivos JSON encontrados: 342
Datos cargados para 342 bloques.
Mapa InstanciaDB -> FB creado con 0 entradas.
Datos cargados para 342 bloques (1793 PLC Tags globales).
Construyendo grafo de llamadas desde archivos XML XRef...
Archivos XML XRef encontrados: 138
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
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
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
--- Generación de Referencias Cruzadas y Fuentes MD (x4) Completada ---
(x4 - Standalone) Proceso completado exitosamente.
--- ERRORES (STDERR) ---
Ninguno
--- FIN DEL LOG ---

View File

@ -10,6 +10,44 @@ El proceso se divide en tres etapas principales, cada una manejada por un script
2. **Procesamiento Semántico (`process.py`):** Lee el JSON enriquecido y, de forma iterativa, traduce cada instrucción LAD a su equivalente SCL, manejando dependencias, propagando el estado lógico (RLO), y agrupando lógica paralela. El SCL generado se almacena *dentro* del propio JSON. 2. **Procesamiento Semántico (`process.py`):** Lee el JSON enriquecido y, de forma iterativa, traduce cada instrucción LAD a su equivalente SCL, manejando dependencias, propagando el estado lógico (RLO), y agrupando lógica paralela. El SCL generado se almacena *dentro* del propio JSON.
3. **Generación de SCL Final (`generate_scl.py`):** Lee el JSON completamente procesado y ensambla el código SCL final en un archivo `.scl` formateado, incluyendo declaraciones de variables y el cuerpo del programa. 3. **Generación de SCL Final (`generate_scl.py`):** Lee el JSON completamente procesado y ensambla el código SCL final en un archivo `.scl` formateado, incluyendo declaraciones de variables y el cuerpo del programa.
### Directory structure
<working_directory>/
├── <PLC1_Name>/
│ ├── ProgramBlocks_XML/
│ │ └── ... (archivos XML de bloques)
│ ├── ProgramBlocks_SCL/
│ │ └── ... (archivos SCL de bloques)
│ ├── ProgramBlocks_CR/
│ │ └── ... (archivos XML de referencias cruzadas de bloques)
│ ├── PlcTags/
│ │ └── ... (archivos XML de tablas de tags)
│ ├── PlcTags_CR/
│ │ └── ... (archivos XML de referencias cruzadas de tablas de tags)
│ ├── PlcDataTypes_CR/
│ │ └── ... (archivos XML de referencias cruzadas de UDTs)
│ ├── SystemBlocks_CR/
│ │ └── ...
│ └── SoftwareUnits_CR/
│ └── ...
│ └── Documentation/
│ └── Source
│ └── ... (archivos md de bloques de programa)
│ └── JSON
│ └── ... (archivos JSON temporales)
│ └── xref_calls_tree.md
│ └── xref_db_usage_summary.md
│ └── xref_plc_tags_summary.md
│ └── full_project_representation.md
│ └── SAE196_c0.2_CAx_Export_Hardware_Tree.md
├── <PLC2_Name>/
│ ├── ProgramBlocks_XML/
│ │ └── ...
│ └── ...
└── ...
## 2. Etapas del Pipeline ## 2. Etapas del Pipeline
### Etapa 1: XML a JSON Enriquecido (`x1_to_json.py`) ### Etapa 1: XML a JSON Enriquecido (`x1_to_json.py`)

View File

@ -4,15 +4,15 @@
"model": "gpt-3.5-turbo" "model": "gpt-3.5-turbo"
}, },
"level2": { "level2": {
"scl_output_dir": "scl_output", "aggregated_filename": "full_project_representation.md",
"xref_output_dir": "xref_output",
"xref_source_subdir": "source",
"call_xref_filename": "xref_calls_tree.md", "call_xref_filename": "xref_calls_tree.md",
"db_usage_xref_filename": "xref_db_usage_summary.md", "db_usage_xref_filename": "xref_db_usage_summary.md",
"max_call_depth": "10",
"max_users_list": "20",
"plc_tag_xref_filename": "xref_plc_tags_summary.md", "plc_tag_xref_filename": "xref_plc_tags_summary.md",
"max_call_depth": 5, "scl_output_dir": "scl_output",
"max_users_list": 20, "xref_output_dir": "xref_output",
"aggregated_filename": "full_project_representation.md" "xref_source_subdir": "source"
}, },
"level3": {}, "level3": {},
"working_directory": "C:\\Trabajo\\SIDEL\\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\\Reporte\\IOExport" "working_directory": "C:\\Trabajo\\SIDEL\\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\\Reporte\\IOExport"

View File

@ -1,6 +1,6 @@
{ {
"x0_main.py": { "x0_main.py": {
"display_name": "Procesar Exportación XML", "display_name": "1: Procesar Exportación XML",
"short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL", "short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL",
"long_description": "Este script es el punto de entrada y orquestador principal para el proceso de conversión de archivos XML de Siemens TIA Portal (LAD/FUP) a código SCL y la generación de documentación relacionada.\n\n**Lógica Principal:**\n\n1. **Configuración:** Carga parámetros desde `ParamManagerScripts` (directorio de trabajo, nombres de carpetas de salida, etc.).\n2. **Logging:** Inicia un archivo `log.txt` para registrar detalladamente el progreso y los errores.\n3. **Descubrimiento:** Busca recursivamente todos los archivos `.xml` dentro del subdirectorio `PLC` del directorio de trabajo configurado.\n4. **Procesamiento Individual (Pasos x1-x3):**\n * Itera sobre cada archivo XML encontrado.\n * Implementa lógica para **saltar** pasos si el XML no ha cambiado y las salidas ya existen y están actualizadas.\n * Llama a funciones de `x1_to_json.py`, `x2_process.py`, y `x3_generate_scl.py` para convertir XML -> JSON intermedio -> JSON procesado -> archivo SCL/Markdown final.\n5. **Referencias Cruzadas (Paso x4):** Llama a una función de `x4_cross_reference.py` para generar análisis de llamadas, uso de DBs, etc., basándose en los archivos procesados.\n6. **Agregación (Paso x5):** Llama a una función de `x5_aggregate.py` para combinar las salidas SCL/Markdown y las referencias cruzadas en un único archivo Markdown resumen.\n7. **Resumen y Salida:** Registra un resumen final del proceso (éxitos, saltos, fallos) y finaliza con un código de estado (0 para éxito, 1 si hubo errores).\n", "long_description": "Este script es el punto de entrada y orquestador principal para el proceso de conversión de archivos XML de Siemens TIA Portal (LAD/FUP) a código SCL y la generación de documentación relacionada.\n\n**Lógica Principal:**\n\n1. **Configuración:** Carga parámetros desde `ParamManagerScripts` (directorio de trabajo, nombres de carpetas de salida, etc.).\n2. **Logging:** Inicia un archivo `log.txt` para registrar detalladamente el progreso y los errores.\n3. **Descubrimiento:** Busca recursivamente todos los archivos `.xml` dentro del subdirectorio `PLC` del directorio de trabajo configurado.\n4. **Procesamiento Individual (Pasos x1-x3):**\n * Itera sobre cada archivo XML encontrado.\n * Implementa lógica para **saltar** pasos si el XML no ha cambiado y las salidas ya existen y están actualizadas.\n * Llama a funciones de `x1_to_json.py`, `x2_process.py`, y `x3_generate_scl.py` para convertir XML -> JSON intermedio -> JSON procesado -> archivo SCL/Markdown final.\n5. **Referencias Cruzadas (Paso x4):** Llama a una función de `x4_cross_reference.py` para generar análisis de llamadas, uso de DBs, etc., basándose en los archivos procesados.\n6. **Agregación (Paso x5):** Llama a una función de `x5_aggregate.py` para combinar las salidas SCL/Markdown y las referencias cruzadas en un único archivo Markdown resumen.\n7. **Resumen y Salida:** Registra un resumen final del proceso (éxitos, saltos, fallos) y finaliza con un código de estado (0 para éxito, 1 si hubo errores).\n",
"hidden": false "hidden": false
@ -24,10 +24,10 @@
"hidden": true "hidden": true
}, },
"x4_cross_reference.py": { "x4_cross_reference.py": {
"display_name": "x4_cross_reference", "display_name": "4: Generar Cross References",
"short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL", "short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL",
"long_description": "", "long_description": "",
"hidden": true "hidden": false
}, },
"x5_aggregate.py": { "x5_aggregate.py": {
"display_name": "x5_aggregate", "display_name": "x5_aggregate",

View File

@ -14,7 +14,9 @@ import traceback
import glob import glob
import re import re
import urllib.parse import urllib.parse
import xml.etree.ElementTree as ET # <-- NUEVO: Para parsear XML
import shutil # <-- NUEVO: Para copiar archivos import shutil # <-- NUEVO: Para copiar archivos
from generators.generator_utils import format_variable_name
from collections import defaultdict from collections import defaultdict
script_root = os.path.dirname( script_root = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.dirname(__file__))) os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
@ -22,44 +24,8 @@ script_root = os.path.dirname(
sys.path.append(script_root) sys.path.append(script_root)
from backend.script_utils import load_configuration from backend.script_utils import load_configuration
# --- Importar format_variable_name (sin cambios) ---
try:
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
if parent_dir not in sys.path:
sys.path.insert(0, parent_dir)
from generators.generator_utils import format_variable_name
print("INFO: format_variable_name importado desde generators.generator_utils")
except ImportError:
print(
"ADVERTENCIA: No se pudo importar format_variable_name desde generators. Usando copia local."
)
def format_variable_name(name): # Fallback
if not name:
return "_INVALID_NAME_"
if name.startswith('"') and name.endswith('"'):
return name
prefix = "#" if name.startswith("#") else ""
if prefix:
name = name[1:]
if name and name[0].isdigit():
name = "_" + name
name = re.sub(r"[^a-zA-Z0-9_]", "_", name)
return prefix + name
# --- Constantes --- # --- Constantes ---
# SCL_OUTPUT_DIRNAME = "scl_output" # Se leerá de config
# XREF_SOURCE_SUBDIR = "source" # Se leerá de config
# CALL_XREF_FILENAME = "xref_calls_tree.md" # Se leerá de config
# DB_USAGE_XREF_FILENAME = "xref_db_usage_summary.md" # Se leerá de config
# PLC_TAG_XREF_FILENAME = "xref_plc_tags_summary.md" # Se leerá de config
# MAX_CALL_DEPTH = 5 # Se leerá de config
INDENT_STEP = " " INDENT_STEP = " "
# MAX_USERS_LIST = 20 # Se leerá de config
# --- Funciones de Análisis (find_calls_in_scl, find_db_tag_usage, find_plc_tag_usage sin cambios) --- # --- Funciones de Análisis (find_calls_in_scl, find_db_tag_usage, find_plc_tag_usage sin cambios) ---
# <-- MODIFICADO: Añadir instance_db_to_fb_map como parámetro --> # <-- MODIFICADO: Añadir instance_db_to_fb_map como parámetro -->
@ -376,7 +342,7 @@ def build_call_tree_recursive( # Añadido max_call_depth, xref_source_subdir
visited_in_path.add(current_node) visited_in_path.add(current_node)
if current_node in call_graph: if current_node in call_graph:
callees = sorted(call_graph[current_node].keys()) callees = sorted(call_graph[current_node])
for callee in callees: for callee in callees:
# Llamada recursiva # Llamada recursiva
build_call_tree_recursive( build_call_tree_recursive(
@ -505,6 +471,84 @@ def generate_plc_tag_summary_output(plc_tag_users, max_users_list): # Añadido m
output_lines.append("") output_lines.append("")
return output_lines return output_lines
# --- NUEVA FUNCION: Parseador de XML XRef ---
def parse_xref_xml_for_calls(xml_file_path):
"""
Parsea un archivo _XRef.xml de TIA Portal y extrae las relaciones de llamada (Caller -> Callee).
Se basa en la estructura descrita en xref_info.md.
Devuelve un diccionario: {caller_name: [callee_name1, callee_name2, ...]}
"""
calls = defaultdict(list)
try:
tree = ET.parse(xml_file_path)
root = tree.getroot()
# Determinar el namespace (puede variar, esto es un intento común)
# Si el namespace es diferente, habrá que ajustarlo aquí.
ns_match = re.match(r'\{([^}]+)\}', root.tag)
ns = {'ns': ns_match.group(1)} if ns_match else {}
ns_prefix = f"{{{ns['ns']}}}" if ns else ""
# Encuentra el SourceObject (el llamador en este archivo)
source_object = root.find(f'.//{ns_prefix}SourceObject')
if source_object is None:
print(f"Advertencia: No se encontró SourceObject en {xml_file_path}", file=sys.stderr)
return {} # Devuelve diccionario vacío si no hay SourceObject
caller_name_elem = source_object.find(f'{ns_prefix}Name')
caller_name = caller_name_elem.text if caller_name_elem is not None and caller_name_elem.text else f"UnknownCaller_{os.path.basename(xml_file_path)}"
# Itera sobre los objetos referenciados (potenciales llamados)
references = source_object.find(f'{ns_prefix}References')
if references is not None:
for ref_object in references.findall(f'{ns_prefix}ReferenceObject'):
ref_name_elem = ref_object.find(f'{ns_prefix}Name')
ref_name = ref_name_elem.text if ref_name_elem is not None and ref_name_elem.text else None
ref_type_name_elem = ref_object.find(f'{ns_prefix}TypeName')
ref_type_name = ref_type_name_elem.text if ref_type_name_elem is not None and ref_type_name_elem.text else ""
if not ref_name: continue # Saltar si el objeto referenciado no tiene nombre
# Itera sobre las localizaciones de la referencia
locations = ref_object.find(f'{ns_prefix}Locations')
if locations is not None:
for location in locations.findall(f'{ns_prefix}Location'):
# <-- NUEVO: Comprobar primero el ReferenceType -->
ref_type_elem = location.find(f'{ns_prefix}ReferenceType')
ref_type_text = ref_type_elem.text if ref_type_elem is not None else ""
# Solo procesar si el SourceObject 'Uses' el ReferenceObject en esta Location
if ref_type_text == 'Uses':
access_elem = location.find(f'{ns_prefix}Access')
access_type = access_elem.text if access_elem is not None and access_elem.text else ""
callee_name = None
if access_type == 'Call':
# Llamada directa a FC
callee_name = ref_name
elif access_type == 'InstanceDB':
# Llamada a FB via DB de Instancia
# Extraer nombre/número del FB desde TypeName (ej: "Instance DB of BlockName [FB123]")
match = re.search(r'Instance DB of\s+(.*?)\s+\[([A-Za-z]+[0-9]+)\]', ref_type_name)
if match:
# Preferir nombre simbólico si existe, si no, el número (FBxxx)
callee_name = match.group(1) if match.group(1) else match.group(2)
elif 'Instance DB of' in ref_type_name: # Fallback si regex falla
callee_name = ref_type_name.split('Instance DB of ')[-1].strip()
if callee_name and callee_name not in calls[caller_name]:
calls[caller_name].append(callee_name)
except ET.ParseError as e:
print(f"Error parseando XML {xml_file_path}: {e}", file=sys.stderr)
except FileNotFoundError:
print(f"Error: Archivo XML no encontrado {xml_file_path}", file=sys.stderr)
except Exception as e:
print(f"Error inesperado procesando XML {xml_file_path}: {e}", file=sys.stderr)
traceback.print_exc(file=sys.stderr)
return dict(calls) # Convertir de defaultdict a dict
# --- Función Principal (MODIFICADA para llamar a copy_and_prepare_source_files) --- # --- Función Principal (MODIFICADA para llamar a copy_and_prepare_source_files) ---
def generate_cross_references( def generate_cross_references(
@ -526,13 +570,21 @@ def generate_cross_references(
print(f"--- Iniciando Generación de Referencias Cruzadas y Fuentes MD (x4) ---") print(f"--- Iniciando Generación de Referencias Cruzadas y Fuentes MD (x4) ---")
print(f"Buscando archivos JSON procesados en: {project_root_dir}") print(f"Buscando archivos JSON procesados en: {project_root_dir}")
print(f"Directorio de salida XRef: {output_dir}") print(f"Directorio de salida XRef: {output_dir}")
print(f"Directorio fuente SCL/MD: {scl_output_dirname}") print(f"Directorio fuente SCL/MD (para análisis DB/Tag y copia): {scl_output_dirname}")
print(f"Subdirectorio fuentes MD para XRef: {xref_source_subdir}") print(f"Subdirectorio fuentes MD para XRef: {xref_source_subdir}")
output_dir_abs = os.path.abspath(output_dir) output_dir_abs = os.path.abspath(output_dir)
# <-- NUEVO: Crear directorio y preparar archivos fuente ANTES de generar XRefs --> # <-- NUEVO: Crear directorio y preparar archivos fuente ANTES de generar XRefs -->
# Pasar los nombres de directorios leídos de la config # Pasar los nombres de directorios leídos de la config
copy_and_prepare_source_files(project_root_dir, output_dir_abs, scl_output_dirname, xref_source_subdir) copy_and_prepare_source_files(project_root_dir, output_dir_abs, scl_output_dirname, xref_source_subdir)
# <-- NUEVO: Definir directorio donde buscar los XML de XRef -->
# <-- MODIFICADO: Buscar dentro del directorio del PLC actual (project_root_dir) -->
# xref_xml_dir = os.path.join(os.path.dirname(project_root_dir), "cross_ref", "PLC", "ProgramBlocks_CR") # Ruta anterior incorrecta
xref_xml_dir = os.path.join(project_root_dir, "ProgramBlocks_CR") # Ruta correcta: <working_dir>/<PLC_Name>/ProgramBlocks_CR/
print(f"Buscando archivos XML XRef en: {xref_xml_dir}")
# <-- FIN NUEVO --> # <-- FIN NUEVO -->
json_files = glob.glob( json_files = glob.glob(
os.path.join(project_root_dir, "**", "*_processed.json"), recursive=True os.path.join(project_root_dir, "**", "*_processed.json"), recursive=True
@ -542,7 +594,7 @@ def generate_cross_references(
return False return False
print(f"Archivos JSON encontrados: {len(json_files)}") print(f"Archivos JSON encontrados: {len(json_files)}")
# 1. Cargar datos (sin cambios) # 1. Cargar datos de JSON (sigue siendo útil para metadatos, enlaces, y análisis DB/Tag)
block_data = {} block_data = {}
all_db_names = set() all_db_names = set()
plc_tag_names = set() plc_tag_names = set()
@ -591,11 +643,26 @@ def generate_cross_references(
f"Datos cargados para {len(block_data)} bloques ({len(plc_tag_names)} PLC Tags globales)." f"Datos cargados para {len(block_data)} bloques ({len(plc_tag_names)} PLC Tags globales)."
) )
# 2. Analizar datos (sin cambios) # 2. Construir Grafo de Llamadas desde XML XRef
call_graph = defaultdict(lambda: defaultdict(int)) print("Construyendo grafo de llamadas desde archivos XML XRef...")
call_graph = defaultdict(list) # Usamos lista, no necesitamos contar llamadas múltiples aquí
xref_xml_files = glob.glob(os.path.join(xref_xml_dir, "*_XRef.xml"))
if not xref_xml_files:
print(f"ADVERTENCIA: No se encontraron archivos '*_XRef.xml' en {xref_xml_dir}. El árbol de llamadas estará vacío.", file=sys.stderr)
else:
print(f"Archivos XML XRef encontrados: {len(xref_xml_files)}")
for xml_file in xref_xml_files:
file_calls = parse_xref_xml_for_calls(xml_file)
for caller, callees in file_calls.items():
if caller not in call_graph:
call_graph[caller] = []
for callee in callees:
if callee not in call_graph[caller]: # Evitar duplicados si un bloque llama varias veces al mismo
call_graph[caller].append(callee)
# 3. Analizar uso de DBs y PLC Tags desde SCL (esta parte no cambia)
db_users = defaultdict(set) db_users = defaultdict(set)
plc_tag_users = defaultdict(set) plc_tag_users = defaultdict(set)
print("Analizando llamadas y uso de DBs/PLC Tags...")
for block_name, block_entry in block_data.items(): for block_name, block_entry in block_data.items():
data = block_entry["data"] data = block_entry["data"]
block_type = data.get("block_type") block_type = data.get("block_type")
@ -603,7 +670,7 @@ def generate_cross_references(
continue continue
caller_name = block_name caller_name = block_name
# <-- MODIFICADO: Leer el archivo SCL completo en lugar de reconstruir desde JSON --> # Leer el archivo SCL para análisis de DB/Tags
scl_filename = format_variable_name(caller_name) + ".scl" scl_filename = format_variable_name(caller_name) + ".scl"
# Construir la ruta al archivo SCL dentro del directorio scl_output # Construir la ruta al archivo SCL dentro del directorio scl_output
scl_filepath = os.path.join(project_root_dir, scl_output_dirname, scl_filename) scl_filepath = os.path.join(project_root_dir, scl_output_dirname, scl_filename)
@ -618,13 +685,8 @@ def generate_cross_references(
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) 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: if full_scl_content:
# <-- MODIFICADO: Pasar el mapa a find_calls_in_scl --> # Ya no usamos find_calls_in_scl para el grafo principal
calls_found = find_calls_in_scl(full_scl_content, block_data, instance_db_to_fb_map) # Analizar uso de DBs
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(full_scl_content) db_usage_found = find_db_tag_usage(full_scl_content)
for db_tag, access_counts in db_usage_found.items(): for db_tag, access_counts in db_usage_found.items():
db_name_part = db_tag.split(".")[0].strip('"') # Limpiar comillas db_name_part = db_tag.split(".")[0].strip('"') # Limpiar comillas
@ -633,10 +695,11 @@ def generate_cross_references(
): ):
db_users[db_name_part].add(caller_name) db_users[db_name_part].add(caller_name)
plc_usage_found = find_plc_tag_usage(full_scl_content, plc_tag_names) plc_usage_found = find_plc_tag_usage(full_scl_content, plc_tag_names)
# Analizar uso de PLC Tags
for plc_tag, access_counts in plc_usage_found.items(): for plc_tag, access_counts in plc_usage_found.items():
plc_tag_users[plc_tag].add(caller_name) plc_tag_users[plc_tag].add(caller_name)
# 3. Generar Archivos de Salida XRef (MODIFICADO para usar la nueva función de árbol) # 4. Generar Archivos de Salida XRef
os.makedirs(output_dir_abs, exist_ok=True) os.makedirs(output_dir_abs, exist_ok=True)
call_xref_path = os.path.join(output_dir_abs, call_xref_filename) # Usar parámetro call_xref_path = os.path.join(output_dir_abs, call_xref_filename) # Usar parámetro
db_usage_xref_path = os.path.join(output_dir_abs, db_usage_xref_filename) # Usar parámetro db_usage_xref_path = os.path.join(output_dir_abs, db_usage_xref_filename) # Usar parámetro
@ -645,7 +708,7 @@ def generate_cross_references(
print(f"Generando ÁRBOL XRef de llamadas en: {call_xref_path}") print(f"Generando ÁRBOL XRef de llamadas en: {call_xref_path}")
try: try:
# <-- MODIFICADO: Llamar a la nueva función sin project_root_dir --> # <-- MODIFICADO: Llamar a la nueva función sin project_root_dir -->
call_tree_lines = generate_call_tree_output( # Pasar parámetros call_tree_lines = generate_call_tree_output( # Pasar parámetros (el grafo ya está construido desde XML)
call_graph, block_data, output_dir_abs, max_call_depth, xref_source_subdir # <-- Pasar max_call_depth 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: with open(call_xref_path, "w", encoding="utf-8") as f:
@ -705,8 +768,17 @@ if __name__ == "__main__":
cfg_call_xref_filename = group_config.get("call_xref_filename", "xref_calls_tree.md") cfg_call_xref_filename = group_config.get("call_xref_filename", "xref_calls_tree.md")
cfg_db_usage_xref_filename = group_config.get("db_usage_xref_filename", "xref_db_usage_summary.md") cfg_db_usage_xref_filename = group_config.get("db_usage_xref_filename", "xref_db_usage_summary.md")
cfg_plc_tag_xref_filename = group_config.get("plc_tag_xref_filename", "xref_plc_tags_summary.md") cfg_plc_tag_xref_filename = group_config.get("plc_tag_xref_filename", "xref_plc_tags_summary.md")
cfg_max_call_depth = group_config.get("max_call_depth", 5) # <-- MODIFICADO: Convertir a int y manejar posible error -->
cfg_max_users_list = group_config.get("max_users_list", 20) try:
cfg_max_call_depth = int(group_config.get("max_call_depth", 5))
except (ValueError, TypeError):
print("Advertencia: Valor inválido para 'max_call_depth' en la configuración. Usando valor por defecto 5.", file=sys.stderr)
cfg_max_call_depth = 5
try:
cfg_max_users_list = int(group_config.get("max_users_list", 20))
except (ValueError, TypeError):
print("Advertencia: Valor inválido para 'max_users_list' en la configuración. Usando valor por defecto 20.", file=sys.stderr)
cfg_max_users_list = 20
# Calcular rutas # Calcular rutas
if not working_directory: if not working_directory:
@ -716,7 +788,10 @@ if __name__ == "__main__":
# Calcular rutas basadas en la configuración # Calcular rutas basadas en la configuración
plc_subdir_name = "PLC" # Asumir nombre estándar plc_subdir_name = "PLC" # Asumir nombre estándar
project_root_dir = os.path.join(working_directory, plc_subdir_name) project_root_dir = os.path.join(working_directory, plc_subdir_name)
xref_output_dir = os.path.join(project_root_dir, cfg_xref_output_dirname) # Usar nombre de dir leído # El directorio de salida XRef ahora estará probablemente al mismo nivel que 'PLC'
# o dentro de él, según la configuración. Usemos la configuración directamente.
# xref_output_dir = os.path.join(working_directory, cfg_xref_output_dirname) # <-- Opción 1: Al nivel de working_dir
xref_output_dir = os.path.join(project_root_dir, cfg_xref_output_dirname) # <-- Opción 2: Dentro de PLC (como estaba antes) - Mantenemos esta por consistencia con el código original
if not os.path.isdir(project_root_dir): if not os.path.isdir(project_root_dir):
print(f"Error: Directorio del proyecto '{project_root_dir}' no encontrado.", file=sys.stderr) print(f"Error: Directorio del proyecto '{project_root_dir}' no encontrado.", file=sys.stderr)

View File

@ -1,680 +1,21 @@
[12:09:26] Iniciando ejecución de x4.py en C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport... [16:58:28] Iniciando ejecución de x1.py en C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email...
[12:09:27] --- TIA Portal Cross-Reference Exporter --- [16:58:29] Working directory: C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email
[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 [16:58:29] Input directory: C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email
[12:09:29] Using Export Directory: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref [16:58:29] Output directory: C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/10 - E5.007095 - Modifica O&U - SAE463
[12:09:29] Connecting to TIA Portal V18.0... [16:58:29] Cronologia file: C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/10 - E5.007095 - Modifica O&U - SAE463\cronologia.md
[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. [16:58:29] Attachments directory: C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email\adjuntos
[12:09:30] 2025-05-05 12:09:30,279 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Global OpenPortal - With user interface [16:58:29] Beautify rules file: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\EmailCrono\config\beautify_rules.json
[12:09:48] Connected to TIA Portal. [16:58:29] Found 1 .eml files
[12:09:48] 2025-05-05 12:09:48,418 [1] INFO Siemens.TiaPortal.OpennessApi18.Implementations.Portal GetProcessId - Process id: 24284 [16:58:29] Loaded 0 existing messages
[12:09:48] Portal Process ID: 24284 [16:58:29] Processing C:\Trabajo\SIDEL\10 - E5.007095 - Modifica O&U - SAE463\Reporte\Email\R_ {EXT} E5.006894 - Modifica O&U - SAE463 New Analyzer.eml
[12:09:48] Opening project: SAE196_c0.2.ap18... [16:58:29] Aplicando reglas de prioridad 1
[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 [16:58:29] Aplicando reglas de prioridad 2
[12:10:02] Project opened successfully. [16:58:29] Aplicando reglas de prioridad 3
[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 [16:58:29] Aplicando reglas de prioridad 4
[12:10:08] Found 1 PLC(s). Starting cross-reference export process... [16:58:29] Estadísticas de procesamiento:
[12:10:08] --- Processing PLC: PLC --- [16:58:29] - Total mensajes encontrados: 1
[12:10:08] [PLC: PLC] Exporting Program Block Cross-References... [16:58:29] - Mensajes únicos añadidos: 1
[12:10:08] Target: C:\Trabajo\SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\Reporte\IOExport\cross_ref\PLC\ProgramBlocks_CR [16:58:29] - Mensajes duplicados ignorados: 0
[12:10:08] Found 380 program blocks. [16:58:29] Writing 1 messages to C:/Users/migue/OneDrive/Miguel/Obsidean/Trabajo/VM/04-SIDEL/10 - E5.007095 - Modifica O&U - SAE463\cronologia.md
[12:10:09] Processing block: _CYCL_EXC... [16:58:29] Ejecución de x1.py finalizada (success). Duración: 0:00:00.434600.
[12:10:09] Exporting cross-references for _CYCL_EXC... [16:58:29] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\EmailCrono\log_x1.txt
[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