ceac_pqy@163.com 3 лет назад
Родитель
Сommit
0c82ce507d
24 измененных файлов с 3550 добавлено и 29 удалено
  1. BIN
      exe.zip
  2. 3 1
      exe/JGWorks.exe.config
  3. BIN
      exe/apps/Tps_LQ_Transmitter/Tps_LQ_Transmitter.dll
  4. BIN
      exe/apps/Tps_LQ_Transmitter/Tps_LQ_Transmitter.pdb
  5. BIN
      exe/apps/Tps_LQ_Transmitter/config/测试#常温测试#9B发射机-N9030A.xlsx
  6. BIN
      exe/apps/Tps_LQ_Transmitter/发射机/9B发射机/模板/常温测试模板.xlsx
  7. 2963 0
      exe/logs/202111.log
  8. BIN
      exe/发射机/9B发射机/模板/常温测试模板.xlsx
  9. BIN
      tps/TpsLabStudio/.vs/TpsLabStudio/v16/.suo
  10. 26 21
      tps/TpsLabStudio/FrmMain.cs
  11. 7 1
      tps/TpsLabStudio/MainTps.cs
  12. 1 0
      tps/TpsLabStudio/TpsLabStudio.csproj
  13. 1 1
      tps/TpsLabStudio/TpsLabStudio.csproj.user
  14. 3 2
      tps/TpsLabStudio/com/SerialPort.cs
  15. BIN
      tps/TpsLabStudio/config/测试#常温测试#9B发射机-N9030A.xlsx
  16. 538 0
      tps/TpsLabStudio/models/FskModulationIndexAndMaxFreqOffset.cs
  17. 5 0
      tps/TpsLabStudio/models/SpuriousSuppression.cs
  18. 1 1
      tps/TpsLabStudio/models/VoltAndCurrent.cs
  19. BIN
      tps/TpsLabStudio/obj/Debug/DesignTimeResolveAssemblyReferences.cache
  20. 1 1
      tps/TpsLabStudio/obj/Debug/TpsLabStudio.csproj.CoreCompileInputs.cache
  21. 1 1
      tps/TpsLabStudio/obj/Debug/TpsLabStudio.csproj.FileListAbsolute.txt
  22. BIN
      tps/TpsLabStudio/obj/Debug/TpsLabStudio.csprojAssemblyReference.cache
  23. BIN
      tps/TpsLabStudio/obj/Debug/Tps_LQ_Transmitter.dll
  24. BIN
      tps/TpsLabStudio/obj/Debug/Tps_LQ_Transmitter.pdb

+ 3 - 1
exe/JGWorks.exe.config

@@ -28,7 +28,9 @@
 其中,连接字符串是后来加上的。到这一步已经可以正常访问了-->
   <connectionStrings>
     <!--<add name="localdb" connectionString="Data Source=localhost\SQLEXPRESS;Database=autotestdata;User ID=mskjpt;Password=Pmskjpt2020;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />-->
-    <add name="localdb" connectionString="Data Source=127.0.0.1;port=3308;database=bladex_boot;user id=tester;password=tester12345;Character Set=utf8;" providerName="MySql.Data.MySqlClient" />
+    <add name="localdb" connectionString="Data Source=127.0.0.1;port=3306;database=bladex_boot;user id=tester;password=tester12345;" providerName="MySql.Data.MySqlClient" />
+
+    <!--<add name="localdb" connectionString="Data Source=127.0.0.1;port=3308;database=bladex_boot;user id=tester;password=tester12345;Character Set=utf8;" providerName="MySql.Data.MySqlClient" />-->
     <add name="serverdb" connectionString="Data Source=132.232.11.90;port=3306;database=bladex_boot;user id=root;password=ds3342Jg*df;" providerName="MySql.Data.MySqlClient" />
     <!--<add name="serverdb" connectionString="Data Source=111.230.41.196;port=15589;database=autotestdata;user id=mskjpt;password=Pmskjpt2020;" providerName="MySql.Data.MySqlClient" />-->
     <!--<add name="serverdb" connectionString="Data Source=111.230.41.196;port=15589;database=bladex_boot;user id=mskjpt;password=Pmskjpt2020;" providerName="MySql.Data.MySqlClient" />-->

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/测试#常温测试#9B发射机-N9030A.xlsx


BIN
exe/apps/Tps_LQ_Transmitter/发射机/9B发射机/模板/常温测试模板.xlsx


Разница между файлами не показана из-за своего большого размера
+ 2963 - 0
exe/logs/202111.log


BIN
exe/发射机/9B发射机/模板/常温测试模板.xlsx


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


+ 26 - 21
tps/TpsLabStudio/FrmMain.cs

@@ -283,7 +283,7 @@ namespace Tps_LQ_Transmitter
         { 
         
         }
-            void StartTest()
+        void StartTest()
         {
             Stopwatch TimesCounter = new Stopwatch();
             double testMin = 0;
@@ -309,8 +309,17 @@ namespace Tps_LQ_Transmitter
             byte FourthByte = 0x00;
             string ComPort = CfigComParas.GetComPort("1");
             byte ThridByte = Convert.ToByte(CfigComParas.GetThirdByte("1"), 16);
-
-            int FrequencyNumber = CfigComParas.ComParameters.Count;
+            currFileNode.Tps.ThridByte = ThridByte;
+            int FrequencyNumber;
+            if (currFileNode.Tps.TestFreqSum >= CfigComParas.ComParameters.Count)//如果限定的测试频点数大于设置的频点数
+            {
+                FrequencyNumber = CfigComParas.ComParameters.Count;//取设置的频点数
+            }
+            else
+            {
+                FrequencyNumber = currFileNode.Tps.TestFreqSum;//取限定的测试频点数
+            }
+           
            
 
             dgvTestData.DataSource = null;
@@ -318,6 +327,7 @@ namespace Tps_LQ_Transmitter
             // ConfigParameter SetVoltPara = new ConfigParameter();
             
             CommonVisaResource DCPower = new CommonVisaResource();
+
             try
             {
                 DCPower.Open(currFileNode.Tps.DCPowerAddress);
@@ -343,40 +353,35 @@ namespace Tps_LQ_Transmitter
 
 
 
-            //获取仪器
-            //var DC = tps.GetDeviceModel("Z36-6");
-
-            //DC.Write("选择电源地址", "6");
-
 
-            //DC.Write("设置过压保护", "33.6V");
-            //DC.Write("设置电压", "28V");
-            //DC.Write("设置限流", "2A");
-            //DC.Write("打开电源");
             TransmitterSerialPort SerialClient = new TransmitterSerialPort();
             
             int ControlDelay = currFileNode.Tps.TestNodes[0].Parameters.GetParameter<int>("控制延时");
+            currFileNode.Tps.ControlDelay = ControlDelay;
             task = new Task(new Action(() => {
                 //执行测试过程
                 //currFileNode.Tps.Start(isOrderByChannel);
-                SerialClient.SerialOpen(CfigComParas.GetComPort("1"));
-                ShowMessage(MsgType.Info, string.Format("打开串口."));
+                 SerialClient.SerialOpen(CfigComParas.GetComPort("1"));//需要取消注释
+                 ShowMessage(MsgType.Info, string.Format("打开串口."));//需要取消注释
+                currFileNode.Tps.SerialClient = SerialClient;
                 #region 根据频点来测指标
                 for (int point = 0; point < FrequencyNumber; point++)//频点总数
                 {
                     FourthByte = Convert.ToByte(CfigComParas.GetFourthByte((point + 1).ToString()), 16);
+                    currFileNode.Tps.FourthByte = FourthByte;
                     double CenterFreq = double.Parse(CfigComParas.Getfreqpoint((point + 1).ToString()));
                     for (int i = 0; i < currFileNode.Tps.TestNodes.Count; i++)
                     {
                         currFileNode.Tps.TestNodes[i].PointIndex = point; 
                         currFileNode.Tps.TestNodes[i].CenterFreq = CenterFreq;
-                        currFileNode.Tps.TestNodes[i].PointTotal = currFileNode.Tps.TestNodes.Count;
+                        //currFileNode.Tps.TestNodes[i].PointTotal = currFileNode.Tps.TestNodes.Count;
+                        currFileNode.Tps.TestNodes[i].PointTotal = FrequencyNumber;
                     }
 
                     if (IsRuning == false)
                     {
                         //控制断电
-                        SerialClient.DUT_Transmitter_Ctrol(0x00, 0x00);
+                        SerialClient.DUT_Transmitter_Ctrol(0x00, 0x00,0x55);
                         SerialClient.SerialClose();
                         DCPower.Write("GLOBal:OUTPut:STATe 0\n"); DCPower.Query("*OPC?\n");
                         ShowMessage(MsgType.Info, string.Format("关闭6YYC信号源,关闭串口,关闭TDK电源."));
@@ -384,7 +389,7 @@ namespace Tps_LQ_Transmitter
                     }
                     //控制
                    
-                    SerialClient.DUT_Transmitter_Ctrol(ThridByte, FourthByte);
+                    SerialClient.DUT_Transmitter_Ctrol(ThridByte, FourthByte,0x55);//需要取消注释
                     ShowMessage(MsgType.Info, string.Format("发送串口指令EB 90 {0} {1}.", ThridByte, FourthByte));
                     testMin = TimesCounter.ElapsedMilliseconds/1000f / 60f;
 
@@ -392,7 +397,7 @@ namespace Tps_LQ_Transmitter
                     ShowMessage(MsgType.Info, string.Format("延时{0}ms.", ControlDelay));
                     this.BeginInvoke(new Action(() =>
                     {
-                        labRemainTime.Text = $"第{point + 1}个频点[{CenterFreq}]MHz测试,共{currFileNode.Tps.TestNodes.Count - 1}个频点,耗时{Math.Round(testMin, 2)}Min。";
+                        labRemainTime.Text = $"第{point + 1}个频点[{CenterFreq}]MHz测试,共{FrequencyNumber}个频点,耗时{Math.Round(testMin, 2)}Min。";
                     }));
                     currFileNode.Tps.Start(isOrderByChannel);
 
@@ -405,9 +410,9 @@ namespace Tps_LQ_Transmitter
                 #endregion
                 //控制断电
                
-                SerialClient.DUT_Transmitter_Ctrol(0x00, 0x00);
-                SerialClient.SerialClose();
-                DCPower.Write("GLOBal:OUTPut:STATe 0\n"); DCPower.Query("*OPC?\n");
+                SerialClient.DUT_Transmitter_Ctrol(0x00, 0x00,0x55);//需要取消注释
+                SerialClient.SerialClose();//需要取消注释
+                DCPower.Write("GLOBal:OUTPut:STATe 0\n"); DCPower.Query("*OPC?\n");//需要取消注释
                 ShowMessage(MsgType.Info, string.Format("关闭6YYC信号源,关闭串口,关闭TDK电源."));
                 this.Invoke(new Action(() => {
                     BtnLoadTpsConfig.Enabled = true;

+ 7 - 1
tps/TpsLabStudio/MainTps.cs

@@ -65,6 +65,11 @@ namespace Tps_LQ_Transmitter
         public Dictionary<string,double> GloabConfigDict;
         public string DCPowerAddress;//程控电源地址
         public string N9030A_SA_Address;//N9030A频谱仪地址
+        public int TestFreqSum;//频点数
+        public TransmitterSerialPort SerialClient = new TransmitterSerialPort();
+        public byte ThridByte;//频点控制第3个字节
+        public byte FourthByte;//频点控制第4个字节
+        public int ControlDelay;//控制延时
 
         public event DltCellValueChanged ManualTableCellChanged;
         public event DltCellValueChanged TestTableCellChanged;
@@ -229,7 +234,7 @@ namespace Tps_LQ_Transmitter
                 }
 
                 //加载人工测试项总表
-                sheet = workbook.Worksheets["供电设置"];
+                sheet = workbook.Worksheets["公共设置"];
                 if (sheet != null)
                 {
                     blankRows = 0; //避免出错
@@ -263,6 +268,7 @@ namespace Tps_LQ_Transmitter
                             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() : "";
+                            TestFreqSum = int.Parse(sheet.Range[7, 3].Value2 != null ? sheet.Range[7, 3].Value2.ToString() : "");
                         }
                     }
                 }

+ 1 - 0
tps/TpsLabStudio/TpsLabStudio.csproj

@@ -110,6 +110,7 @@
       <DependentUpon>FrmMain.cs</DependentUpon>
     </Compile>
     <Compile Include="MainTps.cs" />
+    <Compile Include="models\FskModulationIndexAndMaxFreqOffset.cs" />
     <Compile Include="models\ModulationIndexAndMaxFreqOffset.cs" />
     <Compile Include="models\NoisePowerDensity.cs" />
     <Compile Include="models\NormalTemperatureTest.cs" />

+ 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>ShowAllFiles</ProjectView>
+    <ProjectView>ProjectFiles</ProjectView>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
     <StartAction>Program</StartAction>

+ 3 - 2
tps/TpsLabStudio/com/SerialPort.cs

@@ -33,7 +33,7 @@ namespace Tps_LQ_Transmitter.com
             }
 
         }
-        public void DUT_Transmitter_Ctrol(byte ModeSelect,byte FreqSelect)
+        public void DUT_Transmitter_Ctrol(byte ModeSelect,byte FreqSelect,byte FskSet)
         {
             try
             {
@@ -46,13 +46,14 @@ namespace Tps_LQ_Transmitter.com
             {
                 Console.WriteLine("open err:" + e2.Message);
             }
-            byte[] JGbuffer = new byte[4];
+            byte[] JGbuffer = new byte[5];
          
             int offset = 0;
             JGbuffer[offset++] = 0xEB;
             JGbuffer[offset++] = 0x90;
             JGbuffer[offset++] = ModeSelect;//切模式
             JGbuffer[offset++] = FreqSelect;//切频点
+            JGbuffer[offset++] = FskSet;//FSK调制模式
 
             try
             {

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


+ 538 - 0
tps/TpsLabStudio/models/FskModulationIndexAndMaxFreqOffset.cs

@@ -0,0 +1,538 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.IO;
+using System.Threading.Tasks;
+using Tps_LQ_Transmitter.com;
+
+namespace Tps_LQ_Transmitter.models
+{
+    class FskModulationIndexAndMaxFreqOffset : BaseModel
+    {
+        public FskModulationIndexAndMaxFreqOffset()
+        {
+            TemplateName = "FSK调制指数及最大频偏指标测试";
+        }
+        /// <summary>
+        /// FSK调制指数及最大频偏指标测试
+        /// </summary>
+        public override bool Run(TestNode parameters)
+        {
+            double y_value, x_value;
+            ShowMessage(MsgType.Info, string.Format("第{0}个频点FSK调制指数及最大频偏指标测试开始", parameters.PointIndex));
+            Random random = new Random();
+            //获取仪器
+            var SA = this.tps.GetDevice("频谱仪");
+
+           // TransmitterSerialPort SerialClient = new TransmitterSerialPort();
+            OutData Data = new OutData();
+            DataType ModulationIndexPrint = new DataType();
+            DataType leftModulationIndexPrint = new DataType();
+            DataType rightModulationIndexPrint = new DataType();
+            DataType MaxFreqOffsetPrint = new DataType();
+            DataType leftFreqOffsetPrint = new DataType();
+            DataType rightFreqOffsetPrint = new DataType();
+
+            if (SA == null)
+            {
+                ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行", parameters.Channel, parameters.Name));
+                return false;
+            }
+            OpenExcel("FSK调制系数", out Spire.Xls.Workbook workbook, out Spire.Xls.Worksheet sheet);
+            if (sheet == null)
+            {
+                ShowMessage(MsgType.Error, "找不到" + tps.TestProject + "模板.xlsx");
+                return false;
+            }
+
+            //MatchModulaPara CfigModuParas = new MatchModulaPara();
+            //CfigModuParas = LoadModulationWorkBook();
+            //if (CfigModuParas == null)
+            //{
+            //    return false;
+            //}
+
+            ConfigParameter PowerPara = new ConfigParameter();
+            //PowerPara.StepFrequency = 0;
+            ////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.LimitOffset = parameters.Parameters.GetParameter<double>("临界偏移");
+            PowerPara.ShakeCompensate = parameters.Parameters.GetParameter<double>("抖动补偿");
+           // PowerPara.ControlDelay = parameters.Parameters.GetParameter<int>("控制延时");
+            PowerPara.ModulationIndexLower = parameters.Parameters.GetParameter<double>("调制系数下限");
+            PowerPara.ModulationIndexUpper = parameters.Parameters.GetParameter<double>("调制系数上限");
+            PowerPara.BitRate = parameters.Parameters.GetParameter<double>("码率");
+            if ( (PowerPara.SPAN == null) || (PowerPara.REF == null) || (PowerPara.RBW == null) || (PowerPara.VBW == null)||
+                (PowerPara.ModulationIndexLower==0) || (PowerPara.ModulationIndexUpper==0) || (PowerPara.BitRate == 0))
+            {
+                ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行", parameters.Channel, parameters.Name));
+                return false;
+            }
+            //if (PowerPara.ControlDelay == 0)
+            //{
+            //    PowerPara.ControlDelay = 10;
+            //}
+            double[] PowerDeltleft = new double[parameters.PointTotal];
+            double[] PowerDeltright = new double[parameters.PointTotal];
+            Data.ModulationIndex = new string[parameters.PointTotal];
+            Data.leftModulationIndex = new string[parameters.PointTotal];
+            Data.rightModulationIndex = new string[parameters.PointTotal];
+            Data.MaxFreqOffset = new string[parameters.PointTotal];
+            Data.leftFreqOffset = new string[parameters.PointTotal];
+            Data.rightFreqOffset = new string[parameters.PointTotal];
+
+            if (true)//需具备仪器
+            {
+                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("MARK打开", "1"); 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;
+            //}
+            //if(PowerPara.StepFrequency != 0)
+            //{
+            //    PowerPara.FrequencyNumber = ((int)((PowerPara.StopFrequency - PowerPara.StartFrequency) / PowerPara.StepFrequency)) + 1;
+            //}
+            
+            //double CenterFreq;
+            //double[] PowerDeltleft = new double[parameters.PointTotal];
+            //double[] PowerDeltright = new double[parameters.PointTotal];
+            //Data.ModulationIndex = new string[parameters.PointTotal];
+            //Data.leftModulationIndex = new string[parameters.PointTotal];
+            //Data.rightModulationIndex = new string[parameters.PointTotal];
+            //Data.MaxFreqOffset = new string[parameters.PointTotal];
+            //Data.leftFreqOffset = new string[parameters.PointTotal];
+            //Data.rightFreqOffset = new string[parameters.PointTotal];
+
+           // for (int point = 0;; point++)
+            {           
+                //CenterFreq = PowerPara.StartFrequency + PowerPara.StepFrequency * point;
+                //if (CenterFreq > PowerPara.StopFrequency ||( PowerPara.FrequencyNumber == 1 && point == 1))
+                //{
+                //    break;
+                //}
+                if(true)//需具备仪器
+                {
+                    // 控制
+                    //  SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1));
+                    //Thread.Sleep(PowerPara.ControlDelay);//单位ms
+
+
+
+                    SA.Write("CENTER", parameters.CenterFreq.ToString()); SA.Query("OPC");
+                    SA.Write("SingleOrCont", "0"); SA.Query("OPC");
+                    SA.Write("单次扫描"); SA.Query("OPC");
+                    SA.Write("PEAK", "1"); SA.Query("OPC");
+                   // PowerDeltleft[parameters.PointIndex] = 2239000000;
+                    PowerDeltleft[parameters.PointIndex] = double.Parse(SA.Query("读MARK频率", "1")); SA.Query("OPC");
+
+
+                    //控串口为0xEB 0x90 0x02 0xxx 0x00
+                    this.tps.SerialClient.DUT_Transmitter_Ctrol(this.tps.ThridByte, this.tps.FourthByte, 0x00);
+                    Thread.Sleep(this.tps.ControlDelay);//单位ms
+                    SA.Write("SingleOrCont", "0"); SA.Query("OPC");
+                    SA.Write("单次扫描"); SA.Query("OPC");
+                    SA.Write("PEAK", "1"); SA.Query("OPC");
+                  //  PowerDeltright[parameters.PointIndex] = 2256030000;
+                    PowerDeltright[parameters.PointIndex] = double.Parse(SA.Query("读MARK频率", "1")); SA.Query("OPC");
+
+
+                    Data.MaxFreqOffset[parameters.PointIndex] = Math.Round(Math.Abs(PowerDeltleft[parameters.PointIndex] - PowerDeltright[parameters.PointIndex])/1000000,2).ToString();//MHz
+                    Data.ModulationIndex[parameters.PointIndex] = Math.Round(Math.Abs(PowerDeltleft[parameters.PointIndex] - PowerDeltright[parameters.PointIndex])/1000000 / (PowerPara.BitRate / 2.0),2).ToString();//(F0-F1)/(码率/2),F0、F1单位为MHz,码率单位为Mbps.
+                }
+
+                ModulationIndexPrint.Lower = PowerPara.ModulationIndexLower;
+                ModulationIndexPrint.Upper = PowerPara.ModulationIndexUpper;
+                ModulationIndexPrint.Test_name = parameters.Channel + "-FSK调制系数测试-" + parameters.CenterFreq.ToString() + "MHz";
+              //leftModulationIndexPrint.Test_name = parameters.Channel + "-fL调制系数测试-" + parameters.CenterFreq.ToString() + "MHz";
+              // rightModulationIndexPrint.Test_name = parameters.Channel + "-fH调制系数测试-" + parameters.CenterFreq.ToString() + "MHz";
+
+                MaxFreqOffsetPrint.Test_name = parameters.Channel + "-FSK最大频偏(MHz)-" + parameters.CenterFreq.ToString() + "MHz";
+             //   leftFreqOffsetPrint.Test_name = parameters.Channel + "-fL(KHz)-" + parameters.CenterFreq.ToString() + "MHz";
+             // rightFreqOffsetPrint.Test_name = parameters.Channel + "-fH(KHz)-" + parameters.CenterFreq.ToString() + "MHz";
+
+                
+
+                ModulationIndexPrint.TestVal = double.Parse(Data.ModulationIndex[parameters.PointIndex]);
+                //leftModulationIndexPrint.TestVal = double.Parse(Data.leftModulationIndex[parameters.PointIndex]);
+                //rightModulationIndexPrint.TestVal = double.Parse(Data.rightModulationIndex[parameters.PointIndex]);
+
+                MaxFreqOffsetPrint.TestVal = double.Parse(Data.MaxFreqOffset[parameters.PointIndex]);
+              //  leftFreqOffsetPrint.TestVal = double.Parse(Data.leftFreqOffset[parameters.PointIndex]);
+               // rightFreqOffsetPrint.TestVal = double.Parse(Data.rightFreqOffset[parameters.PointIndex]);
+
+                if ((ModulationIndexPrint.TestVal >= ModulationIndexPrint.Lower) &&( ModulationIndexPrint.TestVal <= ModulationIndexPrint.Upper))
+                {
+                    ModulationIndexPrint.Result = "是";
+                    MaxFreqOffsetPrint.Result = "是";                                    
+                }
+                else
+                {
+                    ModulationIndexPrint.Result = "否";                
+                    MaxFreqOffsetPrint.Result = "否";
+                   
+                }
+
+                tps.TestTableAddCell(MaxFreqOffsetPrint.Test_name, "/", "/", MaxFreqOffsetPrint.TestVal.ToString(), MaxFreqOffsetPrint.Result);
+             
+               
+                tps.TestTableAddCell(ModulationIndexPrint.Test_name, ModulationIndexPrint.Lower.ToString(), ModulationIndexPrint.Upper.ToString(), ModulationIndexPrint.TestVal.ToString(), ModulationIndexPrint.Result);
+              
+
+                if (parameters.Channel == "通道1")
+                {
+                   
+                    //tps.SetTestTableCellValue(point, 9, ModulationIndexPrint.Result,Data.ModulationIndex[point]);
+                    WriteExcelData(sheet, parameters.PointIndex, 1, ModulationIndexPrint.Test_name, ModulationIndexPrint.Lower.ToString(), ModulationIndexPrint.Upper.ToString(), ModulationIndexPrint.TestVal.ToString(), ModulationIndexPrint.Result);
+                   // WriteExcelData(sheet, parameters.PointIndex, 5, leftModulationIndexPrint.Test_name, leftModulationIndexPrint.Lower.ToString(), leftModulationIndexPrint.Upper.ToString(), leftModulationIndexPrint.TestVal.ToString(), leftModulationIndexPrint.Result);
+                   // WriteExcelData(sheet, parameters.PointIndex, 9, rightModulationIndexPrint.Test_name, rightModulationIndexPrint.Lower.ToString(), rightModulationIndexPrint.Upper.ToString(), rightModulationIndexPrint.TestVal.ToString(), rightModulationIndexPrint.Result);
+                    WriteExcelData(sheet, parameters.PointIndex, 3, MaxFreqOffsetPrint.Test_name, "/", "/", MaxFreqOffsetPrint.TestVal.ToString(), MaxFreqOffsetPrint.Result);
+                  //  WriteExcelData(sheet, parameters.PointIndex, 7, leftFreqOffsetPrint.Test_name, "/", "/", leftFreqOffsetPrint.TestVal.ToString(), leftFreqOffsetPrint.Result);
+                   // WriteExcelData(sheet, parameters.PointIndex, 11, rightFreqOffsetPrint.Test_name, "/", "/", rightFreqOffsetPrint.TestVal.ToString(), rightFreqOffsetPrint.Result);
+                    // tps.SetTestTableCellValue(point, 6, Data.MaxFreqOffset[point]);
+                }
+                else if (parameters.Channel == "通道2")
+                {
+                    
+                    WriteExcelData(sheet, parameters.PointIndex, 2, ModulationIndexPrint.Test_name, ModulationIndexPrint.Lower.ToString(), ModulationIndexPrint.Upper.ToString(), ModulationIndexPrint.TestVal.ToString(), ModulationIndexPrint.Result);
+                   // WriteExcelData(sheet, parameters.PointIndex, 6, leftModulationIndexPrint.Test_name, leftModulationIndexPrint.Lower.ToString(), leftModulationIndexPrint.Upper.ToString(), leftModulationIndexPrint.TestVal.ToString(), leftModulationIndexPrint.Result);
+                   // WriteExcelData(sheet, parameters.PointIndex, 10, rightModulationIndexPrint.Test_name, rightModulationIndexPrint.Lower.ToString(), rightModulationIndexPrint.Upper.ToString(), rightModulationIndexPrint.TestVal.ToString(), rightModulationIndexPrint.Result);
+                    WriteExcelData(sheet, parameters.PointIndex, 4, MaxFreqOffsetPrint.Test_name, "/", "/", MaxFreqOffsetPrint.TestVal.ToString(), MaxFreqOffsetPrint.Result);
+                   // WriteExcelData(sheet, parameters.PointIndex, 8, leftFreqOffsetPrint.Test_name, "/", "/", leftFreqOffsetPrint.TestVal.ToString(), leftFreqOffsetPrint.Result);
+                   // WriteExcelData(sheet, parameters.PointIndex, 11, rightFreqOffsetPrint.Test_name, "/", "/", rightFreqOffsetPrint.TestVal.ToString(), rightFreqOffsetPrint.Result);
+                    //tps.SetTestTableCellValue(point + 15, 9, ModulationIndexPrint.Result, Data.ModulationIndex[point]);
+                    //tps.SetTestTableCellValue(point + 15, 6, Data.MaxFreqOffset[point]);
+                }
+
+            }
+            SaveExcel(workbook);
+            ShowMessage(MsgType.Info, string.Format("第{0}个频点FSK调制指数及最大频偏指标测试结束", parameters.PointIndex));
+          
+            return true;
+        }
+
+        public void PsaPeakValue_Tracedata(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[] tracedatas = tracedata.Split(',');
+            double[] tracedata_double = new double[tracedatas.Length];
+            for (int i = 0; i < tracedatas.Length; 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 - 1);
+            }
+            Y_Maxvalue = Math.Round(Y_Maxvalue, 3);
+        }
+        public MatchModulaPara LoadModulationWorkBook()
+        {
+            MatchModulaPara pars = new MatchModulaPara();
+            string FileName = Path.Combine(Bundle.bundle.BundleDir, "config\\ModulationMode.xlsx");
+            if (!File.Exists(FileName))
+            {
+                ShowMessage(MsgType.Error, "找不到ModulationMode.xlsx");
+                return null;
+            }
+
+            Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
+            workbook.LoadFromFile(FileName);
+
+          
+            //获取第一个工作表sheet1
+            Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
+            int num = 0;
+            int blankRows = 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("功率变化(dB)"))
+                {
+                    List<ModulationMatchParameter> ModulationTable = ReadParameters(sheet, num);
+
+                    foreach (var item in ModulationTable)
+                    {
+                        if (pars.ModulaParameters.ContainsKey(item.CfgRelative))
+                        {
+                            ShowMessage(MsgType.Error, string.Format("调制对应表:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.CfgRelative));
+                            continue;
+                        }
+                        pars.ModulaParameters.Add(item.CfgRelative, item);
+                    } 
+                }
+            }
+            return pars;
+        }
+
+
+
+        List<ModulationMatchParameter> ReadParameters(Spire.Xls.Worksheet sheet, int rowIndex)
+        {
+            List<ModulationMatchParameter> ModulationTable = new List<ModulationMatchParameter>();
+            string col1 = sheet.Range[rowIndex , 1].Value2 != null ? sheet.Range[rowIndex , 1].Value2.ToString() : "";
+            string col2 = sheet.Range[rowIndex , 2].Value2 != null ? sheet.Range[rowIndex , 2].Value2.ToString() : "";
+            string col3 = sheet.Range[rowIndex , 3].Value2 != null ? sheet.Range[rowIndex , 3].Value2.ToString() : "";
+        
+            if (!(col1 == "功率变化(dB)" && col2 == "调制指数(mf)" && col3 == "最大频偏(KHz)"))
+            {
+                ShowMessage(MsgType.Error, "'调制对应表'行首标题位置和格式不正确");
+                return ModulationTable;
+            }
+
+            int num = rowIndex ;
+            //默认最多30行
+            while (num++ < rowIndex + 100)
+            {
+                col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
+                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() : "";          
+                if (string.IsNullOrEmpty(col1) || string.IsNullOrEmpty(col2) || string.IsNullOrEmpty(col3))
+                {
+                    break;
+                }
+                ModulationMatchParameter ObjModulation = new ModulationMatchParameter();
+                ObjModulation.CfgRelative = col1;
+                ObjModulation.CfgModulation = col2;
+                ObjModulation.CfgFreqOffset = col3;
+     
+                ModulationTable.Add(ObjModulation);
+            }
+            return ModulationTable;
+        }
+
+
+
+        /// <summary>
+        /// 一个调制指数的配置信息
+        /// </summary>
+        public class MatchModulaPara
+        {
+            public Dictionary<string, ModulationMatchParameter> ModulaParameters;
+            public MatchModulaPara()
+            {
+                ModulaParameters = new Dictionary<string, ModulationMatchParameter>();
+            }
+            public string GetModulaParameter(string name)
+            {
+                if (string.IsNullOrEmpty(name))
+                    return null;
+
+                if (this.ModulaParameters.ContainsKey(name) == false)
+                    return null;
+
+                string val1 = this.ModulaParameters[name].CfgModulation.Trim();
+                return val1;
+            }
+            public string GetFreqOffsetParameter(string name)
+            {
+                if (string.IsNullOrEmpty(name))
+                    return null;
+
+                if (this.ModulaParameters.ContainsKey(name) == false)
+                    return null;
+
+                string val2 = this.ModulaParameters[name].CfgFreqOffset.Trim();
+                return val2;
+            }
+        }
+        
+        /// <summary>
+        /// 调制指数3个对应项
+        /// </summary>
+        public class ModulationMatchParameter
+        {
+            
+            /// <summary>
+            /// 功率变化(dB)
+            /// </summary>
+            public string  CfgRelative{ get; set; }
+            /// <summary>
+            /// 调制指数(mf)
+            /// </summary>
+            public string CfgModulation { get; set; }
+            /// <summary>
+            /// 最大频偏(KHz)
+            /// </summary>
+            public string CfgFreqOffset { get; set; }
+
+          
+        }
+        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 LimitOffset { set; get; }
+            /// <summary>
+            /// 抖动补偿
+            /// </summary>
+            public double ShakeCompensate { set; get; }
+
+            /// <summary>
+            /// 调制系数下限
+            /// </summary>
+            public double ModulationIndexLower { get; set; }
+            /// <summary>
+            ///调制系数上限
+            /// </summary>
+            public double ModulationIndexUpper { get; set; }
+            /// <summary>
+            /// 码率
+            /// </summary>
+            public double BitRate { get; set; }
+        }
+        public class OutData
+        {
+
+            /// <summary>
+            ///调制系数
+            /// </summary>
+            public string[] ModulationIndex { set; get; }
+            /// <summary>
+            ///主频左侧调制系数
+            /// </summary>
+            public string[] leftModulationIndex { set; get; }
+            /// <summary>
+            ///主频右侧调制系数
+            /// </summary>
+            public string[] rightModulationIndex { set; get; }
+            /// <summary>
+            /// 最大频偏
+            /// </summary>
+            public string[] MaxFreqOffset { set; get; }
+            /// <summary>
+            /// FL频偏
+            /// </summary>
+            public string[] leftFreqOffset { set; get; }
+            /// <summary>
+            /// FH频偏
+            /// </summary>
+            public string[] rightFreqOffset { set; get; }
+
+
+        }
+        //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; }
+
+
+        //}
+    }
+}

+ 5 - 0
tps/TpsLabStudio/models/SpuriousSuppression.cs

@@ -53,6 +53,7 @@ namespace Tps_LQ_Transmitter.models
             PowerPara.LeftOffsetStart = parameters.Parameters.GetParameter<double>("主频左侧起始偏移量");
             PowerPara.RightOffset = parameters.Parameters.GetParameter<int>("主频右侧起始偏移量");
             PowerPara.RightOffsetStop = parameters.Parameters.GetParameter<double>("主频右侧终止偏移量");
+            PowerPara.SpecialFreq = 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)");
@@ -241,6 +242,10 @@ namespace Tps_LQ_Transmitter.models
             /// </summary>
             public double RightOffsetStop { set; get; }
             /// <summary>
+            /// 特殊频点
+            /// </summary>
+            public double SpecialFreq { set; get; }
+            /// <summary>
             ///设置频谱仪的SPAN
             /// </summary>
             public string SPAN { set; get; }

+ 1 - 1
tps/TpsLabStudio/models/VoltAndCurrent.cs

@@ -31,7 +31,7 @@ namespace Tps_LQ_Transmitter.models
 
           
             CommonVisaResource DCPower = new CommonVisaResource();
-            DCPower.Open(tps.DCPowerAddress);
+            DCPower.Open(tps.DCPowerAddress);//需要取消注释
            // TransmitterSerialPort SerialClient = new TransmitterSerialPort();
             OutData Data = new OutData();
 

BIN
tps/TpsLabStudio/obj/Debug/DesignTimeResolveAssemblyReferences.cache


+ 1 - 1
tps/TpsLabStudio/obj/Debug/TpsLabStudio.csproj.CoreCompileInputs.cache

@@ -1 +1 @@
-dbf52dfacf3d3351a5511be760dd24f3ef7ec242
+7347772e0cbb03b43b6057beef5ae153a1004e28

+ 1 - 1
tps/TpsLabStudio/obj/Debug/TpsLabStudio.csproj.FileListAbsolute.txt

@@ -88,7 +88,6 @@ F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\exe\apps\Tps_LQ_Transmitter\config\
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\exe\apps\Tps_LQ_Transmitter\config\串口控制.xlsx
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\exe\apps\Tps_LQ_Transmitter\Tps_LQ_Transmitter.dll
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\exe\apps\Tps_LQ_Transmitter\Tps_LQ_Transmitter.pdb
-F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\TpsLabStudio.csprojAssemblyReference.cache
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\Tps_LQ_Transmitter.FrmMain.resources
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\Tps_LQ_Transmitter.Properties.Resources.resources
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\Tps_LQ_Transmitter.views.FrmDevice.resources
@@ -98,3 +97,4 @@ F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\TpsLabSt
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\TpsLabStudio.csproj.CopyComplete
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\Tps_LQ_Transmitter.dll
 F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\Tps_LQ_Transmitter.pdb
+F:\Project\Launch\new(8.24)\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\TpsLabStudio.csprojAssemblyReference.cache

BIN
tps/TpsLabStudio/obj/Debug/TpsLabStudio.csprojAssemblyReference.cache


BIN
tps/TpsLabStudio/obj/Debug/Tps_LQ_Transmitter.dll


BIN
tps/TpsLabStudio/obj/Debug/Tps_LQ_Transmitter.pdb