adding new files, have no idea what changes i have

This commit is contained in:
Salijoghli 2026-03-03 16:47:24 +04:00
parent 65d98d3001
commit e8d3b0ff39
13 changed files with 2036602 additions and 4631 deletions

View File

@ -1,257 +0,0 @@
HANDLE BLOCKNAME TAG INST P_TAG1 IP CAT FAMILY CP LOC TAG1 RATING PDP SPEED DPM INPUT1 INPUT2 MANUFACTURER OUTPUT1
'3B760 DPM MCM01 <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
'3B791 *U3059 <> <> PDP1_FIO1 11.200.1.97 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'3B7A4 *U3058 <> <> PDP2_FIO1 11.200.1.97 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'3B7CF *U3057 <> <> <> <> <> <> PDP1_PMM1 <> <> <> <> <> <> <> <>
'3B7E2 *U3057 <> <> <> <> <> <> PDP2_PMM1 <> <> <> <> <> <> <> <>
'464A5 *U3271 <> <> UL1_3_VFD1 11.200.1.31 35S-6D3-P101 VFD MCM01 <> <> 3HP PDP01 280 FPM DPM1_UL1_4_P2 <> <> <> <>
'464BA *U3277 <> <> UL1_4_VFD1 11.200.1.32 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM1_UL1_4_P3 <> <> <> <>
'464CF *U3278 <> <> UL1_5_VFD1 11.200.1.33 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM1_UL1_4_P4 <> <> <> <>
'464E4 *U3280 <> <> UL1_6_VFD1 11.200.1.34 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 300 FPM DPM1_UL1_4_P5 <> <> <> <>
'464F9 *U3281 <> <> UL1_7_VFD1 11.200.1.35 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 300 FPM DPM1_UL1_4_P6 <> <> <> <>
'4650E *U3282 <> <> UL1_8_VFD1 11.200.1.36 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 300 FPM DPM1_UL1_4_P7 <> <> <> <>
'46523 *U3283 <> <> UL1_10_VFD1 11.200.1.37 35S-6D4-L001 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM1_UL1_4_P8 <> <> <> <>
'46538 *U3284 <> <> UL1_11A_VFD1 11.200.1.38 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM1_UL1_4_P9 <> <> <> <>
'4654D *U3285 <> <> UL1_11B_VFD1 11.200.1.39 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM1_UL1_4_P10 <> <> <> <>
'46562 *U3286 <> <> UL1_12_VFD1 11.200.1.40 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM1_UL1_4_P11 <> <> <> <>
'46577 *U3287 <> <> UL1_13_VFD1 11.200.1.41 35S-6D4-L001 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM1_UL1_4_P12 <> <> <> <>
'4658C *U3288 <> <> UL1_14_VFD1 11.200.1.42 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM1_UL1_4_P13 <> <> <> <>
'465A1 *U3294 <> <> UL2_3_VFD1 11.200.1.45 35S-6D3-P101 VFD MCM01 <> <> 3HP PDP01 280 FPM DPM2_UL2_4_P2 <> <> <> <>
'465B6 *U3295 <> <> UL2_4_VFD1 11.200.1.46 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM2_UL2_4_P3 <> <> <> <>
'465CB *U3297 <> <> UL2_5_VFD1 11.200.1.47 35S-6D3-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM2_UL2_4_P4 <> <> <> <>
'465E0 *U3298 <> <> UL2_6_VFD1 11.200.1.48 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM2_UL2_4_P5 <> <> <> <>
'465F5 *U3300 <> <> UL2_7_VFD1 11.200.1.49 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P6 <> <> <> <>
'4660A *U3301 <> <> UL2_8_VFD1 11.200.1.50 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P7 <> <> <> <>
'4661F *U3303 <> <> UL2_9_VFD1 11.200.1.51 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P8 <> <> <> <>
'46634 *U3305 <> <> UL2_10_VFD1 11.200.1.52 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P9 <> <> <> <>
'46649 *U3306 <> <> UL3_1_VFD1 11.200.1.53 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP01 120 FPM DPM2_UL2_4_P10 <> <> <> <>
'4665E *U3308 <> <> UL3_2_VFD1 11.200.1.54 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM2_UL2_4_P11 <> <> <> <>
'46673 *U3311 <> <> UL3_3_VFD1 11.200.1.55 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM2_UL2_4_P12 <> <> <> <>
'46688 *U3313 <> <> UL3_4_VFD1 11.200.1.56 35S-6D4-L001 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM2_UL2_4_P13 <> <> <> <>
'4669D *U3315 <> <> UL3_5_VFD1 11.200.1.57 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM2_UL2_4_P14 <> <> <> <>
'466B2 *U3316 <> <> UL3_6_VFD1 11.200.1.58 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P15 <> <> <> <>
'466C7 *U3317 <> <> UL3_7_VFD1 11.200.1.59 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P16 <> <> <> <>
'466DC *U3321 <> <> UL3_8_VFD1 11.200.1.60 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P17 <> <> <> <>
'466F1 *U3322 <> <> UL3_9_VFD1 11.200.1.61 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P18 <> <> <> <>
'46706 *U3323 <> <> UL4_3_VFD1 11.200.1.65 35S-6D5-P101 VFD MCM01 <> <> 7.5HP PDP01 280 FPM DPM3_UL4_4_P2 <> <> <> <>
'4671B *U3325 <> <> UL4_4_VFD1 11.200.1.66 35S-6D4-P101 VFD MCM01 <> <> 7.5HP PDP01 280 FPM DPM3_UL4_4_P3 <> <> <> <>
'46730 *U3334 <> <> UL4_10_VFD1 11.200.1.71 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM3_UL4_4_P8 <> <> <> <>
'46745 *U3348 <> <> UL5_3_VFD1 11.200.1.79 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM4_UL5_4_P2 <> <> <> <>
'4675A *U3350 <> <> UL5_4_VFD1 11.200.1.80 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM4_UL5_4_P3 <> <> <> <>
'468EF *U3279 <> <> UL1_6_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1_6_VFD1 <> <> <> <> <> UL1_6_VFD1_I2 <> <> <>
'46906 *U3124 <> <> UL1_7_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1_7_VFD1 <> <> <> <> <> UL1_7_VFD1_I2 <> <> <>
'4691D *U3127 <> <> UL1_10_TPE3 <> B25-K6LP-Q5 TPE MCM01 <> <> <> <> <> <> <> <>
'46934 *U3125 <> <> UL1_9_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1_9_VFD1 <> <> <> <> <> UL1_9_VFD1_I2 <> <> <>
'4694B *U3126 <> <> UL1_10_TPE2 <> B25-K6LP-Q5 TPE MCM01 <> <> <> <> <> UL1-10 <> <> <>
'46962 *U3128 <> <> UL1_10_TPE4 <> B25-K6LP-Q5 TPE MCM01 UL1_10_FIO1 <> <> <> <> <> UL1_10_FIO1_P1_C2 <> <> <>
'46979 *U3129 <> <> UL1_10_TPE5 <> B25-K6LP-Q5 TPE MCM01 UL1_10_FIO1 <> <> <> <> <> UL1_10_FIO1_P2_C4 <> <> <>
'46990 *U3130 <> <> UL1_12_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1_12_VFD1 <> <> <> <> <> UL1_12_VFD1_I2 <> <> <>
'469A7 *U3180 <> <> UL1_12_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL1_12_VFD1 <> <> <> <> <> UL1_12_VFD1_I3 <> <> <>
'469BE *U3179 <> <> UL1_13_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1_13_VFD1 <> <> <> <> <> UL1_13_VFD1_I2 <> <> <>
'469D5 *U3149 <> <> UL4_10_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_9_VFD1 <> <> <> <> <> UL4_9_VFD1_I3 <> <> <>
'469EC *U3150 <> <> UL4_10_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL4_10_VFD1 <> <> <> <> <> UL4_10_VFD1_I2 <> <> <>
'46A03 *U3151 <> <> UL4_10_TPE3 <> B25-K6LP-Q5 TPE MCM01 UL4_10_VFD1 <> <> <> <> <> UL4_10_VFD1_I3 <> <> <>
'46A1A *U3152 <> <> UL4_10_TPE4 <> B25-K6LP-Q5 TPE MCM01 UL4_10_FIO1 <> <> <> <> <> UL4_10_FIO1_P1_C2 <> <> <>
'46A31 *U3153 <> <> UL4_10_TPE5 <> B25-K6LP-Q5 TPE MCM01 UL4_10_FIO1 <> <> <> <> <> UL4_10_FIO1_P2_C4 <> <> <>
'46A48 *U3156 <> <> UL5_3_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL5_3_VFD1 <> <> <> <> <> UL5_3_VFD1_I2 <> <> <>
'46A5F *U3148 <> <> UL4_3_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL4_3_VFD1 <> <> <> <> <> UL4_3_VFD1_I3 <> <> <>
'46A76 *U3181 <> <> UL3_1_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL3_1_VFD1 <> <> <> <> <> UL3_1_VFD1_I2 <> <> <>
'46A8D *U3133 <> <> UL2_3_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL2_3_VFD1 <> <> <> <> <> UL2_3_VFD1_I3 <> <> <>
'46AA4 *U3132 <> <> UL1_3_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL1_3_VFD1 <> <> <> <> <> UL1_3_VFD1_I3 <> <> <>
'46ABB *U3122 <> <> UL1_4_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1-4_VFD1 <> <> <> <> <> UL1_4_VFD1_I2 <> <> <>
'46AD2 *U3134 <> <> UL2_4_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL2_4_VFD1 <> <> <> <> <> UL2_4_VFD1_I2 <> <> <>
'46AE9 *U3349 <> <> UL5_4_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL5_4_VFD1 <> <> <> <> <> UL5_4_VFD1_I2 <> <> <>
'46B00 *U3142 <> <> UL3_5_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL3_5_VFD1 <> <> <> <> <> UL3_5_VFD1_I2 <> <> <>
'46B17 *U3143 <> <> UL3_5_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL3_5_VFD1 <> <> <> <> <> UL3_5_VFD1_I3 <> <> <>
'46B2E *U3318 <> <> UL3_6_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL3_6_VFD1 <> <> <> <> <> UL3_6_VFD1_I2 <> <> <>
'46B45 *U3319 <> <> UL3_7_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL3_7_VFD1 <> <> <> <> <> UL3_7_VFD1_I2 <> <> <>
'46B5C *U3320 <> <> UL3_8_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL3_8_VFD1 <> <> <> <> <> UL3_8_VFD1_I2 <> <> <>
'46B73 *U3146 <> <> UL3_9_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL3_9_VFD1 <> <> <> <> <> UL3_9_VFD1_I2 <> <> <>
'46B8A *U3304 <> <> UL2_9_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL2_9_VFD1 <> <> <> <> <> UL2_9_VFD1_I2 <> <> <>
'46BA1 *U3137 <> <> UL2_8_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL2_8_VFD1 <> <> <> <> <> UL2_8_VFD1_I2 <> <> <>
'46BB8 *U3261 <> <> UL2_7_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL2_7_VFD1 <> <> <> <> <> UL2_7_VFD1_I2 <> <> <>
'46BFF *U3069 <> <> UL5_4_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL5_4_VFD1_SI2 UL5_4_VFD1_SI3 ALLEN BRADLEY <>
'46C16 *U3069 <> <> UL5_4_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL5_4_VFD1_SI0 UL5_4_VFD1_SI1 ALLEN BRADLEY <>
'46C2D *U3069 <> <> UL4_4_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL4_4_VFD1_SI2 UL4_4_VFD1_SI3 ALLEN BRADLEY <>
'46C44 *U3069 <> <> UL4_4_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL4_4_VFD1_SI0 UL4_4_VFD1_SI1 ALLEN BRADLEY <>
'46C5B *U3069 <> <> UL3_2_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL3_2_VFD1_SI2 UL3_2_VFD1_SI3 ALLEN BRADLEY <>
'46C72 *U3069 <> <> UL3_2_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL3_2_VFD1_SI0 UL3_2_VFD1_SI1 ALLEN BRADLEY <>
'46C89 *U3069 <> <> UL2_4_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL2_4_VFD1_SI2 UL2_4_VFD1_SI3 ALLEN BRADLEY <>
'46CA0 *U3069 <> <> UL2_4_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL2_4_VFD1_SI0 UL2_4_VFD1_SI1 ALLEN BRADLEY <>
'46CB7 *U3069 <> <> UL1_4_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL1_4_VFD.SI2 UL1_4_VFD.SI3 ALLEN BRADLEY <>
'46CCE *U3069 <> <> UL1_4_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL1_4_VFD.SI0 UL1_4_VFD.SI1 ALLEN BRADLEY <>
'46D00 *U3214 <> <> UL5_4_S2 <> S22AMTSGRY3Q START PB MCM01 UL5_5_VFD1 <> <> <> <> <> UL5_5_VFD1_IO0 <> <> UL5_5_VFD1_IO1
'46D3F *U3237 <> <> UL4_4_S2 <> S22AMTSGRY3Q START PB MCM01 UL4_6_VFD1 <> <> <> <> <> UL4_6_VFD1_IO0 <> <> UL4_6_VFD1_IO1
'46D67 *U3215 <> <> UL4_4_S1 <> S22AMTSGRY3Q START PB MCM01 UL4_5_VFD1 <> <> <> <> <> UL4_5_VFD1_IO0 <> <> UL4_5_VFD1_IO1
'46D8F *U3240 <> <> UL3_2_S2 <> S22AMTSGRY3Q START PB MCM01 UL3_2_FIO1 <> <> <> <> <> UL3_2_FIO1_P7_C14 <> <> UL3_2_FIO1_P7_C15
'46DB7 *U3200 <> <> UL2_4_S2 <> S22AMTSGRY3Q START PB MCM01 UL2_5_VFD1 <> <> <> <> <> UL2_5_VFD1_IO0 <> <> UL2_5_VFD1_IO1
'46DDF *U3210 <> <> UL3_2_S1 <> S22AMTSGRY3Q START PB MCM01 UL3_2_FIO1 <> <> <> <> <> UL3_2_FIO1_P6_C12 <> <> UL3_2_FIO1_P6_C13
'46E07 *U3199 <> <> UL2_4_S1 <> S22AMTSGRY3Q START PB MCM01 UL2_4_VFD1 <> <> <> <> <> UL2_4_VFD1_IO0 <> <> UL2_4_VFD1_IO1
'46E2F *U3195 <> <> UL1_4_S2 <> S22AMTSGRY3Q START PB MCM01 UL1_5_VFD1 <> <> <> <> <> UL1_5_VFD1_IO0 <> <> UL1_5_VFD1_IO1
'46E57 *U3221 <> <> UL1_4_S1 <> S22AMTSGRY3Q START PB MCM01 UL1_4_VFD <> <> <> <> <> UL1_4_VFD.IO0 <> <> UL1_4_VFD.IO1
'46E68 *U3094 <> <> UL4_10_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL4_10_VFD1_SI2 UL4_10_VFD1_SI3 ALLEN BRADLEY <>
'46E7F *U3093 <> <> UL4_10_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL4_10_VFD1_SI0 UL4_10_VFD1_SI1 ALLEN BRADLEY <>
'46EAD *U3253 <> <> UL4_10_S2 <> S22AMTSGRY3Q START PB MCM01 UL4_10_FIO1 <> <> <> <> <> UL4_10_FIO1_P6_C12 <> <> UL4_10_FIO1_P6_C13
'46ED5 *U3213 <> <> UL4_10_S1 <> S22AMTSGRY3Q START PB MCM01 UL4_10_FIO1 <> <> <> <> <> UL4_10_FIO1_P5_C10 <> <> UL4_10_FIO1_P5_C11
'46EFD *U3082 <> <> UL1_10_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> NCP-015-SIO1 NCP-015-SIO1 ALLEN BRADLEY <>
'46F14 *U3069 <> <> UL1_10_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> NCP-015-SIO1 NCP-015-SIO1 ALLEN BRADLEY <>
'46F42 *U3208 <> <> UL1_10_S2 <> S22AMTSGRY3Q START PB MCM01 UL1_10_FIO1 <> <> <> <> <> UL1_10_FIO1_P6_C12 <> <> UL1_10_FIO1_P6_C13
'46F6A *U3196 <> <> UL1_10_S1 <> S22AMTSGRY3Q START PB MCM01 UL1_10_FIO1 <> <> <> <> <> UL1_10_FIO1_P5_C10 <> <> UL1_10_FIO1_P5_C11
'46FBC *U3203 <> <> PS1_1_S2 <> S22AMTSGRY3Q START PB MCM01 PS1_3_VFD1 <> <> <> <> <> PS1_3_VFD1_IO0 <> <> PS1_3_VFD1_IO1
'46FCF *U3069 <> <> UL3_1_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL3_1_VFD1_SI2 UL3_1_VFD1_SI3 ALLEN BRADLEY <>
'46FE6 *U3069 <> <> UL3_1_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL3_1_VFD1_SI0 UL3_1_VFD1_SI1 ALLEN BRADLEY <>
'46FFD *U3182 <> <> UL3_1_SS1 <> S22AMTSGRY3Q(2) CS MCM01 UL3_2_FIO1 <> <> <> <> <> UL3_2_FIO1_P1_C2 UL3_2_FIO1_P1_C3 <> UL3_2_FIO1_P2_C4
'472B1 *U3344 <> <> PS2_3_VFD1 11.200.1.176 35S-6D3-L001 VFD MCM01 <> <> 3HP PDP06 300 FPM DPM9_PS1_4_P8 <> <> <> <>
'472C6 *U3289 <> <> PS1_1_VFD1 11.200.1.169 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP06 300 FPM DPM9_PS1_4_P1 <> <> <> <>
'472DB *U3290 <> <> PS1_2_VFD1 11.200.1.170 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP06 300 FPM DPM9_PS1_4_P2 <> <> <> <>
'472F0 *U3345 <> <> PS2_4_VFD1 11.200.1.177 35S-6D3-L001 VFD MCM01 <> <> 3HP PDP06 300 FPM DPM9_PS1_4_P9 <> <> <> <>
'47305 *U3346 <> <> PS2_5_VFD1 11.200.1.178 35S-6D3-L001 VFD MCM01 <> <> 3HP PDP06 300 FPM DPM9_PS1_4_P10 <> <> <> <>
'4731A *U3347 <> <> PS2_6_VFD1 11.200.1.179 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP06 300 FPM DPM9_PS1_4_P11 <> <> <> <>
'4732F *U3292 <> <> PS1_4_VFD1 11.200.1.172 35S-6D3-L001 VFD MCM01 <> <> 3HP PDP06 300 FPM DPM9_PS1_4_P4 <> <> <> <>
'47344 *U3291 <> <> PS1_3_VFD1 11.200.1.171 35S-6D3-L001 VFD MCM01 <> <> 3HP PDP06 300 FPM DPM9_PS1_4_P3 <> <> <> <>
'47359 *U3293 <> <> PS1_5_VFD1 11.200.1.173 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP06 300 FPM DPM9_PS1_4_P5 <> <> <> <>
'47370 *U3102 <> <> PS1_1_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> PS1_1_VFD1_SI2 PS1_1_VFD1_SI3 ALLEN BRADLEY <>
'47388 *U3072 <> <> PS1_1_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> PS1_1_VFD1_SI0 PS1_1_VFD1_SI1 ALLEN BRADLEY <>
'473B7 *U3209 <> <> PS1_1_S1 <> S22AMTSGRY3Q START PB MCM01 PS1_1_VFD1 <> <> <> <> <> PS1_1_VFD1_IO0 <> <> PS1_1_VFD1_IO1
'473C8 *U3074 <> <> PS2_6_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> NCP-015-SIO1 NCP-015-SIO1 ALLEN BRADLEY <>
'473F6 *U3223 <> <> PS2_6_S2 <> S22AMTSGRY3Q START PB MCM01 <> <> <> <> <> <> <>
'47408 *U3076 <> <> PS1_5_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> PS1_5_VFD1_SI0 PS1_5_VFD1_SI1 ALLEN BRADLEY <>
'47436 *U3250 <> <> PS1_5_S1 <> S22AMTSGRY3Q START PB MCM01 PS1_4_VFD1 <> <> <> <> <> PS1_4_VFD1_IO0 <> <> PS1_4_VFD1_IO1
'47447 *U3118 <> <> PS1_2_TPE1 <> B25-K6LP-Q5 TPE MCM01 PS1_2_VFD1 <> <> <> <> <> PS1_2_VFD1_I2 <> <> <>
'4745E *U3119 <> <> PS1_4_TPE1 <> B25-K6LP-Q5 TPE MCM01 PS1_4_VFD1 <> <> <> <> <> PS1_4_VFD1_I2 <> <> <>
'47475 *U3120 <> <> PS1_4_TPE2 <> B25-K6LP-Q5 TPE MCM01 PS1_4_VFD1 <> <> <> <> <> PS1_4_VFD1_I3 <> <> <>
'4748C *U3121 <> <> PS2_5_TPE1 <> B25-K6LP-Q5 TPE MCM01 PS2_4_VFD1 <> <> <> <> <> PS2_4_VFD1_I2 <> <> <>
'474A3 *U3114 <> <> PS2_5_TPE2 <> B25-K6LP-Q5 MCM01 <> <> <> <> <> <> <> <>
'474D1 *U3115 <> <> PS1_2_TPE2 <> B25-K6LP-Q5 MCM01 <> <> <> <> <> <> <> <>
'474EA *U3073 <> <> PS1_5_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> PS1_5_VFD1_SI2 PS1_5_VFD1_SI3 ALLEN BRADLEY <>
'47518 *U3204 <> <> PS1_5_S2 <> S22AMTSGRY3Q START PB MCM01 PS1_5_VFD1 <> <> <> <> <> PS1_5_VFD1_IO0 <> <> PS1_5_VFD1_IO1
'4752A *U3075 <> <> PS2_6_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> NCP-015-SIO1 NCP-015-SIO1 ALLEN BRADLEY <>
'47542 *U3116 <> <> PS2_6_TPE1 <> B25-K6LP-Q5 MCM01 <> <> <> <> <> <> <> <>
'47559 *U3117 <> <> PS1_5_TPE1 <> B25-K6LP-Q5 TPE MCM01 PS1_5_VFD1 <> <> <> <> <> PS1_5_VFD1_I2 <> <> <>
'47570 *U3113 <> <> PS2_3_TPE1 <> Q5XKLAF2000-Q8-JAMAMZ JPE MCM01 PS2_3_VFD1 <> <> <> <> <> PS2_3_VFD1_I2 <> <> <>
'4759E *U3225 <> <> PS2_6_S1 <> S22AMTSGRY3Q START PB MCM01 <> <> <> <> <> <> <>
'47AEC *U3069 <> <> UL2_3_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL2_3_VFD1_SI2 UL2_3_VFD1_SI3 ALLEN BRADLEY <>
'47B03 *U3069 <> <> UL2_3_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL2_3_VFD1_SI0 UL2_3_VFD1_SI1 ALLEN BRADLEY <>
'47B33 *U3069 <> <> UL1_3_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL1_3_VFD1_SI2 UL1_3_VFD1_SI3 ALLEN BRADLEY <>
'47B4A *U3069 <> <> UL1_3_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL1_3_VFD1_SI0 UL1_3_VFD1_SI1 ALLEN BRADLEY <>
'47B7C *U3069 <> <> UL4_3_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL4_3_VFD1_SI2 UL4_3_VFD1_SI3 ALLEN BRADLEY <>
'47B93 *U3069 <> <> UL4_3_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL4_3_VFD1_SI0 UL4_3_VFD1_SI1 ALLEN BRADLEY <>
'47BC3 *U3069 <> <> UL5_3_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL5_3_VFD1_SI2 UL5_3_VFD1_SI3 ALLEN BRADLEY <>
'47BDA *U3069 <> <> UL5_3_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL5_3_VFD1_SI0 UL5_3_VFD1_SI1 ALLEN BRADLEY <>
'47C2B *U3198 <> <> UL2_3_S2 <> S22AMTSGRY3Q START PB MCM01 UL2_3_FIO1 <> <> <> <> <> UL2_3_FIO1_P5_C10 <> <> UL2_3_FIO1_P5_C11
'47C3C *U3194 <> <> UL1_3_S2 <> S22AMTSGRY3Q START PB MCM01 UL1_3_FIO1 <> <> <> <> <> UL1_3_FIO1_P5_C10 <> <> UL1_3_FIO1_P5_C11
'47C4D *U3309 <> <> UL3_2_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL3_2_VFD1 <> <> <> <> <> UL3_2_VFD1_I3 <> <> <>
'47C64 *U3206 <> <> UL5_3_S2 <> S22AMTSGRY3Q START PB MCM01 UL5_3_FIO1 <> <> <> <> <> UL5_3_FIO1_P5_C10 <> <> UL5_3_FIO1_P5_C11
'47C77 *U3123 <> <> UL1_3_TPE1 <> B25-K6LP-Q5 PE MCM01 UL1_3_VFD1 <> <> <> <> <> UL1_3_VFD1_I2 <> <> <>
'47C8F *U3131 <> <> UL2_3_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL2_3_VFD1 <> <> <> <> <> UL2_3_VFD1_I2 <> <> <>
'47CD6 *U3147 <> <> UL4_3_TPE1 <> B25-K6LP-Q5 PE MCM01 UL4_3_VFD1 <> <> <> <> <> UL4_3_VFD1_I2 <> <> <>
'47D1D *U3155 <> <> UL5_3_TPE1 <> B25-K6LP-Q5 PE MCM01 UL5_3_VFD1 <> <> <> <> <> UL5_3_VFD1_I2 <> <> <>
'47D64 *U3262 <> <> UL2_3_FIO1 11.200.1.62 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'47D77 *U3264 <> <> UL1_3_FIO1 11.200.1.43 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'47D8A *U3140 <> <> UL3_2_TPE1 <> B25-K6LP-Q5 PE MCM01 UL3_2_VFD1 <> <> <> <> <> UL3_2_VFD1_I2 <> <> <>
'47DD1 *U3265 <> <> UL3_2_FIO1 11.200.1.63 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'47DE4 *U3266 <> <> UL4_3_FIO1 11.200.1.77 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'47DF7 *U3267 <> <> UL5_3_FIO1 11.200.1.96 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'47E0A *U3263 <> <> UL6_2_FIO1 11.200.1.97 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'47EA6 *U3193 <> <> UL1_3_S1 <> S22AMTSGRY3Q START PB MCM01 UL1_3_FIO1 <> <> <> <> <> UL1_3_FIO1_P4_C8 <> <> UL1_3_FIO1_P4_C9
'47ECE *U3211 <> <> UL2_3_S1 <> S22AMTSGRY3Q START PB MCM01 UL2_3_FIO1 <> <> <> <> <> UL2_3_FIO1_P4_C8 <> <> UL2_3_FIO1_P4_C9
'47F20 *U3124 <> <> UL1_8_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1_8_VFD1 <> <> <> <> <> UL1_8_VFD1_I2 <> <> <>
'47F67 *U3205 <> <> UL4_3_S2 <> S22AMTSGRY3Q START PB MCM01 UL4_3_FIO1 <> <> <> <> <> UL4_3_FIO1_P5_C10 <> <> UL4_3_FIO1_P5_C11
'47F8F *U3212 <> <> UL4_3_S1 <> S22AMTSGRY3Q START PB MCM01 UL4_3_FIO1 <> <> <> <> <> UL4_3_FIO1_P4_C8 <> <> UL4_3_FIO1_P4_C9
'47FA0 *U3327 <> <> UL4_5_VFD1 11.200.1.67 35S-6D3-P101 VFD MCM01 <> <> 3HP PDP01 280 FPM DPM3_UL4_4_P4 <> <> <> <>
'47FB5 *U3330 <> <> UL4_6_VFD1 11.200.1.68 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 300 FPM DPM3_UL4_4_P5 <> <> <> <>
'47FCA *U3332 <> <> UL4_7_VFD1 11.200.1.69 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 300 FPM DPM3_UL4_4_P6 <> <> <> <>
'47FDF *U3333 <> <> UL4_8_VFD1 11.200.1.70 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 300 FPM DPM3_UL4_4_P7 <> <> <> <>
'4802D *U3326 <> <> UL4_5_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_5_VFD1 <> <> <> <> <> UL4_5_VFD1_I2 <> <> <>
'48044 *U3329 <> <> UL4_6_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_6_VFD1 <> <> <> <> <> UL4_6_VFD1_I2 <> <> <>
'4805B *U3331 <> <> UL4_7_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_7_VFD1 <> <> <> <> <> UL4_7_VFD1_I2 <> <> <>
'48072 *U3122 <> <> UL4_4_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_4_VFD1 <> <> <> <> <> UL4_4_VFD1_I2 <> <> <>
'4809C *U3124 <> <> UL4_8_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_8_VFD1 <> <> <> <> <> UL4_8_VFD1_I2 <> <> <>
'480B3 *U3336 <> <> UL4_11A_VFD1 11.200.1.72 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM3_UL4_4_P9 <> <> <> <>
'480C8 *U3337 <> <> UL4_11B_VFD1 11.200.1.73 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM3_UL4_4_P10 <> <> <> <>
'480DD *U3339 <> <> UL4_12_VFD1 11.200.1.74 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM3_UL4_4_P11 <> <> <> <>
'480F2 *U3340 <> <> UL4_13_VFD1 11.200.1.75 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM3_UL4_4_P12 <> <> <> <>
'48107 *U3186 <> <> UL4_12_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_12_VFD1 <> <> <> <> <> UL4_12_VFD1_I2 <> <> <>
'4811E *U3185 <> <> UL4_12_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL4_12_VFD1 <> <> <> <> <> UL4_12_VFD1_I3 <> <> <>
'48135 *U3184 <> <> UL4_13_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_13_VFD1 <> <> <> <> <> UL4_13_VFD1_I2 <> <> <>
'48163 *U3207 <> <> PS2_1_S2 <> S22AMTSGRY3Q START PB MCM01 PS2_3_VFD1 <> <> <> <> <> PS2_3_VFD1_IO0 <> <> PS2_3_VFD1_IO1
'48174 *U3077 <> <> PS2_1_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> NCP-015-SIO1 NCP-015-SIO1 ALLEN BRADLEY <>
'4818B *U3072 <> <> PS2_1_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> NCP-015-SIO1 NCP-015-SIO1 ALLEN BRADLEY <>
'481B9 *U3202 <> <> PS2_1_S1 <> S22AMTSGRY3Q START PB MCM01 <> <> <> <> <> PS2_1_VFD1_IO0 <> <> PS2_1_VFD1_IO1
'481CA *U3251 <> <> PS2_2_TPE1 <> B25-K6LP-Q5 MCM01 <> <> <> <> <> <> <> <>
'481E1 *U3342 <> <> PS2_1_VFD1 11.200.1.174 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP06 300 FPM DPM9_PS1_4_P6 <> <> <> <>
'481F6 *U3343 <> <> PS2_2_VFD1 11.200.1.175 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP06 300 FPM DPM9_PS1_4_P7 <> <> <> <>
'4820B *U3154 <> <> PS2_2_TPE2 <> B25-K6LP-Q5 MCM01 <> <> <> <> <> <> <> <>
'48239 *U3197 <> <> UL5_3_S1 <> S22AMTSGRY3Q START PB MCM01 UL5_3_FIO1 <> <> <> <> <> UL5_3_FIO1_P4_C8 <> <> UL5_3_FIO1_P4_C9
'4824A *U3351 <> <> UL5_5_VFD1 11.200.1.81 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM4_UL5_4_P4 <> <> <> <>
'4825F *U3355 <> <> UL5_6_VFD1 11.200.1.82 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM4_UL5_4_P5 <> <> <> <>
'48274 *U3356 <> <> UL5_7_VFD1 11.200.1.83 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P6 <> <> <> <>
'48289 *U3357 <> <> UL5_8_VFD1 11.200.1.84 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P7 <> <> <> <>
'4829E *U3359 <> <> UL5_9_VFD1 11.200.1.85 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P8 <> <> <> <>
'482B3 *U3360 <> <> UL5_10_VFD1 11.200.1.86 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P9 <> <> <> <>
'48314 *U3138 <> <> UL5_10_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL5_10_VFD1 <> <> <> <> <> UL5_10_VFD1_I2 <> <> <>
'4832B *U3137 <> <> UL5_9_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL5_9_VFD1 <> <> <> <> <> UL5_9_VFD1_I2 <> <> <>
'48342 *U3136 <> <> UL5_8_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL5_8_VFD1 <> <> <> <> <> UL5_8_VFD1_I2 <> <> <>
'48359 *U3135 <> <> UL5_7_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL5_7_VFD1 <> <> <> <> <> UL5_7_VFD1_I3 <> <> <>
'48370 *U3358 <> <> UL5_7_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL5_7_VFD1 <> <> <> <> <> UL5_7_VFD1_I2 <> <> <>
'48387 *U3361 <> <> UL6_1_VFD1 11.200.1.87 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM4_UL5_4_P10 <> <> <> <>
'4839C *U3362 <> <> UL6_2_VFD1 11.200.1.88 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM4_UL5_4_P11 <> <> <> <>
'483B1 *U3365 <> <> UL6_3_VFD1 11.200.1.89 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM4_UL5_4_P12 <> <> <> <>
'483C6 *U3367 <> <> UL6_5_VFD1 11.200.1.90 35S-6D2-L001 VFD MCM01 <> <> 2HP PDP01 280 FPM DPM4_UL5_4_P13 <> <> <> <>
'483DB *U3369 <> <> UL6_6_VFD1 11.200.1.91 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P14 <> <> <> <>
'484B0 *U3139 <> <> UL6_1_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL6_1_VFD1 <> <> <> <> <> UL6_1_VFD1_I2 <> <> <>
'484C7 *U3157 <> <> UL6_5_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL6_5_VFD1 <> <> <> <> <> UL6_5_VFD1_I2 <> <> <>
'484DE *U3158 <> <> UL6_5_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL6_5_VFD1 <> <> <> <> <> UL6_5_VFD1_I3 <> <> <>
'484F5 *U3368 <> <> UL6_6_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL6_6_VFD1 <> <> <> <> <> UL6_6_VFD1_I2 <> <> <>
'4850C *U3144 <> <> UL6_7_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL6_7_VFD1 <> <> <> <> <> UL6_7_VFD1_I2 <> <> <>
'48523 *U3145 <> <> UL6_8_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL6_8_VFD1 <> <> <> <> <> UL6_8_VFD1_I2 <> <> <>
'4853A *U3146 <> <> UL6_9_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL6_9_VFD1 <> <> <> <> <> UL6_9_VFD1_I2 <> <> <>
'48551 *U3069 <> <> UL6_2_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL6_2_VFD1_SI2 UL6_2_VFD1_SI3 ALLEN BRADLEY <>
'48568 *U3069 <> <> UL6_2_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL6_2_VFD1_SI0 UL6_2_VFD1_SI1 ALLEN BRADLEY <>
'48596 *U3231 <> <> UL6_2_S2 <> S22AMTSGRY3Q START PB MCM01 UL6_2_FIO1 <> <> <> <> <> UL6_2_FIO1_P7_C14 <> <> UL6_2_FIO1_P7_C15
'485BE *U3201 <> <> UL6_2_S1 <> S22AMTSGRY3Q START PB MCM01 UL6_2_FIO1 <> <> <> <> <> UL6_2_FIO1_P6_C12 <> <> UL6_2_FIO1_P6_C13
'485E6 *U3069 <> <> UL6_1_EPC2 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL6_1_VFD1_SI2 UL6_1_VFD1_SI3 ALLEN BRADLEY <>
'485FD *U3069 <> <> UL6_1_EPC1 <> 440E-LL5SE5 EPC MCM01 <> <> <> <> <> <> UL6_1_VFD1_SI0 UL6_1_VFD1_SI1 ALLEN BRADLEY <>
'48614 *U3187 <> <> UL6_1_SS1 <> S22AMTSGRY3Q(2) CS MCM01 UL6_2_FIO1 <> <> <> <> <> UL6_2_FIO1_P1_C2 UL6_2_FIO1_P2_C4 <> UL6_2_FIO1_P1_C3
'48628 *U3141 <> <> UL6_2_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL6_2_VFD1 <> <> <> <> <> UL6_2_VFD1_I3 <> <> <>
'4863F *U3140 <> <> UL6_2_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL6_2_VFD1 <> <> <> <> <> UL6_2_VFD1_I2 <> <> <>
'486AD DPM UL5_4_DPM1 MCM01 <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
'486B1 DPM UL4_4_DPM1 MCM01 <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
'486B5 DPM UL2_4_DPM1 MCM01 <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
'486B9 DPM UL1_4_DPM1 MCM01 <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
'486BD DPM PS1_4_DPM1 MCM01 <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
'49BD8 *U3269 <> <> UL1_14_FIO1 11.200.1.43 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'49BEB *U3178 <> <> UL1_14_PE1 <> B25-K6LP-Q5 TPE MCM01 <> <> <> <> <> <> <> <>
'49C02 *U3161 <> <> UL1_14_PE2 <> B25-K6LP-Q5 TPE MCM01 <> <> <> <> <> <> <> <>
'49C19 *U3162 <> <> UL1_14_PE3 <> B25-K6LP-Q5 TPE MCM01 <> <> <> <> <> <> <> <>
'49C30 *U3257 <> <> UL1_14_PE4 <> B25-K6LP-Q5 TPE MCM01 <> <> <> <> <> <> <> <>
'49C47 *U3256 <> <> UL1_14_PE5 <> B25-K6LP-Q5 TPE MCM01 <> <> <> <> <> <> <> <>
'49CAA *U3341 <> <> UL4_14_VFD1 11.200.1.42 35S-6D4-L001 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM1_UL1_4_P13 <> <> <> <>
'49CBF *U3268 <> <> UL4_14_FIO1 11.200.1.43 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'49CD2 *U3183 <> <> UL4_14_PE1 <> B25-K6LP-Q5 TPE MCM01 UL4_14_FIO1 <> <> <> <> <> UL4_14_FIO1_P0 <> <> <>
'49CE9 *U3159 <> <> UL4_14_PE2 <> B25-K6LP-Q5 TPE MCM01 UL4_14_FIO1 <> <> <> <> <> UL4_14_FIO1_P1 <> <> <>
'49D00 *U3160 <> <> UL4_14_PE3 <> B25-K6LP-Q5 TPE MCM01 UL4_14_FIO1 <> <> <> <> <> UL4_14_FIO1_P4_C9 <> <> <>
'49D17 *U3228 <> <> UL4_14_PE4 <> B25-K6LP-Q5 TPE MCM01 UL4_14_FIO1 <> <> <> <> <> UL4_14_FIO1_P7 <> <> <>
'49D2E *U3229 <> <> UL4_14_PE5 <> B25-K6LP-Q5 TPE MCM01 UL4_14_VFD1 <> <> <> <> <> UL4_14_VFD1_IO0 <> <> <>
'49F5F *U3235 <> <> UL5_4_S1 <> S22AMTSGRY3Q START PB MCM01 UL5_4_VFD1 <> <> <> <> <> UL5_4_VFD1_IO0 <> <> UL5_4_VFD1_IO1
'56B70 *U3122 <> <> UL1_5_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1_5_VFD1 <> <> <> <> <> UL1_5_VFD1_I2 <> <> <>
'56C95 *U3282 <> <> UL1_9_VFD1 11.200.1.36 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 300 FPM DPM1_UL1_4_P7 <> <> <> <>
'56CAC *U3126 <> <> UL1_10_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL1_9_VFD1 <> <> <> <> <> UL1_9_VFD1_I3 <> <> <>
'5717C *U3296 <> <> UL2_5_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL2_5_VFD1 <> <> <> <> <> UL2_5_VFD1_I2 <> <> <>
'5727C *U3261 <> <> UL2_7_TPE2 <> B25-K6LP-Q5 TPE MCM01 UL2_7_VFD1 <> <> <> <> <> UL2_7_VFD1_I3 <> <> <>
'57410 *U3304 <> <> UL2_10_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL2_10_VFD1 <> <> <> <> <> UL2_10_VFD1_I2 <> <> <>
'57427 *U3305 <> <> UL2_11_VFD1 11.200.1.52 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P9 <> <> <> <>
'57592 *U3312 <> <> UL3_3_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL3_3_VFD1 <> <> <> <> <> UL3_3_VFD1_I2 <> <> <>
'5781D *U3322 <> <> UL3_10_VFD1 11.200.1.61 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM2_UL2_4_P18 <> <> <> <>
'57B0E *U3124 <> <> UL4_9_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL4_9_VFD1 <> <> <> <> <> UL4_9_VFD1_I2 <> <> <>
'57B25 *U3333 <> <> UL4_9_VFD1 11.200.1.70 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 300 FPM DPM3_UL4_4_P7 <> <> <> <>
'58005 *U3352 <> <> UL5_5_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL5_5_VFD1 <> <> <> <> <> UL5_5_VFD1_I2 <> <> <>
'5822A *U3360 <> <> UL5_11_VFD1 11.200.1.86 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P9 <> <> <> <>
'582F2 *U3363 <> <> UL6_3_TPE1 <> B25-K6LP-Q5 TPE MCM01 UL6_3_VFD1 <> <> <> <> <> UL6_3_VFD1_I2 <> <> <>
'583B0 *U3365 <> <> UL6_4_VFD1 11.200.1.89 35S-6D4-P101 VFD MCM01 <> <> 5HP PDP01 280 FPM DPM4_UL5_4_P12 <> <> <> <>
'584B5 *U3369 <> <> UL6_7_VFD1 11.200.1.91 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P14 <> <> <> <>
'584CC *U3369 <> <> UL6_8_VFD1 11.200.1.91 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P14 <> <> <> <>
'584E3 *U3369 <> <> UL6_9_VFD1 11.200.1.91 35S-6D2-P101 VFD MCM01 <> <> 2HP PDP01 420 FPM DPM4_UL5_4_P14 <> <> <> <>
'584FA *U3369 <> <> UL6_10_VFD1 11.200.1.91 35S-6D3-P101 VFD MCM01 <> <> 3HP PDP01 420 FPM DPM4_UL5_4_P14 <> <> <> <>
'AA6A6 *U3264 <> <> UL1_10_FIO1 11.200.1.43 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>
'AA6C3 *U3264 <> <> UL4_10_FIO1 11.200.1.43 5032-8IOLM12DR FIO MCM01 <> <> <> <> <> <> <> <> <>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 162 KiB

4999
COMPARE_SVG_DWG/MCM08.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 238 KiB

View File

@ -2,14 +2,16 @@ import csv
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from pathlib import Path from pathlib import Path
import re import re
import sys
from datetime import datetime
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter
# ----------------------------- # -----------------------------
# CONFIG
# -----------------------------
DWG_TXT_PATH = Path("AMZ_TPA8_SYSDL_MCM01.txt")
SVG_PATH = Path("MCM01.svg")
# SVG suffixes that mean "same device" # SVG suffixes that mean "same device"
# -----------------------------
SVG_SUFFIXES = ( SVG_SUFFIXES = (
"_ASSEMBLY", "_ASSEMBLY",
"_END", "_END",
@ -21,6 +23,36 @@ SVG_SUFFIXES = (
"_TRITOPRIGHT", "_TRITOPRIGHT",
) )
# -----------------------------
# DEVICE TYPES TO IGNORE
# (substring match after normalization)
# -----------------------------
IGNORE_CONTAINS = (
"_BCN",
"_ENC",
"_SOL",
)
# Output folder for reports
OUTPUT_DIR = Path("reports")
# -----------------------------
# NORMALIZATION HELPERS
# -----------------------------
_TRAILING_NUMERIC_CHUNKS_RE = re.compile(r"(?:_\d+)+$")
def _contains_svg_suffix_token(n_with_underscores: str) -> bool:
"""
Return True if any SVG suffix appears as a token boundary:
e.g. "..._RECT_5_18" contains "_RECT" token
"""
return any(
(suffix + "_") in n_with_underscores or n_with_underscores.endswith(suffix)
for suffix in SVG_SUFFIXES
)
# ----------------------------- # -----------------------------
# NORMALIZATION # NORMALIZATION
# ----------------------------- # -----------------------------
@ -33,88 +65,259 @@ def normalize_name(name: str) -> str:
# ---- VFD1 (DWG) vs VFD (SVG) # ---- VFD1 (DWG) vs VFD (SVG)
n = re.sub(r"_VFD1$", "_VFD", n) n = re.sub(r"_VFD1$", "_VFD", n)
# ---- Strip SVG part suffixes # For SVG junk like "..._RECT-5-18", normalize dashes so we can parse consistently
for suffix in SVG_SUFFIXES: n_u = n.replace("-", "_")
if n.endswith(suffix):
n = n[: -len(suffix)]
break
return n # If this looks like an SVG "part id" (RECT/CIRCLE/TRI...), clean it:
if _contains_svg_suffix_token(n_u):
# Remove trailing numeric chunks (e.g. _5_18, _1_0_01, etc.)
n_u = _TRAILING_NUMERIC_CHUNKS_RE.sub("", n_u)
# Strip SVG part suffixes using the existing list
for suffix in SVG_SUFFIXES:
if n_u.endswith(suffix):
n_u = n_u[: -len(suffix)]
break
return n_u
def is_ignored(normalized_name: str) -> bool:
"""Return True if this normalized device name should be ignored."""
if not normalized_name:
return True
return any(token in normalized_name for token in IGNORE_CONTAINS)
# ----------------------------- # -----------------------------
# LOAD DWG # FILE PICKER
# ----------------------------- # -----------------------------
def load_dwg_devices(path: Path) -> set[str]: def pick_file(ext: str, label: str) -> Path:
devices = set() """
Scan current folder for files with given extension and let user choose.
ext example: ".txt" or ".svg"
"""
cwd = Path.cwd()
files = sorted([p for p in cwd.iterdir() if p.is_file() and p.suffix.lower() == ext.lower()])
if not files:
raise RuntimeError(f"No {ext} files found in: {cwd}")
# Auto pick if only one file exists
if len(files) == 1:
print(f"\nAuto-selected {label}: {files[0].name}")
return files[0]
print(f"\nSelect {label} ({ext}):")
for i, p in enumerate(files, start=1):
print(f" {i}) {p.name}")
while True:
choice = input(f"Enter number (1-{len(files)}): ").strip()
if choice.isdigit():
idx = int(choice)
if 1 <= idx <= len(files):
return files[idx - 1]
print("Invalid choice. Try again.")
# -----------------------------
# LOAD DWG (TXT export)
# -----------------------------
def load_dwg_devices(path: Path) -> tuple[set[str], list[str]]:
devices: set[str] = set()
ignored: list[str] = []
with path.open("r", encoding="utf-8", errors="ignore") as f: with path.open("r", encoding="utf-8", errors="ignore") as f:
reader = csv.DictReader(f, delimiter="\t") reader = csv.DictReader(f, delimiter="\t")
if not reader.fieldnames:
raise RuntimeError(f"Could not read header from file: {path.name}")
if "P_TAG1" not in reader.fieldnames: if "P_TAG1" not in reader.fieldnames:
raise RuntimeError( raise RuntimeError(f"P_TAG1 column not found in {path.name}. Found: {reader.fieldnames}")
f"P_TAG1 column not found. Found: {reader.fieldnames}"
)
for row in reader: for row in reader:
raw = row.get("P_TAG1", "") raw = (row.get("P_TAG1") or "").strip()
if raw and raw != "<>": if not raw or raw == "<>":
devices.add(normalize_name(raw)) continue
return devices normalized = normalize_name(raw)
if is_ignored(normalized):
ignored.append(normalized)
continue
devices.add(normalized)
return devices, ignored
# ----------------------------- # -----------------------------
# LOAD SVG # LOAD SVG
# ----------------------------- # -----------------------------
def load_svg_devices(path: Path) -> set[str]: def load_svg_devices(path: Path) -> tuple[set[str], list[str]]:
devices = set() devices: set[str] = set()
ignored: list[str] = []
tree = ET.parse(path) tree = ET.parse(path)
root = tree.getroot() root = tree.getroot()
for elem in root.iter(): for elem in root.iter():
elem_id = elem.attrib.get("id") elem_id = elem.attrib.get("id")
if elem_id: if not elem_id:
devices.add(normalize_name(elem_id)) continue
return devices normalized = normalize_name(elem_id)
if is_ignored(normalized):
ignored.append(normalized)
continue
devices.add(normalized)
return devices, ignored
# -----------------------------
# EXCEL REPORT
# -----------------------------
def _style_header_row(ws, header_fill_hex: str):
header_fill = PatternFill("solid", fgColor=header_fill_hex)
header_font = Font(bold=True, color="FFFFFF")
for cell in ws[1]:
cell.fill = header_fill
cell.font = header_font
cell.alignment = Alignment(horizontal="center", vertical="center")
def _autosize_columns(ws, max_width: int = 60):
for col in range(1, ws.max_column + 1):
letter = get_column_letter(col)
best = 0
for row in range(1, ws.max_row + 1):
v = ws.cell(row=row, column=col).value
if v is None:
continue
best = max(best, len(str(v)))
ws.column_dimensions[letter].width = min(max(best + 2, 12), max_width)
def write_excel_report(
dwg_file: Path,
svg_file: Path,
dwg_devices: set[str],
svg_devices: set[str],
dwg_ignored: list[str],
svg_ignored: list[str],
missing_in_svg: list[str],
extra_in_svg: list[str],
) -> Path:
OUTPUT_DIR.mkdir(exist_ok=True)
ts = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
out_path = OUTPUT_DIR / f"dwg_vs_svg_report_{ts}.xlsx"
wb = Workbook()
# ---------- Summary ----------
ws = wb.active
ws.title = "Summary"
ws.append(["Field", "Value"])
_style_header_row(ws, "404040")
summary_rows = [
("DWG file", dwg_file.name),
("SVG file", svg_file.name),
("DWG logical devices", len(dwg_devices)),
("SVG logical devices", len(svg_devices)),
("Missing in SVG", len(missing_in_svg)),
("Extra in SVG", len(extra_in_svg)),
("Ignored in DWG", len(dwg_ignored)),
("Ignored in SVG", len(svg_ignored)),
("Ignore filters", ", ".join(IGNORE_CONTAINS)),
("SVG suffixes", ", ".join(SVG_SUFFIXES)),
]
for k, v in summary_rows:
ws.append([k, v])
_autosize_columns(ws)
# ---------- Missing ----------
ws_miss = wb.create_sheet("Missing_in_SVG")
ws_miss.append(["Missing Device"])
_style_header_row(ws_miss, "C00000") # red
for d in missing_in_svg:
ws_miss.append([d])
_autosize_columns(ws_miss)
# ---------- Extra ----------
ws_extra = wb.create_sheet("Extra_in_SVG")
ws_extra.append(["Extra Device"])
_style_header_row(ws_extra, "E69138") # orange
for d in extra_in_svg:
ws_extra.append([d])
_autosize_columns(ws_extra)
# ---------- Ignored DWG ----------
ws_idwg = wb.create_sheet("Ignored_DWG")
ws_idwg.append(["Ignored Device"])
_style_header_row(ws_idwg, "6A1B9A") # purple
for d in sorted(set(dwg_ignored)):
ws_idwg.append([d])
_autosize_columns(ws_idwg)
# ---------- Ignored SVG ----------
ws_isvg = wb.create_sheet("Ignored_SVG")
ws_isvg.append(["Ignored Device"])
_style_header_row(ws_isvg, "6A1B9A") # purple
for d in sorted(set(svg_ignored)):
ws_isvg.append([d])
_autosize_columns(ws_isvg)
wb.save(out_path)
return out_path
# ----------------------------- # -----------------------------
# MAIN # MAIN
# ----------------------------- # -----------------------------
dwg_devices = load_dwg_devices(DWG_TXT_PATH) def main():
svg_devices = load_svg_devices(SVG_PATH) try:
dwg_txt_path = pick_file(".txt", "DWG export text file (DWG devices)")
svg_path = pick_file(".svg", "SVG file (SVG devices)")
except RuntimeError as e:
print(f"Error: {e}")
sys.exit(1)
missing_in_svg = sorted(dwg_devices - svg_devices) dwg_devices, dwg_ignored = load_dwg_devices(dwg_txt_path)
extra_in_svg = sorted(svg_devices - dwg_devices) svg_devices, svg_ignored = load_svg_devices(svg_path)
# ----------------------------- missing_in_svg = sorted(dwg_devices - svg_devices)
# REPORT extra_in_svg = sorted(svg_devices - dwg_devices)
# -----------------------------
print("====== DWG vs SVG DEVICE CHECK (NORMALIZED) ======")
print(f"DWG logical devices: {len(dwg_devices)}")
print(f"SVG logical devices: {len(svg_devices)}")
print()
# ---- EXTRA FIRST report_path = write_excel_report(
if extra_in_svg: dwg_txt_path,
print(f"⚠ Extra SVG devices ({len(extra_in_svg)}):") svg_path,
for d in extra_in_svg: dwg_devices,
print(f" - {d}") svg_devices,
else: dwg_ignored,
print("✅ No extra SVG devices") svg_ignored,
missing_in_svg,
extra_in_svg,
)
print() # Console summary (short)
print("\n====== DWG vs SVG DEVICE CHECK ======")
print(f"DWG devices: {len(dwg_devices)} ({dwg_txt_path.name})")
print(f"SVG devices: {len(svg_devices)} ({svg_path.name})")
print(f"Missing in SVG: {len(missing_in_svg)}")
print(f"Extra in SVG: {len(extra_in_svg)}")
print(f"Ignored DWG: {len(dwg_ignored)} filters={IGNORE_CONTAINS}")
print(f"Ignored SVG: {len(svg_ignored)} filters={IGNORE_CONTAINS}")
print(f"\n✅ Excel report saved to: {report_path}")
print("=====================================")
# ---- MISSING LAST
if missing_in_svg:
print(f"❌ Missing in SVG ({len(missing_in_svg)}):")
for d in missing_in_svg:
print(f" - {d}")
else:
print("✅ No missing DWG devices in SVG")
print("=================================================")
if __name__ == "__main__":
main()

View File

@ -1,6 +1,5 @@
import json import json
import os import os
import shutil
from datetime import datetime from datetime import datetime
# ========================================================= # =========================================================
@ -25,14 +24,7 @@ if len(json_files) > 1:
INPUT_JSON = os.path.join(SCRIPT_DIR, json_files[0]) INPUT_JSON = os.path.join(SCRIPT_DIR, json_files[0])
# Output and backup paths (same folder)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
BACKUP_JSON = os.path.join(
SCRIPT_DIR,
"tag_export_backup_%s.json" % timestamp
)
OUTPUT_JSON = os.path.join( OUTPUT_JSON = os.path.join(
SCRIPT_DIR, SCRIPT_DIR,
"tag_export_modified_%s.json" % timestamp "tag_export_modified_%s.json" % timestamp
@ -48,7 +40,7 @@ print(" 1 = OPC")
print(" 2 = MEMORY") print(" 2 = MEMORY")
print("") print("")
choice = raw_input("Enter choice (1 or 2): ").strip() choice = input("Enter choice (1 or 2): ").strip()
if choice == "1": if choice == "1":
TARGET_MODE = "OPC" TARGET_MODE = "OPC"
@ -60,16 +52,7 @@ else:
print("Target mode:", TARGET_MODE) print("Target mode:", TARGET_MODE)
# ========================================================= # =========================================================
# BACKUP ORIGINAL FILE # MODIFICATION LOGIC (SYSTEM FOLDER ONLY)
# =========================================================
shutil.copy2(INPUT_JSON, BACKUP_JSON)
print("Backup created:")
print(" ", BACKUP_JSON)
# =========================================================
# JSON MODIFICATION LOGIC
# ========================================================= # =========================================================
modified_count = 0 modified_count = 0
@ -94,18 +77,35 @@ def process_node(node):
elif TARGET_MODE == "OPC": elif TARGET_MODE == "OPC":
if value_source != "opc": if value_source != "opc":
node["valueSource"] = "opc" node["valueSource"] = "opc"
# opcItemPath preserved if it exists
modified_count += 1 modified_count += 1
# Recurse into child tags # Recurse deeper
for key in ("tags", "children"): for key in ("tags", "children"):
children = node.get(key) children = node.get(key)
if isinstance(children, list): if isinstance(children, list):
for child in children: for child in children:
process_node(child) process_node(child)
def find_and_process_system(root):
"""
Locate the 'System' folder and ONLY process its contents.
"""
if not isinstance(root, dict):
return
if root.get("tagType") == "Folder" and root.get("name") == "System":
process_node(root)
return
for key in ("tags", "children"):
children = root.get(key)
if isinstance(children, list):
for child in children:
find_and_process_system(child)
# ========================================================= # =========================================================
# LOAD → PROCESS → WRITE # LOAD → FIND SYSTEM → PROCESS → WRITE
# ========================================================= # =========================================================
with open(INPUT_JSON, "r") as f: with open(INPUT_JSON, "r") as f:
@ -113,9 +113,9 @@ with open(INPUT_JSON, "r") as f:
if isinstance(data, list): if isinstance(data, list):
for root in data: for root in data:
process_node(root) find_and_process_system(root)
else: else:
process_node(data) find_and_process_system(data)
with open(OUTPUT_JSON, "w") as f: with open(OUTPUT_JSON, "w") as f:
json.dump(data, f, indent=2) json.dump(data, f, indent=2)
@ -128,12 +128,12 @@ print("")
print("======================================") print("======================================")
print(" Tag Source Update Complete") print(" Tag Source Update Complete")
print("======================================") print("======================================")
print(" Input File :", INPUT_JSON) print(" Target Folder :", "System")
print(" Backup File :", BACKUP_JSON) print(" Target Mode :", TARGET_MODE)
print(" Output File :", OUTPUT_JSON) print(" Tags Modified :", modified_count)
print(" Target Mode :", TARGET_MODE) print(" Input File :", INPUT_JSON)
print(" Tags Modified :", modified_count) print(" Output File :", OUTPUT_JSON)
print("======================================") print("======================================")
if modified_count == 0: if modified_count == 0:
print("⚠ WARNING: No tags were modified.") print("⚠ WARNING: No tags were modified inside 'System'.")

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

637282
tags-switching/tags.json Normal file

File diff suppressed because one or more lines are too long

340
tags/generate-tags.py Normal file
View File

@ -0,0 +1,340 @@
"""
!!! YOU MUST DELETE THE EXISTING {MCM_NUMBER}.JSON FILES BEFORE RUNNING THE SCRIPT !!!
This script is used to generate tags.json files for each MCM folder in the Detailed-Views folder.
"""
import json
import os
import re
import copy
default_view_path = r"C:\Program Files\Inductive Automation\Ignition\data\projects\BNA8\com.inductiveautomation.perspective\views\autStand\Detailed_Views"
def merge_tags(t1, t2):
"""
Merge two tag folder trees, deduplicating tags by name within each folder, preserving folder structure.
"""
if not (isinstance(t1, dict) and isinstance(t2, dict)):
return copy.deepcopy(t1) if t2 is None else copy.deepcopy(t2)
if t1.get('tagType') == 'Folder' and t2.get('tagType') == 'Folder':
merged = {k: v for k, v in t1.items() if k != 'tags'}
merged['tags'] = []
tags1 = {tag['name']: tag for tag in t1.get('tags', [])}
tags2 = {tag['name']: tag for tag in t2.get('tags', [])}
all_names = set(tags1) | set(tags2)
for name in sorted(all_names):
tag1 = tags1.get(name)
tag2 = tags2.get(name)
if tag1 and tag2:
merged['tags'].append(merge_tags(tag1, tag2))
elif tag1:
merged['tags'].append(copy.deepcopy(tag1))
elif tag2:
merged['tags'].append(copy.deepcopy(tag2))
return merged
else:
return copy.deepcopy(t1) if t2 is None else copy.deepcopy(t2)
# Filtering and classification rules
def classify_device(name, mcm_device_name):
skip_keywords = ["Line", "Image", "Button", "Camera", "END", "image", "PR", "GS", "ERSC", "DIV"]
def create_parameters(mcm_name):
return {
"parameters": {
"MCM": {
"dataType": "String",
"value": mcm_name
}
}
}
if any(re.search(rf'{kw}\d+$', name) for kw in ["FIO", "SIO", "DPM"]):
for kw in ["FIO", "SIO", "DPM"]:
if re.search(rf'{kw}\d+$', name):
result = {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
# Beacon rules
beacon_match = re.search(r'_BCN\d+_(R|G|A|H|B)$', name)
if beacon_match:
result = {
"folder": "Beacon",
"typeId": "Beacon",
"tagType": "UdtInstance",
"name": name
}
result.update(create_parameters(mcm_device_name))
return result
# Photoeye rules with correct UDT typeId
for kw in ["TPE", "LRPE", "PE"]:
if re.search(rf'{kw}\d*$', name):
udt_path = f"PE/{kw}" # full UDT path
result = {"folder": f"Photoeye/{kw}", "typeId": udt_path, "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
# Encoders rules with correct UDT typeId
for kw in ["ENSH", "ENW"]:
if re.search(rf'{kw}\d*$', name):
udt_path = f"Encoder" # full UDT path
result = {"folder": f"Encoder/{kw}", "typeId": udt_path, "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "PRX" in name:
result = {"folder": "PRX", "typeId": "PRX", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "PR" in name or any(kw in name for kw in skip_keywords):
return None
if "EPC" in name:
result = {"folder": "Station/EPC", "typeId": "Station/EPC", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "SS1" in name or "SS2" in name:
result = {"folder": "Station/SS", "typeId": "Station/SS", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if name.startswith("S03") and "JR" in name:
result = {"folder": "Station/Chute_JR", "typeId": "Station/Chute_JR", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "JR" in name:
result = {"folder": "Station/JR", "typeId": "Station/JR", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "EN" in name:
result = {"folder": "Station/EN", "typeId": "Station/EN", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if any(kw in name for kw in ["DPM", "FIO", "SIO", "HUB"]):
for kw in ["DPM", "FIO", "SIO", "HUB"]:
if kw in name:
result = {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "TIPPER" in name:
result = {"folder": "Conveyor/Tipper", "typeId": "Conveyor/Tipper", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "EX" in name:
result = {"folder": "Conveyor/Extendo", "typeId": "Conveyor/Extendo", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "FL" in name and "CH" in name:
result = {"folder": "Chute/FL_CHUTE", "typeId": "Chute/FL_CHUTE", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "VFD" in name:
result = {"folder": "VFD", "typeId": "VFD", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "SOL" in name:
result = {"folder": "SOL", "typeId": "SOL", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
if "CH" in name:
result = {"folder": "Chute", "typeId": "Chute", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
result = {"folder": "Conveyor", "typeId": "Conveyor", "tagType": "UdtInstance", "name": name}
result.update(create_parameters(mcm_device_name))
return result
# Recursive extraction of all nested devices
def extract_all_devices(children):
devices = []
for child in children:
meta = child.get("meta", {})
name = meta.get("name")
if name:
devices.append(name)
nested = child.get("children", [])
if nested:
devices.extend(extract_all_devices(nested))
return devices
def main():
if not os.path.isdir(default_view_path):
print(f"Directory not found: {default_view_path}")
return
for folder_name in os.listdir(default_view_path):
folder_path = os.path.join(default_view_path, folder_name)
if not os.path.isdir(folder_path):
continue
view_json_path = os.path.join(folder_path, "view.json")
if not os.path.isfile(view_json_path):
print(f"No view.json in {folder_path}, skipping.")
continue
with open(view_json_path, encoding="utf-8") as f:
view = json.load(f)
children = view.get("root", {}).get("children", [])
all_device_names = extract_all_devices(children)
mcm_device_name = next((n for n in all_device_names if "MCM" in n), folder_name)
devices = []
seen_names = set()
for name in all_device_names:
if name not in seen_names:
seen_names.add(name)
classified = classify_device(name, mcm_device_name)
if classified:
devices.append(classified)
# Initialize folder structure
folders = {
"IO_BLOCK": {"FIO": [], "SIO": [], "DPM": []},
"Station": {"JR": [], "Chute_JR": [], "SS": [], "EPC": [], "EN": []},
"Photoeye": {"PE": [], "TPE": [], "LRPE": []},
"Beacon": [],
"Encoder": {"ENSH": [], "ENW": []},
"Chute": [],
"Conveyor":[],
"VFD": [],
"PRX":[],
"SOL": []
}
# Organize devices into folders
for dev in devices:
folder_path = dev["folder"].split("/")
if folder_path[0] == "IO_BLOCK":
folders["IO_BLOCK"][folder_path[1]].append(dev)
elif folder_path[0] == "Station":
folders["Station"][folder_path[1]].append(dev)
elif folder_path[0] == "SOL":
folders["SOL"].append(dev)
elif folder_path[0] == "Chute":
folders["Chute"].append(dev)
elif folder_path[0] == "Photoeye":
folders["Photoeye"][folder_path[1]].append(dev)
elif folder_path[0] == "Beacon":
folders["Beacon"].append(dev)
elif folder_path[0] == "Encoder":
folders["Encoder"][folder_path[1]].append(dev)
elif folder_path[0] == "Conveyor":
folders["Conveyor"].append(dev)
elif folder_path[0] == "VFD":
folders["VFD"].append(dev)
elif folder_path[0] == "PRX":
folders["PRX"].append(dev)
# Build output structure
output = {
"name": mcm_device_name,
"tagType": "Folder",
"tags": [
{"name": mcm_device_name, "typeId": "MCM", "tagType": "UdtInstance", "tags": []},
{
"name": "IO_BLOCK",
"tagType": "Folder",
"tags": [
{"name": "FIO", "tagType": "Folder", "tags": folders["IO_BLOCK"]["FIO"]},
{"name": "SIO", "tagType": "Folder", "tags": folders["IO_BLOCK"]["SIO"]},
{"name": "DPM", "tagType": "Folder", "tags": folders["IO_BLOCK"]["DPM"]},
],
},
{
"name": "Station",
"tagType": "Folder",
"tags": [
{"name": "JR", "tagType": "Folder", "tags": folders["Station"]["JR"]},
{"name": "Chute_JR", "tagType": "Folder", "tags": folders["Station"]["Chute_JR"]},
{"name": "SS", "tagType": "Folder", "tags": folders["Station"]["SS"]},
{"name": "EPC", "tagType": "Folder", "tags": folders["Station"]["EPC"]},
{"name": "EN", "tagType": "Folder", "tags": folders["Station"]["EN"]},
],
},
{
"name": "Photoeye",
"tagType": "Folder",
"tags": [
{"name": "PE", "tagType": "Folder", "tags": folders["Photoeye"]["PE"]},
{"name": "TPE", "tagType": "Folder", "tags": folders["Photoeye"]["TPE"]},
{"name": "LRPE", "tagType": "Folder", "tags": folders["Photoeye"]["LRPE"]},
],
},
{"name": "Chute", "tagType": "Folder", "tags": folders["Chute"]},
{
"name": "Encoder",
"tagType": "Folder",
"tags": [
{"name": "ENSH", "tagType": "Folder", "tags": folders["Encoder"]["ENSH"]},
{"name": "ENW", "tagType": "Folder", "tags": folders["Encoder"]["ENW"]},
],
},
{
"name": "Beacon",
"tagType": "Folder",
"tags": folders["Beacon"],
},
{
"name": "Conveyor",
"tagType": "Folder",
"tags": folders["Conveyor"],
},
{
"name": "VFD",
"tagType": "Folder",
"tags": folders["VFD"],
},
{
"name": "PRX",
"tagType": "Folder",
"tags": folders["PRX"],
},
{
"name": "SOL",
"tagType": "Folder",
"tags": folders["SOL"],
},
],
}
mcm_match = re.match(r'^(MCM\d+)', folder_name)
mcm_name = mcm_match.group(1) if mcm_match else folder_name
output_json_path = os.path.join(os.path.dirname(__file__), f"{mcm_name}.json")
if os.path.isfile(output_json_path):
print(f"Existing file found for {mcm_name}, merging data from folder '{folder_name}'...")
with open(output_json_path, "r", encoding="utf-8") as f:
existing_data = json.load(f)
merged_output = merge_tags(existing_data, output)
with open(output_json_path, "w", encoding="utf-8") as f:
json.dump(merged_output, f, indent=2)
print(f"Merged tags JSON updated at: {output_json_path}")
else:
with open(output_json_path, "w", encoding="utf-8") as f:
json.dump(output, f, indent=2)
print(f"New tags JSON generated for {mcm_name} from folder '{folder_name}' at: {output_json_path}")
if __name__ == "__main__":
main()

173
tags/update_tagprops.py Normal file
View File

@ -0,0 +1,173 @@
import json
import os
def get_structured_path(view_name, equipment_path, MCM):
"""
Create a structured path based on the equipment type
"""
base_path = f"System/{MCM}/"
# Check if it's a TPE (Photoeye) equipment
if "TPE" in view_name and "Photoeye" in equipment_path:
return f"{base_path}Photoeye/TPE/{view_name}"
# Check if it's a LRPE (Photoeye) equipment
elif "LRPE" in view_name and "Photoeye" in equipment_path:
return f"{base_path}Photoeye/LRPE/{view_name}"
elif "PE" in view_name and "Photoeye" in equipment_path:
return f"{base_path}Photoeye/PE/{view_name}"
# Check if it's an SIO equipment
elif "SIO" in view_name and "IO_Block" in equipment_path:
return f"{base_path}IO_Block/SIO/{view_name}"
# Check if it's an FIO equipment
elif "FIOM" in view_name and "IO_Block" in equipment_path:
return f"{base_path}IO_Block/FIO/{view_name}"
elif "DPM" in view_name and "DPM" in equipment_path:
return f"{base_path}IO_Block/DPM/{view_name}"
# Check if it's an Encoder equipment
elif "ENSH" in view_name and "Encoder" in equipment_path:
return f"{base_path}ENCODER/ENSH/{view_name}"
elif "ENW" in view_name and "Encoder" in equipment_path:
return f"{base_path}ENCODER/ENW/{view_name}"
elif "BCN" in view_name and "Beacon" in equipment_path:
return f"{base_path}Beacon/{view_name}"
elif "EPC" in view_name and "EPC" in equipment_path:
return f"{base_path}STATION/EPC/{view_name}"
elif "SS" in view_name and "SS_Button" in equipment_path:
return f"{base_path}STATION/SS/{view_name}"
elif "JR" in view_name and "S03" in view_name and "Button" in equipment_path:
return f"{base_path}STATION/Chute_JR/{view_name}"
elif "JR" in view_name and "Button" in equipment_path:
return f"{base_path}STATION/JR/{view_name}"
elif "EN" in view_name and "Button" in equipment_path:
return f"{base_path}STATION/EN/{view_name}"
elif "VFD" in view_name and "VFD" in equipment_path:
return f"{base_path}VFD/{view_name}"
elif "MCM" in view_name and "MCM" in equipment_path:
return f"{base_path}/{view_name}"
elif "Camera" in view_name and "Camera" in equipment_path:
return f"{base_path}Camera/{view_name}"
elif "Conveyor" in equipment_path:
return f"{base_path}Conveyor/{view_name}"
elif "SOL" in view_name and "Solenoid" in equipment_path:
return f"{base_path}SOL/{view_name}"
elif "PRX" in view_name and "ProxSensor" in equipment_path:
return f"{base_path}PRX/{view_name}"
elif "CH" in view_name and "Chute" in equipment_path:
return f"{base_path}Chute/{view_name}"
# We can expand this later for other equipment types
else:
return view_name
def update_tagprops_in_file(file_path):
"""
Update the first item in tagProps array for each view with structured paths
"""
try:
# Read the JSON file
with open(file_path, 'r', encoding='utf-8') as file:
data = json.load(file)
name = os.path.basename(file_path)
MCM = name.split('.')[0] # Extract MCM from filename
# Counter for updated views
updated_count = 0
# Navigate to the container with children
if 'root' in data and 'children' in data['root']:
container = data['root']['children'][0] # First child is the CoordinateContainer
if 'children' in container:
# Iterate through all views in the container
for view in container['children']:
# Check if this view has meta.name and params.tagProps
if ('meta' in view and 'name' in view['meta'] and
'props' in view and 'params' in view['props'] and
'tagProps' in view['props']['params']):
# Get the view name and equipment path
view_name = view['meta']['name']
equipment_path = view['props'].get('path', '')
# Get the structured path
structured_path = get_structured_path(view_name, equipment_path, MCM)
# Update the first item in tagProps array
if len(view['props']['params']['tagProps']) > 0:
view['props']['params']['tagProps'][0] = structured_path
updated_count += 1
print(f"Updated {view_name} -> {structured_path}")
# Write the updated data back to the file
with open(file_path, 'w', encoding='utf-8') as file:
json.dump(data, file, indent=2, ensure_ascii=False)
print(f"\nSuccessfully updated {updated_count} views in {file_path}")
except FileNotFoundError:
print(f"Error: File {file_path} not found")
except json.JSONDecodeError as e:
print(f"Error: Invalid JSON in file {file_path}: {e}")
except Exception as e:
print(f"Error: {e}")
def main():
# Find all JSON files in the current directory
json_files = [f for f in os.listdir('.') if f.endswith('.json')]
if not json_files:
print("No JSON files found in the current directory.")
return
# Display files to the user
print("Available JSON files:")
for i, f in enumerate(json_files, start=1):
print(f"{i}. {f}")
# Ask user to pick one
try:
choice = int(input("Select a file by number: ")) - 1
if choice < 0 or choice >= len(json_files):
print("Invalid choice.")
return
except ValueError:
print("Invalid input. Please enter a number.")
return
file_path = json_files[choice]
# Check if file exists (should always be true here)
if not os.path.exists(file_path):
print(f"File {file_path} not found in current directory")
return
# Update the file
update_tagprops_in_file(file_path)
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load Diff