NormalTemperatureTest.cs 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. using System.Threading;
  8. using Tps_LQ_Transmitter.com;
  9. using System.Diagnostics;
  10. namespace Tps_LQ_Transmitter.models
  11. {
  12. /// <summary>
  13. /// 常温检查测试
  14. /// </summary>
  15. class NormalTemperatureTest : BaseModel
  16. {
  17. public NormalTemperatureTest()
  18. {
  19. TemplateName = "常温检查测试";
  20. }
  21. public override bool Run(TestNode parameters, List<TestNode> nodes)
  22. {
  23. // DateTime currentTime1 = new DateTime();
  24. // Random random = new Random();
  25. // //获取仪器
  26. // var SA = this.tps.GetDevice("频谱仪");
  27. // var DC = this.tps.GetDevice("程控电源");
  28. // /*
  29. // if (DC == null || SA == null)
  30. // {
  31. // ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行", parameters.Channel, parameters.Name));
  32. // return false;
  33. // }
  34. // */
  35. // OpenExcel("测试过程值", out Spire.Xls.Workbook workbook, out Spire.Xls.Worksheet sheet);
  36. // if (sheet == null)
  37. // {
  38. // ShowMessage(MsgType.Error, "找不到"+ tps.TestProject + "模板.xlsx");
  39. // return false;
  40. // }
  41. // ConfigParameter PowerPara = new ConfigParameter();
  42. // PowerPara.IntervalTime = parameters.Parameters.GetParameter<int>("相对时间");//min
  43. // PowerPara.TestTime = parameters.Parameters.GetParameter<int>("测试次数");//min
  44. // int IntervalTime = (int)(PowerPara.IntervalTime * 60);//将min转换成s
  45. // int time=0;
  46. // Stopwatch TimesCounter = new Stopwatch();
  47. // while ( time < PowerPara.TestTime)
  48. // {
  49. // currentTime1 = DateTime.Now;
  50. // TimesCounter.Restart();
  51. // //tps.SetTestTableCellValue(time, 3, true, currentTime1.Hour.ToString()+":"+ currentTime1.Minute.ToString());//测试时间
  52. // //tps.SetTestTableCellValue(time + PowerPara.TestTime, 3, true, currentTime1.Hour.ToString() + ":" + currentTime1.Minute.ToString());//测试时间
  53. // tps.TestTableAddCell("绝对时间","/", "/", currentTime1.Hour.ToString() + ":" + currentTime1.Minute.ToString(), "/");
  54. // WriteExcelData(sheet, 1 + time * 10, 1,"绝对时间", "/", "/", currentTime1.Hour.ToString() + ":" + currentTime1.Minute.ToString(), "/");
  55. // MainTest(parameters,time,workbook,sheet);
  56. // if (time == 3)
  57. // {
  58. // IntervalTime = IntervalTime * 2;
  59. // }
  60. // while (TimesCounter.Elapsed.TotalSeconds <= IntervalTime && time!= PowerPara.TestTime-1)
  61. // {
  62. // Thread.Sleep(100);
  63. // if (IsRuning == false)
  64. // {
  65. // return false;
  66. // }
  67. // }
  68. // TimesCounter.Stop();
  69. // time = time + 1;
  70. // }
  71. // SaveExcel(workbook);
  72. // return true;
  73. //}
  74. //public bool MainTest(TestNode parameters,int time, Spire.Xls.Workbook workbook, Spire.Xls.Worksheet sheet)
  75. //{
  76. // Random random = new Random();
  77. // DataType VoltDataPrint = new DataType();
  78. // DataType CurrentDataPrint = new DataType();
  79. // DataType PowerPrint = new DataType();//功率(dBm)
  80. // DataType FreqPrint = new DataType();//实测频率
  81. // DataType FreqAccuracyPrint = new DataType();//频率稳定度
  82. // DataType PowerSumPrint = new DataType();//两路功率总和(w)
  83. // DataType PowerFlatnessPrint = new DataType();//两路功率不平度(dB)
  84. // DataType ModulationIndexPrint = new DataType();
  85. // DataType MaxFreqOffsetPrint = new DataType();
  86. // DataType DBMaxFreqOffsetPrint = new DataType();
  87. // DataType SpuriousSuppressionPrint = new DataType();
  88. // DataType HarmonicSuppressionPrint = new DataType();
  89. // //获取仪器
  90. // var SA = this.tps.GetDevice("频谱仪");
  91. // var DC = this.tps.GetDevice("程控电源");
  92. // TransmitterSerialPort SerialClient = new TransmitterSerialPort();
  93. // TestPara Data = new TestPara();
  94. // /*
  95. // if (DC == null || SA == null)
  96. // {
  97. // ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行", parameters.Channel, parameters.Name));
  98. // return false;
  99. // }
  100. // */
  101. // MatchModulaPara CfigModuParas = new MatchModulaPara();
  102. // CfigModuParas = LoadModulationWorkBook();
  103. // ConfigParameter PowerPara = new ConfigParameter();
  104. // PowerPara.ComPort = parameters.Parameters.GetParameter<string>("串口");
  105. // PowerPara.OutLoss = parameters.Parameters.GetParameter<double>("输出损耗");
  106. // PowerPara.ChannelPara = parameters.Parameters.GetParameter<int>("通道数");
  107. // PowerPara.StartFrequency = parameters.Parameters.GetParameter<double>("起始频率");
  108. // PowerPara.StepFrequency = parameters.Parameters.GetParameter<double>("频率步进");
  109. // PowerPara.FrequencyNumber = parameters.Parameters.GetParameter<int>("频点数量");
  110. // PowerPara.StopFrequency = parameters.Parameters.GetParameter<double>("终止频率");
  111. // PowerPara.SPAN = parameters.Parameters.GetParameter<string>("扫描带宽(SPAN)");
  112. // PowerPara.REF = parameters.Parameters.GetParameter<string>("参考电平(REF)");
  113. // PowerPara.SmallSignalREF = parameters.Parameters.GetParameter<string>("小信号参考电平(REF)");
  114. // PowerPara.RBW = parameters.Parameters.GetParameter<string>("分辨率带宽(RBW)");
  115. // PowerPara.VBW = parameters.Parameters.GetParameter<string>("视频带宽(VBW)");
  116. // PowerPara.HarmonicTime = parameters.Parameters.GetParameterToArray<int>("谐波次数");
  117. // PowerPara.ControlDelay = parameters.Parameters.GetParameter<int>("控制延时");
  118. // PowerPara.VoltLower = parameters.Parameters.GetParameter<double>("电压下限");
  119. // PowerPara.VoltUpper = parameters.Parameters.GetParameter<double>("电压上限");
  120. // PowerPara.CurrentLower = parameters.Parameters.GetParameter<double>("电流下限");
  121. // PowerPara.CurrentUpper = parameters.Parameters.GetParameter<double>("电流上限");
  122. // PowerPara.PowerLower = parameters.Parameters.GetParameter<double>("功率下限");
  123. // PowerPara.PowerUpper = parameters.Parameters.GetParameter<double>("功率上限");
  124. // //PowerPara.FreqAccuracyUpper = parameters.Parameters.GetParameter<double>("频率稳定度上限");
  125. // // PowerPara.PowerFlatnessUpper = parameters.Parameters.GetParameter<double>("功率不平度上限");
  126. // // PowerPara.ModulationIndexLower = parameters.Parameters.GetParameter<double>("调制系数下限");
  127. // // PowerPara.ModulationIndexUpper = parameters.Parameters.GetParameter<double>("调制系数上限");
  128. // PowerPara.MaxFreqOffsetLower = parameters.Parameters.GetParameter<double>("最大频偏(KHz)下限");
  129. // PowerPara.MaxFreqOffsetUpper = parameters.Parameters.GetParameter<double>("最大频偏(KHz)上限");
  130. // PowerPara.SpuriousSuppressionLower = parameters.Parameters.GetParameter<double>("杂波抑制下限");
  131. // PowerPara.HarmonicSuppressionLower = parameters.Parameters.GetParameter<double>("谐波抑制下限");
  132. // if ((PowerPara.StartFrequency == 0) ||(PowerPara.ChannelPara == 0) ||((PowerPara.StepFrequency == 0) && (PowerPara.FrequencyNumber == 0)) || (PowerPara.StopFrequency == 0)
  133. // || (PowerPara.SPAN == null) || (PowerPara.REF == null) || (PowerPara.RBW == null) || (PowerPara.VBW == null) || (PowerPara.PowerLower == 0)
  134. // || (PowerPara.PowerUpper == 0) || (PowerPara.MaxFreqOffsetLower == 0) || (PowerPara.MaxFreqOffsetUpper == 0) || (PowerPara.SpuriousSuppressionLower == 0)
  135. // ||(PowerPara.HarmonicSuppressionLower == 0))
  136. // {
  137. // ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行", parameters.Channel, parameters.Name));
  138. // return false;
  139. // }
  140. // if (PowerPara.ControlDelay == 0)
  141. // {
  142. // PowerPara.ControlDelay = 10;
  143. // }
  144. // if ((PowerPara.FrequencyNumber != 0) && (PowerPara.FrequencyNumber != 1) && (PowerPara.StepFrequency == 0))
  145. // {
  146. // PowerPara.StepFrequency = ((int)(((PowerPara.StopFrequency - PowerPara.StartFrequency) / (PowerPara.FrequencyNumber - 1)) * 100)) / 100;
  147. // }
  148. // if (PowerPara.StepFrequency != 0)
  149. // {
  150. // PowerPara.FrequencyNumber = ((int)((PowerPara.StopFrequency - PowerPara.StartFrequency) / PowerPara.StepFrequency)) + 1;
  151. // }
  152. // int channel = 0;
  153. // int point = 0;
  154. // string Result;
  155. // double CenterFreq;
  156. // double[] PowerDelt = new double[PowerPara.FrequencyNumber];
  157. // Data.Power = new double[PowerPara.FrequencyNumber];
  158. // Data.Freq = new double[PowerPara.FrequencyNumber];
  159. // Data.FreqAccuracy = new double[PowerPara.FrequencyNumber];
  160. // Data.ModulationIndex = new string[PowerPara.FrequencyNumber];
  161. // Data.MaxFreqOffset = new string[PowerPara.FrequencyNumber];
  162. // Data.DBMaxFreqOffset = new string[PowerPara.FrequencyNumber];
  163. // for (channel = 0; channel < PowerPara.ChannelPara; channel++)
  164. // {
  165. // #region 输出功率、频率、电压、电流、调制频偏dB、调制频偏KHz测试
  166. // //SA.Write("仪器复位"); SA.Query("OPC");
  167. // //SA.Write("SPAN", PowerPara.SPAN); SA.Query("OPC");
  168. // //SA.Write("RBW", PowerPara.RBW); SA.Query("OPC");
  169. // //SA.Write("VBW", PowerPara.VBW); SA.Query("OPC");
  170. // //SA.Write("REF", PowerPara.REF); SA.Query("OPC");
  171. // //SA.Write("SingleOrCont", "0"); SA.Query("OPC");
  172. // //SA.Write("MARK打开", "1"); SA.Query("OPC");
  173. // //SA.Write("MARK打开", "2"); SA.Query("OPC");
  174. // //SA.Write("DELT打开", "2"); SA.Query("OPC");
  175. // for (point = 0; ; point++)
  176. // {
  177. // CenterFreq = PowerPara.StartFrequency + PowerPara.StepFrequency * point;
  178. // if (CenterFreq > PowerPara.StopFrequency || (PowerPara.FrequencyNumber == 1 && point == 1))
  179. // {
  180. // break;
  181. // }
  182. // //控制
  183. // //SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1));
  184. // Thread.Sleep(PowerPara.ControlDelay);//单位ms
  185. // #region 电压、电流测试
  186. // //Data.VoltVal[point] = DC.Query("读取电压");
  187. // //Data.CurrentVal[point] = DC.Query("读取电流");
  188. // VoltDataPrint.Test_name = "通道" + (channel+1).ToString() + "-" + "电压测试-" + CenterFreq.ToString() + "MHz";
  189. // VoltDataPrint.Lower = PowerPara.VoltLower;
  190. // VoltDataPrint.Upper = PowerPara.VoltUpper;
  191. // //VoltDataPrint.TestVal = double.Parse(Data.VoltVal[point]);
  192. // VoltDataPrint.TestVal = random.Next(2500, 3000) / 100.0;//随机数
  193. // Judge(VoltDataPrint.Lower, VoltDataPrint.Upper, VoltDataPrint.TestVal, out Result);
  194. // VoltDataPrint.Result = Result;
  195. // CurrentDataPrint.Test_name = "通道" + (channel + 1).ToString() + "-" + "电流测试-" + CenterFreq.ToString() + "MHz";
  196. // CurrentDataPrint.Lower = PowerPara.CurrentLower;
  197. // CurrentDataPrint.Upper = PowerPara.CurrentUpper;
  198. // //CurrentDataPrint.TestVal = double.Parse(Data.CurrentVal[point]);
  199. // CurrentDataPrint.TestVal = random.Next(90, 160) / 100.0;
  200. // Judge(CurrentDataPrint.Lower, CurrentDataPrint.Upper, CurrentDataPrint.TestVal, out Result);
  201. // CurrentDataPrint.Result = Result;
  202. // #endregion
  203. // #region 输出功率、频率测试
  204. // //SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
  205. // //SA.Write("PEAK", "1"); SA.Query("OPC");
  206. // //SA.Write("NextPeak", "2"); SA.Query("OPC");
  207. // // PsaPeakValue_Tracedata(SA, out y_value, out x_value, true);
  208. // // Data.Power[point] = y_value + PowerPara.OutLoss;//功率
  209. // Data.Power[point] = random.Next(3000, 4000) / 100.0;//随机数
  210. // PowerPrint.Test_name = "通道" + (channel + 1).ToString() + "-" + "功率测试(W)-" + CenterFreq.ToString() + "MHz";
  211. // PowerPrint.Lower = PowerPara.PowerLower;
  212. // PowerPrint.Upper = PowerPara.PowerUpper;
  213. // PowerPrint.TestVal = Math.Round(Math.Pow(10, (Data.Power[point] / 10)) / 1000, 2);//功率W
  214. // Judge(PowerPrint.Lower, PowerPrint.Upper, PowerPrint.TestVal, out Result);
  215. // PowerPrint.Result = Result;
  216. // FreqPrint.Test_name = "通道" + (channel + 1).ToString() + "-" + "频率测试(MHz)-" + CenterFreq.ToString() + "MHz";
  217. // FreqPrint.Lower = 0 - ((PowerPara.FreqAccuracyUpper * CenterFreq) + CenterFreq);
  218. // FreqPrint.Upper = (PowerPara.FreqAccuracyUpper * CenterFreq) + CenterFreq;
  219. // // FreqPrint.TestVal = Math.Round(x_value / 1000000, 3);//实测频率
  220. // FreqPrint.TestVal = random.Next(-600, 6000) / 100.0 + CenterFreq;//随机数
  221. // Judge(FreqPrint.Lower, FreqPrint.Upper, FreqPrint.TestVal, out Result);
  222. // FreqPrint.Result = Result;
  223. // #endregion
  224. // #region 调制测试
  225. // //PowerDelt[point] = double.Parse(SA.Query("读DELT功率", "2")); SA.Query("OPC");
  226. // PowerDelt[point] = random.Next(500, 1200) / 100.0;//随机数
  227. // double temp = 30;
  228. // string RelativeVal = "0";
  229. // foreach (KeyValuePair<string, ModulationMatchParameter> kvp in CfigModuParas.ModulaParameters)
  230. // {
  231. // if ((Math.Abs(PowerDelt[point] - double.Parse(kvp.Value.CfgRelative))) < temp)
  232. // {
  233. // temp = Math.Abs(PowerDelt[point] - double.Parse(kvp.Value.CfgRelative));
  234. // RelativeVal = kvp.Value.CfgRelative;
  235. // }
  236. // }
  237. // //Data.ModulationIndex[point] = CfigModuParas.GetModulaParameter(RelativeVal);//调制系数
  238. // Data.MaxFreqOffset[point] = CfigModuParas.GetFreqOffsetParameter(RelativeVal);//最大频偏kHz
  239. // Data.DBMaxFreqOffset[point] = PowerDelt[point].ToString();//最大频偏dB
  240. // //ModulationIndexPrint.TestVal = double.Parse(Data.ModulationIndex[point]);
  241. // //Judge (PowerPara.ModulationIndexLower, PowerPara.ModulationIndexUpper, ModulationIndexPrint.TestVal, out Result);
  242. // //ModulationIndexPrint.Result = Result;
  243. // MaxFreqOffsetPrint.Test_name = "通道" + (channel + 1).ToString() + "-" + "调制频偏(KHz)-" + CenterFreq.ToString() + "MHz";
  244. // DBMaxFreqOffsetPrint.Test_name = "通道" + (channel + 1).ToString() + "-" + "调制频偏(dB)-" + CenterFreq.ToString() + "MHz";
  245. // MaxFreqOffsetPrint.Lower = PowerPara.MaxFreqOffsetLower;
  246. // MaxFreqOffsetPrint.Upper = PowerPara.MaxFreqOffsetUpper;
  247. // MaxFreqOffsetPrint.TestVal = double.Parse(Data.MaxFreqOffset[point]);
  248. // DBMaxFreqOffsetPrint.TestVal = double.Parse(Data.DBMaxFreqOffset[point]);
  249. // Judge(MaxFreqOffsetPrint.Lower, MaxFreqOffsetPrint.Upper, MaxFreqOffsetPrint.TestVal, out Result);
  250. // MaxFreqOffsetPrint.Result = Result;
  251. // DBMaxFreqOffsetPrint.Result = Result;
  252. // tps.TestTableAddCell(VoltDataPrint.Test_name, VoltDataPrint.Lower.ToString(), VoltDataPrint.Upper.ToString(), VoltDataPrint.TestVal.ToString(), VoltDataPrint.Result);
  253. // tps.TestTableAddCell(CurrentDataPrint.Test_name, CurrentDataPrint.Lower.ToString(), CurrentDataPrint.Upper.ToString(), CurrentDataPrint.TestVal.ToString(), CurrentDataPrint.Result);
  254. // tps.TestTableAddCell(FreqPrint.Test_name, FreqPrint.Lower.ToString(), FreqPrint.Upper.ToString(), FreqPrint.TestVal.ToString(), FreqPrint.Result);
  255. // tps.TestTableAddCell(DBMaxFreqOffsetPrint.Test_name, DBMaxFreqOffsetPrint.Lower.ToString(), DBMaxFreqOffsetPrint.Upper.ToString(), DBMaxFreqOffsetPrint.TestVal.ToString(), DBMaxFreqOffsetPrint.Result);
  256. // tps.TestTableAddCell(MaxFreqOffsetPrint.Test_name, MaxFreqOffsetPrint.Lower.ToString(), MaxFreqOffsetPrint.Upper.ToString(), MaxFreqOffsetPrint.TestVal.ToString(), MaxFreqOffsetPrint.Result);
  257. // tps.TestTableAddCell(PowerPrint.Test_name, PowerPrint.Lower.ToString(), PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  258. // #endregion
  259. // if (channel == 0)
  260. // {
  261. // WriteExcelData(sheet, point + 2 + time * 10, 1, VoltDataPrint.Test_name, VoltDataPrint.Lower.ToString(), VoltDataPrint.Upper.ToString(), VoltDataPrint.TestVal.ToString(), VoltDataPrint.Result);
  262. // WriteExcelData(sheet, point + 3 + time * 10, 1, CurrentDataPrint.Test_name, CurrentDataPrint.Lower.ToString(), CurrentDataPrint.Upper.ToString(), CurrentDataPrint.TestVal.ToString(), CurrentDataPrint.Result);
  263. // WriteExcelData(sheet, point + 4 + time * 10, 1, FreqPrint.Test_name, FreqPrint.Lower.ToString(), FreqPrint.Upper.ToString(), FreqPrint.TestVal.ToString(), FreqPrint.Result);
  264. // WriteExcelData(sheet, point + 5 + time * 10, 1, DBMaxFreqOffsetPrint.Test_name, DBMaxFreqOffsetPrint.Lower.ToString(), DBMaxFreqOffsetPrint.Upper.ToString(), DBMaxFreqOffsetPrint.TestVal.ToString(), DBMaxFreqOffsetPrint.Result);
  265. // WriteExcelData(sheet, point + 6 + time * 10, 1, MaxFreqOffsetPrint.Test_name, MaxFreqOffsetPrint.Lower.ToString(), MaxFreqOffsetPrint.Upper.ToString(), MaxFreqOffsetPrint.TestVal.ToString(), MaxFreqOffsetPrint.Result);
  266. // WriteExcelData(sheet, point + 7 + time * 10, 1, PowerPrint.Test_name, PowerPrint.Lower.ToString(), PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  267. // //tps.SetTestTableCellValue(point + time, 4, VoltDataPrint.Result, VoltDataPrint.TestVal);//供电电压(V)
  268. // //tps.SetTestTableCellValue(point + time, 5, CurrentDataPrint.Result, CurrentDataPrint.TestVal);//消耗电流(A)
  269. // //tps.SetTestTableCellValue(point + time, 6, FreqPrint.Result, FreqPrint.TestVal);//输出频率(kHz)
  270. // //tps.SetTestTableCellValue(point + time, 7, DBMaxFreqOffsetPrint.Result, DBMaxFreqOffsetPrint.TestVal);//调制频偏(dB)
  271. // //tps.SetTestTableCellValue(point + time, 8, MaxFreqOffsetPrint.Result, MaxFreqOffsetPrint.TestVal);//调制频偏(kHz)
  272. // //tps.SetTestTableCellValue(point + time, 9, PowerPrint.Result, PowerPrint.TestVal);//输出功率(W)
  273. // }
  274. // else if (channel == 1)
  275. // {
  276. // WriteExcelData(sheet, point + 2 + time * 10, 2, VoltDataPrint.Test_name, VoltDataPrint.Lower.ToString(), VoltDataPrint.Upper.ToString(), VoltDataPrint.TestVal.ToString(), VoltDataPrint.Result);
  277. // WriteExcelData(sheet, point + 3 + time * 10, 2, CurrentDataPrint.Test_name, CurrentDataPrint.Lower.ToString(), CurrentDataPrint.Upper.ToString(), CurrentDataPrint.TestVal.ToString(), CurrentDataPrint.Result);
  278. // WriteExcelData(sheet, point + 4 + time * 10, 2, FreqPrint.Test_name, FreqPrint.Lower.ToString(), FreqPrint.Upper.ToString(), FreqPrint.TestVal.ToString(), FreqPrint.Result);
  279. // WriteExcelData(sheet, point + 5 + time * 10, 2, DBMaxFreqOffsetPrint.Test_name, DBMaxFreqOffsetPrint.Lower.ToString(), DBMaxFreqOffsetPrint.Upper.ToString(), DBMaxFreqOffsetPrint.TestVal.ToString(), DBMaxFreqOffsetPrint.Result);
  280. // WriteExcelData(sheet, point + 6 + time * 10, 2, MaxFreqOffsetPrint.Test_name, MaxFreqOffsetPrint.Lower.ToString(), MaxFreqOffsetPrint.Upper.ToString(), MaxFreqOffsetPrint.TestVal.ToString(), MaxFreqOffsetPrint.Result);
  281. // WriteExcelData(sheet, point + 7 + time * 10, 2, PowerPrint.Test_name, PowerPrint.Lower.ToString(), PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  282. // //tps.SetTestTableCellValue(point + time + 5, 4, VoltDataPrint.Result, VoltDataPrint.TestVal);//供电电压(V)
  283. // //tps.SetTestTableCellValue(point + time + 5, 5, CurrentDataPrint.Result, CurrentDataPrint.TestVal);//消耗电流(A)
  284. // //tps.SetTestTableCellValue(point + time + 5, 6, FreqPrint.Result, FreqPrint.TestVal);//输出频率(kHz)
  285. // //tps.SetTestTableCellValue(point + time + 5, 7, DBMaxFreqOffsetPrint.Result, DBMaxFreqOffsetPrint.TestVal);//调制频偏(dB)
  286. // //tps.SetTestTableCellValue(point + time + 5, 8, MaxFreqOffsetPrint.Result, MaxFreqOffsetPrint.TestVal);//调制频偏(kHz)
  287. // //tps.SetTestTableCellValue(point + time + 5, 9, PowerPrint.Result, PowerPrint.TestVal);//输出功率(W)
  288. // }
  289. // }
  290. // #endregion
  291. // #region 杂波抑制
  292. // //SA.Write("仪器复位"); SA.Query("OPC");
  293. // //SA.Write("SPAN", PowerPara.SPAN); SA.Query("OPC");
  294. // //SA.Write("REF", PowerPara.SmallSignalREF); SA.Query("OPC");
  295. // //SA.Write("RBW", PowerPara.RBW); SA.Query("OPC");
  296. // //SA.Write("VBW", PowerPara.VBW); SA.Query("OPC");
  297. // //SA.Write("SingleOrCont", "0"); SA.Query("OPC");
  298. // for (point = 0; ; point++)
  299. // {
  300. // CenterFreq = PowerPara.StartFrequency + PowerPara.StepFrequency * point;
  301. // if (CenterFreq > PowerPara.StopFrequency || (PowerPara.FrequencyNumber == 1 && point == 1))
  302. // {
  303. // break;
  304. // }
  305. // //// 控制
  306. // //SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1));
  307. // //Thread.Sleep(PowerPara.ControlDelay);//单位ms
  308. // //SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
  309. // //PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
  310. // //Power = y_value;
  311. // ////测主频左侧杂散
  312. // //SA.Write("START", PowerPara.LeftStart.ToString()); SA.Query("OPC");
  313. // //SA.Write("STOP", (CenterFreq - PowerPara.LeftOffset).ToString()); SA.Query("OPC");
  314. // //PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
  315. // //PowerLeft = Power - y_value;
  316. // ////测主频右侧杂散
  317. // //SA.Write("START", (CenterFreq + PowerPara.RightOffset).ToString()); SA.Query("OPC");
  318. // //SA.Write("STOP", PowerPara.RightStop.ToString()); SA.Query("OPC");
  319. // //PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
  320. // //PowerRigth = Power - y_value;
  321. // SpuriousSuppressionPrint.Test_name = "通道" + (channel + 1).ToString() + "-" + "杂波抑制测试(KHz)-" + CenterFreq.ToString() + "MHz";
  322. // SpuriousSuppressionPrint.Lower = PowerPara.SpuriousSuppressionLower;
  323. // //SpuriousSuppressionPrint.TestVal = Math.Round(Math.Min(PowerLeft, PowerRigth), 2);
  324. // SpuriousSuppressionPrint.TestVal = random.Next(4000, 12000) / 100.0;//随机数
  325. // Judge(SpuriousSuppressionPrint.Lower, 201, SpuriousSuppressionPrint.TestVal, out Result);
  326. // SpuriousSuppressionPrint.Result = Result;
  327. // tps.TestTableAddCell(SpuriousSuppressionPrint.Test_name, SpuriousSuppressionPrint.Lower.ToString(), SpuriousSuppressionPrint.Upper.ToString(), SpuriousSuppressionPrint.TestVal.ToString(), SpuriousSuppressionPrint.Result);
  328. // if (channel == 0)
  329. // {
  330. // WriteExcelData(sheet, point + 8 + time * 10, 1, SpuriousSuppressionPrint.Test_name, SpuriousSuppressionPrint.Lower.ToString(), SpuriousSuppressionPrint.Upper.ToString(), SpuriousSuppressionPrint.TestVal.ToString(), SpuriousSuppressionPrint.Result);
  331. // //tps.SetTestTableCellValue(point + time, 10, SpuriousSuppressionPrint.Result, SpuriousSuppressionPrint.TestVal);//杂波抑制(dBc)
  332. // }
  333. // else if (channel == 1)
  334. // {
  335. // WriteExcelData(sheet, point + 8 + time * 10, 2, SpuriousSuppressionPrint.Test_name, SpuriousSuppressionPrint.Lower.ToString(), SpuriousSuppressionPrint.Upper.ToString(), SpuriousSuppressionPrint.TestVal.ToString(), SpuriousSuppressionPrint.Result);
  336. // //tps.SetTestTableCellValue(point + time + 5, 10, SpuriousSuppressionPrint.Result, SpuriousSuppressionPrint.TestVal);//杂波抑制(dBc)
  337. // }
  338. // }
  339. // #endregion
  340. // #region 谐波抑制
  341. // //SA.Write("仪器复位"); SA.Query("OPC");
  342. // //SA.Write("SPAN", PowerPara.SPAN); SA.Query("OPC");
  343. // //SA.Write("RBW", PowerPara.RBW); SA.Query("OPC");
  344. // //SA.Write("VBW", PowerPara.VBW); SA.Query("OPC");
  345. // //SA.Write("SingleOrCont", "0"); SA.Query("OPC");
  346. // for (point = 0; ; point++)
  347. // {
  348. // CenterFreq = PowerPara.StartFrequency + PowerPara.StepFrequency * point;
  349. // if (CenterFreq > PowerPara.StopFrequency || (PowerPara.FrequencyNumber == 1 && point == 1))
  350. // {
  351. // break;
  352. // }
  353. // // 控制
  354. // //SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1));
  355. // //Thread.Sleep(PowerPara.ControlDelay);//单位ms
  356. // //SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
  357. // //PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
  358. // //Power = y_value;
  359. // double[] HarmonicTimeVal = new double[PowerPara.HarmonicTime.Length];
  360. // double HarmonicMinTimeVal = 0;
  361. // //for ( harmonic_num = 0; harmonic_num < PowerPara.HarmonicTime.Length; harmonic_num++)
  362. // //{
  363. // // SA.Write("CENTER", (CenterFreq * PowerPara.HarmonicTime[harmonic_num]).ToString()); SA.Query("OPC");//N次谐波
  364. // // PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
  365. // // Data.HarmonicSuppression[point,harmonic_num] = Math.Round( Power - y_value,2 );
  366. // // HarmonicTimeVal[harmonic_num] = Data.HarmonicSuppression[point, harmonic_num];
  367. // //}
  368. // //if (PowerPara.HarmonicTime.Length > 1)//计算几次谐波中的最小值
  369. // //{
  370. // // HarmonicMinTimeVal = HarmonicTimeVal.Min();
  371. // //}
  372. // //else
  373. // //{
  374. // // HarmonicMinTimeVal = HarmonicTimeVal[0];
  375. // //}
  376. // HarmonicSuppressionPrint.Test_name = "通道" + (channel + 1).ToString() + "-" + "谐波抑制测试(KHz)-" + CenterFreq.ToString() + "MHz";
  377. // HarmonicSuppressionPrint.Lower = PowerPara.HarmonicSuppressionLower;
  378. // HarmonicSuppressionPrint.TestVal = HarmonicMinTimeVal;
  379. // HarmonicSuppressionPrint.TestVal = random.Next(4000, 12000) / 100.0;//随机数
  380. // Judge(HarmonicSuppressionPrint.Lower, 201, HarmonicSuppressionPrint.TestVal, out Result);
  381. // HarmonicSuppressionPrint.Result = Result;
  382. // tps.TestTableAddCell(HarmonicSuppressionPrint.Test_name, HarmonicSuppressionPrint.Lower.ToString(), HarmonicSuppressionPrint.Upper.ToString(), HarmonicSuppressionPrint.TestVal.ToString(), HarmonicSuppressionPrint.Result);
  383. // if (channel == 0)
  384. // {
  385. // WriteExcelData(sheet, point + 9 + time * 10, 1, HarmonicSuppressionPrint.Test_name, HarmonicSuppressionPrint.Lower.ToString(), HarmonicSuppressionPrint.Upper.ToString(), HarmonicSuppressionPrint.TestVal.ToString(), HarmonicSuppressionPrint.Result);
  386. // //tps.SetTestTableCellValue(point + time, 11, HarmonicSuppressionPrint.Result, HarmonicSuppressionPrint.TestVal);//谐波抑制(dBc)
  387. // }
  388. // else if (channel == 1)
  389. // {
  390. // WriteExcelData(sheet, point + 9 + time * 10, 2, HarmonicSuppressionPrint.Test_name, HarmonicSuppressionPrint.Lower.ToString(), HarmonicSuppressionPrint.Upper.ToString(), HarmonicSuppressionPrint.TestVal.ToString(), HarmonicSuppressionPrint.Result);
  391. // //tps.SetTestTableCellValue(point + time + 5, 11, HarmonicSuppressionPrint.Result, HarmonicSuppressionPrint.TestVal);//谐波抑制(dBc)
  392. // }
  393. // }
  394. // #endregion
  395. // }
  396. return true;
  397. }
  398. /// <summary>
  399. /// 判断上下限
  400. /// </summary>
  401. /// <returns></returns>
  402. public void Judge(double Lower,double Upper,double TestValue,out string JudgeResult)
  403. {
  404. if (Upper >= 200)
  405. {
  406. if (TestValue >= Lower)
  407. {
  408. JudgeResult = "是";
  409. }
  410. else
  411. {
  412. JudgeResult = "否";
  413. }
  414. }
  415. else if (Lower <= -200)
  416. {
  417. if (TestValue <= Upper)
  418. {
  419. JudgeResult = "是";
  420. }
  421. else
  422. {
  423. JudgeResult = "否";
  424. }
  425. }
  426. else
  427. {
  428. if (TestValue >= Lower && TestValue <= Upper)
  429. {
  430. JudgeResult = "是";
  431. }
  432. else
  433. {
  434. JudgeResult = "否";
  435. }
  436. }
  437. }
  438. public MatchModulaPara LoadModulationWorkBook()
  439. {
  440. MatchModulaPara pars = new MatchModulaPara();
  441. string FileName = Path.Combine(Bundle.bundle.BundleDir, "config\\ModulationMode.xlsx");
  442. if (!File.Exists(FileName))
  443. {
  444. ShowMessage(MsgType.Error, "找不到ModulationMode.xlsx");
  445. return null;
  446. }
  447. Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
  448. workbook.LoadFromFile(FileName);
  449. //获取第一个工作表sheet1
  450. Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
  451. int num = 0;
  452. int blankRows = 0;
  453. while (num++ < 200)
  454. {
  455. //索引从1开始
  456. string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  457. col1 = col1.Trim();
  458. if (string.IsNullOrEmpty(col1))
  459. {
  460. blankRows++;
  461. if (blankRows > 5)
  462. {
  463. //连续5个空行以上则退出
  464. break;
  465. }
  466. }
  467. else
  468. {
  469. blankRows = 0;
  470. }
  471. if (col1.Equals("功率变化(dB)"))
  472. {
  473. List<ModulationMatchParameter> ModulationTable = ReadParameters(sheet, num);
  474. foreach (var item in ModulationTable)
  475. {
  476. if (pars.ModulaParameters.ContainsKey(item.CfgRelative))
  477. {
  478. ShowMessage(MsgType.Error, string.Format("调制对应表:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.CfgRelative));
  479. continue;
  480. }
  481. pars.ModulaParameters.Add(item.CfgRelative, item);
  482. }
  483. }
  484. }
  485. return pars;
  486. }
  487. List<ModulationMatchParameter> ReadParameters(Spire.Xls.Worksheet sheet, int rowIndex)
  488. {
  489. List<ModulationMatchParameter> ModulationTable = new List<ModulationMatchParameter>();
  490. string col1 = sheet.Range[rowIndex, 1].Value2 != null ? sheet.Range[rowIndex, 1].Value2.ToString() : "";
  491. string col2 = sheet.Range[rowIndex, 2].Value2 != null ? sheet.Range[rowIndex, 2].Value2.ToString() : "";
  492. string col3 = sheet.Range[rowIndex, 3].Value2 != null ? sheet.Range[rowIndex, 3].Value2.ToString() : "";
  493. if (!(col1 == "功率变化(dB)" && col2 == "调制指数(mf)" && col3 == "最大频偏(KHz)"))
  494. {
  495. ShowMessage(MsgType.Error, "'调制对应表'行首标题位置和格式不正确");
  496. return ModulationTable;
  497. }
  498. int num = rowIndex;
  499. //默认最多30行
  500. while (num++ < rowIndex + 100)
  501. {
  502. col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  503. col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
  504. col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
  505. if (string.IsNullOrEmpty(col1) || string.IsNullOrEmpty(col2) || string.IsNullOrEmpty(col3))
  506. {
  507. break;
  508. }
  509. ModulationMatchParameter ObjModulation = new ModulationMatchParameter();
  510. ObjModulation.CfgRelative = col1;
  511. ObjModulation.CfgModulation = col2;
  512. ObjModulation.CfgFreqOffset = col3;
  513. ModulationTable.Add(ObjModulation);
  514. }
  515. return ModulationTable;
  516. }
  517. /// <summary>
  518. /// 一个调制指数的配置信息
  519. /// </summary>
  520. public class MatchModulaPara
  521. {
  522. public Dictionary<string, ModulationMatchParameter> ModulaParameters;
  523. public MatchModulaPara()
  524. {
  525. ModulaParameters = new Dictionary<string, ModulationMatchParameter>();
  526. }
  527. public string GetModulaParameter(string name)
  528. {
  529. if (string.IsNullOrEmpty(name))
  530. return null;
  531. if (this.ModulaParameters.ContainsKey(name) == false)
  532. return null;
  533. string val1 = this.ModulaParameters[name].CfgModulation.Trim();
  534. return val1;
  535. }
  536. public string GetFreqOffsetParameter(string name)
  537. {
  538. if (string.IsNullOrEmpty(name))
  539. return null;
  540. if (this.ModulaParameters.ContainsKey(name) == false)
  541. return null;
  542. string val2 = this.ModulaParameters[name].CfgFreqOffset.Trim();
  543. return val2;
  544. }
  545. }
  546. /// <summary>
  547. /// 调制指数3个对应项
  548. /// </summary>
  549. public class ModulationMatchParameter
  550. {
  551. /// <summary>
  552. /// 功率变化(dB)
  553. /// </summary>
  554. public string CfgRelative { get; set; }
  555. /// <summary>
  556. /// 调制指数(mf)
  557. /// </summary>
  558. public string CfgModulation { get; set; }
  559. /// <summary>
  560. /// 最大频偏(KHz)
  561. /// </summary>
  562. public string CfgFreqOffset { get; set; }
  563. }
  564. public class ConfigParameter
  565. {
  566. /// <summary>
  567. /// 串口
  568. /// </summary>
  569. public string ComPort { set; get; }
  570. /// <summary>
  571. /// 输出损耗
  572. /// </summary>
  573. public double OutLoss { set; get; }
  574. /// <summary>
  575. /// 通道数量
  576. /// </summary>
  577. public int ChannelPara { set; get; }
  578. /// <summary>
  579. /// 测试次数
  580. /// </summary>
  581. public int TestTime { set; get; }
  582. /// <summary>
  583. /// 相对时间
  584. /// </summary>
  585. public int IntervalTime { set; get; }
  586. /// <summary>
  587. /// 产品测试的起始频率
  588. /// </summary>
  589. public double StartFrequency { set; get; }
  590. /// <summary>
  591. /// 产品测试的频率步进
  592. /// </summary>
  593. public double StepFrequency { set; get; }
  594. /// <summary>
  595. /// 产品测试的频点数量
  596. /// </summary>
  597. public int FrequencyNumber { set; get; }
  598. /// <summary>
  599. /// 产品的工作频带上限(终止频率)
  600. /// 功能:用于判断从起始频率按一定的步进测试是否超出产品工作频段上限
  601. /// </summary>
  602. public double StopFrequency { set; get; }
  603. /// <summary>
  604. ///设置频谱仪的SPAN
  605. /// </summary>
  606. public string SPAN { set; get; }
  607. /// <summary>
  608. /// 设置参考电平
  609. /// </summary>
  610. public string REF { set; get; }
  611. /// <summary>
  612. /// 设置小信号参考电平
  613. /// </summary>
  614. public string SmallSignalREF { set; get; }
  615. /// <summary>
  616. /// 设置RBW
  617. /// </summary>
  618. public string RBW { set; get; }
  619. /// <summary>
  620. /// 设置VBW
  621. /// </summary>
  622. public string VBW { set; get; }
  623. /// <summary>
  624. /// 谐波次数
  625. /// </summary>
  626. public int[] HarmonicTime { set; get; }
  627. /// <summary>
  628. /// 控制延时
  629. /// </summary>
  630. public int ControlDelay { set; get; }
  631. /// <summary>
  632. /// 功率下限
  633. /// </summary>
  634. public double PowerLower { set; get; }
  635. /// <summary>
  636. /// 功率上限
  637. /// </summary>
  638. public double PowerUpper { set; get; }
  639. /// <summary>
  640. /// 频率稳定度上限
  641. /// </summary>
  642. public double FreqAccuracyUpper { set; get; }
  643. /// <summary>
  644. /// 两路功率总和下限
  645. /// </summary>
  646. public double PowerSumLower { set; get; }
  647. /// <summary>
  648. /// 功率不平度上限
  649. /// </summary>
  650. public double PowerFlatnessUpper { set; get; }
  651. /// <summary>
  652. /// 调制系数下限
  653. /// </summary>
  654. public double ModulationIndexLower { get; set; }
  655. /// <summary>
  656. ///调制系数上限
  657. /// </summary>
  658. public double ModulationIndexUpper { get; set; }
  659. /// <summary>
  660. /// 最大频偏kHz下限
  661. /// </summary>
  662. public double MaxFreqOffsetLower { get; set; }
  663. /// <summary>
  664. ///最大频偏kHz调制系数上限
  665. /// </summary>
  666. public double MaxFreqOffsetUpper { get; set; }
  667. /// <summary>
  668. /// 杂波抑制下限
  669. /// </summary>
  670. public double SpuriousSuppressionLower { set; get; }
  671. // <summary>
  672. /// 谐波抑制下限
  673. /// </summary>
  674. public double HarmonicSuppressionLower { set; get; }
  675. /// <summary>
  676. /// 电压下限
  677. /// </summary>
  678. public double VoltLower { set; get; }
  679. /// <summary>
  680. /// 电压上限
  681. /// </summary>
  682. public double VoltUpper { set; get; }
  683. /// <summary>
  684. /// 电流下限
  685. /// </summary>
  686. public double CurrentLower { set; get; }
  687. /// <summary>
  688. /// 电流上限
  689. /// </summary>
  690. public double CurrentUpper { set; get; }
  691. }
  692. public class TestPara
  693. {
  694. /// <summary>
  695. /// 读电压值
  696. /// </summary>
  697. public string[] VoltVal { set; get; }
  698. /// <summary>
  699. /// 读电流值
  700. /// </summary>
  701. public string[] CurrentVal { set; get; }
  702. /// <summary>
  703. /// 输出功率(W)
  704. /// </summary>
  705. public double[] Power { set; get; }
  706. /// <summary>
  707. /// 频率稳定度
  708. /// </summary>
  709. public double[] FreqAccuracy { set; get; }
  710. /// <summary>
  711. /// 实测频点
  712. /// </summary>
  713. public double[] Freq { set; get; }
  714. /// <summary>
  715. /// 两路功率总和(W)
  716. /// </summary>
  717. public double[] PowerSum { set; get; }
  718. /// <summary>
  719. /// 两路功率不平度(dB)
  720. /// </summary>
  721. public double[] PowerFlatness { set; get; }
  722. /// <summary>
  723. ///调制系数
  724. /// </summary>
  725. public string[] ModulationIndex { set; get; }
  726. /// <summary>
  727. /// 最大频偏KHz
  728. /// </summary>
  729. public string[] MaxFreqOffset { set; get; }
  730. /// <summary>
  731. /// 最大频偏dB
  732. /// </summary>
  733. public string[] DBMaxFreqOffset { set; get; }
  734. }
  735. }
  736. }