Files
CapMachine/CapMachine.Wpf/ViewModels/MonitorViewModel.cs

454 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using CapMachine.Core;
using CapMachine.Shared.Controls;
using CapMachine.Wpf.Dtos;
using CapMachine.Wpf.Models;
using CapMachine.Wpf.Models.Tag;
using CapMachine.Wpf.PrismEvent;
using CapMachine.Wpf.Services;
using ImTools;
using Prism.Commands;
using Prism.Events;
using Prism.Services.Dialogs;
using System.Collections.ObjectModel;
using System.Windows.Controls.Primitives;
namespace CapMachine.Wpf.ViewModels
{
public class MonitorViewModel : NavigationViewModel
{
/// <summary>
/// 实例化函数
/// </summary>
/// <param name="configService"></param>
/// <param name="eventAggregator"></param>
/// <param name="dataRecordService"></param>
/// <param name="sysRunService"></param>
/// <param name="machineRtDataService"></param>
/// <param name="dialogService"></param>
public MonitorViewModel(ConfigService configService, IEventAggregator eventAggregator,
DataRecordService dataRecordService, SysRunService sysRunService,
MachineRtDataService machineRtDataService, IDialogService dialogService)
{
ConfigService = configService;
//事件服务
_EventAggregator = eventAggregator;
DataRecordService = dataRecordService;
SysRunServer = sysRunService;
MachineRtDataService = machineRtDataService;
DialogService = dialogService;
TagManager = MachineRtDataService.TagManger;
_EventAggregator.GetEvent<ChartRtEvent>().Subscribe(GetChartRtEvent);
ListTag = new ObservableCollection<ITag>(TagManager.DicTags.Values.ToList());
ListMeterTag = TagManager.DicTags.Values.Where(a => a.IsMeter == true).ToList();
SpeedTag = TagManager.DicTags.GetValueOrDefault("转速[rpm]");
ExPressTag = TagManager.DicTags.GetValueOrDefault("排气压力[MpaA]");
ExTempTag = TagManager.DicTags.GetValueOrDefault("排气温度[℃]");
InhPressTag = TagManager.DicTags.GetValueOrDefault("吸气压力[MpaA]");
InhTempTag = TagManager.DicTags.GetValueOrDefault("吸气温度[℃]");
ComCapBusVolTag = TagManager.DicTags.GetValueOrDefault("通讯母线电压[V]");
ComCapBusCurTag = TagManager.DicTags.GetValueOrDefault("通讯母线电流[A]");
ComCapPwTag = TagManager.DicTags.GetValueOrDefault("通讯功率[W]");
OS2TempTag = TagManager.DicTags.GetValueOrDefault("吸气混合器温度[℃]");
TxvFrTempTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前温度[℃]");
TxvFrPressTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前压力[MpaA]");
Cond1TempTag = TagManager.DicTags.GetValueOrDefault("冷凝器出口水温[℃]");
CondInTempTag = TagManager.DicTags.GetValueOrDefault("冷凝器进口温度[℃]");
ListHandSwitchData = new ObservableCollection<HandSwitchData>()
{
new HandSwitchData(){Name="自动",ActionAddress="M0.0",StateAddress="M0.0" },
new HandSwitchData(){Name="抽真空",ActionAddress="M0.1",StateAddress="M0.1" },
new HandSwitchData(){Name="复位",ActionAddress="M0.2",StateAddress="M0.2" },
new HandSwitchData(){Name="消音",ActionAddress="M0.3",StateAddress="M0.3" },
new HandSwitchData(){Name="HV电源",ActionAddress="M1.1",StateAddress="Q0.1" },
new HandSwitchData(){Name="HV启动",ActionAddress="M1.2",StateAddress="Q0.6" },
new HandSwitchData(){Name="LV电源",ActionAddress="M1.3",StateAddress="Q0.2" },
new HandSwitchData(){Name="水泵",ActionAddress="M1.4",StateAddress="Q0.3" },
new HandSwitchData(){Name="冷凝器电加热",ActionAddress="M1.5",StateAddress="Q0.4" },
new HandSwitchData(){Name="吸气混合器电加热",ActionAddress="M1.6",StateAddress="Q0.5" },
new HandSwitchData(){Name="吸排气球阀",ActionAddress="M1.7",StateAddress="Q0.7" },
new HandSwitchData(){Name="试验箱",ActionAddress="M2.0",StateAddress="VW32" },
new HandSwitchData(){Name="水SEV1",ActionAddress="M2.1",StateAddress="Q1.0" },
new HandSwitchData(){Name="水SEV2",ActionAddress="M2.2",StateAddress="Q1.1" },
new HandSwitchData(){Name="HCV1",ActionAddress="M2.3",StateAddress="Q1.2" },
new HandSwitchData(){Name="HCV2",ActionAddress="M2.4",StateAddress="Q1.3" },
new HandSwitchData(){Name="ECV1",ActionAddress="M2.5",StateAddress="Q1.4" },
new HandSwitchData(){Name="ECV2",ActionAddress="M2.6",StateAddress="Q1.5" },
new HandSwitchData(){Name="使能",ActionAddress="M2.7",StateAddress="V15.1" },
};
}
public ConfigService ConfigService { get; }
private IEventAggregator _EventAggregator { get; set; }
public DataRecordService DataRecordService { get; }
public SysRunService SysRunServer { get; }
public MachineRtDataService MachineRtDataService { get; }
public IDialogService DialogService { get; }
public List<ChartRtValue> ListChartRtValue { get; set; } = new List<ChartRtValue>()
{
new ChartRtValue(){ Name="温度",Value=12.3,Unit="℃"},
new ChartRtValue(){ Name="压力",Value=12.3,Unit="bar"},
new ChartRtValue(){ Name="湿度",Value=12.3,Unit="%"},
};
private ObservableCollection<ITag> _ListTag;
/// <summary>
/// 标签集合信息
/// </summary>
public ObservableCollection<ITag> ListTag
{
get { return _ListTag; }
set { _ListTag = value; RaisePropertyChanged(); }
}
private List<ITag> _ListMeterTag;
/// <summary>
/// 标签集合信息 仪表的参数
/// </summary>
public List<ITag> ListMeterTag
{
get { return _ListMeterTag; }
set { _ListMeterTag = value; RaisePropertyChanged(); }
}
/// <summary>
/// 标签中心
/// </summary>
public TagManager TagManager { get; set; }
private ObservableCollection<HandSwitchData> _ListHandSwitchData;
// <summary>
/// 手自动切换集合数据
/// </summary>
public ObservableCollection<HandSwitchData> ListHandSwitchData
{
get { return _ListHandSwitchData; }
set { _ListHandSwitchData = value; RaisePropertyChanged(); }
}
#region
/// <summary>
/// 转速标签
/// </summary>
public ITag SpeedTag { get; set; }
/// <summary>
/// 排气压力
/// </summary>
public ITag ExPressTag { get; set; }
/// <summary>
/// 排气温度
/// </summary>
public ITag ExTempTag { get; set; }
/// <summary>
/// 吸气压力
/// </summary>
public ITag InhPressTag { get; set; }
/// <summary>
/// 吸气温度
/// </summary>
public ITag InhTempTag { get; set; }
/// <summary>
/// 通讯母线电压
/// </summary>
public ITag ComCapBusVolTag { get; set; }
/// <summary>
/// 通讯母线电流
/// </summary>
public ITag ComCapBusCurTag { get; set; }
/// <summary>
/// 通讯功率
/// </summary>
public ITag ComCapPwTag { get; set; }
/// <summary>
/// 吸气混合器温度
/// </summary>
public ITag OS2TempTag { get; set; }
/// <summary>
/// 膨胀阀前温度
/// </summary>
public ITag TxvFrTempTag { get; set; }
/// <summary>
/// 膨胀阀前压力
/// </summary>
public ITag TxvFrPressTag { get; set; }
/// <summary>
/// 冷凝器出口水温
/// </summary>
public ITag Cond1TempTag { get; set; }
/// <summary>
/// 冷凝器进口温度
/// </summary>
public ITag CondInTempTag { get; set; }
#endregion
private DelegateCommand<string> _OperCmd;
/// <summary>
/// 操作指令你
/// </summary>
public DelegateCommand<string> OperCmd
{
set
{
_OperCmd = value;
}
get
{
if (_OperCmd == null)
{
_OperCmd = new DelegateCommand<string>((p) => OperCmdCall(p));
}
return _OperCmd;
}
}
/// <summary>
/// 操作指令执行方法
/// </summary>
/// <exception cref="NotImplementedException"></exception>
private void OperCmdCall(string Par)
{
switch (Par)
{
case "开始":
this.SysRunServer.MachineRunState1.FireStart();
DataRecordService.StartRecord();
break;
case "结束":
this.SysRunServer.MachineRunState1.FireEnd();
DataRecordService.EndRecord();
break;
case "复位":
this.SysRunServer.MachineRunState1.FireReset();
DataRecordService.EndRecord();
break;
case "消音":
//ShowDialogExpInfo();
break;
case "试验信息":
ShowDialogExpInfo();
break;
default:
break;
}
}
private DelegateCommand<object> _AutoHandCmd;
/// <summary>
/// 操作指令你
/// </summary>
public DelegateCommand<object> AutoHandCmd
{
set
{
_AutoHandCmd = value;
}
get
{
if (_AutoHandCmd == null)
{
_AutoHandCmd = new DelegateCommand<object>((p) => AutoHandCmdCall(p));
}
return _AutoHandCmd;
}
}
/// <summary>
/// 操作指令执行方法
/// </summary>
/// <exception cref="NotImplementedException"></exception>
private void AutoHandCmdCall(object Par)
{
if (Par != null && Par is Meter)
{
//True-手动False-自动
var MeterControl = (Meter)Par;
Console.WriteLine($"{MeterControl.MeterName}-{MeterControl.AutoHandState}");
//
foreach (var item in TagManager.DicTags)
{
if (item.Value.NameNoUnit == MeterControl.MeterName)
{
if (!string.IsNullOrEmpty(item.Value.AutoHandSwitchAddress))
{
var Result = MachineRtDataService.SiemensDrive.Write(item.Value.AutoHandSwitchAddress, MeterControl.AutoHandState==true?1:0);
}
break;
}
}
}
}
private DelegateCommand<object> _HandValueCmd;
/// <summary>
/// 手动给值
/// </summary>
public DelegateCommand<object> HandValueCmd
{
set
{
_HandValueCmd = value;
}
get
{
if (_HandValueCmd == null)
{
_HandValueCmd = new DelegateCommand<object>((p) => HandValueCmdCall(p));
}
return _HandValueCmd;
}
}
/// <summary>
/// 手动给值执行方法
/// </summary>
/// <exception cref="NotImplementedException"></exception>
private void HandValueCmdCall(object Par)
{
if (Par != null && Par is MeterChannelValue)
{
var ChannelValue = (MeterChannelValue)Par;
Console.WriteLine($"{ChannelValue.Name}-{ChannelValue.Value}-{ChannelValue.Type}");
//
foreach (var item in TagManager.DicTags)
{
if (item.Value.NameNoUnit == ChannelValue.Name)
{
switch (ChannelValue.Type)
{
case "MV":
if (!string.IsNullOrEmpty(item.Value.MVAddress))
{
var Result = MachineRtDataService.SiemensDrive.Write(item.Value.MVAddress, (short)((double)ChannelValue.Value* item.Value.Precision));
break;
}
break;
case "SV":
if (!string.IsNullOrEmpty(item.Value.SVAddress))
{
var Result = MachineRtDataService.SiemensDrive.Write(item.Value.SVAddress, (short)((double)ChannelValue.Value * item.Value.Precision));
break;
}
break;
default:
break;
}
}
}
}
}
private int _HandValueParameter = 80;
/// <summary>
/// 手动的值,直接和控件绑定,初始的时候用,也可以用做更新采集的数据到界面上
/// 当前是所有的控件都绑定的
/// </summary>
public int HandValueParameter
{
get { return _HandValueParameter; }
set { _HandValueParameter = value; RaisePropertyChanged(); }
}
private DelegateCommand<object> _HandEnableCmd;
/// <summary>
/// 阀门的手自动切换
/// </summary>
public DelegateCommand<object> HandEnableCmd
{
set
{
_HandEnableCmd = value;
}
get
{
if (_HandEnableCmd == null)
{
_HandEnableCmd = new DelegateCommand<object>((p) => HandEnableCmdCall(p));
}
return _HandEnableCmd;
}
}
/// <summary>
/// 操作指令执行方法
/// </summary>
/// <exception cref="NotImplementedException"></exception>
private void HandEnableCmdCall(object Par)
{
if (Par != null && Par is ToggleButton)
{
var ControlData = Par as ToggleButton;
var Name = ControlData.ToolTip;
var Data = ControlData.IsChecked;
//ToDo cmd
var FindData = ListHandSwitchData.FirstOrDefault(a => a.Name == Name);
if (FindData != null)
{
//ToDo
Console.WriteLine($"{FindData.Name}-{FindData.ActionAddress}-{FindData.StateAddress}-{Data}");
var Result = MachineRtDataService.SiemensDrive.Write(FindData.ActionAddress, true);
//FindData.State = false;
}
}
}
private void ShowDialogExpInfo()
{
//弹窗
DialogService.ShowDialog("DialogExpInfoView", new DialogParameters() { { "Name", "" } }, (par) =>
{
if (par.Result == ButtonResult.OK)
{
//试验信息
var ListChartTabGroupDto = par.Parameters.GetValue<ExpInfoDto>("ReturnValue");
}
else if (par.Result == ButtonResult.Cancel)
{
//取消
}
});
}
/// <summary>
/// 获取曲线的实时值
/// 数据是发布过来
/// </summary>
/// <param name="value"></param>
/// <exception cref="NotImplementedException"></exception>
private void GetChartRtEvent(List<ChartRtValue> RtData)
{
//ListChartRtValue = RtData;
}
}
}