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