Major upgrade
This commit is contained in:
222
Source/Program/Misc/TestStation.cs
Normal file
222
Source/Program/Misc/TestStation.cs
Normal file
@@ -0,0 +1,222 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
// 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
|
||||
{
|
||||
/// <summary>
|
||||
/// Class that manages anything to do with Special Test Equipment (STE)
|
||||
/// </summary>
|
||||
internal class TestStation
|
||||
{
|
||||
#region PrivateClassMembers
|
||||
private static NLog.ILogger _logger;
|
||||
|
||||
#endregion
|
||||
|
||||
public TestStation()
|
||||
{
|
||||
_logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
Program.Instance().InitializeSwitchMeasurementManager();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Perform cable checks
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verify if cable self test has been run
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verify cable id
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user