PowerTest-PowerMeter.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using Tps_LQ_Transmitter.com;
  9. namespace Tps_LQ_Transmitter.models
  10. {
  11. class PowerTest_PowerMeter : BaseModel
  12. {
  13. public PowerTest_PowerMeter()
  14. {
  15. TemplateName = "功率(功率计)测试";
  16. }
  17. /// <summary>
  18. /// 使用功率计(E4418A)进行功率测试
  19. /// </summary>
  20. /// <param name="parameters"></param>
  21. /// <returns></returns>
  22. public override bool Run(TestNode parameters)
  23. {
  24. //获取仪器
  25. DataType PowerPrint = new DataType();//功率(w)
  26. var PowerMeter = this.tps.GetDeviceModel("GPIB0::13::INSTR");
  27. if (PowerMeter == null)
  28. {
  29. ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行", parameters.Channel, parameters.Name));
  30. return false;
  31. }
  32. OpenExcel("功率及频率稳定度", out Spire.Xls.Workbook workbook, out Spire.Xls.Worksheet sheet);
  33. if (sheet == null)
  34. {
  35. ShowMessage(MsgType.Error, "找不到" + tps.TestProject + "模板.xlsx");
  36. return false;
  37. }
  38. Thread.Sleep(1000);//让产品稳定
  39. TransmitterSerialPort SerialClient = new TransmitterSerialPort();
  40. ConfigParameter PowerPara = new ConfigParameter();
  41. MatchComPara CfigComParas = new MatchComPara();
  42. CfigComParas = LoadComWorkBook();
  43. if (CfigComParas == null)
  44. {
  45. return false;
  46. }
  47. byte FourthByte=0x00;
  48. string ComPort = CfigComParas.GetComPort("1");
  49. byte ThridByte = Convert.ToByte(CfigComParas.GetThirdByte("1"),16);
  50. PowerPara.StepFrequency = 0;
  51. PowerPara.StartFrequency = parameters.Parameters.GetParameter<double>("起始频率");
  52. PowerPara.StepFrequency = parameters.Parameters.GetParameter<double>("频率步进");
  53. // PowerPara.FrequencyNumber = parameters.Parameters.GetParameter<int>("频点数量");
  54. PowerPara.StopFrequency = parameters.Parameters.GetParameter<double>("终止频率");
  55. PowerPara.ControlDelay = parameters.Parameters.GetParameter<int>("控制延时");
  56. PowerPara.PowerLower = parameters.Parameters.GetParameter<double>("功率下限");
  57. PowerPara.PowerUpper = parameters.Parameters.GetParameter<double>("功率上限");
  58. PowerPara.PowerSumLower = parameters.Parameters.GetParameter<double>("两路功率总和下限");
  59. PowerPara.PowerFlatnessUpper = parameters.Parameters.GetParameter<double>("功率不平度上限");
  60. if ((PowerPara.StartFrequency == 0) || (PowerPara.StopFrequency == 0) || (PowerPara.PowerLower == 0)
  61. || (PowerPara.PowerUpper == 0) || (PowerPara.PowerSumLower == 0) || (PowerPara.PowerFlatnessUpper == 0))
  62. {
  63. ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行", parameters.Channel, parameters.Name));
  64. return false;
  65. }
  66. if (PowerPara.ControlDelay == 0)
  67. {
  68. PowerPara.ControlDelay = 10;
  69. }
  70. PowerMeter.Write("设置显示单位W", "1");
  71. //if ((PowerPara.FrequencyNumber != 0) && (PowerPara.FrequencyNumber != 1) && (PowerPara.StepFrequency == 0))
  72. //{
  73. // PowerPara.StepFrequency = ((int)(((PowerPara.StopFrequency - PowerPara.StartFrequency) / (PowerPara.FrequencyNumber - 1)) * 100)) / 100;
  74. //}
  75. //if (PowerPara.StepFrequency != 0)
  76. //{
  77. // PowerPara.FrequencyNumber = ((int)((PowerPara.StopFrequency - PowerPara.StartFrequency) / PowerPara.StepFrequency)) + 1;
  78. //}
  79. double CenterFreq;
  80. PowerPara.FrequencyNumber = CfigComParas.ComParameters.Count;
  81. for ( int point = 0; point< PowerPara.FrequencyNumber; point++)
  82. {
  83. FourthByte = Convert.ToByte(CfigComParas.GetFourthByte((point+1).ToString()), 16);
  84. CenterFreq = PowerPara.StartFrequency + PowerPara.StepFrequency * FourthByte;
  85. if (CenterFreq > PowerPara.StopFrequency)
  86. {
  87. break;
  88. }
  89. SerialClient.DUT_Transmitter_Ctrol(ThridByte, FourthByte);
  90. Thread.Sleep(PowerPara.ControlDelay);//单位ms
  91. string aa = PowerMeter.Query("Fetch测量功率", "1");
  92. PowerPrint.Test_name = parameters.Channel + "-功率测试(W)-" + CenterFreq.ToString() + "MHz";
  93. PowerPrint.Lower = PowerPara.PowerLower;
  94. PowerPrint.Upper = PowerPara.PowerUpper;
  95. PowerPrint.TestVal = Math.Round(double.Parse(aa), 2);//功率W
  96. if (PowerPrint.TestVal <= PowerPrint.Upper)
  97. {
  98. PowerPrint.Result = "是";
  99. }
  100. else
  101. {
  102. PowerPrint.Result = "否";
  103. }
  104. tps.TestTableAddCell(PowerPrint.Test_name, "/", PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  105. if (parameters.Channel == "通道1")
  106. {
  107. WriteExcelData(sheet, point, 1, PowerPrint.Test_name, "/", PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  108. }
  109. else if (parameters.Channel == "通道2")
  110. {
  111. WriteExcelData(sheet, point, 2, PowerPrint.Test_name, "/", PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  112. }
  113. }
  114. SaveExcel(workbook);
  115. return true;
  116. }
  117. public class ConfigParameter
  118. {
  119. /// <summary>
  120. /// 输出损耗
  121. /// </summary>
  122. public double OutLoss { set; get; }
  123. /// <summary>
  124. /// 产品测试的起始频率
  125. /// </summary>
  126. public double StartFrequency { set; get; }
  127. /// <summary>
  128. /// 产品测试的频率步进
  129. /// </summary>
  130. public double StepFrequency { set; get; }
  131. /// <summary>
  132. /// 产品测试的频点数量
  133. /// </summary>
  134. public int FrequencyNumber { set; get; }
  135. /// <summary>
  136. /// 产品的工作频带上限(终止频率)
  137. /// 功能:用于判断从起始频率按一定的步进测试是否超出产品工作频段上限
  138. /// </summary>
  139. public double StopFrequency { set; get; }
  140. /// <summary>
  141. ///设置频谱仪的SPAN
  142. /// </summary>
  143. public string SPAN { set; get; }
  144. /// <summary>
  145. /// 设置参考电平
  146. /// </summary>
  147. public string REF { set; get; }
  148. /// <summary>
  149. /// 设置RBW
  150. /// </summary>
  151. public string RBW { set; get; }
  152. /// <summary>
  153. /// 设置VBW
  154. /// </summary>
  155. public string VBW { set; get; }
  156. /// <summary>
  157. /// 控制延时
  158. /// </summary>
  159. public int ControlDelay { set; get; }
  160. /// <summary>
  161. /// 功率下限
  162. /// </summary>
  163. public double PowerLower { set; get; }
  164. /// <summary>
  165. /// 功率上限
  166. /// </summary>
  167. public double PowerUpper { set; get; }
  168. /// <summary>
  169. /// 频率稳定度上限
  170. /// </summary>
  171. public double FreqAccuracyUpper { set; get; }
  172. /// <summary>
  173. /// 两路功率总和下限
  174. /// </summary>
  175. public double PowerSumLower { set; get; }
  176. /// <summary>
  177. /// 功率不平度上限
  178. /// </summary>
  179. public double PowerFlatnessUpper { set; get; }
  180. }
  181. }
  182. }