/*------------------------------------------------------------------------- // UNCLASSIFIED /*------------------------------------------------------------------------- RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON COMPANY. THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S. GOVERNMENT. UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY. -------------------------------------------------------------------------*/ using System; using System.Text.RegularExpressions; using System.Xml; using NLog; using static MeasurementManagerLib.SwitchMeasurementManager; namespace ProgramLib { /// /// Class that manages anything to do with Special Test Equipment (STE) /// internal class TestStation { #region PrivateClassMembers private static NLog.ILogger _logger; #endregion public TestStation() { _logger = LogManager.GetCurrentClassLogger(); Program.Instance().InitializeSwitchMeasurementManager(); } /// /// Perform cable checks /// /// /// public void PerformCableChecks() { try { if (Program.Instance().IsThereHardware) { if (Program.Instance().UutInfo.UniversalCableId == UutInfo.UniversalCable.NOT_SET) { if (CableCheck(ProgramSpecificConfigIni.W1_CABLE_PART_NUMBER.ToString())) { Program.Instance().UutInfo.UniversalCableId = UutInfo.UniversalCable.W1; CableCheck(ProgramSpecificConfigIni.W1_CABLE_SERIAL_NUMBER.ToString()); } } if (Program.Instance().UutInfo.UniversalCableId == UutInfo.UniversalCable.NOT_SET) { if (CableCheck(ProgramSpecificConfigIni.W2_CABLE_PART_NUMBER.ToString())) { Program.Instance().UutInfo.UniversalCableId = UutInfo.UniversalCable.W2; CableCheck(ProgramSpecificConfigIni.W2_CABLE_SERIAL_NUMBER.ToString()); } } if (Program.Instance().UutInfo.UniversalCableId == UutInfo.UniversalCable.NOT_SET) { throw new Exception($"Universal cable ({UutInfo.UniversalCable.W1.ToString()}/{UutInfo.UniversalCable.W2.ToString()}) is not connected."); } // check if UUT is SELF_TEST Cable if (Program.Instance().UutInfo.UutBuildLevel == UutInfo.BuildLevel.NOT_SET) { if (CableCheck(ProgramSpecificConfigIni.W5_CABLE_PART_NUMBER.ToString())) { Program.Instance().UutInfo.UutBuildLevel = UutInfo.BuildLevel.SELF_TEST; CableCheck(ProgramSpecificConfigIni.W5_CABLE_SERIAL_NUMBER.ToString()); } } // check for W3 Cable if (CableCheck(ProgramSpecificConfigIni.W3_CABLE_PART_NUMBER.ToString())) { CableCheck(ProgramSpecificConfigIni.W3_CABLE_SERIAL_NUMBER.ToString()); if (Program.Instance().UutInfo.UutBuildLevel != UutInfo.BuildLevel.SELF_TEST) { Program.Instance().UutInfo.UutBuildLevel = UutInfo.BuildLevel.GMA; } Program.Instance().UutInfo.SacrificialCableId = UutInfo.SacrificialCable.W3; } // check for W4 Cable if (Program.Instance().UutInfo.SacrificialCableId == UutInfo.SacrificialCable.NOT_SET) { if (CableCheck(ProgramSpecificConfigIni.W4_CABLE_PART_NUMBER.ToString())) { CableCheck(ProgramSpecificConfigIni.W4_CABLE_SERIAL_NUMBER.ToString()); if (Program.Instance().UutInfo.UutBuildLevel != UutInfo.BuildLevel.SELF_TEST) { Program.Instance().UutInfo.UutBuildLevel = UutInfo.BuildLevel.AUR; } Program.Instance().UutInfo.SacrificialCableId = UutInfo.SacrificialCable.W4; } } if (Program.Instance().UutInfo.SacrificialCableId == UutInfo.SacrificialCable.NOT_SET) { throw new Exception($"Sacrificial cable ({UutInfo.SacrificialCable.W3.ToString()}/{UutInfo.SacrificialCable.W4.ToString()}) is not connected."); } } } catch (Exception) { throw; } } /// /// Verify if cable self test has been run /// public bool VerifyCableSelfTestHasRun() { bool enforceSelfTestHasRun = false; try { string val = Program.Instance().ProgramSpecificConfig.ReadValue(ProgramSpecificConfigIni.GENERAL.ToString(), ProgramSpecificConfigIni.ENFORCE_CABLE_SELF_TEST_IS_RUN.ToString()); if (String.Equals(val, "true", StringComparison.OrdinalIgnoreCase)) { enforceSelfTestHasRun = true; } } catch (Exception) { } if (enforceSelfTestHasRun) { if (!Program.Instance().CableSelfTestHasRun && Program.Instance().IsThereHardware) { if (Program.Instance().UutInfo.UutBuildLevel != UutInfo.BuildLevel.SELF_TEST) { if (Program.Instance().UutInfo.UniversalCableId != UutInfo.UniversalCable.NOT_SET && Program.Instance().UutInfo.SacrificialCableId != UutInfo.SacrificialCable.NOT_SET) { XmlDocumentWrapper doc = new XmlDocumentWrapper(Program.Instance().FileAndFolderManager.GetFile(FileAndFolderManager.Files.CABLE_SELF_TEST_RUN_LOG)); XmlNode node = doc.GetNode(CableSelfTestConfigXml.SelfTestPath); bool selfTestAlreadyRanToday = false; while (node != null) { if (node.Attributes[CableSelfTestConfigXml.UniversalCableAttributeName] != null && String.Equals(node.Attributes[CableSelfTestConfigXml.UniversalCableAttributeName].Value, Program.Instance().UutInfo.UniversalCableId.ToString(), StringComparison.OrdinalIgnoreCase) && node.Attributes[CableSelfTestConfigXml.SacrificialCableAttributeName] != null && String.Equals(node.Attributes[CableSelfTestConfigXml.SacrificialCableAttributeName].Value, Program.Instance().UutInfo.SacrificialCableId.ToString(), StringComparison.OrdinalIgnoreCase) && node.Attributes[CableSelfTestConfigXml.LastRunDateAttributeName] != null) { string lastRunDateStr = node.Attributes[CableSelfTestConfigXml.LastRunDateAttributeName].Value; DateTime lastRunDate = DateTime.Parse(lastRunDateStr); if (lastRunDate == DateTime.Now.Date) selfTestAlreadyRanToday = true; break; } node = node.NextSibling; } if (!selfTestAlreadyRanToday) { throw new Exception($"Please run self-test on cables {Program.Instance().UutInfo.UniversalCableId} + {Program.Instance().UutInfo.SacrificialCableId}."); } } else throw new Exception("Please perform cable checks before cable self-test enforcement can begin."); } else Program.Instance().CableSelfTestHasRun = true; } else Program.Instance().CableSelfTestHasRun = true; } else Program.Instance().CableSelfTestHasRun = true; return Program.Instance().CableSelfTestHasRun; } /// /// Verify cable id /// /// /// private bool CableCheck(string iniRelayKeyName) { bool checkPass = false; string relayName = Program.Instance().ProgramSpecificConfig.ReadValue(ProgramSpecificConfigIni.CABLE_ID_RELAYS.ToString(), iniRelayKeyName); DMMResistanceMeasurementFields dmmResistanceMeasurementInfo = Program.Instance().MalMeasurementLibManager.SwitchMeasurementManager.DmmResistanceMeasurements[relayName]; double testResult = Program.Instance().MalMeasurementLibManager.SwitchMeasurementManager.DmmReadResistance(relayName); string cableAndPinId = dmmResistanceMeasurementInfo._cableAndPinId; if (Program.Instance().UutInfo.UniversalCableId == UutInfo.UniversalCable.W2 || Regex.IsMatch(relayName, UutInfo.UniversalCable.W2.ToString() + @"_", RegexOptions.IgnoreCase)) cableAndPinId = Regex.Replace(cableAndPinId, UutInfo.UniversalCable.W1.ToString() + @"_", UutInfo.UniversalCable.W2.ToString() + @"_", RegexOptions.IgnoreCase); string description = $"{relayName}, {cableAndPinId} Measured {Util.AutoFormatNumberToString(testResult)} Range [{Util.AutoFormatNumberToString(dmmResistanceMeasurementInfo._lowerLimit)}, {Util.AutoFormatNumberToString(dmmResistanceMeasurementInfo._upperLimit)}]"; _logger.Info(description); if (testResult >= dmmResistanceMeasurementInfo._lowerLimit && testResult <= dmmResistanceMeasurementInfo._upperLimit) { checkPass = true; } return checkPass; } } }