From 34ec76fda55614fcfa5571691384e9cd14e5992e Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Wed, 21 May 2025 12:17:46 +0800 Subject: [PATCH] =?UTF-8?q?SV2=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0=20?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=8A=9F=E8=83=BD=E7=9A=84=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CapMachine.Shared/Controls/Meter.xaml | 16 +- CapMachine.Shared/Controls/Meter.xaml.cs | 43 +++++ CapMachine.Wpf/App.xaml.cs | 3 +- CapMachine.Wpf/Models/MeterCmdMsg.cs | 30 ++++ CapMachine.Wpf/Services/CanDriveService.cs | 8 +- .../Services/MachineRtDataService.cs | 151 ++++++++-------- .../ViewModels/DialogMeterExdViewModel.cs | 162 ++++++++++++++++++ CapMachine.Wpf/ViewModels/MonitorViewModel.cs | 58 ++++++- CapMachine.Wpf/Views/DialogMeterExdView.xaml | 90 ++++++++++ .../Views/DialogMeterExdView.xaml.cs | 28 +++ CapMachine.Wpf/Views/MonitorView.xaml | 1 + 11 files changed, 507 insertions(+), 83 deletions(-) create mode 100644 CapMachine.Wpf/Models/MeterCmdMsg.cs create mode 100644 CapMachine.Wpf/ViewModels/DialogMeterExdViewModel.cs create mode 100644 CapMachine.Wpf/Views/DialogMeterExdView.xaml create mode 100644 CapMachine.Wpf/Views/DialogMeterExdView.xaml.cs diff --git a/CapMachine.Shared/Controls/Meter.xaml b/CapMachine.Shared/Controls/Meter.xaml index 422238d..9c62f2d 100644 --- a/CapMachine.Shared/Controls/Meter.xaml +++ b/CapMachine.Shared/Controls/Meter.xaml @@ -225,10 +225,9 @@ + - - + + Text="{Binding ElementName=MeterInstance, Path=MeterName}"> + + + + + + + diff --git a/CapMachine.Shared/Controls/Meter.xaml.cs b/CapMachine.Shared/Controls/Meter.xaml.cs index 0ae5e63..519bbf5 100644 --- a/CapMachine.Shared/Controls/Meter.xaml.cs +++ b/CapMachine.Shared/Controls/Meter.xaml.cs @@ -43,6 +43,22 @@ namespace CapMachine.Shared.Controls } } + /// + /// ContextMenu在WPF中是一个特殊元素,它不在常规视觉树中,而是在独立的窗口中, + /// 这导致ElementName绑定可能无法正常工作,所以用这个方式来获取 + /// + /// + /// + private void ExdMenuClick(object sender, RoutedEventArgs e) + { + if (ExdCommand != null && ExdCommand.CanExecute(ExdCommandParameter)) + { + ExdCommandParameter = this; + ExdCommand.Execute(ExdCommandParameter); + } + } + + /// /// 仪表名称 /// @@ -192,6 +208,32 @@ namespace CapMachine.Shared.Controls //public event PropertyChangedEventHandler? PropertyChanged; + /// + /// 拓展控制切换 命令 + /// + public ICommand ExdCommand + { + get { return (ICommand)GetValue(ExdCommandProperty); } + set { SetValue(ExdCommandProperty, value); } + } + public static readonly DependencyProperty ExdCommandProperty = + DependencyProperty.Register("ExdCommand", typeof(ICommand), typeof(Meter), new PropertyMetadata(default(ICommand))); + + /// + /// ExdCommand 参数 + /// + public object ExdCommandParameter + { + get + { + return (object)base.GetValue(Meter.ExdCommandParameterProperty); + } + set + { + base.SetValue(Meter.ExdCommandParameterProperty, value); + } + } + public static readonly DependencyProperty ExdCommandParameterProperty = DependencyProperty.Register("ExdCommandParameter", typeof(object), typeof(Meter), new PropertyMetadata()); @@ -376,5 +418,6 @@ namespace CapMachine.Shared.Controls } } + } } diff --git a/CapMachine.Wpf/App.xaml.cs b/CapMachine.Wpf/App.xaml.cs index d689086..de1db20 100644 --- a/CapMachine.Wpf/App.xaml.cs +++ b/CapMachine.Wpf/App.xaml.cs @@ -206,7 +206,8 @@ namespace CapMachine.Wpf containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); - + containerRegistry.RegisterDialog(); + containerRegistry.RegisterDialog(); diff --git a/CapMachine.Wpf/Models/MeterCmdMsg.cs b/CapMachine.Wpf/Models/MeterCmdMsg.cs new file mode 100644 index 0000000..9d74a0b --- /dev/null +++ b/CapMachine.Wpf/Models/MeterCmdMsg.cs @@ -0,0 +1,30 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models +{ + /// + /// 仪表命令消息 + /// + public class MeterCmdMsg:BindableBase + { + private string _Name; + /// + /// 名称 + /// + public string Name + { + get { return _Name; } + set { _Name = value;RaisePropertyChanged(); } + } + + /// + /// 参数 SV2 + /// + public string Par { get; set; } + } +} diff --git a/CapMachine.Wpf/Services/CanDriveService.cs b/CapMachine.Wpf/Services/CanDriveService.cs index 666ddd2..042fd75 100644 --- a/CapMachine.Wpf/Services/CanDriveService.cs +++ b/CapMachine.Wpf/Services/CanDriveService.cs @@ -351,7 +351,8 @@ namespace CapMachine.Wpf.Services if (ListCanDbcModel.Any(a => a.Name == Name)) { //double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); - return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + //return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result) == true ? Result : 0; } return 0; } @@ -369,8 +370,9 @@ namespace CapMachine.Wpf.Services if (ListCanDbcModel.Any(a => a.Name == Name)) { - //double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); - return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + //double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); + //return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result) == true ? Result : 0; } return 0; } diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index aced06b..2198c83 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -1078,13 +1078,13 @@ namespace CapMachine.Wpf.Services RWInfo = RWInfo.PLCRead, }); - //Qcool_5K 计算 + //Qcool 计算 制冷量 TagManger.AddTag(new ShortValueTag() { Id = 33, - Name = "Qcool_5K[W]", - NameNoUnit = "Qcool_5K", - EnName = "Qcool_5K", + Name = "制冷量[W]", + NameNoUnit = "制冷量", + EnName = "Qcool", Group = "计算", MinValue = 0, MaxValue = 100, @@ -1102,9 +1102,9 @@ namespace CapMachine.Wpf.Services TagManger.AddTag(new ShortValueTag() { Id = 34, - Name = "Qcool_Customer[W]", - NameNoUnit = "Qcool_Customer", - EnName = "Qcool_Customer", + Name = "制热量[W]", + NameNoUnit = "制热量", + EnName = "Qheat", Group = "计算", MinValue = 0, MaxValue = 100, @@ -1118,33 +1118,33 @@ namespace CapMachine.Wpf.Services RWInfo = RWInfo.PCCalcu, }); - //Qheat 计算 - TagManger.AddTag(new ShortValueTag() - { - Id = 35, - Name = "Qheat[W]", - NameNoUnit = "Qheat", - EnName = "Qheat", - Group = "计算", - MinValue = 0, - MaxValue = 100, - IsMeter = false, - DecimalPoint = 1, - Precision = 1, - Unit = "W", - DataType = TagDataType.Short, - PVModel = new MeterValueAttrCell() { Address = "VW212", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + ////Qheat 计算 + //TagManger.AddTag(new ShortValueTag() + //{ + // Id = 35, + // Name = "Qheat[W]", + // NameNoUnit = "Qheat", + // EnName = "Qheat", + // Group = "计算", + // MinValue = 0, + // MaxValue = 100, + // IsMeter = false, + // DecimalPoint = 1, + // Precision = 1, + // Unit = "W", + // DataType = TagDataType.Short, + // PVModel = new MeterValueAttrCell() { Address = "VW212", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, - RWInfo = RWInfo.PCCalcu, - }); + // RWInfo = RWInfo.PCCalcu, + //}); //COP_Cooling_5K 计算 TagManger.AddTag(new ShortValueTag() { Id = 36, - Name = "COP_Cooling_5K[W]", - NameNoUnit = "COP_Cooling_5K", - EnName = "COP_Cooling_5K", + Name = "制冷性能系数[W]", + NameNoUnit = "制冷性能系数", + EnName = "COPCooling", Group = "计算", MinValue = 0, MaxValue = 100, @@ -1158,33 +1158,33 @@ namespace CapMachine.Wpf.Services RWInfo = RWInfo.PCCalcu, }); - //COP_Cooling_Customer 计算 - TagManger.AddTag(new ShortValueTag() - { - Id = 37, - Name = "COP_Cooling_Customer[W]", - NameNoUnit = "COP_Cooling_Customer", - EnName = "COP_Cooling_Customer", - Group = "计算", - MinValue = 0, - MaxValue = 100, - IsMeter = false, - DecimalPoint = 1, - Precision = 1, - Unit = "W", - DataType = TagDataType.Short, - PVModel = new MeterValueAttrCell() { Address = "VW216", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + ////COP_Cooling_Customer 计算 制冷性能系数 + //TagManger.AddTag(new ShortValueTag() + //{ + // Id = 37, + // Name = "COP_Cooling_Customer[W]", + // NameNoUnit = "COP_Cooling_Customer", + // EnName = "COP_Cooling_Customer", + // Group = "计算", + // MinValue = 0, + // MaxValue = 100, + // IsMeter = false, + // DecimalPoint = 1, + // Precision = 1, + // Unit = "W", + // DataType = TagDataType.Short, + // PVModel = new MeterValueAttrCell() { Address = "VW216", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, - RWInfo = RWInfo.PCCalcu, - }); + // RWInfo = RWInfo.PCCalcu, + //}); - //COP_Heating 计算 + //COP_Heating 计算 制热性能系数 TagManger.AddTag(new ShortValueTag() { Id = 38, - Name = "COP_Heating[W]", - NameNoUnit = "COP_Heating", - EnName = "COP_Heating", + Name = "制热性能系数[W]", + NameNoUnit = "制热性能系数", + EnName = "COPHeating", Group = "计算", MinValue = 0, MaxValue = 100, @@ -1198,12 +1198,12 @@ namespace CapMachine.Wpf.Services RWInfo = RWInfo.PCCalcu, }); - //VolumeEfficiency 计算 + //VolumeEfficiency 计算 容积效率 TagManger.AddTag(new ShortValueTag() { Id = 39, - Name = "VolumeEfficiency[%]", - NameNoUnit = "VolumeEfficiency", + Name = "容积效率[%]", + NameNoUnit = "容积效率", EnName = "VolumeEfficiency", Group = "计算", MinValue = 0, @@ -1218,12 +1218,12 @@ namespace CapMachine.Wpf.Services RWInfo = RWInfo.PCCalcu, }); - //IsentropyEfficiency 计算 + //IsentropyEfficiency 计算 等熵效率 TagManger.AddTag(new ShortValueTag() { Id = 40, - Name = "IsentropyEfficiency[%]", - NameNoUnit = "IsentropyEfficiency", + Name = "等熵效率[%]", + NameNoUnit = "等熵效率", EnName = "IsentropyEfficiency", Group = "计算", MinValue = 0, @@ -1239,25 +1239,25 @@ namespace CapMachine.Wpf.Services }); - //IsentropyEfficiency 计算 - TagManger.AddTag(new ShortValueTag() - { - Id = 41, - Name = "IsentropyEfficiency[%]", - NameNoUnit = "IsentropyEfficiency", - EnName = "IsentropyEfficiency", - Group = "计算", - MinValue = 0, - MaxValue = 100, - IsMeter = false, - DecimalPoint = 1, - Precision = 1, - Unit = "%", - DataType = TagDataType.Short, - PVModel = new MeterValueAttrCell() { Address = "VW222", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + ////IsentropyEfficiency 计算 等熵效率 + //TagManger.AddTag(new ShortValueTag() + //{ + // Id = 41, + // Name = "IsentropyEfficiency[%]", + // NameNoUnit = "IsentropyEfficiency", + // EnName = "IsentropyEfficiency", + // Group = "计算", + // MinValue = 0, + // MaxValue = 100, + // IsMeter = false, + // DecimalPoint = 1, + // Precision = 1, + // Unit = "%", + // DataType = TagDataType.Short, + // PVModel = new MeterValueAttrCell() { Address = "VW222", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, - RWInfo = RWInfo.PCCalcu, - }); + // RWInfo = RWInfo.PCCalcu, + //}); // 过冷度 计算 @@ -2644,7 +2644,8 @@ namespace CapMachine.Wpf.Services { if (itemBlockReadTag.Key.Contains("转速")) { - var dd = 1; + //转速不需要PLC读取 + continue; } //需要从PLC读取的标签才算 if ((itemBlockReadTag.Value.RWInfo == RWInfo.PLCRead || itemBlockReadTag.Value.RWInfo == RWInfo.Control) && TagManger.TryGetPVModel(itemBlockReadTag.Key, out MeterValueAttrCell pVModel)) diff --git a/CapMachine.Wpf/ViewModels/DialogMeterExdViewModel.cs b/CapMachine.Wpf/ViewModels/DialogMeterExdViewModel.cs new file mode 100644 index 0000000..7e221f8 --- /dev/null +++ b/CapMachine.Wpf/ViewModels/DialogMeterExdViewModel.cs @@ -0,0 +1,162 @@ +using CapMachine.Core; +using CapMachine.Wpf.Dtos; +using CapMachine.Wpf.Models; +using CapMachine.Wpf.Services; +using Prism.Commands; +using Prism.Services.Dialogs; +using System.Collections.ObjectModel; + +namespace CapMachine.Wpf.ViewModels +{ + public class DialogMeterExdViewModel : DialogViewModel + { + /// + /// 实例化函数 + /// + public DialogMeterExdViewModel(MachineRtDataService machineRtDataService) + { + Title = "拓展控制"; + MachineRtDataService = machineRtDataService; + } + + /// + /// 当前的仪表命令消息 + /// + public MeterCmdMsg CurMeterCmdMsg { get; set; } + + private string name; + /// + /// 名称 + /// + public string Name + { + get { return name; } + set { name = value; RaisePropertyChanged(); } + } + + private int _Value; + /// + /// 值和数据 + /// + public int Value + { + get { return _Value; } + set { _Value = value; RaisePropertyChanged(); } + } + + + private DelegateCommand _SendDataCmd; + /// + /// 发送数据命令 + /// + public DelegateCommand SendDataCmd + { + set + { + _SendDataCmd = value; + } + get + { + if (_SendDataCmd == null) + { + _SendDataCmd = new DelegateCommand(() => SendDataCmdMethod()); + } + return _SendDataCmd; + } + } + /// + /// 发送数据命令方法 + /// + private void SendDataCmdMethod() + { + switch (CurMeterCmdMsg.Name) + { + case "PTC功率": + //发送数据 SV2 + MachineRtDataService.SiemensDrive.Write("VW434", (short)Value); + break; + default: + break; + } + } + + + private DelegateCommand saveCmd; + /// + /// 保存命令 + /// + public DelegateCommand SaveCmd + { + set + { + saveCmd = value; + } + get + { + if (saveCmd == null) + { + saveCmd = new DelegateCommand(() => SaveCmdMethod()); + } + return saveCmd; + } + } + + /// + /// 保存命令方法 + /// + /// + private void SaveCmdMethod() + { + DialogParameters pars = new DialogParameters + { + { "NewData", "" } + }; + + RaiseRequestClose(new DialogResult(ButtonResult.OK, pars)); + } + + private DelegateCommand cancelCmd; + /// + /// 保存命令 + /// + public DelegateCommand CancelCmd + { + set + { + cancelCmd = value; + } + get + { + if (cancelCmd == null) + { + cancelCmd = new DelegateCommand(() => CancelCmdMethod()); + } + return cancelCmd; + } + } + + public MachineRtDataService MachineRtDataService { get; } + + + /// + /// 取消命令方法 + /// + /// + private void CancelCmdMethod() + { + RaiseRequestClose(new DialogResult(ButtonResult.Cancel)); + } + + /// + /// 窗口打开时的传递的参数 + /// + /// + public override void OnDialogOpened(IDialogParameters parameters) + { + //Name = parameters.GetValue("Name"); + CurMeterCmdMsg = parameters.GetValue("MeterCmdMsg"); + } + + + } +} diff --git a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs index 09f6361..d9ca4c9 100644 --- a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs +++ b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs @@ -54,7 +54,7 @@ namespace CapMachine.Wpf.ViewModels //ListTag = new ObservableCollection(TagManager.DicTags.Values.ToList()); RefreshListTag(); - ListMeterTag = TagManager.DicTags.Values.Where(a => a.Group == "程序").OrderBy(a=>a.Id).ToList(); + ListMeterTag = TagManager.DicTags.Values.Where(a => a.Group == "程序").OrderBy(a => a.Id).ToList(); SpeedTag = TagManager.DicTags.GetValueOrDefault("转速[rpm]"); ExPressTag = TagManager.DicTags.GetValueOrDefault("排气压力[BarA]"); @@ -454,6 +454,62 @@ namespace CapMachine.Wpf.ViewModels } + + private DelegateCommand _ExdCmd; + /// + /// 拓展操作指令 + /// + public DelegateCommand ExdCmd + { + set + { + _ExdCmd = value; + } + get + { + if (_ExdCmd == null) + { + _ExdCmd = new DelegateCommand((p) => ExdCmdCall(p)); + } + return _ExdCmd; + } + } + + /// + /// 操作指令执行方法 + /// + /// + private void ExdCmdCall(object Par) + { + if (Par != null && Par is Meter) + { + // + var MeterControl = (Meter)Par; + //Console.WriteLine($"{MeterControl.MeterName}-{MeterControl.AutoHandState}"); + //弹窗 + DialogService.ShowDialog("DialogMeterExdView", new DialogParameters() { { "MeterCmdMsg", new MeterCmdMsg() {Name= MeterControl.MeterName,Par="SV2" } } }, (par) => + { + if (par.Result == ButtonResult.OK) + { + //试验信息 + var ListChartTabGroupDto = par.Parameters.GetValue("ReturnValue"); + + + } + else if (par.Result == ButtonResult.Cancel) + { + //取消 + + } + + }); + } + + } + + + + private DelegateCommand _HandValueCmd; /// /// 手动给值 diff --git a/CapMachine.Wpf/Views/DialogMeterExdView.xaml b/CapMachine.Wpf/Views/DialogMeterExdView.xaml new file mode 100644 index 0000000..17e7e68 --- /dev/null +++ b/CapMachine.Wpf/Views/DialogMeterExdView.xaml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + +