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 { /// /// 实例化函数 /// /// /// /// /// /// /// public MonitorViewModel(ConfigService configService, IEventAggregator eventAggregator, DataRecordService dataRecordService, SysRunService sysRunService, AlarmService alarmService, MachineRtDataService machineRtDataService, IDialogService dialogService) { ConfigService = configService; //事件服务 _EventAggregator = eventAggregator; DataRecordService = dataRecordService; SysRunServer = sysRunService; AlarmService = alarmService; MachineRtDataService = machineRtDataService; DialogService = dialogService; TagManager = MachineRtDataService.TagManger; _EventAggregator.GetEvent().Subscribe(GetChartRtEvent); ListTag = new ObservableCollection(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() { 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 AlarmService AlarmService { get; } public MachineRtDataService MachineRtDataService { get; } public IDialogService DialogService { get; } public List ListChartRtValue { get; set; } = new List() { new ChartRtValue(){ Name="温度",Value=12.3,Unit="℃"}, new ChartRtValue(){ Name="压力",Value=12.3,Unit="bar"}, new ChartRtValue(){ Name="湿度",Value=12.3,Unit="%"}, }; private ObservableCollection _ListTag; /// /// 标签集合信息 /// public ObservableCollection ListTag { get { return _ListTag; } set { _ListTag = value; RaisePropertyChanged(); } } private List _ListMeterTag; /// /// 标签集合信息 仪表的参数 /// public List ListMeterTag { get { return _ListMeterTag; } set { _ListMeterTag = value; RaisePropertyChanged(); } } /// /// 标签中心 /// public TagManager TagManager { get; set; } private ObservableCollection _ListHandSwitchData; // /// 手自动切换集合数据 /// public ObservableCollection ListHandSwitchData { get { return _ListHandSwitchData; } set { _ListHandSwitchData = value; RaisePropertyChanged(); } } #region 工艺图数据 /// /// 转速标签 /// public ITag SpeedTag { get; set; } /// /// 排气压力 /// public ITag ExPressTag { get; set; } /// /// 排气温度 /// public ITag ExTempTag { get; set; } /// /// 吸气压力 /// public ITag InhPressTag { get; set; } /// /// 吸气温度 /// public ITag InhTempTag { get; set; } /// /// 通讯母线电压 /// public ITag ComCapBusVolTag { get; set; } /// /// 通讯母线电流 /// public ITag ComCapBusCurTag { get; set; } /// /// 通讯功率 /// public ITag ComCapPwTag { get; set; } /// /// 吸气混合器温度 /// public ITag OS2TempTag { get; set; } /// /// 膨胀阀前温度 /// public ITag TxvFrTempTag { get; set; } /// /// 膨胀阀前压力 /// public ITag TxvFrPressTag { get; set; } /// /// 冷凝器出口水温 /// public ITag Cond1TempTag { get; set; } /// /// 冷凝器进口温度 /// public ITag CondInTempTag { get; set; } #endregion private DelegateCommand _OperCmd; /// /// 操作指令你 /// public DelegateCommand OperCmd { set { _OperCmd = value; } get { if (_OperCmd == null) { _OperCmd = new DelegateCommand((p) => OperCmdCall(p)); } return _OperCmd; } } /// /// 操作指令执行方法 /// /// 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 _AutoHandCmd; /// /// 操作指令你 /// public DelegateCommand AutoHandCmd { set { _AutoHandCmd = value; } get { if (_AutoHandCmd == null) { _AutoHandCmd = new DelegateCommand((p) => AutoHandCmdCall(p)); } return _AutoHandCmd; } } /// /// 操作指令执行方法 /// /// 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 _HandValueCmd; /// /// 手动给值 /// public DelegateCommand HandValueCmd { set { _HandValueCmd = value; } get { if (_HandValueCmd == null) { _HandValueCmd = new DelegateCommand((p) => HandValueCmdCall(p)); } return _HandValueCmd; } } /// /// 手动给值执行方法 /// /// 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; /// /// 手动的值,直接和控件绑定,初始的时候用,也可以用做更新采集的数据到界面上 /// 当前是所有的控件都绑定的 /// public int HandValueParameter { get { return _HandValueParameter; } set { _HandValueParameter = value; RaisePropertyChanged(); } } private DelegateCommand _HandEnableCmd; /// /// 阀门的手自动切换 /// public DelegateCommand HandEnableCmd { set { _HandEnableCmd = value; } get { if (_HandEnableCmd == null) { _HandEnableCmd = new DelegateCommand((p) => HandEnableCmdCall(p)); } return _HandEnableCmd; } } /// /// 操作指令执行方法 /// /// 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("ReturnValue"); } else if (par.Result == ButtonResult.Cancel) { //取消 } }); } /// /// 获取曲线的实时值 /// 数据是发布过来 /// /// /// private void GetChartRtEvent(List RtData) { //ListChartRtValue = RtData; } } }