From e5ebd9113a34ad171b005afb82939e2f7ae9515a Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Mon, 6 Jan 2025 10:06:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86Tag=E7=9A=84?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=B1=9E=E6=80=A7=E5=92=8CCan=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=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.Wpf/CanDrive/ToomossCan.cs | 2 + .../Models/AutoHandSwtichCondition.cs | 64 ++++++++++++++++ CapMachine.Wpf/Models/Tag/ITag.cs | 2 +- CapMachine.Wpf/Models/Tag/Tag.cs | 4 +- CapMachine.Wpf/Services/CanDriveService.cs | 2 +- .../Services/MachineRtDataService.cs | 76 +++++++++++-------- .../ViewModels/CANConfigViewModel.cs | 13 ++++ CapMachine.Wpf/ViewModels/MonitorViewModel.cs | 35 +++++++-- CapMachine.Wpf/Views/CANConfigView.xaml | 6 +- CapMachine.Wpf/Views/MonitorView.xaml | 14 ++-- CapMachine.Wpf/Views/ProConfigView.xaml | 2 +- 11 files changed, 166 insertions(+), 54 deletions(-) create mode 100644 CapMachine.Wpf/Models/AutoHandSwtichCondition.cs diff --git a/CapMachine.Wpf/CanDrive/ToomossCan.cs b/CapMachine.Wpf/CanDrive/ToomossCan.cs index def1ba3..b90cbf3 100644 --- a/CapMachine.Wpf/CanDrive/ToomossCan.cs +++ b/CapMachine.Wpf/CanDrive/ToomossCan.cs @@ -675,6 +675,8 @@ namespace CapMachine.Wpf.CanDrive //关闭设备 USB_DEVICE.USB_CloseDevice(DevHandle); OpenState = false; + IsCycleRevice = false; + IsCycleSend = false; } } diff --git a/CapMachine.Wpf/Models/AutoHandSwtichCondition.cs b/CapMachine.Wpf/Models/AutoHandSwtichCondition.cs new file mode 100644 index 0000000..1428e0e --- /dev/null +++ b/CapMachine.Wpf/Models/AutoHandSwtichCondition.cs @@ -0,0 +1,64 @@ +using HslCommunication; +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.IO.Ports; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models +{ + /// + /// 手自动切换的条件 + /// + public class AutoHandSwtichCondition : BindableBase + { + private bool _IsCanSwitch; + /// + /// 是否可切换 + /// + public bool IsCanSwitch + { + get { return _IsCanSwitch; } + set { _IsCanSwitch = value; RaisePropertyChanged(); } + } + + /// + /// 全部报警地址 + /// + public string? AlarmAddress { get; set; } = "V3.0"; + + /// + /// 报警结果 + /// + public OperateResult? AlarmStateResult { get; set; } + + /// + /// 手动状态地址 + /// + public string? HandStateAddress { get; set; } = "M0.0"; + + /// + /// 手动状态结果 + /// + public OperateResult? HandStateResult { get; set; } + + /// + /// 汇总结果 + /// + /// + /// + /// + public void SumResult() + { + if (AlarmStateResult!.IsSuccess && HandStateResult!.IsSuccess) + { + //IsCanSwitch = AlarmStateResult.Content==false && HandStateResult.Content==false; + IsCanSwitch = HandStateResult.Content==false; + //return IsCanSwitch; + } + + } + } +} diff --git a/CapMachine.Wpf/Models/Tag/ITag.cs b/CapMachine.Wpf/Models/Tag/ITag.cs index ec1a49a..a7d5cbe 100644 --- a/CapMachine.Wpf/Models/Tag/ITag.cs +++ b/CapMachine.Wpf/Models/Tag/ITag.cs @@ -54,7 +54,7 @@ namespace CapMachine.Wpf.Models.Tag /// /// 工程值 Mv /// - short EngMvValue { get; set; } + double EngMvValue { get; set; } /// /// 工程值的字符串 Mv diff --git a/CapMachine.Wpf/Models/Tag/Tag.cs b/CapMachine.Wpf/Models/Tag/Tag.cs index 87fb167..719dc74 100644 --- a/CapMachine.Wpf/Models/Tag/Tag.cs +++ b/CapMachine.Wpf/Models/Tag/Tag.cs @@ -235,11 +235,11 @@ namespace CapMachine.Wpf.Models.Tag } - private short _EngMvValue; + private double _EngMvValue; /// /// 工程值 MV /// - public short EngMvValue + public double EngMvValue { get { return _EngMvValue; } set diff --git a/CapMachine.Wpf/Services/CanDriveService.cs b/CapMachine.Wpf/Services/CanDriveService.cs index e1751b3..5ecfe3b 100644 --- a/CapMachine.Wpf/Services/CanDriveService.cs +++ b/CapMachine.Wpf/Services/CanDriveService.cs @@ -143,7 +143,7 @@ namespace CapMachine.Wpf.Services { if (ToomossCanDrive.IsCycleRevice == false) { - if (CmdData.Count > 0) + if (ListCanDbcModel.Count > 0) { ToomossCanDrive.IsCycleRevice = true; ToomossCanDrive.StartCycleReviceCanMsg(); diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index 6f88798..0cfd352 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -96,6 +96,11 @@ namespace CapMachine.Wpf.Services /// public List HistoryData { get; set; } = new List(); + /// + /// 手自动切换的条件 + /// + public AutoHandSwtichCondition AutoHandSwtichConditionState { get; set; } = new AutoHandSwtichCondition(); + /// /// 实例化函数 /// @@ -125,7 +130,7 @@ namespace CapMachine.Wpf.Services #region 标签管理 //【测试】 - TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0 }); + //TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0 }); //TagManger.AddTag(new Tag("排气压力", "排气压力[BarA]", "ExPress", "程序", "VW15002", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("吸气压力", "吸气压力[BarA]", "InhPress", "程序", "VW15004", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 }); @@ -203,9 +208,9 @@ namespace CapMachine.Wpf.Services Unit = "MpaA", PVAddress = "VW102",//地址信息 SVAddress = "VW202", - MVAddress = "VW246", + MVAddress = "VW242", IsMeter = true, - AutoHandSwitchAddress = "VW244", + AutoHandSwitchAddress = "VW240", Precision = 1000, DecimalPoint = 3, Samp = 1, @@ -223,9 +228,9 @@ namespace CapMachine.Wpf.Services Unit = "MpaA", PVAddress = "VW104",//地址信息 SVAddress = "VW204", - MVAddress = "VW250", + MVAddress = "VW246", IsMeter = true, - AutoHandSwitchAddress = "VW248", + AutoHandSwitchAddress = "VW244", Precision = 1000, DecimalPoint = 3, Samp = 1, @@ -243,9 +248,9 @@ namespace CapMachine.Wpf.Services Unit = "℃", PVAddress = "VW106",//地址信息 SVAddress = "VW206", - MVAddress = "VW254", + MVAddress = "VW250", IsMeter = true, - AutoHandSwitchAddress = "VW252", + AutoHandSwitchAddress = "VW248", Precision = 10, DecimalPoint = 1, Samp = 1, @@ -263,9 +268,9 @@ namespace CapMachine.Wpf.Services Unit = "℃", PVAddress = "VW108",//地址信息 SVAddress = "VW208", - MVAddress = "VW258", + MVAddress = "VW254", IsMeter = true, - AutoHandSwitchAddress = "VW256", + AutoHandSwitchAddress = "VW252", Precision = 10, DecimalPoint = 1, Samp = 1, @@ -283,9 +288,9 @@ namespace CapMachine.Wpf.Services Unit = "℃", PVAddress = "VW110",//地址信息 SVAddress = "VW210", - MVAddress = "VW262", + MVAddress = "VW258", IsMeter = true, - AutoHandSwitchAddress = "VW260", + AutoHandSwitchAddress = "VW256", Precision = 10, DecimalPoint = 1, Samp = 1, @@ -303,9 +308,9 @@ namespace CapMachine.Wpf.Services Unit = "V", PVAddress = "VW112",//地址信息 SVAddress = "VW212", - MVAddress = "", + MVAddress = "VW262", IsMeter = true, - AutoHandSwitchAddress = "", + AutoHandSwitchAddress = "VW260", Precision = 10, DecimalPoint = 1, Samp = 1, @@ -1097,26 +1102,26 @@ namespace CapMachine.Wpf.Services TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.IsShow = IsValueShow; - //仿真数据 - TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = (short)Random.Next(1, 100); - TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = (short)Random.Next(1, 100) * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; - LinkState = false; + ////仿真数据 + //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = (short)Random.Next(1, 100); + //TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = (short)Random.Next(1, 100) * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; + //LinkState = false; - ////PLC 数据 - //if (!string.IsNullOrEmpty(itemTag.Value.PVAddress)) - //{ - // OperateResultShort = SiemensDrive.ReadInt16(itemTag.Value.PVAddress); - // if (OperateResultShort.IsSuccess) - // { - // TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = SiemensDrive.ReadInt16(itemTag.Value.PVAddress).Content; - // TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; - // LinkState = true; - // } - // else - // { - // LinkState = false; - // } - //} + //PLC 数据 + if (!string.IsNullOrEmpty(itemTag.Value.PVAddress)) + { + OperateResultShort = SiemensDrive.ReadInt16(itemTag.Value.PVAddress); + if (OperateResultShort.IsSuccess) + { + TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = SiemensDrive.ReadInt16(itemTag.Value.PVAddress).Content; + TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; + LinkState = true; + } + else + { + LinkState = false; + } + } if (!string.IsNullOrEmpty(itemTag.Value.SVAddress)) { @@ -1139,7 +1144,7 @@ namespace CapMachine.Wpf.Services if (OperateResultMVShort.IsSuccess) { //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = OperateResultMVShort.Content; - TagManger.GetTagByName(itemTag.Value.Name).EngMvValue = OperateResultMVShort.Content; + TagManger.GetTagByName(itemTag.Value.Name).EngMvValue = OperateResultMVShort.Content*1.0/10; LinkState = true; } else @@ -1148,6 +1153,11 @@ namespace CapMachine.Wpf.Services } } + //手自动切换按钮条件 + AutoHandSwtichConditionState.AlarmStateResult= SiemensDrive.ReadBool(AutoHandSwtichConditionState.AlarmAddress); + AutoHandSwtichConditionState.HandStateResult= SiemensDrive.ReadBool(AutoHandSwtichConditionState.HandStateAddress); + AutoHandSwtichConditionState.SumResult(); + break; default: break; diff --git a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs index 1a602b9..60335c6 100644 --- a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs @@ -407,6 +407,19 @@ namespace CapMachine.Wpf.ViewModels { ListWriteCanLinRWConfigDto = new ObservableCollection(Mapper.Map>(WirteData)); + //加载把当前的配置信息给指令 + CanDriveService.CmdData.Clear(); + foreach (var item in WirteData) + { + CanDriveService.CmdData.Add(new CanCmdData() + { + ConfigName = item.Name, + MsgName = item.MsgFrameName, + SignalName = item.SignalName, + SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0, + }); + } + } var ReadData = SelectCanLinConfigPro.CanLinConfigContents!.Where(a => a.RWInfo == RW.Read).ToList(); if (ReadData != null && ReadData.Count > 0) diff --git a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs index e374a9e..baf197a 100644 --- a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs +++ b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs @@ -334,10 +334,10 @@ namespace CapMachine.Wpf.ViewModels { switch (ChannelValue.Type) { - case "MV": + case "MV"://10的倍率 if (!string.IsNullOrEmpty(item.Value.MVAddress)) { - var Result = MachineRtDataService.SiemensDrive.Write(item.Value.MVAddress, (short)((double)ChannelValue.Value)); + var Result = MachineRtDataService.SiemensDrive.Write(item.Value.MVAddress, (short)((double)ChannelValue.Value * 10)); break; } break; @@ -405,13 +405,36 @@ namespace CapMachine.Wpf.ViewModels 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, (bool)Data); - if (Result.IsSuccess) + if (Name == "自动") { + //手动切换是可以自由的切换,不受限制 + //ToDo + Console.WriteLine($"{FindData.Name}-{FindData.ActionAddress}-{FindData.StateAddress}-{Data}"); + var Result = MachineRtDataService.SiemensDrive.Write(FindData.ActionAddress, (bool)Data); + if (Result.IsSuccess) + { + + } } + else + { + //其他的手自动切换受条件过滤处理 + if (!MachineRtDataService.AutoHandSwtichConditionState.IsCanSwitch) + { + System.Windows.MessageBox.Show("当前的切换需要在【手动】和【无报警】的情况下进行"); + return; + } + + //满足条件进行操作,只进行True操作,PLC会处理的 + Console.WriteLine($"{FindData.Name}-{FindData.ActionAddress}-{FindData.StateAddress}-{Data}"); + var Result = MachineRtDataService.SiemensDrive.Write(FindData.ActionAddress, true); + if (Result.IsSuccess) + { + + } + } + //FindData.State = false; } } diff --git a/CapMachine.Wpf/Views/CANConfigView.xaml b/CapMachine.Wpf/Views/CANConfigView.xaml index 2ddc023..5c9df9d 100644 --- a/CapMachine.Wpf/Views/CANConfigView.xaml +++ b/CapMachine.Wpf/Views/CANConfigView.xaml @@ -273,7 +273,7 @@