diff --git a/DeviceCommand/Devices/Chroma61800.cs b/DeviceCommand/Devices/Chroma61800.cs
index 864d43c..e68cb7c 100644
--- a/DeviceCommand/Devices/Chroma61800.cs
+++ b/DeviceCommand/Devices/Chroma61800.cs
@@ -12,6 +12,8 @@ namespace DeviceCommand.Devices
{
///
/// 交流源 一拖三 (Chroma 61800系列)
+ /// SCPI 命令与参数范围按新手册 (61809/61812/61815, 新chromascpi.pdf) 校准:
+ /// 波形参数 SINE/SQUA/TRIAN/CSIN/DST01~30/USR01~30,Vac 0.0~350.0V,Vdc -495.0~495.0V,FREQ 30.00~100.00Hz
///
[ACPCommand]
public class Chroma61800 : Tcp
@@ -155,7 +157,7 @@ namespace DeviceCommand.Devices
///
/// 设置交流电压 (VOLT:AC)
///
- /// 电压值 (0 ~ 300V 或高压选配范围)
+ /// 电压值 (0.0 ~ 350.0V)
public virtual async Task 设置交流电压Async(double voltage, CancellationToken ct = default)
{
string valStr = voltage.ToString("0.###", CultureInfo.InvariantCulture);
@@ -165,6 +167,7 @@ namespace DeviceCommand.Devices
///
/// 设置直流电压 (VOLT:DC)
///
+ /// 电压值 (-495.0 ~ 495.0V)
public virtual async Task 设置直流电压Async(double voltage, CancellationToken ct = default)
{
string valStr = voltage.ToString("0.###", CultureInfo.InvariantCulture);
@@ -174,7 +177,7 @@ namespace DeviceCommand.Devices
///
/// 设置输出频率 (FREQ)
///
- /// 频率值 (Hz)
+ /// 频率值 (30.00 ~ 100.00 Hz)
public virtual async Task 设置频率Async(double frequency, CancellationToken ct = default)
{
string valStr = frequency.ToString("0.###", CultureInfo.InvariantCulture);
@@ -182,8 +185,11 @@ namespace DeviceCommand.Devices
}
///
- /// 设置波形选择 (FUNC:SHAP:A SINE / SQUA / CSIN 等)
+ /// 设置波形 A 组形状 (FUNC:SHAP:A)
+ /// 冒号后的 A 是波形组别(仪器有 A/B 两组波形寄存器),不是波形形状;
+ /// 三角波拼写为 TRIAN(TRIA/TRI 均非法,仪器只接受精确的 TRIAN)
///
+ /// SINE | SQUA | TRIAN | CSIN | DST01~DST30(内建)| USR01~USR30(用户自定义)
public virtual async Task 设置波形Async(string shape, CancellationToken ct = default)
{
await SendAsync($"FUNC:SHAP:A {shape}{ScpiDelimiter}", ct);
@@ -194,7 +200,7 @@ namespace DeviceCommand.Devices
#region 4. 相位与多相模式控制 (INST & PHASE 子系统)
///
- /// 设置单/三相工作模式 (INST:PHAS THREE / SINGLE)
+ /// 设置单/三相工作模式 (INST:PHAS THREE / SINGLE / SPLIT)
///
/// true: 三相模式, false: 单相模式
public virtual async Task 设置单三相模式Async(bool isThreePhase, CancellationToken ct = default)
@@ -373,7 +379,7 @@ namespace DeviceCommand.Devices
///
/// 设定波形缓冲区列表点数的顺序 (SOUR:LIST:SHAP)
///
- /// 波形缓冲区顺序,每个元素为 A 或 B
+ /// 各点波形: A | B | SINE | SQUA | TRIAN | CSIN | DST01~DST30 | USR01~USR30(可直接写形状名,也可引用 A/B 波形组)
public virtual async Task 设置列表波形顺序Async(string[] shapes, CancellationToken ct = default)
{
string valStr = string.Join(",", shapes);
@@ -389,10 +395,28 @@ namespace DeviceCommand.Devices
await SendAsync($"SOUR:LIST:BASE {timeBase}{ScpiDelimiter}", ct);
}
+ ///
+ /// 设定列表功能的相位连续功能 (SOUR:LIST:PHAS:CONT)
+ ///
+ /// DISABLE | ENABLE
+ public virtual async Task 设置列表相位连续Async(string state, CancellationToken ct = default)
+ {
+ await SendAsync($"SOUR:LIST:PHAS:CONT {state}{ScpiDelimiter}", ct);
+ }
+
+ ///
+ /// 查询列表功能的相位连续功能 (SOUR:LIST:PHAS:CONT?),返回 DISABLE 或 ENABLE
+ ///
+ public virtual async Task 查询列表相位连续Async(CancellationToken ct = default)
+ {
+ string resp = await WriteReadAsync($"SOUR:LIST:PHAS:CONT?{ScpiDelimiter}", ScpiDelimiter, ct);
+ return resp?.Trim() ?? string.Empty;
+ }
+
///
/// 设定 AC 起始电压列表点数的顺序 (SOUR:LIST:VOLT:AC:STAR)
///
- /// AC 起始电压序列 (单位: V,每个值 0.0 ~ 300.0)
+ /// AC 起始电压序列 (单位: V,每个值 0.0 ~ 350.0)
public virtual async Task 设置列表AC起始电压顺序Async(double[] voltages, CancellationToken ct = default)
{
string valStr = string.Join(",", Array.ConvertAll(voltages, v => v.ToString("0.###", CultureInfo.InvariantCulture)));
@@ -402,7 +426,7 @@ namespace DeviceCommand.Devices
///
/// 设定 AC 结束电压列表点数的顺序 (SOUR:LIST:VOLT:AC:END)
///
- /// AC 结束电压序列 (单位: V,每个值 0.0 ~ 300.0)
+ /// AC 结束电压序列 (单位: V,每个值 0.0 ~ 350.0)
public virtual async Task 设置列表AC结束电压顺序Async(double[] voltages, CancellationToken ct = default)
{
string valStr = string.Join(",", Array.ConvertAll(voltages, v => v.ToString("0.###", CultureInfo.InvariantCulture)));
@@ -412,7 +436,7 @@ namespace DeviceCommand.Devices
///
/// 设定 DC 起始电压列表点数的顺序 (SOUR:LIST:VOLT:DC:STAR)
///
- /// DC 起始电压序列 (单位: V,每个值 -424.2 ~ 414.2)
+ /// DC 起始电压序列 (单位: V,每个值 -495.0 ~ 495.0)
public virtual async Task 设置列表DC起始电压顺序Async(double[] voltages, CancellationToken ct = default)
{
string valStr = string.Join(",", Array.ConvertAll(voltages, v => v.ToString("0.###", CultureInfo.InvariantCulture)));
@@ -422,7 +446,7 @@ namespace DeviceCommand.Devices
///
/// 设定 DC 结束电压列表点数的顺序 (SOUR:LIST:VOLT:DC:END)
///
- /// DC 结束电压序列 (单位: V,每个值 -424.2 ~ 414.2)
+ /// DC 结束电压序列 (单位: V,每个值 -495.0 ~ 495.0)
public virtual async Task 设置列表DC结束电压顺序Async(double[] voltages, CancellationToken ct = default)
{
string valStr = string.Join(",", Array.ConvertAll(voltages, v => v.ToString("0.###", CultureInfo.InvariantCulture)));
@@ -432,7 +456,7 @@ namespace DeviceCommand.Devices
///
/// 设定起始频率列表点数的顺序 (SOUR:LIST:FREQ:STAR)
///
- /// 起始频率序列 (单位: Hz,每个值 15.00 ~ 100.00)
+ /// 起始频率序列 (单位: Hz,每个值 30.00 ~ 100.00)
public virtual async Task 设置列表起始频率顺序Async(double[] frequencies, CancellationToken ct = default)
{
string valStr = string.Join(",", Array.ConvertAll(frequencies, v => v.ToString("0.##", CultureInfo.InvariantCulture)));
@@ -442,7 +466,7 @@ namespace DeviceCommand.Devices
///
/// 设定结束频率列表点数的顺序 (SOUR:LIST:FREQ:END)
///
- /// 结束频率序列 (单位: Hz,每个值 15.00 ~ 100.00)
+ /// 结束频率序列 (单位: Hz,每个值 30.00 ~ 100.00)
public virtual async Task 设置列表结束频率顺序Async(double[] frequencies, CancellationToken ct = default)
{
string valStr = string.Join(",", Array.ConvertAll(frequencies, v => v.ToString("0.##", CultureInfo.InvariantCulture)));
@@ -623,7 +647,7 @@ namespace DeviceCommand.Devices
///
/// 设定 SYNTHESIS 模式的基波交流电压 (SOUR:SYNT:FUND)
///
- /// 基波交流电压 (单位: V,0.0 ~ 300.0)
+ /// 基波交流电压 (单位: V,0.0 ~ 350.0)
public virtual async Task 设置合成基波电压Async(double voltage, CancellationToken ct = default)
{
string valStr = voltage.ToString("0.###", CultureInfo.InvariantCulture);
@@ -633,7 +657,7 @@ namespace DeviceCommand.Devices
///
/// 设定叠加于 SYNTHESIS 波形的直流电压 (SOUR:SYNT:DC)
///
- /// 直流电压 (单位: V,-424.2 ~ 424.2)
+ /// 直流电压 (单位: V,-495.0 ~ 495.0)
public virtual async Task 设置合成直流电压Async(double voltage, CancellationToken ct = default)
{
string valStr = voltage.ToString("0.###", CultureInfo.InvariantCulture);
diff --git a/PowerAdaptabilityModule/ViewModels/PowerAdaptabilityViewModel.cs b/PowerAdaptabilityModule/ViewModels/PowerAdaptabilityViewModel.cs
index b61ef00..a97f9c0 100644
--- a/PowerAdaptabilityModule/ViewModels/PowerAdaptabilityViewModel.cs
+++ b/PowerAdaptabilityModule/ViewModels/PowerAdaptabilityViewModel.cs
@@ -173,6 +173,10 @@ namespace PowerAdaptabilityModule.ViewModels
/// 列表时间基础 (TIME / CYCLE)
public string ListTimeBase { get => _listTimeBase; set => SetProperty(ref _listTimeBase, value); }
+ private string _listPhaseContinue = "DISABLE";
+ /// 相位连续功能 (LIST:PHAS:CONT, DISABLE / ENABLE)
+ public string ListPhaseContinue { get => _listPhaseContinue; set => SetProperty(ref _listPhaseContinue, value); }
+
/// 三相各自的 LIST 序列配置(索引 0=A/Φ1, 1=B/Φ2, 2=C/Φ3),INST:EDIT EACH 逐相下发
private readonly ListPhaseConfig[] _phaseConfigs = { new(), new(), new() };
@@ -195,8 +199,6 @@ namespace PowerAdaptabilityModule.ViewModels
private ListPhaseConfig CurCfg => _phaseConfigs[_listEditPhaseIndex];
// —— 以下文本属性均代理到"当前编辑相位"的配置,切换相位时统一刷新 ——
- /// 当前相波形 (FUNC:SHAP:A)
- public string ListWaveform { get => CurCfg.Waveform; set { if (CurCfg.Waveform != value) { CurCfg.Waveform = value; RaisePropertyChanged(); } } }
/// 相位角度序列 (LIST:DEGR, °)
public string ListDegrText { get => CurCfg.Degr; set { if (CurCfg.Degr != value) { CurCfg.Degr = value; RaisePropertyChanged(); } } }
/// AC 起始电压序列 (LIST:VOLT:AC:STAR, V)
@@ -213,13 +215,12 @@ namespace PowerAdaptabilityModule.ViewModels
public string ListFreqEndText { get => CurCfg.FreqEnd; set { if (CurCfg.FreqEnd != value) { CurCfg.FreqEnd = value; RaisePropertyChanged(); } } }
/// 静止时间序列 (LIST:DWEL, ms)
public string ListDwellText { get => CurCfg.Dwell; set { if (CurCfg.Dwell != value) { CurCfg.Dwell = value; RaisePropertyChanged(); } } }
- /// 波形缓冲顺序 (LIST:SHAP, A/B)
+ /// 波形顺序 (LIST:SHAP,可直接写形状名或引用 A/B 组)
public string ListShapeText { get => CurCfg.ShapeSeq; set { if (CurCfg.ShapeSeq != value) { CurCfg.ShapeSeq = value; RaisePropertyChanged(); } } }
/// 切换编辑相位后,通知所有序列文本框刷新为新相位内容
private void RaiseListSequenceChanged()
{
- RaisePropertyChanged(nameof(ListWaveform));
RaisePropertyChanged(nameof(ListDegrText));
RaisePropertyChanged(nameof(ListVoltAcStartText));
RaisePropertyChanged(nameof(ListVoltAcEndText));
@@ -233,11 +234,12 @@ namespace PowerAdaptabilityModule.ViewModels
#endregion
#region 下拉选项
- public IReadOnlyList WaveformOptions { get; } = new[] { "SINE", "SQUA", "CSIN" };
+ public IReadOnlyList WaveformOptions { get; } = new[] { "SINE", "SQUA", "TRIAN", "CSIN" };
public IReadOnlyList CouplingOptions { get; } = new[] { "AC", "DC", "ACDC" };
public IReadOnlyList RelationOptions { get; } = new[] { "INDEPEND", "SAMEFREQ", "BALANCE" };
public IReadOnlyList ListTriggerOptions { get; } = new[] { "AUTO", "MANUAL", "EXCITE" };
public IReadOnlyList ListTimeBaseOptions { get; } = new[] { "TIME", "CYCLE" };
+ public IReadOnlyList ListPhaseContinueOptions { get; } = new[] { "DISABLE", "ENABLE" };
#endregion
#region 输入参数(SYNTHESIS 自定义谐波波形输出)
@@ -257,11 +259,11 @@ namespace PowerAdaptabilityModule.ViewModels
public int SynthFrequency { get => _synthFrequency; set => SetProperty(ref _synthFrequency, value); }
private double _synthFundamental = 220;
- /// 基波交流电压 (SYNT:FUND, 0.0 ~ 300.0 V)
+ /// 基波交流电压 (SYNT:FUND, 0.0 ~ 350.0 V)
public double SynthFundamental { get => _synthFundamental; set => SetProperty(ref _synthFundamental, value); }
private double _synthDc;
- /// 叠加直流电压 (SYNT:DC, -424.2 ~ 424.2 V)
+ /// 叠加直流电压 (SYNT:DC, -495.0 ~ 495.0 V)
public double SynthDc { get => _synthDc; set => SetProperty(ref _synthDc, value); }
private double _synthStartPhase;
@@ -526,6 +528,9 @@ namespace PowerAdaptabilityModule.ViewModels
ListCount = p.Count;
ListTrigger = p.Trigger;
ListTimeBase = p.TimeBase;
+ // 旧测试项文件没有相位连续键(PhaseContinue 为 null)时保持界面当前值不动
+ if (!string.IsNullOrWhiteSpace(p.PhaseContinue))
+ ListPhaseContinue = p.PhaseContinue;
for (int i = 0; i < 3 && i < p.Phases.Length; i++)
_phaseConfigs[i] = p.Phases[i].Clone();
@@ -534,7 +539,7 @@ namespace PowerAdaptabilityModule.ViewModels
PresetName = p.Name; // 名称框回显当前文件名
PresetNote = p.Note;
_currentPresetPath = PresetPathOf(p.Name); // 记住当前打开的文件,此后“保存”只覆盖它
- Log($"已载入测试项:{p.Name}(次数={(p.Count == 0 ? "无限" : p.Count.ToString())} 触发={p.Trigger} 时基={p.TimeBase})");
+ Log($"已载入测试项:{p.Name}(次数={(p.Count == 0 ? "无限" : p.Count.ToString())} 触发={p.Trigger} 时基={p.TimeBase} 相位连续={p.PhaseContinue ?? "未指定(保持当前)"})");
});
// 保存:覆盖当前打开的测试项文件(未打开文件时按“另存为”新建)
@@ -579,7 +584,8 @@ namespace PowerAdaptabilityModule.ViewModels
await _dev.设置列表执行次数Async(ListCount, Ct()); // LIST:COUN(0=无限循环)
await _dev.设置列表触发形态Async(ListTrigger, Ct()); // LIST:TRIG
await _dev.设置列表时间基础Async(ListTimeBase, Ct()); // LIST:BASE
- await 下发单相序列Async(_phaseConfigs[p]); // FUNC:SHAP:A + LIST:xxx 序列
+ await _dev.设置列表相位连续Async(ListPhaseContinue, Ct()); // LIST:PHAS:CONT(相位连续,随相位上下文分相)
+ await 下发单相序列Async(_phaseConfigs[p]); // LIST:xxx 序列
}
await _dev.延时Async(StartDelayMs, Ct()); // *D 200(等待仪器就绪)
@@ -929,7 +935,7 @@ namespace PowerAdaptabilityModule.ViewModels
string stem = Path.GetFileNameWithoutExtension(file);
return string.Equals(item.Name, stem, StringComparison.Ordinal)
? item
- : new ListPreset(stem, item.Note, item.Count, item.Phases, item.Trigger, item.TimeBase);
+ : new ListPreset(stem, item.Note, item.Count, item.Phases, item.Trigger, item.TimeBase, item.PhaseContinue);
}
/// 按名称拼出测试项文件完整路径(写入、另存、删除共用同一规则)。
@@ -952,7 +958,8 @@ namespace PowerAdaptabilityModule.ViewModels
ListCount,
new[] { _phaseConfigs[0].Clone(), _phaseConfigs[1].Clone(), _phaseConfigs[2].Clone() },
ListTrigger,
- ListTimeBase);
+ ListTimeBase,
+ ListPhaseContinue);
///
/// 保存:覆盖写入“当前打开的文件”,不改变文件名(名称框内容不参与)。
@@ -1446,7 +1453,7 @@ namespace PowerAdaptabilityModule.ViewModels
.ToArray();
}
- /// 解析波形缓冲顺序(A/B)序列。
+ /// 解析波形顺序序列(形状名或 A/B)。
private static string[] ParseShapes(string text)
{
if (string.IsNullOrWhiteSpace(text)) return Array.Empty();
@@ -1457,13 +1464,11 @@ namespace PowerAdaptabilityModule.ViewModels
///
/// 下发单个相位的 LIST 序列(调用前须已通过 INST:NSEL 选定目标相、并已 INST:EDIT EACH)。
- /// 依次下发 FUNC:SHAP:A 波形,以及 DEGR / VOLT:AC / VOLT:DC / FREQ / DWEL / SHAP 各序列,留空的序列跳过。
+ /// 依次下发 DEGR / VOLT:AC / VOLT:DC / FREQ / DWEL / SHAP 各序列,留空的序列跳过;
+ /// LIST:SHAP 各点可直接写形状名 SINE/SQUA/TRIAN/CSIN/DST01~30/USR01~30,也可引用仪器 A/B 波形组。
///
private async Task 下发单相序列Async(ListPhaseConfig cfg)
{
- if (!string.IsNullOrWhiteSpace(cfg.Waveform))
- await _dev!.设置波形Async(cfg.Waveform.Trim(), Ct()); // FUNC:SHAP:A
-
var degr = ParseDoubles(cfg.Degr);
if (degr.Length > 0) await _dev!.设置列表相位角度顺序Async(degr, Ct()); // LIST:DEGR
@@ -1532,12 +1537,11 @@ namespace PowerAdaptabilityModule.ViewModels
/// 构建三相对称的 LIST 相位配置:以给定参数为 A 相,B/C 相复制后 DEGR 自动 +120°/+240°。
/// 适用于三相平衡试验(电压/频率范围、骤变、瞬时跌落等)。DWEL 单位 ms。
///
- private static ListPhaseConfig[] Sym(string waveform, string degr, string vacS, string vacE,
+ private static ListPhaseConfig[] Sym(string degr, string vacS, string vacE,
string vdcS, string vdcE, string fS, string fE, string dwell, string shape = "")
{
var a = new ListPhaseConfig
{
- Waveform = waveform,
Degr = degr,
VoltAcStart = vacS,
VoltAcEnd = vacE,
@@ -1562,66 +1566,66 @@ namespace PowerAdaptabilityModule.ViewModels
// ===== 5.1 交流电压范围(三相平衡渐变,2 循环,DWEL 单位 ms)=====
new ListPreset("5.1 上限电压范围 220→265V",
"三相平衡:额定 220V 线性升至上限 265V 再回落,各段 90s,2 循环。判定 A。",
- 2, Sym("SINE", "0,0", "220,265", "265,220", "", "", "50,50", "50,50", "90000,90000")),
+ 2, Sym("0,0", "220,265", "265,220", "", "", "50,50", "50,50", "90000,90000")),
new ListPreset("5.1 下限电压范围 220→85V",
"三相平衡:220V 降至下限 85V 再回升,各段 90s,2 循环。判定 B。",
- 2, Sym("SINE", "0,0", "220,85", "85,220", "", "", "50,50", "50,50", "90000,90000")),
+ 2, Sym("0,0", "220,85", "85,220", "", "", "50,50", "50,50", "90000,90000")),
new ListPreset("5.1 上限保护电压 220→275V",
"验证过压保护点与恢复点:220V 升至 275V 再回落,2 循环。判定 C。",
- 2, Sym("SINE", "0,0", "220,275", "275,220", "", "", "50,50", "50,50", "90000,90000")),
+ 2, Sym("0,0", "220,275", "275,220", "", "", "50,50", "50,50", "90000,90000")),
new ListPreset("5.1 下限保护电压 220→80V",
"验证欠压保护点与恢复点:220V 降至 80V 再回升,2 循环。判定 C。",
- 2, Sym("SINE", "0,0", "220,80", "80,220", "", "", "50,50", "50,50", "90000,90000")),
+ 2, Sym("0,0", "220,80", "80,220", "", "", "50,50", "50,50", "90000,90000")),
// ===== 5.3 交流频率范围(220V 恒定,频率渐变,2 循环)=====
new ListPreset("5.3 上限频率范围 50→65Hz",
"220V 恒定,频率 50Hz 升至 65Hz 再回落,各段 60s,2 循环。判定 B。",
- 2, Sym("SINE", "0,0", "220,220", "220,220", "", "", "50,65", "65,50", "60000,60000")),
+ 2, Sym("0,0", "220,220", "220,220", "", "", "50,65", "65,50", "60000,60000")),
new ListPreset("5.3 下限频率范围 50→40Hz",
"220V 恒定,频率 50Hz 降至 40Hz 再回升,各段 60s,2 循环。判定 B。",
- 2, Sym("SINE", "0,0", "220,220", "220,220", "", "", "50,40", "40,50", "60000,60000")),
+ 2, Sym("0,0", "220,220", "220,220", "", "", "50,40", "40,50", "60000,60000")),
new ListPreset("5.3 上限保护频率 50→75Hz",
"验证过频保护点与恢复点:50Hz 升至 75Hz 再回落,2 循环。判定 C。",
- 2, Sym("SINE", "0,0", "220,220", "220,220", "", "", "50,75", "75,50", "60000,60000")),
+ 2, Sym("0,0", "220,220", "220,220", "", "", "50,75", "75,50", "60000,60000")),
// ===== 5.4 交流电压骤变(指定相位角阶跃,2 循环)=====
new ListPreset("5.4 上限电压骤变 220→265V@90°",
"稳态 220V(5s)→在 90° 相位瞬间跳到 265V(0.5s)→跳回。改 DEGR 中间值可切 0/180/270°。判定 B。",
- 2, Sym("SINE", "0,90,0", "220,265,220", "220,265,220", "", "", "50,50,50", "50,50,50", "5000,500,5000")),
+ 2, Sym("0,90,0", "220,265,220", "220,265,220", "", "", "50,50,50", "50,50,50", "5000,500,5000")),
new ListPreset("5.4 下限电压骤变 220→90V@90°",
"稳态 220V→在 90° 瞬间跌到 90V(0.5s)→恢复。判定 B。",
- 2, Sym("SINE", "0,90,0", "220,90,220", "220,90,220", "", "", "50,50,50", "50,50,50", "5000,500,5000")),
+ 2, Sym("0,90,0", "220,90,220", "220,90,220", "", "", "50,50,50", "50,50,50", "5000,500,5000")),
// ===== 5.5 交流频率骤变(2 循环)=====
new ListPreset("5.5 上限频率骤变 50→75Hz",
"220V 恒定,频率 50Hz 瞬间跳到 75Hz(1s)再回落。判定 B。",
- 2, Sym("SINE", "0,90,0", "220,220,220", "220,220,220", "", "", "50,75,50", "50,75,50", "5000,1000,5000")),
+ 2, Sym("0,90,0", "220,220,220", "220,220,220", "", "", "50,75,50", "50,75,50", "5000,1000,5000")),
new ListPreset("5.5 下限频率骤变 50→40Hz",
"220V 恒定,频率 50Hz 瞬间跌到 40Hz(1s)再回升。判定 B。",
- 2, Sym("SINE", "0,90,0", "220,220,220", "220,220,220", "", "", "50,40,50", "50,40,50", "5000,1000,5000")),
+ 2, Sym("0,90,0", "220,220,220", "220,220,220", "", "", "50,40,50", "50,40,50", "5000,1000,5000")),
// ===== 5.12 瞬时电压跌落/冲击(1ms 突变,2 循环)=====
new ListPreset("5.12 0°冲击 310V/1ms",
"稳态 220V→0° 相位冲击到 310V 峰值持续 1ms→恢复。1ms 接近 LIST 最小 dwell,若不精确请改 BASE CYCLE。判定不低于 C。",
- 2, Sym("SINE", "0,0,0", "220,310,220", "220,310,220", "", "", "50,50,50", "50,50,50", "5000,1,5000")),
+ 2, Sym("0,0,0", "220,310,220", "220,310,220", "", "", "50,50,50", "50,50,50", "5000,1,5000")),
new ListPreset("5.12 90°跌落 0V/1ms",
"稳态 220V→90° 相位跌到 0V 持续 1ms→恢复。判定不低于 C。",
- 2, Sym("SINE", "0,90,0", "220,0,220", "220,0,220", "", "", "50,50,50", "50,50,50", "5000,1,5000")),
+ 2, Sym("0,90,0", "220,0,220", "220,0,220", "", "", "50,50,50", "50,50,50", "5000,1,5000")),
// ===== 单相深跌(不对称,A 相深跌 / B·C 相浅跌,无限循环)=====
new ListPreset("5.x 单相深跌 A相11.5V(不对称示例)",
"A 相跌到 11.5V、B/C 相跌到 200.1V,跌落 280ms,前后各稳态 20s;三相 DEGR 基准 0/120/240、中间点各异。无限循环,需手动停止。",
0, new[]
{
- new ListPhaseConfig { Waveform = "SINE", Degr = "0,0,0", VoltAcStart = "230,11.5,230", VoltAcEnd = "230,11.5,230", VoltDcStart = "10,10,10", VoltDcEnd = "10,10,10", FreqStart = "50,50,50", FreqEnd = "50,50,50", Dwell = "20000,280,20000" },
- new ListPhaseConfig { Waveform = "SINE", Degr = "120,92,120", VoltAcStart = "230,200.1,230", VoltAcEnd = "230,200.1,230", VoltDcStart = "10,10,10", VoltDcEnd = "10,10,10", FreqStart = "50,50,50", FreqEnd = "50,50,50", Dwell = "20000,280,20000" },
- new ListPhaseConfig { Waveform = "SINE", Degr = "240,268,240", VoltAcStart = "230,200.1,230", VoltAcEnd = "230,200.1,230", VoltDcStart = "10,10,10", VoltDcEnd = "10,10,10", FreqStart = "50,50,50", FreqEnd = "50,50,50", Dwell = "20000,280,20000" },
+ new ListPhaseConfig { Degr = "0,0,0", VoltAcStart = "230,11.5,230", VoltAcEnd = "230,11.5,230", VoltDcStart = "10,10,10", VoltDcEnd = "10,10,10", FreqStart = "50,50,50", FreqEnd = "50,50,50", Dwell = "20000,280,20000" },
+ new ListPhaseConfig { Degr = "120,92,120", VoltAcStart = "230,200.1,230", VoltAcEnd = "230,200.1,230", VoltDcStart = "10,10,10", VoltDcEnd = "10,10,10", FreqStart = "50,50,50", FreqEnd = "50,50,50", Dwell = "20000,280,20000" },
+ new ListPhaseConfig { Degr = "240,268,240", VoltAcStart = "230,200.1,230", VoltAcEnd = "230,200.1,230", VoltDcStart = "10,10,10", VoltDcEnd = "10,10,10", FreqStart = "50,50,50", FreqEnd = "50,50,50", Dwell = "20000,280,20000" },
}),
// ===== 6.3 直流电压骤变(注意量程与耦合模式)=====
new ListPreset("6.3 直流骤变 680→860→450V【注意量程】",
- "直流侧瞬时骤变。⚠ 需先在“耦合模式”设为 DC;且 680~860V 已超 Chroma61800.cs 标注的 DC 量程(-424.2~414.2V),须确认设备为高压选配档,否则命令会被拒绝或截顶。",
- 2, Sym("SINE", "0,0,0,0", "", "", "680,860,450,680", "680,860,450,680", "", "", "5000,5000,5000,5000")),
+ "直流侧瞬时骤变。⚠ 需先在“耦合模式”设为 DC;且 680~860V 已超 Chroma61800.cs 标注的 DC 量程(-495.0~495.0V),须确认设备为高压选配档,否则命令会被拒绝或截顶。",
+ 2, Sym("0,0,0,0", "", "", "680,860,450,680", "680,860,450,680", "", "", "5000,5000,5000,5000")),
};
#endregion
@@ -1639,8 +1643,6 @@ namespace PowerAdaptabilityModule.ViewModels
///
public class ListPhaseConfig
{
- /// 该相波形 (FUNC:SHAP:A),如 SINE / SQUA
- public string Waveform { get; set; } = "SINE";
/// 相位角度序列 (LIST:DEGR, °)
public string Degr { get; set; } = "";
/// AC 起始电压序列 (LIST:VOLT:AC:STAR, V)
@@ -1657,7 +1659,7 @@ namespace PowerAdaptabilityModule.ViewModels
public string FreqEnd { get; set; } = "";
/// 静止时间序列 (LIST:DWEL, ms)
public string Dwell { get; set; } = "";
- /// 波形缓冲顺序 (LIST:SHAP, A/B)
+ /// 波形顺序 (LIST:SHAP,可直接写形状名或引用 A/B 组)
public string ShapeSeq { get; set; } = "";
/// 浅拷贝一份配置(用于"复制到三相")。
@@ -1665,7 +1667,7 @@ namespace PowerAdaptabilityModule.ViewModels
}
///
- /// 大纲典型试验预设:一次载入即可填充三相 LIST 序列与基础参数(次数/触发/时基)。
+ /// 大纲典型试验预设:一次载入即可填充三相 LIST 序列与基础参数(次数/触发/时基/相位连续)。
///
public class ListPreset
{
@@ -1679,12 +1681,14 @@ namespace PowerAdaptabilityModule.ViewModels
public string Trigger { get; }
/// 时间基础 (LIST:BASE)
public string TimeBase { get; }
+ /// 相位连续功能 (LIST:PHAS:CONT);旧文件无此键时为 null,载入时保持界面当前值
+ public string? PhaseContinue { get; }
/// 三相序列配置(索引 0=A/Φ1, 1=B/Φ2, 2=C/Φ3)
public ListPhaseConfig[] Phases { get; }
[JsonConstructor]
public ListPreset(string name, string note, int count, ListPhaseConfig[] phases,
- string trigger = "AUTO", string timeBase = "TIME")
+ string trigger = "AUTO", string timeBase = "TIME", string? phaseContinue = null)
{
Name = name;
Note = note;
@@ -1692,6 +1696,7 @@ namespace PowerAdaptabilityModule.ViewModels
Phases = phases;
Trigger = trigger;
TimeBase = timeBase;
+ PhaseContinue = phaseContinue;
}
}
diff --git a/PowerAdaptabilityModule/Views/PowerAdaptabilityView.xaml b/PowerAdaptabilityModule/Views/PowerAdaptabilityView.xaml
index 9a6bf80..22d93cc 100644
--- a/PowerAdaptabilityModule/Views/PowerAdaptabilityView.xaml
+++ b/PowerAdaptabilityModule/Views/PowerAdaptabilityView.xaml
@@ -163,7 +163,8 @@
+ SelectedItem="{Binding Waveform}"
+ ToolTip="FUNC:SHAP:A — SINE / SQUA / TRIAN(三角)/ CSIN、内建 DST01~30、自定义 USR01~30" />
@@ -228,6 +229,11 @@
+
+
@@ -236,10 +242,6 @@
-
-