diff --git a/.gitignore b/.gitignore
index 48a07ae..1bd507d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -259,3 +259,4 @@ paket-files/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
+.vscode/settings.json
diff --git a/.gitversion b/.gitversion
index 01e4ec1..ac325d1 100644
--- a/.gitversion
+++ b/.gitversion
@@ -3,7 +3,7 @@
# This is the version number that will be used. Prerelease numbers are calculated by
# counting git commits since the last change in this value.
-version = 0.7.4
+version = 0.7.5
# A version is determined to be a "beta" prerelease if it originates from the default branch
# The default branch is the first branch that matches the following regular expession.
diff --git a/OpenTap.Plugins.PNAX/Converters/Mixer Steps/MixerFrequencyTestStep.cs b/OpenTap.Plugins.PNAX/Converters/Mixer Steps/MixerFrequencyTestStep.cs
index 54135d5..d4f7cb8 100644
--- a/OpenTap.Plugins.PNAX/Converters/Mixer Steps/MixerFrequencyTestStep.cs
+++ b/OpenTap.Plugins.PNAX/Converters/Mixer Steps/MixerFrequencyTestStep.cs
@@ -6,6 +6,7 @@
// warranty, obligations or liability for any sample application files.
using OpenTap;
using System;
+using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
@@ -58,24 +59,9 @@ public MixerFrequencyTypeEnum InputMixerFrequencyType
set
{
_InputMixerFrequencyType = value;
- if (_InputMixerFrequencyType== MixerFrequencyTypeEnum.StartStop)
- {
- IsInputMixerFrequencyTypeStartStop = true;
- IsInputMixerFrequencyTypeCenterSpan = false;
- IsInputMixerFrequencyTypeFixed = false;
- }
- else if (_InputMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- IsInputMixerFrequencyTypeStartStop = false;
- IsInputMixerFrequencyTypeCenterSpan = true;
- IsInputMixerFrequencyTypeFixed = false;
- }
- else if (_InputMixerFrequencyType == MixerFrequencyTypeEnum.Fixed)
- {
- IsInputMixerFrequencyTypeStartStop = false;
- IsInputMixerFrequencyTypeCenterSpan = false;
- IsInputMixerFrequencyTypeFixed = true;
- }
+ IsInputMixerFrequencyTypeStartStop = _InputMixerFrequencyType == MixerFrequencyTypeEnum.StartStop;
+ IsInputMixerFrequencyTypeCenterSpan = _InputMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan;
+ IsInputMixerFrequencyTypeFixed = _InputMixerFrequencyType == MixerFrequencyTypeEnum.Fixed;
}
}
@@ -104,8 +90,13 @@ public MixerFrequencyTypeEnum InputMixerFrequencyType
[Unit("Hz", UseEngineeringPrefix: true)]
public double InputMixerFrequencyFixed { get; set; }
+ [Display("Fractional Multiplier Numerator", Groups: new[] { "Mixer Frequency", "Input" }, Order: 16)]
+ public int InputFractionalMultiplierNumerator { get; set; }
+ [Display("Fractional Multiplier Denominator", Groups: new[] { "Mixer Frequency", "Input" }, Order: 17)]
+ public int InputFractionalMultiplierDenominator { get; set; }
+
[Browsable(true)]
- [Display("Calc Input", Groups: new[] { "Mixer Frequency", "Input" }, Order: 16)]
+ [Display("Calc Input", Groups: new[] { "Mixer Frequency", "Input" }, Order: 18)]
public void CalcInput()
{
if (PNAX.IsConnected)
@@ -137,24 +128,9 @@ public MixerFrequencyTypeEnum LO1MixerFrequencyType
set
{
_LO1MixerFrequencyType = value;
- if (_LO1MixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- IsLO1MixerFrequencyTypeStartStop = true;
- IsLO1MixerFrequencyTypeCenterSpan = false;
- IsLO1MixerFrequencyTypeFixed = false;
- }
- else if (_LO1MixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- IsLO1MixerFrequencyTypeStartStop = false;
- IsLO1MixerFrequencyTypeCenterSpan = true;
- IsLO1MixerFrequencyTypeFixed = false;
- }
- else if (_LO1MixerFrequencyType == MixerFrequencyTypeEnum.Fixed)
- {
- IsLO1MixerFrequencyTypeStartStop = false;
- IsLO1MixerFrequencyTypeCenterSpan = false;
- IsLO1MixerFrequencyTypeFixed = true;
- }
+ IsLO1MixerFrequencyTypeStartStop = _LO1MixerFrequencyType == MixerFrequencyTypeEnum.StartStop;
+ IsLO1MixerFrequencyTypeCenterSpan = _LO1MixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan;
+ IsLO1MixerFrequencyTypeFixed = _LO1MixerFrequencyType == MixerFrequencyTypeEnum.Fixed;
}
}
@@ -186,8 +162,13 @@ public MixerFrequencyTypeEnum LO1MixerFrequencyType
[Display("Input > LO", Groups: new[] { "Mixer Frequency", "LO1" }, Order: 26)]
public bool InputGTLO1 { get; set; }
+ [Display("Fractional Multiplier Numerator", Groups: new[] { "Mixer Frequency", "LO1" }, Order: 27)]
+ public int LO1FractionalMultiplierNumerator { get; set; }
+ [Display("Fractional Multiplier Denominator", Groups: new[] { "Mixer Frequency", "LO1" }, Order: 28)]
+ public int LO1FractionalMultiplierDenominator { get; set; }
+
[Browsable(true)]
- [Display("Calc LO", Groups: new[] { "Mixer Frequency", "LO1" }, Order: 27)]
+ [Display("Calc LO", Groups: new[] { "Mixer Frequency", "LO1" }, Order: 29)]
public void CalcLO1()
{
if (PNAX.IsConnected)
@@ -220,24 +201,9 @@ public MixerFrequencyTypeEnum IFMixerFrequencyType
set
{
_IFMixerFrequencyType = value;
- if (_IFMixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- IsIFMixerFrequencyTypeStartStop = true;
- IsIFMixerFrequencyTypeCenterSpan = false;
- IsIFMixerFrequencyTypeFixed = false;
- }
- else if (_IFMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- IsIFMixerFrequencyTypeStartStop = false;
- IsIFMixerFrequencyTypeCenterSpan = true;
- IsIFMixerFrequencyTypeFixed = false;
- }
- else if (_IFMixerFrequencyType == MixerFrequencyTypeEnum.Fixed)
- {
- IsIFMixerFrequencyTypeStartStop = false;
- IsIFMixerFrequencyTypeCenterSpan = false;
- IsIFMixerFrequencyTypeFixed = true;
- }
+ IsIFMixerFrequencyTypeStartStop = _IFMixerFrequencyType == MixerFrequencyTypeEnum.StartStop;
+ IsIFMixerFrequencyTypeCenterSpan = _IFMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan;
+ IsIFMixerFrequencyTypeFixed = _IFMixerFrequencyType == MixerFrequencyTypeEnum.Fixed;
}
}
@@ -296,24 +262,9 @@ public MixerFrequencyTypeEnum LO2MixerFrequencyType
set
{
_LO2MixerFrequencyType = value;
- if (_LO2MixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- IsLO2MixerFrequencyTypeStartStop = true;
- IsLO2MixerFrequencyTypeCenterSpan = false;
- IsLO2MixerFrequencyTypeFixed = false;
- }
- else if (_LO2MixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- IsLO2MixerFrequencyTypeStartStop = false;
- IsLO2MixerFrequencyTypeCenterSpan = true;
- IsLO2MixerFrequencyTypeFixed = false;
- }
- else if (_LO2MixerFrequencyType == MixerFrequencyTypeEnum.Fixed)
- {
- IsLO2MixerFrequencyTypeStartStop = false;
- IsLO2MixerFrequencyTypeCenterSpan = false;
- IsLO2MixerFrequencyTypeFixed = true;
- }
+ IsLO2MixerFrequencyTypeStartStop = _LO2MixerFrequencyType == MixerFrequencyTypeEnum.StartStop;
+ IsLO2MixerFrequencyTypeCenterSpan = _LO2MixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan;
+ IsLO2MixerFrequencyTypeFixed = _LO2MixerFrequencyType == MixerFrequencyTypeEnum.Fixed;
}
}
@@ -351,9 +302,17 @@ public MixerFrequencyTypeEnum LO2MixerFrequencyType
[EnabledIf("DoubleStage", true, HideIfDisabled = true)]
public bool IF1GTLO2 { get; set; }
+
+ [Display("Fractional Multiplier Numerator", Groups: new[] { "Mixer Frequency", "LO2" }, Order: 47)]
+ [EnabledIf("DoubleStage", true, HideIfDisabled = true)]
+ public int LO2FractionalMultiplierNumerator { get; set; }
+ [Display("Fractional Multiplier Denominator", Groups: new[] { "Mixer Frequency", "LO2" }, Order: 48)]
+ [EnabledIf("DoubleStage", true, HideIfDisabled = true)]
+ public int LO2FractionalMultiplierDenominator { get; set; }
+
[Browsable(true)]
[EnabledIf("DoubleStage", true, HideIfDisabled = true)]
- [Display("Calc LO2", Groups: new[] { "Mixer Frequency", "LO2" }, Order: 47)]
+ [Display("Calc LO2", Groups: new[] { "Mixer Frequency", "LO2" }, Order: 49)]
public void CalcLO2()
{
if (PNAX.IsConnected)
@@ -385,24 +344,9 @@ public MixerFrequencyTypeEnum OutputMixerFrequencyType
set
{
_OutputMixerFrequencyType = value;
- if (_OutputMixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- IsOutputMixerFrequencyTypeStartStop = true;
- IsOutputMixerFrequencyTypeCenterSpan = false;
- IsOutputMixerFrequencyTypeFixed = false;
- }
- else if (_OutputMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- IsOutputMixerFrequencyTypeStartStop = false;
- IsOutputMixerFrequencyTypeCenterSpan = true;
- IsOutputMixerFrequencyTypeFixed = false;
- }
- else if (_OutputMixerFrequencyType == MixerFrequencyTypeEnum.Fixed)
- {
- IsOutputMixerFrequencyTypeStartStop = false;
- IsOutputMixerFrequencyTypeCenterSpan = false;
- IsOutputMixerFrequencyTypeFixed = true;
- }
+ IsOutputMixerFrequencyTypeStartStop = _OutputMixerFrequencyType == MixerFrequencyTypeEnum.StartStop;
+ IsOutputMixerFrequencyTypeCenterSpan = _OutputMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan;
+ IsOutputMixerFrequencyTypeFixed = _OutputMixerFrequencyType == MixerFrequencyTypeEnum.Fixed;
}
}
@@ -447,268 +391,142 @@ public void CalcOutput()
}
#endregion
-
-
-
#endregion
-
- private void CalcInputValues()
- {
- int DummyChannel = 234;
- try
- {
- PNAX.Open();
- Log.Info("Calculating Input values");
-
- // Create Dummy channel
- //PNAX.MixerDiscard(DummyChannel);
- int traceid = PNAX.GetNewTraceID(DummyChannel);
- // Define a dummy measurement so we can setup all channel parameters
- // we will add the traces during the StandardSingleTrace or StandardNewTrace test steps
- PNAX.ScpiCommand($"CALCulate{DummyChannel.ToString()}:CUST:DEFine \'CH{DummyChannel.ToString()}_DUMMY_SC21_1\',\'Gain Compression Converters\',\'SC21\'");
-
- // Set requirements
- PNAX.SetConverterStages(DummyChannel, ConverterStages);
- //SetInput();
- SetLO1(DummyChannel);
- SetIF(DummyChannel);
- SetLO2(DummyChannel);
- SetOutput(DummyChannel);
-
- PNAX.MixerCalc(DummyChannel, "INP");
- PNAX.WaitForOperationComplete();
-
- // Read Input and Update settings
- string inpMode = PNAX.GetMixerFrequencyInputMode(DummyChannel);
-
- if (inpMode.Equals("SWEPT"))
- {
- InputMixerFrequencyType = MixerFrequencyTypeEnum.StartStop;
- double ReadStart = PNAX.GetFrequencyLOStart(DummyChannel, 1);
- double ReadStop = PNAX.GetFrequencyLOStop(DummyChannel, 1);
- InputMixerFrequencyStart = ReadStart;
- InputMixerFrequencyStop = ReadStop;
- }
- else if (inpMode.Equals("FIXED"))
- {
- InputMixerFrequencyType = MixerFrequencyTypeEnum.Fixed;
- double ReadInputMixerFrequencyFixed = PNAX.GetFrequencyInputFixed(DummyChannel);
- InputMixerFrequencyFixed = ReadInputMixerFrequencyFixed;
- }
-
- // Delete Dummy Channel
- PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete \'CH{DummyChannel}_DUMMY_SC21_1\'");
-
- PNAX.Close();
- }
- catch (Exception)
- {
- if (PNAX.IsConnected)
- {
- PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete \'CH{DummyChannel}_DUMMY_SC21_1\'");
- PNAX.Close();
- }
- Log.Error("Cannot calcluate Input values!");
- return;
- }
-
- }
-
- private void CalcLO1Values()
+ ///
+ /// Defines the target for the mixer calculation.
+ ///
+ private enum CalculationTarget { Input, LO1, LO2, Output }
+
+ private void CalcInputValues() => CalculateValues(CalculationTarget.Input);
+ private void CalcLO1Values() => CalculateValues(CalculationTarget.LO1);
+ private void CalcLO2Values() => CalculateValues(CalculationTarget.LO2);
+ private void CalcOutputValues() => CalculateValues(CalculationTarget.Output);
+
+ ///
+ /// A centralized method to perform mixer calculations using a temporary PNA channel.
+ /// This avoids code duplication across the different Calc... methods.
+ ///
+ /// The specific part of the mixer to calculate.
+ private void CalculateValues(CalculationTarget target)
{
- int DummyChannel = 234;
- try
- {
- PNAX.Open();
- Log.Info("Calculating LO1 values");
+ const int DummyChannel = 234;
+ string dummyTraceName = $"CH{DummyChannel}_DUMMY_SC21_1";
+ string logName = target.ToString();
- // Create Dummy channel
- //PNAX.MixerDiscard(DummyChannel);
- int traceid = PNAX.GetNewTraceID(DummyChannel);
- // Define a dummy measurement so we can setup all channel parameters
- // we will add the traces during the StandardSingleTrace or StandardNewTrace test steps
- PNAX.ScpiCommand($"CALCulate{DummyChannel.ToString()}:CUST:DEFine \'CH{DummyChannel.ToString()}_DUMMY_SC21_1\',\'Gain Compression Converters\',\'SC21\'");
-
- // Set requirements
- PNAX.SetConverterStages(DummyChannel, ConverterStages);
- SetInput(DummyChannel);
- //SetLO1();
- SetIF(DummyChannel);
- SetLO2(DummyChannel);
- SetOutput(DummyChannel);
-
- //PNAX.MixerApply(DummyChannel);
- PNAX.MixerCalc(DummyChannel, "LO_1");
- PNAX.WaitForOperationComplete();
-
- // Read LO1 and Update settings
- String inpMode = PNAX.GetMixerFrequencyLOMode(DummyChannel, 1);
-
- if (inpMode.Equals("SWEPT"))
- {
- LO1MixerFrequencyType = MixerFrequencyTypeEnum.StartStop;
- double ReadStart = PNAX.GetFrequencyLOStart(DummyChannel, 1);
- double ReadStop = PNAX.GetFrequencyLOStop(DummyChannel, 1);
- LO1MixerFrequencyStart = ReadStart;
- LO1MixerFrequencyStop = ReadStop;
- }
- else if (inpMode.Equals("FIXED"))
- {
- LO1MixerFrequencyType = MixerFrequencyTypeEnum.Fixed;
- double ReadLO1MixerFrequencyFixed = PNAX.GetFrequencyLOFixed(DummyChannel, 1);
- LO1MixerFrequencyFixed = ReadLO1MixerFrequencyFixed;
- }
-
- bool ReadInputGTLO1 = PNAX.GetLOILTI(DummyChannel, 1);
- InputGTLO1 = ReadInputGTLO1;
-
- // Delete Dummy Channel
- PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete \'CH{DummyChannel}_DUMMY_SC21_1\'");
-
- PNAX.Close();
- }
- catch (Exception)
- {
- if (PNAX.IsConnected)
- {
- PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete \'CH{DummyChannel}_DUMMY_SC21_1\'");
- PNAX.Close();
- }
- Log.Error("Cannot calcluate LO1 values!");
- return;
- }
-
- }
-
- private void CalcLO2Values()
- {
- int DummyChannel = 234;
try
{
PNAX.Open();
- Log.Info("Calculating LO2 values");
+ Log.Info($"Calculating {logName} values");
- // Create Dummy channel
- //PNAX.MixerDiscard(DummyChannel);
+ // Create Dummy channel and measurement
int traceid = PNAX.GetNewTraceID(DummyChannel);
- // Define a dummy measurement so we can setup all channel parameters
- // we will add the traces during the StandardSingleTrace or StandardNewTrace test steps
- PNAX.ScpiCommand($"CALCulate{DummyChannel.ToString()}:CUST:DEFine \'CH{DummyChannel.ToString()}_DUMMY_SC21_1\',\'Gain Compression Converters\',\'SC21\'");
+ PNAX.ScpiCommand($"CALCulate{DummyChannel}:CUST:DEFine '{dummyTraceName}','Gain Compression Converters','SC21'");
- // Set requirements
+ // Set all known parameters except for the one being calculated
PNAX.SetConverterStages(DummyChannel, ConverterStages);
- SetInput(DummyChannel);
- SetLO1(DummyChannel);
+ PNAX.SetFrequencyOutputSideband(DummyChannel, OutputSidebandType);
+ SetMultiplier(DummyChannel);
SetIF(DummyChannel);
- //SetLO2(DummyChannel);
- SetOutput(DummyChannel);
- PNAX.MixerCalc(DummyChannel, "LO_2");
- PNAX.WaitForOperationComplete();
-
- // Read LO1 and Update settings
- string inpMode = PNAX.GetMixerFrequencyLOMode(DummyChannel, 2);
-
- if (inpMode.Equals("SWEPT"))
- {
- LO2MixerFrequencyType = MixerFrequencyTypeEnum.StartStop;
- double ReadStart = PNAX.GetFrequencyLOStart(DummyChannel, 2);
- double ReadStop = PNAX.GetFrequencyLOStop(DummyChannel, 2);
- LO2MixerFrequencyStart = ReadStart;
- LO2MixerFrequencyStop = ReadStop;
+ if (target != CalculationTarget.Input) SetInput(DummyChannel);
+ if (target != CalculationTarget.LO1) SetLO1(DummyChannel);
+ if (target != CalculationTarget.LO2) SetLO2(DummyChannel);
+ if (target != CalculationTarget.Output) SetOutput(DummyChannel);
+
+
+ // Execute the calculation and read back the results
+ switch (target)
+ {
+ case CalculationTarget.Input:
+ PNAX.MixerCalc(DummyChannel, "INP");
+ PNAX.WaitForOperationComplete();
+ string inpMode = PNAX.GetMixerFrequencyInputMode(DummyChannel);
+ if (inpMode.Equals("SWEPT"))
+ {
+ InputMixerFrequencyType = MixerFrequencyTypeEnum.StartStop;
+ InputMixerFrequencyStart = PNAX.GetFrequencyInputStart(DummyChannel);
+ InputMixerFrequencyStop = PNAX.GetFrequencyInputStop(DummyChannel);
+ }
+ else if (inpMode.Equals("FIXED"))
+ {
+ InputMixerFrequencyType = MixerFrequencyTypeEnum.Fixed;
+ InputMixerFrequencyFixed = PNAX.GetFrequencyInputFixed(DummyChannel);
+ }
+ break;
+ case CalculationTarget.LO1:
+ PNAX.MixerCalc(DummyChannel, "LO_1");
+ PNAX.WaitForOperationComplete();
+ string lo1Mode = PNAX.GetMixerFrequencyLOMode(DummyChannel, 1);
+ if (lo1Mode.Equals("SWEPT"))
+ {
+ LO1MixerFrequencyType = MixerFrequencyTypeEnum.StartStop;
+ LO1MixerFrequencyStart = PNAX.GetFrequencyLOStart(DummyChannel, 1);
+ LO1MixerFrequencyStop = PNAX.GetFrequencyLOStop(DummyChannel, 1);
+ }
+ else if (lo1Mode.Equals("FIXED"))
+ {
+ LO1MixerFrequencyType = MixerFrequencyTypeEnum.Fixed;
+ LO1MixerFrequencyFixed = PNAX.GetFrequencyLOFixed(DummyChannel, 1);
+ }
+ InputGTLO1 = PNAX.GetLOILTI(DummyChannel, 1);
+ break;
+ case CalculationTarget.LO2:
+ PNAX.MixerCalc(DummyChannel, "LO_2");
+ PNAX.WaitForOperationComplete();
+ string lo2Mode = PNAX.GetMixerFrequencyLOMode(DummyChannel, 2);
+ if (lo2Mode.Equals("SWEPT"))
+ {
+ LO2MixerFrequencyType = MixerFrequencyTypeEnum.StartStop;
+ LO2MixerFrequencyStart = PNAX.GetFrequencyLOStart(DummyChannel, 2);
+ LO2MixerFrequencyStop = PNAX.GetFrequencyLOStop(DummyChannel, 2);
+ }
+ else if (lo2Mode.Equals("FIXED"))
+ {
+ LO2MixerFrequencyType = MixerFrequencyTypeEnum.Fixed;
+ LO2MixerFrequencyFixed = PNAX.GetFrequencyLOFixed(DummyChannel, 2);
+ }
+ IF1GTLO2 = PNAX.GetLOILTI(DummyChannel, 2);
+ break;
+ case CalculationTarget.Output:
+ PNAX.MixerCalc(DummyChannel, "OUTP");
+ PNAX.WaitForOperationComplete();
+ string outMode = PNAX.GetMixerFrequencyOutputMode(DummyChannel);
+ if (outMode.Equals("SWEPT"))
+ {
+ OutputMixerFrequencyType = MixerFrequencyTypeEnum.StartStop;
+ OutputMixerFrequencyStart = PNAX.GetFrequencyOutputStart(DummyChannel);
+ OutputMixerFrequencyStop = PNAX.GetFrequencyOutputStop(DummyChannel);
+ }
+ else if (outMode.Equals("FIXED"))
+ {
+ OutputMixerFrequencyType = MixerFrequencyTypeEnum.Fixed;
+ OutputMixerFrequencyFixed = PNAX.GetFrequencyOutputFixed(DummyChannel);
+ }
+ OutputSidebandType = PNAX.GetFrequencyOutputSideband(DummyChannel);
+ break;
}
- else if (inpMode.Equals("FIXED"))
- {
- LO2MixerFrequencyType = MixerFrequencyTypeEnum.Fixed;
- double ReadLO2MixerFrequencyFixed = PNAX.GetFrequencyLOFixed(DummyChannel, 2);
- LO2MixerFrequencyFixed = ReadLO2MixerFrequencyFixed;
- }
-
- bool ReadInputGTLO2 = PNAX.GetLOILTI(DummyChannel, 2);
- IF1GTLO2 = ReadInputGTLO2;
-
- // Delete Dummy Channel
- PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete \'CH{DummyChannel}_DUMMY_SC21_1\'");
-
- PNAX.Close();
}
catch (Exception)
{
- if (PNAX.IsConnected)
- {
- PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete \'CH{DummyChannel}_DUMMY_SC21_1\'");
- PNAX.Close();
- }
- Log.Error("Cannot calcluate LO2 values!");
- return;
- }
-
- }
-
- private void CalcOutputValues()
- {
- int DummyChannel = 234;
- try
- {
- PNAX.Open();
- Log.Info("Calculating Input values");
-
- // Create Dummy channel
- //PNAX.MixerDiscard(DummyChannel);
- int traceid = PNAX.GetNewTraceID(DummyChannel);
- // Define a dummy measurement so we can setup all channel parameters
- // we will add the traces during the StandardSingleTrace or StandardNewTrace test steps
- PNAX.ScpiCommand($"CALCulate{DummyChannel.ToString()}:CUST:DEFine \'CH{DummyChannel.ToString()}_DUMMY_SC21_1\',\'Gain Compression Converters\',\'SC21\'");
-
- // Set requirements
- PNAX.SetConverterStages(DummyChannel, ConverterStages);
- SetInput(DummyChannel);
- SetLO1(DummyChannel);
- SetIF(DummyChannel);
- SetLO2(DummyChannel);
- //SetOutput(DummyChannel);
-
- PNAX.MixerCalc(DummyChannel, "OUTP");
- PNAX.WaitForOperationComplete();
-
- // Read output and Update settings
- String inpMode = PNAX.GetMixerFrequencyOutputMode(DummyChannel);
-
- if (inpMode.Equals("SWEPT"))
- {
- double ReadStart = PNAX.GetFrequencyOutputStart(DummyChannel);
- double ReadStop = PNAX.GetFrequencyOutputStop(DummyChannel);
- OutputMixerFrequencyType = MixerFrequencyTypeEnum.StartStop;
- OutputMixerFrequencyStart = ReadStart;
- OutputMixerFrequencyStop = ReadStop;
- }
- else if (inpMode.Equals("FIXED"))
- {
- OutputMixerFrequencyType = MixerFrequencyTypeEnum.Fixed;
- double ReadOutputMixerFrequencyFixed = PNAX.GetFrequencyOutputFixed(DummyChannel);
- OutputMixerFrequencyFixed = ReadOutputMixerFrequencyFixed;
- }
-
- SidebandTypeEnum ReadOutputSidebandType = PNAX.GetFrequencyOutputSideband(DummyChannel);
- OutputSidebandType = ReadOutputSidebandType;
-
- // Delete Dummy Channel
- PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete \'CH{DummyChannel}_DUMMY_SC21_1\'");
-
- PNAX.Close();
+ Log.Error($"Cannot calculate {logName} values!");
}
- catch (Exception)
+ finally
{
if (PNAX.IsConnected)
{
- PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete \'CH{DummyChannel}_DUMMY_SC21_1\'");
+ try
+ {
+ // Cleanup dummy channel
+ PNAX.ScpiCommand($"CALCulate{DummyChannel}:PARameter:DELete '{dummyTraceName}'");
+ }
+ catch (Exception ex)
+ {
+ Log.Warning($"Failed to delete dummy channel during cleanup: {ex.Message}");
+ }
PNAX.Close();
}
- Log.Error("Cannot calcluate Input values!");
- return;
}
-
}
public MixerFrequencyTestStep()
@@ -720,7 +538,8 @@ public MixerFrequencyTestStep()
private void UpdateDefaultValues()
{
var defaultValues = PNAX.GetMixerFrequencyDefaultValues();
- if (defaultValues == null)
+ var defaultSettings = PNAX.GetMixerSetupDefaultValues();
+ if (defaultValues == null || defaultSettings == null)
return;
InputMixerFrequencyType = defaultValues.InputMixerFrequencyType;
@@ -729,6 +548,8 @@ private void UpdateDefaultValues()
InputMixerFrequencyCenter = defaultValues.InputMixerFrequencyCenter;
InputMixerFrequencySpan = defaultValues.InputMixerFrequencySpan;
InputMixerFrequencyFixed = defaultValues.InputMixerFrequencyFixed;
+ InputFractionalMultiplierNumerator = defaultSettings.InputFractionalMultiplierNumerator;
+ InputFractionalMultiplierDenominator = defaultSettings.InputFractionalMultiplierDenominator;
LO1MixerFrequencyType = defaultValues.LO1MixerFrequencyType;
LO1MixerFrequencyStart = defaultValues.LO1MixerFrequencyStart;
@@ -737,6 +558,8 @@ private void UpdateDefaultValues()
LO1MixerFrequencySpan = defaultValues.LO1MixerFrequencySpan;
LO1MixerFrequencyFixed = defaultValues.LO1MixerFrequencyFixed;
InputGTLO1 = defaultValues.InputGTLO1;
+ LO1FractionalMultiplierNumerator = defaultSettings.LO1FractionalMultiplierNumerator;
+ LO1FractionalMultiplierDenominator = defaultSettings.LO1FractionalMultiplierDenominator;
IFSidebandType = defaultValues.IFSidebandType;
IFMixerFrequencyType = defaultValues.IFMixerFrequencyType;
@@ -753,6 +576,8 @@ private void UpdateDefaultValues()
LO2MixerFrequencySpan = defaultValues.LO2MixerFrequencySpan;
LO2MixerFrequencyFixed = defaultValues.LO2MixerFrequencyFixed;
IF1GTLO2 = defaultValues.IF1GTLO2;
+ LO2FractionalMultiplierNumerator = defaultSettings.LO2FractionalMultiplierNumerator;
+ LO2FractionalMultiplierDenominator = defaultSettings.LO2FractionalMultiplierDenominator;
OutputSidebandType = defaultValues.OutputSidebandType;
OutputMixerFrequencyType = defaultValues.OutputMixerFrequencyType;
@@ -772,10 +597,9 @@ public override void Run()
// Start from scratch
PNAX.MixerDiscard(Channel);
-
PNAX.SetConverterStages(Channel, ConverterStages);
-
SetInput(Channel);
+ SetMultiplier(Channel);
SetLO1(Channel);
SetIF(Channel);
SetLO2(Channel);
@@ -783,55 +607,45 @@ public override void Run()
// Apply changes to instrument
PNAX.MixerCalc(Channel);
- PNAX.MixerApply(Channel);
+ ValidateAllSettings();
+ UpgradeVerdict(Verdict.Pass);
+ }
+
+ private void ValidateAllSettings()
+ {
// Now read back and validate the values were not changed by the Calculate command
#region Input
- if (InputMixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.ValidateMixerFrequencyInputMode(Channel, "SWEPT");
- PNAX.ValidateFrequencyInputStart(Channel, InputMixerFrequencyStart);
- PNAX.ValidateFrequencyInputStop(Channel, InputMixerFrequencyStop);
- }
- else if (InputMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- // Calculate Start/Stop from Center/Span
- double start = InputMixerFrequencyCenter - (InputMixerFrequencySpan / 2);
- double stop = InputMixerFrequencyCenter + (InputMixerFrequencySpan / 2);
-
- PNAX.ValidateMixerFrequencyInputMode(Channel, "SWEPT");
- PNAX.ValidateFrequencyInputStart(Channel, start);
- PNAX.ValidateFrequencyInputStop(Channel, stop);
- }
- else
- {
- // Fixed
- PNAX.ValidateMixerFrequencyInputMode(Channel, "FIXED");
- PNAX.ValidateFrequencyInputFixed(Channel, InputMixerFrequencyFixed);
+ var (start, stop) = CalculateStartStop(InputMixerFrequencyStart, InputMixerFrequencyStop, InputMixerFrequencyCenter, InputMixerFrequencyCenter, InputMixerFrequencyType);
+ switch(InputMixerFrequencyType)
+ {
+ case MixerFrequencyTypeEnum.StartStop:
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.ValidateMixerFrequencyInputMode(Channel, "SWEPT");
+ PNAX.ValidateFrequencyInputStart(Channel, start);
+ PNAX.ValidateFrequencyInputStop(Channel, stop);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ PNAX.ValidateMixerFrequencyInputMode(Channel, "FIXED");
+ PNAX.ValidateFrequencyInputFixed(Channel, InputMixerFrequencyFixed);
+ break;
}
#endregion
#region LO1
- if (LO1MixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
+ (start, stop) = CalculateStartStop(LO1MixerFrequencyStart, LO1MixerFrequencyStop, LO1MixerFrequencyCenter, LO1MixerFrequencyCenter, LO1MixerFrequencyType);
+ switch(LO1MixerFrequencyType)
{
- PNAX.ValidateMixerFrequencyLOMode(Channel, 1, "SWEPT");
- PNAX.ValidateFrequencyLOStart(Channel, 1, LO1MixerFrequencyStart);
- PNAX.ValidateFrequencyLOStop(Channel, 1, LO1MixerFrequencyStop);
- }
- else if (LO1MixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- // Calculate Start/Stop from Center/Span
- double start = LO1MixerFrequencyCenter - (LO1MixerFrequencySpan / 2);
- double stop = LO1MixerFrequencyCenter + (LO1MixerFrequencySpan / 2);
- PNAX.ValidateMixerFrequencyLOMode(Channel, 1, "SWEPT");
- PNAX.ValidateFrequencyLOStart(Channel, 1, start);
- PNAX.ValidateFrequencyLOStop(Channel, 1, stop);
- }
- else
- {
- // Fixed
- PNAX.ValidateMixerFrequencyLOMode(Channel, 1, "FIXED");
- PNAX.ValidateFrequencyLOFixed(Channel, 1, LO1MixerFrequencyFixed);
+ case MixerFrequencyTypeEnum.StartStop:
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.ValidateMixerFrequencyLOMode(Channel, 1, "SWEPT");
+ PNAX.ValidateFrequencyLOStart(Channel, 1, start);
+ PNAX.ValidateFrequencyLOStop(Channel, 1, stop);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ PNAX.ValidateMixerFrequencyLOMode(Channel, 1, "FIXED");
+ PNAX.ValidateFrequencyLOFixed(Channel, 1, LO1MixerFrequencyFixed);
+ break;
}
PNAX.ValidateLOILTI(Channel, 1, InputGTLO1);
#endregion
@@ -839,24 +653,16 @@ public override void Run()
#region IF
if (ConverterStages == ConverterStagesEnum._2)
{
- if (IFMixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.ValidateFrequencyIFStart(Channel, IFMixerFrequencyStart);
- PNAX.ValidateFrequencyIFStop(Channel, IFMixerFrequencyStop);
- }
- else if (IFMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
+ (start, stop) = CalculateStartStop(IFMixerFrequencyStart, IFMixerFrequencyStop, IFMixerFrequencyCenter, IFMixerFrequencyCenter, IFMixerFrequencyType);
+ switch(IFMixerFrequencyType)
{
- // Calculate Start/Stop from Center/Span
- double start = IFMixerFrequencyCenter - (IFMixerFrequencySpan / 2);
- double stop = IFMixerFrequencyCenter + (IFMixerFrequencySpan / 2);
- PNAX.ValidateFrequencyIFStart(Channel, start);
- PNAX.ValidateFrequencyIFStop(Channel, stop);
- }
- else
- {
- // Fixed
- // TODO find command for IF Fixed
- // PNAX.SetFrequencyIFFixed(Channel, IFMixerFrequencyFixed);
+ case MixerFrequencyTypeEnum.StartStop:
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.ValidateFrequencyIFStart(Channel, start);
+ PNAX.ValidateFrequencyIFStop(Channel, stop);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ break;
}
PNAX.ValidateFrequencyIFSideband(Channel, IFSidebandType);
}
@@ -865,247 +671,222 @@ public override void Run()
#region LO2
if (ConverterStages == ConverterStagesEnum._2)
{
- if (LO2MixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.ValidateMixerFrequencyLOMode(Channel, 1, "SWEPT");
- PNAX.ValidateFrequencyLOStart(Channel, 2, LO2MixerFrequencyStart);
- PNAX.ValidateFrequencyLOStop(Channel, 2, LO2MixerFrequencyStop);
- }
- else if (LO2MixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- // Calculate Start/Stop from Center/Span
- double start = LO2MixerFrequencyCenter - (LO2MixerFrequencySpan / 2);
- double stop = LO2MixerFrequencyCenter + (LO2MixerFrequencySpan / 2);
- PNAX.ValidateMixerFrequencyLOMode(Channel, 1, "SWEPT");
- PNAX.ValidateFrequencyLOStart(Channel, 2, start);
- PNAX.ValidateFrequencyLOStop(Channel, 2, stop);
- }
- else
+ (start, stop) = CalculateStartStop(LO2MixerFrequencyStart, LO2MixerFrequencyStop, LO2MixerFrequencyCenter, LO2MixerFrequencyCenter, LO2MixerFrequencyType);
+ switch(LO2MixerFrequencyType)
{
- // Fixed
- PNAX.ValidateMixerFrequencyLOMode(Channel, 1, "FIXED");
- PNAX.ValidateFrequencyLOFixed(Channel, 2, LO2MixerFrequencyFixed);
+ case MixerFrequencyTypeEnum.StartStop:
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.ValidateMixerFrequencyLOMode(Channel, 2, "SWEPT");
+ PNAX.ValidateFrequencyLOStart(Channel, 2, start);
+ PNAX.ValidateFrequencyLOStop(Channel, 2, stop);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ PNAX.ValidateMixerFrequencyLOMode(Channel, 2, "FIXED");
+ PNAX.ValidateFrequencyLOFixed(Channel, 2, LO2MixerFrequencyFixed);
+ break;
}
PNAX.ValidateLOILTI(Channel, 2, IF1GTLO2);
}
#endregion
#region Output
- if (OutputMixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.ValidateFrequencyOutputStart(Channel, OutputMixerFrequencyStart);
- PNAX.ValidateFrequencyOutputStop(Channel, OutputMixerFrequencyStop);
- }
- else if (OutputMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- // Calculate Start/Stop from Center/Span
- double start = OutputMixerFrequencyCenter - (OutputMixerFrequencySpan / 2);
- double stop = OutputMixerFrequencyCenter + (OutputMixerFrequencySpan / 2);
- PNAX.ValidateFrequencyOutputStart(Channel, start);
- PNAX.ValidateFrequencyOutputStop(Channel, stop);
- }
- else
- {
- // Fixed
- PNAX.ValidateFrequencyOutputFixed(Channel, OutputMixerFrequencyFixed);
+ (start, stop) = CalculateStartStop(OutputMixerFrequencyStart, OutputMixerFrequencyStop, OutputMixerFrequencyCenter, OutputMixerFrequencyCenter, OutputMixerFrequencyType);
+ switch(OutputMixerFrequencyType)
+ {
+ case MixerFrequencyTypeEnum.StartStop:
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.ValidateFrequencyOutputStart(Channel, start);
+ PNAX.ValidateFrequencyOutputStop(Channel, stop);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ PNAX.ValidateFrequencyOutputFixed(Channel, OutputMixerFrequencyFixed);
+ break;
}
PNAX.ValidateFrequencyOutputSideband(Channel, OutputSidebandType);
#endregion
-
- UpgradeVerdict(Verdict.Pass);
}
- private void SetInput(int Channel)
+ private void SetMultiplier(int Channel)
{
- #region Input
- if (InputMixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.SetMixerFrequencyInputMode(Channel, MixerFrequencyTypeEnum.StartStop);
- PNAX.SetFrequencyInputStart(Channel, InputMixerFrequencyStart);
- PNAX.SetFrequencyInputStop(Channel, InputMixerFrequencyStop);
-
- retVal.Add(("Mixer Frequency Input Mode", MixerFrequencyTypeEnum.StartStop));
- retVal.Add(("Mixer Frequency Input Start", InputMixerFrequencyStart));
- retVal.Add(("Mixer Frequency Input Stop", InputMixerFrequencyStop));
- }
- else if (InputMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
+ PNAX.SetInputFractionalMultiplierNumerator(Channel, InputFractionalMultiplierNumerator);
+ PNAX.SetInputFractionalMultiplierDenominator(Channel, InputFractionalMultiplierDenominator);
+ PNAX.SetLOFractionalMultiplierNumerator(Channel, 1, LO1FractionalMultiplierNumerator);
+ PNAX.SetLOFractionalMultiplierDenominator(Channel, 1, LO1FractionalMultiplierDenominator);
+ retVal.Add(("Fractional Multiplier Numerator", InputFractionalMultiplierNumerator));
+ retVal.Add(("Fractional Multiplier Denominator", InputFractionalMultiplierDenominator));
+ retVal.Add(("LO1 Fractional Multiplier Numerator", LO1FractionalMultiplierNumerator));
+ retVal.Add(("LO1 Fractional Multiplier Denominator", LO1FractionalMultiplierDenominator));
+ if (ConverterStages == ConverterStagesEnum._2)
{
- // Calculate Start/Stop from Center/Span
- double start = InputMixerFrequencyCenter - (InputMixerFrequencySpan / 2);
- double stop = InputMixerFrequencyCenter + (InputMixerFrequencySpan / 2);
- PNAX.SetMixerFrequencyInputMode(Channel, MixerFrequencyTypeEnum.CenterSpan);
- PNAX.SetFrequencyInputStart(Channel, start);
- PNAX.SetFrequencyInputStop(Channel, stop);
-
- retVal.Add(("Mixer Frequency Input Mode", MixerFrequencyTypeEnum.CenterSpan));
- retVal.Add(("Mixer Frequency Input Center", InputMixerFrequencyCenter));
- retVal.Add(("Mixer Frequency Input Span", InputMixerFrequencySpan));
+ PNAX.SetLOFractionalMultiplierNumerator(Channel, 2, LO2FractionalMultiplierNumerator);
+ PNAX.SetLOFractionalMultiplierDenominator(Channel, 2, LO2FractionalMultiplierDenominator);
+ retVal.Add(("LO1 Fractional Multiplier Numerator", LO2FractionalMultiplierNumerator));
+ retVal.Add(("LO1 Fractional Multiplier Denominator", LO2FractionalMultiplierDenominator));
}
+
+ }
+
+ private (double Start, double Stop) CalculateStartStop(double inputStart, double inputStop, double inputCenter, double inputSpan, MixerFrequencyTypeEnum type)
+ {
+ if (type == MixerFrequencyTypeEnum.StartStop)
+ return (inputStart, inputStop);
else
- {
- // Fixed
- PNAX.SetMixerFrequencyInputMode(Channel, MixerFrequencyTypeEnum.Fixed);
- PNAX.SetFrequencyInputFixed(Channel, InputMixerFrequencyFixed);
+ return (inputCenter - (inputSpan / 2.0), inputCenter + (inputSpan / 2.0));
+ }
- retVal.Add(("Mixer Frequency Input Mode", MixerFrequencyTypeEnum.Fixed));
- retVal.Add(("Mixer Frequency Input Fixed", InputMixerFrequencyFixed));
- }
- #endregion
+ private void LogStartStop(string prefix, double start, double stop)
+ {
+ retVal.Add(($"{prefix} Mode", MixerFrequencyTypeEnum.StartStop));
+ retVal.Add(($"{prefix} Start", start));
+ retVal.Add(($"{prefix} Stop", stop));
}
- private void SetLO1(int Channel)
+ private void LogCenterSpan(string prefix, double center, double span)
{
- #region LO1
- if (LO1MixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.StartStop);
- PNAX.SetFrequencyLOStart(Channel, 1, LO1MixerFrequencyStart);
- PNAX.SetFrequencyLOStop(Channel, 1, LO1MixerFrequencyStop);
+ retVal.Add(($"{prefix} Mode", MixerFrequencyTypeEnum.CenterSpan));
+ retVal.Add(($"{prefix} Center", center));
+ retVal.Add(($"{prefix} Span", span));
+ }
- retVal.Add(("Mixer Frequency LO1 Mode", MixerFrequencyTypeEnum.StartStop));
- retVal.Add(("Mixer Frequency LO1 Start", LO1MixerFrequencyStart));
- retVal.Add(("Mixer Frequency LO1 Stop", LO1MixerFrequencyStop));
- }
- else if (LO1MixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- // Calculate Start/Stop from Center/Span
- double start = LO1MixerFrequencyCenter - (LO1MixerFrequencySpan / 2);
- double stop = LO1MixerFrequencyCenter + (LO1MixerFrequencySpan / 2);
- PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.CenterSpan);
- PNAX.SetFrequencyLOStart(Channel, 1, start);
- PNAX.SetFrequencyLOStop(Channel, 1, stop);
-
- retVal.Add(("Mixer Frequency LO1 Mode", MixerFrequencyTypeEnum.CenterSpan));
- retVal.Add(("Mixer Frequency LO1 Center", LO1MixerFrequencyCenter));
- retVal.Add(("Mixer Frequency LO1 Span", LO1MixerFrequencySpan));
+ private void LogFixed(string prefix, double @fixed)
+ {
+ retVal.Add(($"{prefix} Mode", MixerFrequencyTypeEnum.Fixed));
+ retVal.Add(($"{prefix} Fixed", @fixed));
+ }
+
+ private void SetInput(int Channel)
+ {
+ var (start, stop) = CalculateStartStop(InputMixerFrequencyStart, InputMixerFrequencyStop, InputMixerFrequencyCenter, InputMixerFrequencySpan, InputMixerFrequencyType);
+ switch (InputMixerFrequencyType)
+ {
+ case MixerFrequencyTypeEnum.StartStop:
+ PNAX.SetMixerFrequencyInputMode(Channel, MixerFrequencyTypeEnum.StartStop);
+ PNAX.SetFrequencyInputStart(Channel, start);
+ PNAX.SetFrequencyInputStop(Channel, stop);
+ LogStartStop("Mixer Frequency Input", start, stop);
+ break;
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.SetMixerFrequencyInputMode(Channel, MixerFrequencyTypeEnum.CenterSpan);
+ PNAX.SetFrequencyInputStart(Channel, start);
+ PNAX.SetFrequencyInputStop(Channel, stop);
+ LogCenterSpan("Mixer Frequency Input", InputMixerFrequencyCenter, InputMixerFrequencySpan);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ PNAX.SetMixerFrequencyInputMode(Channel, MixerFrequencyTypeEnum.Fixed);
+ PNAX.SetFrequencyInputFixed(Channel, InputMixerFrequencyFixed);
+ LogFixed("Mixer Frequency Input", InputMixerFrequencyFixed);
+ break;
}
- else
- {
- // Fixed
- PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.Fixed);
- PNAX.SetFrequencyLOFixed(Channel, 1, LO1MixerFrequencyFixed);
+ }
- retVal.Add(("Mixer Frequency LO1 Mode", MixerFrequencyTypeEnum.Fixed));
- retVal.Add(("Mixer Frequency LO1 Fixed", LO1MixerFrequencyFixed));
+ private void SetLO1(int Channel)
+ {
+ var (start, stop) = CalculateStartStop(LO1MixerFrequencyStart, LO1MixerFrequencyStop, LO1MixerFrequencyCenter, LO1MixerFrequencySpan, LO1MixerFrequencyType);
+ switch(LO1MixerFrequencyType)
+ {
+ case MixerFrequencyTypeEnum.StartStop:
+ PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.StartStop);
+ PNAX.SetFrequencyLOStart(Channel, 1, start);
+ PNAX.SetFrequencyLOStop(Channel, 1, stop);
+ LogStartStop("Mixer Frequency LO1", start, stop);
+ break;
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.CenterSpan);
+ PNAX.SetFrequencyLOStart(Channel, 1, start);
+ PNAX.SetFrequencyLOStop(Channel, 1, stop);
+ LogCenterSpan("Mixer Frequency LO1", LO1MixerFrequencyCenter, LO1MixerFrequencySpan);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.Fixed);
+ PNAX.SetFrequencyLOFixed(Channel, 1, LO1MixerFrequencyFixed);
+ LogFixed("Mixer Frequency LO1", LO1MixerFrequencyFixed);
+ break;
}
PNAX.SetLOILTI(Channel, 1, InputGTLO1);
retVal.Add(("Input Greater Than LO", InputGTLO1));
- #endregion
}
private void SetIF(int Channel)
{
- #region IF
if (ConverterStages == ConverterStagesEnum._2)
{
- if (IFMixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.SetFrequencyIFStart(Channel, IFMixerFrequencyStart);
- PNAX.SetFrequencyIFStop(Channel, IFMixerFrequencyStop);
-
- retVal.Add(("Mixer Frequency IF Start", IFMixerFrequencyStart));
- retVal.Add(("Mixer Frequency IF Stop", IFMixerFrequencyStop));
- }
- else if (IFMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- // Calculate Start/Stop from Center/Span
- double start = IFMixerFrequencyCenter - (IFMixerFrequencySpan / 2);
- double stop = IFMixerFrequencyCenter + (IFMixerFrequencySpan / 2);
- PNAX.SetFrequencyIFStart(Channel, start);
- PNAX.SetFrequencyIFStop(Channel, stop);
-
- retVal.Add(("Mixer Frequency IF Center", IFMixerFrequencyCenter));
- retVal.Add(("Mixer Frequency IF Span", IFMixerFrequencySpan));
- }
- else
- {
- // Fixed
- // TODO find command for IF Fixed
- // PNAX.SetFrequencyIFFixed(Channel, IFMixerFrequencyFixed);
+ var (start, stop) = CalculateStartStop(LO2MixerFrequencyStart, LO2MixerFrequencyStop, LO2MixerFrequencyCenter, LO2MixerFrequencySpan, LO2MixerFrequencyType);
+ switch(IFMixerFrequencyType)
+ {
+ case MixerFrequencyTypeEnum.StartStop:
+ PNAX.SetFrequencyIFStart(Channel, start);
+ PNAX.SetFrequencyIFStop(Channel, stop);
+ LogStartStop("Mixer Frequency IF", start, stop);
+ break;
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.SetFrequencyIFStart(Channel, start);
+ PNAX.SetFrequencyIFStop(Channel, stop);
+ LogCenterSpan("Mixer Frequency IF", IFMixerFrequencyCenter, IFMixerFrequencySpan);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ // TODO find command for IF Fixed
+ // PNAX.SetFrequencyIFFixed(Channel, IFMixerFrequencyFixed);
+ break;
}
PNAX.SetFrequencyIFSideband(Channel, IFSidebandType);
retVal.Add(("Mixer Frequency IF Sideband", IFSidebandType));
}
- #endregion
}
private void SetLO2(int Channel)
{
- #region LO2
if (ConverterStages == ConverterStagesEnum._2)
{
- if (LO2MixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.StartStop);
- PNAX.SetFrequencyLOStart(Channel, 2, LO2MixerFrequencyStart);
- PNAX.SetFrequencyLOStop(Channel, 2, LO2MixerFrequencyStop);
-
- retVal.Add(("Mixer Frequency LO2 Mode", MixerFrequencyTypeEnum.StartStop));
- retVal.Add(("Mixer Frequency LO2 Start", LO2MixerFrequencyStart));
- retVal.Add(("Mixer Frequency LO2 Stop", LO2MixerFrequencyStop));
- }
- else if (LO2MixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- // Calculate Start/Stop from Center/Span
- double start = LO2MixerFrequencyCenter - (LO2MixerFrequencySpan / 2);
- double stop = LO2MixerFrequencyCenter + (LO2MixerFrequencySpan / 2);
- PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.CenterSpan);
- PNAX.SetFrequencyLOStart(Channel, 2, start);
- PNAX.SetFrequencyLOStop(Channel, 2, stop);
-
- retVal.Add(("Mixer Frequency LO2 Mode", MixerFrequencyTypeEnum.CenterSpan));
- retVal.Add(("Mixer Frequency LO2 Center", LO2MixerFrequencyCenter));
- retVal.Add(("Mixer Frequency LO2 Span", LO2MixerFrequencySpan));
- }
- else
- {
- // Fixed
- PNAX.SetMixerFrequencyLOMode(Channel, 1, MixerFrequencyTypeEnum.Fixed);
- PNAX.SetFrequencyLOFixed(Channel, 2, LO2MixerFrequencyFixed);
-
- retVal.Add(("Mixer Frequency LO2 Mode", MixerFrequencyTypeEnum.Fixed));
- retVal.Add(("Mixer Frequency LO2 Fixed", LO2MixerFrequencyFixed));
+ var (start, stop) = CalculateStartStop(LO2MixerFrequencyStart, LO2MixerFrequencyStop, LO2MixerFrequencyCenter, LO2MixerFrequencySpan, LO2MixerFrequencyType);
+ switch(LO2MixerFrequencyType)
+ {
+ case MixerFrequencyTypeEnum.StartStop:
+ PNAX.SetMixerFrequencyLOMode(Channel, 2, MixerFrequencyTypeEnum.StartStop);
+ PNAX.SetFrequencyLOStart(Channel, 2, start);
+ PNAX.SetFrequencyLOStop(Channel, 2, stop);
+ LogStartStop("Mixer Frequency LO2", start, stop);
+ break;
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.SetMixerFrequencyLOMode(Channel, 2, MixerFrequencyTypeEnum.CenterSpan);
+ PNAX.SetFrequencyLOStart(Channel, 2, start);
+ PNAX.SetFrequencyLOStop(Channel, 2, stop);
+ LogCenterSpan("Mixer Frequency LO2", LO2MixerFrequencyCenter, LO2MixerFrequencySpan);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ PNAX.SetMixerFrequencyLOMode(Channel, 2, MixerFrequencyTypeEnum.Fixed);
+ PNAX.SetFrequencyLOFixed(Channel, 2, LO2MixerFrequencyFixed);
+ LogFixed("Mixer Frequency LO2", LO2MixerFrequencyFixed);
+ break;
}
PNAX.SetLOILTI(Channel, 2, IF1GTLO2);
retVal.Add(("IF1 Greater Than LO2", IF1GTLO2));
}
- #endregion
}
private void SetOutput(int Channel)
{
- #region Output
PNAX.SetMixerFrequencyOutputMode(Channel, OutputMixerFrequencyType);
retVal.Add(("Mixer Frequency LO1 Mode", MixerFrequencyTypeEnum.Fixed));
- if (OutputMixerFrequencyType == MixerFrequencyTypeEnum.StartStop)
- {
- PNAX.SetFrequencyOutputStart(Channel, OutputMixerFrequencyStart);
- PNAX.SetFrequencyOutputStop(Channel, OutputMixerFrequencyStop);
-
- retVal.Add(("Mixer Frequency Output Start", OutputMixerFrequencyStart));
- retVal.Add(("Mixer Frequency Output Stop", OutputMixerFrequencyStop));
- }
- else if (OutputMixerFrequencyType == MixerFrequencyTypeEnum.CenterSpan)
- {
- // Calculate Start/Stop from Center/Span
- double start = OutputMixerFrequencyCenter - (OutputMixerFrequencySpan / 2);
- double stop = OutputMixerFrequencyCenter + (OutputMixerFrequencySpan / 2);
- PNAX.SetFrequencyOutputStart(Channel, start);
- PNAX.SetFrequencyOutputStop(Channel, stop);
-
- retVal.Add(("Mixer Frequency Output Center", OutputMixerFrequencyCenter));
- retVal.Add(("Mixer Frequency Output Span", OutputMixerFrequencySpan));
- }
- else
- {
- // Fixed
- PNAX.SetFrequencyOutputFixed(Channel, OutputMixerFrequencyFixed);
-
- retVal.Add(("Mixer Frequency Output Fixed", OutputMixerFrequencyFixed));
+ var (start, stop) = CalculateStartStop(OutputMixerFrequencyStart, OutputMixerFrequencyStop, OutputMixerFrequencyCenter, OutputMixerFrequencySpan, OutputMixerFrequencyType);
+ switch(OutputMixerFrequencyType)
+ {
+ case MixerFrequencyTypeEnum.StartStop:
+ PNAX.SetFrequencyOutputStart(Channel, start);
+ PNAX.SetFrequencyOutputStop(Channel, stop);
+ LogStartStop("Mixer Frequency Output", start, stop);
+ break;
+ case MixerFrequencyTypeEnum.CenterSpan:
+ PNAX.SetFrequencyOutputStart(Channel, start);
+ PNAX.SetFrequencyOutputStop(Channel, stop);
+ LogCenterSpan("Mixer Frequency Output", OutputMixerFrequencyCenter, OutputMixerFrequencySpan);
+ break;
+ case MixerFrequencyTypeEnum.Fixed:
+ PNAX.SetFrequencyOutputFixed(Channel, OutputMixerFrequencyFixed);
+ LogFixed("Mixer Frequency Output", OutputMixerFrequencyFixed);
+ break;
}
PNAX.SetFrequencyOutputSideband(Channel, OutputSidebandType);
retVal.Add(("Mixer Frequency Output Sideband", OutputSidebandType));
- #endregion
}
private List<(string, object)> retVal = new List<(string, object)>();
diff --git a/OpenTap.Plugins.PNAX/Converters/Mixer Steps/MixerSetupTestStep.cs b/OpenTap.Plugins.PNAX/Converters/Mixer Steps/MixerSetupTestStep.cs
index 9cf658e..bb387a8 100644
--- a/OpenTap.Plugins.PNAX/Converters/Mixer Steps/MixerSetupTestStep.cs
+++ b/OpenTap.Plugins.PNAX/Converters/Mixer Steps/MixerSetupTestStep.cs
@@ -118,26 +118,6 @@ public LOEnum PortLO2
}
}
- [Display("Fractional Multiplier Numerator", Group: "Input Port", Order: 31)]
- public int InputFractionalMultiplierNumerator { get; set; }
- [Display("Fractional Multiplier Denominator", Group: "Input Port", Order: 32)]
- public int InputFractionalMultiplierDenominator { get; set; }
-
- [Display("Fractional Multiplier Numerator", Group: "LO1 Port", Order: 41)]
- public int LO1FractionalMultiplierNumerator { get; set; }
- [Display("Fractional Multiplier Denominator", Group: "LO1 Port", Order: 42)]
- public int LO1FractionalMultiplierDenominator { get; set; }
-
- [Display("Fractional Multiplier Numerator", Group: "LO2 Port", Order: 51)]
- [EnabledIf("DoubleStage", true, HideIfDisabled = true)]
- public int LO2FractionalMultiplierNumerator { get; set; }
- [Display("Fractional Multiplier Denominator", Group: "LO2 Port", Order: 52)]
- [EnabledIf("DoubleStage", true, HideIfDisabled = true)]
- public int LO2FractionalMultiplierDenominator { get; set; }
-
-
-
-
[Display("Enable Embedded LO", Group: "Embedded LO", Order: 70)]
public bool EnableEmbeddedLO { get; set; }
@@ -214,10 +194,6 @@ public int TuningPoint
[Display("LO Frequency Delta", Group: "Embedded LO", Order: 79)]
[Unit("Hz", UseEngineeringPrefix: true)]
public double LOFrequencyDelta { get; set; }
-
-
-
-
#endregion
public MixerSetupTestStep()
@@ -237,12 +213,6 @@ private void UpdateDefaultValues()
PortOutput = defaultValues.PortOutput;
PortLO1 = defaultValues.PortLO1;
PortLO2 = defaultValues.PortLO2;
- InputFractionalMultiplierNumerator = defaultValues.InputFractionalMultiplierNumerator;
- InputFractionalMultiplierDenominator = defaultValues.InputFractionalMultiplierDenominator;
- LO1FractionalMultiplierNumerator = defaultValues.LO1FractionalMultiplierNumerator;
- LO1FractionalMultiplierDenominator = defaultValues.LO1FractionalMultiplierDenominator;
- LO2FractionalMultiplierNumerator = defaultValues.LO2FractionalMultiplierNumerator;
- LO2FractionalMultiplierDenominator = defaultValues.LO2FractionalMultiplierDenominator;
EnableEmbeddedLO = defaultValues.EnableEmbeddedLO;
TuningMethod = defaultValues.TuningMethod;
@@ -262,15 +232,9 @@ public override void Run()
PNAX.SetConverterStages(Channel, ConverterStages);
PNAX.SetPortInputOutput(Channel, PortInput, PortOutput);
- PNAX.SetInputFractionalMultiplierNumerator(Channel, InputFractionalMultiplierNumerator);
- PNAX.SetInputFractionalMultiplierDenominator(Channel, InputFractionalMultiplierDenominator);
- PNAX.SetLOFractionalMultiplierNumerator(Channel, 1, LO1FractionalMultiplierNumerator);
- PNAX.SetLOFractionalMultiplierDenominator(Channel, 1, LO1FractionalMultiplierDenominator);
PNAX.SetPortLO(Channel, 1, PortLO1);
if (ConverterStages == ConverterStagesEnum._2)
{
- PNAX.SetLOFractionalMultiplierNumerator(Channel, 2, LO2FractionalMultiplierNumerator);
- PNAX.SetLOFractionalMultiplierDenominator(Channel, 2, LO2FractionalMultiplierDenominator);
PNAX.SetPortLO(Channel, 2, PortLO2);
}
@@ -298,15 +262,9 @@ public override void Run()
{
("Converter Stages", ConverterStages),
("Input Port", PortInput),
- ("Fractional Multiplier Numerator", InputFractionalMultiplierNumerator),
- ("Fractional Multiplier Denominator", InputFractionalMultiplierDenominator),
- ("LO1 Fractional Multiplier Numerator", LO1FractionalMultiplierNumerator),
- ("LO1 Fractional Multiplier Denominator", LO1FractionalMultiplierDenominator)
};
if (ConverterStages == ConverterStagesEnum._2)
{
- retVal.Add(("LO2 Fractional Multiplier Numerator", LO2FractionalMultiplierNumerator));
- retVal.Add(("LO2 Fractional Multiplier Denominator", LO2FractionalMultiplierDenominator));
retVal.Add(("LO2 Port", PortLO2));
}
retVal.Add(("Enable Embedded LO", EnableEmbeddedLO));
diff --git a/OpenTap.Plugins.PNAX/Converters/Modulation Distortion/MODXMixer.cs b/OpenTap.Plugins.PNAX/Converters/Modulation Distortion/MODXMixer.cs
index af26570..5f43505 100644
--- a/OpenTap.Plugins.PNAX/Converters/Modulation Distortion/MODXMixer.cs
+++ b/OpenTap.Plugins.PNAX/Converters/Modulation Distortion/MODXMixer.cs
@@ -113,7 +113,7 @@ public class MODXMixer : PNABaseStep
public double LO1Power { get; set; }
[Display("LO1 Leveling", Groups: new[] { "Power", "LO1" }, Order: 52)]
- public SourceLevelingModeType LO1SourceLevelingMode{ get; set; }
+ public SourceLevelingModeType LO1SourceLevelingMode { get; set; }
[Display("LO1 Attenuator", Groups: new[] { "Power", "LO1" }, Order: 53)]
[Unit("dB", UseEngineeringPrefix: true, StringFormat: "0")]
@@ -269,27 +269,24 @@ public override void Run()
}
PNAX.MixerApply(Channel);
-
// Power
- PNAX.SetPortLO(Channel, 1, LO1Source);
- //PNAX.MODMixerSourceRole(Channel, "INPUT", "Device0");
- PNAX.SetLOPower(Channel, 1, LO1Power);
- PNAX.SetSourceLevelingMode(Channel, InputPort, LO1SourceLevelingMode.ToString());
- PNAX.SetSourceAttenuator(Channel, InputPort, LO1Attenuator);
-
+ SetPower(LO1Source, LO1Power, LO1SourceLevelingMode.ToString(), LO1Attenuator);
if (ConverterStages == ConverterStagesEnum._2)
- {
- PNAX.SetPortLO(Channel, 2, LO2Source);
- //PNAX.MODMixerSourceRole(Channel, "INPUT", "Device0");
- PNAX.SetLOPower(Channel, 2, LO2Power);
- PNAX.SetSourceLevelingMode(Channel, InputPort, LO1SourceLevelingMode.ToString());
- PNAX.SetSourceAttenuator(Channel, InputPort, LO1Attenuator);
- }
+ SetPower(LO2Source, LO2Power, LO2SourceLevelingMode.ToString(), LO2Attenuator);
+
// Apply changes to instrument
PNAX.MixerCalc(Channel);
PNAX.MixerApply(Channel);
UpgradeVerdict(Verdict.Pass);
}
+
+ private void SetPower(string source, double power, string mode, double attenuator)
+ {
+ PNAX.SetPortLO(Channel, 1, source);
+ PNAX.SetLOPower(Channel, 1, power);
+ PNAX.SetSourceLevelingMode(Channel, InputPort, mode);
+ PNAX.SetSourceAttenuator(Channel, InputPort, attenuator);
+ }
}
}
diff --git a/OpenTap.Plugins.PNAX/Converters/Scalar Mixer Phase/ScalarMixerSweep.cs b/OpenTap.Plugins.PNAX/Converters/Scalar Mixer Phase/ScalarMixerSweep.cs
index 605da1b..475a4d8 100644
--- a/OpenTap.Plugins.PNAX/Converters/Scalar Mixer Phase/ScalarMixerSweep.cs
+++ b/OpenTap.Plugins.PNAX/Converters/Scalar Mixer Phase/ScalarMixerSweep.cs
@@ -161,8 +161,8 @@ private void UpdateDefaultValues()
IsAvoidSpurs = DefaultValues.IsAvoidSpurs;
NumberOfPoints = DefaultValues.NumberOfPoints;
IFBandwidth = DefaultValues.IFBandwidth;
- IsEnablePhase = DefaultValues.IsEnablePhase;
- PhasePoint = DefaultValues.PhasePoint;
+ IsEnablePhase = DefaultValues.IsEnablePhase;
+ PhasePoint = DefaultValues.PhasePoint;
}
public override void Run()
{
@@ -182,17 +182,10 @@ public override void Run()
PNAX.SetReversedPort2Coupler(Channel, IsReversedPortTwoCoupler);
PNAX.SetPoints(Channel, NumberOfPoints);
PNAX.SetIFBandwidth(Channel, IFBandwidth);
-
PNAX.SetMixerPhase(Channel, IsEnablePhase);
PNAX.SetNormalizingDataPoint(Channel, PhasePointValue);
- if (PhasePoint == ScalerMixerPhasePoint.AbsolutePhase)
- {
- PNAX.SetMixerUseAbsolutePhase(Channel, true);
- }
- else
- {
- PNAX.SetMixerUseAbsolutePhase(Channel, false);
- }
+ PNAX.SetMixerUseAbsolutePhase(Channel, PhasePoint == ScalerMixerPhasePoint.AbsolutePhase);
+
UpgradeVerdict(Verdict.Pass);
}