Unified · Split
| @@ -998,33 +998,48 @@ namespace GSF.PhasorProtocols.UI.ViewModels · 997 unmodified lines | |||
| 998 | 998 | ||
| 999 | if (existingDevice?.ID > 0) | 999 | if (existingDevice?.ID > 0) |
| 1000 | existingPhasors = Phasor.Load(null, Phasor.LoadKeys(null, existingDevice.ID)).ToDictionary(phasor => phasor.SourceIndex - 1, phasor => phasor); | 1000 | existingPhasors = Phasor.Load(null, Phasor.LoadKeys(null, existingDevice.ID)).ToDictionary(phasor => phasor.SourceIndex - 1, phasor => phasor); |
| 1001 | |||
| 1002 | bool phaseMatch(string phaseLabel, string[] phaseMatches) | ||
| 1003 | { | ||
| 1004 | foreach (string match in phaseMatches) | ||
| 1005 | { | ||
| 1006 | string[] variations = { $" {match}", $"{match} ", $"_{match}", $"{match}_", $"_{match}_", $".{match}", $"{match}.", $".{match}." }; | ||
| 1007 | |||
| 1008 | if (variations.Any(matchVariation => phaseLabel.IndexOf(matchVariation, StringComparison.Ordinal) > -1)) | ||
| 1009 | return true; | ||
| 1010 | } | ||
| 1011 | |||
| 1012 | return false; | ||
| 1013 | } | ||
| 1001 | 1014 | ||
| 1002 | string guessPhase(string phase, string phasorLabel) | 1015 | string guessPhase(string phase, string phasorLabel) |
| 1003 | { | 1016 | { |
| 1004 | if (!string.IsNullOrWhiteSpace(phase) && phase != "+") | 1017 | if (!string.IsNullOrWhiteSpace(phase) && phase != "+") |
| 1005 | return phase; | 1018 | return phase; |
| 1006 | 1019 | ||
| 1007 | if (phasorLabel.IndexOf("_VA", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_IA", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" A ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" APV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" API", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VA ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IA ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VAPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IAPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".AV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".AI", StringComparison.Ordinal) > -1) | 1020 | if (phaseMatch(phasorLabel, new[] { "VA", " IA", "APV", "API", "VAPM", "IAPM", "AV", "AI" })) |
| 1008 | return "A"; | 1021 | return "A"; |
| 1009 | 1022 | ||
| 1010 | if (phasorLabel.IndexOf("_VB", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_IB", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" B ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" BPV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" BPI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VB ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IB ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VBPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IBPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".BV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".BI", StringComparison.Ordinal) > -1) | 1023 | if (phaseMatch(phasorLabel, new[] { "VB", "IB", "BPV", "BPI", "VBPM", "IBPM", "BV", "BI" })) |
| 1011 | return "B"; | 1024 | return "B"; |
| 1012 | 1025 | ||
| 1013 | if (phasorLabel.IndexOf("_VC", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_IC", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" C ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" CPV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" CPI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VC ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IC ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VCPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("ICPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".CV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".CI", StringComparison.Ordinal) > -1) | 1026 | if (phaseMatch(phasorLabel, new[] { "VC", "IC", "CPV", "CPI", "VCPM", "ICPM", "CV", "CI" })) |
| 1014 | return "C"; | 1027 | return "C"; |
| 1015 | 1028 | ||
| 1016 | if (phasorLabel.IndexOf("_VN", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_IN", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" NEUT ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" NPV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" NPI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VN ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IN ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VNPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("INPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".NV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".NI", StringComparison.Ordinal) > -1) | 1029 | if (phaseMatch(phasorLabel, new[] { "VN", "IN", "NEUT", "NPV", "NPI", "VNPM", "INPM", "NV", "NI" })) |
| 1017 | return "N"; | 1030 | return "N"; |
| 1018 | 1031 | ||
| 1019 | if (phasorLabel.IndexOf("_V0", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_I0", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" ZERO ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" ZPV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" ZPI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VZ ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IZ ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VSPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VZPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IZPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".ZV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".ZI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_ZS", StringComparison.Ordinal) > -1) | 1032 | if (phaseMatch(phasorLabel, new[] { "V0", "I0", "ZERO", "ZPV", "ZPI", "VSPM", "VZPM", "IZPM", "ZS", "ZSV", "ZSI", "0SV", "0SI" })) |
| 1020 | return "0"; | 1033 | return "0"; |
| 1021 | 1034 | ||
| 1022 | if (phasorLabel.IndexOf("_V2", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_I2", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" NEG ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" -SV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" -SI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("V2 ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("I2 ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("V2PM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("I2PM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".-V", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".-I", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_NS", StringComparison.Ordinal) > -1) | 1035 | if (phaseMatch(phasorLabel, new[] { "V1", "I1", "POS", "V1PM", "I1PM", "PS", "PSV", "PSI", "+SV", "+SI", "+V", "+I" })) |
| 1036 | return "+"; | ||
| 1037 | |||
| 1038 | // -V and -I may match too often, so check these last | ||
| 1039 | if (phaseMatch(phasorLabel, new[] { "V2", "I2", "NEG", "-SV", "-SI", "V2PM", "I2PM", "NS", "NSV", "NSI", "-V", "-I" })) | ||
| 1023 | return "-"; | 1040 | return "-"; |
| 1024 | 1041 | ||
| 1025 | return phasorLabel.IndexOf("_V1", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_I1", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" POS ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" +SV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" +SI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" SI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("V1 ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("I1 ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("V1PM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("I1PM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".+V", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".+I", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_PS", StringComparison.Ordinal) > -1 | 1042 | return string.IsNullOrWhiteSpace(phase) ? "?" : phase; |
| 1026 | ? "+" | ||
| 1027 | : string.IsNullOrWhiteSpace(phase) ? "?" : phase; | ||
| 1028 | } | 1043 | } |
| 1029 | 1044 | ||
| 1030 | string guessBaseKV(string baseKV, string phasorLabel, string deviceLabel) | 1045 | string guessBaseKV(string baseKV, string phasorLabel, string deviceLabel) |