PowerTest-PowerMeter.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. // TransmitterSerialPort SerialClient = new TransmitterSerialPort();
  39. ConfigParameter PowerPara = new ConfigParameter();
  40. // MatchComPara CfigComParas = new MatchComPara();
  41. //CfigComParas = LoadComWorkBook();
  42. //if (CfigComParas == null)
  43. //{
  44. // return false;
  45. //}
  46. // byte FourthByte=0x00;
  47. // string ComPort = CfigComParas.GetComPort("1");
  48. // byte ThridByte = Convert.ToByte(CfigComParas.GetThirdByte("1"),16);
  49. // PowerPara.StepFrequency = 0;
  50. // PowerPara.StartFrequency = parameters.Parameters.GetParameter<double>("起始频率");
  51. // PowerPara.StepFrequency = parameters.Parameters.GetParameter<double>("频率步进");
  52. //// PowerPara.FrequencyNumber = parameters.Parameters.GetParameter<int>("频点数量");
  53. // PowerPara.StopFrequency = parameters.Parameters.GetParameter<double>("终止频率");
  54. // PowerPara.ControlDelay = parameters.Parameters.GetParameter<int>("控制延时");
  55. PowerPara.PowerLower = parameters.Parameters.GetParameter<double>("功率下限");
  56. PowerPara.PowerUpper = parameters.Parameters.GetParameter<double>("功率上限");
  57. PowerPara.PowerSumLower = parameters.Parameters.GetParameter<double>("两路功率总和下限");
  58. PowerPara.PowerFlatnessUpper = parameters.Parameters.GetParameter<double>("功率不平度上限");
  59. if ( (PowerPara.PowerLower == 0) || (PowerPara.PowerUpper == 0) || (PowerPara.PowerSumLower == 0) || (PowerPara.PowerFlatnessUpper == 0))
  60. {
  61. ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行", parameters.Channel, parameters.Name));
  62. return false;
  63. }
  64. //if (PowerPara.ControlDelay == 0)
  65. //{
  66. // PowerPara.ControlDelay = 10;
  67. //}
  68. PowerMeter.Write("设置显示单位W", "1");
  69. //if ((PowerPara.FrequencyNumber != 0) && (PowerPara.FrequencyNumber != 1) && (PowerPara.StepFrequency == 0))
  70. //{
  71. // PowerPara.StepFrequency = ((int)(((PowerPara.StopFrequency - PowerPara.StartFrequency) / (PowerPara.FrequencyNumber - 1)) * 100)) / 100;
  72. //}
  73. //if (PowerPara.StepFrequency != 0)
  74. //{
  75. // PowerPara.FrequencyNumber = ((int)((PowerPara.StopFrequency - PowerPara.StartFrequency) / PowerPara.StepFrequency)) + 1;
  76. //}
  77. //double CenterFreq;
  78. // PowerPara.FrequencyNumber = CfigComParas.ComParameters.Count;
  79. //for ( int point = 0; point< PowerPara.FrequencyNumber; point++)
  80. {
  81. //FourthByte = Convert.ToByte(CfigComParas.GetFourthByte((point+1).ToString()), 16);
  82. //CenterFreq = PowerPara.StartFrequency + PowerPara.StepFrequency * FourthByte;
  83. //if (CenterFreq > PowerPara.StopFrequency)
  84. //{
  85. // break;
  86. //}
  87. //SerialClient.DUT_Transmitter_Ctrol(ThridByte, FourthByte);
  88. //Thread.Sleep(PowerPara.ControlDelay);//单位ms
  89. string aa = PowerMeter.Query("Fetch测量功率", "1");
  90. PowerPrint.Test_name = parameters.Channel + "-功率测试(W)-" + parameters.CenterFreq.ToString() + "MHz";
  91. PowerPrint.Lower = PowerPara.PowerLower;
  92. PowerPrint.Upper = PowerPara.PowerUpper;
  93. PowerPrint.TestVal = Math.Round(double.Parse(aa), 2);//功率W
  94. if (PowerPrint.TestVal <= PowerPrint.Upper)
  95. {
  96. PowerPrint.Result = "是";
  97. }
  98. else
  99. {
  100. PowerPrint.Result = "否";
  101. }
  102. tps.TestTableAddCell(PowerPrint.Test_name, "/", PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  103. if (parameters.Channel == "通道1")
  104. {
  105. WriteExcelData(sheet, parameters.PointIndex, 1, PowerPrint.Test_name, "/", PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  106. }
  107. else if (parameters.Channel == "通道2")
  108. {
  109. WriteExcelData(sheet, parameters.PointIndex, 2, PowerPrint.Test_name, "/", PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
  110. }
  111. }
  112. SaveExcel(workbook);
  113. return true;
  114. }
  115. public class ConfigParameter
  116. {
  117. /// <summary>
  118. /// 输出损耗
  119. /// </summary>
  120. public double OutLoss { set; get; }
  121. /// <summary>
  122. /// 产品测试的起始频率
  123. /// </summary>
  124. public double StartFrequency { set; get; }
  125. /// <summary>
  126. /// 产品测试的频率步进
  127. /// </summary>
  128. public double StepFrequency { set; get; }
  129. /// <summary>
  130. /// 产品测试的频点数量
  131. /// </summary>
  132. public int FrequencyNumber { set; get; }
  133. /// <summary>
  134. /// 产品的工作频带上限(终止频率)
  135. /// 功能:用于判断从起始频率按一定的步进测试是否超出产品工作频段上限
  136. /// </summary>
  137. public double StopFrequency { set; get; }
  138. /// <summary>
  139. ///设置频谱仪的SPAN
  140. /// </summary>
  141. public string SPAN { set; get; }
  142. /// <summary>
  143. /// 设置参考电平
  144. /// </summary>
  145. public string REF { set; get; }
  146. /// <summary>
  147. /// 设置RBW
  148. /// </summary>
  149. public string RBW { set; get; }
  150. /// <summary>
  151. /// 设置VBW
  152. /// </summary>
  153. public string VBW { set; get; }
  154. /// <summary>
  155. /// 控制延时
  156. /// </summary>
  157. public int ControlDelay { set; get; }
  158. /// <summary>
  159. /// 功率下限
  160. /// </summary>
  161. public double PowerLower { set; get; }
  162. /// <summary>
  163. /// 功率上限
  164. /// </summary>
  165. public double PowerUpper { set; get; }
  166. /// <summary>
  167. /// 频率稳定度上限
  168. /// </summary>
  169. public double FreqAccuracyUpper { set; get; }
  170. /// <summary>
  171. /// 两路功率总和下限
  172. /// </summary>
  173. public double PowerSumLower { set; get; }
  174. /// <summary>
  175. /// 功率不平度上限
  176. /// </summary>
  177. public double PowerFlatnessUpper { set; get; }
  178. }
  179. }
  180. }