list更改

This commit is contained in:
“hsc”
2026-09-24 15:20:29 +08:00
parent 81c6386e62
commit c017efdb49
5 changed files with 1057 additions and 278 deletions
@@ -2,6 +2,7 @@ using DeviceCommand.Devices;
using Prism.Commands;
using Prism.Ioc;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Input;
@@ -30,6 +31,12 @@ namespace DeviceEditModule.ViewModels
private double _voltage; public double Voltage { get => _voltage; set => SetProperty(ref _voltage, value); }
private double _frequency = 50; public double Frequency { get => _frequency; set => SetProperty(ref _frequency, value); }
private string _waveform = "SINE"; public string Waveform { get => _waveform; set => SetProperty(ref _waveform, value); }
/// <summary>相位选择列表: 0=ALL(三相同时), 1=A相, 2=B相, 3=C相</summary>
public List<string> PhaseOptions { get; } = new() { "ALL (三相)", "A相 (Φ1)", "B相 (Φ2)", "C相 (Φ3)" };
private int _selectedPhaseIndex;
/// <summary>当前选中的相位索引 (0=ALL, 1=A, 2=B, 3=C)</summary>
public int SelectedPhaseIndex { get => _selectedPhaseIndex; set => SetProperty(ref _selectedPhaseIndex, value); }
#endregion
#region 测量结果
@@ -60,18 +67,34 @@ namespace DeviceEditModule.ViewModels
Reset = new DelegateCommand(async () => await Exec(async () => { await _dev!.复位Async(Ct()); Log("设备已复位"); }));
OutOn = new DelegateCommand(async () => await Exec(async () => { await _dev!.设置输出开关Async(true, Ct()); Log("输出已开启"); }));
OutOff = new DelegateCommand(async () => await Exec(async () => { await _dev!.设置输出开关Async(false, Ct()); Log("输出已关闭"); }));
SetV = new DelegateCommand(async () => await Exec(async () => { await _dev!.设置交流电压Async(Voltage, Ct()); Log($"电压={Voltage}V"); }));
SetF = new DelegateCommand(async () => await Exec(async () => { await _dev!.设置频率Async(Frequency, Ct()); Log($"频率={Frequency}Hz"); }));
SetWave = new DelegateCommand(async () => await Exec(async () => { await _dev!.设置波形Async(Waveform, Ct()); Log($"波形={Waveform}"); }));
SetV = new DelegateCommand(async () => await Exec(async () =>
{
await ApplyPhaseAsync();
await _dev!.设置交流电压Async(Voltage, Ct());
Log($"电压={Voltage}V → {PhaseLabel}");
}));
SetF = new DelegateCommand(async () => await Exec(async () =>
{
await ApplyPhaseAsync();
await _dev!.设置频率Async(Frequency, Ct());
Log($"频率={Frequency}Hz → {PhaseLabel}");
}));
SetWave = new DelegateCommand(async () => await Exec(async () =>
{
await ApplyPhaseAsync();
await _dev!.设置波形Async(Waveform, Ct());
Log($"波形={Waveform} → {PhaseLabel}");
}));
SetThreePhase = new DelegateCommand(async () => await Exec(async () => { await _dev!.设置单三相模式Async(true, Ct()); Log("三相模式"); }));
SetSinglePhase = new DelegateCommand(async () => await Exec(async () => { await _dev!.设置单三相模式Async(false, Ct()); Log("单相模式"); }));
QMeas = new DelegateCommand(async () => await Exec(async () =>
{
await ApplyPhaseAsync();
MeasuredVoltage = await _dev!.读取交流电压Async(Ct());
MeasuredCurrent = await _dev!.读取交流电流Async(Ct());
MeasuredFrequency = await _dev!.读取频率Async(Ct());
MeasuredPower = await _dev!.读取真实功率Async(Ct());
Log($"测量→V:{MeasuredVoltage} I:{MeasuredCurrent} F:{MeasuredFrequency} P:{MeasuredPower}");
Log($"测量[{PhaseLabel}]→V:{MeasuredVoltage} I:{MeasuredCurrent} F:{MeasuredFrequency} P:{MeasuredPower}");
}));
Initialize();
}
@@ -106,6 +129,32 @@ namespace DeviceEditModule.ViewModels
#region 辅助
/// <summary>当前选中相位的显示标签</summary>
private string PhaseLabel => SelectedPhaseIndex switch
{
1 => "A相",
2 => "B相",
3 => "C相",
_ => "ALL"
};
/// <summary>
/// 根据 SelectedPhaseIndex 发送 INST:COUP / INST:NSEL 命令切换相位上下文。
/// <para>索引 0 → INST:COUP ALL (三相同时);索引 1~3 → INST:COUP NONE + INST:NSEL n</para>
/// </summary>
private async Task ApplyPhaseAsync()
{
if (SelectedPhaseIndex == 0)
{
await _dev!.设置相位耦合Async("ALL", Ct());
}
else
{
await _dev!.设置相位耦合Async("NONE", Ct());
await _dev!.选择相位Async(SelectedPhaseIndex, Ct());
}
}
private CancellationToken Ct() => (_cts = new CancellationTokenSource(TimeSpan.FromSeconds(10))).Token;
private async Task Exec(Func<Task> action)
@@ -94,6 +94,12 @@
</StackPanel>
<GroupBox Header="参数设置" Margin="0,0,0,8" materialDesign:ColorZoneAssist.Mode="PrimaryLight">
<StackPanel Margin="4">
<StackPanel Orientation="Horizontal" Margin="0,4">
<TextBlock Text="相位选择" Style="{StaticResource ParamLabel}"/>
<ComboBox Width="130" VerticalAlignment="Center" Margin="4,0"
ItemsSource="{Binding PhaseOptions}"
SelectedIndex="{Binding SelectedPhaseIndex}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,4">
<TextBlock Text="电压 (V)" Style="{StaticResource ParamLabel}"/>
<TextBox Style="{StaticResource NumInput}"