Files
VacuumPressureMembranePoreS…/ViewModels/StationViewModel.cs
2026-03-19 20:40:54 +08:00

97 lines
3.6 KiB
C#

using System.Windows.Input;
using MembranePoreTester.Communication;
using System.Threading.Tasks;
using System.Windows;
namespace MembranePoreTester.ViewModels
{
public class StationViewModel : ViewModelBase
{
private readonly IPlcService _plcService;
private readonly PlcConfiguration _plcConfig;
private bool _isPressing;
private string _pressButtonText = "加压";
private string _highLowPressure = "低压";
private bool _enableChecked;
public int StationId { get; set; }
public BubblePointViewModel BubblePointVM { get; } = new();
public PoreDistributionViewModel PoreDistributionVM { get; } = new();
public string HighLowPressure
{
get => _highLowPressure;
set => SetProperty(ref _highLowPressure, value);
}
public string PressButtonText
{
get => _pressButtonText;
set => SetProperty(ref _pressButtonText, value);
}
public bool EnableChecked
{
get => _enableChecked;
set => SetProperty(ref _enableChecked, value);
}
public ICommand PressCommand { get; }
public ICommand BurstCommand { get; }
public ICommand StartCommand { get; }
public ICommand StopCommand { get; }
public ICommand EnableCommand { get; } // 用于使能复选框
public StationViewModel()
{
_plcService = App.PlcService;
_plcConfig = App.PlcConfig;
BubblePointVM.StationId = StationId;
PoreDistributionVM.StationId = StationId;
// 初始化按钮文字
_pressButtonText = "加压"; // 直接设置字段,避免触发属性通知循环
PressButtonText = "加压"; // 或者通过属性设置
System.Diagnostics.Debug.WriteLine($"工位{StationId} PressButtonText初始值: {PressButtonText}");
PressCommand = new RelayCommand(async () => await TogglePressAsync());
BurstCommand = new RelayCommand(async () => await ReadBurstPressureAsync());
StartCommand = new RelayCommand(async () => await WriteCoilAsync(_plcConfig.StartCoil, true));
StopCommand = new RelayCommand(async () => await WriteCoilAsync(_plcConfig.StopCoil, true));
// 使能复选框点击时写入对应线圈
EnableCommand = new RelayCommand(async () => await WriteCoilAsync(_plcConfig.EnableCoil, EnableChecked));
}
private async Task TogglePressAsync()
{
_isPressing = !_isPressing;
await WriteCoilAsync(_plcConfig.PressCoil, _isPressing);
PressButtonText = _isPressing ? "停止加压" : "加压";
}
private async Task ReadBurstPressureAsync()
{
try
{
float pressure = await ((ModbusTcpPlcService)_plcService).ReadPressureAsync(StationId);
BubblePointVM.UpdateBubblePointPressure(pressure * _plcConfig.PressureFactor);
MessageBox.Show($"涨破压力: {pressure} {BubblePointVM.Record.PressureUnit}", "提示");
}
catch (Exception ex)
{
MessageBox.Show($"读取压力失败: {ex.Message}");
}
}
private async Task WriteCoilAsync(ushort coil, bool value)
{
try
{
await ((ModbusTcpPlcService)_plcService).WriteCoilAsync(coil, value);
}
catch (Exception ex)
{
MessageBox.Show($"写线圈失败: {ex.Message}");
}
}
}
}