diff --git a/.vs/Testrong.User.Program/v17/.suo b/.vs/Testrong.User.Program/v17/.suo index 671686e..1f4bcb7 100644 Binary files a/.vs/Testrong.User.Program/v17/.suo and b/.vs/Testrong.User.Program/v17/.suo differ diff --git a/.vs/Testrong.User.Program/v17/DocumentLayout.backup.json b/.vs/Testrong.User.Program/v17/DocumentLayout.backup.json index f8bad88..e6a507a 100644 --- a/.vs/Testrong.User.Program/v17/DocumentLayout.backup.json +++ b/.vs/Testrong.User.Program/v17/DocumentLayout.backup.json @@ -7,7 +7,8 @@ "RelativeMoniker": "D:0:0:{E96B1A19-D109-4F67-B1AA-5BF15E580D77}|Testrong.User.Program\\Testrong.User.Program.csproj|solutionrelative:testrong.user.program\\userprogram.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\ProgramData\\Testrong\\ATE_Tester\\CalibrationLog\\Init_Files\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" + "AbsoluteMoniker": "D:0:0:{E96B1A19-D109-4F67-B1AA-5BF15E580D77}|Testrong.User.Program\\Testrong.User.Program.csproj|D:\\WORK\\ManLin\\Verify\\UserProgram_time\\testrong.user.program\\keysightdmm3458a.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{E96B1A19-D109-4F67-B1AA-5BF15E580D77}|Testrong.User.Program\\Testrong.User.Program.csproj|solutionrelative:testrong.user.program\\keysightdmm3458a.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -17,17 +18,31 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 1, + "SelectedChildIndex": 4, "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Bookmark", + "Name": "ST:128:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}" + }, { "$type": "Document", "DocumentIndex": 1, - "Title": "config.json", - "DocumentMoniker": "C:\\ProgramData\\Testrong\\ATE_Tester\\CalibrationLog\\Init_Files\\config.json", - "ToolTip": "C:\\ProgramData\\Testrong\\ATE_Tester\\CalibrationLog\\Init_Files\\config.json", - "ViewState": "AQIAAAAAAAAAAAAAAADwvwAAAAAAAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", - "WhenOpened": "2025-04-08T03:13:35.564Z" + "Title": "KeysightDMM3458A.cs", + "DocumentMoniker": "D:\\WORK\\ManLin\\Verify\\UserProgram_time\\Testrong.User.Program\\KeysightDMM3458A.cs", + "RelativeDocumentMoniker": "Testrong.User.Program\\KeysightDMM3458A.cs", + "ToolTip": "D:\\WORK\\ManLin\\Verify\\UserProgram_time\\Testrong.User.Program\\KeysightDMM3458A.cs", + "RelativeToolTip": "Testrong.User.Program\\KeysightDMM3458A.cs", + "ViewState": "AQIAAJ0AAAAAAAAAAAAowKUAAAANAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-15T08:08:04.202Z" }, { "$type": "Document", @@ -37,9 +52,9 @@ "RelativeDocumentMoniker": "Testrong.User.Program\\UserProgram.cs", "ToolTip": "D:\\WORK\\ManLin\\Verify\\UserProgram_time\\Testrong.User.Program\\UserProgram.cs", "RelativeToolTip": "Testrong.User.Program\\UserProgram.cs", - "ViewState": "AgIAABQNAAAAAAAAAAAAwCwNAAANAAAAAAAAAA==", + "ViewState": "AgIAAKMMAAAAAAAAAAAYwL0MAAAqAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-18T12:27:43.78Z", + "WhenOpened": "2025-05-15T06:42:09.386Z", "EditorCaption": "" } ] diff --git a/.vs/Testrong.User.Program/v17/DocumentLayout.json b/.vs/Testrong.User.Program/v17/DocumentLayout.json index 927c477..01166db 100644 --- a/.vs/Testrong.User.Program/v17/DocumentLayout.json +++ b/.vs/Testrong.User.Program/v17/DocumentLayout.json @@ -5,6 +5,10 @@ { "AbsoluteMoniker": "D:0:0:{E96B1A19-D109-4F67-B1AA-5BF15E580D77}|Testrong.User.Program\\Testrong.User.Program.csproj|d:\\work\\manlin\\verify\\userprogram_time\\testrong.user.program\\userprogram.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{E96B1A19-D109-4F67-B1AA-5BF15E580D77}|Testrong.User.Program\\Testrong.User.Program.csproj|solutionrelative:testrong.user.program\\userprogram.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{E96B1A19-D109-4F67-B1AA-5BF15E580D77}|Testrong.User.Program\\Testrong.User.Program.csproj|D:\\WORK\\ManLin\\Verify\\UserProgram_time\\testrong.user.program\\keysightdmm3458a.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{E96B1A19-D109-4F67-B1AA-5BF15E580D77}|Testrong.User.Program\\Testrong.User.Program.csproj|solutionrelative:testrong.user.program\\keysightdmm3458a.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -14,8 +18,32 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 0, + "SelectedChildIndex": 4, "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Bookmark", + "Name": "ST:128:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "KeysightDMM3458A.cs", + "DocumentMoniker": "D:\\WORK\\ManLin\\Verify\\UserProgram_time\\Testrong.User.Program\\KeysightDMM3458A.cs", + "RelativeDocumentMoniker": "Testrong.User.Program\\KeysightDMM3458A.cs", + "ToolTip": "D:\\WORK\\ManLin\\Verify\\UserProgram_time\\Testrong.User.Program\\KeysightDMM3458A.cs", + "RelativeToolTip": "Testrong.User.Program\\KeysightDMM3458A.cs", + "ViewState": "AQIAAJ0AAAAAAAAAAAAowKUAAAANAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-15T08:08:04.202Z" + }, { "$type": "Document", "DocumentIndex": 0, @@ -24,9 +52,9 @@ "RelativeDocumentMoniker": "Testrong.User.Program\\UserProgram.cs", "ToolTip": "D:\\WORK\\ManLin\\Verify\\UserProgram_time\\Testrong.User.Program\\UserProgram.cs", "RelativeToolTip": "Testrong.User.Program\\UserProgram.cs", - "ViewState": "AgIAACACAAAAAAAAAAAkwD4CAAAfAAAAAAAAAA==", + "ViewState": "AgIAAKkOAAAAAAAAAAAowEUOAAANAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-08T08:17:11.815Z", + "WhenOpened": "2025-05-15T06:42:09.386Z", "EditorCaption": "" } ] diff --git a/Testrong.User.Program/KeysightDMM3458A.cs b/Testrong.User.Program/KeysightDMM3458A.cs index 90bf4c8..8677a26 100644 --- a/Testrong.User.Program/KeysightDMM3458A.cs +++ b/Testrong.User.Program/KeysightDMM3458A.cs @@ -132,7 +132,7 @@ namespace Testrong.User.Program return false; } } - text += "NPLC 20;"; + text += "NPLC 5;"; //text += "NPLC 0.05;"; text += "TARM AUTO;"; text += "TRIG AUTO;"; diff --git a/Testrong.User.Program/UserProgram.cs b/Testrong.User.Program/UserProgram.cs index 6864426..0f3f6df 100644 --- a/Testrong.User.Program/UserProgram.cs +++ b/Testrong.User.Program/UserProgram.cs @@ -18,6 +18,7 @@ using Testrong.Core.Model.Ppmu; using Testrong.Core.Model.Relay; using Testrong.Core.Primitives; using Testrong.Core.Primitives.Extend; +using Testrong.Core.Primitives.Service.AcTiming; using Testrong.Core.Primitives.TestrongSystem; namespace Testrong.User.Program @@ -2802,7 +2803,7 @@ namespace Testrong.User.Program List siList = DPS.Measure(DpsPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMV"), testParaSet_dps_fvmv[Range].avgTimes, testParaSet_dps_fvmv[Range].samDelay); double chResult = GetATEChannelMeasure(siList, DpsPinName); double[] readTemp = DPS.ReadTemperature(); - int TempIndex = GetDPSTempSensorIndex(ch); + int TempIndex = GetDPSTempSensorIndex(ListChannels[loopk]); double chTemp; if (TempIndex > readTemp.Length - 1 ) { @@ -2841,7 +2842,7 @@ namespace Testrong.User.Program List siList = DPS.Measure(DpsPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMI"), testParaSet_dps_fvmi[Range].avgTimes, testParaSet_dps_fvmi[Range].samDelay); double chResult = GetATEChannelMeasure(siList, DpsPinName); double[] readTemp = DPS.ReadTemperature(); - int TempIndex = GetDPSTempSensorIndex(ch); + int TempIndex = GetDPSTempSensorIndex(ListChannels[loopk]); double chTemp; if (TempIndex > readTemp.Length - 1 ) { @@ -2889,7 +2890,7 @@ namespace Testrong.User.Program List siList = DPS.Measure(DpsPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMI"), testParaSet_dps_fvmi[Range].avgTimes, testParaSet_dps_fvmi[Range].samDelay); double chResult = GetATEChannelMeasure(siList, DpsPinName); double[] readTemp = DPS.ReadTemperature(); - int TempIndex = GetDPSTempSensorIndex(ch); + int TempIndex = GetDPSTempSensorIndex(ListChannels[loopk]); double chTemp; if (TempIndex > readTemp.Length - 1 ) { @@ -2955,7 +2956,7 @@ namespace Testrong.User.Program List siList = DPS.Measure(DpsPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FIMV"), testParaSet_dps_fimv[Range].avgTimes, testParaSet_dps_fimv[Range].samDelay); double chResult = GetATEChannelMeasure(siList, DpsPinName); double[] readTemp = DPS.ReadTemperature(); - int TempIndex = GetDPSTempSensorIndex(ch); + int TempIndex = GetDPSTempSensorIndex(ListChannels[loopk]); double chTemp; if (TempIndex > readTemp.Length - 1 ) { @@ -3218,7 +3219,7 @@ namespace Testrong.User.Program double[] ForceValue = new double[SampliCount]; double[] DMMValue = new double[SampliCount]; double[] TempValue = new double[SampliCount]; - + double[] customData = new double[65535]; StreamWriter sw = new StreamWriter(filename, true, Encoding.UTF8) { AutoFlush = true @@ -3232,20 +3233,22 @@ namespace Testrong.User.Program PPMU.Force(PmuPinName, 0, PpmuMode.FVMV, PpmuIRange._2mA, VRange.Normal); List zero_V_List = PPMU.Measure(PmuPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMV"), 128, 100); double zeroVResult = GetATEChannelMeasure(zero_V_List, PmuPinName); - sw.Write($"Force_0V_MV={zeroVResult * 1000:F8}mV\n"); + //sw.Write($"Force_0V_MV={zeroVResult * 1000:F8}mV\n"); + customData[0] = zeroVResult; //Force 0V Measure Current PPMU.Force(PmuPinName, 0, PpmuMode.FVMI, PpmuIRange._2mA, VRange.Normal); List zero_I_List = PPMU.Measure(PmuPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMI"), 128, 100); double zeroIResult = GetATEChannelMeasure(zero_I_List, PmuPinName); - sw.Write($"Force_0V_MI={zeroIResult * 1000:F8}mA\n"); + //sw.Write($"Force_0V_MI={zeroIResult * 1000:F8}mA\n"); + customData[1] = zeroIResult; sw.Write("Force Voltage(mV),Measure Voltage(mV),Measure Current(mA),Diff_Voltage(mV),Resistance(FV/MI),Resistance(Caled)\n"); for (int p = 0; p < 50; p++) { PPMU.Force(PmuPinName, ForceV, PpmuMode.FVMI, PpmuIRange._2mA, VRange.Normal); - sw.Write($"{ForceV * 1000:F8},"); + Thread.Sleep(20); List siList = PPMU.Measure(PmuPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMI"), 128, 100); double chResult = GetATEChannelMeasure(siList, PmuPinName); @@ -3253,11 +3256,13 @@ namespace Testrong.User.Program PPMU.Force(PmuPinName, ForceV, PpmuMode.FVMV, PpmuIRange._2mA, VRange.Normal); List svList = PPMU.Measure(PmuPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMV"), 128, 100); double chVResult = GetATEChannelMeasure(svList, PmuPinName); - sw.Write($"{chVResult * 1000:F8},"); - sw.Write($"{chResult * 1000:F8},"); - sw.Write($"{(chVResult - ForceV) * 1000:F8},"); - sw.Write($"{ForceV / chResult:F8},"); - sw.Write($"{(ForceV - zeroVResult) / (chResult - zeroIResult):F8}\n"); + double[] readTemp = PPMU.ReadTemperature(); + double chTemp = readTemp[GetPMUTempSensorIndex(ch)]; + + ForceValue[p] = ForceV; + customData[p + 2] = chVResult; + AteMeasure[p] = chResult; + TempValue[p] = chTemp; //ForceCurrent += CurrentStep; ForceV += Vstep; } @@ -3303,6 +3308,621 @@ namespace Testrong.User.Program SlotThreadLocker(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL"); } + void Rint_FVMI_Test(IFlowRunnerContext context, TestVersion testVersion) + { + #region Init Config & Variables + List ChannelDps = new List(); + List ChannelPmu = new List(); + //-----Select PreTest or ReTest----- + for (int m = 0; m < 256; m++) + { + ChannelPmu.Add(m + 1); + } + //-----get all connect slot number----- + var slotInfos = context.FlowCatalog.GetAll(); + List slotList = new List(); + for (int slotLen = 0; slotLen < slotInfos.Count; slotLen++) + { + if (slotInfos[slotLen].FirmwareVersion == "") + { + continue; + } + slotList.Add(slotInfos[slotLen].No); + } + //-----config Board----- + byte[] armDnaPortCmd = new byte[2] { 14, 57 }; + byte[] armDnaRaw = context.Communicator.Send(armDnaPortCmd); + armDnaRaw = armDnaRaw.Reverse().ToArray(); + string arm_dna = BitConverter.ToUInt64(armDnaRaw, 0).ToString(); + int SlotNum = context.Communicator.SlotNo; + Dictionary M013_PMU = new Dictionary() + { + {166,178 }, + {167,177 }, + {168,176 }, + {169,175 }, + {230,242 }, + {231,241 }, + {232,240 }, + {233,239 } + }; + //-----Move File To History----- + File_Mover(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL_Single"); + + //---------Thread Locker-------- + SlotThreadLocker(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL", lockFlag: true); + + //-----Start Write MetaData----- + StreamWriter swdata; + swdata = new StreamWriter(METADATA_PATH, true, Encoding.UTF8) + { + AutoFlush = true + }; + + Metadata_handler( + swdata: swdata, + SlotNum: SlotNum, + slotList: slotList, + arm_dna: arm_dna, + 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"); + + extCaliHandle.SetPpmuExternalCalibration(extConnStr, extPort, 1, ExternalCalibrationMode.Channel, 1, ExtCaliVI.V, ExtCaliLoad.RC_RL7, 0); //1kΩ + double rload = GetRloadValue(dmm, 2000, 5); + string filetime = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"); + + + #region The Test + + for (int loopk = 0; loopk < 256; loopk++) + { + int ch = ChannelPmu[loopk]; + int ch1 = ChannelPmu[loopk]; + if (ChannelPmu[loopk] >= 1 && ChannelPmu[loopk] <= 18) + { + ch1 = ChannelPmu[loopk] + 46; + } + else if (ChannelPmu[loopk] >= 19 && ChannelPmu[loopk] <= 23) + { + ch1 = ChannelPmu[loopk] + 110; + } + else if (ChannelPmu[loopk] >= 24 && ChannelPmu[loopk] <= 46) + { + ch1 = ChannelPmu[loopk]; + } + else if (ChannelPmu[loopk] >= 47 && ChannelPmu[loopk] <= 64) + { + ch1 = ChannelPmu[loopk] - 46; + } + else if (ChannelPmu[loopk] >= 65 && ChannelPmu[loopk] <= 82) + { + ch1 = ChannelPmu[loopk] + 46; + } + else if (ChannelPmu[loopk] >= 83 && ChannelPmu[loopk] <= 87) + { + ch1 = ChannelPmu[loopk] + 110; + } + else if (ChannelPmu[loopk] >= 88 && ChannelPmu[loopk] <= 110) + { + ch1 = ChannelPmu[loopk]; + } + else if (ChannelPmu[loopk] >= 111 && ChannelPmu[loopk] <= 113) + { + ch1 = ChannelPmu[loopk] - 46; + } + else if (ChannelPmu[loopk] >= 114 && ChannelPmu[loopk] <= 128) + { + ch1 = ChannelPmu[loopk] - 46; + } + else if (ChannelPmu[loopk] >= 129 && ChannelPmu[loopk] <= 133) + { + ch1 = ChannelPmu[loopk] - 110; + } + else if (ChannelPmu[loopk] >= 134 && ChannelPmu[loopk] <= 147) + { + ch1 = ChannelPmu[loopk] + 45; + } + else if (ChannelPmu[loopk] >= 148 && ChannelPmu[loopk] <= 165) + { + ch1 = ChannelPmu[loopk] + 9; + } + else if (ChannelPmu[loopk] >= 166 && ChannelPmu[loopk] <= 169) + { + ch1 = M013_PMU[ChannelPmu[loopk]]; + } + else if (ChannelPmu[loopk] >= 170 && ChannelPmu[loopk] <= 172) + { + ch1 = ChannelPmu[loopk] - 36; + } + else if (ChannelPmu[loopk] >= 173 && ChannelPmu[loopk] <= 192) + { + ch1 = ChannelPmu[loopk] - 36; + } + else if (ChannelPmu[loopk] >= 193 && ChannelPmu[loopk] <= 197) + { + ch1 = ChannelPmu[loopk] - 110; + } + else if (ChannelPmu[loopk] >= 198 && ChannelPmu[loopk] <= 211) + { + ch1 = ChannelPmu[loopk] + 45; + } + else if (ChannelPmu[loopk] >= 212 && ChannelPmu[loopk] <= 229) + { + ch1 = ChannelPmu[loopk] + 9; + } + else if (ChannelPmu[loopk] >= 230 && ChannelPmu[loopk] <= 233) + { + ch1 = M013_PMU[ChannelPmu[loopk]]; + } + else if (ChannelPmu[loopk] >= 234 && ChannelPmu[loopk] <= 256) + { + ch1 = ChannelPmu[loopk] - 36; + } + + #region Test Config + double ForceVoltage = -2; + double VoltageStep = 1; + string[] PmuPinName = { ("A" + (ChannelPmu[loopk] < 10 ? "0" : "") + ChannelPmu[loopk]) }; + // int ch = ChannelPmu[loopk]; + double[] AteMeasure = new double[SampliCount]; + double[] ForceValue = new double[SampliCount]; + double[] DMMValue = new double[SampliCount]; + double[] TempValue = new double[SampliCount]; + + RELAY.SwitchMode(RelayMode.Open); + 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, ch1, 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); + + Thread.Sleep(20); + List siList = PPMU.Measure(PmuPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMV"), 128, 100); + double chResult = GetATEChannelMeasure(siList, PmuPinName); + + double dmmRead = dmm.GetDmmMeasureData(KeysightDMM3458A.KeysightMeasMode.VOLT, 1, 7.5); + + double[] readTemp = PPMU.ReadTemperature(); + double chTemp = readTemp[GetPMUTempSensorIndex(ch)]; + + ForceValue[p] = ForceVoltage; + AteMeasure[p] = chResult; + DMMValue[p] = dmmRead; + 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 + }; + WriteSingleFile(sw: sw, + slot: SlotNum, + dna: arm_dna, + type: "PMU", + channel: ch, + mode: "FVMV", + rload: rload.ToString(), + extR: ExtBoard_Res, + range: "2mA", + ForceValue: ForceValue, + AteMeasure: AteMeasure, + DmmMeasure: DMMValue, + TempValue: TempValue); + + sw.Flush(); + sw.Close(); + + Metadata_handler(swdata: swdata, + SlotNum: SlotNum, + slotList: slotList, + arm_dna: arm_dna, + context: context, + init_Flag: false, + Type: "PMU", + Channel: ch, + Mode: "FVMV", + Rload: rload.ToString(), + 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(); + List datassingle = new List(); + int cnnt = 0; + while (!metareader.EndOfStream) + { + string str = metareader.ReadLine(); + if (cnnt > 6) + { + if (str.Split(',')[0] == arm_dna) + { + path.Add(str); + } + } + 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]; + string file = path[p].Split(',')[8]; + StreamReader singlefile = new StreamReader(EXT_CAL_PATH + file, Encoding.UTF8); + while (!singlefile.EndOfStream) + { + datassingle.Add(singlefile.ReadLine()); + } + double RL = Convert.ToDouble(datassingle[6].Split(',')[1]);//150 + double rext = Convert.ToDouble(datassingle[8].Split(',')[1]); + int ChannelNum = Convert.ToInt32(datassingle[4].Split(',')[1]); + double res = 0; + for (int linefile = 14; linefile < 19; linefile++) + { + if (linefile == 16) + { + continue; + } + 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); //Rint? + } + res = res / 4; //Average + string ChannelFormat; + if (ChannelNum < 10) + { + ChannelFormat = "00" + Convert.ToString(ChannelNum); + } + else if ((ChannelNum >= 10) && (ChannelNum < 100)) + { + ChannelFormat = "0" + Convert.ToString(ChannelNum); + } + else + { + ChannelFormat = Convert.ToString(ChannelNum); + } + Pmur.WriteLine($"ch {ChannelFormat} : {res:F3}"); + rInt[ChannelNum - 1] = res; //Put R_Int into array + datassingle.Clear(); + singlefile.Close(); + } + #endregion + Pmur.Close(); + #endregion + + #region Thread Lock + SlotThreadLocker(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL", lockFlag: false); + #endregion + } + + + /// + /// Verify if the ExtCalibration Board is working as it should. + /// + /// + /// + void ExtBoard_Verify(IFlowRunnerContext context,TestVersion testVersion,double diff_Limit) + { + #region Init Config & Variables + List ChannelDps = new List(); + List ChannelPmu = new List(); + //-----Select PreTest or ReTest----- + for (int m = 0; m < 256; m++) + { + ChannelPmu.Add(m + 1); + } + //-----get all connect slot number----- + var slotInfos = context.FlowCatalog.GetAll(); + List slotList = new List(); + for (int slotLen = 0; slotLen < slotInfos.Count; slotLen++) + { + if (slotInfos[slotLen].FirmwareVersion == "") + { + continue; + } + slotList.Add(slotInfos[slotLen].No); + } + //-----config Board----- + byte[] armDnaPortCmd = new byte[2] { 14, 57 }; + byte[] armDnaRaw = context.Communicator.Send(armDnaPortCmd); + armDnaRaw = armDnaRaw.Reverse().ToArray(); + string arm_dna = BitConverter.ToUInt64(armDnaRaw, 0).ToString(); + int SlotNum = context.Communicator.SlotNo; + + //-----Move File To History----- + File_Mover(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL_Single"); + + //---------Thread Locker-------- + SlotThreadLocker(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL", lockFlag: true); + + //-----Start Write MetaData----- + StreamWriter swdata; + swdata = new StreamWriter(METADATA_PATH, true, Encoding.UTF8) + { + AutoFlush = true + }; + + Metadata_handler( + swdata: swdata, + SlotNum: SlotNum, + slotList: slotList, + arm_dna: arm_dna, + 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"); + string filetime = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"); + + #region The Test + extCaliHandle.SetPpmuExternalCalibration(extConnStr, extPort, 1, ExternalCalibrationMode.Channel, 1, ExtCaliVI.I, ExtCaliLoad.RC_RL18, 0); + double rload = GetRloadValue(dmm, 2000, 5); + if (rload > 1) + { + throw new Exception("rload larger than 1"); + } + for (int loopk = 0; loopk < 256; loopk++) + { + int ch = ChannelPmu[loopk]; + #region Test Config + string[] PmuPinName = { ("A" + (ChannelPmu[loopk] < 10 ? "0" : "") + ChannelPmu[loopk]) }; + RELAY.SwitchMode(RelayMode.Open); + RELAY.SwitchToPPMU(PmuPinName); + double ForceVoltage = -0.015; + double VoltageStep = 0.0075; + string filepath = "Slot" + SlotNum + "_PMU_" + "ch" + ChannelPmu[loopk] + "_" + "FVMI" + "_" + "Hi-Z" + "_" + "2mA" + ".csv"; + 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.I, ExtCaliLoad.RC_RL18, 0);//change channel + + if (loopk == 0) + { + DelayHelper.Sleep(20); + } + #region Actual Test + for (int p = 0; p < SampliCount; p++) + { + PPMU.Force(PmuPinName, ForceVoltage, PpmuMode.FVMI, PpmuIRange._2mA, VRange.Normal); + + Thread.Sleep(20); + List siList = PPMU.Measure(PmuPinName, true, context.BinHandler.GetBinningByTestSuite("ExtCalibration_FVMI"), 128, 100); + double chResult = GetATEChannelMeasure(siList, PmuPinName); + + double dmmRead = dmm.GetDmmMeasureData(KeysightDMM3458A.KeysightMeasMode.CURR, 1, 1); + + double[] readTemp = PPMU.ReadTemperature(); + double chTemp = readTemp[GetPMUTempSensorIndex(ch)]; + + ForceValue[p] = ForceVoltage; + AteMeasure[p] = chResult; + DMMValue[p] = dmmRead; + 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 + }; + WriteSingleFile(sw: sw, + slot: SlotNum, + dna: arm_dna, + type: "PMU", + channel: ch, + mode: "FVMV", + rload: "Hi-Z", + extR: ExtBoard_Res, + range: "2mA", + ForceValue: ForceValue, + AteMeasure: AteMeasure, + DmmMeasure: DMMValue, + TempValue: TempValue); + + sw.Flush(); + sw.Close(); + + Metadata_handler(swdata: swdata, + SlotNum: SlotNum, + slotList: slotList, + arm_dna: arm_dna, + context: context, + init_Flag: false, + Type: "PMU", + Channel: ch, + Mode: "FVMI", + Rload: "Hi-Z", + Range: "2mA", + filepath: filepath, + filetime: filetime); + + #endregion + } + #endregion + swdata.Flush(); + swdata.Close(); + + #region Post Process + #region File Process + StreamReader metareader = new StreamReader(METADATA_PATH, Encoding.UTF8); + List dnaip = new List(); + List path = new List(); + List datassingle = new List(); + int cnnt = 0; + while (!metareader.EndOfStream) + { + string str = metareader.ReadLine(); + if (cnnt > 6) + { + if (str.Split(',')[0] == arm_dna) + { + path.Add(str); + } + } + 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]; + string file = path[p].Split(',')[8]; + StreamReader singlefile = new StreamReader(EXT_CAL_PATH + file, Encoding.UTF8); + while (!singlefile.EndOfStream) + { + datassingle.Add(singlefile.ReadLine()); + } + + int ChannelNum = Convert.ToInt32(datassingle[4].Split(',')[1]); + double res = 0; + double sum = 0; + for (int linefile = 14; linefile < 19; linefile++) + { + if (linefile == 16) + { + continue; + } + double forceV = Convert.ToDouble(datassingle[linefile].Split(',')[0]); + double voltage = Convert.ToDouble(datassingle[linefile].Split(',')[2]); + res = forceV / voltage; + sum += res; + + } + res = sum / 4; //Average + rInt[ChannelNum - 1] = res; //Put R_Int into array + datassingle.Clear(); + singlefile.Close(); + } + double diff = 0; + for (int i = 0; i < path.Count - 1; i++) + { + if (Math.Abs(rInt[i] - rInt[i + 1]) > diff) //Check R Diff + { + diff = Math.Abs(rInt[i] - rInt[i + 1]); + } + if (diff > diff_Limit) + { + Pmur.WriteLine($"Failed! At Channel {i + 1}, Diff={diff}"); + break; + } + if (diff == 0 || Math.Abs(rInt[i])>50) //Same Value OR Unreasonable Value + { + Pmur.WriteLine($"Failed! At Channel {i + 1}, Diff={diff}"); + break; + } + } + if (Math.Abs(rInt[path.Count - 1])>50) //We shall check the last Channel + { + Pmur.WriteLine($"Failed! At Channel {path.Count}, Diff={diff}"); + } + else if (diff < diff_Limit) + { + Pmur.WriteLine($"Passed! Max Diff={diff}"); + } + for (global::System.Int32 i = 0; i < path.Count; i++) + { + string ChannelFormat; + if (i < 9) + { + ChannelFormat = "00" + Convert.ToString(i+1); + } + else if ((i >= 9) && (i < 99)) + { + ChannelFormat = "0" + Convert.ToString(i+1); + } + else + { + ChannelFormat = Convert.ToString(i+1); + } + Pmur.WriteLine($"ch {ChannelFormat} : {rInt[i]:F3}"); + } + + + #endregion + Pmur.Close(); + #endregion + + SlotThreadLocker(SlotNum: SlotNum, slotList: slotList, pathFlag: "CAL"); + + } + + #endregion [TestrongTestCase] @@ -3349,6 +3969,17 @@ namespace Testrong.User.Program Rint_DataUpload(context); } [TestrongTestCase] + public void Check_ExtBoard(IFlowRunnerContext context) + { + ExtBoard_Verify(context, SelectTestVersion, 5); + } + + [TestrongTestCase] + public void Rint_test(IFlowRunnerContext context) + { + Rint_FVMI_Test(context, SelectTestVersion); + } + [TestrongTestCase] public void Rint_Post(IFlowRunnerContext context) { Rint_FVMV_2mA_Post(context, SelectTestVersion); diff --git a/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Common.dll b/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Common.dll index ccfce2a..53df47f 100644 Binary files a/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Common.dll and b/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Common.dll differ diff --git a/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Communicate.dll b/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Communicate.dll index 4362bc7..2f5ac30 100644 Binary files a/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Communicate.dll and b/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Communicate.dll differ diff --git a/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Model.dll b/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Model.dll index 5df3697..740f0ae 100644 Binary files a/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Model.dll and b/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Model.dll differ diff --git a/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Primitives.dll b/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Primitives.dll index e847e7b..8e74c1e 100644 Binary files a/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Primitives.dll and b/Testrong.User.Program/bin/x64/Debug/Testrong.Core.Primitives.dll differ diff --git a/Testrong.User.Program/bin/x64/Debug/UserProgram.dll b/Testrong.User.Program/bin/x64/Debug/UserProgram.dll index fc729bb..34c7986 100644 Binary files a/Testrong.User.Program/bin/x64/Debug/UserProgram.dll and b/Testrong.User.Program/bin/x64/Debug/UserProgram.dll differ diff --git a/Testrong.User.Program/bin/x64/Debug/UserProgram.pdb b/Testrong.User.Program/bin/x64/Debug/UserProgram.pdb index a148a70..ef3b694 100644 Binary files a/Testrong.User.Program/bin/x64/Debug/UserProgram.pdb and b/Testrong.User.Program/bin/x64/Debug/UserProgram.pdb differ diff --git a/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.AssemblyReference.cache b/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.AssemblyReference.cache index 9bf6334..74fc7b3 100644 Binary files a/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.AssemblyReference.cache and b/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.AssemblyReference.cache differ diff --git a/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.CoreCompileInputs.cache b/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.CoreCompileInputs.cache index 5e43543..cdab61d 100644 --- a/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.CoreCompileInputs.cache +++ b/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -1c5e67c428e7ea9ad83db74e3225f3a6ee4bdaaf429227caea859a4df23e5fee +389ecdd76de18bd766d48932e07fb4301e0cd9c461989b8e8de9eb944f961607 diff --git a/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.FileListAbsolute.txt b/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.FileListAbsolute.txt index ea950ae..2f37224 100644 --- a/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.FileListAbsolute.txt +++ b/Testrong.User.Program/obj/x64/Debug/Testrong.User.Program.csproj.FileListAbsolute.txt @@ -2630,3 +2630,56 @@ C:\Users\230210\Desktop\WC\UserProgram_ReWorked_v0.8_t\UserProgram_time\Testrong C:\Users\230210\Desktop\WC\UserProgram_ReWorked_v0.8_t\UserProgram_time\Testrong.User.Program\obj\x64\Debug\Testrong.A8AD3C05.Up2Date C:\Users\230210\Desktop\WC\UserProgram_ReWorked_v0.8_t\UserProgram_time\Testrong.User.Program\obj\x64\Debug\UserProgram.dll C:\Users\230210\Desktop\WC\UserProgram_ReWorked_v0.8_t\UserProgram_time\Testrong.User.Program\obj\x64\Debug\UserProgram.pdb +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\UserProgram.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\UserProgram.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\UserProgram.pdb +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Ivi.Visa.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\NationalInstruments.Visa.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Common.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Communicate.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Model.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Primitives.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\NLog.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\DotNetty.Transport.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\DotNetty.Buffers.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\DotNetty.Codecs.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\System.Threading.Tasks.Dataflow.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\DotNetty.Common.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\System.Buffers.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Globalization.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\AutoMapper.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Datalog.Interfaces.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Hardware.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\MxFFTCalc.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\MWArray.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\MathNet.Numerics.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Gramar.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\System.Threading.Tasks.Extensions.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\System.Runtime.CompilerServices.Unsafe.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Microsoft.Extensions.Logging.Abstractions.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Microsoft.Extensions.Logging.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\STDF.Library.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Microsoft.Bcl.HashCode.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\System.ValueTuple.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Antlr4.Runtime.Standard.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Microsoft.Extensions.DependencyInjection.Abstractions.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Microsoft.Extensions.Options.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Microsoft.Extensions.DependencyInjection.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Microsoft.Extensions.Primitives.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Microsoft.Bcl.AsyncInterfaces.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\System.Memory.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\System.Numerics.Vectors.dll +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Model.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\Testrong.Core.Primitives.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\DotNetty.Transport.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\DotNetty.Buffers.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\DotNetty.Codecs.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\System.Threading.Tasks.Dataflow.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\DotNetty.Common.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\AutoMapper.xml +D:\SYY\UserProgram_time\Testrong.User.Program\bin\x64\Debug\STDF.Library.xml +D:\SYY\UserProgram_time\Testrong.User.Program\obj\x64\Debug\Testrong.User.Program.csproj.AssemblyReference.cache +D:\SYY\UserProgram_time\Testrong.User.Program\obj\x64\Debug\Testrong.User.Program.csproj.CoreCompileInputs.cache +D:\SYY\UserProgram_time\Testrong.User.Program\obj\x64\Debug\Testrong.A8AD3C05.Up2Date +D:\SYY\UserProgram_time\Testrong.User.Program\obj\x64\Debug\UserProgram.dll +D:\SYY\UserProgram_time\Testrong.User.Program\obj\x64\Debug\UserProgram.pdb diff --git a/Testrong.User.Program/obj/x64/Debug/UserProgram.dll b/Testrong.User.Program/obj/x64/Debug/UserProgram.dll index fc729bb..34c7986 100644 Binary files a/Testrong.User.Program/obj/x64/Debug/UserProgram.dll and b/Testrong.User.Program/obj/x64/Debug/UserProgram.dll differ diff --git a/Testrong.User.Program/obj/x64/Debug/UserProgram.pdb b/Testrong.User.Program/obj/x64/Debug/UserProgram.pdb index a148a70..ef3b694 100644 Binary files a/Testrong.User.Program/obj/x64/Debug/UserProgram.pdb and b/Testrong.User.Program/obj/x64/Debug/UserProgram.pdb differ