From 8a70c0e96241e8da8635e4d19ac83fa22f9e81ca Mon Sep 17 00:00:00 2001 From: YuYang Shen Date: Fri, 21 Mar 2025 16:15:24 +0800 Subject: [PATCH] Add Region --- .vs/Testrong.User.Program/v17/.suo | Bin 309760 -> 309760 bytes .../v17/DocumentLayout.backup.json | 2 +- .../v17/DocumentLayout.json | 2 +- Testrong.User.Program/.vscode/settings.json | 3 + .../Testrong.User.Program.sln | 24 +++++ Testrong.User.Program/UserProgram.cs | 101 ++++++++++++------ 6 files changed, 98 insertions(+), 34 deletions(-) create mode 100644 Testrong.User.Program/.vscode/settings.json create mode 100644 Testrong.User.Program/Testrong.User.Program.sln diff --git a/.vs/Testrong.User.Program/v17/.suo b/.vs/Testrong.User.Program/v17/.suo index 8dfa707927c08a793453b546dcf1173dc31d12e7..b45c8cde72251de4a3840555fd1b6753f58eb66c 100644 GIT binary patch delta 22434 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 ZHUEw^$Pe`|)!`5I3L2-qbp^)K{{_v~1+f4C delta 6915 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 VZ|C32vg5o^ZkfhcI void Rint_FVMV_2mA_Pre(IFlowRunnerContext context, TestVersion testVersion) { + #region Init Config & Variables List ChannelDps = new List(); List ChannelPmu = new List(); for (int m = 0; m < 256; m++) @@ -1457,11 +1458,6 @@ namespace Testrong.User.Program slotList.Add(slotInfos[slotLen].No); } - //-----config dmm3458A and ExtCalibrationBoard----- - KeysightDMM3458A dmm = new KeysightDMM3458A(); - ExternalCalibrationHandle extCaliHandle = new ExternalCalibrationHandle(); - string extConnStr = Select_IP[testVersion]; - int extPort = port; //-----config Board----- byte[] armDnaPortCmd = new byte[2] { 14, 57 }; byte[] armDnaRaw = context.Communicator.Send(armDnaPortCmd); @@ -1470,9 +1466,6 @@ namespace Testrong.User.Program int SlotNum = context.Communicator.SlotNo; double[,] ExtBoard_Res = ReadRext(EXT_CAL_INIT_PATH + "ExtBoardRes.csv"); - //Folder Related - File_Mover(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL_Single"); - //-----Start Slot Number----- StreamWriter swdata; swdata = new StreamWriter(METADATA_PATH, true, Encoding.UTF8) @@ -1488,11 +1481,27 @@ namespace Testrong.User.Program context: context, init_Flag: true ); + #endregion + + #region Config DMM + //-----config dmm3458A and ExtCalibrationBoard----- + KeysightDMM3458A dmm = new KeysightDMM3458A(); + ExternalCalibrationHandle extCaliHandle = new ExternalCalibrationHandle(); + string extConnStr = Select_IP[testVersion]; + int extPort = port; dmm.InitDMM(ksightConnStr); + #endregion + + //Folder Related + File_Mover(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL_Single"); + string filetime = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"); + + #region Test for (int loopk = 0; loopk < 256; loopk++) { + #region Test Config string[] PmuPinName = { ("A" + (ChannelPmu[loopk] < 10 ? "0" : "") + ChannelPmu[loopk]) }; RELAY.SwitchMode(RelayMode.Open); RELAY.SwitchToPPMU(PmuPinName); @@ -1502,11 +1511,11 @@ namespace Testrong.User.Program string filename = EXT_CAL_PATH + filepath; int ch = ChannelPmu[loopk]; - double[] AteMeasure = new double[SampliCount]; double[] ForceValue = new double[SampliCount]; double[] DMMValue = new double[SampliCount]; double[] TempValue = new double[SampliCount]; + #endregion extCaliHandle.SetPpmuExternalCalibration(extConnStr, extPort, SlotNum, ExternalCalibrationMode.Channel, ch, ExtCaliVI.V, ExtCaliLoad.no_load, 0);//change channel @@ -1514,6 +1523,7 @@ namespace Testrong.User.Program { DelayHelper.Sleep(20); } + #region Actual Test for (int p = 0; p < SampliCount; p++) { PPMU.Force(PmuPinName, ForceVoltage, PpmuMode.FVMV, PpmuIRange._2mA, VRange.Normal); @@ -1534,9 +1544,10 @@ namespace Testrong.User.Program TempValue[p] = chTemp; ForceVoltage += VoltageStep; } + #endregion PPMU.Force(PmuPinName, 0, PpmuMode.FVMV, PpmuIRange._2mA, VRange.Normal); - + #region File Writing StreamWriter sw = new StreamWriter(filename, true, Encoding.UTF8) { AutoFlush = true @@ -1571,11 +1582,14 @@ namespace Testrong.User.Program Range: "2mA", filepath: filepath, filetime: filetime); + + #endregion } - + #endregion SlotThreadLocker(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL"); swdata.Flush(); swdata.Close(); + } /// @@ -1587,6 +1601,7 @@ namespace Testrong.User.Program /// void Rint_FVMV_2mA_Post(IFlowRunnerContext context, TestVersion testVersion) { + #region Init Config & Variables List ChannelDps = new List(); List ChannelPmu = new List(); //-----Select PreTest or ReTest----- @@ -1605,13 +1620,6 @@ namespace Testrong.User.Program } slotList.Add(slotInfos[slotLen].No); } - - //-----config dmm3458A and ExtCalibrationBoard----- - KeysightDMM3458A dmm = new KeysightDMM3458A(); - ExternalCalibrationHandle extCaliHandle = new ExternalCalibrationHandle(); - string extConnStr = Select_IP[testVersion]; - int extPort = port; - //-----config Board----- byte[] armDnaPortCmd = new byte[2] { 14, 57 }; byte[] armDnaRaw = context.Communicator.Send(armDnaPortCmd); @@ -1619,18 +1627,13 @@ namespace Testrong.User.Program string arm_dna = BitConverter.ToUInt64(armDnaRaw, 0).ToString(); int SlotNum = context.Communicator.SlotNo; - //-----Read R File----- - double[,] ExtBoard_Res = ReadRext(EXT_CAL_INIT_PATH + "ExtBoardRes.csv"); - - //-----Move File To History----- - File_Mover(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL_Single"); - - //-----Start Slot Number----- + //-----Start Write MetaData----- StreamWriter swdata; swdata = new StreamWriter(METADATA_PATH, true, Encoding.UTF8) { AutoFlush = true }; + Metadata_handler( swdata: swdata, SlotNum: SlotNum, @@ -1639,13 +1642,33 @@ namespace Testrong.User.Program context: context, init_Flag: true ); + #endregion + + #region Config DMM + //-----config dmm3458A and ExtCalibrationBoard----- + KeysightDMM3458A dmm = new KeysightDMM3458A(); + ExternalCalibrationHandle extCaliHandle = new ExternalCalibrationHandle(); + string extConnStr = Select_IP[testVersion]; + int extPort = port; dmm.InitDMM(ksightConnStr); + #endregion + + //-----Read R File----- + double[,] ExtBoard_Res = ReadRext(EXT_CAL_INIT_PATH + "ExtBoardRes.csv"); + + //-----Move File To History----- + File_Mover(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL_Single"); + + extCaliHandle.SetPpmuExternalCalibration(extConnStr, extPort, 1, ExternalCalibrationMode.Channel, 1, ExtCaliVI.V, ExtCaliLoad.RC_RL7, 0); double rload = GetRloadValue(dmm, 2000, 5); string filetime = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"); + + #region Test for (int loopk = 0; loopk < 256; loopk++) { + #region Test Config double ForceVoltage = -2; double VoltageStep = 1; string[] PmuPinName = { ("A" + (ChannelPmu[loopk] < 10 ? "0" : "") + ChannelPmu[loopk]) }; @@ -1659,13 +1682,14 @@ namespace Testrong.User.Program RELAY.SwitchToPPMU(PmuPinName); string filepath = "Slot" + SlotNum + "_PMU_" + "ch" + ChannelPmu[loopk] + "_" + "FVMV" + "_" + "Hi-Z" + "_" + "2mA" + ".csv"; string filename = EXT_CAL_PATH + filepath; - + #endregion extCaliHandle.SetPpmuExternalCalibration(extConnStr, extPort, SlotNum, ExternalCalibrationMode.Channel, ch, ExtCaliVI.V, ExtCaliLoad.RC_RL7, 0);//change channel if (loopk == 0) { DelayHelper.Sleep(20); } + #region Actual Test for (int p = 0; p < SampliCount; p++) { PPMU.Force(PmuPinName, ForceVoltage, PpmuMode.FVMV, PpmuIRange._2mA, VRange.Normal); @@ -1685,8 +1709,11 @@ namespace Testrong.User.Program TempValue[p] = chTemp; ForceVoltage += VoltageStep; } + #endregion + PPMU.Force(PmuPinName, 0, PpmuMode.FVMV, PpmuIRange._2mA, VRange.Normal); + #region File Writing StreamWriter sw = new StreamWriter(filename, true, Encoding.UTF8) { AutoFlush = true @@ -1721,12 +1748,17 @@ namespace Testrong.User.Program Range: "2mA", filepath: filepath, filetime: filetime); - + #endregion } + + #endregion + swdata.Flush(); swdata.Close(); Thread.Sleep(1000); + #region Post Process + #region File Process StreamReader metareader = new StreamReader(METADATA_PATH, Encoding.UTF8); List dnaip = new List(); List path = new List(); @@ -1745,9 +1777,12 @@ namespace Testrong.User.Program cnnt = cnnt + 1; } metareader.Close(); + string pmurapth = EXT_CAL_PATH + context.Communicator.ServerIP + "_" + "Pmur" + ".txt"; StreamWriter Pmur = new StreamWriter(pmurapth, true); Pmur.AutoFlush = true; + #endregion + #region Rint Calculation for (int p = 0; p < path.Count; p++) { string dna = path[p].Split(',')[0]; @@ -1769,12 +1804,12 @@ namespace Testrong.User.Program } double ateV = Convert.ToDouble(datassingle[linefile].Split(',')[1]); double voltage = Convert.ToDouble(datassingle[linefile].Split(',')[2]); - double iii = voltage / RL; - double diff = ateV - voltage; - double rrr = diff / iii; - res = res + (rrr - rext); + double iii = voltage / RL; //??? + double diff = ateV - voltage; + double rrr = diff / iii; //??? + res = res + (rrr - rext); //Rint? } - res = res / 4; + res = res / 4; //Average string ChannelFormat; if (ChannelNum < 10) { @@ -1793,7 +1828,9 @@ namespace Testrong.User.Program datassingle.Clear(); singlefile.Close(); } + #endregion Pmur.Close(); + #endregion #region Thread Lock SlotThreadLocker(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL");