{"level": "INFO", "message": "PLC Generation Workflow started", "timestamp": "2025-08-22T21:04:01.983675", "module": "__main__", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "excel_file": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/PLC Data Generator/data/CNO8_MCM05_fixed.xlsx", "project_name": "CNO8_MCM05"} {"level": "INFO", "message": "Starting data processing step", "timestamp": "2025-08-22T21:04:01.984056", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} === Step 1: PLC Data Generator stdout === Loading IO path mappings... Loaded IO path mappings: APF: 11 rows M12DR: 16 rows Hub: 16 rows SorterHub: 16 rows SIO: 16 rows IB16: 16 rows OB16E: 16 rows IB16S: 16 rows Available sheets: ['NETWORK_PLC', 'DESC_PLC'] Found DESC sheet: DESC_PLC Found NETWORK sheet: NETWORK_PLC DESC columns: ['TAGNAME', 'TERM', 'DESCA', 'DESCB'] NETWORK columns: ['DPM', 'DPM_IP', 'Name', 'PartNumber', 'IP'] NOTE: Ignored 37 rows from DESC sheet with an empty TAGNAME. Classifying signals and adding IO paths... Signal classification results: SPARE: 521 I: 418 IOLink: 158 O: 39 Device type distribution: M12DR: 544 Hub: 544 IB16: 16 OB16E: 16 IB16S: 16 IO Path mapping results: Successful mappings: 1136/1136 (100.0%) Found 3 TAGNAMEs present in DESC but not in NETWORK_PLC. Adding unique DPM names not present in DESC or NETWORK_PLC.Name: ['DPM01_VS01B', 'DPM01_VS01C'] ================================================================================ WARNING: The following issues were found but processing will continue: ================================================================================ - TAGNAME 'SLOT5_IB16' from DESC sheet not found in NETWORK_PLC sheet. - TAGNAME 'SLOT6_OB16E' from DESC sheet not found in NETWORK_PLC sheet. - TAGNAME 'SLOT7_IB16S' from DESC sheet not found in NETWORK_PLC sheet. ================================================================================ Continuing with processing... Normalizing TAGNAME, DESC, and IO_PATH columns for VFDs only in the final output... Final result has 1141 rows Sample of merged data: TAGNAME TERM DESCA ... SIGNAL DEVICE_TYPE IO_PATH 0 SLOT5_IB16 I0 MCM05 ... I IB16 Local:5:I.Data.0 1 SLOT5_IB16 I1 MCM05 ... I IB16 Local:5:I.Data.1 2 SLOT5_IB16 I10 SPARE ... SPARE IB16 Local:5:I.Data.10 3 SLOT5_IB16 I11 SPARE ... SPARE IB16 Local:5:I.Data.11 4 SLOT5_IB16 I12 SPARE ... SPARE IB16 Local:5:I.Data.12 5 SLOT5_IB16 I13 SPARE ... SPARE IB16 Local:5:I.Data.13 6 SLOT5_IB16 I14 SPARE ... SPARE IB16 Local:5:I.Data.14 7 SLOT5_IB16 I15 SPARE ... SPARE IB16 Local:5:I.Data.15 8 SLOT5_IB16 I2 MCM05 ... I IB16 Local:5:I.Data.2 9 SLOT5_IB16 I3 MCM05 ... I IB16 Local:5:I.Data.3 [10 rows x 11 columns] New Excel file created: MCM05_DESC_IP_MERGED.xlsx The file contains all original sheets plus the new 'DESC_IP' sheet with merged data. Reading input file: MCM05_DESC_IP_MERGED.xlsx Removed 158 IOLink rows (including beacons, FIOH channels, and all other IOLink entries) Added 283 rows for beacon lights Removed 5 blank name/description rows Saving output file: MCM05_OUTPUT.csv Processing complete! Created standard output file: DESC_IP_MERGED.xlsx === Step 1: PLC Data Generator stderr === {"level": "INFO", "message": "Data processing completed successfully", "timestamp": "2025-08-22T21:04:05.420911", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Starting routine generation step", "timestamp": "2025-08-22T21:04:05.421166", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Logging to file: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/logs/workflow_CNO8_MCM05_20250822_210401.log", "timestamp": "2025-08-22T21:04:07.209648", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "=== Generating All PLC Artifacts ===", "timestamp": "2025-08-22T21:04:07.211294", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Generating SafetyProgram L5X...", "timestamp": "2025-08-22T21:04:07.211502", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "WARNING", "message": "LimitedSafetyProgramGenerator is deprecated; using ModernSafetyProgramGenerator", "timestamp": "2025-08-22T21:04:07.222286", "module": "src.container", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Starting ModernSafetyProgramGenerator generation", "timestamp": "2025-08-22T21:04:07.222822", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Creating SafetyProgram XML structure", "timestamp": "2025-08-22T21:04:07.223012", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Registered plugin: main_routine (core)", "timestamp": "2025-08-22T21:04:07.233953", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: apf (device)", "timestamp": "2025-08-22T21:04:07.240179", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: cb_monitor (device)", "timestamp": "2025-08-22T21:04:07.244512", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: d2c_chute (device)", "timestamp": "2025-08-22T21:04:07.249251", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: dpm (device)", "timestamp": "2025-08-22T21:04:07.252794", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: encoder (device)", "timestamp": "2025-08-22T21:04:07.256401", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: estops (safety)", "timestamp": "2025-08-22T21:04:07.263519", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: estop_check (safety)", "timestamp": "2025-08-22T21:04:07.267670", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: extendo (device)", "timestamp": "2025-08-22T21:04:07.271040", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: fioh (device)", "timestamp": "2025-08-22T21:04:07.275053", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: fiom (device)", "timestamp": "2025-08-22T21:04:07.278259", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: flow_ctrl (device)", "timestamp": "2025-08-22T21:04:07.281876", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: fpe (device)", "timestamp": "2025-08-22T21:04:07.285048", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: inputs (safety)", "timestamp": "2025-08-22T21:04:07.288535", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: jpe (device)", "timestamp": "2025-08-22T21:04:07.292330", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: mcm (core)", "timestamp": "2025-08-22T21:04:07.296118", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: outputs (safety)", "timestamp": "2025-08-22T21:04:07.299500", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: pb_chute (device)", "timestamp": "2025-08-22T21:04:07.303012", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: pmm (device)", "timestamp": "2025-08-22T21:04:07.306865", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: rack (core)", "timestamp": "2025-08-22T21:04:07.310680", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: resets (safety)", "timestamp": "2025-08-22T21:04:07.314950", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: safety_tag_map (core)", "timestamp": "2025-08-22T21:04:07.318605", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: speed_ctrl (device)", "timestamp": "2025-08-22T21:04:07.322422", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: station_epc (safety)", "timestamp": "2025-08-22T21:04:07.327246", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: station_jr_chute (device)", "timestamp": "2025-08-22T21:04:07.331096", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: station_jr_pb (device)", "timestamp": "2025-08-22T21:04:07.334753", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: station_ss_pb (device)", "timestamp": "2025-08-22T21:04:07.338388", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: station_s_pb (device)", "timestamp": "2025-08-22T21:04:07.342572", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: taching_belts (device)", "timestamp": "2025-08-22T21:04:07.347048", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "DEBUG", "message": "Registered plugin: zones (safety)", "timestamp": "2025-08-22T21:04:07.351331", "module": "src.plugin_system", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "plugin_discovery"} {"level": "INFO", "message": "Generating safety routines...", "timestamp": "2025-08-22T21:04:07.351583", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Plugin inputs cannot generate with current data", "timestamp": "2025-08-22T21:04:08.147996", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Plugin outputs cannot generate with current data", "timestamp": "2025-08-22T21:04:08.151678", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Plugin resets cannot generate with current data", "timestamp": "2025-08-22T21:04:08.151975", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Zones: subsystem key", "timestamp": "2025-08-22T21:04:08.153763", "module": "src.data_loader", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "subsystem": "DEFAULT", "found": false} {"level": "DEBUG", "message": "Zones: heuristic best match", "timestamp": "2025-08-22T21:04:08.153967", "module": "src.data_loader", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "best_key": null, "score": -1} {"level": "DEBUG", "message": "Zones: using DEFAULT group", "timestamp": "2025-08-22T21:04:08.154140", "module": "src.data_loader", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "default_count": 1} {"level": "DEBUG", "message": "Zones: loaded", "timestamp": "2025-08-22T21:04:08.154690", "module": "src.data_loader", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "rows": 1} {"level": "DEBUG", "message": "Generating routine: zones", "timestamp": "2025-08-22T21:04:08.154917", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Available DCS controllers: {}", "timestamp": "2025-08-22T21:04:08.155395", "module": "src.routines.zones", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Successfully generated routine: zones", "timestamp": "2025-08-22T21:04:08.155676", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Plugin estops cannot generate with current data", "timestamp": "2025-08-22T21:04:08.155964", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Safety routine generation results: {'inputs': False, 'outputs': False, 'resets': False, 'zones': True, 'estops': False}", "timestamp": "2025-08-22T21:04:08.156173", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Added safety tag map with 1 tags", "timestamp": "2025-08-22T21:04:08.162717", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Routines created (2): MainRoutine, R030_ZONES", "timestamp": "2025-08-22T21:04:08.162915", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "- R030_ZONES: 1 rungs | example: XIC(MCM_EPB_DCS_CTRL.O1)OTE(EStop_MCM_OK);", "timestamp": "2025-08-22T21:04:08.163098", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "- MainRoutine: 1 rungs | example: [JSR(R010_INPUTS,0) ,JSR(R011_OUTPUTS,0) ,JSR(R012_RESETS,0) ,JSR(R020_ESTOPS,0) ,JSR(R030_ZONES,0) ];", "timestamp": "2025-08-22T21:04:08.163271", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "Successfully completed ModernSafetyProgramGenerator generation", "timestamp": "2025-08-22T21:04:08.163452", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Written ModernSafetyProgramGenerator to SafetyProgram_Generated.L5X", "timestamp": "2025-08-22T21:04:08.165305", "module": "ModernSafetyProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "[SUCCESS] SafetyProgram written to SafetyProgram_Generated.L5X", "timestamp": "2025-08-22T21:04:08.165572", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Generating MainProgram L5X...", "timestamp": "2025-08-22T21:04:08.165769", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "WARNING", "message": "LimitedMainProgramGenerator is deprecated; using ModernMainProgramGenerator", "timestamp": "2025-08-22T21:04:08.165949", "module": "src.container", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Starting ModernMainProgramGenerator generation", "timestamp": "2025-08-22T21:04:08.166128", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Creating MainProgram XML structure", "timestamp": "2025-08-22T21:04:08.166292", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Adding controller tags...", "timestamp": "2025-08-22T21:04:08.166472", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Zones: subsystem key", "timestamp": "2025-08-22T21:04:08.262934", "module": "src.data_loader", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "subsystem": "DEFAULT", "found": false} {"level": "DEBUG", "message": "Zones: heuristic best match", "timestamp": "2025-08-22T21:04:08.263116", "module": "src.data_loader", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "best_key": null, "score": -1} {"level": "DEBUG", "message": "Zones: using DEFAULT group", "timestamp": "2025-08-22T21:04:08.263238", "module": "src.data_loader", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "default_count": 1} {"level": "DEBUG", "message": "Zones: loaded", "timestamp": "2025-08-22T21:04:08.263640", "module": "src.data_loader", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "rows": 1} {"level": "INFO", "message": "Tags created: total=15 | standard=1 safety=3 dcs=1 modules=2", "timestamp": "2025-08-22T21:04:08.310450", "module": "src.writers.xml_tag_writer", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "Added 15 controller tags", "timestamp": "2025-08-22T21:04:08.310781", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Generating main program routines...", "timestamp": "2025-08-22T21:04:08.310991", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Generating routine: mcm", "timestamp": "2025-08-22T21:04:08.311167", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Successfully generated routine: mcm", "timestamp": "2025-08-22T21:04:08.311335", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Generating routine: rack", "timestamp": "2025-08-22T21:04:08.311518", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Successfully generated routine: rack", "timestamp": "2025-08-22T21:04:08.311705", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Generating routine: dpm", "timestamp": "2025-08-22T21:04:08.311891", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Successfully generated routine: dpm", "timestamp": "2025-08-22T21:04:08.313021", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Plugin apf cannot generate with current data", "timestamp": "2025-08-22T21:04:08.313668", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Plugin estop_check cannot generate with current data", "timestamp": "2025-08-22T21:04:08.313891", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Generating routine: safety_tag_map", "timestamp": "2025-08-22T21:04:08.314079", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Safety tag map: RST data has 1 rows", "timestamp": "2025-08-22T21:04:08.314262", "module": "src.routines.safety_tag_map", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Added safety tag mapping: MCM05 -> Local:5:I.Data.0", "timestamp": "2025-08-22T21:04:08.314505", "module": "src.routines.safety_tag_map", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Safety tag map: Generating 1 rungs", "timestamp": "2025-08-22T21:04:08.314674", "module": "src.routines.safety_tag_map", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Generated rung 1: XIC(Local:5:I.Data.0)OTE(MCM05);", "timestamp": "2025-08-22T21:04:08.314832", "module": "src.routines.safety_tag_map", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Safety tag map: Generated 1 total rungs", "timestamp": "2025-08-22T21:04:08.314991", "module": "src.routines.safety_tag_map", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Successfully generated routine: safety_tag_map", "timestamp": "2025-08-22T21:04:08.315197", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Plugin taching_belts cannot generate with current data", "timestamp": "2025-08-22T21:04:08.315719", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Generating routine: main_routine", "timestamp": "2025-08-22T21:04:08.315915", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Generating MainRoutine with JSR calls", "timestamp": "2025-08-22T21:04:08.316083", "module": "src.routines.main_routine_plugin.MainRoutinePlugin", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Successfully generated MainRoutine", "timestamp": "2025-08-22T21:04:08.316235", "module": "src.routines.main_routine_plugin.MainRoutinePlugin", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Successfully generated routine: main_routine", "timestamp": "2025-08-22T21:04:08.316386", "module": "src.plugin_system", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Main routine generation results: {'mcm': True, 'rack': True, 'dpm': True, 'apf': False, 'estop_check': False, 'safety_tag_map': True, 'taching_belts': False, 'main_routine': True}", "timestamp": "2025-08-22T21:04:08.316546", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Routines created (5): MainRoutine, R010_MCM, R011_RACK, R020_DPM, R130_SAFETY_TAG_MAP", "timestamp": "2025-08-22T21:04:08.316708", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "- R010_MCM: 2 rungs | example: NOP();", "timestamp": "2025-08-22T21:04:08.316863", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "- R011_RACK: 2 rungs | example: NOP();", "timestamp": "2025-08-22T21:04:08.317017", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "- R020_DPM: 3 rungs | example: NOP();", "timestamp": "2025-08-22T21:04:08.317172", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "- R130_SAFETY_TAG_MAP: 2 rungs | example: XIC(Local:5:I.Data.0)OTE(MCM_S_PB);", "timestamp": "2025-08-22T21:04:08.317375", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "- MainRoutine: 1 rungs | example: [JSR(R010_MCM,0) ,JSR(R011_RACK,0) ,JSR(R020_DPM,0) ,JSR(R130_SAFETY_TAG_MAP,0) ];", "timestamp": "2025-08-22T21:04:08.317557", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "stage": "summary"} {"level": "INFO", "message": "Successfully completed ModernMainProgramGenerator generation", "timestamp": "2025-08-22T21:04:08.317857", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Written ModernMainProgramGenerator to MainProgram_Generated.L5X", "timestamp": "2025-08-22T21:04:08.320002", "module": "ModernMainProgramGenerator", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "[SUCCESS] MainProgram written to MainProgram_Generated.L5X", "timestamp": "2025-08-22T21:04:08.320174", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "Generating safety tag mapping...", "timestamp": "2025-08-22T21:04:08.320337", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Creating MappingWriter wrapper", "timestamp": "2025-08-22T21:04:08.320502", "module": "src.container", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "DEBUG", "message": "Creating DataLoader instance", "timestamp": "2025-08-22T21:04:08.320664", "module": "src.container", "file": "logging_config.py", "line": 126, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py", "excel_file": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/DESC_IP_MERGED.xlsx"} {"level": "INFO", "message": "[SUCCESS] Safety tag mapping written to SafetyTagMapping.txt", "timestamp": "2025-08-22T21:04:08.414377", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": " - Safety tags: 1", "timestamp": "2025-08-22T21:04:08.414591", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} {"level": "INFO", "message": "=== All artifacts generated successfully! ===", "timestamp": "2025-08-22T21:04:08.415111", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} === Step 2: Routines Generator stdout === Created safety tag mapping file: SafetyTagMapping.txt === Step 2: Routines Generator stderr === [21:04:07] [INFO] [logging_config.py:128:_log_with_context] Logging to file: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/logs/workflow_CNO8_MCM05_20250822_210401.log [21:04:07] [INFO] [logging_config.py:128:_log_with_context] === Generating All PLC Artifacts === [21:04:07] [INFO] [logging_config.py:128:_log_with_context] Generating SafetyProgram L5X... [21:04:07] [WARNING] [logging_config.py:128:_log_with_context] LimitedSafetyProgramGenerator is deprecated; using ModernSafetyProgramGenerator [21:04:07] [INFO] [logging_config.py:128:_log_with_context] Starting ModernSafetyProgramGenerator generation [21:04:07] [DEBUG] [logging_config.py:128:_log_with_context] Creating SafetyProgram XML structure [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: main_routine (core) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: apf (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: cb_monitor (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: d2c_chute (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: dpm (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: encoder (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: estops (safety) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: estop_check (safety) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: extendo (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: fioh (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: fiom (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: flow_ctrl (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: fpe (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: inputs (safety) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: jpe (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: mcm (core) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: outputs (safety) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: pb_chute (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: pmm (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: rack (core) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: resets (safety) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: safety_tag_map (core) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: speed_ctrl (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: station_epc (safety) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: station_jr_chute (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: station_jr_pb (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: station_ss_pb (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: station_s_pb (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: taching_belts (device) [21:04:07] [DEBUG] [logging_config.py:126:_log_with_context] Registered plugin: zones (safety) [21:04:07] [INFO] [logging_config.py:128:_log_with_context] Generating safety routines... [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Plugin inputs cannot generate with current data [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Plugin outputs cannot generate with current data [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Plugin resets cannot generate with current data [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Zones: subsystem key [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Zones: heuristic best match [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Zones: using DEFAULT group [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Zones: loaded [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Generating routine: zones [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Available DCS controllers: {} [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully generated routine: zones [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Plugin estops cannot generate with current data [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Safety routine generation results: {'inputs': False, 'outputs': False, 'resets': False, 'zones': True, 'estops': False} [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Added safety tag map with 1 tags [21:04:08] [INFO] [logging_config.py:126:_log_with_context] Routines created (2): MainRoutine, R030_ZONES [21:04:08] [INFO] [logging_config.py:126:_log_with_context] - R030_ZONES: 1 rungs | example: XIC(MCM_EPB_DCS_CTRL.O1)OTE(EStop_MCM_OK); [21:04:08] [INFO] [logging_config.py:126:_log_with_context] - MainRoutine: 1 rungs | example: [JSR(R010_INPUTS,0) ,JSR(R011_OUTPUTS,0) ,JSR(R012_RESETS,0) ,JSR(R020_ESTOPS,0) ,JSR(R030_ZONES,0) ]; [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully completed ModernSafetyProgramGenerator generation [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Written ModernSafetyProgramGenerator to SafetyProgram_Generated.L5X [21:04:08] [INFO] [logging_config.py:128:_log_with_context] [SUCCESS] SafetyProgram written to SafetyProgram_Generated.L5X [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Generating MainProgram L5X... [21:04:08] [WARNING] [logging_config.py:128:_log_with_context] LimitedMainProgramGenerator is deprecated; using ModernMainProgramGenerator [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Starting ModernMainProgramGenerator generation [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Creating MainProgram XML structure [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Adding controller tags... [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Zones: subsystem key [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Zones: heuristic best match [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Zones: using DEFAULT group [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Zones: loaded [21:04:08] [INFO] [logging_config.py:126:_log_with_context] Tags created: total=15 | standard=1 safety=3 dcs=1 modules=2 [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Added 15 controller tags [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Generating main program routines... [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Generating routine: mcm [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully generated routine: mcm [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Generating routine: rack [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully generated routine: rack [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Generating routine: dpm [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully generated routine: dpm [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Plugin apf cannot generate with current data [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Plugin estop_check cannot generate with current data [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Generating routine: safety_tag_map [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Safety tag map: RST data has 1 rows [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Added safety tag mapping: MCM05 -> Local:5:I.Data.0 [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Safety tag map: Generating 1 rungs [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Generated rung 1: XIC(Local:5:I.Data.0)OTE(MCM05); [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Safety tag map: Generated 1 total rungs [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully generated routine: safety_tag_map [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Plugin taching_belts cannot generate with current data [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Generating routine: main_routine [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Generating MainRoutine with JSR calls [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully generated MainRoutine [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully generated routine: main_routine [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Main routine generation results: {'mcm': True, 'rack': True, 'dpm': True, 'apf': False, 'estop_check': False, 'safety_tag_map': True, 'taching_belts': False, 'main_routine': True} [21:04:08] [INFO] [logging_config.py:126:_log_with_context] Routines created (5): MainRoutine, R010_MCM, R011_RACK, R020_DPM, R130_SAFETY_TAG_MAP [21:04:08] [INFO] [logging_config.py:126:_log_with_context] - R010_MCM: 2 rungs | example: NOP(); [21:04:08] [INFO] [logging_config.py:126:_log_with_context] - R011_RACK: 2 rungs | example: NOP(); [21:04:08] [INFO] [logging_config.py:126:_log_with_context] - R020_DPM: 3 rungs | example: NOP(); [21:04:08] [INFO] [logging_config.py:126:_log_with_context] - R130_SAFETY_TAG_MAP: 2 rungs | example: XIC(Local:5:I.Data.0)OTE(MCM_S_PB); [21:04:08] [INFO] [logging_config.py:126:_log_with_context] - MainRoutine: 1 rungs | example: [JSR(R010_MCM,0) ,JSR(R011_RACK,0) ,JSR(R020_DPM,0) ,JSR(R130_SAFETY_TAG_MAP,0) ]; [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Successfully completed ModernMainProgramGenerator generation [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Written ModernMainProgramGenerator to MainProgram_Generated.L5X [21:04:08] [INFO] [logging_config.py:128:_log_with_context] [SUCCESS] MainProgram written to MainProgram_Generated.L5X [21:04:08] [INFO] [logging_config.py:128:_log_with_context] Generating safety tag mapping... [21:04:08] [DEBUG] [logging_config.py:128:_log_with_context] Creating MappingWriter wrapper [21:04:08] [DEBUG] [logging_config.py:126:_log_with_context] Creating DataLoader instance [21:04:08] [INFO] [logging_config.py:128:_log_with_context] [SUCCESS] Safety tag mapping written to SafetyTagMapping.txt [21:04:08] [INFO] [logging_config.py:128:_log_with_context] - Safety tags: 1 [21:04:08] [INFO] [logging_config.py:128:_log_with_context] === All artifacts generated successfully! === {"level": "INFO", "message": "Routine generation completed successfully", "timestamp": "2025-08-22T21:04:08.478350", "module": "__main__", "file": "logging_config.py", "line": 128, "function": "_log_with_context", "pathname": "/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/Routines Generator/src/logging_config.py"} === Step 3: IO Tree Generator stdout === Enhanced MCM Generator - Project: CNO8_MCM05 - Excel: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/PLC Data Generator/DESC_IP_MERGED.xlsx - Boilerplate: CNO8_boilerplate - Mode: Single file -------------------------------------------------- Created 34 FIOH modules based on TERM analysis Found 37 IOLM modules Found 124 Beacon modules Found 2 DPM modules Created 37 IOLM modules with boilerplate selection: VS01B_FIOM1 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM10 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM11 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM12 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM13 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM14 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM15 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM16 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM17 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM18 (FIO D2CMaster): Using variant boilerplate D2CMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/D2CMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/D2CMaster_Module.L5X VS01B_FIOM19 (FIO D2CMaster): Using variant boilerplate D2CMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/D2CMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/D2CMaster_Module.L5X VS01B_FIOM2 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM3 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM4 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM5 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM6 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM7 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM8 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOM9 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM1 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM10 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM11 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM12 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM13 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM14 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM15 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM16 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM17 (FIO FIOM2_Master): Using variant boilerplate FIOM2_Master_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/FIOM2_Master_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/FIOM2_Master_Module.L5X VS01C_FIOM18 (FIO FIOM2_Master): Using variant boilerplate FIOM2_Master_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/FIOM2_Master_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/FIOM2_Master_Module.L5X VS01C_FIOM2 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM3 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM4 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM5 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM6 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM7 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM8 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01C_FIOM9 (FIO PalletBuildMaster): Using variant boilerplate PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/PalletBuildMaster_Module.L5X VS01B_FIOH1 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH10 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH11 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH12 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH13 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH14 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH15 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH16 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH17 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH2 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH3 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH4 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH5 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH6 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH7 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH8 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01B_FIOH9 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH1 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH10 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH11 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH12 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH13 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH14 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH15 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH16 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH17 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH2 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH3 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH4 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH5 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH6 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH7 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH8 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X VS01C_FIOH9 (FIOH Sorter): Using variant boilerplate Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/Sorter_FIOH_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/SLOT5_IB16_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/SLOT7_IB16S_Module.L5X Successfully loaded boilerplate: CNO8_boilerplate/SLOT6_OB16E_Module.L5X Importing AOIs/DataTypes from base: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/IO Tree Configuration Generator/BaseProgram.L5X Programs already exist (2 programs found), skipping empty program creation OK: Generated project: generated_projects/CNO8_MCM05.L5X Single file generation complete - ['generated_projects/CNO8_MCM05.L5X'] === Step 4: L5X2ACD Compiler output === ๐Ÿš€ Setting up compilation for project: CNO8_MCM05 ๐Ÿ“‚ Compilation directory: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/L5X2ACD Compiler ๐Ÿ“„ Source L5X: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/IO Tree Configuration Generator/generated_projects/CNO8_MCM05.L5X ๐Ÿ”ง Mode: wipe_existing=False, replace_mode=True ๐Ÿ”„ Using SMART REPLACE mode - keeping current project files ๐Ÿงน Cleaning old project files... โœ“ Removed old project file: compile_SAT9_MCM01.bat โš ๏ธ Could not remove SAT9_MCM01.ACD: [Errno 13] Permission denied: '/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/L5X2ACD Compiler/SAT9_MCM01.ACD' โœ“ Removed old project file: SAT9_MCM01.L5X โœ“ Removed file: SAT9_MCM01.LCIBATUMI.ilia.gurielidze.BAK000.acd โš ๏ธ Could not remove SAT9_MCM01.Sem: [Errno 13] Permission denied: '/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/L5X2ACD Compiler/SAT9_MCM01.Sem' โš ๏ธ Could not remove SAT9_MCM01.Wrk: [Errno 13] Permission denied: '/mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/L5X2ACD Compiler/SAT9_MCM01.Wrk' ๐Ÿงน Cleanup complete: 3 files removed, 0 current files kept, 0 directories removed ๐Ÿ“ Copying L5X file: CNO8_MCM05.L5X โ†’ CNO8_MCM05.L5X โœ“ Copied successfully (7.52 MB) ๐Ÿ”ง Generating batch file: compile_CNO8_MCM05.bat โœ“ Generated successfully โœ… Compilation setup complete! L5X File: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/L5X2ACD Compiler/CNO8_MCM05.L5X Batch File: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/L5X2ACD Compiler/compile_CNO8_MCM05.bat ๐ŸชŸ To compile on Windows: 1. Run: /mnt/c/Users/ilia.gurielidze/Projects/PLC Generation/L5X2ACD Compiler/compile_CNO8_MCM05.bat 2. Or double-click: compile_CNO8_MCM05.bat