From 48b4d84e42427bc827965d358852615ecebf5805 Mon Sep 17 00:00:00 2001 From: "b.makharadze" <81828475+bmidf@users.noreply.github.com> Date: Fri, 19 Sep 2025 10:39:48 +0400 Subject: [PATCH] Update placing DPMS and applying tags --- PLACE DPM DEVICES/device_mapping.txt | 156 --- PLACE DPMS/MCM01_COMPLETE_EXAMPLE.csv | 186 +++ .../main.py => PLACE DPMS/device_mapping.py | 0 PLACE DPMS/device_mapping.txt | 1075 +++++++++++++++++ PLACE DPMS/{main.py => dpm_mapping.py} | 0 PLACE DPMS/dpm_mapping.txt | 91 +- PLACE DPMS/extract_mcm_mappings.py | 188 +++ PLACE DPMS/multi_mcm_device_mapping.py | 315 +++++ .../resource.json | 0 .../thumbnail.png | Bin TAGS/apply-tags.py | 21 +- TAGS/generate-tags.py | 110 +- TAGS/test_generate.py | 13 + 13 files changed, 1945 insertions(+), 210 deletions(-) delete mode 100644 PLACE DPM DEVICES/device_mapping.txt create mode 100644 PLACE DPMS/MCM01_COMPLETE_EXAMPLE.csv rename PLACE DPM DEVICES/main.py => PLACE DPMS/device_mapping.py (100%) create mode 100644 PLACE DPMS/device_mapping.txt rename PLACE DPMS/{main.py => dpm_mapping.py} (100%) create mode 100644 PLACE DPMS/extract_mcm_mappings.py create mode 100644 PLACE DPMS/multi_mcm_device_mapping.py rename {PLACE DPM DEVICES => PLACE DPMS}/resource.json (100%) rename {PLACE DPM DEVICES => PLACE DPMS}/thumbnail.png (100%) create mode 100644 TAGS/test_generate.py diff --git a/PLACE DPM DEVICES/device_mapping.txt b/PLACE DPM DEVICES/device_mapping.txt deleted file mode 100644 index 7f04f07..0000000 --- a/PLACE DPM DEVICES/device_mapping.txt +++ /dev/null @@ -1,156 +0,0 @@ -UL13_8_DPM1 -UL13_1_VFD1 11.200.1.30 -UL13_2_VFD1 11.200.1.31 -UL13_3_VFD1 11.200.1.32 -UL13_4_VFD1 11.200.1.33 -UL13_5_VFD1 11.200.1.34 -UL13_6_VFD1 11.200.1.35 -UL13_7_VFD1 11.200.1.36 -UL13_8A_VFD1 11.200.1.37 -UL13_8B_VFD1 11.200.1.38 -UL13_9_VFD1 11.200.1.39 -UL13_10_VFD1 11.200.1.40 -UL13_11_VFD1 11.200.1.41 -UL14_1_EX1 11.200.1.42 -UL14_3_VFD1 11.200.1.43 -UL14_4_VFD1 11.200.1.44 -UL14_5_VFD1 11.200.1.45 -UL14_6_VFD1 11.200.1.46 -UL14_7_VFD1 11.200.1.47 -UL14_8_VFD1 11.200.1.48 -UL14_9_VFD1 11.200.1.49 -UL14_10_VFD1 11.200.1.50 -UL13_1_FIO1 11.200.1.51 -UL14_1_FIO1 11.200.1.52 -UL15_4_DPM1 -UL15_1_EX1 11.200.1.53 -UL15_3_VFD1 11.200.1.54 -UL15_4_VFD1 11.200.1.55 -UL15_5_VFD1 11.200.1.56 -UL15_6_VFD1 11.200.1.57 -UL15_7_VFD1 11.200.1.58 -UL15_8_VFD1 11.200.1.59 -UL15_9_VFD1 11.200.1.60 -UL15_10_VFD1 11.200.1.61 -UL15_11_VFD1 11.200.1.62 -UL15_1_FIO1 11.200.1.63 -UL16_2_DPM1 -UL16_1_VFD1 11.200.1.64 -UL16_2_VFD1 11.200.1.65 -UL16_4_VFD1 11.200.1.66 -UL16_5_VFD1 11.200.1.67 -UL16_6_VFD1 11.200.1.68 -UL16_7_VFD1 11.200.1.69 -UL16_8_VFD1 11.200.1.70 -UL16_9_VFD1 11.200.1.71 -UL17_1_EX1 11.200.1.72 -UL17_3_VFD1 11.200.1.73 -UL17_4_VFD1 11.200.1.74 -UL17_5_VFD1 11.200.1.75 -UL17_6_VFD1 11.200.1.76 -UL17_7_VFD1 11.200.1.77 -UL17_8_VFD1 11.200.1.78 -UL17_9_VFD1 11.200.1.79 -UL17_10_VFD1 11.200.1.80 -UL16_1_FIO1 11.200.1.81 -UL17_1_FIO1 11.200.1.82 -UL18_4_DPM1 -UL18_1_EX1 11.200.1.83 -UL18_3_VFD1 11.200.1.84 -UL18_4_VFD1 11.200.1.85 -UL18_5_VFD1 11.200.1.86 -UL18_6_VFD1 11.200.1.87 -UL18_7_VFD1 11.200.1.88 -UL18_8_VFD1 11.200.1.89 -UL18_9_VFD1 11.200.1.90 -UL18_10_VFD1 11.200.1.91 -UL18_11_VFD1 11.200.1.92 -UL18_12_VFD1 11.200.1.93 -UL18_13A_VFD1 11.200.1.94 -UL18_13B_VFD1 11.200.1.95 -UL18_14_VFD1 11.200.1.96 -UL18_15_VFD1 11.200.1.97 -UL18_16_VFD1 11.200.1.98 -UL18_1_FIO1 11.200.1.99 -UL19_2_DPM1 -UL19_1_VFD1 11.200.1.100 -UL19_2_VFD1 11.200.1.101 -UL19_3_VFD1 11.200.1.102 -UL19_4_VFD1 11.200.1.103 -UL19_5_VFD1 11.200.1.104 -UL19_6_VFD1 11.200.1.105 -UL19_7_VFD1 11.200.1.106 -UL19_8_VFD1 11.200.1.107 -UL19_9_VFD1 11.200.1.108 -UL20_1_EX1 11.200.1.109 -UL20_3_VFD1 11.200.1.110 -UL20_4_VFD1 11.200.1.111 -UL20_5_VFD1 11.200.1.112 -UL20_6_VFD1 11.200.1.113 -UL20_7_VFD1 11.200.1.114 -UL20_8_VFD1 11.200.1.115 -UL20_9_VFD1 11.200.1.116 -UL19_1_FIO1 11.200.1.117 -UL20_1_FIO1 11.200.1.118 -UL21_11_DPM1 -UL21_1_EX1 11.200.1.119 -UL21_3_VFD1 11.200.1.120 -UL21_4_VFD1 11.200.1.121 -UL21_5_VFD1 11.200.1.122 -UL21_6_VFD1 11.200.1.123 -UL21_7_VFD1 11.200.1.124 -UL21_8_VFD1 11.200.1.125 -UL21_9_VFD1 11.200.1.126 -UL21_10_VFD1 11.200.1.127 -UL21_11_VFD1 11.200.1.128 -UL21_12_VFD1 11.200.1.129 -UL21_13_VFD1 11.200.1.130 -UL21_14A_VFD1 11.200.1.131 -UL21_14B_VFD1 11.200.1.132 -UL21_15_VFD1 11.200.1.133 -UL21_16_VFD1 11.200.1.134 -UL21_17_VFD1 11.200.1.135 -UL21_1_FIO1 11.200.1.136 -PS5_7_DPM1 -PS5_1_VFD1 11.200.1.137 -PS5_2_VFD1 11.200.1.138 -PS5_3_VFD1 11.200.1.139 -PS5_4_VFD1 11.200.1.140 -PS5_5_VFD1 11.200.1.141 -PS5_6_VFD1 11.200.1.142 -PS5_7_VFD1 11.200.1.143 -PS5_8_VFD1 11.200.1.144 -PS5_9_VFD1 11.200.1.145 -PS5_10_VFD1 11.200.1.146 -PS5_11_VFD1 11.200.1.147 -PS5_12_VFD1 11.200.1.148 -PS5_13_VFD1 11.200.1.149 -PS6_7_DPM1 -PS6_1_VFD1 11.200.1.150 -PS6_2_VFD1 11.200.1.151 -PS6_3_VFD1 11.200.1.152 -PS6_4_VFD1 11.200.1.153 -PS6_5_VFD1 11.200.1.154 -PS6_6_VFD1 11.200.1.155 -PS6_7_VFD1 11.200.1.156 -PS6_8_VFD1 11.200.1.157 -PS6_9_VFD1 11.200.1.158 -PS6_10_VFD1 11.200.1.159 -PS6_11_VFD1 11.200.1.160 -PS6_12_VFD1 11.200.1.161 -PS6_13_VFD1 11.200.1.162 -PS7_7_DPM1 -PS7_1_VFD1 11.200.1.163 -PS7_2_VFD1 11.200.1.164 -PS7_3_VFD1 11.200.1.165 -PS7_4_VFD1 11.200.1.166 -PS7_5_VFD1 11.200.1.167 -PS7_6_VFD1 11.200.1.168 -PS7_7_VFD1 11.200.1.169 -PS7_8_VFD1 11.200.1.170 -PS7_9_VFD1 11.200.1.171 -PS7_10_VFD1 11.200.1.172 -PS7_11_VFD1 11.200.1.173 -PS7_12_VFD1 11.200.1.174 -PS7_13_VFD1 11.200.1.175 -PS7_14_VFD1 11.200.1.176 \ No newline at end of file diff --git a/PLACE DPMS/MCM01_COMPLETE_EXAMPLE.csv b/PLACE DPMS/MCM01_COMPLETE_EXAMPLE.csv new file mode 100644 index 0000000..6fdef90 --- /dev/null +++ b/PLACE DPMS/MCM01_COMPLETE_EXAMPLE.csv @@ -0,0 +1,186 @@ +DPM,DPM_IP,Name,PartNumber,IP +UL1_4_DPM1,11.200.1.2,UL1_1_EX1,FMH,11.200.1.30 +UL1_4_DPM1,11.200.1.2,UL1_3_VFD1,35S-6D4-P111,11.200.1.31 +UL1_4_DPM1,11.200.1.2,UL1_4_VFD1,35S-6D4-P111,11.200.1.32 +UL1_4_DPM1,11.200.1.2,UL1_5_VFD1,35S-6D3-P101,11.200.1.33 +UL1_4_DPM1,11.200.1.2,UL1_6_VFD1,35S-6D3-P101,11.200.1.34 +UL1_4_DPM1,11.200.1.2,UL1_7_VFD1,35S-6D3-P101,11.200.1.35 +UL1_4_DPM1,11.200.1.2,UL1_8_VFD1,35S-6D3-P101,11.200.1.36 +UL1_4_DPM1,11.200.1.2,UL1_9_VFD1,35S-6D4-P111,11.200.1.37 +UL1_4_DPM1,11.200.1.2,UL1_10A_VFD1,35S-6D3-P101,11.200.1.38 +UL1_4_DPM1,11.200.1.2,UL1_10B_VFD1,35S-6D3-P101,11.200.1.39 +UL1_4_DPM1,11.200.1.2,UL1_11_VFD1,35S-6D2-P101,11.200.1.40 +UL1_4_DPM1,11.200.1.2,UL1_12_VFD1,35S-6D2-P101,11.200.1.41 +UL1_4_DPM1,11.200.1.2,UL1_13_VFD1,35S-6D4-P111,11.200.1.42 +UL1_4_DPM1,11.200.1.2,UL1_3_FIO1,5032-8IOLM12DR,11.200.1.43 +UL1_4_DPM1,11.200.1.2,UL1_13_FIO1,5032-8IOLM12DR,11.200.1.216 +UL2_4_DPM1,11.200.1.3,UL2_1_EX1,FMH,11.200.1.44 +UL2_4_DPM1,11.200.1.3,UL2_3_VFD1,35S-6D4-P111,11.200.1.45 +UL2_4_DPM1,11.200.1.3,UL2_4_VFD1,35S-6D4-P111,11.200.1.46 +UL2_4_DPM1,11.200.1.3,UL2_5_VFD1,35S-6D2-P101,11.200.1.47 +UL2_4_DPM1,11.200.1.3,UL2_6_VFD1,35S-6D3-P101,11.200.1.48 +UL2_4_DPM1,11.200.1.3,UL2_7_VFD1,35S-6D3-P101,11.200.1.49 +UL2_4_DPM1,11.200.1.3,UL2_8_VFD1,35S-6D3-P101,11.200.1.50 +UL2_4_DPM1,11.200.1.3,UL2_9_VFD1,35S-6D3-P101,11.200.1.51 +UL2_4_DPM1,11.200.1.3,UL2_10_VFD1,35S-6D2-P101,11.200.1.52 +UL2_4_DPM1,11.200.1.3,UL3_1_VFD1,35S-6D2-P101,11.200.1.53 +UL2_4_DPM1,11.200.1.3,UL3_2_VFD1,35S-6D5-P111,11.200.1.54 +UL2_4_DPM1,11.200.1.3,UL3_3_VFD1,35S-6D2-P101,11.200.1.55 +UL2_4_DPM1,11.200.1.3,UL3_4_VFD1,35S-6D2-P101,11.200.1.56 +UL2_4_DPM1,11.200.1.3,UL3_5_VFD1,35S-6D3-P101,11.200.1.57 +UL2_4_DPM1,11.200.1.3,UL3_6_VFD1,35S-6D3-P101,11.200.1.58 +UL2_4_DPM1,11.200.1.3,UL3_7_VFD1,35S-6D3-P101,11.200.1.59 +UL2_4_DPM1,11.200.1.3,UL3_8_VFD1,35S-6D3-P101,11.200.1.60 +UL2_4_DPM1,11.200.1.3,UL3_9_VFD1,35S-6D2-P101,11.200.1.61 +UL2_4_DPM1,11.200.1.3,UL2_3_FIO1,5032-8IOLM12DR,11.200.1.62 +UL2_4_DPM1,11.200.1.3,UL3_2_FIO1,5032-8IOLM12DR,11.200.1.63 +UL4_4_DPM1,11.200.1.4,UL4_1_EX1,FMH,11.200.1.64 +UL4_4_DPM1,11.200.1.4,UL4_3_VFD1,35S-6D4-P111,11.200.1.65 +UL4_4_DPM1,11.200.1.4,UL4_4_VFD1,35S-6D4-P111,11.200.1.66 +UL4_4_DPM1,11.200.1.4,UL4_5_VFD1,35S-6D3-P101,11.200.1.67 +UL4_4_DPM1,11.200.1.4,UL4_6_VFD1,35S-6D3-P101,11.200.1.68 +UL4_4_DPM1,11.200.1.4,UL4_7_VFD1,35S-6D3-P101,11.200.1.69 +UL4_4_DPM1,11.200.1.4,UL4_8_VFD1,35S-6D3-P101,11.200.1.70 +UL4_4_DPM1,11.200.1.4,UL4_9_VFD1,35S-6D4-P111,11.200.1.71 +UL4_4_DPM1,11.200.1.4,UL4_10A_VFD1,35S-6D3-P101,11.200.1.72 +UL4_4_DPM1,11.200.1.4,UL4_10B_VFD1,35S-6D3-P101,11.200.1.73 +UL4_4_DPM1,11.200.1.4,UL4_11_VFD1,35S-6D2-P101,11.200.1.74 +UL4_4_DPM1,11.200.1.4,UL4_12_VFD1,35S-6D2-P101,11.200.1.75 +UL4_4_DPM1,11.200.1.4,UL4_13_VFD1,35S-6D4-P111,11.200.1.76 +UL4_4_DPM1,11.200.1.4,UL4_3_FIO1,5032-8IOLM12DR,11.200.1.77 +UL4_4_DPM1,11.200.1.4,UL4_13_FIO1,5032-8IOLM12DR,11.200.1.217 +UL5_4_DPM1,11.200.1.5,UL5_1_EX1,FMH,11.200.1.78 +UL5_4_DPM1,11.200.1.5,UL5_3_VFD1,35S-6D4-P111,11.200.1.79 +UL5_4_DPM1,11.200.1.5,UL5_4_VFD1,35S-6D4-P111,11.200.1.80 +UL5_4_DPM1,11.200.1.5,UL5_5_VFD1,35S-6D2-P101,11.200.1.81 +UL5_4_DPM1,11.200.1.5,UL5_6_VFD1,35S-6D3-P101,11.200.1.82 +UL5_4_DPM1,11.200.1.5,UL5_7_VFD1,35S-6D3-P101,11.200.1.83 +UL5_4_DPM1,11.200.1.5,UL5_8_VFD1,35S-6D3-P101,11.200.1.84 +UL5_4_DPM1,11.200.1.5,UL5_9_VFD1,35S-6D3-P101,11.200.1.85 +UL5_4_DPM1,11.200.1.5,UL5_10_VFD1,35S-6D2-P101,11.200.1.86 +UL5_4_DPM1,11.200.1.5,UL6_1_VFD1,35S-6D2-P101,11.200.1.87 +UL5_4_DPM1,11.200.1.5,UL6_2_VFD1,35S-6D5-P111,11.200.1.88 +UL5_4_DPM1,11.200.1.5,UL6_3_VFD1,35S-6D2-P101,11.200.1.89 +UL5_4_DPM1,11.200.1.5,UL6_4_VFD1,35S-6D2-P101,11.200.1.90 +UL5_4_DPM1,11.200.1.5,UL6_5_VFD1,35S-6D3-P101,11.200.1.91 +UL5_4_DPM1,11.200.1.5,UL6_6_VFD1,35S-6D3-P101,11.200.1.92 +UL5_4_DPM1,11.200.1.5,UL6_7_VFD1,35S-6D3-P101,11.200.1.93 +UL5_4_DPM1,11.200.1.5,UL6_8_VFD1,35S-6D3-P101,11.200.1.94 +UL5_4_DPM1,11.200.1.5,UL6_9_VFD1,35S-6D2-P101,11.200.1.95 +UL5_4_DPM1,11.200.1.5,UL5_3_FIO1,5032-8IOLM12DR,11.200.1.96 +UL5_4_DPM1,11.200.1.5,UL6_2_FIO1,5032-8IOLM12DR,11.200.1.97 +UL7_4_DPM1,11.200.1.6,UL7_1_EX1,FMH,11.200.1.98 +UL7_4_DPM1,11.200.1.6,UL7_3_VFD1,35S-6D4-P111,11.200.1.99 +UL7_4_DPM1,11.200.1.6,UL7_4_VFD1,35S-6D4-P111,11.200.1.100 +UL7_4_DPM1,11.200.1.6,UL7_5_VFD1,35S-6D3-P101,11.200.1.101 +UL7_4_DPM1,11.200.1.6,UL7_6_VFD1,35S-6D3-P101,11.200.1.102 +UL7_4_DPM1,11.200.1.6,UL7_7_VFD1,35S-6D3-P101,11.200.1.103 +UL7_4_DPM1,11.200.1.6,UL7_8_VFD1,35S-6D3-P101,11.200.1.104 +UL7_4_DPM1,11.200.1.6,UL7_9_VFD1,35S-6D4-P111,11.200.1.105 +UL7_4_DPM1,11.200.1.6,UL7_10A_VFD1,35S-6D3-P101,11.200.1.106 +UL7_4_DPM1,11.200.1.6,UL7_10B_VFD1,35S-6D3-P101,11.200.1.107 +UL7_4_DPM1,11.200.1.6,UL7_11_VFD1,35S-6D2-P101,11.200.1.108 +UL7_4_DPM1,11.200.1.6,UL7_12_VFD1,35S-6D2-P101,11.200.1.109 +UL7_4_DPM1,11.200.1.6,UL7_13_VFD1,35S-6D4-P111,11.200.1.110 +UL7_4_DPM1,11.200.1.6,UL7_3_FIO1,5032-8IOLM12DR,11.200.1.111 +UL7_4_DPM1,11.200.1.6,PDP1_FIO1,5032-8IOLM12DR,11.200.1.210 +UL7_4_DPM1,11.200.1.6,PDP1_PMM1,1420-V2-ENT,11.200.1.211 +UL7_4_DPM1,11.200.1.6,PDP2_FIO1,5032-8IOLM12DR,11.200.1.212 +UL7_4_DPM1,11.200.1.6,PDP2_PMM1,1420-V2-ENT,11.200.1.213 +UL7_4_DPM1,11.200.1.6,UL7_13_FIO1,5032-8IOLM12DR,11.200.1.218 +UL8_3_DPM1,11.200.1.7,UL8_1_VFD1,35S-6D2-P101,11.200.1.112 +UL8_3_DPM1,11.200.1.7,UL8_2_VFD1,35S-6D5-P111,11.200.1.113 +UL8_3_DPM1,11.200.1.7,UL8_3_VFD1,35S-6D2-P101,11.200.1.114 +UL8_3_DPM1,11.200.1.7,UL8_4_VFD1,35S-6D2-P101,11.200.1.115 +UL8_3_DPM1,11.200.1.7,UL8_5_VFD1,35S-6D3-P101,11.200.1.116 +UL8_3_DPM1,11.200.1.7,UL8_6_VFD1,35S-6D3-P101,11.200.1.117 +UL8_3_DPM1,11.200.1.7,UL8_7_VFD1,35S-6D3-P101,11.200.1.118 +UL8_3_DPM1,11.200.1.7,UL8_8_VFD1,35S-6D3-P101,11.200.1.119 +UL8_3_DPM1,11.200.1.7,UL8_9_VFD1,35S-6D2-P101,11.200.1.120 +UL8_3_DPM1,11.200.1.7,UL9_1_EX1,FMH,11.200.1.121 +UL8_3_DPM1,11.200.1.7,UL9_3_VFD1,35S-6D4-P111,11.200.1.122 +UL8_3_DPM1,11.200.1.7,UL9_4_VFD1,35S-6D4-P111,11.200.1.123 +UL8_3_DPM1,11.200.1.7,UL9_5_VFD1,35S-6D2-P101,11.200.1.124 +UL8_3_DPM1,11.200.1.7,UL9_6_VFD1,35S-6D3-P101,11.200.1.125 +UL8_3_DPM1,11.200.1.7,UL9_7_VFD1,35S-6D3-P101,11.200.1.126 +UL8_3_DPM1,11.200.1.7,UL9_8_VFD1,35S-6D3-P101,11.200.1.127 +UL8_3_DPM1,11.200.1.7,UL9_9_VFD1,35S-6D3-P101,11.200.1.128 +UL8_3_DPM1,11.200.1.7,UL9_10_VFD1,35S-6D3-P101,11.200.1.129 +UL8_3_DPM1,11.200.1.7,UL9_11_VFD1,35S-6D2-P101,11.200.1.130 +UL8_3_DPM1,11.200.1.7,UL8_2_FIO1,5032-8IOLM12DR,11.200.1.131 +UL8_3_DPM1,11.200.1.7,UL9_3_FIO1,5032-8IOLM12DR,11.200.1.132 +UL10_3_DPM1,11.200.1.8,UL10_1_VFD1,35S-6D2-P101,11.200.1.133 +UL10_3_DPM1,11.200.1.8,UL10_2_VFD1,35S-6D5-P111,11.200.1.134 +UL10_3_DPM1,11.200.1.8,UL10_3_VFD1,35S-6D2-P101,11.200.1.135 +UL10_3_DPM1,11.200.1.8,UL10_4_VFD1,35S-6D3-P101,11.200.1.136 +UL10_3_DPM1,11.200.1.8,UL10_5_VFD1,35S-6D3-P101,11.200.1.137 +UL10_3_DPM1,11.200.1.8,UL10_6_VFD1,35S-6D3-P101,11.200.1.138 +UL10_3_DPM1,11.200.1.8,UL10_7_VFD1,35S-6D3-P101,11.200.1.139 +UL10_3_DPM1,11.200.1.8,UL10_8_VFD1,35S-6D3-P101,11.200.1.140 +UL10_3_DPM1,11.200.1.8,UL10_9_VFD1,35S-6D3-P101,11.200.1.141 +UL10_3_DPM1,11.200.1.8,UL10_10_VFD1,35S-6D2-P101,11.200.1.142 +UL10_3_DPM1,11.200.1.8,UL10_2_FIO1,5032-8IOLM12DR,11.200.1.143 +UL10_3_DPM1,11.200.1.8,UL12_1_EX1,FMH,11.200.1.159 +UL10_3_DPM1,11.200.1.8,UL12_3_VFD1,35S-6D4-P111,11.200.1.160 +UL10_3_DPM1,11.200.1.8,UL12_4_VFD1,35S-6D4-P111,11.200.1.161 +UL10_3_DPM1,11.200.1.8,UL12_5_VFD1,35S-6D2-P101,11.200.1.162 +UL10_3_DPM1,11.200.1.8,UL12_6_VFD1,35S-6D3-P101,11.200.1.163 +UL10_3_DPM1,11.200.1.8,UL12_7_VFD1,35S-6D3-P101,11.200.1.164 +UL10_3_DPM1,11.200.1.8,UL12_8_VFD1,35S-6D3-P101,11.200.1.165 +UL10_3_DPM1,11.200.1.8,UL12_9_VFD1,35S-6D3-P101,11.200.1.166 +UL10_3_DPM1,11.200.1.8,UL12_10_VFD1,35S-6D2-P101,11.200.1.167 +UL10_3_DPM1,11.200.1.8,UL12_3_FIO1,5032-8IOLM12DR,11.200.1.168 +UL11_10_DPM1,11.200.1.9,UL11_1_EX1,CALJAN,11.200.1.144 +UL11_10_DPM1,11.200.1.9,UL11_3_VFD1,35S-6D4-P111,11.200.1.145 +UL11_10_DPM1,11.200.1.9,UL11_4_VFD1,35S-6D4-P111,11.200.1.146 +UL11_10_DPM1,11.200.1.9,UL11_5_VFD1,35S-6D3-P101,11.200.1.147 +UL11_10_DPM1,11.200.1.9,UL11_6_VFD1,35S-6D3-P101,11.200.1.148 +UL11_10_DPM1,11.200.1.9,UL11_7_VFD1,35S-6D3-P101,11.200.1.149 +UL11_10_DPM1,11.200.1.9,UL11_8_VFD1,35S-6D3-P101,11.200.1.150 +UL11_10_DPM1,11.200.1.9,UL11_9_VFD1,35S-6D4-P111,11.200.1.151 +UL11_10_DPM1,11.200.1.9,UL11_10A_VFD1,35S-6D3-P101,11.200.1.152 +UL11_10_DPM1,11.200.1.9,UL11_10B_VFD1,35S-6D3-P101,11.200.1.153 +UL11_10_DPM1,11.200.1.9,UL11_11_VFD1,35S-6D2-P101,11.200.1.154 +UL11_10_DPM1,11.200.1.9,UL11_12_VFD1,35S-6D2-P101,11.200.1.155 +UL11_10_DPM1,11.200.1.9,UL11_13_VFD1,35S-6D4-P111,11.200.1.156 +UL11_10_DPM1,11.200.1.9,UL11_3_FIO1,5032-8IOLM12DR,11.200.1.158 +UL11_10_DPM1,11.200.1.9,UL11_13_FIO1,5032-8IOLM12DR,11.200.1.219 +PS1_4_DPM1,11.200.1.10,PS1_1_VFD1,35S-6D2-P101,11.200.1.169 +PS1_4_DPM1,11.200.1.10,PS1_2_VFD1,35S-6D2-P101,11.200.1.170 +PS1_4_DPM1,11.200.1.10,PS1_3_VFD1,35S-6D2-P101,11.200.1.171 +PS1_4_DPM1,11.200.1.10,PS1_4_VFD1,35S-6D5-P111,11.200.1.172 +PS1_4_DPM1,11.200.1.10,PS1_5_VFD1,35S-6D4-P111,11.200.1.173 +PS1_4_DPM1,11.200.1.10,PS2_1_VFD1,35S-6D2-P101,11.200.1.174 +PS1_4_DPM1,11.200.1.10,PS2_2_VFD1,35S-6D3-P101,11.200.1.175 +PS1_4_DPM1,11.200.1.10,PS2_3_VFD1,35S-6D4-P111,11.200.1.176 +PS1_4_DPM1,11.200.1.10,PS2_4_VFD1,35S-6D2-P101,11.200.1.177 +PS1_4_DPM1,11.200.1.10,PS2_5_VFD1,35S-6D5-P111,11.200.1.178 +PS1_4_DPM1,11.200.1.10,PS2_6_VFD1,35S-6D3-P101,11.200.1.179 +PS1_4_DPM1,11.200.1.10,PDP6_FIO1,5032-8IOLM12DR,11.200.1.214 +PS1_4_DPM1,11.200.1.10,PDP6_PMM1,1420-V2-ENT,11.200.1.215 +PS3_3_DPM1,11.200.1.11,PS3_1_VFD1,35S-6D2-P101,11.200.1.180 +PS3_3_DPM1,11.200.1.11,PS3_2_VFD1,35S-6D3-P101,11.200.1.181 +PS3_3_DPM1,11.200.1.11,PS3_3_VFD1,35S-6D3-P101,11.200.1.182 +PS3_3_DPM1,11.200.1.11,PS3_4_VFD1,35S-6D2-P101,11.200.1.183 +PS3_3_DPM1,11.200.1.11,PS3_5_VFD1,35S-6D4-P111,11.200.1.184 +PS3_3_DPM1,11.200.1.11,PS3_6_VFD1,35S-6D4-P111,11.200.1.185 +PS3_3_DPM1,11.200.1.11,PS3_7_VFD1,35S-6D6-P111,11.200.1.186 +PS3_3_DPM1,11.200.1.11,PS3_8_VFD1,35S-6D3-P101,11.200.1.187 +PS3_3_DPM1,11.200.1.11,PS3_9_VFD1,35S-6D4-P111,11.200.1.188 +PS3_3_DPM1,11.200.1.11,PS3_10_VFD1,35S-6D4-P111,11.200.1.189 +PS3_3_DPM1,11.200.1.11,PS3_11_VFD1,35S-6D3-P101,11.200.1.190 +PS3_3_DPM1,11.200.1.11,PS3_12_VFD1,35S-6D3-P101,11.200.1.191 +PS4_7_DPM1,11.200.1.12,PS4_1_VFD1,35S-6D2-P101,11.200.1.192 +PS4_7_DPM1,11.200.1.12,PS4_2_VFD1,35S-6D3-P101,11.200.1.193 +PS4_7_DPM1,11.200.1.12,PS4_3_VFD1,35S-6D2-P101,11.200.1.194 +PS4_7_DPM1,11.200.1.12,PS4_4_VFD1,35S-6D3-P101,11.200.1.195 +PS4_7_DPM1,11.200.1.12,PS4_5_VFD1,35S-6D4-P111,11.200.1.196 +PS4_7_DPM1,11.200.1.12,PS4_6_VFD1,35S-6D5-P111,11.200.1.197 +PS4_7_DPM1,11.200.1.12,PS4_7_VFD1,35S-6D5-P111,11.200.1.198 +PS4_7_DPM1,11.200.1.12,PS4_8_VFD1,35S-6D4-P111,11.200.1.199 +PS4_7_DPM1,11.200.1.12,PS4_9_VFD1,35S-6D3-P101,11.200.1.200 +PS4_7_DPM1,11.200.1.12,PS4_10_VFD1,35S-6D6-P111,11.200.1.201 +PS4_7_DPM1,11.200.1.12,PS4_11_VFD1,35S-6D4-P111,11.200.1.202 +PS4_7_DPM1,11.200.1.12,PS4_12_VFD1,35S-6D3-P101,11.200.1.203 +PS4_7_DPM1,11.200.1.12,PS4_13_VFD1,35S-6D3-P101,11.200.1.204 +PS4_7_DPM1,11.200.1.12,PS4_14_VFD1,35S-6D3-P101,11.200.1.205 diff --git a/PLACE DPM DEVICES/main.py b/PLACE DPMS/device_mapping.py similarity index 100% rename from PLACE DPM DEVICES/main.py rename to PLACE DPMS/device_mapping.py diff --git a/PLACE DPMS/device_mapping.txt b/PLACE DPMS/device_mapping.txt new file mode 100644 index 0000000..fbea07e --- /dev/null +++ b/PLACE DPMS/device_mapping.txt @@ -0,0 +1,1075 @@ +MCM01 +PS1_4_DPM1 +PS1_1_VFD1 11.200.1.169 +PS1_2_VFD1 11.200.1.170 +PS1_3_VFD1 11.200.1.171 +PS1_4_VFD1 11.200.1.172 +PS1_5_VFD1 11.200.1.173 +PS2_1_VFD1 11.200.1.174 +PS2_2_VFD1 11.200.1.175 +PS2_3_VFD1 11.200.1.176 +PS2_4_VFD1 11.200.1.177 +PS2_5_VFD1 11.200.1.178 +PS2_6_VFD1 11.200.1.179 +PDP6_FIO1 11.200.1.214 +PDP6_PMM1 11.200.1.215 +PS3_3_DPM1 +PS3_1_VFD1 11.200.1.180 +PS3_2_VFD1 11.200.1.181 +PS3_3_VFD1 11.200.1.182 +PS3_4_VFD1 11.200.1.183 +PS3_5_VFD1 11.200.1.184 +PS3_6_VFD1 11.200.1.185 +PS3_7_VFD1 11.200.1.186 +PS3_8_VFD1 11.200.1.187 +PS3_9_VFD1 11.200.1.188 +PS3_10_VFD1 11.200.1.189 +PS3_11_VFD1 11.200.1.190 +PS3_12_VFD1 11.200.1.191 +PS4_7_DPM1 +PS4_1_VFD1 11.200.1.192 +PS4_2_VFD1 11.200.1.193 +PS4_3_VFD1 11.200.1.194 +PS4_4_VFD1 11.200.1.195 +PS4_5_VFD1 11.200.1.196 +PS4_6_VFD1 11.200.1.197 +PS4_7_VFD1 11.200.1.198 +PS4_8_VFD1 11.200.1.199 +PS4_9_VFD1 11.200.1.200 +PS4_10_VFD1 11.200.1.201 +PS4_11_VFD1 11.200.1.202 +PS4_12_VFD1 11.200.1.203 +PS4_13_VFD1 11.200.1.204 +PS4_14_VFD1 11.200.1.205 +UL10_3_DPM1 +UL10_1_VFD1 11.200.1.133 +UL10_2_VFD1 11.200.1.134 +UL10_3_VFD1 11.200.1.135 +UL10_4_VFD1 11.200.1.136 +UL10_5_VFD1 11.200.1.137 +UL10_6_VFD1 11.200.1.138 +UL10_7_VFD1 11.200.1.139 +UL10_8_VFD1 11.200.1.140 +UL10_9_VFD1 11.200.1.141 +UL10_10_VFD1 11.200.1.142 +UL10_2_FIO1 11.200.1.143 +UL12_1_EX1 11.200.1.159 +UL12_3_VFD1 11.200.1.160 +UL12_4_VFD1 11.200.1.161 +UL12_5_VFD1 11.200.1.162 +UL12_6_VFD1 11.200.1.163 +UL12_7_VFD1 11.200.1.164 +UL12_8_VFD1 11.200.1.165 +UL12_9_VFD1 11.200.1.166 +UL12_10_VFD1 11.200.1.167 +UL12_3_FIO1 11.200.1.168 +UL11_10_DPM1 +UL11_1_EX1 11.200.1.144 +UL11_3_VFD1 11.200.1.145 +UL11_4_VFD1 11.200.1.146 +UL11_5_VFD1 11.200.1.147 +UL11_6_VFD1 11.200.1.148 +UL11_7_VFD1 11.200.1.149 +UL11_8_VFD1 11.200.1.150 +UL11_9_VFD1 11.200.1.151 +UL11_10A_VFD1 11.200.1.152 +UL11_10B_VFD1 11.200.1.153 +UL11_11_VFD1 11.200.1.154 +UL11_12_VFD1 11.200.1.155 +UL11_13_VFD1 11.200.1.156 +UL11_3_FIO1 11.200.1.158 +UL11_13_FIO1 11.200.1.219 +UL1_4_DPM1 +UL1_1_EX1 11.200.1.30 +UL1_3_VFD1 11.200.1.31 +UL1_4_VFD1 11.200.1.32 +UL1_5_VFD1 11.200.1.33 +UL1_6_VFD1 11.200.1.34 +UL1_7_VFD1 11.200.1.35 +UL1_8_VFD1 11.200.1.36 +UL1_9_VFD1 11.200.1.37 +UL1_10A_VFD1 11.200.1.38 +UL1_10B_VFD1 11.200.1.39 +UL1_11_VFD1 11.200.1.40 +UL1_12_VFD1 11.200.1.41 +UL1_13_VFD1 11.200.1.42 +UL1_3_FIO1 11.200.1.43 +UL1_13_FIO1 11.200.1.216 +UL2_4_DPM1 +UL2_1_EX1 11.200.1.44 +UL2_3_VFD1 11.200.1.45 +UL2_4_VFD1 11.200.1.46 +UL2_5_VFD1 11.200.1.47 +UL2_6_VFD1 11.200.1.48 +UL2_7_VFD1 11.200.1.49 +UL2_8_VFD1 11.200.1.50 +UL2_9_VFD1 11.200.1.51 +UL2_10_VFD1 11.200.1.52 +UL3_1_VFD1 11.200.1.53 +UL3_2_VFD1 11.200.1.54 +UL3_3_VFD1 11.200.1.55 +UL3_4_VFD1 11.200.1.56 +UL3_5_VFD1 11.200.1.57 +UL3_6_VFD1 11.200.1.58 +UL3_7_VFD1 11.200.1.59 +UL3_8_VFD1 11.200.1.60 +UL3_9_VFD1 11.200.1.61 +UL2_3_FIO1 11.200.1.62 +UL3_2_FIO1 11.200.1.63 +UL4_4_DPM1 +UL4_1_EX1 11.200.1.64 +UL4_3_VFD1 11.200.1.65 +UL4_4_VFD1 11.200.1.66 +UL4_5_VFD1 11.200.1.67 +UL4_6_VFD1 11.200.1.68 +UL4_7_VFD1 11.200.1.69 +UL4_8_VFD1 11.200.1.70 +UL4_9_VFD1 11.200.1.71 +UL4_10A_VFD1 11.200.1.72 +UL4_10B_VFD1 11.200.1.73 +UL4_11_VFD1 11.200.1.74 +UL4_12_VFD1 11.200.1.75 +UL4_13_VFD1 11.200.1.76 +UL4_3_FIO1 11.200.1.77 +UL4_13_FIO1 11.200.1.217 +UL5_4_DPM1 +UL5_1_EX1 11.200.1.78 +UL5_3_VFD1 11.200.1.79 +UL5_4_VFD1 11.200.1.80 +UL5_5_VFD1 11.200.1.81 +UL5_6_VFD1 11.200.1.82 +UL5_7_VFD1 11.200.1.83 +UL5_8_VFD1 11.200.1.84 +UL5_9_VFD1 11.200.1.85 +UL5_10_VFD1 11.200.1.86 +UL6_1_VFD1 11.200.1.87 +UL6_2_VFD1 11.200.1.88 +UL6_3_VFD1 11.200.1.89 +UL6_4_VFD1 11.200.1.90 +UL6_5_VFD1 11.200.1.91 +UL6_6_VFD1 11.200.1.92 +UL6_7_VFD1 11.200.1.93 +UL6_8_VFD1 11.200.1.94 +UL6_9_VFD1 11.200.1.95 +UL5_3_FIO1 11.200.1.96 +UL6_2_FIO1 11.200.1.97 +UL7_4_DPM1 +UL7_1_EX1 11.200.1.98 +UL7_3_VFD1 11.200.1.99 +UL7_4_VFD1 11.200.1.100 +UL7_5_VFD1 11.200.1.101 +UL7_6_VFD1 11.200.1.102 +UL7_7_VFD1 11.200.1.103 +UL7_8_VFD1 11.200.1.104 +UL7_9_VFD1 11.200.1.105 +UL7_10A_VFD1 11.200.1.106 +UL7_10B_VFD1 11.200.1.107 +UL7_11_VFD1 11.200.1.108 +UL7_12_VFD1 11.200.1.109 +UL7_13_VFD1 11.200.1.110 +UL7_3_FIO1 11.200.1.111 +PDP1_FIO1 11.200.1.210 +PDP1_PMM1 11.200.1.211 +PDP2_FIO1 11.200.1.212 +PDP2_PMM1 11.200.1.213 +UL7_13_FIO1 11.200.1.218 +UL8_3_DPM1 +UL8_1_VFD1 11.200.1.112 +UL8_2_VFD1 11.200.1.113 +UL8_3_VFD1 11.200.1.114 +UL8_4_VFD1 11.200.1.115 +UL8_5_VFD1 11.200.1.116 +UL8_6_VFD1 11.200.1.117 +UL8_7_VFD1 11.200.1.118 +UL8_8_VFD1 11.200.1.119 +UL8_9_VFD1 11.200.1.120 +UL9_1_EX1 11.200.1.121 +UL9_3_VFD1 11.200.1.122 +UL9_4_VFD1 11.200.1.123 +UL9_5_VFD1 11.200.1.124 +UL9_6_VFD1 11.200.1.125 +UL9_7_VFD1 11.200.1.126 +UL9_8_VFD1 11.200.1.127 +UL9_9_VFD1 11.200.1.128 +UL9_10_VFD1 11.200.1.129 +UL9_11_VFD1 11.200.1.130 +UL8_2_FIO1 11.200.1.131 +UL9_3_FIO1 11.200.1.132 +MCM02 +PS5_7_DPM1 +PS5_1_VFD1 11.200.1.141 +PS5_2_VFD1 11.200.1.142 +PS5_3_VFD1 11.200.1.143 +PS5_4_VFD1 11.200.1.144 +PS5_5_VFD1 11.200.1.145 +PS5_6_VFD1 11.200.1.146 +PS5_7_VFD1 11.200.1.147 +PS5_8_VFD1 11.200.1.148 +PS5_9_VFD1 11.200.1.149 +PS5_10_VFD1 11.200.1.150 +PS5_11_VFD1 11.200.1.151 +PS5_12_VFD1 11.200.1.152 +PS5_13_VFD1 11.200.1.153 +PS6_7_DPM1 +PS6_1_VFD1 11.200.1.154 +PS6_2_VFD1 11.200.1.155 +PS6_3_VFD1 11.200.1.156 +PS6_4_VFD1 11.200.1.157 +PS6_5_VFD1 11.200.1.158 +PS6_6_VFD1 11.200.1.159 +PS6_7_VFD1 11.200.1.160 +PS6_8_VFD1 11.200.1.161 +PS6_9_VFD1 11.200.1.162 +PS6_10_VFD1 11.200.1.163 +PS6_11_VFD1 11.200.1.164 +PS6_12_VFD1 11.200.1.165 +PS6_13_VFD1 11.200.1.166 +PS7_7_DPM1 +PS7_1_VFD1 11.200.1.167 +PS7_2_VFD1 11.200.1.168 +PS7_3_VFD1 11.200.1.169 +PS7_4_VFD1 11.200.1.170 +PS7_5_VFD1 11.200.1.171 +PS7_6_VFD1 11.200.1.172 +PS7_7_VFD1 11.200.1.173 +PS7_8_VFD1 11.200.1.174 +PS7_9_VFD1 11.200.1.175 +PS7_10_VFD1 11.200.1.176 +PS7_11_VFD1 11.200.1.177 +PS7_12_VFD1 11.200.1.178 +PS7_13_VFD1 11.200.1.179 +PS7_14_VFD1 11.200.1.180 +UL13_8_DPM1 +UL13_1_VFD1 11.200.1.30 +UL13_2_VFD1 11.200.1.31 +UL13_3_VFD1 11.200.1.32 +UL13_4_VFD1 11.200.1.33 +UL13_5_VFD1 11.200.1.34 +UL13_6_VFD1 11.200.1.35 +UL13_7_VFD1 11.200.1.36 +UL13_8_VFD1 11.200.1.37 +UL13_9A_VFD1 11.200.1.38 +UL13_9B_VFD1 11.200.1.39 +UL13_10_VFD1 11.200.1.40 +UL13_11_VFD1 11.200.1.41 +UL13_12_VFD1 11.200.1.42 +UL14_1_EX1 11.200.1.43 +UL14_3_VFD1 11.200.1.44 +UL14_4_VFD1 11.200.1.45 +UL14_5_VFD1 11.200.1.46 +UL14_6_VFD1 11.200.1.47 +UL14_7_VFD1 11.200.1.48 +UL14_8_VFD1 11.200.1.49 +UL14_9_VFD1 11.200.1.50 +UL14_10_VFD1 11.200.1.51 +UL13_2_FIO1 11.200.1.52 +UL14_3_FIO1 11.200.1.53 +UL15_4_DPM1 +UL15_1_EX1 11.200.1.54 +UL15_3_VFD1 11.200.1.55 +UL15_4_VFD1 11.200.1.56 +UL15_5_VFD1 11.200.1.57 +UL15_6_VFD1 11.200.1.58 +UL15_7_VFD1 11.200.1.59 +UL15_8_VFD1 11.200.1.60 +UL15_9_VFD1 11.200.1.61 +UL15_10_VFD1 11.200.1.62 +UL15_11_VFD1 11.200.1.63 +UL15_3_FIO1 11.200.1.64 +UL13_12_FIO1 11.200.1.196 +UL16_2_DPM1 +UL16_1_VFD1 11.200.1.65 +UL16_2_VFD1 11.200.1.66 +UL16_3_VFD1 11.200.1.67 +UL16_4_VFD1 11.200.1.68 +UL16_5_VFD1 11.200.1.69 +UL16_6_VFD1 11.200.1.70 +UL16_7_VFD1 11.200.1.71 +UL16_8_VFD1 11.200.1.72 +UL16_9_VFD1 11.200.1.73 +UL17_1_EX1 11.200.1.74 +UL17_3_VFD1 11.200.1.75 +UL17_4_VFD1 11.200.1.76 +UL17_5_VFD1 11.200.1.77 +UL17_6_VFD1 11.200.1.78 +UL17_7_VFD1 11.200.1.79 +UL17_8_VFD1 11.200.1.80 +UL17_9_VFD1 11.200.1.81 +UL17_10_VFD1 11.200.1.82 +UL16_2_FIO1 11.200.1.83 +UL17_3_FIO1 11.200.1.84 +UL18_4_DPM1 +UL18_1_EX1 11.200.1.85 +UL18_3_VFD1 11.200.1.86 +UL18_4_VFD1 11.200.1.87 +UL18_5_VFD1 11.200.1.88 +UL18_6_VFD1 11.200.1.89 +UL18_7_VFD1 11.200.1.90 +UL18_8_VFD1 11.200.1.91 +UL18_9_VFD1 11.200.1.92 +UL18_10_VFD1 11.200.1.93 +UL18_11_VFD1 11.200.1.94 +UL18_12_VFD1 11.200.1.95 +UL18_13A_VFD1 11.200.1.96 +UL18_13B_VFD1 11.200.1.97 +UL18_14_VFD1 11.200.1.98 +UL18_15_VFD1 11.200.1.99 +UL18_16_VFD1 11.200.1.100 +UL18_3_FIO1 11.200.1.101 +PDP3_FIO1 11.200.1.190 +PDP3_PMM1 11.200.1.191 +PDP4_FIO1 11.200.1.192 +PDP4_PMM1 11.200.1.193 +UL18_16_FIO1 11.200.1.197 +UL19_2_DPM1 +UL19_1_VFD1 11.200.1.102 +UL19_2_VFD1 11.200.1.103 +UL19_3_VFD1 11.200.1.104 +UL19_4_VFD1 11.200.1.105 +UL19_5_VFD1 11.200.1.106 +UL19_6_VFD1 11.200.1.107 +UL19_7_VFD1 11.200.1.108 +UL19_8_VFD1 11.200.1.109 +UL19_9_VFD1 11.200.1.110 +UL20_1_EX1 11.200.1.111 +UL20_3_VFD1 11.200.1.112 +UL20_4_VFD1 11.200.1.113 +UL20_5_VFD1 11.200.1.114 +UL20_6_VFD1 11.200.1.115 +UL20_7_VFD1 11.200.1.116 +UL20_8_VFD1 11.200.1.117 +UL20_9_VFD1 11.200.1.118 +UL20_10_VFD1 11.200.1.119 +UL20_11_VFD1 11.200.1.120 +UL19_2_FIO1 11.200.1.121 +UL20_3_FIO1 11.200.1.122 +UL21_11_DPM1 +UL21_1_EX1 11.200.1.123 +UL21_3_VFD1 11.200.1.124 +UL21_4_VFD1 11.200.1.125 +UL21_5_VFD1 11.200.1.126 +UL21_6_VFD1 11.200.1.127 +UL21_7_VFD1 11.200.1.128 +UL21_8_VFD1 11.200.1.129 +UL21_9_VFD1 11.200.1.130 +UL21_10_VFD1 11.200.1.131 +UL21_11_VFD1 11.200.1.132 +UL21_12_VFD1 11.200.1.133 +UL21_13_VFD1 11.200.1.134 +UL21_14A_VFD1 11.200.1.135 +UL21_14B_VFD1 11.200.1.136 +UL21_15_VFD1 11.200.1.137 +UL21_16_VFD1 11.200.1.138 +UL21_17_VFD1 11.200.1.139 +UL21_3_FIO1 11.200.1.140 +PDP7_FIO1 11.200.1.194 +PDP7_PMM1 11.200.1.195 +UL21_17_FIO1 11.200.1.198 +MCM03 +NCP1_1_DPM1 +UL1_14_VFD1 11.200.1.30 +UL1_15_VFD1 11.200.1.31 +UL1_16_VFD1 11.200.1.32 +UL1_17_VFD1 11.200.1.33 +UL1_18_VFD1 11.200.1.34 +UL1_19_VFD1 11.200.1.35 +UL1_20_VFD1 11.200.1.36 +UL4_14_VFD1 11.200.1.37 +UL4_15_VFD1 11.200.1.38 +UL4_16_VFD1 11.200.1.39 +UL4_17_VFD1 11.200.1.40 +UL4_18_VFD1 11.200.1.41 +UL4_19_VFD1 11.200.1.42 +UL4_20_VFD1 11.200.1.43 +NCP1_1_FIO1 11.200.1.44 +NCP1_2_DPM1 +UL7_14_VFD1 11.200.1.45 +UL7_15_VFD1 11.200.1.46 +UL7_16_VFD1 11.200.1.47 +UL7_17_VFD1 11.200.1.48 +UL7_18_VFD1 11.200.1.49 +UL7_19_VFD1 11.200.1.50 +UL7_20_VFD1 11.200.1.51 +UL11_14_VFD1 11.200.1.52 +UL11_15_VFD1 11.200.1.53 +UL11_16_VFD1 11.200.1.54 +UL11_17_VFD1 11.200.1.55 +UL11_18_VFD1 11.200.1.56 +UL11_19_VFD1 11.200.1.57 +UL11_20_VFD1 11.200.1.58 +NCP1_2_FIO1 11.200.1.59 +NCP1_3_DPM1 +UL13_13_VFD1 11.200.1.60 +UL13_14_VFD1 11.200.1.61 +UL13_15_VFD1 11.200.1.62 +UL13_16_VFD1 11.200.1.63 +UL13_17_VFD1 11.200.1.64 +UL13_18_VFD1 11.200.1.65 +UL13_19_VFD1 11.200.1.66 +UL18_17_VFD1 11.200.1.67 +UL18_18_VFD1 11.200.1.68 +UL18_19_VFD1 11.200.1.69 +UL18_20_VFD1 11.200.1.70 +UL18_21_VFD1 11.200.1.71 +UL18_22_VFD1 11.200.1.72 +UL18_23_VFD1 11.200.1.73 +NCP1_3_FIO1 11.200.1.74 +PDP5_FIO1 11.200.1.100 +PDP5_PMM1 11.200.1.101 +NCP1_5_DPM1 +UL21_18_VFD1 11.200.1.75 +UL21_19_VFD1 11.200.1.76 +UL21_20_VFD1 11.200.1.77 +UL21_21_VFD1 11.200.1.78 +UL21_22_VFD1 11.200.1.79 +UL21_23_VFD1 11.200.1.80 +UL21_24_VFD1 11.200.1.81 +NCP1_1_VFD1 11.200.1.82 +NCP1_2_VFD1 11.200.1.83 +NCP1_3_VFD1 11.200.1.84 +NCP1_4_VFD1 11.200.1.85 +NCP1_5_VFD1 11.200.1.86 +NCP1_6_VFD1 11.200.1.87 +NCP1_7_VFD1 11.200.1.88 +NCP1_8_VFD1 11.200.1.89 +NCP1_8_FIO1 11.200.1.90 +MCM04 +FL1034_2_DPM1 +FL1014_2_VFD1 11.200.1.72 +FL1014_4_EX1 11.200.1.73 +FL1018_2_VFD1 11.200.1.74 +FL1018_4_EX1 11.200.1.75 +FL1022_2_VFD1 11.200.1.76 +FL1022_4_EX1 11.200.1.77 +FL1026_2_VFD1 11.200.1.78 +FL1026_4_EX1 11.200.1.79 +FL1034_2_VFD1 11.200.1.80 +FL1034_4_EX1 11.200.1.81 +FL1038_2_VFD1 11.200.1.82 +FL1038_4_EX1 11.200.1.83 +FL3016_2_DPM1 +FL3012_2_VFD1 11.200.1.84 +FL3012_4_EX1 11.200.1.85 +FL3016_2_VFD1 11.200.1.86 +FL3016_4_EX1 11.200.1.87 +FL3020_2_VFD1 11.200.1.88 +FL3020_4_EX1 11.200.1.89 +FL3024_2_VFD1 11.200.1.90 +FL3024_4_EX1 11.200.1.91 +PRS3_5_DPM1 +PRS4_1_VFD1 11.200.1.30 +PRS4_2_VFD1 11.200.1.31 +PRS3_2B_VFD1 11.200.1.32 +PRS3_3B_VFD1 11.200.1.33 +PRS3_2A_VFD1 11.200.1.34 +PRS3_3A_VFD1 11.200.1.35 +PRS3_5_VFD1 11.200.1.36 +PS11_1_VFD1 11.200.1.37 +PS11_2_VFD1 11.200.1.38 +PS11_3_VFD1 11.200.1.39 +PS11_4_VFD1 11.200.1.40 +PRS3_2A_FIO1 11.200.1.41 +PRS3_2B_FIO1 11.200.1.42 +PRS3_4CH_FIO1 11.200.1.43 +PRS4_2_FIO1 11.200.1.44 +PS11_1_FIO1 11.200.1.45 +PS11_3_FIO1 11.200.1.46 +PS11_4_FIO1 11.200.1.47 +PRS3_6_MDR1 11.200.1.230 +PS10_2_DPM1 +PS10_1_VFD1 11.200.1.56 +PS10_2_VFD1 11.200.1.57 +PS10_3_VFD1 11.200.1.58 +PS10_5_VFD1 11.200.1.59 +ULC5_1_ST1 11.200.1.60 +ULC5_3_VFD1 11.200.1.61 +ULC6_1_ST1 11.200.1.62 +ULC6_3_VFD1 11.200.1.63 +ULC7_1_ST1 11.200.1.64 +ULC7_3_VFD1 11.200.1.65 +ULC8_1_ST1 11.200.1.66 +ULC8_3_VFD1 11.200.1.67 +PS10_1_FIO1 11.200.1.68 +PS10_5_FIO1 11.200.1.69 +PS10_5_FIO2 11.200.1.70 +PS10_5_SIO1 11.200.1.71 +PS11_7_DPM1 +PS11_6_VFD1 11.200.1.48 +PS11_7_VFD1 11.200.1.49 +PS11_8_VFD1 11.200.1.50 +PS11_9_VFD1 11.200.1.51 +PS11_11_VFD1 11.200.1.52 +PS11_7_FIO1 11.200.1.53 +PS11_8_SIO1 11.200.1.54 +PS11_11_FIO1 11.200.1.55 +PS11_11_FIO2 11.200.1.93 +PS11_11_FIO3 11.200.1.94 +PDP9_FIO1 11.200.1.220 +PDP9_PMM1 11.200.1.221 +PDP10_FIO1 11.200.1.222 +PDP10_PMM1 11.200.1.223 +VSA_DPM1 +S011003_ZMX1 11.200.1.100 +S011005_ZMX1 11.200.1.101 +S011007_ZMX1 11.200.1.102 +S011009_ZMX1 11.200.1.103 +S011011_ZMX1 11.200.1.104 +S011013_ZMX1 11.200.1.105 +S011017_ZMX1 11.200.1.106 +S011019_ZMX1 11.200.1.107 +S011021_ZMX1 11.200.1.108 +S011023_ZMX1 11.200.1.109 +S011025_ZMX1 11.200.1.110 +VSA_DPM1_FIO1 11.200.1.111 +VSA_DPM1_FIO2 11.200.1.112 +VSA_DPM1_FIO3 11.200.1.113 +VSA_DPM1_FIO4 11.200.1.114 +VSA_DPM1_FIO5 11.200.1.115 +VSA_DPM1_FIO6 11.200.1.116 +VSA_DPM1_FIO7 11.200.1.117 +VSA_DPM1_FIO8 11.200.1.118 +VSA_DPM2 +S011033_ZMX1 11.200.1.119 +S011035_ZMX1 11.200.1.120 +S011037_ZMX1 11.200.1.121 +S011039_ZMX1 11.200.1.122 +S011041_ZMX1 11.200.1.123 +S011043_ZMX1 11.200.1.124 +S011047_ZMX1 11.200.1.125 +S011049_ZMX1 11.200.1.126 +S011051_ZMX1 11.200.1.127 +S011053_ZMX1 11.200.1.128 +S011055_ZMX1 11.200.1.129 +S011057_ZMX1 11.200.1.130 +VSA_DPM2_FIO1 11.200.1.131 +VSA_DPM2_FIO2 11.200.1.132 +VSA_DPM2_FIO3 11.200.1.133 +VSA_DPM2_FIO4 11.200.1.134 +VSA_DPM2_FIO5 11.200.1.135 +VSA_DPM2_FIO6 11.200.1.136 +VSA_DPM2_FIO7 11.200.1.137 +S011078_ZMX1 11.200.1.227 +S011080_ZMX1 11.200.1.228 +S011082_ZMX1 11.200.1.229 +S011084_ZMX1 11.200.1.230 +S011086_ZMX1 11.200.1.231 +VSA_DPM3 +S011067_ZMX1 11.200.1.138 +S011069_ZMX1 11.200.1.139 +S011071_ZMX1 11.200.1.140 +S011073_ZMX1 11.200.1.141 +S011075_ZMX1 11.200.1.142 +S011077_ZMX1 11.200.1.143 +S011079_ZMX1 11.200.1.144 +S011081_ZMX1 11.200.1.145 +S011083_ZMX1 11.200.1.146 +S011085_ZMX1 11.200.1.147 +S011087_ZMX1 11.200.1.148 +S011089_ZMX1 11.200.1.149 +S011091_ZMX1 11.200.1.150 +S011095_ZMX1 11.200.1.151 +S011097_ZMX1 11.200.1.152 +S011099_ZMX1 11.200.1.153 +S011101_ZMX1 11.200.1.154 +VSA_DPM3_FIO1 11.200.1.155 +VSA_DPM3_FIO2 11.200.1.156 +VSA_DPM3_FIO3 11.200.1.157 +VSA_DPM3_FIO4 11.200.1.158 +VSA_DPM3_FIO5 11.200.1.159 +VSA_DPM3_FIO6 11.200.1.224 +VSA_DPM3_FIO7 11.200.1.226 +VSC_DPM1 +S013005_ZMX1 11.200.1.160 +S013007_ZMX1 11.200.1.161 +S013009_ZMX1 11.200.1.162 +S013011_ZMX1 11.200.1.163 +S013013_ZMX1 11.200.1.164 +S013015_ZMX1 11.200.1.165 +S013017_ZMX1 11.200.1.166 +S013021_ZMX1 11.200.1.167 +S013023_ZMX1 11.200.1.168 +S013025_ZMX1 11.200.1.169 +S013027_ZMX1 11.200.1.170 +S013031_ZMX1 11.200.1.171 +VSC_DPM1_FIO1 11.200.1.172 +VSC_DPM1_FIO3 11.200.1.173 +VSC_DPM1_FIO4 11.200.1.174 +VSC_DPM1_FIO5 11.200.1.175 +VSC_DPM1_FIO6 11.200.1.176 +VSC_DPM1_FIO7 11.200.1.177 +VSC_DPM1_FIO8 11.200.1.178 +VSC_DPM1_FIO2 11.200.1.225 +VSC_DPM2 +S013037_ZMX1 11.200.1.179 +S013039_ZMX1 11.200.1.180 +S013041_ZMX1 11.200.1.181 +S013043_ZMX1 11.200.1.182 +S013045_ZMX1 11.200.1.183 +S013047_ZMX1 11.200.1.184 +S013049_ZMX1 11.200.1.185 +S013053_ZMX1 11.200.1.186 +S013055_ZMX1 11.200.1.187 +S013057_ZMX1 11.200.1.188 +S013059_ZMX1 11.200.1.189 +S013063_ZMX1 11.200.1.190 +VSC_DPM2_FIO1 11.200.1.191 +VSC_DPM2_FIO2 11.200.1.192 +VSC_DPM2_FIO3 11.200.1.193 +VSC_DPM2_FIO4 11.200.1.194 +VSC_DPM2_FIO5 11.200.1.195 +VSC_DPM2_FIO6 11.200.1.196 +VSC_DPM2_FIO7 11.200.1.197 +VSC_DPM2_FIO8 11.200.1.198 +VSC_DPM3 +S013065_ZMX1 11.200.1.199 +S013067_ZMX1 11.200.1.200 +S013071_ZMX1 11.200.1.201 +S013073_ZMX1 11.200.1.202 +S013075_ZMX1 11.200.1.203 +S013077_ZMX1 11.200.1.204 +S013079_ZMX1 11.200.1.205 +S013081_ZMX1 11.200.1.206 +S013083_ZMX1 11.200.1.207 +S013087_ZMX1 11.200.1.208 +S013089_ZMX1 11.200.1.209 +S013091_ZMX1 11.200.1.210 +S013093_ZMX1 11.200.1.211 +VSC_DPM3_FIO1 11.200.1.212 +VSC_DPM3_FIO2 11.200.1.213 +VSC_DPM3_FIO3 11.200.1.214 +VSC_DPM3_FIO4 11.200.1.215 +VSC_DPM3_FIO5 11.200.1.216 +VSC_DPM3_FIO6 11.200.1.217 +VSC_DPM3_FIO7 11.200.1.218 +VSC_DPM3_FIO8 11.200.1.219 +MCM05 +FL2086_DPM1 +FL2074_2_VFD1 11.200.1.65 +FL2074_4_EX1 11.200.1.66 +FL2078_2_VFD1 11.200.1.67 +FL2078_4_EX1 11.200.1.68 +FL2086_2_VFD1 11.200.1.69 +FL2086_4_EX1 11.200.1.70 +FL2090_2_VFD1 11.200.1.71 +FL2090_4_EX1 11.200.1.72 +FL2094_2_VFD1 11.200.1.73 +FL2094_4_EX1 11.200.1.74 +FL4070_DPM1 +FL4082_2_VFD1 11.200.1.75 +FL4082_4_EX1 11.200.1.76 +FL4078_2_VFD1 11.200.1.77 +FL4078_4_EX1 11.200.1.78 +FL4074_2_VFD1 11.200.1.79 +FL4074_4_EX1 11.200.1.80 +FL4070_2_VFD1 11.200.1.81 +FL4070_4_EX1 11.200.1.82 +FL4066_2_VFD1 11.200.1.83 +FL4066_4_EX1 11.200.1.84 +PRS1_3_DPM1 +PRS2_1_VFD1 11.200.1.30 +PRS1_2A_VFD1 11.200.1.31 +PRS1_2B_VFD1 11.200.1.32 +PRS1_3_VFD1 11.200.1.33 +PRS1_4_VFD1 11.200.1.34 +PRS1_6_VFD1 11.200.1.35 +PS8_9_VFD1 11.200.1.36 +PS8_11_VFD1 11.200.1.37 +PRS1_1ACH_FIO1 11.200.1.38 +PRS1_1BCH_FIO1 11.200.1.39 +PRS1_4_FIO1 11.200.1.40 +PS8_1_FIO1 11.200.1.41 +PS8_1_FIO2 11.200.1.42 +PS8_5_DPM1 +ULC1_1_VFD1 11.200.1.43 +ULC1_3_VFD1 11.200.1.44 +ULC2_1_VFD1 11.200.1.45 +ULC2_3_VFD1 11.200.1.46 +ULC3_1_VFD1 11.200.1.47 +ULC3_3_VFD1 11.200.1.48 +ULC4_1_VFD1 11.200.1.49 +ULC4_3_VFD1 11.200.1.50 +PS8_1_VFD1 11.200.1.51 +PS8_2_VFD1 11.200.1.52 +PS8_4_VFD1 11.200.1.53 +PS8_5_VFD1 11.200.1.54 +PS8_6_VFD1 11.200.1.55 +PS8_8_VFD1 11.200.1.56 +PS9_2_VFD1 11.200.1.57 +PS9_3_VFD1 11.200.1.58 +PS8_11_FIO1 11.200.1.59 +PS8_11_FIO2 11.200.1.60 +PS8_4_SIO1 11.200.1.61 +PS8_5_FIO1 11.200.1.62 +PS9_3_FIO1 11.200.1.63 +PS9_3_FIO2 11.200.1.64 +PS8_9_FIO1 11.200.1.196 +PDP11_FIO1 11.200.1.197 +VSB_DPM1 +S012001_ZMX1 11.200.1.139 +S012003_ZMX1 11.200.1.140 +S012005_ZMX1 11.200.1.141 +S012007_ZMX1 11.200.1.142 +S012009_ZMX1 11.200.1.143 +S012011_ZMX1 11.200.1.144 +S012013_ZMX1 11.200.1.145 +S012015_ZMX1 11.200.1.146 +S012019_ZMX1 11.200.1.147 +S012021_ZMX1 11.200.1.148 +S012023_ZMX1 11.200.1.149 +S012025_ZMX1 11.200.1.150 +S012027_ZMX1 11.200.1.151 +S012029_ZMX1 11.200.1.152 +S012031_ZMX1 11.200.1.153 +VSB_DPM1_FIO1 11.200.1.154 +VSB_DPM1_FIO2 11.200.1.155 +VSB_DPM1_FIO3 11.200.1.156 +VSB_DPM1_FIO4 11.200.1.157 +VSB_DPM1_FIO5 11.200.1.158 +VSB_DPM1_FIO6 11.200.1.159 +VSB_DPM1_FIO7 11.200.1.160 +VSB_DPM1_FIO8 11.200.1.161 +VSB_DPM2 +S012037_ZMX1 11.200.1.162 +S012039_ZMX1 11.200.1.163 +S012041_ZMX1 11.200.1.164 +S012043_ZMX1 11.200.1.165 +S012045_ZMX1 11.200.1.166 +S012047_ZMX1 11.200.1.167 +S012049_ZMX1 11.200.1.168 +S012053_ZMX1 11.200.1.169 +S012055_ZMX1 11.200.1.170 +S012057_ZMX1 11.200.1.171 +S012059_ZMX1 11.200.1.172 +S012061_ZMX1 11.200.1.173 +S012063_ZMX1 11.200.1.174 +VSB_DPM2_FIO1 11.200.1.175 +VSB_DPM2_FIO2 11.200.1.176 +VSB_DPM2_FIO3 11.200.1.177 +VSB_DPM2_FIO4 11.200.1.178 +VSB_DPM2_FIO5 11.200.1.179 +VSB_DPM2_FIO6 11.200.1.180 +VSB_DPM2_FIO7 11.200.1.181 +VSB_DPM2_FIO8 11.200.1.182 +PDP11_PMM1 11.200.1.198 +VSB_DPM3 +S012065_ZMX1 11.200.1.183 +S012069_ZMX1 11.200.1.184 +S012071_ZMX1 11.200.1.185 +S012073_ZMX1 11.200.1.186 +S012075_ZMX1 11.200.1.187 +S012077_ZMX1 11.200.1.188 +S012079_ZMX1 11.200.1.189 +VSB_DPM3_FIO1 11.200.1.190 +VSB_DPM3_FIO2 11.200.1.191 +VSB_DPM3_FIO3 11.200.1.192 +VSB_DPM3_FIO4 11.200.1.193 +VSB_DPM3_FIO6 11.200.1.194 +VSB_DPM3_FIO8 11.200.1.195 +VSD_DPM1 +S014003_ZMX1 11.200.1.85 +S014005_ZMX1 11.200.1.86 +S014007_ZMX1 11.200.1.87 +S014009_ZMX1 11.200.1.88 +S014011_ZMX1 11.200.1.89 +S014013_ZMX1 11.200.1.90 +S014015_ZMX1 11.200.1.91 +S014017_ZMX1 11.200.1.92 +S014021_ZMX1 11.200.1.93 +S014023_ZMX1 11.200.1.94 +S014025_ZMX1 11.200.1.95 +S014029_ZMX1 11.200.1.96 +S014031_ZMX1 11.200.1.97 +VSD_DPM1_FIO1 11.200.1.98 +VSD_DPM1_FIO2 11.200.1.99 +VSD_DPM1_FIO3 11.200.1.100 +VSD_DPM1_FIO4 11.200.1.101 +VSD_DPM1_FIO5 11.200.1.102 +VSD_DPM1_FIO6 11.200.1.103 +VSD_DPM1_FIO7 11.200.1.104 +VSD_DPM1_FIO8 11.200.1.105 +VSD_DPM2 +S014037_ZMX1 11.200.1.106 +S014039_ZMX1 11.200.1.107 +S014041_ZMX1 11.200.1.108 +S014043_ZMX1 11.200.1.109 +S014045_ZMX1 11.200.1.110 +S014047_ZMX1 11.200.1.111 +S014049_ZMX1 11.200.1.112 +S014053_ZMX1 11.200.1.113 +S014055_ZMX1 11.200.1.114 +S014057_ZMX1 11.200.1.115 +S014061_ZMX1 11.200.1.116 +S014063_ZMX1 11.200.1.117 +VSD_DPM2_FIO1 11.200.1.118 +VSD_DPM2_FIO2 11.200.1.119 +VSD_DPM2_FIO3 11.200.1.120 +VSD_DPM2_FIO4 11.200.1.121 +VSD_DPM2_FIO5 11.200.1.122 +VSD_DPM2_FIO6 11.200.1.123 +VSD_DPM2_FIO7 11.200.1.124 +VSD_DPM2_FIO8 11.200.1.125 +S014033_ZMX1 11.200.1.202 +VSD_DPM3 +S014065_ZMX1 11.200.1.126 +S014069_ZMX1 11.200.1.127 +S014071_ZMX1 11.200.1.128 +S014073_ZMX1 11.200.1.129 +S014077_ZMX1 11.200.1.130 +S014079_ZMX1 11.200.1.131 +S014081_ZMX1 11.200.1.132 +VSD_DPM3_FIO1 11.200.1.133 +VSD_DPM3_FIO2 11.200.1.134 +VSD_DPM3_FIO3 11.200.1.135 +VSD_DPM3_FIO4 11.200.1.136 +VSD_DPM3_FIO5 11.200.1.137 +VSD_DPM3_FIO6 11.200.1.138 +PDP14_FIO1 11.200.1.199 +PDP14_PMM1 11.200.1.200 +S014075_ZMX1 11.200.1.201 +MCM06 +NCP1_15_DPM1 +NCP1_9_VFD1 11.200.1.30 +NCP1_10A_VFD1 11.200.1.31 +NCP1_10B_VFD1 11.200.1.32 +NCP1_11_VFD1 11.200.1.33 +NCP1_12_VFD1 11.200.1.34 +NCP1_13_VFD1 11.200.1.35 +NCP1_14A_VFD1 11.200.1.36 +NCP1_14B_VFD1 11.200.1.37 +NCP1_14C_VFD1 11.200.1.38 +NCP1_14D_VFD1 11.200.1.39 +NCP1_15_VFD1 11.200.1.40 +NCP1_16_VFD1 11.200.1.41 +NCP1_17_VFD1 11.200.1.42 +NCP1_18A_VFD1 11.200.1.43 +NCP1_18B_VFD1 11.200.1.44 +NCP1_19_VFD1 11.200.1.45 +NCP1_20_VFD1 11.200.1.46 +NCP1_21_VFD1 11.200.1.47 +NCP1_20_FIO1 11.200.1.146 +NCS1_6_DPM1 +NCS1_1_VFD1 11.200.1.48 +NCS1_2_VFD1 11.200.1.49 +NCS1_3_VFD1 11.200.1.50 +NCS1_4_VFD1 11.200.1.51 +NCS1_5A_VFD1 11.200.1.52 +NCS1_5B_VFD1 11.200.1.53 +NCS1_6_VFD1 11.200.1.54 +NCS1_7_VFD1 11.200.1.55 +NCS1_8_VFD1 11.200.1.56 +NCS1_9_VFD1 11.200.1.57 +PDP8_FIO1 11.200.1.144 +PDP8_PMM1 11.200.1.145 +NCS1_DPM1 +S02_1_FIO1 11.200.1.100 +S02_1_FIO2 11.200.1.101 +S02_1_FIO3 11.200.1.102 +S02_1_FIO4 11.200.1.103 +S02_1_FIO9 11.200.1.104 +S02_1_FIO10 11.200.1.105 +S02_1_FIO11 11.200.1.106 +S02_1_FIO12 11.200.1.107 +S02_1_FIO13 11.200.1.108 +S02_1_FIO14 11.200.1.109 +NCS1_DPM2 +S02_1_FIO5 11.200.1.110 +S02_1_FIO6 11.200.1.111 +S02_1_FIO7 11.200.1.112 +S02_1_FIO8 11.200.1.113 +S02_1_SIO1 11.200.1.114 +S02_1_VFD1 11.200.1.115 +S02_1_FIO15 11.200.1.116 +S02_1_FIO16 11.200.1.117 +S02_1_FIO17 11.200.1.118 +S02_1_FIO18 11.200.1.119 +S02_1_FIO19 11.200.1.120 +S02_1_FIO20 11.200.1.121 +NCS2_4_DPM1 +NCS2_1_VFD1 11.200.1.58 +NCS2_2_VFD1 11.200.1.59 +NCS2_3A_VFD1 11.200.1.60 +NCS2_3B_VFD1 11.200.1.61 +NCS2_4_VFD1 11.200.1.62 +NCS2_5_VFD1 11.200.1.63 +NCS2_6_VFD1 11.200.1.64 +NCS2_7_VFD1 11.200.1.65 +NCS2_DPM1 +S02_2_FIO1 11.200.1.122 +S02_2_FIO2 11.200.1.123 +S02_2_FIO3 11.200.1.124 +S02_2_FIO4 11.200.1.125 +S02_2_FIO9 11.200.1.126 +S02_2_FIO10 11.200.1.127 +S02_2_FIO11 11.200.1.128 +S02_2_FIO12 11.200.1.129 +S02_2_FIO13 11.200.1.130 +S02_2_FIO14 11.200.1.131 +NCS2_DPM2 +S02_2_FIO5 11.200.1.132 +S02_2_FIO6 11.200.1.133 +S02_2_FIO7 11.200.1.134 +S02_2_FIO8 11.200.1.135 +S02_2_SIO1 11.200.1.136 +S02_2_VFD1 11.200.1.137 +S02_2_FIO15 11.200.1.138 +S02_2_FIO16 11.200.1.139 +S02_2_FIO17 11.200.1.140 +S02_2_FIO18 11.200.1.141 +S02_2_FIO19 11.200.1.142 +S02_2_FIO20 11.200.1.143 +MCM07 +BYAB_12_DPM1 +BYCB_6_VFD1 11.200.1.67 +BYCB_7_VFD1 11.200.1.68 +BYCB_8_VFD1 11.200.1.69 +BYCB_9_VFD1 11.200.1.70 +BYCB_10_VFD1 11.200.1.71 +BYAB_11_VFD1 11.200.1.72 +BYAB_12_VFD1 11.200.1.73 +BYAB_13_VFD1 11.200.1.74 +BYAB_14_VFD1 11.200.1.75 +BYAB_15_VFD1 11.200.1.76 +BYDB_12_VFD1 11.200.1.77 +BYDB_13_VFD1 11.200.1.78 +BYDB_14_VFD1 11.200.1.79 +BYDB_15_VFD1 11.200.1.80 +BYDB_16_VFD1 11.200.1.81 +BYAB_7_DPM1 +BYAB_2_VFD1 11.200.1.82 +BYAB_3_VFD1 11.200.1.83 +BYAB_4_VFD1 11.200.1.84 +BYAB_5_VFD1 11.200.1.85 +BYAB_6_VFD1 11.200.1.86 +BYAB_7_VFD1 11.200.1.87 +BYAB_8_VFD1 11.200.1.88 +BYAB_9_VFD1 11.200.1.89 +BYAB_10_VFD1 11.200.1.90 +BYDB_6_VFD1 11.200.1.91 +BYDB_7_VFD1 11.200.1.92 +BYDB_8_VFD1 11.200.1.93 +BYDB_9_VFD1 11.200.1.94 +BYDB_10_VFD1 11.200.1.95 +BYDB_11_VFD1 11.200.1.96 +BYBD_5_VFD1 11.200.1.97 +BYBD_6_VFD1 11.200.1.98 +BYAB_2_FIO1 11.200.1.99 +BYAC_8_DPM1 +BYAC_7_VFD1 11.200.1.149 +BYAC_8_VFD1 11.200.1.150 +BYAC_9_VFD1 11.200.1.151 +BYAC_10_VFD1 11.200.1.152 +BYAC_11_VFD1 11.200.1.153 +BYDC_10_VFD1 11.200.1.154 +BYDC_11_VFD1 11.200.1.155 +BYDC_12_VFD1 11.200.1.156 +BYDC_13_VFD1 11.200.1.157 +BYBC_9_VFD1 11.200.1.158 +BYBC_10_VFD1 11.200.1.159 +BYBA_9_VFD1 11.200.1.160 +BYBA_10_VFD1 11.200.1.161 +BYBA_11_VFD1 11.200.1.162 +BYBA_12_VFD1 11.200.1.163 +BYBA_13_VFD1 11.200.1.164 +BYBA_14_VFD1 11.200.1.165 +BYBA_15_VFD1 11.200.1.166 +BYAC_11_FIO1 11.200.1.167 +BYAD_3_DPM1 +BYAD_2_VFD1 11.200.1.130 +BYAD_3_VFD1 11.200.1.131 +BYAD_4_VFD1 11.200.1.132 +BYAC_2_VFD1 11.200.1.133 +BYAC_3_VFD1 11.200.1.134 +BYAC_4_VFD1 11.200.1.135 +BYAC_5_VFD1 11.200.1.136 +BYAC_6_VFD1 11.200.1.137 +BYBD_7_VFD1 11.200.1.138 +BYBD_8_VFD1 11.200.1.139 +PDP15_FIO1 11.200.1.172 +PDP15_PMM1 11.200.1.173 +PDP16_FIO1 11.200.1.174 +PDP16_PMM1 11.200.1.175 +BYAD_5_DPM1 +BYCD_8_VFD1 11.200.1.100 +BYCD_9_VFD1 11.200.1.101 +BYCD_10_VFD1 11.200.1.102 +BYCD_11_VFD1 11.200.1.103 +BYCD_12_VFD1 11.200.1.104 +BYBD_9_VFD1 11.200.1.105 +BYBD_10_VFD1 11.200.1.106 +BYBD_11_VFD1 11.200.1.107 +BYBD_12_VFD1 11.200.1.108 +BYBD_13_VFD1 11.200.1.109 +BYBD_14_VFD1 11.200.1.110 +BYAD_5_VFD1 11.200.1.111 +BYAD_6_VFD1 11.200.1.112 +BYAD_7_VFD1 11.200.1.113 +BYAD_8_VFD1 11.200.1.114 +BYAD_9_VFD1 11.200.1.115 +BYBC_3_DPM1 +BYBD_2_VFD1 11.200.1.49 +BYBD_3_VFD1 11.200.1.50 +BYBD_4_VFD1 11.200.1.51 +BYBC_2_VFD1 11.200.1.52 +BYBC_3_VFD1 11.200.1.53 +BYBC_4_VFD1 11.200.1.54 +BYBC_5_VFD1 11.200.1.55 +BYBC_6_VFD1 11.200.1.56 +BYBC_7_VFD1 11.200.1.57 +BYBC_8_VFD1 11.200.1.58 +BYBA_2_VFD1 11.200.1.59 +BYBA_3_VFD1 11.200.1.60 +BYBA_4_VFD1 11.200.1.61 +BYBA_5_VFD1 11.200.1.62 +BYBA_6_VFD1 11.200.1.63 +BYBA_7_VFD1 11.200.1.64 +BYBA_8_VFD1 11.200.1.65 +BYBA_2_FIO1 11.200.1.66 +PDP12_FIO1 11.200.1.168 +PDP12_PMM1 11.200.1.169 +BYCA_3_DPM1 +BYCB_2_VFD1 11.200.1.30 +BYCB_3_VFD1 11.200.1.31 +BYCB_4_VFD1 11.200.1.32 +BYCB_5_VFD1 11.200.1.33 +BYCA_2_VFD1 11.200.1.34 +BYCA_3_VFD1 11.200.1.35 +BYCA_4_VFD1 11.200.1.36 +BYCA_5_VFD1 11.200.1.37 +BYCA_6_VFD1 11.200.1.38 +BYCA_7_VFD1 11.200.1.39 +BYCA_8_VFD1 11.200.1.40 +BYCA_9_VFD1 11.200.1.41 +BYCD_2_VFD1 11.200.1.42 +BYCD_3_VFD1 11.200.1.43 +BYCD_4_VFD1 11.200.1.44 +BYCD_5_VFD1 11.200.1.45 +BYCD_6_VFD1 11.200.1.46 +BYCD_7_VFD1 11.200.1.47 +BYCA_2_FIO1 11.200.1.48 +PDP13_FIO1 11.200.1.170 +PDP13_PMM1 11.200.1.171 +BYDA_4_DPM1 +BYDC_2_VFD1 11.200.1.116 +BYDC_3_VFD1 11.200.1.117 +BYDC_4_VFD1 11.200.1.118 +BYDC_5_VFD1 11.200.1.119 +BYDA_2_VFD1 11.200.1.120 +BYDA_3_VFD1 11.200.1.121 +BYDA_4_VFD1 11.200.1.122 +BYDA_5_VFD1 11.200.1.123 +BYDB_2_VFD1 11.200.1.124 +BYDB_3_VFD1 11.200.1.125 +BYDB_4_VFD1 11.200.1.126 +BYDB_5_VFD1 11.200.1.127 +BYDA_2_FIO1 11.200.1.128 +BYDA_6_FIO1 11.200.1.129 +BYDA_6_DPM1 +BYDA_6_VFD1 11.200.1.140 +BYDA_7_VFD1 11.200.1.141 +BYDA_8_VFD1 11.200.1.142 +BYDA_9_VFD1 11.200.1.143 +BYDC_6_VFD1 11.200.1.144 +BYDC_7_VFD1 11.200.1.145 +BYDC_8_VFD1 11.200.1.146 +BYDC_9_VFD1 11.200.1.147 +BYDC_8_FIO1 11.200.1.148 diff --git a/PLACE DPMS/main.py b/PLACE DPMS/dpm_mapping.py similarity index 100% rename from PLACE DPMS/main.py rename to PLACE DPMS/dpm_mapping.py diff --git a/PLACE DPMS/dpm_mapping.txt b/PLACE DPMS/dpm_mapping.txt index 9931fa7..2332531 100644 --- a/PLACE DPMS/dpm_mapping.txt +++ b/PLACE DPMS/dpm_mapping.txt @@ -1,33 +1,68 @@ MCM01 -DPM1_UL1_4 11.200.1.2 -UL2_4_DPM1 11.200.1.3 +PS1_4_DPM1 11.200.1.10 +PS3_3_DPM1 11.200.1.11 +PS4_7_DPM1 11.200.1.12 +UL10_3_DPM1 11.200.1.8 +UL11_10_DPM1 11.200.1.9 +UL1_4_DPM1 11.200.1.2 +UL2_4_DPM1 11.200.1.3 +UL4_4_DPM1 11.200.1.4 +UL5_4_DPM1 11.200.1.5 +UL7_4_DPM1 11.200.1.6 +UL8_3_DPM1 11.200.1.7 MCM02 -UL2_4_DPM1 11.200.1.3 -DPM3_UL4_4 11.200.1.4 -DPM4_UL5_4 11.200.1.5 +PS5_7_DPM1 11.200.1.8 +PS6_7_DPM1 11.200.1.9 +PS7_7_DPM1 11.200.1.10 +UL13_8_DPM1 11.200.1.2 +UL15_4_DPM1 11.200.1.3 +UL16_2_DPM1 11.200.1.4 +UL18_4_DPM1 11.200.1.5 +UL19_2_DPM1 11.200.1.6 +UL21_11_DPM1 11.200.1.7 MCM03 -UL2_4_DPM1 11.200.1.3 -DPM3_UL4_4 11.200.1.4 -DPM4_UL5_4 11.200.1.5 -DPM5_UL7_4 11.200.1.6 +NCP1_1_DPM1 11.200.1.2 +NCP1_2_DPM1 11.200.1.3 +NCP1_3_DPM1 11.200.1.4 +NCP1_5_DPM1 11.200.1.5 MCM04 -DPM1_UL1_4 11.200.1.2 -UL2_4_DPM1 11.200.1.3 -DPM3_UL4_4 11.200.1.4 -DPM4_UL5_4 11.200.1.5 -DPM1_UL1_4 11.200.1.2 -UL2_4_DPM1 11.200.1.3 -DPM3_UL4_4 11.200.1.4 -DPM4_UL5_4 11.200.1.5 -DPM1_UL1_4 11.200.1.7 -UL2_4_DPM1 11.200.1.6 -DPM3_UL4_4 11.200.1.5 -DPM4_UL5_4 11.200.1.12 +FL1034_2_DPM1 11.200.1.5 +FL3016_2_DPM1 11.200.1.6 +PRS3_5_DPM1 11.200.1.2 +PS10_2_DPM1 11.200.1.4 +PS11_7_DPM1 11.200.1.3 +VSA_DPM1 11.200.1.7 +VSA_DPM2 11.200.1.8 +VSA_DPM3 11.200.1.9 +VSC_DPM1 11.200.1.10 +VSC_DPM2 11.200.1.11 +VSC_DPM3 11.200.1.12 MCM05 -UL2_4_DPM1 11.200.1.3 -DPM3_UL4_4 11.200.1.4 -DPM4_UL5_4 11.200.1.5 -DPM5_UL7_4 11.200.1.6 -UL2_4_DPM1 11.200.1.6 -DPM3_UL4_4 11.200.1.5 -DPM4_UL5_4 11.200.1.12 \ No newline at end of file +FL2086_DPM1 11.200.1.4 +FL4070_DPM1 11.200.1.5 +PRS1_3_DPM1 11.200.1.2 +PS8_5_DPM1 11.200.1.3 +VSB_DPM1 11.200.1.9 +VSB_DPM2 11.200.1.10 +VSB_DPM3 11.200.1.11 +VSD_DPM1 11.200.1.6 +VSD_DPM2 11.200.1.7 +VSD_DPM3 11.200.1.8 +MCM06 +NCP1_15_DPM1 11.200.1.2 +NCS1_6_DPM1 11.200.1.3 +NCS1_DPM1 11.200.1.5 +NCS1_DPM2 11.200.1.6 +NCS2_4_DPM1 11.200.1.4 +NCS2_DPM1 11.200.1.7 +NCS2_DPM2 11.200.1.8 +MCM07 +BYAB_12_DPM1 11.200.1.4 +BYAB_7_DPM1 11.200.1.5 +BYAC_8_DPM1 11.200.1.10 +BYAD_3_DPM1 11.200.1.8 +BYAD_5_DPM1 11.200.1.6 +BYBC_3_DPM1 11.200.1.3 +BYCA_3_DPM1 11.200.1.2 +BYDA_4_DPM1 11.200.1.7 +BYDA_6_DPM1 11.200.1.9 diff --git a/PLACE DPMS/extract_mcm_mappings.py b/PLACE DPMS/extract_mcm_mappings.py new file mode 100644 index 0000000..c98ad1e --- /dev/null +++ b/PLACE DPMS/extract_mcm_mappings.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +""" +Script to extract both DPM mappings and device mappings from MCM CSV files +Generates two output files: +1. dpm_mapping.txt - DPM names and their IP addresses +2. device_mapping.txt - DPM names with all their devices and device IPs + +YOU WILL NEED TO HAVE THE MCM CSV FILES IN THE CURRENT DIRECTORY +WITH NAME MCM*_COMPLETE.csv +""" + +import csv +import glob +import os +from collections import OrderedDict, defaultdict + +def extract_mcm_data(): + """Extract both DPM and device data from all MCM CSV files""" + + # Find all MCM CSV files + csv_files = glob.glob("MCM*_COMPLETE.csv") + csv_files.sort() # Sort to ensure consistent order (MCM01, MCM02, etc.) + + if not csv_files: + print("No MCM*_COMPLETE.csv files found in current directory") + return None, None + + # Dictionary to store MCM -> list of (DPM, DPM_IP) pairs for DPM mapping + mcm_dpm_data = OrderedDict() + + # Dictionary to store MCM -> DPM -> list of (Device_Name, Device_IP) pairs for device mapping + mcm_device_data = OrderedDict() + + total_dpms_processed = 0 + total_devices_processed = 0 + + for csv_file in csv_files: + # Extract MCM number from filename (e.g., MCM01_COMPLETE.csv -> MCM01) + mcm_name = os.path.splitext(csv_file)[0].replace("_COMPLETE", "") + + print(f"Processing {csv_file}...") + + # Set to store unique DPM, DPM_IP combinations for this MCM + unique_dpms = set() + + # Dictionary to store DPM -> list of devices for this MCM + dpm_devices = defaultdict(list) + + try: + with open(csv_file, 'r', newline='', encoding='utf-8-sig') as file: # utf-8-sig handles BOM + reader = csv.DictReader(file) + + row_count = 0 + device_count = 0 + for row in reader: + row_count += 1 + dpm = row.get('DPM', '').strip() + dpm_ip = row.get('DPM_IP', '').strip() + device_name = row.get('Name', '').strip() + device_ip = row.get('IP', '').strip() + + # Collect DPM data (for dpm_mapping.txt) + if dpm and dpm_ip: + unique_dpms.add((dpm, dpm_ip)) + + # Collect device data (for device_mapping.txt) + if dpm and device_name and device_ip: + dpm_devices[dpm].append((device_name, device_ip)) + device_count += 1 + + print(f" Processed {row_count} rows, found {device_count} devices") + + except Exception as e: + print(f"Error reading {csv_file}: {e}") + continue + + # Store DPM mapping data + mcm_dpm_data[mcm_name] = sorted(list(unique_dpms)) + + # Store device mapping data (sort DPMs and their devices) + sorted_dpm_devices = OrderedDict() + for dpm in sorted(dpm_devices.keys()): + # Sort devices by IP address (extract IP and convert to sortable format) + def ip_sort_key(device_tuple): + device_name, device_ip = device_tuple + try: + # Split IP address and convert to integers for proper sorting + ip_parts = device_ip.split('.') + return tuple(int(part) for part in ip_parts) + except (ValueError, AttributeError): + # If IP parsing fails, fall back to string sorting + return (999, 999, 999, 999) # Put invalid IPs at the end + + sorted_devices = sorted(dpm_devices[dpm], key=ip_sort_key) + sorted_dpm_devices[dpm] = sorted_devices + mcm_device_data[mcm_name] = sorted_dpm_devices + + # Statistics + dpms_in_mcm = len(unique_dpms) + devices_in_mcm = sum(len(devices) for devices in sorted_dpm_devices.values()) + total_dpms_processed += dpms_in_mcm + total_devices_processed += devices_in_mcm + + print(f" Found {dpms_in_mcm} unique DPMs with {devices_in_mcm} total devices") + + print(f"\nOverall totals: {total_dpms_processed} DPMs, {total_devices_processed} devices") + return mcm_dpm_data, mcm_device_data + +def write_dpm_mapping(mcm_dpm_data, output_file="dpm_mapping.txt"): + """Write the DPM mapping data in the same format as dpm_mapping.txt""" + + try: + with open(output_file, 'w', encoding='utf-8') as file: + for mcm_name, dpm_list in mcm_dpm_data.items(): + # Write MCM header + file.write(f"{mcm_name}\n") + + # Write DPM entries + for dpm, dpm_ip in dpm_list: + file.write(f"{dpm}\t{dpm_ip}\n") + + print(f"DPM mapping written to {output_file}") + + except Exception as e: + print(f"Error writing DPM mapping file: {e}") + +def write_device_mapping(mcm_device_data, output_file="device_mapping.txt"): + """Write the device mapping data in the same format as device_mapping.txt""" + + try: + with open(output_file, 'w', encoding='utf-8') as file: + for mcm_name, dpm_devices in mcm_device_data.items(): + # Write MCM header + file.write(f"{mcm_name}\n") + + # Write each DPM and its devices + for dpm, devices in dpm_devices.items(): + # Write DPM header + file.write(f"{dpm}\n") + + # Write device entries + for device_name, device_ip in devices: + file.write(f"{device_name}\t{device_ip}\n") + + print(f"Device mapping written to {output_file}") + + except Exception as e: + print(f"Error writing device mapping file: {e}") + +def main(): + """Main function""" + print("Extracting MCM mapping data from CSV files...") + print("=" * 60) + + # Extract data from CSV files + mcm_dpm_data, mcm_device_data = extract_mcm_data() + + if not mcm_dpm_data or not mcm_device_data: + print("No data extracted. Please check that MCM*_COMPLETE.csv files exist.") + return + + print("\nWriting output files...") + print("=" * 60) + + # Write both output files + write_dpm_mapping(mcm_dpm_data) + write_device_mapping(mcm_device_data) + + # Print summary + print("\nSummary:") + print("=" * 60) + total_dpms = 0 + total_devices = 0 + + for mcm_name in mcm_dpm_data.keys(): + dpm_count = len(mcm_dpm_data[mcm_name]) + device_count = sum(len(devices) for devices in mcm_device_data[mcm_name].values()) + total_dpms += dpm_count + total_devices += device_count + print(f"{mcm_name}: {dpm_count} DPMs, {device_count} devices") + + print(f"\nTotal: {total_dpms} DPMs with {total_devices} devices across all MCM files") + print("\nOutput files generated:") + print("- dpm_mapping.txt (DPM names and IP addresses)") + print("- device_mapping.txt (DPM devices and their IP addresses)") + +if __name__ == "__main__": + main() diff --git a/PLACE DPMS/multi_mcm_device_mapping.py b/PLACE DPMS/multi_mcm_device_mapping.py new file mode 100644 index 0000000..fea6d95 --- /dev/null +++ b/PLACE DPMS/multi_mcm_device_mapping.py @@ -0,0 +1,315 @@ +""" +Multi-MCM Device Mapping Script +This script processes ALL MCMs from a device_mapping.txt file simultaneously. +It creates separate folders for each MCM with their respective DPM configurations. + +The input file should have the following format: +MCM01 +DPM_NAME1 +DEVICE_NAME1 DEVICE_IP1 +DEVICE_NAME2 DEVICE_IP2 +... +DPM_NAME2 +... +MCM02 +DPM_NAME1 +... +""" + +import json +import os +import shutil + +def generate_config(num_vfds, num_fios, device_list, dpm_label, mcm_name): + if num_vfds + num_fios > 24: + raise ValueError("Error: Total number of elements cannot exceed 24 slots.") + if len(device_list) != num_vfds + num_fios: + raise ValueError(f"Error: Expected {num_vfds + num_fios} device names, but got {len(device_list)}.") + + # Predefined positions and labels for devices (up to 24) + positions = [ + {"x": 0.0232, "y": 0.4991}, {"x": 0.0230, "y": 0.6677}, {"x": 0.0216, "y": 0.8333}, # 3 + {"x": 0.0229, "y": 0.3333}, {"x": 0.0229, "y": 0.1667}, {"x": 0.0244, "y": 0.0000}, # 6 + {"x": 0.5000, "y": 0.0000}, {"x": 0.6250, "y": 0.0000}, {"x": 0.7500, "y": 0.0000}, # 9 + {"x": 0.3750, "y": 0.0000}, {"x": 0.2516, "y": 0.0019}, {"x": 0.1245, "y": 0.0000}, # 12 + {"x": 0.8509, "y": 0.3332}, {"x": 0.8514, "y": 0.1667}, {"x": 0.8528, "y": 0.0000}, # 15 + {"x": 0.8509, "y": 0.4988}, {"x": 0.8501, "y": 0.6639}, {"x": 0.8515, "y": 0.8329}, # 18 + {"x": 0.3740, "y": 0.8324}, {"x": 0.2481, "y": 0.8324}, {"x": 0.1222, "y": 0.8333}, # 21 + {"x": 0.5026, "y": 0.8314}, {"x": 0.6245, "y": 0.8314}, {"x": 0.7536, "y": 0.8351} # 24 + ] + + label_positions = [ + {"x": 0.0094, "y": 0.5394}, {"x": 0.0068, "y": 0.7315}, {"x": 0.0068, "y": 0.8981}, # 3 + {"x": 0.0068, "y": 0.3986}, {"x": 0.0068, "y": 0.2324}, {"x": 0.0068, "y": 0.0653}, # 6 + {"x": 0.5117, "y": 0.1662}, {"x": 0.6312, "y": 0.1664}, {"x": 0.7500, "y": 0.1664}, # 9 + {"x": 0.3864, "y": 0.1664}, {"x": 0.3150, "y": 0.1682}, {"x": 0.2072, "y": 0.1646}, # 12 + {"x": 0.9470, "y": 0.3943}, {"x": 0.9470, "y": 0.2276}, {"x": 0.9470, "y": 0.0619}, # 15 + {"x": 0.9470, "y": 0.5610}, {"x": 0.9470, "y": 0.7257}, {"x": 0.9470, "y": 0.8927}, # 18 + {"x": 0.4587, "y": 0.8896}, {"x": 0.3311, "y": 0.8887}, {"x": 0.2071, "y": 0.8886}, # 21 + {"x": 0.5887, "y": 0.8886}, {"x": 0.7106, "y": 0.8886}, {"x": 0.8344, "y": 0.9247} # 24 + ] + + total_devices = num_vfds + num_fios + # Build tagProps per rules, using the provided MCM name and device types + # Index 0 must be the DPM tag; indices 1..N are device tags + dpm_tag = f"System/{mcm_name}/IO_BLOCK/DPM/{dpm_label}" + device_tags = [] + for device_data in device_list: + name, _ip = device_data.split() + upper_name = name.upper() + if "VFD" in upper_name: + device_tags.append(f"System/{mcm_name}/Conveyor/VFD/{name}") + elif "TIPPER" in upper_name or "ST" in upper_name: + device_tags.append(f"System/{mcm_name}/Conveyor/Tipper/{name}") + elif "EX" in upper_name or "EXTENDO" in upper_name: + # For EXTENDO devices, ensure the tag name ends with EX1 + tag_name = name.replace("_EXTENDO", "_EX1") if "_EXTENDO" in name else name + device_tags.append(f"System/{mcm_name}/Conveyor/EXTENDO/{tag_name}") + elif "ZMX" in upper_name: + device_tags.append(f"System/{mcm_name}/PE/ZMX/{name}") + elif "PMM" in upper_name: + device_tags.append(f"System/{mcm_name}/{name}") + elif "SIO" in upper_name: + device_tags.append(f"System/{mcm_name}/IO_BLOCK/SIO/{name}") + elif "PLC" in upper_name: + device_tags.append(f"System/{mcm_name}/Rack") + else: + # Default to FIO when not explicitly matched otherwise + device_tags.append(f"System/{mcm_name}/IO_BLOCK/FIO/{name}") + tag_props = [dpm_tag] + device_tags + con_lines_visible = [True] * total_devices + [False] * (24 - total_devices) + + # Generate propConfig for con_lines bindings + prop_config = {} + for i in range(total_devices): + prop_config[f"props.params.con_lines[{i}]"] = { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + # Device tags start at index 1 in view.params.tagProps + "references": {"0": f"{{view.params.tagProps[{i+1}]}}", "fc": "{session.custom.fc}"}, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Communication_Faulted" + }, + "transforms": [ + {"expression": "coalesce({value},{view.params.forceFaultStatus},false)", "type": "expression"}, + {"fallback": False, "inputType": "scalar", "mappings": [{"input": False, "output": True}], "outputType": "scalar", "type": "map"} + ], + "type": "tag" + } + } + + # Base configuration + config = { + "custom": {}, + "params": {"tagProps": tag_props}, + "props": {"defaultSize": {"height": 1080, "width": 1920}}, + "root": { + "children": [], + "meta": {"name": "root"}, + "position": {"x": 0.6348, "y": -0.1546}, + "props": {"mode": "percent"}, + "type": "ia.container.coord" + } + } + + # Add DPM component + config["root"]["children"].append({ + "meta": {"name": "DPM"}, + "position": {"x": 0, "y": 0, "height": 1, "width": 1}, + "propConfig": prop_config, + "props": { + # Include tagProps with index 0 set to the DPM tag + "params": {"con_lines": [False] * 24, "con_lines_visible": con_lines_visible, "in": False, "out": False, "tagProps": [dpm_tag] + ["value"] * 9}, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_TO_HUB" + }, + "type": "ia.display.view" + }) + + # Process all devices + for i, device_data in enumerate(device_list): + name, ip = device_data.split() + + # Determine device type and component path + upper_name = name.upper() + is_vfd = "VFD" in upper_name + is_ex = "EX" in upper_name or "EXTENDO" in upper_name + is_zmx = "ZMX" in upper_name + is_pmm = "PMM" in upper_name + is_tipper = "TIPPER" in upper_name or "ST" in upper_name + is_plc = "PLC" in upper_name + + # Set component name (remove common suffixes) + component_name = name.replace("_VFD1", "").replace("_EX1", "") + + # Determine component path based on device type + if is_ex: + component_path = "EXTENDO" + elif is_vfd: + component_path = "APF" + elif is_zmx: + component_path = "ZMX" + elif is_pmm: + component_path = "PMM" + elif is_tipper: + component_path = "TIPPER" + elif is_plc: + component_path = "PLC" + else: + component_path = "FIO_SIO" + + # Adjust X position for all non-VFD devices at positions 12-18 (1-based) + component_x = positions[i]["x"] + label_x = label_positions[i]["x"] + if not is_vfd and 11 <= i <= 17: + component_x += 0.007 + label_x += 0.007 + + # Add device component with params.tagProps[0] set to this device's tag path + device_tag_props = [device_tags[i]] + ["value"] * 9 + config["root"]["children"].append({ + "meta": {"name": component_name}, + "position": {"height": 0.1667, "width": 0.125, "x": component_x, "y": positions[i]["y"]}, + "props": { + "params": {"tagProps": device_tag_props}, + "path": f"Windows/Tabs/Enternet Windows/Components/{component_path}" + }, + "type": "ia.display.view" + }) + + # Add device label + config["root"]["children"].append({ + "meta": {"name": f"{component_name}_label"}, + "position": {"height": 0.0358, "width": 0.0547 if is_vfd else 0.0427, "x": label_x, "y": label_positions[i]["y"]}, + "props": {"text": f"{name} {ip}", "textStyle": {"fontSize": "1vmin", "key": "value"}}, + "type": "ia.display.label" + }) + + # Add DPM label + config["root"]["children"].append({ + "meta": {"name": "DPM_label"}, + "position": {"height": 0.0694, "width": 0.101, "x": 0.5831, "y": 0.6342}, + "props": {"text": dpm_label, "textStyle": {"fontSize": "2vmin"}}, + "type": "ia.display.label" + }) + + return config + +def parse_all_mcm_data(file_path): + """Parse device mapping file containing multiple MCMs""" + all_mcms = {} + current_mcm = None + current_dpm = None + + with open(file_path, 'r') as f: + for line in f: + line = line.strip() + if not line: + continue + + # Check if this is a device row (has tab or space separator with exactly 2 parts) + is_device_row = ('\t' in line and len(line.split('\t')) == 2) or (' ' in line and len(line.split(' ')) == 2) + + if not is_device_row: + # Header row: either MCM name or DPM name + if line.upper().startswith('MCM'): + # New MCM section + current_mcm = line + all_mcms[current_mcm] = {} + current_dpm = None + else: + # DPM name + if current_mcm is None: + print(f"Warning: Found DPM '{line}' before any MCM header. Skipping.") + continue + current_dpm = line + all_mcms[current_mcm][current_dpm] = [] + else: + # Device row + if current_mcm is None or current_dpm is None: + print(f"Warning: Found device '{line}' before MCM/DPM headers. Skipping.") + continue + + parts = line.split('\t') if '\t' in line else line.split(' ') + all_mcms[current_mcm][current_dpm].append((parts[0].strip(), parts[1].strip())) + + return all_mcms + +def copy_files_to_dpm_folder(dpm_folder): + """Copy resource.json and thumbnail.png to DPM folder""" + script_dir = os.path.dirname(os.path.abspath(__file__)) + for file_name in ["resource.json", "thumbnail.png"]: + source = os.path.join(script_dir, file_name) + if os.path.exists(source): + shutil.copy2(source, os.path.join(dpm_folder, file_name)) + +def create_mcm_folders(all_mcms): + """Create folders and configurations for all MCMs""" + total_mcms = len(all_mcms) + total_dpms = sum(len(dpms) for dpms in all_mcms.values()) + total_devices = sum(len(devices) for mcm_dpms in all_mcms.values() for devices in mcm_dpms.values()) + + print(f"Processing {total_mcms} MCMs with {total_dpms} DPMs and {total_devices} total devices...") + print("=" * 70) + + for mcm_name, dpms in all_mcms.items(): + print(f"\nProcessing {mcm_name}...") + mcm_folder = mcm_name + os.makedirs(mcm_folder, exist_ok=True) + + mcm_dpms = len(dpms) + mcm_devices = sum(len(devices) for devices in dpms.values()) + print(f" {mcm_dpms} DPMs, {mcm_devices} devices") + + for dpm_name, devices in dpms.items(): + print(f" Processing {dpm_name} with {len(devices)} devices...") + dpm_folder = os.path.join(mcm_folder, dpm_name) + os.makedirs(dpm_folder, exist_ok=True) + + try: + # Count device types and create config + num_vfds = sum(1 for name, _ in devices if '_VFD' in name) + num_fios = len(devices) - num_vfds + device_list = [f"{name} {ip}" for name, ip in devices] + + config = generate_config(num_vfds, num_fios, device_list, dpm_name, mcm_name) + + # Save view.json and copy files + with open(os.path.join(dpm_folder, "view.json"), 'w') as f: + json.dump(config, f, indent=2) + copy_files_to_dpm_folder(dpm_folder) + + except Exception as e: + print(f" Error processing {dpm_name}: {e}") + + print("\n" + "=" * 70) + print(f"Summary: Created {total_mcms} MCM folders with {total_dpms} DPM subfolders") + +def main(): + # Get the directory where this script is located + script_dir = os.path.dirname(os.path.abspath(__file__)) + input_file = os.path.join(script_dir, "device_mapping.txt") + + try: + if not os.path.exists(input_file): + print(f"Error: File '{input_file}' not found.") + print("Please ensure device_mapping.txt exists in the same directory as this script.") + return + + print("Multi-MCM Device Mapping Script") + print("=" * 70) + print(f"Reading from: {input_file}") + + all_mcms = parse_all_mcm_data(input_file) + if not all_mcms: + print("No MCM data found in the input file.") + return + + create_mcm_folders(all_mcms) + print("Completed successfully! Check the MCM folders.") + + except Exception as e: + print(f"An error occurred: {str(e)}") + +if __name__ == "__main__": + main() diff --git a/PLACE DPM DEVICES/resource.json b/PLACE DPMS/resource.json similarity index 100% rename from PLACE DPM DEVICES/resource.json rename to PLACE DPMS/resource.json diff --git a/PLACE DPM DEVICES/thumbnail.png b/PLACE DPMS/thumbnail.png similarity index 100% rename from PLACE DPM DEVICES/thumbnail.png rename to PLACE DPMS/thumbnail.png diff --git a/TAGS/apply-tags.py b/TAGS/apply-tags.py index 9074e3f..125e894 100644 --- a/TAGS/apply-tags.py +++ b/TAGS/apply-tags.py @@ -3,33 +3,45 @@ import os import re def clean_device_name(name): - """Remove _Line and _END suffixes from device name for tag path""" + """Remove _Line, _END, _EN suffixes and trailing D from device name for tag path""" # Remove _Line, _Line_1, _Line_2, etc. name = re.sub(r'_Line(_\d+)?$', '', name) # Remove _END name = re.sub(r'_END$', '', name) + # Remove _EN + name = name.replace('_EN', '') + # Remove trailing D for EPC devices (e.g., PS2_8_EPC2D -> PS2_8_EPC2) + if 'EPC' in name and name.endswith('D'): + name = name[:-1] return name -# Use the same classification logic as generate-tags.py with modifications for PR/GS/EX +# Use the same classification logic as generate-tags.py with modifications for PR/GS/EN/EX def classify_device(name): + skip_keywords = ["Image", "Button", "Camera", "image", "ERSC", "DIV"] # Handle EX (EXTENDO) devices first if "EX" in name: return {"folder": "Conveyor/EXTENDO", "typeId": "Conveyor/EXTENDO", "tagType": "UdtInstance", "name": name} + # Handle TIPPER devices + if "TIPPER" in name: + return {"folder": "Conveyor/Tipper", "typeId": "Conveyor/Tipper", "tagType": "UdtInstance", "name": name} + # Always IO_BLOCK if ends with FIO{num}, SIO{num}, DPM{num} 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): return {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name} - # Handle PR and GS suffixes - remove them for tag path but keep original name for classification + # Handle PR, GS, and EN suffixes - remove them for tag path but keep original name for classification original_name = name if "_PR1" in name: name = name.replace("_PR1", "") elif "_GS1" in name: name = name.replace("_GS1", "") + elif "_EN" in name: + name = re.sub(r'_EN\d*', '', name) # Remove _EN, _EN1, _EN2, etc. if any(kw in name for kw in skip_keywords): return None @@ -73,12 +85,13 @@ def classify_device(name): else: return {"folder": "Chute/D2C", "typeId": "Chute/D2C", "tagType": "UdtInstance", "name": name} + # Conveyor rules - everything else is VFD return {"folder": "Conveyor/VFD", "typeId": "Conveyor/VFD", "tagType": "UdtInstance", "name": name + "_VFD1"} def main(): # Path to the Detailed-Views directory - base_path = r"C:\Program Files\Inductive Automation\Ignition\data\projects\SAT9_SCADA\com.inductiveautomation.perspective\views\Detailed-Views" + base_path = r"C:\Program Files\Inductive Automation\Ignition\data\projects\CNO8_SCADA\com.inductiveautomation.perspective\views\Detailed-Views" if not os.path.exists(base_path): print(f"Error: Path not found: {base_path}") diff --git a/TAGS/generate-tags.py b/TAGS/generate-tags.py index 0e47be0..7067190 100644 --- a/TAGS/generate-tags.py +++ b/TAGS/generate-tags.py @@ -8,7 +8,7 @@ import os import re import copy -default_view_path = r"c:\Program Files\Inductive Automation\Ignition\data\projects\SAT9_SCADA\com.inductiveautomation.perspective\views\Detailed-Views" +default_view_path = r"C:\Program Files\Inductive Automation\Ignition\data\projects\CNO8_SCADA\com.inductiveautomation.perspective\views\Detailed-Views" def merge_tags(t1, t2): """ @@ -39,13 +39,28 @@ def merge_tags(t1, t2): return copy.deepcopy(t1) if t2 is None else copy.deepcopy(t2) # Filtering and classification rules -def classify_device(name): - skip_keywords = ["Line", "Image", "Button", "Camera", "END", "image", "PR", "GS", "ERSC", "DIV"] +def classify_device(name, mcm_device_name): + + skip_keywords = ["Line", "Image", "Button", "Camera", "END", "image", "PR", "GS", "ERSC", "DIV", "EN"] + + # Create parameters structure for all UdtInstance tags + def create_parameters(mcm_name): + return { + "parameters": { + "MCM": { + "dataType": "String", + "value": mcm_name + } + } + } + # Always IO_BLOCK if ends with FIO{num}, SIO{num}, DPM{num} 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): - return {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name} + result = {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result # Skip if PR is in name (unless above rule matched) if "PR" in name: return None @@ -53,36 +68,68 @@ def classify_device(name): return None # EPC goes to Station/EPC if "EPC" in name: - return {"folder": "Station/EPC", "typeId": "Station/EPC", "tagType": "UdtInstance", "name": name} + result = {"folder": "Station/EPC", "typeId": "Station/EPC", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result # SS1 and SS2 go to Station/SS_PB if "SS1" in name or "SS2" in name: - return {"folder": "Station/SS_PB", "typeId": "Station/SS_PB", "tagType": "UdtInstance", "name": name} + result = {"folder": "Station/SS_PB", "typeId": "Station/SS_PB", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result # _S1 and _S2 go to Station/S_PB if "_S1" in name or "_S2" in name: - return {"folder": "Station/S_PB", "typeId": "Station/S_PB", "tagType": "UdtInstance", "name": name} + result = {"folder": "Station/S_PB", "typeId": "Station/S_PB", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result # S01...JR is Station/Chute_JR if name.startswith("S01") and "JR" in name: - return {"folder": "Station/Chute_JR", "typeId": "Station/Chute_JR", "tagType": "UdtInstance", "name": name} + result = {"folder": "Station/Chute_JR", "typeId": "Station/Chute_JR", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result # JR always goes to Station/JR if "JR" in name: - return {"folder": "Station/JR", "typeId": "Station/JR", "tagType": "UdtInstance", "name": name} + result = {"folder": "Station/JR", "typeId": "Station/JR", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result # IO_BLOCK (priority over CH) if any(kw in name for kw in ["DPM", "FIO", "SIO", "HUB"]): for kw in ["DPM", "FIO", "SIO", "HUB"]: if kw in name: - return {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name} + result = {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result + # Tipper rule (before Chute rules) + if "TIPPER" in name: + result = {"folder": "Conveyor/Tipper", "typeId": "Conveyor/Tipper", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result + # Extendo rule + if "EX" in name: + result = {"folder": "Conveyor/Extendo", "typeId": "Conveyor/Extendo", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result # New rules for Chute (only if not PR or JR) if "FL" in name and "CH" in name: - return {"folder": "Chute/FL_CHUTE", "typeId": "Chute/FL_CHUTE", "tagType": "UdtInstance", "name": name} + result = {"folder": "Chute/FL_CHUTE", "typeId": "Chute/FL_CHUTE", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result if "CH" in name: - return {"folder": "Chute/Chute", "typeId": "Chute/Chute", "tagType": "UdtInstance", "name": name} + result = {"folder": "Chute/Chute", "typeId": "Chute/Chute", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result if name.startswith("S01") and name[-1].isdigit(): if int(name[-1]) % 2 == 0: - return {"folder": "Chute/PalletBuild", "typeId": "Chute/PalletBuild", "tagType": "UdtInstance", "name": name} + result = {"folder": "Chute/PalletBuild", "typeId": "Chute/PalletBuild", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result else: - return {"folder": "Chute/D2C", "typeId": "Chute/D2C", "tagType": "UdtInstance", "name": name} + result = {"folder": "Chute/D2C", "typeId": "Chute/D2C", "tagType": "UdtInstance", "name": name} + result.update(create_parameters(mcm_device_name)) + return result # Conveyor rules - everything else is VFD - return {"folder": "Conveyor/VFD", "typeId": "Conveyor/VFD", "tagType": "UdtInstance", "name": name + "_VFD1"} + result = {"folder": "Conveyor/VFD", "typeId": "Conveyor/VFD", "tagType": "UdtInstance", "name": name + "_VFD1"} + result.update(create_parameters(mcm_device_name)) + return result def main(): # Iterate through all subfolders in the default_view_path @@ -109,20 +156,27 @@ def main(): mcm_device_name = None seen_names = set() # Track seen names to avoid duplicates + # First pass: find MCM device name + for child in children: + meta = child.get("meta", {}) + name = meta.get("name") + if name and "MCM" in name: + mcm_device_name = name + break + + if not mcm_device_name: + mcm_device_name = folder_name # fallback to folder name if not found + + # Second pass: classify devices for child in children: meta = child.get("meta", {}) name = meta.get("name") if name and name not in seen_names: # Only process if not seen before seen_names.add(name) - if mcm_device_name is None and "MCM" in name: - mcm_device_name = name - classified = classify_device(name) + classified = classify_device(name, mcm_device_name) if classified: devices.append(classified) - if not mcm_device_name: - mcm_device_name = folder_name # fallback to folder name if not found - # Initialize folder structure folders = { "IO_BLOCK": { @@ -146,7 +200,9 @@ def main(): }, "Conveyor": { "VFD": [], - "APF": [] + "APF": [], + "Tipper": [], + "Extendo": [] } } @@ -271,6 +327,16 @@ def main(): "name": "APF", "tagType": "Folder", "tags": folders["Conveyor"]["APF"] + }, + { + "name": "Tipper", + "tagType": "Folder", + "tags": folders["Conveyor"]["Tipper"] + }, + { + "name": "Extendo", + "tagType": "Folder", + "tags": folders["Conveyor"]["Extendo"] } ] } diff --git a/TAGS/test_generate.py b/TAGS/test_generate.py new file mode 100644 index 0000000..e2a3be6 --- /dev/null +++ b/TAGS/test_generate.py @@ -0,0 +1,13 @@ +""" +Test script to verify the parameter structure generation +""" +import json +from generate_tags import classify_device + +# Test the classify_device function +test_name = "ULC1_8_DPM1" +mcm_name = "MCM01" + +result = classify_device(test_name, mcm_name) +print("Test result:") +print(json.dumps(result, indent=2))