Browse Source

完成n9030的功率、谐波、杂波、调制

ceac_pqy@163.com 3 năm trước cách đây
mục cha
commit
1dfe4c3a90
33 tập tin đã thay đổi với 698 bổ sung182 xóa
  1. 27 17
      exe/apps/DevicesApp/commands/程控命令.xml
  2. 3 1
      exe/apps/DevicesApp/本地仪器.xml
  3. BIN
      exe/apps/Tps_LQ_Transmitter/NationalInstruments.Common.Native.dll
  4. BIN
      exe/apps/Tps_LQ_Transmitter/NationalInstruments.Common.dll
  5. BIN
      exe/apps/Tps_LQ_Transmitter/NationalInstruments.MStudioCLM.dll
  6. BIN
      exe/apps/Tps_LQ_Transmitter/NationalInstruments.NiLmClientDLL.dll
  7. BIN
      exe/apps/Tps_LQ_Transmitter/NationalInstruments.VisaNS.dll
  8. BIN
      exe/apps/Tps_LQ_Transmitter/Tps_LQ_Transmitter.dll
  9. BIN
      exe/apps/Tps_LQ_Transmitter/Tps_LQ_Transmitter.pdb
  10. BIN
      exe/apps/Tps_LQ_Transmitter/config/测试#常温测试#发射机 -N9030A.xlsx
  11. BIN
      exe/apps/Tps_LQ_Transmitter/config/测试#常温测试#发射机.xlsx
  12. BIN
      exe/apps/Tps_LQ_Transmitter/config/测试#常温测试#发射机_FSU-26.xlsx
  13. BIN
      tps/TpsLabStudio/.vs/TpsLabStudio/v16/.suo
  14. 135 0
      tps/TpsLabStudio/Common/VisaResource.cs
  15. 51 12
      tps/TpsLabStudio/FrmMain.cs
  16. BIN
      tps/TpsLabStudio/Libs/NationalInstruments.Common.Native.dll
  17. BIN
      tps/TpsLabStudio/Libs/NationalInstruments.Common.dll
  18. BIN
      tps/TpsLabStudio/Libs/NationalInstruments.VisaNS.dll
  19. 47 1
      tps/TpsLabStudio/MainTps.cs
  20. 22 2
      tps/TpsLabStudio/TpsLabStudio.csproj
  21. 1 1
      tps/TpsLabStudio/TpsLabStudio.csproj.user
  22. BIN
      tps/TpsLabStudio/config/ModulationMode.xlsx
  23. BIN
      tps/TpsLabStudio/config/测试#常温测试#发射机 -N9030A.xlsx
  24. BIN
      tps/TpsLabStudio/config/测试#常温测试#发射机.xlsx
  25. BIN
      tps/TpsLabStudio/config/测试#常温测试#发射机_FSU-26.xlsx
  26. 8 7
      tps/TpsLabStudio/models/HarmonicSuppression.cs
  27. 7 2
      tps/TpsLabStudio/models/ModulationIndexAndMaxFreqOffset.cs
  28. 53 41
      tps/TpsLabStudio/models/NoisePowerDensity.cs
  29. 73 53
      tps/TpsLabStudio/models/PhaseNoise.cs
  30. 62 9
      tps/TpsLabStudio/models/PowerAndFreqStability.cs
  31. 166 0
      tps/TpsLabStudio/models/PowerTest-PowerMeter.cs
  32. 25 22
      tps/TpsLabStudio/models/SpuriousSuppression.cs
  33. 18 14
      tps/TpsLabStudio/models/VoltAndCurrent.cs

+ 27 - 17
exe/apps/DevicesApp/commands/程控命令.xml

@@ -228,7 +228,7 @@
         <Command Key="STOP" Value=":SENS:FREQ:STOP {0} MHz" Description="{0}频率,单位MHz"/>
 		<Command Key="读截止频率" Value=":SENS:FREQ:STOP?" Description="单位Hz"/>
         <Command Key="CENTER" Value=":SENS:FREQ:CENT {0} MHz" Description="{0}频率,单位MHz"/>
-        <Command Key="SPAN" Value=":SENS:FREQ:SPAN {0} MHz" Description="{0}频率,单位MHz"/>
+        <Command Key="SPAN" Value=":SENS:FREQ:SPAN {0} MHz" Description="{0}频率,单位MHz,仅SA模式"/>
         <Command Key="REF" Value=":DISP:WIND:TRAC:Y:SCAL:RLEV {0} dBm" Description="{0}参考功率,单位dBm"/>
 		<Command Key="OFFSET" Value=":DISP:WIND:TRAC:Y:SCAL:RLEV:OFFSet {0} dBm" Description="{0}功率补偿,单位dBm"/>
 		<Command Key="ATT" Value=":POW:ATT {0}" Description="设置衰减,单位dB"/>
@@ -245,12 +245,20 @@
         <Command Key="MARK打开" Value=":CALC:MARK{0}:STAT ON" Description="打开MARK,{0}MARK点"/>
         <Command Key="读MARK功率" Value=":CALC:MARK{0}:Y?" Description="读MARK功率,{0}MARK点"/>
         <Command Key="读MARK频率" Value=":CALC:MARK{0}:X?" Description="读MARK频率,{0}MARK点"/>
-		<Command Key="DELT打开" Value=":CALCulate:MARKer{0} DELTa" Description="打开DELT,{0}}MARK点"/>
+		<Command Key="DELT打开" Value=":CALCulate:MARKer{0}:MODE DELTa" Description="打开DELT,{0}}MARK点"/>
         <Command Key="设置MARK频率" Value=":CALC:MARK{0}:X {1} MHz" Description="设置MARK频率,{0} MARK点,{1} 频率,单位MHz"/>
         <Command Key="设置MARK为NOISe" Value=":CALCulate:MARKer{0}:FUNCtion NOISe" Description="设置MARK为NOISe,{0} MARK点"/>
         <Command Key="设置MARK为常规" Value=":CALCulate:MARKer{0}:FUNCtion OFF" Description="设置MARK为常规,{0} MARK点"/>
 		<Command Key="SingleOrCont" Value=":INITiate:CONTinuous {0}" Description="设置触发模式,{0} 0|1"/>
         <Command Key="读曲线" Value="TRACe? TRACE1" Description="读曲线"/>
+		<Command Key="读通道曲线" Value=":READ:CHPower2?" Description="读通道曲线"/>
+		
+		<Command Key="设置通道SPAN" Value=":CHPower:FREQuency:SPAN {0}MHz" Description="设置通道SPAN,仅通道模式,单位MHz"/>
+		<Command Key="设置通道带宽" Value=":CHPower:BANDwidth:INTegration {0}KHz" Description="设置通道带宽,单位KHz,同:CHPower:BWIDth:INTegration命令"/>
+		<Command Key="设置通道功率模式" Value=":CONFigure:CHPower" Description="设置通道功率模式"/>
+		<Command Key="设置频谱测试模式" Value=":CONFigure:SANalyzer" Description="设置频谱测试模式,针对Meas按键"/>
+		<Command Key="读通道功率" Value=":READ:CHPower?" Description="读通道功率,返回通道功率,功率谱密度"/>
+		
 		
         <Command Key="SetSAMode" Value=":INSTrument SA" Description="SetSAMode"/>
         <Command Key="相位噪声测试模式" Value=":INSTrument PNOISE" Description="相位噪声测试模式"/>
@@ -287,13 +295,13 @@
         <Command Key="REF" Value=":DISP:WIND:TRAC:Y:RLEV {0} dBm" Description="{0}参考功率,单位dBm"/>
 		
 		<Command Key="OFFSET" Value=":DISP:WIND:TRAC:RLEV:OFFSet {0} dBm" Description="{0}功率补偿,单位dBm"/>		
-		<Command Key="ATT" Value="INP::ATT {0}" Description="设置衰减,单位dB"/>
+		<Command Key="ATT" Value="INP:ATT {0}" Description="设置衰减,单位dB"/>
 		<Command Key="ATTAUTO" Value="INP:ATT:AUTO ON" Description="设置自动衰减,单位dB"/>
         <Command Key="RBW" Value=":BWIDth {0}" Description="设置分辨率带宽,{0}RBW 单位Hz"/>
 		<Command Key="RBWAUTO" Value=":BWIDth:AUTO 1" Description="设置分辨率带宽自动"/>
         <Command Key="VBW" Value=":BWIDth:VID {0}" Description="设置视频带宽,{0}VBW,单位Hz"/>
         <Command Key="VBWAUTO" Value=":BWIDth:VID:AUTO 1" Description="设置视频带宽自动"/>
-		<Command Key="设置通道带宽" Value="SENS:POW:ACH:BWID {0}MHz" Description="设置通道带宽,单位MHz"/>
+		<Command Key="设置通道带宽" Value="SENS:POW:ACH:BWID {0}KHz" Description="设置通道带宽,单位MHz"/>
 		<Command Key="设置通道功率模式" Value="CALC:MARK:FUNC:POW:SEL ACP" Description="设置通道功率模式"/>
 		<Command Key="读通道功率" Value="CALC:MARK:FUNC:POW:RES? CPOWer" Description="读通道功率,单位dBm"/>
 		
@@ -449,7 +457,7 @@
 	
 	<DeviceCommand DeviceType="功率计">
       <Models>
-        <string>E4417A</string>
+        <string>E4418A</string>
       </Models>
       <Commands>
 		<Command Key="仪器复位" Value="*RST" Description="复位"/>
@@ -465,17 +473,19 @@
 		<Command Key="自动平均开" Value="SENSe{0}:AVERage:COUNt:AUTO ON" Description="自动平均开,通道{0} 1|2"/>
 		<Command Key="自动平均关" Value="SENSe{0}:AVERage:COUNt:AUTO OFF" Description="自动平均关,通道{0} 1|2"/>
 		
-		<Command Key="MEAS测量功率" Value="MEASure{0}?" Description="使用自动平均测试功率,{0} 1|2|3|4,1:上窗口上测量;2:下窗口上测量;3:上窗口下测量;4:下窗口下测量,"/>
+		<Command Key="设置显示单位W" Value="UNIT{0}:POW W" Description="设置显示单位W"/>
+		<Command Key="设置显示单位DBM" Value="UNIT{0}:POW DBM" Description="设置显示单位DBM"/>
+		<!--<Command Key="MEAS测量功率" Value="MEASure{0}?" Description="使用自动平均测试功率,{0} 1|2|3|4,1:上窗口上测量;2:下窗口上测量;3:上窗口下测量;4:下窗口下测量,"/>-->
 		<Command Key="Fetch测量功率" Value="FETCh{0}?" Description="Fetch测量功率,{0} 1|2|3|4,1:上窗口上测量;2:下窗口上测量;3:上窗口下测量;4:下窗口下测量"/>		
-		<Command Key="Read测量功率" Value="READ{0}?" Description="Read测量功率,{0} 1|2|3|4,1:上窗口上测量;2:下窗口上测量;3:上窗口下测量;4:下窗口下测量"/>
-		<Command Key="设置视频带宽" Value="SENSe{0}:BWIDth:VIDeo {1} KHZ" Description="设置视频带宽,通道{0} 1|2, 频率{1},单位KHz"/>
-		<Command Key="设置功率显示单位" Value="UNIT{0}:POW {1}" Description="设置功率显示单位,{0} 1|2|3|4,1:上窗口上测量;2:下窗口上测量;3:上窗口下测量;4:下窗口下测量, {1} W|DBM"/>
+		<!--<Command Key="Read测量功率" Value="READ{0}?" Description="Read测量功率,{0} 1|2|3|4,1:上窗口上测量;2:下窗口上测量;3:上窗口下测量;4:下窗口下测量"/>-->
+		  <Command Key="设置视频带宽" Value="SENSe{0}:BWIDth:VIDeo {1} KHZ" Description="设置视频带宽,通道{0} 1|2, 频率{1},单位KHz"/>
 		<Command Key="设置下限" Value="CALC{0}:LIM:LOW {1}" Description="设置下限,通道{0} 1|2|3|4,1:上窗口上测量;2:下窗口上测量;3:上窗口下测量;4:下窗口下测量, 功率{1},单位dBm"/>
 		<Command Key="设置上限" Value="CALC{0}:LIM:UPP {1}" Description="设置上限,通道{0} 1|2|3|4, 功率{1},单位dBm"/>
 		<Command Key="打开限制开关" Value="CALC{0}:LIM:STAT ON" Description="打开限制开关,{0} 1|2|3|4"/>
 		<Command Key="关闭限制开关" Value="CALC{0}:LIM:STAT OFF" Description="关闭限制开关,{0} 1|2|3|4"/>
         <Command Key="单次触发" Value="INITiate{0}:CONTinuous OFF" Description="通道{0} 1|2"/>
 		<Command Key="连续触发" Value="INITiate{0}:CONTinuous ON" Description="通道{0} 1|2"/>
+		
       </Commands>
     </DeviceCommand>
 	
@@ -532,14 +542,14 @@
         <string>Z36-6</string>
       </Models>
       <Commands>
-        <Command Key="打开电源" Value="OUT 1" Description="打开电源输出"/>
-        <Command Key="关闭电源" Value="OUT 0" Description="关闭电源输出"/>
-		<Command Key="读电源输出状态" Value="OUT?" Description="电源输出状态"/>
-        <Command Key="设置电压" Value="PV {0}" Description="设置输出电压值,{0}电压值,单位V"/>
-        <Command Key="设置限流" Value="PC {0}" Description="设置输出电流值,{0}电流值,单位A"/>
-        <Command Key="读取电压" Value="MV?" Description="读取实际输出电压。单位V,返回一个6 位字符串。"/>
-        <Command Key="读取电流" Value="MC?" Description="读取实际输出电流。单位A,返回一个6 位字符串。"/>
-		<Command Key="设置过压保护" Value="OVP {0}" Description="设置过压保护,{0}电压值,单位V"/>
+	    <Command Key="选择电源地址" Value="INSTrument:NSELect {0}" Description="选择电源地址出厂设置默认为6"/>		
+        <Command Key="打开电源" Value="GLOBal:OUTPut:STATe 1" Description="打开电源输出"/>
+        <Command Key="关闭电源" Value="GLOBal:OUTPut:STATe 0" Description="关闭电源输出"/>
+        <Command Key="设置电压" Value="VOLTage {0} V" Description="设置输出电压值,{0}电压值,单位V"/>
+        <Command Key="设置限流" Value="CURRent {0} A" Description="设置输出电流值,{0}电流值,单位A"/>
+        <Command Key="读取电压" Value="MEASure:VOLTage?" Description="读取实际输出电压。单位V,返回一个6 位字符串。"/>
+        <Command Key="读取电流" Value="MEASure:CURRent?" Description="读取实际输出电流。单位A,返回一个6 位字符串。"/>
+		<Command Key="设置过压保护" Value="VOLTage:PROTection:LEVel {0} V" Description="设置过压保护,{0}电压值,单位V"/>
       </Commands>
     </DeviceCommand>
 	

+ 3 - 1
exe/apps/DevicesApp/本地仪器.xml

@@ -11,6 +11,8 @@
     <!--<DeviceInfo DeviceType="视频开关" DeviceModel="Pickering40161D" DeviceHandle="bus:19,slot:12" ClassType="DevicesApp.Devices.VideoSwitch" IsVirtual="false"/>-->
     <!--<DeviceInfo DeviceType="万用表" DeviceModel="KeysightM9182A" DeviceHandle="PXI19::10::INSTR" ClassType="DevicesApp.Devices.Multimeter" IsVirtual="false"/>-->
     <DeviceInfo DeviceType="信号源" DeviceModel="E4221B" DeviceHandle="GPIB0::34::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="true"/>
-    <DeviceInfo DeviceType="频谱仪" DeviceModel="FSU-26" DeviceHandle="TCPIP0::169.254.17.73::inst0::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="false"/> 
+    <!--<DeviceInfo DeviceType="频谱仪" DeviceModel="FSU-26" DeviceHandle="TCPIP0::169.254.17.73::inst0::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="false"/> -->
+    <DeviceInfo DeviceType="频谱仪" DeviceModel="N9030A" DeviceHandle="USB0::0x0957::0x0D0B::US49230327::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="false"/> 
+	    <!--<DeviceInfo DeviceType="功率计" DeviceModel="E4418A" DeviceHandle="GPIB0::13::INSTR" ClassType="DevicesApp.Devices.Visa" IsVirtual="false"/>-->
   </DeviceInfos>
 </LocalDevices>

BIN
exe/apps/Tps_LQ_Transmitter/NationalInstruments.Common.Native.dll


BIN
exe/apps/Tps_LQ_Transmitter/NationalInstruments.Common.dll


BIN
exe/apps/Tps_LQ_Transmitter/NationalInstruments.MStudioCLM.dll


BIN
exe/apps/Tps_LQ_Transmitter/NationalInstruments.NiLmClientDLL.dll


BIN
exe/apps/Tps_LQ_Transmitter/NationalInstruments.VisaNS.dll


BIN
exe/apps/Tps_LQ_Transmitter/Tps_LQ_Transmitter.dll


BIN
exe/apps/Tps_LQ_Transmitter/Tps_LQ_Transmitter.pdb


BIN
exe/apps/Tps_LQ_Transmitter/config/测试#常温测试#发射机 -N9030A.xlsx


BIN
exe/apps/Tps_LQ_Transmitter/config/测试#常温测试#发射机.xlsx


BIN
exe/apps/Tps_LQ_Transmitter/config/测试#常温测试#发射机_FSU-26.xlsx


BIN
tps/TpsLabStudio/.vs/TpsLabStudio/v16/.suo


+ 135 - 0
tps/TpsLabStudio/Common/VisaResource.cs

@@ -0,0 +1,135 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NationalInstruments.VisaNS;
+
+namespace CommonDevHostApp.Devices
+{
+    public class CommonVisaResource : IDisposable
+    {
+        private MessageBasedSession mbSession;
+        public bool IsOk { get; set; }
+        public string ResourceHandle;
+
+        public CommonVisaResource()
+        {
+            IsOk = false;
+        }
+
+        /// <summary>
+        /// 对于Visa总线,方法close 与Dispose功能一样
+        /// </summary>
+        public void Dispose()
+        {
+            this.Close();
+        }
+
+        /// <summary>
+        /// 打开设备,在Initilize函数之后,可以Open打开设备,或者Close关闭设备
+        /// </summary>
+        /// <returns></returns>
+        public virtual bool Open(string ResourceHandle)
+        {
+            if (IsOk)
+                return true;
+
+            this.ResourceHandle = ResourceHandle;
+
+            if (mbSession != null)
+                Close();
+
+            mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().Open(this.ResourceHandle);
+            if (mbSession != null)
+            {
+                IsOk = true;
+                return true;
+            }
+            else
+            {
+                IsOk = false;
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// 关闭设备
+        /// </summary>
+        /// <returns></returns>
+        public virtual bool Close()
+        {
+            if (mbSession != null)
+            {
+                try
+                {
+                    mbSession.Dispose();
+                    mbSession = null;
+                }
+                catch (Exception)
+                {
+                }
+                finally
+                {
+                    mbSession = null;
+                }
+            }
+
+            IsOk = false;
+            return true;
+        }
+
+        /// <summary>
+        /// 写总线
+        /// </summary>
+        /// <param name="command"></param>
+        /// <returns></returns>
+        public virtual bool Write(string command)
+        {
+            if (mbSession != null)
+            {
+                mbSession.Write(command);
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// 读总线
+        /// </summary>
+        /// <returns></returns>
+        public virtual string Read()
+        {
+            if (mbSession != null)
+            {
+                string responseString = mbSession.ReadString();
+                return responseString;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// 查询
+        /// </summary>
+        /// <param name="command"></param>
+        /// <returns></returns>
+        public virtual string Query(string command)
+        {
+            if (mbSession != null)
+            {
+                mbSession.Write(command);
+                string responseString = mbSession.ReadString();
+                return responseString;
+            }
+            else
+            {
+                return null;
+            }
+        }
+    }
+}

+ 51 - 12
tps/TpsLabStudio/FrmMain.cs

@@ -1,4 +1,5 @@
-using System;
+using CommonDevHostApp.Devices;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
@@ -273,15 +274,36 @@ namespace Tps_LQ_Transmitter
 
             dgvTestData.DataSource = null;
             dgvTestData.DataSource = currFileNode.Tps.TestTable;
+            // ConfigParameter SetVoltPara = new ConfigParameter();
+            /*
+            CommonVisaResource DCPower = new CommonVisaResource();
+         
+            DCPower.Open(currFileNode.Tps.DCPowerAddress);
+            DCPower.Write("INSTrument:NSELect 6\n"); DCPower.Query("*OPC?\n");
+            DCPower.Write("VOLTage:PROTection:LEVel 34 V\n"); DCPower.Query("*OPC?\n");//设置过压保护
 
+            DCPower.Write("VOLT:PROT:LOW 20 V\n"); DCPower.Query("*OPC?\n");//设置欠压保护
+            DCPower.Write("VOLT:PROT:LOW:STAT UVP\n"); DCPower.Query("*OPC?\n");//启动欠压保护
+            double volt = currFileNode.Tps.GloabConfigDict["电压"];
+            double Current = currFileNode.Tps.GloabConfigDict["电流"];
+
+            DCPower.Write($"VOLTage {volt} V\n"); DCPower.Query("*OPC?\n");//设置电压
+            DCPower.Write($"CURRent {Current} A\n"); DCPower.Query("*OPC?\n");//设置电流
+            DCPower.Write("GLOBal:OUTPut:STATe 1\n"); DCPower.Query("*OPC?\n");
+            */
+
+
+            //获取仪器
+            //var DC = tps.GetDeviceModel("Z36-6");
+
+            //DC.Write("选择电源地址", "6");
+
+
+            //DC.Write("设置过压保护", "33.6V");
+            //DC.Write("设置电压", "28V");
+            //DC.Write("设置限流", "2A");
+            //DC.Write("打开电源");
 
-          /*  //获取仪器
-            var DC = tps.GetDevice("程控电源");
-            DC.Write("设置过压保护", "36V");
-            DC.Write("设置电压","12V");
-            DC.Write("设置限流", "3A");
-            DC.Write("打开电源");
-          */
 
             task = new Task(new Action(() => {
                 //执行测试过程
@@ -295,7 +317,7 @@ namespace Tps_LQ_Transmitter
 
             }));
             task.Start();
-         //   DC.Write("关闭电源");
+        
         }
 
         public void DataTableFlush(DataTable data)
@@ -308,8 +330,9 @@ namespace Tps_LQ_Transmitter
         private void BtnStop_Click(object sender, EventArgs e)
         {
             MainTps tps = new MainTps();
+            CommonVisaResource DCPower = new CommonVisaResource();
             //获取仪器
-            var DC = tps.GetDevice("程控电源");
+            //var DC = tps.GetDevice("程控电源");
             currFileNode.Tps.Stop();
             //if(task != null && task.IsCompleted == false)
             //{
@@ -318,7 +341,8 @@ namespace Tps_LQ_Transmitter
             //}
             BtnStart.Enabled = true;
             BtnLoadTpsConfig.Enabled = true;
-        //    DC.Write("关闭电源");
+            //DC.Write("关闭电源");
+         //   DCPower.Write("GLOBal:OUTPut:STATe 0\n"); DCPower.Query("*OPC?\n");
         }
 
         private void BtnDevice_Click(object sender, EventArgs e)
@@ -513,7 +537,22 @@ namespace Tps_LQ_Transmitter
                 node.IsSelected = e.Cell.Checked;
             }
         }
-
+        public class ConfigParameter
+        {
+            /// <summary>
+            /// 设置过压保护
+            /// </summary>
+            public string SetOverVoltProtect { set; get; }
+            /// <summary>
+            /// 设置电压
+            /// </summary>
+            public double SetVolt { set; get; }
+            /// <summary>
+            /// 设置电流
+            /// </summary>
+            public double SetCurrent { set; get; }
+           
+        }
         private void dgvTestData_CellContentClick(object sender, DataGridViewCellEventArgs e)
         {
 

BIN
tps/TpsLabStudio/Libs/NationalInstruments.Common.Native.dll


BIN
tps/TpsLabStudio/Libs/NationalInstruments.Common.dll


BIN
tps/TpsLabStudio/Libs/NationalInstruments.VisaNS.dll


+ 47 - 1
tps/TpsLabStudio/MainTps.cs

@@ -61,6 +61,10 @@ namespace Tps_LQ_Transmitter
         /// </summary>
         public Dictionary<string,double> TestValueDict;
 
+        public Dictionary<string,double> GloabConfigDict;
+        public string DCPowerAddress;//程控电源地址
+        public string N9030A_SA_Address;//N9030A频谱仪地址
+
         public event DltCellValueChanged ManualTableCellChanged;
         public event DltCellValueChanged TestTableCellChanged;
         public event DltCellValueAdd AddTestTableCell;
@@ -76,6 +80,8 @@ namespace Tps_LQ_Transmitter
         {
             Devices = new BindingList<DeviceNode>();
             TestNodes = new BindingList<TestNode>();
+            GloabConfigDict = new Dictionary<string, double>();
+            DCPowerAddress = "";
 
             baseModelStructs = new List<BaseModelStruct>();
             LoadBaseModelStructs();
@@ -220,6 +226,46 @@ namespace Tps_LQ_Transmitter
                         }
                     }
                 }
+
+                //加载人工测试项总表
+                sheet = workbook.Worksheets["供电设置"];
+                if (sheet != null)
+                {
+                    blankRows = 0; //避免出错
+                    num = 0;
+                    //默认最多两百行
+                    while (num++ < 200)
+                    {
+                        //索引从1开始
+                        string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                        col1 = col1.Trim();
+                        if (string.IsNullOrEmpty(col1))
+                        {
+                            blankRows++;
+                            if (blankRows > 5)
+                            {
+                                //连续5个空行以上则退出
+                                break;
+                            }
+                        }
+                        else
+                        {
+                            blankRows = 0;
+                        }
+                        
+                        if (col1.Equals("参数表"))
+                        {
+                             //电压   
+                             string WorkVolt = sheet.Range[3, 3].Value2 != null ? sheet.Range[3, 3].Value2.ToString() : "";
+                            GloabConfigDict.Add("电压", double.Parse(WorkVolt));
+                            //电流   
+                            string WorkCurrent = sheet.Range[4, 3].Value2 != null ? sheet.Range[4, 3].Value2.ToString() : "";
+                            GloabConfigDict.Add("电流", double.Parse(WorkCurrent));
+                            DCPowerAddress = sheet.Range[5, 3].Value2 != null ? sheet.Range[5, 3].Value2.ToString() : "";
+                        }
+                    }
+                }
+
             }
             return ok;
         }
@@ -249,7 +295,7 @@ namespace Tps_LQ_Transmitter
                 col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
                 col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
                 col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : "";
-                if (string.IsNullOrEmpty(col1) || string.IsNullOrEmpty(col2) || string.IsNullOrEmpty(col3))
+                if ( string.IsNullOrEmpty(col2) || string.IsNullOrEmpty(col3))
                 {
                     break;
                 }

+ 22 - 2
tps/TpsLabStudio/TpsLabStudio.csproj

@@ -58,6 +58,18 @@
     <Reference Include="DevComponents.SuperGrid.Design">
       <HintPath>..\..\exe\DevComponents.SuperGrid.Design.dll</HintPath>
     </Reference>
+    <Reference Include="NationalInstruments.Common, Version=15.0.40.49154, Culture=neutral, PublicKeyToken=dc6ad606294fc298, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>Libs\NationalInstruments.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="NationalInstruments.Common.Native, Version=8.7.35.133, Culture=neutral, PublicKeyToken=18cbae0f9955702a, processorArchitecture=AMD64">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>Libs\NationalInstruments.Common.Native.dll</HintPath>
+    </Reference>
+    <Reference Include="NationalInstruments.VisaNS, Version=13.0.45.167, Culture=neutral, PublicKeyToken=4febd62461bf11a4, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>Libs\NationalInstruments.VisaNS.dll</HintPath>
+    </Reference>
     <Reference Include="Spire.License, Version=1.3.8.40, Culture=neutral, PublicKeyToken=b1144360237c8b3f, processorArchitecture=MSIL">
       <HintPath>packages\FreeSpire.XLS.10.10.0\lib\net40\Spire.License.dll</HintPath>
     </Reference>
@@ -81,6 +93,7 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Bundle.cs" />
+    <Compile Include="Common\VisaResource.cs" />
     <Compile Include="com\BaseModelStruct.cs" />
     <Compile Include="com\DeviceNode.cs" />
     <Compile Include="com\FileNode.cs" />
@@ -101,6 +114,7 @@
     <Compile Include="models\NormalTemperatureTest.cs" />
     <Compile Include="models\PhaseNoise.cs" />
     <Compile Include="models\PowerAndFreqStability.cs" />
+    <Compile Include="models\PowerTest-PowerMeter.cs" />
     <Compile Include="models\SpuriousSuppression.cs" />
     <Compile Include="models\HarmonicSuppression.cs" />
     <Compile Include="models\BaseModel.cs" />
@@ -146,8 +160,11 @@
     <None Include="config\测试#常温检查#发射机.xlsx">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
-    <None Include="config\测试#常温测试#发射机.xlsx">
-      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    <None Include="config\测试#常温测试#发射机 -N9030A.xlsx">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="config\测试#常温测试#发射机_FSU-26.xlsx">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
     <None Include="packages.config" />
     <None Include="Properties\Settings.settings">
@@ -164,6 +181,9 @@
     <Content Include="aa.PNG">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="Libs\NationalInstruments.Common.dll" />
+    <Content Include="Libs\NationalInstruments.Common.Native.dll" />
+    <Content Include="Libs\NationalInstruments.VisaNS.dll" />
     <Content Include="test.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>

+ 1 - 1
tps/TpsLabStudio/TpsLabStudio.csproj.user

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
-    <ProjectView>ProjectFiles</ProjectView>
+    <ProjectView>ShowAllFiles</ProjectView>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
     <StartAction>Program</StartAction>

BIN
tps/TpsLabStudio/config/ModulationMode.xlsx


BIN
tps/TpsLabStudio/config/测试#常温测试#发射机 -N9030A.xlsx


BIN
tps/TpsLabStudio/config/测试#常温测试#发射机.xlsx


BIN
tps/TpsLabStudio/config/测试#常温测试#发射机_FSU-26.xlsx


+ 8 - 7
tps/TpsLabStudio/models/HarmonicSuppression.cs

@@ -86,7 +86,7 @@ namespace Tps_LQ_Transmitter.models
             }
             double CenterFreq;
             int harmonic_num;
-            double Power;
+            double Power, Freq;
             Data.HarmonicSuppression = new double[PowerPara.FrequencyNumber,PowerPara.HarmonicTime.Length];
            
             for (int point = 0; ; point++)
@@ -106,7 +106,8 @@ namespace Tps_LQ_Transmitter.models
                     SA.Write("REF", PowerPara.REF); SA.Query("OPC");
                     SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
                     SA.Write("SingleOrCont", "0"); SA.Query("OPC");
-                    PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
+                    PsaPeakValue_Tracedata(SA, out y_value, out x_value, true);
+                    Freq=x_value;
                     Power = y_value;
 
                 }
@@ -120,7 +121,7 @@ namespace Tps_LQ_Transmitter.models
 
                     for (harmonic_num = 0; harmonic_num < PowerPara.HarmonicTime.Length; harmonic_num++)
                     {
-                        SA.Write("CENTER", (CenterFreq * PowerPara.HarmonicTime[harmonic_num]).ToString()); SA.Query("OPC");//N次谐波
+                        SA.Write("CENTER", (Freq/1000000 * PowerPara.HarmonicTime[harmonic_num]).ToString()); SA.Query("OPC");//N次谐波
                         SA.Write("SingleOrCont", "0"); SA.Query("OPC");
                         PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
                         Data.HarmonicSuppression[point, harmonic_num] = Math.Round(Power - y_value, 2);
@@ -139,7 +140,7 @@ namespace Tps_LQ_Transmitter.models
 
                 }
 
-                HarmonicSuppressionPrint.Test_name = parameters.Channel + "-谐波抑制测试-" + CenterFreq.ToString() + "MHz";
+                HarmonicSuppressionPrint.Test_name = parameters.Channel + "-谐波抑制测试-" + (Freq / 1000000).ToString() + "MHz";
                 HarmonicSuppressionPrint.Lower = PowerPara.HarmonicSuppressionLower;
                 HarmonicSuppressionPrint.TestVal = HarmonicMinTimeVal;
               //  HarmonicSuppressionPrint.TestVal = random.Next(4000, 12000) / 100.0;//随机数
@@ -188,8 +189,8 @@ namespace Tps_LQ_Transmitter.models
             psa.Query("OPC");
             string tracedata = psa.Query("读曲线");
             string[] tracedatas = tracedata.Split(',');
-            double[] tracedata_double = new double[tracedatas.Length];
-            for (int i = 0; i < tracedatas.Length; i++)
+            double[] tracedata_double = new double[tracedatas.Length-1];
+            for (int i = 0; i < tracedatas.Length-1; i++)
             {
                 tracedata_double[i] = double.Parse(tracedatas[i]);
             }
@@ -200,7 +201,7 @@ namespace Tps_LQ_Transmitter.models
                 double startfreq = double.Parse(psa.Query("读起始频率"));
                 double stopfreq = double.Parse(psa.Query("读截止频率"));
                 double counts = double.Parse(psa.Query("测试点数读取"));
-                X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 1);
+                X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 2);
             }
             Y_Maxvalue = Math.Round(Y_Maxvalue, 3);
         }

+ 7 - 2
tps/TpsLabStudio/models/ModulationIndexAndMaxFreqOffset.cs

@@ -116,16 +116,21 @@ namespace Tps_LQ_Transmitter.models
 
                     SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
                     SA.Write("SingleOrCont", "0"); SA.Query("OPC");
+                    SA.Write("单次扫描"); SA.Query("OPC");
                     SA.Write("PEAK", "1"); SA.Query("OPC");
                     SA.Write("PEAK", "2"); SA.Query("OPC");
-                    SA.Write("NextPeak", "2"); SA.Query("OPC");
 
-                    if(SA.Query("IDN")=="N9030A")//N9030A型号频谱仪
+                    if (SA.Query("IDN").Contains("N9030"))//N9030A型号频谱仪
                     {
+                                         
+                        SA.Write("DELT打开", "2"); SA.Query("OPC");
+                        SA.Write("NextPeak", "2"); SA.Query("OPC");
                         PowerDelt[point] = double.Parse(SA.Query("读MARK功率", "2")); SA.Query("OPC");
                     }
                     else//其他型号频谱仪
                     {
+                        
+                        SA.Write("NextPeak", "2"); SA.Query("OPC");
                         PowerDelt[point] = double.Parse(SA.Query("读DELT功率", "2")); SA.Query("OPC");
                     }
                     

+ 53 - 41
tps/TpsLabStudio/models/NoisePowerDensity.cs

@@ -42,6 +42,7 @@ namespace Tps_LQ_Transmitter.models
             PowerPara.FrequencyNumber = parameters.Parameters.GetParameter<int>("频点数量");
             PowerPara.StopFrequency = parameters.Parameters.GetParameter<double>("终止频率");
             PowerPara.SPAN = parameters.Parameters.GetParameter<string>("扫描带宽(SPAN)");
+            PowerPara.ACHBand = parameters.Parameters.GetParameter<string>("通道带宽");
             PowerPara.REF = parameters.Parameters.GetParameter<string>("参考电平(REF)");
             PowerPara.RBW = parameters.Parameters.GetParameter<string>("分辨率带宽(RBW)");
             PowerPara.VBW = parameters.Parameters.GetParameter<string>("视频带宽(VBW)");
@@ -61,8 +62,10 @@ namespace Tps_LQ_Transmitter.models
             SA.Write("SPAN", PowerPara.SPAN); SA.Query("OPC");
             SA.Write("RBW", PowerPara.RBW); SA.Query("OPC");
             SA.Write("VBW", PowerPara.VBW); SA.Query("OPC");
-            SA.Write("REF", PowerPara.REF); SA.Query("OPC");
-            SA.Write("SingleOrCont", "0"); SA.Query("OPC");
+            SA.Write("REF", "-20"); SA.Query("OPC");
+            SA.Write("设置通道带宽", PowerPara.ACHBand); SA.Query("OPC");
+            SA.Write("ATT", "5"); SA.Query("OPC");
+
             SA.Write("MARK打开", "1"); SA.Query("OPC");
 
             if ((PowerPara.FrequencyNumber != 0) && (PowerPara.FrequencyNumber != 1) && (PowerPara.StepFrequency == 0))
@@ -90,28 +93,31 @@ namespace Tps_LQ_Transmitter.models
                 Thread.Sleep(PowerPara.ControlDelay);//单位ms            
 
                 SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
-                SA.Write("PEAK", "1"); SA.Query("OPC");
-                SA.Write("设置MARK为NOISe","1"); SA.Query("OPC");
-                Data.NoisePower[point] = SA.Query("读噪声功率谱密度", "1");
-             
+                SA.Write("设置通道功率模式"); SA.Query("OPC");
+                SA.Write("SingleOrCont", "0"); SA.Query("OPC");
+                y_value = double.Parse(SA.Query("读通道功率"));
+
+      
+                NoisePowerPrint.Test_name = parameters.Channel + "-噪声功率谱密度(dBm/Hz)-" + CenterFreq.ToString() + "MHz";
                 NoisePowerPrint.Upper = PowerPara.NoisePowerUpper;
-                NoisePowerPrint.TestVal = Math.Round(double.Parse(Data.NoisePower[point]),2)  ;
+                NoisePowerPrint.TestVal = Math.Round(y_value-10*Math.Log10(double.Parse(PowerPara.ACHBand) *1000), 2)  ;
                 if ( NoisePowerPrint.TestVal <= NoisePowerPrint.Upper)
                 {
-                    NoisePowerPrint.Result = true;
+                    NoisePowerPrint.Result = "是";
                 }
                 else
                 {
-                    NoisePowerPrint.Result = false;
-                }
-                if (parameters.Channel == "通道1")
-                {
-                    //tps.SetTestTableCellValue(point, 9,  NoisePowerPrint.Result ,NoisePowerPrint.TestVal);                    
-                }
-                else if (parameters.Channel == "通道2")
-                {
-                    //tps.SetTestTableCellValue(point + 15, 9,  NoisePowerPrint.Result ,NoisePowerPrint.TestVal);                  
+                    NoisePowerPrint.Result = "否";
                 }
+                tps.TestTableAddCell(NoisePowerPrint.Test_name, "/", NoisePowerPrint.Upper.ToString(), NoisePowerPrint.TestVal.ToString(), NoisePowerPrint.Result);
+                //if (parameters.Channel == "通道1")
+                //{
+                //    //tps.SetTestTableCellValue(point, 9,  NoisePowerPrint.Result ,NoisePowerPrint.TestVal);                    
+                //}
+                //else if (parameters.Channel == "通道2")
+                //{
+                //    //tps.SetTestTableCellValue(point + 15, 9,  NoisePowerPrint.Result ,NoisePowerPrint.TestVal);                  
+                //}
             }
             SA.Write("设置MARK为常规", "1"); SA.Query("OPC");
             SA.Write("关闭所有MARK"); SA.Query("OPC");
@@ -125,6 +131,7 @@ namespace Tps_LQ_Transmitter.models
             Y_Maxvalue = 0;
 
             psa.Write("单次扫描");
+
             psa.Query("OPC");
             string tracedata = psa.Query("读曲线");
             string[] tracedatas = tracedata.Split(',');
@@ -133,7 +140,7 @@ namespace Tps_LQ_Transmitter.models
             {
                 tracedata_double[i] = double.Parse(tracedatas[i]);
             }
-            Y_Maxvalue = Math.Round(tracedata_double.Max(), 3);
+            Y_Maxvalue = tracedata_double.Max();
             if (IsReturnX)
             {
                 int x = Array.IndexOf(tracedata_double, Y_Maxvalue);
@@ -142,6 +149,7 @@ namespace Tps_LQ_Transmitter.models
                 double counts = double.Parse(psa.Query("测试点数读取"));
                 X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 1);
             }
+            Y_Maxvalue = Math.Round(Y_Maxvalue, 3);
         }
         public class ConfigParameter
         {
@@ -175,6 +183,10 @@ namespace Tps_LQ_Transmitter.models
             /// </summary>
             public string SPAN { set; get; }
             /// <summary>
+            /// 通道带宽
+            /// </summary>
+            public string ACHBand { set; get; }
+            /// <summary>
             /// 设置参考电平
             /// </summary>
             public string REF { set; get; }
@@ -204,31 +216,31 @@ namespace Tps_LQ_Transmitter.models
             public string[] NoisePower { set; get; }
             
         }
-        public class DataType
-        {
+        //public class DataType
+        //{
 
-            /// <summary>
-            /// 测试名称
-            /// </summary>
-            public string Test_name { set; get; }
-            /// <summary>
-            /// 指标下限
-            /// </summary>
-            public double Lower { set; get; }
-            /// <summary>
-            /// 指标上限
-            /// </summary>
-            public double Upper { set; get; }
-            /// <summary>
-            /// 测试值
-            /// </summary>
-            public double TestVal { set; get; }
-            /// <summary>
-            /// 判断结果
-            /// </summary>
-            public bool Result { set; get; }
+        //    /// <summary>
+        //    /// 测试名称
+        //    /// </summary>
+        //    public string Test_name { set; get; }
+        //    /// <summary>
+        //    /// 指标下限
+        //    /// </summary>
+        //    public double Lower { set; get; }
+        //    /// <summary>
+        //    /// 指标上限
+        //    /// </summary>
+        //    public double Upper { set; get; }
+        //    /// <summary>
+        //    /// 测试值
+        //    /// </summary>
+        //    public double TestVal { set; get; }
+        //    /// <summary>
+        //    /// 判断结果
+        //    /// </summary>
+        //    public bool Result { set; get; }
 
 
-        }
+        //}
     }
 }

+ 73 - 53
tps/TpsLabStudio/models/PhaseNoise.cs

@@ -58,21 +58,20 @@ namespace Tps_LQ_Transmitter.models
                 PowerPara.ControlDelay = 10;
             }
             SA.Write("仪器复位"); SA.Query("OPC");
-            SA.Write("SPAN", PowerPara.SPAN); SA.Query("OPC");
-            SA.Write("RBW", PowerPara.RBW); SA.Query("OPC");
-            SA.Write("VBW", PowerPara.VBW); SA.Query("OPC");
             SA.Write("REF", PowerPara.REF); SA.Query("OPC");
-
-            SA.Write("SingleOrCont", "0"); SA.Query("OPC");
             SA.Write("MARK打开", "1"); SA.Query("OPC");
-            if(SA.Query("IDN") == "N9030A")
-            {
-                SA.Write("MARK打开", "2"); SA.Query("OPC");
-                SA.Write("DELT打开", "2"); SA.Query("OPC");
 
-            }
+
+
+            //if (SA.Query("IDN").Contains("N9030"))
+            //{
+            //    SA.Write("MARK打开", "2"); SA.Query("OPC");
+            //    SA.Write("DELT打开", "2"); SA.Query("OPC");
+
+            //}
             
 
+            
             if ((PowerPara.FrequencyNumber != 0) && (PowerPara.FrequencyNumber != 1) && (PowerPara.StepFrequency == 0))
             {
                 PowerPara.StepFrequency = ((int)(((PowerPara.StopFrequency - PowerPara.StartFrequency) / (PowerPara.FrequencyNumber - 1)) * 100)) / 100;
@@ -82,7 +81,7 @@ namespace Tps_LQ_Transmitter.models
                 PowerPara.FrequencyNumber = ((int)((PowerPara.StopFrequency - PowerPara.StartFrequency) / PowerPara.StepFrequency)) + 1;
             }
 
-            double CenterFreq;
+            double CenterFreq,Freq;
             Data.PhaseNoise = new double[PowerPara.FrequencyNumber, PowerPara.PNosieOffsetFreq.Length];
            
             for (int point = 0;; point++)
@@ -94,10 +93,10 @@ namespace Tps_LQ_Transmitter.models
                     break;
                 }
                 // 控制
-                SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1));
+               // SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1));
                 Thread.Sleep(PowerPara.ControlDelay);//单位ms
 
-                if (SA.Query("IDN") == "N9030A")//N9030A型号频谱仪
+                if (SA.Query("IDN").Contains("N9030"))//N9030A型号频谱仪
                 {
                     SA.Write("相位噪声测试模式");
                     SA.Query("OPC");
@@ -113,9 +112,17 @@ namespace Tps_LQ_Transmitter.models
                 }
                 else
                 {
+                    
+                    SA.Write("SPAN", "0.1"); SA.Query("OPC");
+                    SA.Write("RBWAUTO"); SA.Query("OPC");
+                    SA.Write("VBWAUTO"); SA.Query("OPC");
                     SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
-                    SA.Write("PEAK", "1"); SA.Query("OPC");
-                    SA.Write("相位噪声测试模式", "2"); SA.Query("OPC");
+                    SA.Write("SingleOrCont", "0"); SA.Query("OPC");
+                    PsaPeakValue_Tracedata(SA, out y_value, out x_value, true);
+                    SA.Write("CENTER",( x_value/1000000).ToString()); SA.Query("OPC");                  
+                    
+                    SA.Write("RBW", PowerPara.RBW); SA.Query("OPC");
+                    SA.Write("VBW", PowerPara.VBW); SA.Query("OPC");
 
                 }
       
@@ -123,15 +130,25 @@ namespace Tps_LQ_Transmitter.models
                 double PhaseNoiseMaxOffsetVal = 0;
                 for ( int offset_num = 0; offset_num < PowerPara.PNosieOffsetFreq.Length; offset_num++)
                 {
-                    if (SA.Query("IDN") == "N9030A")//N9030A型号频谱仪
+                    if (SA.Query("IDN").Contains("N9030"))//N9030A型号频谱仪
                     {
                         SA.Write("设置Mark频率Hz", "1", PowerPara.PNosieOffsetFreq[offset_num].ToString()); SA.Query("OPC");           
                         double temp = Math.Round(double.Parse(SA.Query("读Mark相位噪声值", "1")), 2); 
                     }
                     else
                     {
-                        SA.Write("设置DELT频率", "2", PowerPara.PNosieOffsetFreq[offset_num].ToString()); SA.Query("OPC");
+                       
+                        SA.Write("SPAN",( PowerPara.PNosieOffsetFreq[offset_num]/1000*5).ToString()); SA.Query("OPC");
+                        
+                        SA.Write("SingleOrCont", "0"); SA.Query("OPC");
+                        SA.Write("单次扫描"); SA.Query("OPC");
+                        SA.Write("PEAK", "1"); SA.Query("OPC");
+                        SA.Write("相位噪声测试模式", "1"); SA.Query("OPC");
+                     
+                     
+                        SA.Write("设置DELT频率", "1", PowerPara.PNosieOffsetFreq[offset_num].ToString()); SA.Query("OPC");
                         Data.PhaseNoise[point, offset_num] = Math.Round(double.Parse(SA.Query("读相位噪声", "1")), 2);
+                       
 
                     }                    
                     PhaseNoiseOffsetVal[offset_num] = Data.PhaseNoise[point, offset_num];
@@ -144,27 +161,28 @@ namespace Tps_LQ_Transmitter.models
                 {
                     PhaseNoiseMaxOffsetVal = PhaseNoiseOffsetVal[0];
                 }
-
+                PhaseNoisePrint.Test_name = parameters.Channel + "-相位噪声(dBc/Hz)-" + CenterFreq.ToString() + "MHz";
                 PhaseNoisePrint.Upper = PowerPara.PhaseNoiseUpper;
                 PhaseNoisePrint.TestVal = PhaseNoiseMaxOffsetVal;
                 if (PhaseNoisePrint.TestVal <= PhaseNoisePrint.Upper)
                 {
-                    PhaseNoisePrint.Result = true;
+                    PhaseNoisePrint.Result = "是";
                 }
                 else
                 {
-                    PhaseNoisePrint.Result = false;
-                }
-                if (parameters.Channel == "通道1")
-                {
-                    //tps.SetTestTableCellValue(point, 15, PhaseNoisePrint.Result, PhaseNoisePrint.TestVal);
-                }
-                else if (parameters.Channel == "通道2")
-                {
-                    //tps.SetTestTableCellValue(point + 15, 15, PhaseNoisePrint.Result, PhaseNoisePrint.TestVal);
+                    PhaseNoisePrint.Result = "否";
                 }
+                tps.TestTableAddCell(PhaseNoisePrint.Test_name, "/", PhaseNoisePrint.Upper.ToString() ,PhaseNoisePrint.TestVal.ToString(), PhaseNoisePrint.Result);
+                //if (parameters.Channel == "通道1")
+                //{
+                //    //tps.SetTestTableCellValue(point, 15, PhaseNoisePrint.Result, PhaseNoisePrint.TestVal);
+                //}
+                //else if (parameters.Channel == "通道2")
+                //{
+                //    //tps.SetTestTableCellValue(point + 15, 15, PhaseNoisePrint.Result, PhaseNoisePrint.TestVal);
+                //}
             }
-            SA.Write("设置MARK为常规", "2"); SA.Query("OPC");
+           
             SA.Write("关闭所有MARK"); SA.Query("OPC");
             return true;
         }
@@ -176,6 +194,7 @@ namespace Tps_LQ_Transmitter.models
             Y_Maxvalue = 0;
 
             psa.Write("单次扫描");
+
             psa.Query("OPC");
             string tracedata = psa.Query("读曲线");
             string[] tracedatas = tracedata.Split(',');
@@ -184,7 +203,7 @@ namespace Tps_LQ_Transmitter.models
             {
                 tracedata_double[i] = double.Parse(tracedatas[i]);
             }
-            Y_Maxvalue = Math.Round(tracedata_double.Max(), 3);
+            Y_Maxvalue = tracedata_double.Max();
             if (IsReturnX)
             {
                 int x = Array.IndexOf(tracedata_double, Y_Maxvalue);
@@ -193,6 +212,7 @@ namespace Tps_LQ_Transmitter.models
                 double counts = double.Parse(psa.Query("测试点数读取"));
                 X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 1);
             }
+            Y_Maxvalue = Math.Round(Y_Maxvalue, 3);
         }
         public class ConfigParameter
         {
@@ -259,31 +279,31 @@ namespace Tps_LQ_Transmitter.models
             public double[,] PhaseNoise { set; get; }
            
         }
-        public class DataType
-        {
+        //public class DataType
+        //{
 
-            /// <summary>
-            /// 测试名称
-            /// </summary>
-            public string Test_name { set; get; }
-            /// <summary>
-            /// 指标下限
-            /// </summary>
-            public double Lower { set; get; }
-            /// <summary>
-            /// 指标上限
-            /// </summary>
-            public double Upper { set; get; }
-            /// <summary>
-            /// 测试值
-            /// </summary>
-            public double TestVal { set; get; }
-            /// <summary>
-            /// 判断结果
-            /// </summary>
-            public bool Result { set; get; }
+        //    /// <summary>
+        //    /// 测试名称
+        //    /// </summary>
+        //    public string Test_name { set; get; }
+        //    /// <summary>
+        //    /// 指标下限
+        //    /// </summary>
+        //    public double Lower { set; get; }
+        //    /// <summary>
+        //    /// 指标上限
+        //    /// </summary>
+        //    public double Upper { set; get; }
+        //    /// <summary>
+        //    /// 测试值
+        //    /// </summary>
+        //    public double TestVal { set; get; }
+        //    /// <summary>
+        //    /// 判断结果
+        //    /// </summary>
+        //    public bool Result { set; get; }
 
 
-        }
+        //}
     }
 }

+ 62 - 9
tps/TpsLabStudio/models/PowerAndFreqStability.cs

@@ -28,7 +28,8 @@ namespace Tps_LQ_Transmitter.models
             Random random = new Random();
 
             //获取仪器
-            var SA = this.tps.GetDeviceModel("FSU-26");
+            var SA = this.tps.GetDevice("频谱仪");
+          
 
             TransmitterSerialPort SerialClient = new TransmitterSerialPort();
             PowerAndFreqStabilityOutData Data = new PowerAndFreqStabilityOutData();
@@ -59,6 +60,7 @@ namespace Tps_LQ_Transmitter.models
             PowerPara.FrequencyNumber = parameters.Parameters.GetParameter<int>("频点数量");
             PowerPara.StopFrequency = parameters.Parameters.GetParameter<double>("终止频率");
             PowerPara.SPAN = parameters.Parameters.GetParameter<string>("扫描带宽(SPAN)");
+            PowerPara.ACHBand = parameters.Parameters.GetParameter<string>("通道带宽");
             PowerPara.REF = parameters.Parameters.GetParameter<string>("参考电平(REF)");
             PowerPara.RBW = parameters.Parameters.GetParameter<string>("分辨率带宽(RBW)");
             PowerPara.VBW = parameters.Parameters.GetParameter<string>("视频带宽(VBW)");
@@ -86,7 +88,14 @@ namespace Tps_LQ_Transmitter.models
                 SA.Write("RBW", PowerPara.RBW); SA.Query("OPC");
                 SA.Write("VBW", PowerPara.VBW); SA.Query("OPC");
                 SA.Write("REF", PowerPara.REF); SA.Query("OPC");
-                SA.Write("设置通道带宽", "2"); SA.Query("OPC");
+                if (SA.Query("IDN").Contains("N9030"))
+                {
+                    SA.Write("设置通道SPAN", PowerPara.SPAN); SA.Query("OPC");
+                }
+
+                SA.Write("设置通道带宽", PowerPara.ACHBand); SA.Query("OPC");
+
+               
 
                 
                 SA.Write("SingleOrCont", "0"); SA.Query("OPC");
@@ -136,12 +145,21 @@ namespace Tps_LQ_Transmitter.models
 
                     SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
                     SA.Write("单次扫描"); SA.Query("OPC");
-                    SA.Query("OPC");
+               
                     
-                    SA.Write("设置通道功率模式"); SA.Query("OPC");                     
+                    SA.Write("设置通道功率模式"); SA.Query("OPC");
+                    if (SA.Query("IDN").Contains("N9030"))
+                    {
+                        PsaPeakValue_CHTracedata(SA, out y_value, out x_value, true);
+                        y_value = double.Parse(SA.Query("读通道功率").Split(',')[0]);
+                    }
+                    else
+                    {
+                        PsaPeakValue_CHTracedata(SA, out y_value, out x_value, true);
+                        y_value = double.Parse(SA.Query("读通道功率"));
 
-                    PsaPeakValue_Tracedata(SA, out y_value, out x_value, true);
-                    y_value = double.Parse(SA.Query("读通道功率"));
+                    }  
+                    
 
                     Data.Power[point] = y_value + PowerPara.OutLoss;//功率
 
@@ -269,6 +287,35 @@ namespace Tps_LQ_Transmitter.models
 
         
 
+        public void PsaPeakValue_CHTracedata(AppLibs.Devices.IVISA psa, out double Y_Maxvalue, out double X_Maxvalue, bool IsReturnX = false)
+        {
+            System.Threading.Thread.Sleep(20);
+            X_Maxvalue = 0;
+            Y_Maxvalue = 0;
+
+            psa.Write("单次扫描");
+
+            psa.Query("OPC");
+            
+            //string tracedata = psa.Query("读曲线");
+            string tracedata = psa.Query("读通道曲线");
+            string[] tracedatas = tracedata.Split(',');
+            double[] tracedata_double = new double[tracedatas.Length-1];
+            for (int i = 0; i < tracedatas.Length-1; i++)
+            {
+                tracedata_double[i] = double.Parse(tracedatas[i]);
+            }
+            Y_Maxvalue = tracedata_double.Max();
+            if (IsReturnX)
+            {
+                int x = Array.IndexOf(tracedata_double, Y_Maxvalue);
+                double startfreq = double.Parse(psa.Query("读起始频率"));
+                double stopfreq = double.Parse(psa.Query("读截止频率"));
+                double counts = double.Parse(psa.Query("测试点数读取"));
+                X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 2);
+            }
+            Y_Maxvalue = Math.Round(Y_Maxvalue, 3);
+        }
         public void PsaPeakValue_Tracedata(AppLibs.Devices.IVISA psa, out double Y_Maxvalue, out double X_Maxvalue, bool IsReturnX = false)
         {
             System.Threading.Thread.Sleep(20);
@@ -278,10 +325,12 @@ namespace Tps_LQ_Transmitter.models
             psa.Write("单次扫描");
 
             psa.Query("OPC");
+
             string tracedata = psa.Query("读曲线");
+           // string tracedata = psa.Query("读通道曲线");
             string[] tracedatas = tracedata.Split(',');
-            double[] tracedata_double = new double[tracedatas.Length];
-            for (int i = 0; i < tracedatas.Length; i++)
+            double[] tracedata_double = new double[tracedatas.Length - 1];
+            for (int i = 0; i < tracedatas.Length - 1; i++)
             {
                 tracedata_double[i] = double.Parse(tracedatas[i]);
             }
@@ -292,7 +341,7 @@ namespace Tps_LQ_Transmitter.models
                 double startfreq = double.Parse(psa.Query("读起始频率"));
                 double stopfreq = double.Parse(psa.Query("读截止频率"));
                 double counts = double.Parse(psa.Query("测试点数读取"));
-                X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 1);
+                X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 2);
             }
             Y_Maxvalue = Math.Round(Y_Maxvalue, 3);
         }
@@ -328,6 +377,10 @@ namespace Tps_LQ_Transmitter.models
             /// </summary>
             public string SPAN { set; get; }
             /// <summary>
+            /// 通道带宽
+            /// </summary>
+            public string ACHBand { set; get; }
+            /// <summary>
             /// 设置参考电平
             /// </summary>
             public string REF { set; get; }

+ 166 - 0
tps/TpsLabStudio/models/PowerTest-PowerMeter.cs

@@ -0,0 +1,166 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tps_LQ_Transmitter.com;
+
+namespace Tps_LQ_Transmitter.models
+{
+    class PowerTest_PowerMeter : BaseModel
+    {
+        public PowerTest_PowerMeter()
+        {
+            TemplateName = "功率(功率计)测试";
+        }
+        /// <summary>
+        /// 使用功率计(E4418A)进行功率测试
+        /// </summary>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public override bool Run(TestNode parameters)
+        {
+            //获取仪器
+            DataType PowerPrint = new DataType();//功率(w)
+     
+            var PowerMeter = this.tps.GetDeviceModel("E4418A");
+            if (PowerMeter == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行", parameters.Channel, parameters.Name));
+                return false;
+            }
+            ConfigParameter PowerPara = new ConfigParameter();
+            PowerPara.ComPort = parameters.Parameters.GetParameter<string>("串口");
+            PowerPara.OutLoss = parameters.Parameters.GetParameter<double>("输出损耗");
+            PowerPara.StartFrequency = parameters.Parameters.GetParameter<double>("起始频率");
+            PowerPara.StepFrequency = parameters.Parameters.GetParameter<double>("频率步进");
+            PowerPara.FrequencyNumber = parameters.Parameters.GetParameter<int>("频点数量");
+            PowerPara.StopFrequency = parameters.Parameters.GetParameter<double>("终止频率");
+            PowerPara.SPAN = parameters.Parameters.GetParameter<string>("扫描带宽(SPAN)");
+            PowerPara.REF = parameters.Parameters.GetParameter<string>("参考电平(REF)");
+            PowerPara.RBW = parameters.Parameters.GetParameter<string>("分辨率带宽(RBW)");
+            PowerPara.VBW = parameters.Parameters.GetParameter<string>("视频带宽(VBW)");
+            PowerPara.ControlDelay = parameters.Parameters.GetParameter<int>("控制延时");
+            PowerPara.PowerLower = parameters.Parameters.GetParameter<double>("功率下限");
+            PowerPara.PowerUpper = parameters.Parameters.GetParameter<double>("功率上限");
+            PowerPara.FreqAccuracyUpper = parameters.Parameters.GetParameter<double>("频率稳定度上限");
+            PowerPara.PowerSumLower = parameters.Parameters.GetParameter<double>("两路功率总和下限");
+            PowerPara.PowerFlatnessUpper = parameters.Parameters.GetParameter<double>("功率不平度上限");
+            if ((PowerPara.StartFrequency == 0) || ((PowerPara.StepFrequency == 0) && (PowerPara.FrequencyNumber == 0)) || (PowerPara.StopFrequency == 0)
+                || (PowerPara.SPAN == null) || (PowerPara.REF == null) || (PowerPara.RBW == null) || (PowerPara.VBW == null) || (PowerPara.PowerLower == 0)
+                || (PowerPara.PowerUpper == 0) || (PowerPara.FreqAccuracyUpper == 0) || (PowerPara.PowerSumLower == 0) || (PowerPara.PowerFlatnessUpper == 0))
+            {
+                ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行", parameters.Channel, parameters.Name));
+                return false;
+            }
+            if (PowerPara.ControlDelay == 0)
+            {
+                PowerPara.ControlDelay = 10;
+            }
+            PowerMeter.Write("设置显示单位W", "1");
+            if ((PowerPara.FrequencyNumber != 0) && (PowerPara.FrequencyNumber != 1) && (PowerPara.StepFrequency == 0))
+            {
+                PowerPara.StepFrequency = ((int)(((PowerPara.StopFrequency - PowerPara.StartFrequency) / (PowerPara.FrequencyNumber - 1)) * 100)) / 100;
+            }
+            if (PowerPara.StepFrequency != 0)
+            {
+                PowerPara.FrequencyNumber = ((int)((PowerPara.StopFrequency - PowerPara.StartFrequency) / PowerPara.StepFrequency)) + 1;
+            }
+            double CenterFreq;
+
+            for (int point = 0; ; point++)
+            {
+
+                CenterFreq = PowerPara.StartFrequency + PowerPara.StepFrequency * point;
+                if (CenterFreq > PowerPara.StopFrequency || (PowerPara.FrequencyNumber == 1 && point == 1))
+                {
+                    break;
+                }
+                string aa = PowerMeter.Query("Fetch测量功率", "1");
+                PowerPrint.Test_name = parameters.Channel + "-功率测试(W)-" + CenterFreq.ToString() + "MHz";
+                PowerPrint.Lower = PowerPara.PowerLower;
+                PowerPrint.Upper = PowerPara.PowerUpper;
+                PowerPrint.TestVal = Math.Round(double.Parse(aa), 2);//功率W
+                if (PowerPrint.TestVal <= PowerPrint.Upper)
+                {
+                    PowerPrint.Result = "是";
+                }
+                else
+                {
+                    PowerPrint.Result = "否";
+                }
+                tps.TestTableAddCell(PowerPrint.Test_name, "/", PowerPrint.Upper.ToString(), PowerPrint.TestVal.ToString(), PowerPrint.Result);
+            }
+            return true;
+        }
+        public class ConfigParameter
+        {
+            /// <summary>
+            /// 串口
+            /// </summary>
+            public string ComPort { set; get; }
+            /// <summary>
+            /// 输出损耗
+            /// </summary>
+            public double OutLoss { set; get; }
+            /// <summary>
+            /// 产品测试的起始频率
+            /// </summary>
+            public double StartFrequency { set; get; }
+            /// <summary>
+            /// 产品测试的频率步进
+            /// </summary>
+            public double StepFrequency { set; get; }
+            /// <summary>
+            /// 产品测试的频点数量
+            /// </summary>
+            public int FrequencyNumber { set; get; }
+            /// <summary>
+            /// 产品的工作频带上限(终止频率)
+            /// 功能:用于判断从起始频率按一定的步进测试是否超出产品工作频段上限
+            /// </summary>
+            public double StopFrequency { set; get; }
+            /// <summary>
+            ///设置频谱仪的SPAN
+            /// </summary>
+            public string SPAN { set; get; }
+            /// <summary>
+            /// 设置参考电平
+            /// </summary>
+            public string REF { set; get; }
+            /// <summary>
+            /// 设置RBW
+            /// </summary>
+            public string RBW { set; get; }
+            /// <summary>
+            /// 设置VBW
+            /// </summary>
+            public string VBW { set; get; }
+            /// <summary>
+            /// 控制延时
+            /// </summary>
+            public int ControlDelay { set; get; }
+            /// <summary>
+            /// 功率下限
+            /// </summary>
+            public double PowerLower { set; get; }
+            /// <summary>
+            /// 功率上限
+            /// </summary>
+            public double PowerUpper { set; get; }
+            /// <summary>
+            /// 频率稳定度上限
+            /// </summary>
+            public double FreqAccuracyUpper { set; get; }
+            /// <summary>
+            /// 两路功率总和下限
+            /// </summary>
+            public double PowerSumLower { set; get; }
+            /// <summary>
+            /// 功率不平度上限
+            /// </summary>
+            public double PowerFlatnessUpper { set; get; }
+
+        }
+    }
+}

+ 25 - 22
tps/TpsLabStudio/models/SpuriousSuppression.cs

@@ -47,10 +47,10 @@ namespace Tps_LQ_Transmitter.models
             PowerPara.StepFrequency = parameters.Parameters.GetParameter<double>("频率步进");
             PowerPara.FrequencyNumber = parameters.Parameters.GetParameter<int>("频点数量");
             PowerPara.StopFrequency = parameters.Parameters.GetParameter<double>("终止频率");
-            PowerPara.LeftOffset = parameters.Parameters.GetParameter<double>("主频左侧偏移量");
-            PowerPara.LeftStart = parameters.Parameters.GetParameter<double>("主频左侧起始");
-            PowerPara.RightOffset = parameters.Parameters.GetParameter<int>("主频右侧偏移量");
-            PowerPara.RightStop = parameters.Parameters.GetParameter<double>("主频右侧终止");
+            PowerPara.LeftOffset = parameters.Parameters.GetParameter<double>("主频左侧终止偏移量");
+            PowerPara.LeftOffsetStart = parameters.Parameters.GetParameter<double>("主频左侧起始偏移量");
+            PowerPara.RightOffset = parameters.Parameters.GetParameter<int>("主频右侧起始偏移量");
+            PowerPara.RightOffsetStop = parameters.Parameters.GetParameter<double>("主频右侧终止偏移量");
             PowerPara.SPAN = parameters.Parameters.GetParameter<string>("扫描带宽(SPAN)");
             PowerPara.REF = parameters.Parameters.GetParameter<string>("参考电平(REF)");
             PowerPara.SmallSignalREF = parameters.Parameters.GetParameter<string>("小信号参考电平(REF)");
@@ -59,7 +59,7 @@ namespace Tps_LQ_Transmitter.models
             PowerPara.ControlDelay = parameters.Parameters.GetParameter<int>("控制延时");
             PowerPara.SpuriousSuppressionLower = parameters.Parameters.GetParameter<double>("杂波抑制下限");
             if ((PowerPara.StartFrequency == 0) || ((PowerPara.StepFrequency == 0) && (PowerPara.FrequencyNumber == 0)) || (PowerPara.StopFrequency == 0)
-                || (PowerPara.LeftOffset == 0) || (PowerPara.LeftStart == 0) || (PowerPara.RightOffset == 0) || (PowerPara.RightStop == 0)
+                || (PowerPara.LeftOffset == 0) || (PowerPara.LeftOffsetStart == 0) || (PowerPara.RightOffset == 0) || (PowerPara.RightOffsetStop == 0)
                 || (PowerPara.SPAN == null) || (PowerPara.REF == null) || (PowerPara.SmallSignalREF == null) || (PowerPara.RBW == null) || (PowerPara.VBW == null) || 
                 (PowerPara.SpuriousSuppressionLower == 0))
             {
@@ -90,7 +90,7 @@ namespace Tps_LQ_Transmitter.models
             }
 
             double CenterFreq;
-            double Power,PowerLeft, PowerRigth;
+            double Power,PowerLeft, PowerRigth, Freq;
             Data.SpuriousSuppression = new double[PowerPara.FrequencyNumber];
             
             for (int point = 0; ; point++)
@@ -109,25 +109,26 @@ namespace Tps_LQ_Transmitter.models
 
                     SA.Write("REF", PowerPara.REF); SA.Query("OPC");
                     SA.Write("CENTER", CenterFreq.ToString()); SA.Query("OPC");
-                    PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
+                    PsaPeakValue_Tracedata(SA, out y_value, out x_value, true);
+                    Freq=x_value/1000000;
                     Power = y_value;
                     //测主频左侧杂散
                     SA.Write("REF", PowerPara.SmallSignalREF); SA.Query("OPC");
-                    SA.Write("START", PowerPara.LeftStart.ToString()); SA.Query("OPC");
-                    SA.Write("STOP", (CenterFreq - PowerPara.LeftOffset).ToString()); SA.Query("OPC");
+                    SA.Write("START", (Freq - PowerPara.LeftOffsetStart).ToString()); SA.Query("OPC");
+                    SA.Write("STOP", (Freq - PowerPara.LeftOffset).ToString()); SA.Query("OPC");
                     PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
                     PowerLeft = Power - y_value;
                     //测主频右侧杂散
-                    SA.Write("START", (CenterFreq + PowerPara.RightOffset).ToString()); SA.Query("OPC");
-                    SA.Write("STOP", PowerPara.RightStop.ToString()); SA.Query("OPC");
+                    SA.Write("START", (Freq  + PowerPara.RightOffset).ToString()); SA.Query("OPC");
+                    SA.Write("STOP",( Freq + PowerPara.RightOffsetStop).ToString()); SA.Query("OPC");
                     PsaPeakValue_Tracedata(SA, out y_value, out x_value, false);
                     PowerRigth = Power - y_value;
 
                 }
-                SpuriousSuppressionPrint.Test_name = parameters.Channel + "-杂波抑制测试-" + CenterFreq.ToString() + "MHz";
+                SpuriousSuppressionPrint.Test_name = parameters.Channel + "-杂波抑制测试-" + Freq.ToString() + "MHz";
                 SpuriousSuppressionPrint.Lower = PowerPara.SpuriousSuppressionLower;
-                //SpuriousSuppressionPrint.TestVal = Math.Round(Math.Min(PowerLeft, PowerRigth), 2);
-                SpuriousSuppressionPrint.TestVal = random.Next(4000, 12000) / 100.0;//随机数
+                SpuriousSuppressionPrint.TestVal = Math.Round(Math.Min(PowerLeft, PowerRigth), 2);
+               // SpuriousSuppressionPrint.TestVal = random.Next(4000, 12000) / 100.0;//随机数
                 if (SpuriousSuppressionPrint.TestVal >= SpuriousSuppressionPrint.Lower)
                 {
                     SpuriousSuppressionPrint.Result = "是";
@@ -167,23 +168,25 @@ namespace Tps_LQ_Transmitter.models
             Y_Maxvalue = 0;
 
             psa.Write("单次扫描");
+
             psa.Query("OPC");
             string tracedata = psa.Query("读曲线");
             string[] tracedatas = tracedata.Split(',');
-            double[] tracedata_double = new double[tracedatas.Length];
-            for (int i = 0; i < tracedatas.Length; i++)
+            double[] tracedata_double = new double[tracedatas.Length-1];
+            for (int i = 0; i < tracedatas.Length-1; i++)
             {
                 tracedata_double[i] = double.Parse(tracedatas[i]);
             }
-            Y_Maxvalue = Math.Round(tracedata_double.Max(), 3);
+            Y_Maxvalue = tracedata_double.Max();
             if (IsReturnX)
             {
                 int x = Array.IndexOf(tracedata_double, Y_Maxvalue);
                 double startfreq = double.Parse(psa.Query("读起始频率"));
                 double stopfreq = double.Parse(psa.Query("读截止频率"));
                 double counts = double.Parse(psa.Query("测试点数读取"));
-                X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 1);
+                X_Maxvalue = startfreq + (stopfreq - startfreq) * x / (counts - 2);
             }
+            Y_Maxvalue = Math.Round(Y_Maxvalue, 3);
         }
         public class ConfigParameter
         {
@@ -217,17 +220,17 @@ namespace Tps_LQ_Transmitter.models
             /// </summary>
             public double LeftOffset { set; get; }
             /// <summary>
-            /// 主频左侧起始值
+            /// 主频左侧起始偏移量
             /// </summary>
-            public double LeftStart { set; get; }
+            public double LeftOffsetStart { set; get; }
             /// <summary>
             /// 主频右侧偏移量
             /// </summary>
             public double RightOffset { set; get; }
             /// <summary>
-            /// 主频右侧终止值
+            /// 主频右侧终止偏移量
             /// </summary>
-            public double RightStop { set; get; }
+            public double RightOffsetStop { set; get; }
             /// <summary>
             ///设置频谱仪的SPAN
             /// </summary>

+ 18 - 14
tps/TpsLabStudio/models/VoltAndCurrent.cs

@@ -1,4 +1,5 @@
-using System;
+using CommonDevHostApp.Devices;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -27,7 +28,9 @@ namespace Tps_LQ_Transmitter.models
             Random random = new Random();
             //获取仪器
 
-           // var DC = this.tps.GetDevice("程控电源");
+          
+            CommonVisaResource DCPower = new CommonVisaResource();
+            DCPower.Open(tps.DCPowerAddress);
             TransmitterSerialPort SerialClient = new TransmitterSerialPort();
             OutData Data = new OutData();
 
@@ -35,13 +38,13 @@ namespace Tps_LQ_Transmitter.models
             DataType CurrentDataPrint = new DataType();
 
 
-            /*
-            if (DC == null)
+            
+            if (DCPower == null)
             {
                 ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行", parameters.Channel, parameters.Name));
                 return false;
             }
-            */
+            
 
             OpenExcel("电压及电流", out Spire.Xls.Workbook workbook, out Spire.Xls.Worksheet sheet);
             if (sheet == null)
@@ -99,18 +102,19 @@ namespace Tps_LQ_Transmitter.models
                     break;
                 }
                 //控制
-                SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1));
+         //       SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1));
                 Thread.Sleep(PowerPara.ControlDelay);//单位ms
-                /*
-                Data.VoltVal[point] = DC.Query("读取电压");
-                Data.CurrentVal[point] = DC.Query("读取电流");
-                */
+                
+                Data.VoltVal[point] = DCPower.Query("MEASure:VOLTage?\n");
+           
+                Data.CurrentVal[point] = DCPower.Query("MEASure:CURRent?\n");
+                
 
                 VoltDataPrint.Test_name = parameters.Channel + "-电压测试-" + CenterFreq.ToString()+"MHz";
                 VoltDataPrint.Lower = PowerPara.VoltLower;
                 VoltDataPrint.Upper = PowerPara.VoltUpper;
-                //VoltDataPrint.TestVal = double.Parse(Data.VoltVal[point]);
-                VoltDataPrint.TestVal = random.Next(2500, 3000) / 100.0;//随机数
+                VoltDataPrint.TestVal = double.Parse(Data.VoltVal[point]);
+                //VoltDataPrint.TestVal = random.Next(2500, 3000) / 100.0;//随机数
                 if ((VoltDataPrint.TestVal >= VoltDataPrint.Lower) && (VoltDataPrint.TestVal <= VoltDataPrint.Upper))
                 {
                     VoltDataPrint.Result = "是";
@@ -123,8 +127,8 @@ namespace Tps_LQ_Transmitter.models
                 CurrentDataPrint.Test_name = parameters.Channel + "-电流测试-" + CenterFreq.ToString() + "MHz";
                 CurrentDataPrint.Lower = PowerPara.CurrentLower;
                 CurrentDataPrint.Upper = PowerPara.CurrentUpper;
-                //CurrentDataPrint.TestVal = double.Parse(Data.CurrentVal[point]);
-                CurrentDataPrint.TestVal = random.Next(90, 160) / 100.0;
+                CurrentDataPrint.TestVal = double.Parse(Data.CurrentVal[point]);
+                //CurrentDataPrint.TestVal = random.Next(90, 160) / 100.0;
                 if ((CurrentDataPrint.TestVal >= CurrentDataPrint.Lower) && (CurrentDataPrint.TestVal <= CurrentDataPrint.Upper))
                 {
                     CurrentDataPrint.Result = "是";