From 06ac590208c63607328fe5589987d2300844648a Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Thu, 14 Aug 2025 17:28:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=8B=E7=BC=A9=E6=9C=BAPTC=20=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20=E5=8F=82=E6=95=B0=E6=8E=A7=E5=88=B6=EF=BC=8C?= =?UTF-8?q?=E7=94=B1=E8=B7=9F=E9=9A=8F=E9=80=9F=E5=BA=A6=E5=88=B0=E5=8D=95?= =?UTF-8?q?=E4=B8=AA=E5=A4=A7=E5=8F=82=E6=95=B0=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MeterConfig/MeterPTCEntTemp.cs | 1 + CapMachine.Model/MeterConfig/MeterPTCFlow.cs | 1 + CapMachine.Model/MeterConfig/MeterPTCPw.cs | 3 +- CapMachine.Model/MeterConfig/MeterPTCPw2.cs | 3 +- .../MeterConfig/MeterPTCWaterFlow.cs | 85 + .../MeterConfig/MeterPTCWaterTemp.cs | 85 + CapMachine.Model/MeterConfig/MeterSpeed.cs | 48 +- CapMachine.Model/ProStep.cs | 30 +- .../ChannelModel/ProRunChannelData.cs | 6 + CapMachine.Wpf/Dtos/ProStepDto.cs | 36 +- .../Models/ProModelPars/ProExFlag.cs | 50 + .../Models/ProModelPars/ProExModel.cs | 9 + .../Services/MachineRtDataService.cs | 396 ++- CapMachine.Wpf/Services/ProRuntimeService.cs | 508 ++- .../ViewModels/ProConfigViewModel.cs | 2993 +++++++++++++---- CapMachine.Wpf/Views/ProConfigView.xaml | 153 +- 16 files changed, 3545 insertions(+), 862 deletions(-) create mode 100644 CapMachine.Model/MeterConfig/MeterPTCWaterFlow.cs create mode 100644 CapMachine.Model/MeterConfig/MeterPTCWaterTemp.cs create mode 100644 CapMachine.Wpf/Models/ProModelPars/ProExFlag.cs diff --git a/CapMachine.Model/MeterConfig/MeterPTCEntTemp.cs b/CapMachine.Model/MeterConfig/MeterPTCEntTemp.cs index 257c952..cc2ba6c 100644 --- a/CapMachine.Model/MeterConfig/MeterPTCEntTemp.cs +++ b/CapMachine.Model/MeterConfig/MeterPTCEntTemp.cs @@ -9,6 +9,7 @@ namespace CapMachine.Model { /// /// PTC入口温度(℃) 表设置 + /// 给冷水机组 /// [Table(Name = "MeterPTCEntTemp")] public class MeterPTCEntTemp diff --git a/CapMachine.Model/MeterConfig/MeterPTCFlow.cs b/CapMachine.Model/MeterConfig/MeterPTCFlow.cs index f02f312..f76537b 100644 --- a/CapMachine.Model/MeterConfig/MeterPTCFlow.cs +++ b/CapMachine.Model/MeterConfig/MeterPTCFlow.cs @@ -9,6 +9,7 @@ namespace CapMachine.Model { /// /// PTC流量 表设置 + /// 给冷水机组 /// [Table(Name = "MeterPTCFlow")] public class MeterPTCFlow diff --git a/CapMachine.Model/MeterConfig/MeterPTCPw.cs b/CapMachine.Model/MeterConfig/MeterPTCPw.cs index 6c908b5..4ae4963 100644 --- a/CapMachine.Model/MeterConfig/MeterPTCPw.cs +++ b/CapMachine.Model/MeterConfig/MeterPTCPw.cs @@ -3,7 +3,8 @@ namespace CapMachine.Model { /// - /// PTC功率 表设置 + /// PTC功率 表设置 给压缩机的PTC使用 + /// PTC SV1 PTC功率给定 /// [Table(Name = "MeterPTCPw")] public class MeterPTCPw diff --git a/CapMachine.Model/MeterConfig/MeterPTCPw2.cs b/CapMachine.Model/MeterConfig/MeterPTCPw2.cs index d7c31c8..164d4c1 100644 --- a/CapMachine.Model/MeterConfig/MeterPTCPw2.cs +++ b/CapMachine.Model/MeterConfig/MeterPTCPw2.cs @@ -3,7 +3,8 @@ namespace CapMachine.Model.MeterConfig { /// - /// PTC功率 表设置 + /// PTC功率2 表设置 给压缩机的PTC使用 + /// PTC SV2 PTC功率给定 /// [Table(Name = "MeterPTCPw2")] public class MeterPTCPw2 diff --git a/CapMachine.Model/MeterConfig/MeterPTCWaterFlow.cs b/CapMachine.Model/MeterConfig/MeterPTCWaterFlow.cs new file mode 100644 index 0000000..acd09eb --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterPTCWaterFlow.cs @@ -0,0 +1,85 @@ +using FreeSql.DataAnnotations; + +namespace CapMachine.Model +{ + /// + /// PTC水流量 表设置 给压缩机的PTC使用 + /// PTC水流量 + /// + [Table(Name = "MeterPTCWaterFlow")] + public class MeterPTCWaterFlow + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public int KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + /// + /// PID No + /// + [Column(Name = "PIDNo")] + public int PIDNo { get; set; } + + /// + /// 限幅 No + /// + [Column(Name = "LimitNo")] + public int LimitNo { get; set; } + + /// + /// 报警 No + /// + [Column(Name = "AlarmNo")] + public int AlarmNo { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterPTCWaterTemp.cs b/CapMachine.Model/MeterConfig/MeterPTCWaterTemp.cs new file mode 100644 index 0000000..27debad --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterPTCWaterTemp.cs @@ -0,0 +1,85 @@ +using FreeSql.DataAnnotations; + +namespace CapMachine.Model +{ + /// + /// PTC目标水温 表设置 给压缩机的PTC使用 + /// PTC目标水温 + /// + [Table(Name = "MeterPTCWaterTemp")] + public class MeterPTCWaterTemp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public int KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + /// + /// PID No + /// + [Column(Name = "PIDNo")] + public int PIDNo { get; set; } + + /// + /// 限幅 No + /// + [Column(Name = "LimitNo")] + public int LimitNo { get; set; } + + /// + /// 报警 No + /// + [Column(Name = "AlarmNo")] + public int AlarmNo { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterSpeed.cs b/CapMachine.Model/MeterConfig/MeterSpeed.cs index c9bfce0..96cb77d 100644 --- a/CapMachine.Model/MeterConfig/MeterSpeed.cs +++ b/CapMachine.Model/MeterConfig/MeterSpeed.cs @@ -106,33 +106,33 @@ namespace CapMachine.Model [Column(Name = "PTCEnable")] public bool PTCEnable { get; set; } - /// - /// 加热器 PTC功率1 - /// 跟随速度步骤的常值数据 - /// - [Column(Name = "PTCPw1")] - public double PTCPw1 { get; set; } + ///// + ///// 加热器 PTC功率1 + ///// 跟随速度步骤的常值数据 + ///// + //[Column(Name = "PTCPw1")] + //public double PTCPw1 { get; set; } - /// - /// 加热器 PTC功率2 - /// 跟随速度步骤的常值数据 - /// - [Column(Name = "PTCPw2")] - public double PTCPw2 { get; set; } + ///// + ///// 加热器 PTC功率2 + ///// 跟随速度步骤的常值数据 + ///// + //[Column(Name = "PTCPw2")] + //public double PTCPw2 { get; set; } - /// - /// 加热器 PTC水流量 - /// 跟随速度步骤的常值数据 - /// - [Column(Name = "PTCWaterFlow")] - public double PTCWaterFlow { get; set; } + ///// + ///// 加热器 PTC水流量 + ///// 跟随速度步骤的常值数据 + ///// + //[Column(Name = "PTCWaterFlow")] + //public double PTCWaterFlow { get; set; } - /// - /// 加热器 PTC水温 - /// 跟随速度步骤的常值数据 - /// - [Column(Name = "PTCWaterTemp")] - public double PTCWaterTemp { get; set; } + ///// + ///// 加热器 PTC水温 + ///// 跟随速度步骤的常值数据 + ///// + //[Column(Name = "PTCWaterTemp")] + //public double PTCWaterTemp { get; set; } ///// diff --git a/CapMachine.Model/ProStep.cs b/CapMachine.Model/ProStep.cs index 0c4a386..8eda52d 100644 --- a/CapMachine.Model/ProStep.cs +++ b/CapMachine.Model/ProStep.cs @@ -1,4 +1,5 @@ -using FreeSql.DataAnnotations; +using CapMachine.Model.MeterConfig; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Diagnostics.Metrics; @@ -117,22 +118,47 @@ namespace CapMachine.Model /// OS2温度/吸气混合器温度 /// public List? MeterOS2Temps { get; set; } = new List(); + /// /// PTC入口水温 + /// 给冷水机组 /// public List? MeterPTCEntTemps { get; set; } = new List(); /// /// PTC流量 + /// 给冷水机组 /// public List? MeterPTCFlows { get; set; } = new List(); + /// - /// PTC功率 + /// PTC功率SV1 + /// 给压缩机PTC使用 /// public List? MeterPTCPws { get; set; } = new List(); + + /// + /// PTC功率SV2 + /// 给压缩机PTC使用 + /// + public List? MeterPTCPw2s { get; set; } = new List(); + + /// + /// PTC目标水温 + /// 给压缩机PTC使用 + /// + public List? MeterPTCWaterTemps { get; set; } = new List(); + + /// + /// PTC水流量 + /// 给压缩机PTC使用 + /// + public List? MeterPTCWaterFlows { get; set; } = new List(); + /// /// 试验箱湿度 /// public List? MeterEnvRHs { get; set; } = new List(); + /// /// 试验箱温度 /// diff --git a/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs b/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs index 8f4086b..7a15847 100644 --- a/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs +++ b/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs @@ -59,6 +59,12 @@ namespace CapMachine.Wpf.ChannelModel /// public bool IsSpeed { get; set; } = false; + /// + /// 执行标记信息 + /// 特殊的参数控制 + /// + public ProExFlag ProExFlag { get; set; } + /// /// 拓展参数集合 /// 比如:速度参数拓展的输出锁定、吸排气阀,压缩机使能等这些拓展参数 diff --git a/CapMachine.Wpf/Dtos/ProStepDto.cs b/CapMachine.Wpf/Dtos/ProStepDto.cs index 2f5dc5a..4541d8f 100644 --- a/CapMachine.Wpf/Dtos/ProStepDto.cs +++ b/CapMachine.Wpf/Dtos/ProStepDto.cs @@ -29,7 +29,7 @@ namespace CapMachine.Model ///// //public int StepRepeat { get; set; } - private CycleInfoDto? _SpeedCycle=new CycleInfoDto(); + private CycleInfoDto? _SpeedCycle = new CycleInfoDto(); /// /// 速度循环信息 /// @@ -209,6 +209,40 @@ namespace CapMachine.Model set { _MeterPTCPwInfo = value; RaisePropertyChanged(); } } + + private string? _MeterPTCPw2Info; + /// + /// MeterPTCPw 2 信息 + /// + public string? MeterPTCPw2Info + { + get { return _MeterPTCPw2Info; } + set { _MeterPTCPw2Info = value; RaisePropertyChanged(); } + } + + + + private string? _MeterPTCWaterTempInfo; + /// + /// MeterPTCWaterTemp 信息 + /// + public string? MeterPTCWaterTempInfo + { + get { return _MeterPTCWaterTempInfo; } + set { _MeterPTCWaterTempInfo = value; RaisePropertyChanged(); } + } + + + private string? _MeterPTCWaterFlowInfo; + /// + /// MeterPTCWaterFlow 信息 + /// + public string? MeterPTCWaterFlowInfo + { + get { return _MeterPTCWaterFlowInfo; } + set { _MeterPTCWaterFlowInfo = value; RaisePropertyChanged(); } + } + private string? _MeterEnvRHInfo; /// /// MeterTestBoxRH 信息 diff --git a/CapMachine.Wpf/Models/ProModelPars/ProExFlag.cs b/CapMachine.Wpf/Models/ProModelPars/ProExFlag.cs new file mode 100644 index 0000000..6ee64d9 --- /dev/null +++ b/CapMachine.Wpf/Models/ProModelPars/ProExFlag.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.ProModelPars +{ + /// + /// 程序执行的标志信息 + /// + public enum ProExFlag + { + /// + /// 没有特殊的标记 + /// + None = 0, + + /// + /// 压缩机 转速 + /// + CapSpeed = 100, + + /// + /// 压缩机PTC 功率SV1 + /// 像速度一样,这个执行不需要写入到PLC发给仪表控制,直接发送给压缩机,PTC控制 + /// + CapPTCPw = 1, + + /// + /// 压缩机PTC 功率SV2 + /// 像速度一样,这个执行不需要写入到PLC发给仪表控制,直接发送给压缩机,PTC控制 + /// + CapPTCPw2 = 2, + + + /// + /// 压缩机PTC 目标水温 + /// 像速度一样,这个执行不需要写入到PLC发给仪表控制,直接发送给压缩机,PTC控制 + /// + CapPTCWaterTemp = 3, + + /// + /// 压缩机PTC 水流量 + /// 像速度一样,这个执行不需要写入到PLC发给仪表控制,直接发送给压缩机,PTC控制 + /// + CapPTCWaterFlow = 4, + + } +} diff --git a/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs b/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs index 37f1541..f59d99a 100644 --- a/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs +++ b/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs @@ -44,6 +44,12 @@ namespace CapMachine.Wpf.Models.ProModelPars /// public bool IsSpeed { get; set; } = false; + /// + /// 执行标记信息 + /// 特殊的参数控制 + /// + public ProExFlag ProExFlag { get; set; } + /// /// 程序执行管道 /// @@ -248,6 +254,7 @@ namespace CapMachine.Wpf.Models.ProModelPars CurLoadPID = PidResult == true ? new PID() { P = (short)NextProStepExe.CurConfigPIDDto.P, I = (short)NextProStepExe.CurConfigPIDDto.I, D = (short)NextProStepExe.CurConfigPIDDto.D } : new PID(), RunStepType = GetRunStepType(PidResult, LimitResult, false), IsSpeed = IsSpeed, + ProExFlag= ProExFlag, ListStepExd = GetStepExds(NextProStepExe),//拓展参数 @@ -305,6 +312,7 @@ namespace CapMachine.Wpf.Models.ProModelPars CurLoadPID = PidResult == true ? new PID() { P = (short)NextProStepExe.CurConfigPIDDto.P, I = (short)NextProStepExe.CurConfigPIDDto.I, D = (short)NextProStepExe.CurConfigPIDDto.D } : new PID(), RunStepType = GetRunStepType(PidResult, LimitResult, true), IsSpeed = IsSpeed, + ProExFlag = ProExFlag, ListStepExd = GetStepExds(NextProStepExe),//拓展参数 }); @@ -490,6 +498,7 @@ namespace CapMachine.Wpf.Models.ProModelPars MeterName = MeterName, SV = NoExData.First().SV, IsSpeed = IsSpeed, + ProExFlag = ProExFlag, ProSegName = CurProStepExe.ProSegName, MeterStep = CurProStepExe.MeterStep, diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index 3808636..693d4ee 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -797,7 +797,7 @@ namespace CapMachine.Wpf.Services EnName = "PTCPw", Group = "程序", MinValue = 0, - MaxValue = 150, + MaxValue = 5000, IsMeter = true, DecimalPoint = 1, Precision = 1, @@ -819,36 +819,100 @@ namespace CapMachine.Wpf.Services RWInfo = RWInfo.Control, }); - //PTC功率2 控制但非仪表控制 -北厂未启用此功能,南厂有此功能 - //TagManger.AddTag(new ShortControlTag() - //{ - // Id = 201, - // Name = "PTC功率2[W]", - // NameNoUnit = "PTC功率2", - // EnName = "PTCPw2", - // Group = "程序", - // MinValue = 0, - // MaxValue = 10000, - // IsMeter = true, - // DecimalPoint = 1, - // Precision = 1, - // Unit = "W", - // DataType = TagDataType.Short, - // PVModel = new MeterValueAttrCell() { Address = "VW434", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 334}, - // SVModel = new MeterValueAttrCell() { Address = "VW434", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 34 }, - // MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, - // MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + //PTC功率2 控制但非仪表控制 + TagManger.AddTag(new ShortControlTag() + { + Id = 201, + Name = "PTC功率2[W]", + NameNoUnit = "PTC功率2", + EnName = "PTCPw2", + Group = "程序", + MinValue = 0, + MaxValue = 10000, + IsMeter = true, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW14022", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 334 }, + SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 34 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, - // Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, - // Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, - // Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, - // Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, - // Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, - // AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, - // AutoHandState = false, + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + + + //PTC目标水温 控制但非仪表控制 + TagManger.AddTag(new ShortControlTag() + { + Id = 202, + Name = "PTC目标水温[℃]", + NameNoUnit = "PTC目标水温", + EnName = "PTCWaterTemp", + Group = "程序", + MinValue = 0, + MaxValue = 150, + IsMeter = true, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW14026", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 334 }, + SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 34 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + + //PTC水流量 控制但非仪表控制 + TagManger.AddTag(new ShortControlTag() + { + Id = 203, + Name = "PTC水流量[L/Min]", + NameNoUnit = "PTC水流量", + EnName = "PTCWaterFlow", + Group = "程序", + MinValue = 0, + MaxValue = 500, + IsMeter = true, + DecimalPoint = 2, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW14024", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 334 }, + SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 34 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); - // RWInfo = RWInfo.Control, - //}); //PTC流量 控制但非仪表控制 @@ -2939,6 +3003,31 @@ namespace CapMachine.Wpf.Services { while (ProRunChannel.Reader.TryRead(out var ProRunChannelData)) { + if (ProRunChannelData.ProExFlag != ProExFlag.None) + { + switch (ProRunChannelData.ProExFlag) + { + case ProExFlag.CapSpeed: + SendSpeedSvToCap(ProRunChannelData.SV); + break; + case ProExFlag.CapPTCPw: + SendPTCPwSvToCap(ProRunChannelData.SV); + break; + case ProExFlag.CapPTCPw2: + SendPTCPwSv2ToCap(ProRunChannelData.SV); + break; + case ProExFlag.CapPTCWaterTemp: + SendPTCWaterTempToCap(ProRunChannelData.SV); + break; + case ProExFlag.CapPTCWaterFlow: + SendPTCWaterFlowToCap(ProRunChannelData.SV); + break; + default: + break; + } + continue; + } + ////第一次计时 //stopwatch.Start(); //启动Stopwatch switch (ProRunChannelData.RunStepType) @@ -3149,89 +3238,89 @@ namespace CapMachine.Wpf.Services continue; } - //压缩机PTC功率1的参数直接给压缩机触发 - if (itemStepExd.Name!.Contains("PTC功率1")) - { - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) - { - case CanLinEnum.Can: - CanDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!); - break; - case CanLinEnum.CANFD: - CanFdDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!); - break; - case CanLinEnum.Lin: - LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!); - break; - default: - break; - } - continue; - } + ////压缩机PTC功率1的参数直接给压缩机触发 + //if (itemStepExd.Name!.Contains("PTC功率1")) + //{ + // switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + // { + // case CanLinEnum.Can: + // CanDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!); + // break; + // case CanLinEnum.CANFD: + // CanFdDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!); + // break; + // case CanLinEnum.Lin: + // LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!); + // break; + // default: + // break; + // } + // continue; + //} - //压缩机PTC功率2的参数直接给压缩机触发 - if (itemStepExd.Name!.Contains("PTC功率2")) - { - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) - { - case CanLinEnum.Can: - CanDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!); - break; - case CanLinEnum.CANFD: - CanFdDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!); - break; - case CanLinEnum.Lin: - //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!); - break; - default: - break; - } - continue; - } + ////压缩机PTC功率2的参数直接给压缩机触发 + //if (itemStepExd.Name!.Contains("PTC功率2")) + //{ + // switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + // { + // case CanLinEnum.Can: + // CanDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!); + // break; + // case CanLinEnum.CANFD: + // CanFdDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!); + // break; + // case CanLinEnum.Lin: + // //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!); + // break; + // default: + // break; + // } + // continue; + //} - //压缩机PTC水流量的参数直接给压缩机触发 - if (itemStepExd.Name!.Contains("PTC水流量")) - { - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) - { - case CanLinEnum.Can: - CanDriveService.UpdateCapPTCFlowCmdData((double)itemStepExd.Value!); - break; - case CanLinEnum.CANFD: - CanFdDriveService.UpdateCapPTCFlowCmdData((double)itemStepExd.Value!); - break; - case CanLinEnum.Lin: - //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!); - break; - default: - break; - } - continue; - } + ////压缩机PTC水流量的参数直接给压缩机触发 + //if (itemStepExd.Name!.Contains("PTC水流量")) + //{ + // switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + // { + // case CanLinEnum.Can: + // CanDriveService.UpdateCapPTCFlowCmdData((double)itemStepExd.Value!); + // break; + // case CanLinEnum.CANFD: + // CanFdDriveService.UpdateCapPTCFlowCmdData((double)itemStepExd.Value!); + // break; + // case CanLinEnum.Lin: + // //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!); + // break; + // default: + // break; + // } + // continue; + //} - //压缩机PTC水温的参数直接给压缩机触发 - if (itemStepExd.Name!.Contains("PTC水温")) - { - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) - { - case CanLinEnum.Can: - CanDriveService.UpdateCapPTCWaterTempCmdData((double)itemStepExd.Value!); - break; - case CanLinEnum.CANFD: - CanFdDriveService.UpdateCapPTCWaterTempCmdData((double)itemStepExd.Value!); - break; - case CanLinEnum.Lin: - //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!); - break; - default: - break; - } - continue; + ////压缩机PTC水温的参数直接给压缩机触发 + //if (itemStepExd.Name!.Contains("PTC水温")) + //{ + // switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + // { + // case CanLinEnum.Can: + // CanDriveService.UpdateCapPTCWaterTempCmdData((double)itemStepExd.Value!); + // break; + // case CanLinEnum.CANFD: + // CanFdDriveService.UpdateCapPTCWaterTempCmdData((double)itemStepExd.Value!); + // break; + // case CanLinEnum.Lin: + // //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!); + // break; + // default: + // break; + // } + // continue; - //Console.WriteLine($"{ProRunChannelData.MeterName}拓展参数------------:{itemStepExd.Name}:{itemStepExd.Value}"); - //continue; - } + // //Console.WriteLine($"{ProRunChannelData.MeterName}拓展参数------------:{itemStepExd.Name}:{itemStepExd.Value}"); + // //continue; + //} var DataAdrees = ListPlcExdConfigCell.FirstOrDefault(a => a.Name == itemStepExd.Name); if (DataAdrees != null) @@ -3292,6 +3381,7 @@ namespace CapMachine.Wpf.Services } } + /// /// 发送速度SV到压缩机 /// 自动步骤数据发送 @@ -3329,6 +3419,98 @@ namespace CapMachine.Wpf.Services } } + /// + /// 发送PTCPw SV到压缩机 + /// 自动步骤数据发送 + /// + private void SendPTCPwSvToCap(double Valuve) + { + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + { + case CanLinEnum.Can: + CanDriveService.UpdateCapPTCPwCmdData(Valuve!); + break; + case CanLinEnum.CANFD: + CanFdDriveService.UpdateCapPTCPwCmdData(Valuve!); + break; + case CanLinEnum.Lin: + //LinDriveService.UpdateCapPTCPwCmdData((bool)ProRunChannelData.SV!); + break; + default: + break; + } + } + + + /// + /// 发送PTCPw2 SV到压缩机 + /// 自动步骤数据发送 + /// + private void SendPTCPwSv2ToCap(double Valuve) + { + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + { + case CanLinEnum.Can: + CanDriveService.UpdateCapPTCPwCmdData(Valuve!); + break; + case CanLinEnum.CANFD: + CanFdDriveService.UpdateCapPTCPwCmdData(Valuve!); + break; + case CanLinEnum.Lin: + //LinDriveService.UpdateCapPTCPwCmdData((bool)ProRunChannelData.SV!); + break; + default: + break; + } + } + + + /// + /// 发送PTCPw2 SV到压缩机 + /// 自动步骤数据发送 + /// + private void SendPTCWaterTempToCap(double Valuve) + { + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + { + case CanLinEnum.Can: + CanDriveService.UpdateCapPTCWaterTempCmdData(Valuve!); + break; + case CanLinEnum.CANFD: + CanFdDriveService.UpdateCapPTCWaterTempCmdData(Valuve!); + break; + case CanLinEnum.Lin: + //LinDriveService.UpdateCapPTCPwCmdData((bool)ProRunChannelData.SV!); + break; + default: + break; + } + } + + + /// + /// 发送PTCPw2 SV到压缩机 + /// 自动步骤数据发送 + /// + private void SendPTCWaterFlowToCap(double Valuve) + { + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + { + case CanLinEnum.Can: + CanDriveService.UpdateCapPTCFlowCmdData(Valuve!); + break; + case CanLinEnum.CANFD: + CanFdDriveService.UpdateCapPTCFlowCmdData(Valuve!); + break; + case CanLinEnum.Lin: + //LinDriveService.UpdateCapPTCPwCmdData((bool)ProRunChannelData.SV!); + break; + default: + break; + } + } + + #endregion } } diff --git a/CapMachine.Wpf/Services/ProRuntimeService.cs b/CapMachine.Wpf/Services/ProRuntimeService.cs index 2e39c28..7a91420 100644 --- a/CapMachine.Wpf/Services/ProRuntimeService.cs +++ b/CapMachine.Wpf/Services/ProRuntimeService.cs @@ -82,6 +82,7 @@ namespace CapMachine.Wpf.Services MeterName = itemKeyValue.Value.NameNoUnit, ListProStepExe = new List(), IsSpeed = itemKeyValue.Value.Name.Contains("转速") == true ? true : false, + ProExFlag = GetProExFlagByName(itemKeyValue.Value.NameNoUnit), CurShortControlTag = MachineRtDataService.TagManger.GetShortControlTagByName(itemKeyValue.Key)!, }); } @@ -166,6 +167,32 @@ namespace CapMachine.Wpf.Services return $"{hours}:{minutes:D2}:{seconds:D2}"; } + /// + /// 根据名称获取具体的标记信息 + /// + /// + private ProExFlag GetProExFlagByName(string Name) + { + //转速的话,直接获取 + if (Name.Contains("转速")) return ProExFlag.CapSpeed; + + switch (Name) + { + case "PTC功率": + return ProExFlag.CapPTCPw; + case "PTC功率2": + return ProExFlag.CapPTCPw2; + case "PTC目标水温": + return ProExFlag.CapPTCWaterTemp; + case "PTC水流量": + return ProExFlag.CapPTCWaterFlow; + default: + return ProExFlag.None; + } + } + + + /// /// 是否在下载中 /// @@ -231,6 +258,9 @@ namespace CapMachine.Wpf.Services .IncludeMany(b => b.MeterPTCPws) .IncludeMany(b => b.MeterEnvRHs) .IncludeMany(b => b.MeterEnvTemps) + .IncludeMany(b => b.MeterPTCPw2s) + .IncludeMany(b => b.MeterPTCWaterFlows) + .IncludeMany(b => b.MeterPTCWaterTemps) ).ToList().FirstOrDefault(); //获取当前的程序 @@ -294,7 +324,7 @@ namespace CapMachine.Wpf.Services MeterStepIsExeing = false,//配置阶段默认不执行 false MeterStepIsOK = false,//配置阶段默认不完成 false ExistSlop = false,//常值没有斜率 //开始和结束不一样则存在斜率 - + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, MeterName = CurMeterName, @@ -314,10 +344,10 @@ namespace CapMachine.Wpf.Services new StepExd(){ Name="压缩机使能",Value=itemMeterValueCell.CapEnable,ValueType=ExdValueType.Bool}, new StepExd(){ Name="PTC使能",Value=itemMeterValueCell.PTCEnable,ValueType=ExdValueType.Bool}, - new StepExd(){ Name="PTC功率1",Value=itemMeterValueCell.PTCPw1,ValueType=ExdValueType.Double}, - new StepExd(){ Name="PTC功率2",Value=itemMeterValueCell.PTCPw2,ValueType=ExdValueType.Double}, - new StepExd(){ Name="PTC水流量",Value=itemMeterValueCell.PTCWaterFlow,ValueType=ExdValueType.Double}, - new StepExd(){ Name="PTC水温",Value=itemMeterValueCell.PTCWaterTemp,ValueType=ExdValueType.Double}, + //new StepExd(){ Name="PTC功率1",Value=itemMeterValueCell.PTCPw1,ValueType=ExdValueType.Double}, + //new StepExd(){ Name="PTC功率2",Value=itemMeterValueCell.PTCPw2,ValueType=ExdValueType.Double}, + //new StepExd(){ Name="PTC水流量",Value=itemMeterValueCell.PTCWaterFlow,ValueType=ExdValueType.Double}, + //new StepExd(){ Name="PTC水温",Value=itemMeterValueCell.PTCWaterTemp,ValueType=ExdValueType.Double}, }, ProStepInfo = $"{itemStep.StepNo}", @@ -387,10 +417,10 @@ namespace CapMachine.Wpf.Services new StepExd(){ Name="压缩机使能",Value=itemMeterValueCell.CapEnable,ValueType=ExdValueType.Bool}, new StepExd(){ Name="PTC使能",Value=itemMeterValueCell.PTCEnable,ValueType=ExdValueType.Bool}, - new StepExd(){ Name="PTC功率1",Value=itemMeterValueCell.PTCPw1,ValueType=ExdValueType.Double}, - new StepExd(){ Name="PTC功率2",Value=itemMeterValueCell.PTCPw2,ValueType=ExdValueType.Double}, - new StepExd(){ Name="PTC水流量",Value=itemMeterValueCell.PTCWaterFlow,ValueType=ExdValueType.Double}, - new StepExd(){ Name="PTC水温",Value=itemMeterValueCell.PTCWaterTemp,ValueType=ExdValueType.Double}, + //new StepExd(){ Name="PTC功率1",Value=itemMeterValueCell.PTCPw1,ValueType=ExdValueType.Double}, + //new StepExd(){ Name="PTC功率2",Value=itemMeterValueCell.PTCPw2,ValueType=ExdValueType.Double}, + //new StepExd(){ Name="PTC水流量",Value=itemMeterValueCell.PTCWaterFlow,ValueType=ExdValueType.Double}, + //new StepExd(){ Name="PTC水温",Value=itemMeterValueCell.PTCWaterTemp,ValueType=ExdValueType.Double}, }, ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", @@ -3167,6 +3197,466 @@ namespace CapMachine.Wpf.Services } + //********* 单个【PTC功率2】步骤信息的解析 ********* + { + var CurMeterName = "PTC功率2"; + if (itemStep.MeterPTCPw2s != null && itemStep.MeterPTCPw2s.Any()) + { + switch (itemStep.MeterPTCPw2s.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterPTCPw2s) + { + var Pid = new ConfigPID(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) + { + Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); + } + var Limit = new ConfigLimit(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) + { + Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); + } + var Alarm = new ConfigAlarm(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) + { + Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); + } + + ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() + { + //程序块 + ProSegName = CurProgramSeg.Name, + ProSegStep = SegIndex, + ProSegRepeat = CurProgramSeg.ProRepeat, + ProSegIsExeing = false,//配置阶段默认不执行 false + + //程序步骤数据 + StartSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), + EndSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), + KeepTime = itemMeterValueCell.KeepTime, + MeterStepIsExeing = false,//配置阶段默认不执行 false + MeterStepIsOK = false,//配置阶段默认不完成 false + ExistSlop = false,//常值没有斜率 //开始和结束不一样则存在斜率 + + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, + MeterName = CurMeterName, + + LimitNo = itemMeterValueCell.LimitNo, + AlarmNo = itemMeterValueCell.AlarmNo, + PIDNo = itemMeterValueCell.PIDNo, + + CurConfigPIDDto = Mapper.Map(Pid), + CurConfigLimitDto = Mapper.Map(Limit), + CurConfigAlarmDto = Mapper.Map(Alarm), + + ProStepInfo = $"{itemStep.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCPw2s.Select(p => new MeterCom { Constant = p.Constant, KeepTime = p.KeepTime, StepNo = p.StepNo, ValueType = p.ValueType }).ToList()); + for (int StepCycleIndex = 1; StepCycleIndex <= Cycle; StepCycleIndex++) + { + //根据循环次数执行 + foreach (var itemMeterValueCell in itemStep.MeterPTCPw2s) + { + var Pid = new ConfigPID(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) + { + Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); + } + var Limit = new ConfigLimit(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) + { + Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); + } + var Alarm = new ConfigAlarm(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) + { + Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); + } + + ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() + { + //程序块 + ProSegName = CurProgramSeg.Name, + ProSegStep = SegIndex, + ProSegRepeat = CurProgramSeg.ProRepeat, + ProSegIsExeing = false,//配置阶段默认不执行 false + + //程序步骤数据 + //SV = CALCHelper.GetQuickSV(itemMeterValueCell.Constant, 1), + StartSV = GetSVByProcess(itemMeterValueCell.StartValue, CurMeterName), + EndSV = GetSVByProcess(itemMeterValueCell.EndValue, CurMeterName), + KeepTime = itemMeterValueCell.KeepTime, + MeterStepIsExeing = false,//配置阶段默认不执行 false + MeterStepIsOK = false,//配置阶段默认不完成 false + ExistSlop = itemMeterValueCell.StartValue == itemMeterValueCell.EndValue ? false : true,//开始和结束不一样则存在斜率 + + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, + + LimitNo = itemMeterValueCell.LimitNo, + AlarmNo = itemMeterValueCell.AlarmNo, + PIDNo = itemMeterValueCell.PIDNo, + + CurConfigPIDDto = Mapper.Map(Pid), + CurConfigLimitDto = Mapper.Map(Limit), + CurConfigAlarmDto = Mapper.Map(Alarm), + + ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【PTC目标水温】步骤信息的解析 ********* + { + var CurMeterName = "PTC目标水温"; + if (itemStep.MeterPTCWaterTemps != null && itemStep.MeterPTCWaterTemps.Any()) + { + switch (itemStep.MeterPTCWaterTemps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterPTCWaterTemps) + { + var Pid = new ConfigPID(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) + { + Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); + } + var Limit = new ConfigLimit(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) + { + Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); + } + var Alarm = new ConfigAlarm(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) + { + Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); + } + + ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() + { + //程序块 + ProSegName = CurProgramSeg.Name, + ProSegStep = SegIndex, + ProSegRepeat = CurProgramSeg.ProRepeat, + ProSegIsExeing = false,//配置阶段默认不执行 false + + //程序步骤数据 + StartSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), + EndSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), + KeepTime = itemMeterValueCell.KeepTime, + MeterStepIsExeing = false,//配置阶段默认不执行 false + MeterStepIsOK = false,//配置阶段默认不完成 false + ExistSlop = false,//常值没有斜率 //开始和结束不一样则存在斜率 + + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, + MeterName = CurMeterName, + + LimitNo = itemMeterValueCell.LimitNo, + AlarmNo = itemMeterValueCell.AlarmNo, + PIDNo = itemMeterValueCell.PIDNo, + + CurConfigPIDDto = Mapper.Map(Pid), + CurConfigLimitDto = Mapper.Map(Limit), + CurConfigAlarmDto = Mapper.Map(Alarm), + + ProStepInfo = $"{itemStep.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCWaterTemps.Select(p => new MeterCom { Constant = p.Constant, KeepTime = p.KeepTime, StepNo = p.StepNo, ValueType = p.ValueType }).ToList()); + for (int StepCycleIndex = 1; StepCycleIndex <= Cycle; StepCycleIndex++) + { + //根据循环次数执行 + foreach (var itemMeterValueCell in itemStep.MeterPTCWaterTemps) + { + var Pid = new ConfigPID(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) + { + Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); + } + var Limit = new ConfigLimit(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) + { + Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); + } + var Alarm = new ConfigAlarm(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) + { + Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); + } + + ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() + { + //程序块 + ProSegName = CurProgramSeg.Name, + ProSegStep = SegIndex, + ProSegRepeat = CurProgramSeg.ProRepeat, + ProSegIsExeing = false,//配置阶段默认不执行 false + + //程序步骤数据 + //SV = CALCHelper.GetQuickSV(itemMeterValueCell.Constant, 1), + StartSV = GetSVByProcess(itemMeterValueCell.StartValue, CurMeterName), + EndSV = GetSVByProcess(itemMeterValueCell.EndValue, CurMeterName), + KeepTime = itemMeterValueCell.KeepTime, + MeterStepIsExeing = false,//配置阶段默认不执行 false + MeterStepIsOK = false,//配置阶段默认不完成 false + ExistSlop = itemMeterValueCell.StartValue == itemMeterValueCell.EndValue ? false : true,//开始和结束不一样则存在斜率 + + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, + + LimitNo = itemMeterValueCell.LimitNo, + AlarmNo = itemMeterValueCell.AlarmNo, + PIDNo = itemMeterValueCell.PIDNo, + + CurConfigPIDDto = Mapper.Map(Pid), + CurConfigLimitDto = Mapper.Map(Limit), + CurConfigAlarmDto = Mapper.Map(Alarm), + + ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【PTC水流量】步骤信息的解析 ********* + { + var CurMeterName = "PTC水流量"; + if (itemStep.MeterPTCWaterFlows != null && itemStep.MeterPTCWaterFlows.Any()) + { + switch (itemStep.MeterPTCWaterFlows.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterPTCWaterFlows) + { + var Pid = new ConfigPID(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) + { + Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); + } + var Limit = new ConfigLimit(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) + { + Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); + } + var Alarm = new ConfigAlarm(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) + { + Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); + } + + ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() + { + //程序块 + ProSegName = CurProgramSeg.Name, + ProSegStep = SegIndex, + ProSegRepeat = CurProgramSeg.ProRepeat, + ProSegIsExeing = false,//配置阶段默认不执行 false + + //程序步骤数据 + StartSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), + EndSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), + KeepTime = itemMeterValueCell.KeepTime, + MeterStepIsExeing = false,//配置阶段默认不执行 false + MeterStepIsOK = false,//配置阶段默认不完成 false + ExistSlop = false,//常值没有斜率 //开始和结束不一样则存在斜率 + + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, + MeterName = CurMeterName, + + LimitNo = itemMeterValueCell.LimitNo, + AlarmNo = itemMeterValueCell.AlarmNo, + PIDNo = itemMeterValueCell.PIDNo, + + CurConfigPIDDto = Mapper.Map(Pid), + CurConfigLimitDto = Mapper.Map(Limit), + CurConfigAlarmDto = Mapper.Map(Alarm), + + ProStepInfo = $"{itemStep.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCWaterFlows.Select(p => new MeterCom { Constant = p.Constant, KeepTime = p.KeepTime, StepNo = p.StepNo, ValueType = p.ValueType }).ToList()); + for (int StepCycleIndex = 1; StepCycleIndex <= Cycle; StepCycleIndex++) + { + //根据循环次数执行 + foreach (var itemMeterValueCell in itemStep.MeterPTCWaterFlows) + { + var Pid = new ConfigPID(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) + { + Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); + } + var Limit = new ConfigLimit(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) + { + Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); + } + var Alarm = new ConfigAlarm(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) + { + Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); + } + + ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() + { + //程序块 + ProSegName = CurProgramSeg.Name, + ProSegStep = SegIndex, + ProSegRepeat = CurProgramSeg.ProRepeat, + ProSegIsExeing = false,//配置阶段默认不执行 false + + //程序步骤数据 + //SV = CALCHelper.GetQuickSV(itemMeterValueCell.Constant, 1), + StartSV = GetSVByProcess(itemMeterValueCell.StartValue, CurMeterName), + EndSV = GetSVByProcess(itemMeterValueCell.EndValue, CurMeterName), + KeepTime = itemMeterValueCell.KeepTime, + MeterStepIsExeing = false,//配置阶段默认不执行 false + MeterStepIsOK = false,//配置阶段默认不完成 false + ExistSlop = itemMeterValueCell.StartValue == itemMeterValueCell.EndValue ? false : true,//开始和结束不一样则存在斜率 + + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, + + LimitNo = itemMeterValueCell.LimitNo, + AlarmNo = itemMeterValueCell.AlarmNo, + PIDNo = itemMeterValueCell.PIDNo, + + CurConfigPIDDto = Mapper.Map(Pid), + CurConfigLimitDto = Mapper.Map(Limit), + CurConfigAlarmDto = Mapper.Map(Alarm), + + ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + } } diff --git a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs index 99c13c3..36772a7 100644 --- a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs @@ -60,6 +60,9 @@ namespace CapMachine.Wpf.ViewModels PTCPwInit(); EnvRHInit(); EnvTempInit(); + PTCPw2Init(); + PTCWaterTempInit(); + PTCWaterFlowInit(); ListProStepDtoItems = new ObservableCollection(); ListProStep = new List(); @@ -174,6 +177,9 @@ namespace CapMachine.Wpf.ViewModels MeterPTCPwInfo = MeterPTCPwToString(item.MeterPTCPws!.ToList()), MeterEnvRHInfo = MeterEnvRHToString(item.MeterEnvRHs!.ToList()), MeterEnvTempInfo = MeterEnvTempToString(item.MeterEnvTemps!.ToList()), + MeterPTCPw2Info = MeterPTCPw2ToString(item.MeterPTCPw2s!.ToList()), + MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(item.MeterPTCWaterFlows!.ToList()), + MeterPTCWaterTempInfo = MeterPTCWaterTempToString(item.MeterPTCWaterTemps!.ToList()), //xxx = MeterSpeedToString(item.xxxs!.ToList()), }); @@ -255,6 +261,9 @@ namespace CapMachine.Wpf.ViewModels .IncludeMany(b => b.MeterPTCPws) .IncludeMany(b => b.MeterEnvRHs) .IncludeMany(b => b.MeterEnvTemps) + .IncludeMany(b => b.MeterPTCPw2s) + .IncludeMany(b => b.MeterPTCWaterFlows) + .IncludeMany(b => b.MeterPTCWaterTemps) //.IncludeMany(b => b.MeterPds) ).ToList(); @@ -296,6 +305,9 @@ namespace CapMachine.Wpf.ViewModels .IncludeMany(b => b.MeterPTCPws) .IncludeMany(b => b.MeterEnvRHs) .IncludeMany(b => b.MeterEnvTemps) + .IncludeMany(b => b.MeterPTCPw2s) + .IncludeMany(b => b.MeterPTCWaterFlows) + .IncludeMany(b => b.MeterPTCWaterTemps) //.IncludeMany(b => b.MeterPds) ).ToList(); @@ -515,7 +527,10 @@ namespace CapMachine.Wpf.ViewModels .IncludeMany(b => b.MeterPTCFlows) .IncludeMany(b => b.MeterPTCPws) .IncludeMany(b => b.MeterEnvRHs) - .IncludeMany(b => b.MeterEnvTemps)) + .IncludeMany(b => b.MeterEnvTemps) + .IncludeMany(b => b.MeterPTCPw2s) + .IncludeMany(b => b.MeterPTCWaterFlows) + .IncludeMany(b => b.MeterPTCWaterTemps)) //.IncludeMany(b => b.MeterPds)) //.IncludeMany(a => a.QuickClutchStepCells) //.IncludeMany(a => a.QuickVoltageStepCells) @@ -1622,6 +1637,159 @@ namespace CapMachine.Wpf.ViewModels ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPwInfo = MeterPTCPwToString(ListSlopMeterPTCPw); } + //////////////////////////PTCPw2////////////////////////////////////// + var TempListMeterPTCPw2 = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.ToList(); + //判断是斜率还是常值 + if (TempListMeterPTCPw2 != null && TempListMeterPTCPw2.Count > 0) + { + if (TempListMeterPTCPw2.Any(a => a.ValueType == ConfigValueType.Constant)) + { + //清空之前的步骤的斜率集合状态信息 + ListSlopMeterPTCPw2 = new List(); + ListSlopMeterPTCPw2Items = new ObservableCollection(ListSlopMeterPTCPw2); + + //常值信息 + ProStepPTCPw2SwitchConstSlopIndex = 0; + //常值只有一个 + SelectedConstPTCPw2 = TempListMeterPTCPw2.FirstOrDefault()!; + SelectedConstPTCPw2Value = SelectedConstPTCPw2.Constant; + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(new List() { SelectedConstPTCPw2 }); + + } + else//斜率 + { + //清空之前的步骤的常值集合状态信息 + SelectedConstPTCPw2Value = 0; + + ProStepPTCPw2SwitchConstSlopIndex = 1; + + ListSlopMeterPTCPw2 = TempListMeterPTCPw2.Where(a => a.ValueType == ConfigValueType.Slope).ToList(); + ListSlopMeterPTCPw2Items = new ObservableCollection(ListSlopMeterPTCPw2); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); + + //更新后检测时间是否匹配并界面提示 + CheckPTCPw2SlopListTime(); + } + } + else + { + //为空,一次也没有设置数据 + //清空之前的步骤的斜率/常值集合状态信息 + ProStepPTCPw2SwitchConstSlopIndex = 1; + ListSlopMeterPTCPw2 = new List(); + ListSlopMeterPTCPw2Items = new ObservableCollection(ListSlopMeterPTCPw2); + SelectedConstPTCPw2Value = 0; + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); + } + + //////////////////////////PTCWaterFlow////////////////////////////////////// + var TempListMeterPTCWaterFlow = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.ToList(); + //判断是斜率还是常值 + if (TempListMeterPTCWaterFlow != null && TempListMeterPTCWaterFlow.Count > 0) + { + if (TempListMeterPTCWaterFlow.Any(a => a.ValueType == ConfigValueType.Constant)) + { + //清空之前的步骤的斜率集合状态信息 + ListSlopMeterPTCWaterFlow = new List(); + ListSlopMeterPTCWaterFlowItems = new ObservableCollection(ListSlopMeterPTCWaterFlow); + + //常值信息 + ProStepPTCWaterFlowSwitchConstSlopIndex = 0; + //常值只有一个 + SelectedConstPTCWaterFlow = TempListMeterPTCWaterFlow.FirstOrDefault()!; + SelectedConstPTCWaterFlowValue = SelectedConstPTCWaterFlow.Constant; + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(new List() { SelectedConstPTCWaterFlow }); + + } + else//斜率 + { + //清空之前的步骤的常值集合状态信息 + SelectedConstPTCWaterFlowValue = 0; + + ProStepPTCWaterFlowSwitchConstSlopIndex = 1; + + ListSlopMeterPTCWaterFlow = TempListMeterPTCWaterFlow.Where(a => a.ValueType == ConfigValueType.Slope).ToList(); + ListSlopMeterPTCWaterFlowItems = new ObservableCollection(ListSlopMeterPTCWaterFlow); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(ListSlopMeterPTCWaterFlow); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterFlowSlopListTime(); + } + } + else + { + //为空,一次也没有设置数据 + //清空之前的步骤的斜率/常值集合状态信息 + ProStepPTCWaterFlowSwitchConstSlopIndex = 1; + ListSlopMeterPTCWaterFlow = new List(); + ListSlopMeterPTCWaterFlowItems = new ObservableCollection(ListSlopMeterPTCWaterFlow); + SelectedConstPTCWaterFlowValue = 0; + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(ListSlopMeterPTCWaterFlow); + } + + + //////////////////////////PTCWaterTemp////////////////////////////////////// + var TempListMeterPTCWaterTemp = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.ToList(); + //判断是斜率还是常值 + if (TempListMeterPTCWaterTemp != null && TempListMeterPTCWaterTemp.Count > 0) + { + if (TempListMeterPTCWaterTemp.Any(a => a.ValueType == ConfigValueType.Constant)) + { + //清空之前的步骤的斜率集合状态信息 + ListSlopMeterPTCWaterTemp = new List(); + ListSlopMeterPTCWaterTempItems = new ObservableCollection(ListSlopMeterPTCWaterTemp); + + //常值信息 + ProStepPTCWaterTempSwitchConstSlopIndex = 0; + //常值只有一个 + SelectedConstPTCWaterTemp = TempListMeterPTCWaterTemp.FirstOrDefault()!; + SelectedConstPTCWaterTempValue = SelectedConstPTCWaterTemp.Constant; + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(new List() { SelectedConstPTCWaterTemp }); + + } + else//斜率 + { + //清空之前的步骤的常值集合状态信息 + SelectedConstPTCWaterTempValue = 0; + + ProStepPTCWaterTempSwitchConstSlopIndex = 1; + + ListSlopMeterPTCWaterTemp = TempListMeterPTCWaterTemp.Where(a => a.ValueType == ConfigValueType.Slope).ToList(); + ListSlopMeterPTCWaterTempItems = new ObservableCollection(ListSlopMeterPTCWaterTemp); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(ListSlopMeterPTCWaterTemp); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterTempSlopListTime(); + } + } + else + { + //为空,一次也没有设置数据 + //清空之前的步骤的斜率/常值集合状态信息 + ProStepPTCWaterTempSwitchConstSlopIndex = 1; + ListSlopMeterPTCWaterTemp = new List(); + ListSlopMeterPTCWaterTempItems = new ObservableCollection(ListSlopMeterPTCWaterTemp); + SelectedConstPTCWaterTempValue = 0; + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(ListSlopMeterPTCWaterTemp); + } //////////////////////////EnvRH////////////////////////////////////// @@ -2051,6 +2219,9 @@ namespace CapMachine.Wpf.ViewModels .IncludeMany(b => b.MeterPTCPws) .IncludeMany(b => b.MeterEnvRHs) .IncludeMany(b => b.MeterEnvTemps) + .IncludeMany(b => b.MeterPTCPw2s) + .IncludeMany(b => b.MeterPTCWaterFlows) + .IncludeMany(b => b.MeterPTCWaterTemps) //.IncludeMany(a => a.QuickClutchStepCells) //.IncludeMany(a => a.QuickVoltageStepCells) .ToList(); @@ -2114,6 +2285,9 @@ namespace CapMachine.Wpf.ViewModels .IncludeMany(b => b.MeterPTCPws) .IncludeMany(b => b.MeterEnvRHs) .IncludeMany(b => b.MeterEnvTemps) + .IncludeMany(b => b.MeterPTCPw2s) + .IncludeMany(b => b.MeterPTCWaterFlows) + .IncludeMany(b => b.MeterPTCWaterTemps) .ToList(); //【+++】 @@ -2162,6 +2336,10 @@ namespace CapMachine.Wpf.ViewModels MeterPTCPwInfo = MeterPTCPwToString(proStep.MeterPTCPws!.ToList()), MeterEnvRHInfo = MeterEnvRHToString(proStep.MeterEnvRHs!.ToList()), MeterEnvTempInfo = MeterEnvTempToString(proStep.MeterEnvTemps!.ToList()), + MeterPTCPw2Info = MeterPTCPw2ToString(proStep.MeterPTCPw2s!.ToList()), + MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(proStep.MeterPTCWaterFlows!.ToList()), + MeterPTCWaterTempInfo = MeterPTCWaterTempToString(proStep.MeterPTCWaterTemps!.ToList()), + }; //【+++】 @@ -2754,10 +2932,10 @@ namespace CapMachine.Wpf.ViewModels //AlarmNo = SelectedSlopMeterSpeed.AlarmNo, //LimitNo = SelectedSlopMeterSpeed.LimitNo, - PTCPw1 = SelectedSlopMeterSpeed.PTCPw1, - PTCPw2 = SelectedSlopMeterSpeed.PTCPw2, - PTCWaterFlow = SelectedSlopMeterSpeed.PTCWaterFlow, - PTCWaterTemp = SelectedSlopMeterSpeed.PTCWaterTemp, + //PTCPw1 = SelectedSlopMeterSpeed.PTCPw1, + //PTCPw2 = SelectedSlopMeterSpeed.PTCPw2, + //PTCWaterFlow = SelectedSlopMeterSpeed.PTCWaterFlow, + //PTCWaterTemp = SelectedSlopMeterSpeed.PTCWaterTemp, //StepNo = AutoGetMeterSpeedStepNo(), }; @@ -2792,10 +2970,10 @@ namespace CapMachine.Wpf.ViewModels .Set(a => a.CapEnable, SelectedSlopMeterSpeed.CapEnable) .Set(a => a.Ev, SelectedSlopMeterSpeed.Ev) .Set(a => a.PTCEnable, SelectedSlopMeterSpeed.PTCEnable) - .Set(a => a.PTCPw1, SelectedSlopMeterSpeed.PTCPw1) - .Set(a => a.PTCPw2, SelectedSlopMeterSpeed.PTCPw2) - .Set(a => a.PTCWaterFlow, SelectedSlopMeterSpeed.PTCWaterFlow) - .Set(a => a.PTCWaterTemp, SelectedSlopMeterSpeed.PTCWaterTemp) + //.Set(a => a.PTCPw1, SelectedSlopMeterSpeed.PTCPw1) + //.Set(a => a.PTCPw2, SelectedSlopMeterSpeed.PTCPw2) + //.Set(a => a.PTCWaterFlow, SelectedSlopMeterSpeed.PTCWaterFlow) + //.Set(a => a.PTCWaterTemp, SelectedSlopMeterSpeed.PTCWaterTemp) .Set(a => a.InhExhValve, SelectedSlopMeterSpeed.InhExhValve) .Where(a => a.Id == ConstantData!.Id) .ExecuteAffrows(); @@ -2866,10 +3044,10 @@ namespace CapMachine.Wpf.ViewModels //AlarmNo = SelectedData.AlarmNo, //LimitNo = SelectedData.LimitNo, //PIDNo = SelectedData.PIDNo, - PTCPw1 = SelectedData.PTCPw1, - PTCPw2 = SelectedData.PTCPw2, - PTCWaterFlow = SelectedData.PTCWaterFlow, - PTCWaterTemp = SelectedData.PTCWaterTemp, + //PTCPw1 = SelectedData.PTCPw1, + //PTCPw2 = SelectedData.PTCPw2, + //PTCWaterFlow = SelectedData.PTCWaterFlow, + //PTCWaterTemp = SelectedData.PTCWaterTemp, ProStep = SelectedData.ProStep, ProStepId = SelectedData.ProStepId, StartValue = SelectedData.StartValue, @@ -2958,10 +3136,10 @@ namespace CapMachine.Wpf.ViewModels //AlarmNo = SelectedSlopMeterSpeed.AlarmNo, //LimitNo = SelectedSlopMeterSpeed.LimitNo, //PIDNo = SelectedSlopMeterSpeed.PIDNo, - PTCPw1 = SelectedSlopMeterSpeed.PTCPw1, - PTCPw2 = SelectedSlopMeterSpeed.PTCPw2, - PTCWaterFlow = SelectedSlopMeterSpeed.PTCWaterFlow, - PTCWaterTemp = SelectedSlopMeterSpeed.PTCWaterTemp, + //PTCPw1 = SelectedSlopMeterSpeed.PTCPw1, + //PTCPw2 = SelectedSlopMeterSpeed.PTCPw2, + //PTCWaterFlow = SelectedSlopMeterSpeed.PTCWaterFlow, + //PTCWaterTemp = SelectedSlopMeterSpeed.PTCWaterTemp, ValueType = ConfigValueType.Slope, StepNo = AutoGetMeterSpeedStepNo(), }; @@ -3050,15 +3228,14 @@ namespace CapMachine.Wpf.ViewModels .Set(a => a.CapEnable, SelectedSlopMeterSpeed.CapEnable) .Set(a => a.Ev, SelectedSlopMeterSpeed.Ev) .Set(a => a.PTCEnable, SelectedSlopMeterSpeed.PTCEnable) - .Set(a => a.PTCPw1, SelectedSlopMeterSpeed.PTCPw1) - .Set(a => a.PTCPw2, SelectedSlopMeterSpeed.PTCPw2) - .Set(a => a.PTCWaterFlow, SelectedSlopMeterSpeed.PTCWaterFlow) - .Set(a => a.PTCWaterTemp, SelectedSlopMeterSpeed.PTCWaterTemp) + //.Set(a => a.PTCPw1, SelectedSlopMeterSpeed.PTCPw1) + //.Set(a => a.PTCPw2, SelectedSlopMeterSpeed.PTCPw2) + //.Set(a => a.PTCWaterFlow, SelectedSlopMeterSpeed.PTCWaterFlow) + //.Set(a => a.PTCWaterTemp, SelectedSlopMeterSpeed.PTCWaterTemp) .Set(a => a.InhExhValve, SelectedSlopMeterSpeed.InhExhValve) .Where(a => a.Id == SelectedSlopMeterSpeed.Id) .ExecuteAffrows(); - //重新查询获取的数据包括子集 var GetUpdateData = RefreshSpeedById(SelectedSlopMeterSpeed.Id); var CurIndex = ListSlopMeterSpeed.FindIndex(a => a.Id == SelectedSlopMeterSpeed.Id); @@ -14670,698 +14847,2086 @@ namespace CapMachine.Wpf.ViewModels - //#region PTCPw2表-北厂未启用此功能,南厂有此功能 - - - - ///// - ///// PTCPw2 初始化函数 - ///// - //private void PTCPw2Init() - //{ - // ListSlopMeterPTCPw2Items = new ObservableCollection(); - // SelectedSlopPTCPw2 = new MeterPTCPw2(); - // SelectedConstPTCPw2 = new MeterPTCPw2(); - //} - - - //private ObservableCollection _ListSlopMeterPTCPw2Items; - ///// - ///// Meter PTCPw2数据集合 斜率的 - ///// - //public ObservableCollection ListSlopMeterPTCPw2Items - //{ - // get { return _ListSlopMeterPTCPw2Items; } - // set { _ListSlopMeterPTCPw2Items = value; RaisePropertyChanged(); } - //} - - ///// - ///// MeterPTCPw2集合数据 斜率 - ///// - //public List ListSlopMeterPTCPw2 { get; set; } - - - //private MeterPTCPw2 _SelectedSlopPTCPw2; - ///// - ///// 当前选中的程序 PTCPw2 斜率 - ///// - //public MeterPTCPw2 SelectedSlopPTCPw2 - //{ - // get { return _SelectedSlopPTCPw2; } - // set { _SelectedSlopPTCPw2 = value; RaisePropertyChanged(); } - //} - - //private MeterExInfoDto _MeterPTCPw2ExDto = new MeterExInfoDto(); - ///// - ///// 当前的拓展模型 PTCPw2 - ///// 用作统计,计算等 - ///// - //public MeterExInfoDto MeterPTCPw2ExDto - //{ - // get { return _MeterPTCPw2ExDto; } - // set { _MeterPTCPw2ExDto = value; RaisePropertyChanged(); } - //} - - - - //private MeterPTCPw2 _SelectedConstPTCPw2; - ///// - ///// 当前选中的程序 PTCPw2 常值 - ///// - //public MeterPTCPw2 SelectedConstPTCPw2 - //{ - // get { return _SelectedConstPTCPw2; } - // set { _SelectedConstPTCPw2 = value; RaisePropertyChanged(); } - //} - - - //private double _SelectedConstPTCPw2Value; - ///// - ///// 常值模式设置的数据 - ///// - //public double SelectedConstPTCPw2Value - //{ - // get { return _SelectedConstPTCPw2Value; } - // set { _SelectedConstPTCPw2Value = value; RaisePropertyChanged(); } - //} - - - - //private DelegateCommand _MeterPTCPw2SlopSelectedChangedCmd; - ///// - ///// 刷新数据命令 - ///// - //public DelegateCommand MeterPTCPw2SlopSelectedChangedCmd - //{ - // set - // { - // _MeterPTCPw2SlopSelectedChangedCmd = value; - // } - // get - // { - // if (_MeterPTCPw2SlopSelectedChangedCmd == null) - // { - // _MeterPTCPw2SlopSelectedChangedCmd = new DelegateCommand((str) => MeterPTCPw2SlopSelectedChangedCmdMethod(str)); - // } - // return _MeterPTCPw2SlopSelectedChangedCmd; - // } - //} - - - ///// - ///// PTCPw2表选中行的执行方法 - ///// - ///// - ///// - //private void MeterPTCPw2SlopSelectedChangedCmdMethod(object par) - //{ - // var SelectedData = par as MeterPTCPw2; - // if (SelectedData != null) - // { - // //直接属性赋值,防止更改后未保存但是列表是同一个实例,列表更新了 - // SelectedSlopPTCPw2 = new MeterPTCPw2 - // { - // StartValue = SelectedData.StartValue, - // EndValue = SelectedData.EndValue, - // StepNo = SelectedData.StepNo, - // Id = SelectedData.Id, - // ProStepId = SelectedData.ProStepId, - // ProStep = SelectedData.ProStep, - // Constant = SelectedData.Constant, - // ValueType = SelectedData.ValueType, - // CreateTime = SelectedData.CreateTime, - // KeepTime = SelectedData.KeepTime, - // AlarmNo = SelectedData.AlarmNo, - // LimitNo = SelectedData.LimitNo, - // PIDNo = SelectedData.PIDNo, - // }; - - // } - //} - - //private DelegateCommand _ProStepPTCPw2AddCmd; - ///// - ///// 新增PTCPw2命令 - ///// - //public DelegateCommand ProStepPTCPw2AddCmd - //{ - // set - // { - // _ProStepPTCPw2AddCmd = value; - // } - // get - // { - // if (_ProStepPTCPw2AddCmd == null) - // { - // _ProStepPTCPw2AddCmd = new DelegateCommand(() => ProStepPTCPw2AddCmdMethod()); - // } - // return _ProStepPTCPw2AddCmd; - // } - //} - - ///// - ///// 增加PTCPw2命令执行方法 - ///// - //private void ProStepPTCPw2AddCmdMethod() - //{ - // if (SelectedProgramSeg != null && SelectedProStepDto == null) - // { - // MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); - // return; - // } - - // //if (GetKeepTimeBySpeed() < (ListSlopMeterPTCPw2.Sum(a => a.KeepTime) + SelectedSlopPTCPw2.KeepTime)) - // //{ - // // MessageBox.Show("请把设置对象和速度表的时间匹配上!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); - // // return; - // //} - - // //删除可能之前的常值数据 - // var Data = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.ToList(); - // if (Data != null && Data.Where(a => a.ValueType == ConfigValueType.Constant).Any()) - // { - // //常值数据库数据删除 - // FreeSql.Delete(Data.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault()!.Id).ExecuteAffrows(); - // //界面集合数据删除 - // var ConstData = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault(); - // ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Remove(ConstData!); - // } - - // //当前的速度表集合数据 - // var MeterPTCPw2s = ListSlopMeterPTCPw2Items.ToList(); - - // var MeterPTCPw2Data = new MeterPTCPw2() - // { - // StartValue = SelectedSlopPTCPw2.StartValue, - // EndValue = SelectedSlopPTCPw2.EndValue, - // KeepTime = SelectedSlopPTCPw2.KeepTime, - // ProStepId = SelectedProStepDto.Id, - // AlarmNo = SelectedSlopPTCPw2.AlarmNo, - // LimitNo = SelectedSlopPTCPw2.LimitNo, - // PIDNo = SelectedSlopPTCPw2.PIDNo, - // ValueType = ConfigValueType.Slope, - // StepNo = AutoGetMeterPTCPw2StepNo(), - // }; - - // //增加数据 - // var InsertDataId = FreeSql.Insert(MeterPTCPw2Data).ExecuteIdentity(); - - // //重新查询获取的数据包括子集 - // var GetInsertData = RefreshPTCPw2ById(InsertDataId); - // //var CurIndex = ListProStep.FindIndex(a => a.Id == InsertStepData!.Id); - - // var CurIndex = GetListMeterIndex(SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Count(), - // SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Count() != 0 ? SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Max(a => a.StepNo) : 0); - - // //上级的新增数据到集合中 - // SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Insert(CurIndex, GetInsertData); - // //新增数据到集合中 - // ListSlopMeterPTCPw2.Insert(CurIndex, GetInsertData); - - // //新增数据到界面集合中 - // ListSlopMeterPTCPw2Items.Insert(CurIndex, GetInsertData); - - // //更新ProStep的字符串的集合数据 - // ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); - - // //更新后检测时间是否匹配并界面提示 - // CheckPTCPw2SlopListTime(); - // SelectedSlopPTCPw2 = new MeterPTCPw2() { Id = -1 }; - //} - - - //private DelegateCommand _ProStepPTCPw2EditCmd; - ///// - ///// 新增PTCPw2命令 - ///// - //public DelegateCommand ProStepPTCPw2EditCmd - //{ - // set - // { - // _ProStepPTCPw2EditCmd = value; - // } - // get - // { - // if (_ProStepPTCPw2EditCmd == null) - // { - // _ProStepPTCPw2EditCmd = new DelegateCommand(() => ProStepPTCPw2EditCmdMethod()); - // } - // return _ProStepPTCPw2EditCmd; - // } - //} - - ///// - ///// 编辑PTCPw2命令执行方法 - ///// - //private void ProStepPTCPw2EditCmdMethod() - //{ - // if (SelectedProgramSeg == null || SelectedProStepDto == null || SelectedSlopPTCPw2 == null || SelectedSlopPTCPw2.Id == -1) - // { - // MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); - // return; - // } - - // //if (GetKeepTimeBySpeed() < (ListSlopMeterPTCPw2.Where(a => a.Id != SelectedSlopPTCPw2!.Id).Sum(a => a.KeepTime) + SelectedSlopPTCPw2!.KeepTime)) - // //{ - // // MessageBox.Show("请把设置对象和速度表的时间匹配上!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); - // // return; - // //} - - // var UpdateData = FreeSql.Update() - // .Set(a => a.StartValue, SelectedSlopPTCPw2.StartValue) - // .Set(a => a.EndValue, SelectedSlopPTCPw2.EndValue) - // .Set(a => a.KeepTime, SelectedSlopPTCPw2.KeepTime) - // .Set(a => a.StepNo, SelectedSlopPTCPw2.StepNo) - // .Set(a => a.PIDNo, SelectedSlopPTCPw2.PIDNo) - // .Set(a => a.LimitNo, SelectedSlopPTCPw2.LimitNo) - // .Set(a => a.AlarmNo, SelectedSlopPTCPw2.AlarmNo) - // .Where(a => a.Id == SelectedSlopPTCPw2.Id) - // .ExecuteUpdated().FirstOrDefault(); - - // //重新查询获取的数据包括子集 - // var GetUpdateData = RefreshPTCPw2ById(SelectedSlopPTCPw2.Id); - // var CurIndex = ListSlopMeterPTCPw2.FindIndex(a => a.Id == SelectedSlopPTCPw2.Id); - - // //删除上级的旧数据 - // SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == SelectedSlopPTCPw2!.Id)!); - // //移除旧的数据 - // ListSlopMeterPTCPw2.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == SelectedSlopPTCPw2.Id)!); - - // //上级新增数据 - // SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Insert(CurIndex, GetUpdateData); - // //新增数据 - // ListSlopMeterPTCPw2.Insert(CurIndex, GetUpdateData); - - // //移除旧的数据 - // ListSlopMeterPTCPw2Items.Remove(ListSlopMeterPTCPw2Items.Where(a => a.Id == SelectedSlopPTCPw2!.Id).FirstOrDefault()!); - // ListSlopMeterPTCPw2Items.Insert(CurIndex, GetUpdateData); - - // //更新ProStep的字符串的集合数据 - // ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); - - // //更新后检测时间是否匹配并界面提示 - // CheckPTCPw2SlopListTime(); - //} - - //private DelegateCommand _ProStepPTCPw2DeleteCmd; - ///// - ///// 新增PTCPw2命令 - ///// - //public DelegateCommand ProStepPTCPw2DeleteCmd - //{ - // set - // { - // _ProStepPTCPw2DeleteCmd = value; - // } - // get - // { - // if (_ProStepPTCPw2DeleteCmd == null) - // { - // _ProStepPTCPw2DeleteCmd = new DelegateCommand(() => ProStepPTCPw2DeleteCmdMethod()); - // } - // return _ProStepPTCPw2DeleteCmd; - // } - //} - - ///// - ///// 增加PTCPw2命令执行方法 - ///// - //private void ProStepPTCPw2DeleteCmdMethod() - //{ - // if (SelectedProgramSeg != null && SelectedProStepDto != null && SelectedSlopPTCPw2 != null && SelectedSlopPTCPw2.Id != -1) - // { - // MessageBoxResult dialogResult = MessageBox.Show("你确定要删除当前的数据吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); - // if (dialogResult == MessageBoxResult.OK) - // { - // FreeSql.Delete(SelectedSlopPTCPw2!.Id).ExecuteAffrows(); - - // //删除上级的旧数据 - // SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == SelectedSlopPTCPw2!.Id)!); - // //移除旧的数据 - // ListSlopMeterPTCPw2.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == SelectedSlopPTCPw2.Id)!); - - // //移除旧的数据 - // ListSlopMeterPTCPw2Items.Remove(ListSlopMeterPTCPw2Items.Where(a => a.Id == SelectedSlopPTCPw2!.Id).FirstOrDefault()!); - - // //更新ProStep的字符串的集合数据 - // ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); - - // //更新后检测时间是否匹配并界面提示 - // CheckPTCPw2SlopListTime(); - // SelectedSlopPTCPw2 = new MeterPTCPw2() { Id = -1 }; - // } - - // } - // else - // { - // MessageBox.Show("未发现选中要删除的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); - // } - //} - - - - ///// - ///// 更新PTCPw2表信息 - ///// - //private void RefreshMeterPTCPw2() - //{ - // ListSlopMeterPTCPw2 = ListProgramSeg.Where(a => a.Id == SelectedProgramSeg.Id).FirstOrDefault()!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id)! - // .FirstOrDefault()!.MeterPTCPw2s!.ToList(); - - // ListSlopMeterPTCPw2Items.Clear(); - - // ListSlopMeterPTCPw2Items = new ObservableCollection(ListSlopMeterPTCPw2!); - - //} - - ///// - ///// 获取PTCPw2当前的步骤的数据信息 - ///// - //private int AutoGetMeterPTCPw2StepNo() - //{ - // var StepInfo = FreeSql.Select().Where(a => a.ProStepId == SelectedProStepDto.Id).ToList(); - // if (StepInfo != null && StepInfo.Count > 0) - // { - // var MaxStep = StepInfo.Max(a => a.StepNo); - // return MaxStep + 1; - // } - // else - // { - // return 1; - // } - - //} - - //private DelegateCommand _ProStepPTCPw2ConstantSaveCmd; - ///// - /////ConstantSaveCommand 常值保存命令 - ///// - //public DelegateCommand ProStepPTCPw2ConstantSaveCmd - //{ - // set - // { - // _ProStepPTCPw2ConstantSaveCmd = value; - // } - // get - // { - // if (_ProStepPTCPw2ConstantSaveCmd == null) - // { - // _ProStepPTCPw2ConstantSaveCmd = new DelegateCommand(() => ProStepPTCPw2ConstantSaveCmdMethod()); - // } - // return _ProStepPTCPw2ConstantSaveCmd; - // } - //} - ///// - ///// ConstantSaveCommand 常值保存命令执行方法 - ///// - //private void ProStepPTCPw2ConstantSaveCmdMethod() - //{ - // if (SelectedProStepDto == null) - // { - // MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); - // return; - // } - - // //1 先判断是否有斜率数据,有则判断后删除,否则退回。 - // if (ListSlopMeterPTCPw2Items != null && ListSlopMeterPTCPw2Items.Where(a => a.ValueType == ConfigValueType.Slope && a.ProStepId == SelectedProStepDto.Id).Count() > 0) - // { - // var result = MessageBox.Show("你将要保存常值模式的数据,同一个时刻只能配置一个模式生效,检测到【斜率】设置中存在多天数据,是否删除?【确定】将要删除斜率数据且设置常值信息,【取消】则不删除斜率数据且常值不保存", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); - // if (result == MessageBoxResult.OK) - // { - // var ListTempDeleteData = new List(); - // //删除以前的斜率数据 - // foreach (var item in ListSlopMeterPTCPw2Items) - // { - // var DeleteData = FreeSql.Delete(item.Id).ExecuteDeleted().FirstOrDefault(); - // ListTempDeleteData.Add(DeleteData); - // } - - // //再循环删除数据 - // foreach (var DeleteData in ListTempDeleteData) - // { - // //删除上级的旧数据 - // SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == DeleteData!.Id)!); - // //移除旧的数据 - // ListSlopMeterPTCPw2.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == DeleteData!.Id)!); - - // //移除旧的数据 - // ListSlopMeterPTCPw2Items.Remove(ListSlopMeterPTCPw2Items.Where(a => a.Id == DeleteData!.Id).FirstOrDefault()!); - // } - - - // //更新ProStep的字符串的集合数据 - // ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); - - // //更新后检测时间是否匹配并界面提示 - // CheckPTCPw2SlopListTime(); - - // } - // else - // { - // //不删除,不进行动作 - // return; - // } - // } - - // //2 再判断之前是否存在常值数据 - // var ConstPTCPw2Data = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.ToList(); - // if (ConstPTCPw2Data != null && ConstPTCPw2Data.Where(a => a.ValueType == ConfigValueType.Constant && a.ProStepId == SelectedProStepDto.Id).Count() == 0) - // { - // //没有常值数据,则新增 - // var MeterPTCPw2Data = new MeterPTCPw2() - // { - // Constant = SelectedConstPTCPw2Value, - // ValueType = ConfigValueType.Constant, - // KeepTime = GetKeepTimeBySpeed(), - // ProStepId = SelectedProStepDto.Id, - // //StepNo = AutoGetMeterPTCPw2StepNo(), - // }; - - // //增加数据 - // var InsertDataId = FreeSql.Insert(MeterPTCPw2Data).ExecuteIdentity(); - - // //重新查询获取的数据包括子集 - // var GetInsertData = RefreshPTCPw2ById(InsertDataId); - - // //上级的新增数据到集合中 - // SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Add(GetInsertData);//常值只有一个 - - // //更新ProStep的字符串的集合数据 - // ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(new List { GetInsertData }); - - - // } - // else - // { - // //常值数据不为0,那么说明之前是存在数据的,则需要更改操作 - // var ConstantData = ConstPTCPw2Data!.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault(); - // //更新常值信息 - // FreeSql.Update() - // .Set(a => a.Constant, SelectedConstPTCPw2Value) - // .Set(a => a.KeepTime, GetKeepTimeBySpeed()) - // .Where(a => a.Id == ConstantData!.Id) - // .ExecuteAffrows(); - - // //重新查询获取的数据包括子集 - // var GetUpdateData = RefreshPTCPw2ById(ConstantData!.Id); - - // //删除上级的旧数据 - // SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Remove(ConstantData); - - // //上级新增数据 - // SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Add(GetUpdateData); - - // //更新ProStep的字符串的集合数据 - // ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(new List() { GetUpdateData }); - - // } - //} - - //private bool _ProStepMeterPTCPw2SwitchConstSlopPar; - ///// - ///// Constant/Slop 切换命令的参数值 - ///// - //public bool ProStepMeterPTCPw2SwitchConstSlopPar - //{ - // get { return _ProStepMeterPTCPw2SwitchConstSlopPar; } - // set { _ProStepMeterPTCPw2SwitchConstSlopPar = value; RaisePropertyChanged(); } - //} - - - //private int _ProStepPTCPw2SwitchConstSlopIndex; - ///// - ///// Constant/Slop 切换命令的参数值 Index - ///// - //public int ProStepPTCPw2SwitchConstSlopIndex - //{ - // get { return _ProStepPTCPw2SwitchConstSlopIndex; } - // set { _ProStepPTCPw2SwitchConstSlopIndex = value; RaisePropertyChanged(); } - //} - - - //private DelegateCommand _MeterPTCPw2SwitchConstSlopCmd; - ///// - ///// PTCPw2 常值和斜率切换 命令 - ///// - //public DelegateCommand MeterPTCPw2SwitchConstSlopCmd - //{ - // set - // { - // _MeterPTCPw2SwitchConstSlopCmd = value; - // } - // get - // { - // if (_MeterPTCPw2SwitchConstSlopCmd == null) - // { - // _MeterPTCPw2SwitchConstSlopCmd = new DelegateCommand((obj) => MeterPTCPw2SwitchConstSlopCmdMethod(obj)); - // } - // return _MeterPTCPw2SwitchConstSlopCmd; - // } - //} - //private void MeterPTCPw2SwitchConstSlopCmdMethod(object obj) - //{ - // if ((int)obj == 0) - // { - // ProStepMeterPTCPw2SwitchConstSlopPar = false; - // } - // else - // { - // ProStepMeterPTCPw2SwitchConstSlopPar = true; - // } - - //} - - - //private DelegateCommand _MeterPTCPw2ParConfigCmd; - ///// - ///// PTCPw2 仪表参数的命令 - ///// - //public DelegateCommand MeterPTCPw2ParConfigCmd - //{ - // set - // { - // _MeterPTCPw2ParConfigCmd = value; - // } - // get - // { - // if (_MeterPTCPw2ParConfigCmd == null) - // { - // _MeterPTCPw2ParConfigCmd = new DelegateCommand((par) => MeterPTCPw2ParConfigCmdMethod(par)); - // } - // return _MeterPTCPw2ParConfigCmd; - // } - //} - ///// - ///// PTCPw2参数设置的命令 - ///// - ///// - ///// - //private void MeterPTCPw2ParConfigCmdMethod(object par) - //{ - // if (par != null && par is string) - // { - // CallMeterParConfig("PTC功率", par! as string); - // } - //} - - - ///// - ///// 步骤数据转字符串格式 - ///// - ///// - ///// - //private string MeterPTCPw2ToString(List data) - //{ - // var strInfo = new StringBuilder(); - // if (data != null && data.Count() > 0) - // { - // if (data.Where(a => a.ValueType == ConfigValueType.Slope).Count() > 0) - // { - // var Count = data.Count; - // foreach (var item in data) - // { - // Count--; - // strInfo.Append(item.StartValue); - // strInfo.Append("->"); - // strInfo.Append(item.EndValue); - // strInfo.Append(" ["); - // strInfo.Append(SecToString((int)item.KeepTime)); - // strInfo.Append("]"); - // if (Count != 0) - // { - // strInfo.Append(Environment.NewLine); - // } - // } - // } - // else - // { - // strInfo.Append(data.FirstOrDefault()!.Constant); - // strInfo.Append($" [{SecToString(data.FirstOrDefault()!.KeepTime)}]"); - // } - // } - // else - // { - // //空的集合数据 - // strInfo.Append("---"); - // } - - - - // return strInfo.ToString(); - // //return @"< ASDFA-ADFA-FASD-ADF "+ Environment.NewLine+" ASDFA-ADFA-FASD-ADF ASDFA-ADFA-FASD-ADF "; - //} - - ///// - ///// 检查斜率配置时间集合是否满足要求 - ///// - //private void CheckPTCPw2SlopListTime() - //{ - // //更新后检测时间是否匹配并界面提示 - // MeterPTCPw2ExDto.SlopTime = ListSlopMeterPTCPw2.Sum(a => a.KeepTime); - // if (MeterPTCPw2ExDto.SlopTime != 0) - // { - // if (GetKeepTimeBySpeed() % MeterPTCPw2ExDto.SlopTime != 0) - // { - // MeterPTCPw2ExDto.SlopCycle = GetKeepTimeBySpeed() * 1.0 / MeterPTCPw2ExDto.SlopTime; - // MeterPTCPw2ExDto.IsTimeOk = false; - // } - // else - // { - // MeterPTCPw2ExDto.SlopCycle = GetKeepTimeBySpeed() * 1.0 / MeterPTCPw2ExDto.SlopTime; - // MeterPTCPw2ExDto.IsTimeOk = true; - // } - // } - // else - // { - // //被除数为0, - // } - - //} - - - ///// - ///// 根据ID获取MeterPTCPw2数据 - ///// - ///// - //private MeterPTCPw2 RefreshPTCPw2ById(long id) - //{ - // var Data = FreeSql.Select() - // .Where(c => c.Id == id) - // .Include(a => a.ProStep) - // .ToList(); - - // if (Data != null && Data.Count() > 0) - // { - // return Data.FirstOrDefault()!; - // } - // else - // { - // return new MeterPTCPw2(); - // } - //} - - - //#endregion + #region PTCPw2表 + + + + /// + /// PTCPw2 初始化函数 + /// + private void PTCPw2Init() + { + ListSlopMeterPTCPw2Items = new ObservableCollection(); + SelectedSlopPTCPw2 = new MeterPTCPw2(); + SelectedConstPTCPw2 = new MeterPTCPw2(); + } + + + private ObservableCollection _ListSlopMeterPTCPw2Items; + /// + /// Meter PTCPw2数据集合 斜率的 + /// + public ObservableCollection ListSlopMeterPTCPw2Items + { + get { return _ListSlopMeterPTCPw2Items; } + set { _ListSlopMeterPTCPw2Items = value; RaisePropertyChanged(); } + } + + /// + /// MeterPTCPw2集合数据 斜率 + /// + public List ListSlopMeterPTCPw2 { get; set; } + + + private MeterPTCPw2 _SelectedSlopPTCPw2; + /// + /// 当前选中的程序 PTCPw2 斜率 + /// + public MeterPTCPw2 SelectedSlopPTCPw2 + { + get { return _SelectedSlopPTCPw2; } + set { _SelectedSlopPTCPw2 = value; RaisePropertyChanged(); } + } + + private MeterExInfoDto _MeterPTCPw2ExDto = new MeterExInfoDto(); + /// + /// 当前的拓展模型 PTCPw2 + /// 用作统计,计算等 + /// + public MeterExInfoDto MeterPTCPw2ExDto + { + get { return _MeterPTCPw2ExDto; } + set { _MeterPTCPw2ExDto = value; RaisePropertyChanged(); } + } + + + + private MeterPTCPw2 _SelectedConstPTCPw2; + /// + /// 当前选中的程序 PTCPw2 常值 + /// + public MeterPTCPw2 SelectedConstPTCPw2 + { + get { return _SelectedConstPTCPw2; } + set { _SelectedConstPTCPw2 = value; RaisePropertyChanged(); } + } + + + private double _SelectedConstPTCPw2Value; + /// + /// 常值模式设置的数据 + /// + public double SelectedConstPTCPw2Value + { + get { return _SelectedConstPTCPw2Value; } + set { _SelectedConstPTCPw2Value = value; RaisePropertyChanged(); } + } + + + + private DelegateCommand _MeterPTCPw2SlopSelectedChangedCmd; + /// + /// 刷新数据命令 + /// + public DelegateCommand MeterPTCPw2SlopSelectedChangedCmd + { + set + { + _MeterPTCPw2SlopSelectedChangedCmd = value; + } + get + { + if (_MeterPTCPw2SlopSelectedChangedCmd == null) + { + _MeterPTCPw2SlopSelectedChangedCmd = new DelegateCommand((str) => MeterPTCPw2SlopSelectedChangedCmdMethod(str)); + } + return _MeterPTCPw2SlopSelectedChangedCmd; + } + } + + + /// + /// PTCPw2表选中行的执行方法 + /// + /// + /// + private void MeterPTCPw2SlopSelectedChangedCmdMethod(object par) + { + var SelectedData = par as MeterPTCPw2; + if (SelectedData != null) + { + //直接属性赋值,防止更改后未保存但是列表是同一个实例,列表更新了 + SelectedSlopPTCPw2 = new MeterPTCPw2 + { + StartValue = SelectedData.StartValue, + EndValue = SelectedData.EndValue, + StepNo = SelectedData.StepNo, + Id = SelectedData.Id, + ProStepId = SelectedData.ProStepId, + ProStep = SelectedData.ProStep, + Constant = SelectedData.Constant, + ValueType = SelectedData.ValueType, + CreateTime = SelectedData.CreateTime, + KeepTime = SelectedData.KeepTime, + AlarmNo = SelectedData.AlarmNo, + LimitNo = SelectedData.LimitNo, + PIDNo = SelectedData.PIDNo, + }; + + } + } + + private DelegateCommand _ProStepPTCPw2AddCmd; + /// + /// 新增PTCPw2命令 + /// + public DelegateCommand ProStepPTCPw2AddCmd + { + set + { + _ProStepPTCPw2AddCmd = value; + } + get + { + if (_ProStepPTCPw2AddCmd == null) + { + _ProStepPTCPw2AddCmd = new DelegateCommand(() => ProStepPTCPw2AddCmdMethod()); + } + return _ProStepPTCPw2AddCmd; + } + } + + /// + /// 增加PTCPw2命令执行方法 + /// + private void ProStepPTCPw2AddCmdMethod() + { + if (SelectedProgramSeg != null && SelectedProStepDto == null) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //if (GetKeepTimeBySpeed() < (ListSlopMeterPTCPw2.Sum(a => a.KeepTime) + SelectedSlopPTCPw2.KeepTime)) + //{ + // MessageBox.Show("请把设置对象和速度表的时间匹配上!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + // return; + //} + + //删除可能之前的常值数据 + var Data = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.ToList(); + if (Data != null && Data.Where(a => a.ValueType == ConfigValueType.Constant).Any()) + { + //常值数据库数据删除 + FreeSql.Delete(Data.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault()!.Id).ExecuteAffrows(); + //界面集合数据删除 + var ConstData = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault(); + ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Remove(ConstData!); + } + + //当前的速度表集合数据 + var MeterPTCPw2s = ListSlopMeterPTCPw2Items.ToList(); + + var MeterPTCPw2Data = new MeterPTCPw2() + { + StartValue = SelectedSlopPTCPw2.StartValue, + EndValue = SelectedSlopPTCPw2.EndValue, + KeepTime = SelectedSlopPTCPw2.KeepTime, + ProStepId = SelectedProStepDto.Id, + AlarmNo = SelectedSlopPTCPw2.AlarmNo, + LimitNo = SelectedSlopPTCPw2.LimitNo, + PIDNo = SelectedSlopPTCPw2.PIDNo, + ValueType = ConfigValueType.Slope, + StepNo = AutoGetMeterPTCPw2StepNo(), + }; + + //增加数据 + var InsertDataId = FreeSql.Insert(MeterPTCPw2Data).ExecuteIdentity(); + + //重新查询获取的数据包括子集 + var GetInsertData = RefreshPTCPw2ById(InsertDataId); + //var CurIndex = ListProStep.FindIndex(a => a.Id == InsertStepData!.Id); + + var CurIndex = GetListMeterIndex(SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Count(), + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Count() != 0 ? SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Max(a => a.StepNo) : 0); + + //上级的新增数据到集合中 + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Insert(CurIndex, GetInsertData); + //新增数据到集合中 + ListSlopMeterPTCPw2.Insert(CurIndex, GetInsertData); + + //新增数据到界面集合中 + ListSlopMeterPTCPw2Items.Insert(CurIndex, GetInsertData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); + + //更新后检测时间是否匹配并界面提示 + CheckPTCPw2SlopListTime(); + SelectedSlopPTCPw2 = new MeterPTCPw2() { Id = -1 }; + } + + + private DelegateCommand _ProStepPTCPw2EditCmd; + /// + /// 新增PTCPw2命令 + /// + public DelegateCommand ProStepPTCPw2EditCmd + { + set + { + _ProStepPTCPw2EditCmd = value; + } + get + { + if (_ProStepPTCPw2EditCmd == null) + { + _ProStepPTCPw2EditCmd = new DelegateCommand(() => ProStepPTCPw2EditCmdMethod()); + } + return _ProStepPTCPw2EditCmd; + } + } + + /// + /// 编辑PTCPw2命令执行方法 + /// + private void ProStepPTCPw2EditCmdMethod() + { + if (SelectedProgramSeg == null || SelectedProStepDto == null || SelectedSlopPTCPw2 == null || SelectedSlopPTCPw2.Id == -1) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //if (GetKeepTimeBySpeed() < (ListSlopMeterPTCPw2.Where(a => a.Id != SelectedSlopPTCPw2!.Id).Sum(a => a.KeepTime) + SelectedSlopPTCPw2!.KeepTime)) + //{ + // MessageBox.Show("请把设置对象和速度表的时间匹配上!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + // return; + //} + + var UpdateData = FreeSql.Update() + .Set(a => a.StartValue, SelectedSlopPTCPw2.StartValue) + .Set(a => a.EndValue, SelectedSlopPTCPw2.EndValue) + .Set(a => a.KeepTime, SelectedSlopPTCPw2.KeepTime) + .Set(a => a.StepNo, SelectedSlopPTCPw2.StepNo) + .Set(a => a.PIDNo, SelectedSlopPTCPw2.PIDNo) + .Set(a => a.LimitNo, SelectedSlopPTCPw2.LimitNo) + .Set(a => a.AlarmNo, SelectedSlopPTCPw2.AlarmNo) + .Where(a => a.Id == SelectedSlopPTCPw2.Id) + .ExecuteUpdated().FirstOrDefault(); + + //重新查询获取的数据包括子集 + var GetUpdateData = RefreshPTCPw2ById(SelectedSlopPTCPw2.Id); + var CurIndex = ListSlopMeterPTCPw2.FindIndex(a => a.Id == SelectedSlopPTCPw2.Id); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == SelectedSlopPTCPw2!.Id)!); + //移除旧的数据 + ListSlopMeterPTCPw2.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == SelectedSlopPTCPw2.Id)!); + + //上级新增数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Insert(CurIndex, GetUpdateData); + //新增数据 + ListSlopMeterPTCPw2.Insert(CurIndex, GetUpdateData); + + //移除旧的数据 + ListSlopMeterPTCPw2Items.Remove(ListSlopMeterPTCPw2Items.Where(a => a.Id == SelectedSlopPTCPw2!.Id).FirstOrDefault()!); + ListSlopMeterPTCPw2Items.Insert(CurIndex, GetUpdateData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); + + //更新后检测时间是否匹配并界面提示 + CheckPTCPw2SlopListTime(); + } + + private DelegateCommand _ProStepPTCPw2DeleteCmd; + /// + /// 新增PTCPw2命令 + /// + public DelegateCommand ProStepPTCPw2DeleteCmd + { + set + { + _ProStepPTCPw2DeleteCmd = value; + } + get + { + if (_ProStepPTCPw2DeleteCmd == null) + { + _ProStepPTCPw2DeleteCmd = new DelegateCommand(() => ProStepPTCPw2DeleteCmdMethod()); + } + return _ProStepPTCPw2DeleteCmd; + } + } + + /// + /// 增加PTCPw2命令执行方法 + /// + private void ProStepPTCPw2DeleteCmdMethod() + { + if (SelectedProgramSeg != null && SelectedProStepDto != null && SelectedSlopPTCPw2 != null && SelectedSlopPTCPw2.Id != -1) + { + MessageBoxResult dialogResult = MessageBox.Show("你确定要删除当前的数据吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); + if (dialogResult == MessageBoxResult.OK) + { + FreeSql.Delete(SelectedSlopPTCPw2!.Id).ExecuteAffrows(); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == SelectedSlopPTCPw2!.Id)!); + //移除旧的数据 + ListSlopMeterPTCPw2.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == SelectedSlopPTCPw2.Id)!); + + //移除旧的数据 + ListSlopMeterPTCPw2Items.Remove(ListSlopMeterPTCPw2Items.Where(a => a.Id == SelectedSlopPTCPw2!.Id).FirstOrDefault()!); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); + + //更新后检测时间是否匹配并界面提示 + CheckPTCPw2SlopListTime(); + SelectedSlopPTCPw2 = new MeterPTCPw2() { Id = -1 }; + } + + } + else + { + MessageBox.Show("未发现选中要删除的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + } + } + + + + /// + /// 更新PTCPw2表信息 + /// + private void RefreshMeterPTCPw2() + { + ListSlopMeterPTCPw2 = ListProgramSeg.Where(a => a.Id == SelectedProgramSeg.Id).FirstOrDefault()!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id)! + .FirstOrDefault()!.MeterPTCPw2s!.ToList(); + + ListSlopMeterPTCPw2Items.Clear(); + + ListSlopMeterPTCPw2Items = new ObservableCollection(ListSlopMeterPTCPw2!); + + } + + /// + /// 获取PTCPw2当前的步骤的数据信息 + /// + private int AutoGetMeterPTCPw2StepNo() + { + var StepInfo = FreeSql.Select().Where(a => a.ProStepId == SelectedProStepDto.Id).ToList(); + if (StepInfo != null && StepInfo.Count > 0) + { + var MaxStep = StepInfo.Max(a => a.StepNo); + return MaxStep + 1; + } + else + { + return 1; + } + + } + + private DelegateCommand _ProStepPTCPw2ConstantSaveCmd; + /// + ///ConstantSaveCommand 常值保存命令 + /// + public DelegateCommand ProStepPTCPw2ConstantSaveCmd + { + set + { + _ProStepPTCPw2ConstantSaveCmd = value; + } + get + { + if (_ProStepPTCPw2ConstantSaveCmd == null) + { + _ProStepPTCPw2ConstantSaveCmd = new DelegateCommand(() => ProStepPTCPw2ConstantSaveCmdMethod()); + } + return _ProStepPTCPw2ConstantSaveCmd; + } + } + /// + /// ConstantSaveCommand 常值保存命令执行方法 + /// + private void ProStepPTCPw2ConstantSaveCmdMethod() + { + if (SelectedProStepDto == null) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //1 先判断是否有斜率数据,有则判断后删除,否则退回。 + if (ListSlopMeterPTCPw2Items != null && ListSlopMeterPTCPw2Items.Where(a => a.ValueType == ConfigValueType.Slope && a.ProStepId == SelectedProStepDto.Id).Count() > 0) + { + var result = MessageBox.Show("你将要保存常值模式的数据,同一个时刻只能配置一个模式生效,检测到【斜率】设置中存在多天数据,是否删除?【确定】将要删除斜率数据且设置常值信息,【取消】则不删除斜率数据且常值不保存", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); + if (result == MessageBoxResult.OK) + { + var ListTempDeleteData = new List(); + //删除以前的斜率数据 + foreach (var item in ListSlopMeterPTCPw2Items) + { + var DeleteData = FreeSql.Delete(item.Id).ExecuteDeleted().FirstOrDefault(); + ListTempDeleteData.Add(DeleteData); + } + + //再循环删除数据 + foreach (var DeleteData in ListTempDeleteData) + { + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == DeleteData!.Id)!); + //移除旧的数据 + ListSlopMeterPTCPw2.Remove(ListSlopMeterPTCPw2.Find(a => a.Id == DeleteData!.Id)!); + + //移除旧的数据 + ListSlopMeterPTCPw2Items.Remove(ListSlopMeterPTCPw2Items.Where(a => a.Id == DeleteData!.Id).FirstOrDefault()!); + } + + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(ListSlopMeterPTCPw2); + + //更新后检测时间是否匹配并界面提示 + CheckPTCPw2SlopListTime(); + + } + else + { + //不删除,不进行动作 + return; + } + } + + //2 再判断之前是否存在常值数据 + var ConstPTCPw2Data = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.ToList(); + if (ConstPTCPw2Data != null && ConstPTCPw2Data.Where(a => a.ValueType == ConfigValueType.Constant && a.ProStepId == SelectedProStepDto.Id).Count() == 0) + { + //没有常值数据,则新增 + var MeterPTCPw2Data = new MeterPTCPw2() + { + Constant = SelectedConstPTCPw2Value, + ValueType = ConfigValueType.Constant, + KeepTime = GetKeepTimeBySpeed(), + ProStepId = SelectedProStepDto.Id, + //StepNo = AutoGetMeterPTCPw2StepNo(), + }; + + //增加数据 + var InsertDataId = FreeSql.Insert(MeterPTCPw2Data).ExecuteIdentity(); + + //重新查询获取的数据包括子集 + var GetInsertData = RefreshPTCPw2ById(InsertDataId); + + //上级的新增数据到集合中 + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCPw2s!.Add(GetInsertData);//常值只有一个 + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(new List { GetInsertData }); + + + } + else + { + //常值数据不为0,那么说明之前是存在数据的,则需要更改操作 + var ConstantData = ConstPTCPw2Data!.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault(); + //更新常值信息 + FreeSql.Update() + .Set(a => a.Constant, SelectedConstPTCPw2Value) + .Set(a => a.KeepTime, GetKeepTimeBySpeed()) + .Where(a => a.Id == ConstantData!.Id) + .ExecuteAffrows(); + + //重新查询获取的数据包括子集 + var GetUpdateData = RefreshPTCPw2ById(ConstantData!.Id); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Remove(ConstantData); + + //上级新增数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCPw2s!.Add(GetUpdateData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCPw2Info = MeterPTCPw2ToString(new List() { GetUpdateData }); + + } + } + + private bool _ProStepMeterPTCPw2SwitchConstSlopPar; + /// + /// Constant/Slop 切换命令的参数值 + /// + public bool ProStepMeterPTCPw2SwitchConstSlopPar + { + get { return _ProStepMeterPTCPw2SwitchConstSlopPar; } + set { _ProStepMeterPTCPw2SwitchConstSlopPar = value; RaisePropertyChanged(); } + } + + + private int _ProStepPTCPw2SwitchConstSlopIndex; + /// + /// Constant/Slop 切换命令的参数值 Index + /// + public int ProStepPTCPw2SwitchConstSlopIndex + { + get { return _ProStepPTCPw2SwitchConstSlopIndex; } + set { _ProStepPTCPw2SwitchConstSlopIndex = value; RaisePropertyChanged(); } + } + + + private DelegateCommand _MeterPTCPw2SwitchConstSlopCmd; + /// + /// PTCPw2 常值和斜率切换 命令 + /// + public DelegateCommand MeterPTCPw2SwitchConstSlopCmd + { + set + { + _MeterPTCPw2SwitchConstSlopCmd = value; + } + get + { + if (_MeterPTCPw2SwitchConstSlopCmd == null) + { + _MeterPTCPw2SwitchConstSlopCmd = new DelegateCommand((obj) => MeterPTCPw2SwitchConstSlopCmdMethod(obj)); + } + return _MeterPTCPw2SwitchConstSlopCmd; + } + } + private void MeterPTCPw2SwitchConstSlopCmdMethod(object obj) + { + if ((int)obj == 0) + { + ProStepMeterPTCPw2SwitchConstSlopPar = false; + } + else + { + ProStepMeterPTCPw2SwitchConstSlopPar = true; + } + + } + + + private DelegateCommand _MeterPTCPw2ParConfigCmd; + /// + /// PTCPw2 仪表参数的命令 + /// + public DelegateCommand MeterPTCPw2ParConfigCmd + { + set + { + _MeterPTCPw2ParConfigCmd = value; + } + get + { + if (_MeterPTCPw2ParConfigCmd == null) + { + _MeterPTCPw2ParConfigCmd = new DelegateCommand((par) => MeterPTCPw2ParConfigCmdMethod(par)); + } + return _MeterPTCPw2ParConfigCmd; + } + } + /// + /// PTCPw2参数设置的命令 + /// + /// + /// + private void MeterPTCPw2ParConfigCmdMethod(object par) + { + if (par != null && par is string) + { + CallMeterParConfig("PTC功率", par! as string); + } + } + + + /// + /// 步骤数据转字符串格式 + /// + /// + /// + private string MeterPTCPw2ToString(List data) + { + var strInfo = new StringBuilder(); + if (data != null && data.Count() > 0) + { + if (data.Where(a => a.ValueType == ConfigValueType.Slope).Count() > 0) + { + var Count = data.Count; + foreach (var item in data) + { + Count--; + strInfo.Append(item.StartValue); + strInfo.Append("->"); + strInfo.Append(item.EndValue); + strInfo.Append(" ["); + strInfo.Append(SecToString((int)item.KeepTime)); + strInfo.Append("]"); + if (Count != 0) + { + strInfo.Append(Environment.NewLine); + } + } + } + else + { + strInfo.Append(data.FirstOrDefault()!.Constant); + strInfo.Append($" [{SecToString(data.FirstOrDefault()!.KeepTime)}]"); + } + } + else + { + //空的集合数据 + strInfo.Append("---"); + } + + + + return strInfo.ToString(); + //return @"< ASDFA-ADFA-FASD-ADF "+ Environment.NewLine+" ASDFA-ADFA-FASD-ADF ASDFA-ADFA-FASD-ADF "; + } + + /// + /// 检查斜率配置时间集合是否满足要求 + /// + private void CheckPTCPw2SlopListTime() + { + //更新后检测时间是否匹配并界面提示 + MeterPTCPw2ExDto.SlopTime = ListSlopMeterPTCPw2.Sum(a => a.KeepTime); + if (MeterPTCPw2ExDto.SlopTime != 0) + { + if (GetKeepTimeBySpeed() % MeterPTCPw2ExDto.SlopTime != 0) + { + MeterPTCPw2ExDto.SlopCycle = GetKeepTimeBySpeed() * 1.0 / MeterPTCPw2ExDto.SlopTime; + MeterPTCPw2ExDto.IsTimeOk = false; + } + else + { + MeterPTCPw2ExDto.SlopCycle = GetKeepTimeBySpeed() * 1.0 / MeterPTCPw2ExDto.SlopTime; + MeterPTCPw2ExDto.IsTimeOk = true; + } + } + else + { + //被除数为0, + } + + } + + + /// + /// 根据ID获取MeterPTCPw2数据 + /// + /// + private MeterPTCPw2 RefreshPTCPw2ById(long id) + { + var Data = FreeSql.Select() + .Where(c => c.Id == id) + .Include(a => a.ProStep) + .ToList(); + + if (Data != null && Data.Count() > 0) + { + return Data.FirstOrDefault()!; + } + else + { + return new MeterPTCPw2(); + } + } + + + #endregion + + #region PTCWaterTemp表 + + + + /// + /// PTCWaterTemp 初始化函数 + /// + private void PTCWaterTempInit() + { + ListSlopMeterPTCWaterTempItems = new ObservableCollection(); + SelectedSlopPTCWaterTemp = new MeterPTCWaterTemp(); + SelectedConstPTCWaterTemp = new MeterPTCWaterTemp(); + } + + + private ObservableCollection _ListSlopMeterPTCWaterTempItems; + /// + /// Meter PTCWaterTemp数据集合 斜率的 + /// + public ObservableCollection ListSlopMeterPTCWaterTempItems + { + get { return _ListSlopMeterPTCWaterTempItems; } + set { _ListSlopMeterPTCWaterTempItems = value; RaisePropertyChanged(); } + } + + /// + /// MeterPTCWaterTemp集合数据 斜率 + /// + public List ListSlopMeterPTCWaterTemp { get; set; } + + + private MeterPTCWaterTemp _SelectedSlopPTCWaterTemp; + /// + /// 当前选中的程序 PTCWaterTemp 斜率 + /// + public MeterPTCWaterTemp SelectedSlopPTCWaterTemp + { + get { return _SelectedSlopPTCWaterTemp; } + set { _SelectedSlopPTCWaterTemp = value; RaisePropertyChanged(); } + } + + private MeterExInfoDto _MeterPTCWaterTempExDto = new MeterExInfoDto(); + /// + /// 当前的拓展模型 PTCWaterTemp + /// 用作统计,计算等 + /// + public MeterExInfoDto MeterPTCWaterTempExDto + { + get { return _MeterPTCWaterTempExDto; } + set { _MeterPTCWaterTempExDto = value; RaisePropertyChanged(); } + } + + + + private MeterPTCWaterTemp _SelectedConstPTCWaterTemp; + /// + /// 当前选中的程序 PTCWaterTemp 常值 + /// + public MeterPTCWaterTemp SelectedConstPTCWaterTemp + { + get { return _SelectedConstPTCWaterTemp; } + set { _SelectedConstPTCWaterTemp = value; RaisePropertyChanged(); } + } + + + private double _SelectedConstPTCWaterTempValue; + /// + /// 常值模式设置的数据 + /// + public double SelectedConstPTCWaterTempValue + { + get { return _SelectedConstPTCWaterTempValue; } + set { _SelectedConstPTCWaterTempValue = value; RaisePropertyChanged(); } + } + + + + private DelegateCommand _MeterPTCWaterTempSlopSelectedChangedCmd; + /// + /// 刷新数据命令 + /// + public DelegateCommand MeterPTCWaterTempSlopSelectedChangedCmd + { + set + { + _MeterPTCWaterTempSlopSelectedChangedCmd = value; + } + get + { + if (_MeterPTCWaterTempSlopSelectedChangedCmd == null) + { + _MeterPTCWaterTempSlopSelectedChangedCmd = new DelegateCommand((str) => MeterPTCWaterTempSlopSelectedChangedCmdMethod(str)); + } + return _MeterPTCWaterTempSlopSelectedChangedCmd; + } + } + + + /// + /// PTCWaterTemp表选中行的执行方法 + /// + /// + /// + private void MeterPTCWaterTempSlopSelectedChangedCmdMethod(object par) + { + var SelectedData = par as MeterPTCWaterTemp; + if (SelectedData != null) + { + //直接属性赋值,防止更改后未保存但是列表是同一个实例,列表更新了 + SelectedSlopPTCWaterTemp = new MeterPTCWaterTemp + { + StartValue = SelectedData.StartValue, + EndValue = SelectedData.EndValue, + StepNo = SelectedData.StepNo, + Id = SelectedData.Id, + ProStepId = SelectedData.ProStepId, + ProStep = SelectedData.ProStep, + Constant = SelectedData.Constant, + ValueType = SelectedData.ValueType, + CreateTime = SelectedData.CreateTime, + KeepTime = SelectedData.KeepTime, + AlarmNo = SelectedData.AlarmNo, + LimitNo = SelectedData.LimitNo, + PIDNo = SelectedData.PIDNo, + }; + + } + } + + private DelegateCommand _ProStepPTCWaterTempAddCmd; + /// + /// 新增PTCWaterTemp命令 + /// + public DelegateCommand ProStepPTCWaterTempAddCmd + { + set + { + _ProStepPTCWaterTempAddCmd = value; + } + get + { + if (_ProStepPTCWaterTempAddCmd == null) + { + _ProStepPTCWaterTempAddCmd = new DelegateCommand(() => ProStepPTCWaterTempAddCmdMethod()); + } + return _ProStepPTCWaterTempAddCmd; + } + } + + /// + /// 增加PTCWaterTemp命令执行方法 + /// + private void ProStepPTCWaterTempAddCmdMethod() + { + if (SelectedProgramSeg != null && SelectedProStepDto == null) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //if (GetKeepTimeBySpeed() < (ListSlopMeterPTCWaterTemp.Sum(a => a.KeepTime) + SelectedSlopPTCWaterTemp.KeepTime)) + //{ + // MessageBox.Show("请把设置对象和速度表的时间匹配上!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + // return; + //} + + //删除可能之前的常值数据 + var Data = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.ToList(); + if (Data != null && Data.Where(a => a.ValueType == ConfigValueType.Constant).Any()) + { + //常值数据库数据删除 + FreeSql.Delete(Data.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault()!.Id).ExecuteAffrows(); + //界面集合数据删除 + var ConstData = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault(); + ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.Remove(ConstData!); + } + + //当前的速度表集合数据 + var MeterPTCWaterTemps = ListSlopMeterPTCWaterTempItems.ToList(); + + var MeterPTCWaterTempData = new MeterPTCWaterTemp() + { + StartValue = SelectedSlopPTCWaterTemp.StartValue, + EndValue = SelectedSlopPTCWaterTemp.EndValue, + KeepTime = SelectedSlopPTCWaterTemp.KeepTime, + ProStepId = SelectedProStepDto.Id, + AlarmNo = SelectedSlopPTCWaterTemp.AlarmNo, + LimitNo = SelectedSlopPTCWaterTemp.LimitNo, + PIDNo = SelectedSlopPTCWaterTemp.PIDNo, + ValueType = ConfigValueType.Slope, + StepNo = AutoGetMeterPTCWaterTempStepNo(), + }; + + //增加数据 + var InsertDataId = FreeSql.Insert(MeterPTCWaterTempData).ExecuteIdentity(); + + //重新查询获取的数据包括子集 + var GetInsertData = RefreshPTCWaterTempById(InsertDataId); + //var CurIndex = ListProStep.FindIndex(a => a.Id == InsertStepData!.Id); + + var CurIndex = GetListMeterIndex(SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.Count(), + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.Count() != 0 ? SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.Max(a => a.StepNo) : 0); + + //上级的新增数据到集合中 + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.Insert(CurIndex, GetInsertData); + //新增数据到集合中 + ListSlopMeterPTCWaterTemp.Insert(CurIndex, GetInsertData); + + //新增数据到界面集合中 + ListSlopMeterPTCWaterTempItems.Insert(CurIndex, GetInsertData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(ListSlopMeterPTCWaterTemp); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterTempSlopListTime(); + SelectedSlopPTCWaterTemp = new MeterPTCWaterTemp() { Id = -1 }; + } + + + private DelegateCommand _ProStepPTCWaterTempEditCmd; + /// + /// 新增PTCWaterTemp命令 + /// + public DelegateCommand ProStepPTCWaterTempEditCmd + { + set + { + _ProStepPTCWaterTempEditCmd = value; + } + get + { + if (_ProStepPTCWaterTempEditCmd == null) + { + _ProStepPTCWaterTempEditCmd = new DelegateCommand(() => ProStepPTCWaterTempEditCmdMethod()); + } + return _ProStepPTCWaterTempEditCmd; + } + } + + /// + /// 编辑PTCWaterTemp命令执行方法 + /// + private void ProStepPTCWaterTempEditCmdMethod() + { + if (SelectedProgramSeg == null || SelectedProStepDto == null || SelectedSlopPTCWaterTemp == null || SelectedSlopPTCWaterTemp.Id == -1) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //if (GetKeepTimeBySpeed() < (ListSlopMeterPTCWaterTemp.Where(a => a.Id != SelectedSlopPTCWaterTemp!.Id).Sum(a => a.KeepTime) + SelectedSlopPTCWaterTemp!.KeepTime)) + //{ + // MessageBox.Show("请把设置对象和速度表的时间匹配上!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + // return; + //} + + var UpdateData = FreeSql.Update() + .Set(a => a.StartValue, SelectedSlopPTCWaterTemp.StartValue) + .Set(a => a.EndValue, SelectedSlopPTCWaterTemp.EndValue) + .Set(a => a.KeepTime, SelectedSlopPTCWaterTemp.KeepTime) + .Set(a => a.StepNo, SelectedSlopPTCWaterTemp.StepNo) + .Set(a => a.PIDNo, SelectedSlopPTCWaterTemp.PIDNo) + .Set(a => a.LimitNo, SelectedSlopPTCWaterTemp.LimitNo) + .Set(a => a.AlarmNo, SelectedSlopPTCWaterTemp.AlarmNo) + .Where(a => a.Id == SelectedSlopPTCWaterTemp.Id) + .ExecuteUpdated().FirstOrDefault(); + + //重新查询获取的数据包括子集 + var GetUpdateData = RefreshPTCWaterTempById(SelectedSlopPTCWaterTemp.Id); + var CurIndex = ListSlopMeterPTCWaterTemp.FindIndex(a => a.Id == SelectedSlopPTCWaterTemp.Id); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterTemps!.Remove(ListSlopMeterPTCWaterTemp.Find(a => a.Id == SelectedSlopPTCWaterTemp!.Id)!); + //移除旧的数据 + ListSlopMeterPTCWaterTemp.Remove(ListSlopMeterPTCWaterTemp.Find(a => a.Id == SelectedSlopPTCWaterTemp.Id)!); + + //上级新增数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterTemps!.Insert(CurIndex, GetUpdateData); + //新增数据 + ListSlopMeterPTCWaterTemp.Insert(CurIndex, GetUpdateData); + + //移除旧的数据 + ListSlopMeterPTCWaterTempItems.Remove(ListSlopMeterPTCWaterTempItems.Where(a => a.Id == SelectedSlopPTCWaterTemp!.Id).FirstOrDefault()!); + ListSlopMeterPTCWaterTempItems.Insert(CurIndex, GetUpdateData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(ListSlopMeterPTCWaterTemp); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterTempSlopListTime(); + } + + private DelegateCommand _ProStepPTCWaterTempDeleteCmd; + /// + /// 新增PTCWaterTemp命令 + /// + public DelegateCommand ProStepPTCWaterTempDeleteCmd + { + set + { + _ProStepPTCWaterTempDeleteCmd = value; + } + get + { + if (_ProStepPTCWaterTempDeleteCmd == null) + { + _ProStepPTCWaterTempDeleteCmd = new DelegateCommand(() => ProStepPTCWaterTempDeleteCmdMethod()); + } + return _ProStepPTCWaterTempDeleteCmd; + } + } + + /// + /// 增加PTCWaterTemp命令执行方法 + /// + private void ProStepPTCWaterTempDeleteCmdMethod() + { + if (SelectedProgramSeg != null && SelectedProStepDto != null && SelectedSlopPTCWaterTemp != null && SelectedSlopPTCWaterTemp.Id != -1) + { + MessageBoxResult dialogResult = MessageBox.Show("你确定要删除当前的数据吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); + if (dialogResult == MessageBoxResult.OK) + { + FreeSql.Delete(SelectedSlopPTCWaterTemp!.Id).ExecuteAffrows(); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterTemps!.Remove(ListSlopMeterPTCWaterTemp.Find(a => a.Id == SelectedSlopPTCWaterTemp!.Id)!); + //移除旧的数据 + ListSlopMeterPTCWaterTemp.Remove(ListSlopMeterPTCWaterTemp.Find(a => a.Id == SelectedSlopPTCWaterTemp.Id)!); + + //移除旧的数据 + ListSlopMeterPTCWaterTempItems.Remove(ListSlopMeterPTCWaterTempItems.Where(a => a.Id == SelectedSlopPTCWaterTemp!.Id).FirstOrDefault()!); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(ListSlopMeterPTCWaterTemp); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterTempSlopListTime(); + SelectedSlopPTCWaterTemp = new MeterPTCWaterTemp() { Id = -1 }; + } + + } + else + { + MessageBox.Show("未发现选中要删除的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + } + } + + + + /// + /// 更新PTCWaterTemp表信息 + /// + private void RefreshMeterPTCWaterTemp() + { + ListSlopMeterPTCWaterTemp = ListProgramSeg.Where(a => a.Id == SelectedProgramSeg.Id).FirstOrDefault()!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id)! + .FirstOrDefault()!.MeterPTCWaterTemps!.ToList(); + + ListSlopMeterPTCWaterTempItems.Clear(); + + ListSlopMeterPTCWaterTempItems = new ObservableCollection(ListSlopMeterPTCWaterTemp!); + + } + + /// + /// 获取PTCWaterTemp当前的步骤的数据信息 + /// + private int AutoGetMeterPTCWaterTempStepNo() + { + var StepInfo = FreeSql.Select().Where(a => a.ProStepId == SelectedProStepDto.Id).ToList(); + if (StepInfo != null && StepInfo.Count > 0) + { + var MaxStep = StepInfo.Max(a => a.StepNo); + return MaxStep + 1; + } + else + { + return 1; + } + + } + + private DelegateCommand _ProStepPTCWaterTempConstantSaveCmd; + /// + ///ConstantSaveCommand 常值保存命令 + /// + public DelegateCommand ProStepPTCWaterTempConstantSaveCmd + { + set + { + _ProStepPTCWaterTempConstantSaveCmd = value; + } + get + { + if (_ProStepPTCWaterTempConstantSaveCmd == null) + { + _ProStepPTCWaterTempConstantSaveCmd = new DelegateCommand(() => ProStepPTCWaterTempConstantSaveCmdMethod()); + } + return _ProStepPTCWaterTempConstantSaveCmd; + } + } + /// + /// ConstantSaveCommand 常值保存命令执行方法 + /// + private void ProStepPTCWaterTempConstantSaveCmdMethod() + { + if (SelectedProStepDto == null) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //1 先判断是否有斜率数据,有则判断后删除,否则退回。 + if (ListSlopMeterPTCWaterTempItems != null && ListSlopMeterPTCWaterTempItems.Where(a => a.ValueType == ConfigValueType.Slope && a.ProStepId == SelectedProStepDto.Id).Count() > 0) + { + var result = MessageBox.Show("你将要保存常值模式的数据,同一个时刻只能配置一个模式生效,检测到【斜率】设置中存在多天数据,是否删除?【确定】将要删除斜率数据且设置常值信息,【取消】则不删除斜率数据且常值不保存", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); + if (result == MessageBoxResult.OK) + { + var ListTempDeleteData = new List(); + //删除以前的斜率数据 + foreach (var item in ListSlopMeterPTCWaterTempItems) + { + var DeleteData = FreeSql.Delete(item.Id).ExecuteDeleted().FirstOrDefault(); + ListTempDeleteData.Add(DeleteData); + } + + //再循环删除数据 + foreach (var DeleteData in ListTempDeleteData) + { + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterTemps!.Remove(ListSlopMeterPTCWaterTemp.Find(a => a.Id == DeleteData!.Id)!); + //移除旧的数据 + ListSlopMeterPTCWaterTemp.Remove(ListSlopMeterPTCWaterTemp.Find(a => a.Id == DeleteData!.Id)!); + + //移除旧的数据 + ListSlopMeterPTCWaterTempItems.Remove(ListSlopMeterPTCWaterTempItems.Where(a => a.Id == DeleteData!.Id).FirstOrDefault()!); + } + + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(ListSlopMeterPTCWaterTemp); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterTempSlopListTime(); + + } + else + { + //不删除,不进行动作 + return; + } + } + + //2 再判断之前是否存在常值数据 + var ConstPTCWaterTempData = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.ToList(); + if (ConstPTCWaterTempData != null && ConstPTCWaterTempData.Where(a => a.ValueType == ConfigValueType.Constant && a.ProStepId == SelectedProStepDto.Id).Count() == 0) + { + //没有常值数据,则新增 + var MeterPTCWaterTempData = new MeterPTCWaterTemp() + { + Constant = SelectedConstPTCWaterTempValue, + ValueType = ConfigValueType.Constant, + KeepTime = GetKeepTimeBySpeed(), + ProStepId = SelectedProStepDto.Id, + //StepNo = AutoGetMeterPTCWaterTempStepNo(), + }; + + //增加数据 + var InsertDataId = FreeSql.Insert(MeterPTCWaterTempData).ExecuteIdentity(); + + //重新查询获取的数据包括子集 + var GetInsertData = RefreshPTCWaterTempById(InsertDataId); + + //上级的新增数据到集合中 + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterTemps!.Add(GetInsertData);//常值只有一个 + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(new List { GetInsertData }); + + + } + else + { + //常值数据不为0,那么说明之前是存在数据的,则需要更改操作 + var ConstantData = ConstPTCWaterTempData!.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault(); + //更新常值信息 + FreeSql.Update() + .Set(a => a.Constant, SelectedConstPTCWaterTempValue) + .Set(a => a.KeepTime, GetKeepTimeBySpeed()) + .Where(a => a.Id == ConstantData!.Id) + .ExecuteAffrows(); + + //重新查询获取的数据包括子集 + var GetUpdateData = RefreshPTCWaterTempById(ConstantData!.Id); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterTemps!.Remove(ConstantData); + + //上级新增数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterTemps!.Add(GetUpdateData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterTempInfo = MeterPTCWaterTempToString(new List() { GetUpdateData }); + + } + } + + private bool _ProStepMeterPTCWaterTempSwitchConstSlopPar; + /// + /// Constant/Slop 切换命令的参数值 + /// + public bool ProStepMeterPTCWaterTempSwitchConstSlopPar + { + get { return _ProStepMeterPTCWaterTempSwitchConstSlopPar; } + set { _ProStepMeterPTCWaterTempSwitchConstSlopPar = value; RaisePropertyChanged(); } + } + + + private int _ProStepPTCWaterTempSwitchConstSlopIndex; + /// + /// Constant/Slop 切换命令的参数值 Index + /// + public int ProStepPTCWaterTempSwitchConstSlopIndex + { + get { return _ProStepPTCWaterTempSwitchConstSlopIndex; } + set { _ProStepPTCWaterTempSwitchConstSlopIndex = value; RaisePropertyChanged(); } + } + + + private DelegateCommand _MeterPTCWaterTempSwitchConstSlopCmd; + /// + /// PTCWaterTemp 常值和斜率切换 命令 + /// + public DelegateCommand MeterPTCWaterTempSwitchConstSlopCmd + { + set + { + _MeterPTCWaterTempSwitchConstSlopCmd = value; + } + get + { + if (_MeterPTCWaterTempSwitchConstSlopCmd == null) + { + _MeterPTCWaterTempSwitchConstSlopCmd = new DelegateCommand((obj) => MeterPTCWaterTempSwitchConstSlopCmdMethod(obj)); + } + return _MeterPTCWaterTempSwitchConstSlopCmd; + } + } + private void MeterPTCWaterTempSwitchConstSlopCmdMethod(object obj) + { + if ((int)obj == 0) + { + ProStepMeterPTCWaterTempSwitchConstSlopPar = false; + } + else + { + ProStepMeterPTCWaterTempSwitchConstSlopPar = true; + } + + } + + + private DelegateCommand _MeterPTCWaterTempParConfigCmd; + /// + /// PTCWaterTemp 仪表参数的命令 + /// + public DelegateCommand MeterPTCWaterTempParConfigCmd + { + set + { + _MeterPTCWaterTempParConfigCmd = value; + } + get + { + if (_MeterPTCWaterTempParConfigCmd == null) + { + _MeterPTCWaterTempParConfigCmd = new DelegateCommand((par) => MeterPTCWaterTempParConfigCmdMethod(par)); + } + return _MeterPTCWaterTempParConfigCmd; + } + } + /// + /// PTCWaterTemp参数设置的命令 + /// + /// + /// + private void MeterPTCWaterTempParConfigCmdMethod(object par) + { + if (par != null && par is string) + { + CallMeterParConfig("PTC功率", par! as string); + } + } + + + /// + /// 步骤数据转字符串格式 + /// + /// + /// + private string MeterPTCWaterTempToString(List data) + { + var strInfo = new StringBuilder(); + if (data != null && data.Count() > 0) + { + if (data.Where(a => a.ValueType == ConfigValueType.Slope).Count() > 0) + { + var Count = data.Count; + foreach (var item in data) + { + Count--; + strInfo.Append(item.StartValue); + strInfo.Append("->"); + strInfo.Append(item.EndValue); + strInfo.Append(" ["); + strInfo.Append(SecToString((int)item.KeepTime)); + strInfo.Append("]"); + if (Count != 0) + { + strInfo.Append(Environment.NewLine); + } + } + } + else + { + strInfo.Append(data.FirstOrDefault()!.Constant); + strInfo.Append($" [{SecToString(data.FirstOrDefault()!.KeepTime)}]"); + } + } + else + { + //空的集合数据 + strInfo.Append("---"); + } + + + + return strInfo.ToString(); + //return @"< ASDFA-ADFA-FASD-ADF "+ Environment.NewLine+" ASDFA-ADFA-FASD-ADF ASDFA-ADFA-FASD-ADF "; + } + + /// + /// 检查斜率配置时间集合是否满足要求 + /// + private void CheckPTCWaterTempSlopListTime() + { + //更新后检测时间是否匹配并界面提示 + MeterPTCWaterTempExDto.SlopTime = ListSlopMeterPTCWaterTemp.Sum(a => a.KeepTime); + if (MeterPTCWaterTempExDto.SlopTime != 0) + { + if (GetKeepTimeBySpeed() % MeterPTCWaterTempExDto.SlopTime != 0) + { + MeterPTCWaterTempExDto.SlopCycle = GetKeepTimeBySpeed() * 1.0 / MeterPTCWaterTempExDto.SlopTime; + MeterPTCWaterTempExDto.IsTimeOk = false; + } + else + { + MeterPTCWaterTempExDto.SlopCycle = GetKeepTimeBySpeed() * 1.0 / MeterPTCWaterTempExDto.SlopTime; + MeterPTCWaterTempExDto.IsTimeOk = true; + } + } + else + { + //被除数为0, + } + + } + + + /// + /// 根据ID获取MeterPTCWaterTemp数据 + /// + /// + private MeterPTCWaterTemp RefreshPTCWaterTempById(long id) + { + var Data = FreeSql.Select() + .Where(c => c.Id == id) + .Include(a => a.ProStep) + .ToList(); + + if (Data != null && Data.Count() > 0) + { + return Data.FirstOrDefault()!; + } + else + { + return new MeterPTCWaterTemp(); + } + } + + + #endregion + + #region PTCWaterFlow表 + + + + /// + /// PTCWaterFlow 初始化函数 + /// + private void PTCWaterFlowInit() + { + ListSlopMeterPTCWaterFlowItems = new ObservableCollection(); + SelectedSlopPTCWaterFlow = new MeterPTCWaterFlow(); + SelectedConstPTCWaterFlow = new MeterPTCWaterFlow(); + } + + + private ObservableCollection _ListSlopMeterPTCWaterFlowItems; + /// + /// Meter PTCWaterFlow数据集合 斜率的 + /// + public ObservableCollection ListSlopMeterPTCWaterFlowItems + { + get { return _ListSlopMeterPTCWaterFlowItems; } + set { _ListSlopMeterPTCWaterFlowItems = value; RaisePropertyChanged(); } + } + + /// + /// MeterPTCWaterFlow集合数据 斜率 + /// + public List ListSlopMeterPTCWaterFlow { get; set; } + + + private MeterPTCWaterFlow _SelectedSlopPTCWaterFlow; + /// + /// 当前选中的程序 PTCWaterFlow 斜率 + /// + public MeterPTCWaterFlow SelectedSlopPTCWaterFlow + { + get { return _SelectedSlopPTCWaterFlow; } + set { _SelectedSlopPTCWaterFlow = value; RaisePropertyChanged(); } + } + + private MeterExInfoDto _MeterPTCWaterFlowExDto = new MeterExInfoDto(); + /// + /// 当前的拓展模型 PTCWaterFlow + /// 用作统计,计算等 + /// + public MeterExInfoDto MeterPTCWaterFlowExDto + { + get { return _MeterPTCWaterFlowExDto; } + set { _MeterPTCWaterFlowExDto = value; RaisePropertyChanged(); } + } + + + + private MeterPTCWaterFlow _SelectedConstPTCWaterFlow; + /// + /// 当前选中的程序 PTCWaterFlow 常值 + /// + public MeterPTCWaterFlow SelectedConstPTCWaterFlow + { + get { return _SelectedConstPTCWaterFlow; } + set { _SelectedConstPTCWaterFlow = value; RaisePropertyChanged(); } + } + + + private double _SelectedConstPTCWaterFlowValue; + /// + /// 常值模式设置的数据 + /// + public double SelectedConstPTCWaterFlowValue + { + get { return _SelectedConstPTCWaterFlowValue; } + set { _SelectedConstPTCWaterFlowValue = value; RaisePropertyChanged(); } + } + + + + private DelegateCommand _MeterPTCWaterFlowSlopSelectedChangedCmd; + /// + /// 刷新数据命令 + /// + public DelegateCommand MeterPTCWaterFlowSlopSelectedChangedCmd + { + set + { + _MeterPTCWaterFlowSlopSelectedChangedCmd = value; + } + get + { + if (_MeterPTCWaterFlowSlopSelectedChangedCmd == null) + { + _MeterPTCWaterFlowSlopSelectedChangedCmd = new DelegateCommand((str) => MeterPTCWaterFlowSlopSelectedChangedCmdMethod(str)); + } + return _MeterPTCWaterFlowSlopSelectedChangedCmd; + } + } + + + /// + /// PTCWaterFlow表选中行的执行方法 + /// + /// + /// + private void MeterPTCWaterFlowSlopSelectedChangedCmdMethod(object par) + { + var SelectedData = par as MeterPTCWaterFlow; + if (SelectedData != null) + { + //直接属性赋值,防止更改后未保存但是列表是同一个实例,列表更新了 + SelectedSlopPTCWaterFlow = new MeterPTCWaterFlow + { + StartValue = SelectedData.StartValue, + EndValue = SelectedData.EndValue, + StepNo = SelectedData.StepNo, + Id = SelectedData.Id, + ProStepId = SelectedData.ProStepId, + ProStep = SelectedData.ProStep, + Constant = SelectedData.Constant, + ValueType = SelectedData.ValueType, + CreateTime = SelectedData.CreateTime, + KeepTime = SelectedData.KeepTime, + AlarmNo = SelectedData.AlarmNo, + LimitNo = SelectedData.LimitNo, + PIDNo = SelectedData.PIDNo, + }; + + } + } + + private DelegateCommand _ProStepPTCWaterFlowAddCmd; + /// + /// 新增PTCWaterFlow命令 + /// + public DelegateCommand ProStepPTCWaterFlowAddCmd + { + set + { + _ProStepPTCWaterFlowAddCmd = value; + } + get + { + if (_ProStepPTCWaterFlowAddCmd == null) + { + _ProStepPTCWaterFlowAddCmd = new DelegateCommand(() => ProStepPTCWaterFlowAddCmdMethod()); + } + return _ProStepPTCWaterFlowAddCmd; + } + } + + /// + /// 增加PTCWaterFlow命令执行方法 + /// + private void ProStepPTCWaterFlowAddCmdMethod() + { + if (SelectedProgramSeg != null && SelectedProStepDto == null) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //if (GetKeepTimeBySpeed() < (ListSlopMeterPTCWaterFlow.Sum(a => a.KeepTime) + SelectedSlopPTCWaterFlow.KeepTime)) + //{ + // MessageBox.Show("请把设置对象和速度表的时间匹配上!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + // return; + //} + + //删除可能之前的常值数据 + var Data = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.ToList(); + if (Data != null && Data.Where(a => a.ValueType == ConfigValueType.Constant).Any()) + { + //常值数据库数据删除 + FreeSql.Delete(Data.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault()!.Id).ExecuteAffrows(); + //界面集合数据删除 + var ConstData = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault(); + ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.Remove(ConstData!); + } + + //当前的速度表集合数据 + var MeterPTCWaterFlows = ListSlopMeterPTCWaterFlowItems.ToList(); + + var MeterPTCWaterFlowData = new MeterPTCWaterFlow() + { + StartValue = SelectedSlopPTCWaterFlow.StartValue, + EndValue = SelectedSlopPTCWaterFlow.EndValue, + KeepTime = SelectedSlopPTCWaterFlow.KeepTime, + ProStepId = SelectedProStepDto.Id, + AlarmNo = SelectedSlopPTCWaterFlow.AlarmNo, + LimitNo = SelectedSlopPTCWaterFlow.LimitNo, + PIDNo = SelectedSlopPTCWaterFlow.PIDNo, + ValueType = ConfigValueType.Slope, + StepNo = AutoGetMeterPTCWaterFlowStepNo(), + }; + + //增加数据 + var InsertDataId = FreeSql.Insert(MeterPTCWaterFlowData).ExecuteIdentity(); + + //重新查询获取的数据包括子集 + var GetInsertData = RefreshPTCWaterFlowById(InsertDataId); + //var CurIndex = ListProStep.FindIndex(a => a.Id == InsertStepData!.Id); + + var CurIndex = GetListMeterIndex(SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.Count(), + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.Count() != 0 ? SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.Max(a => a.StepNo) : 0); + + //上级的新增数据到集合中 + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.Insert(CurIndex, GetInsertData); + //新增数据到集合中 + ListSlopMeterPTCWaterFlow.Insert(CurIndex, GetInsertData); + + //新增数据到界面集合中 + ListSlopMeterPTCWaterFlowItems.Insert(CurIndex, GetInsertData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(ListSlopMeterPTCWaterFlow); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterFlowSlopListTime(); + SelectedSlopPTCWaterFlow = new MeterPTCWaterFlow() { Id = -1 }; + } + + + private DelegateCommand _ProStepPTCWaterFlowEditCmd; + /// + /// 新增PTCWaterFlow命令 + /// + public DelegateCommand ProStepPTCWaterFlowEditCmd + { + set + { + _ProStepPTCWaterFlowEditCmd = value; + } + get + { + if (_ProStepPTCWaterFlowEditCmd == null) + { + _ProStepPTCWaterFlowEditCmd = new DelegateCommand(() => ProStepPTCWaterFlowEditCmdMethod()); + } + return _ProStepPTCWaterFlowEditCmd; + } + } + + /// + /// 编辑PTCWaterFlow命令执行方法 + /// + private void ProStepPTCWaterFlowEditCmdMethod() + { + if (SelectedProgramSeg == null || SelectedProStepDto == null || SelectedSlopPTCWaterFlow == null || SelectedSlopPTCWaterFlow.Id == -1) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //if (GetKeepTimeBySpeed() < (ListSlopMeterPTCWaterFlow.Where(a => a.Id != SelectedSlopPTCWaterFlow!.Id).Sum(a => a.KeepTime) + SelectedSlopPTCWaterFlow!.KeepTime)) + //{ + // MessageBox.Show("请把设置对象和速度表的时间匹配上!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + // return; + //} + + var UpdateData = FreeSql.Update() + .Set(a => a.StartValue, SelectedSlopPTCWaterFlow.StartValue) + .Set(a => a.EndValue, SelectedSlopPTCWaterFlow.EndValue) + .Set(a => a.KeepTime, SelectedSlopPTCWaterFlow.KeepTime) + .Set(a => a.StepNo, SelectedSlopPTCWaterFlow.StepNo) + .Set(a => a.PIDNo, SelectedSlopPTCWaterFlow.PIDNo) + .Set(a => a.LimitNo, SelectedSlopPTCWaterFlow.LimitNo) + .Set(a => a.AlarmNo, SelectedSlopPTCWaterFlow.AlarmNo) + .Where(a => a.Id == SelectedSlopPTCWaterFlow.Id) + .ExecuteUpdated().FirstOrDefault(); + + //重新查询获取的数据包括子集 + var GetUpdateData = RefreshPTCWaterFlowById(SelectedSlopPTCWaterFlow.Id); + var CurIndex = ListSlopMeterPTCWaterFlow.FindIndex(a => a.Id == SelectedSlopPTCWaterFlow.Id); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterFlows!.Remove(ListSlopMeterPTCWaterFlow.Find(a => a.Id == SelectedSlopPTCWaterFlow!.Id)!); + //移除旧的数据 + ListSlopMeterPTCWaterFlow.Remove(ListSlopMeterPTCWaterFlow.Find(a => a.Id == SelectedSlopPTCWaterFlow.Id)!); + + //上级新增数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterFlows!.Insert(CurIndex, GetUpdateData); + //新增数据 + ListSlopMeterPTCWaterFlow.Insert(CurIndex, GetUpdateData); + + //移除旧的数据 + ListSlopMeterPTCWaterFlowItems.Remove(ListSlopMeterPTCWaterFlowItems.Where(a => a.Id == SelectedSlopPTCWaterFlow!.Id).FirstOrDefault()!); + ListSlopMeterPTCWaterFlowItems.Insert(CurIndex, GetUpdateData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(ListSlopMeterPTCWaterFlow); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterFlowSlopListTime(); + } + + private DelegateCommand _ProStepPTCWaterFlowDeleteCmd; + /// + /// 新增PTCWaterFlow命令 + /// + public DelegateCommand ProStepPTCWaterFlowDeleteCmd + { + set + { + _ProStepPTCWaterFlowDeleteCmd = value; + } + get + { + if (_ProStepPTCWaterFlowDeleteCmd == null) + { + _ProStepPTCWaterFlowDeleteCmd = new DelegateCommand(() => ProStepPTCWaterFlowDeleteCmdMethod()); + } + return _ProStepPTCWaterFlowDeleteCmd; + } + } + + /// + /// 增加PTCWaterFlow命令执行方法 + /// + private void ProStepPTCWaterFlowDeleteCmdMethod() + { + if (SelectedProgramSeg != null && SelectedProStepDto != null && SelectedSlopPTCWaterFlow != null && SelectedSlopPTCWaterFlow.Id != -1) + { + MessageBoxResult dialogResult = MessageBox.Show("你确定要删除当前的数据吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); + if (dialogResult == MessageBoxResult.OK) + { + FreeSql.Delete(SelectedSlopPTCWaterFlow!.Id).ExecuteAffrows(); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterFlows!.Remove(ListSlopMeterPTCWaterFlow.Find(a => a.Id == SelectedSlopPTCWaterFlow!.Id)!); + //移除旧的数据 + ListSlopMeterPTCWaterFlow.Remove(ListSlopMeterPTCWaterFlow.Find(a => a.Id == SelectedSlopPTCWaterFlow.Id)!); + + //移除旧的数据 + ListSlopMeterPTCWaterFlowItems.Remove(ListSlopMeterPTCWaterFlowItems.Where(a => a.Id == SelectedSlopPTCWaterFlow!.Id).FirstOrDefault()!); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(ListSlopMeterPTCWaterFlow); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterFlowSlopListTime(); + SelectedSlopPTCWaterFlow = new MeterPTCWaterFlow() { Id = -1 }; + } + + } + else + { + MessageBox.Show("未发现选中要删除的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + } + } + + + + /// + /// 更新PTCWaterFlow表信息 + /// + private void RefreshMeterPTCWaterFlow() + { + ListSlopMeterPTCWaterFlow = ListProgramSeg.Where(a => a.Id == SelectedProgramSeg.Id).FirstOrDefault()!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id)! + .FirstOrDefault()!.MeterPTCWaterFlows!.ToList(); + + ListSlopMeterPTCWaterFlowItems.Clear(); + + ListSlopMeterPTCWaterFlowItems = new ObservableCollection(ListSlopMeterPTCWaterFlow!); + + } + + /// + /// 获取PTCWaterFlow当前的步骤的数据信息 + /// + private int AutoGetMeterPTCWaterFlowStepNo() + { + var StepInfo = FreeSql.Select().Where(a => a.ProStepId == SelectedProStepDto.Id).ToList(); + if (StepInfo != null && StepInfo.Count > 0) + { + var MaxStep = StepInfo.Max(a => a.StepNo); + return MaxStep + 1; + } + else + { + return 1; + } + + } + + private DelegateCommand _ProStepPTCWaterFlowConstantSaveCmd; + /// + ///ConstantSaveCommand 常值保存命令 + /// + public DelegateCommand ProStepPTCWaterFlowConstantSaveCmd + { + set + { + _ProStepPTCWaterFlowConstantSaveCmd = value; + } + get + { + if (_ProStepPTCWaterFlowConstantSaveCmd == null) + { + _ProStepPTCWaterFlowConstantSaveCmd = new DelegateCommand(() => ProStepPTCWaterFlowConstantSaveCmdMethod()); + } + return _ProStepPTCWaterFlowConstantSaveCmd; + } + } + /// + /// ConstantSaveCommand 常值保存命令执行方法 + /// + private void ProStepPTCWaterFlowConstantSaveCmdMethod() + { + if (SelectedProStepDto == null) + { + MessageBox.Show("未发现选中要操作的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + + //1 先判断是否有斜率数据,有则判断后删除,否则退回。 + if (ListSlopMeterPTCWaterFlowItems != null && ListSlopMeterPTCWaterFlowItems.Where(a => a.ValueType == ConfigValueType.Slope && a.ProStepId == SelectedProStepDto.Id).Count() > 0) + { + var result = MessageBox.Show("你将要保存常值模式的数据,同一个时刻只能配置一个模式生效,检测到【斜率】设置中存在多天数据,是否删除?【确定】将要删除斜率数据且设置常值信息,【取消】则不删除斜率数据且常值不保存", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); + if (result == MessageBoxResult.OK) + { + var ListTempDeleteData = new List(); + //删除以前的斜率数据 + foreach (var item in ListSlopMeterPTCWaterFlowItems) + { + var DeleteData = FreeSql.Delete(item.Id).ExecuteDeleted().FirstOrDefault(); + ListTempDeleteData.Add(DeleteData); + } + + //再循环删除数据 + foreach (var DeleteData in ListTempDeleteData) + { + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterFlows!.Remove(ListSlopMeterPTCWaterFlow.Find(a => a.Id == DeleteData!.Id)!); + //移除旧的数据 + ListSlopMeterPTCWaterFlow.Remove(ListSlopMeterPTCWaterFlow.Find(a => a.Id == DeleteData!.Id)!); + + //移除旧的数据 + ListSlopMeterPTCWaterFlowItems.Remove(ListSlopMeterPTCWaterFlowItems.Where(a => a.Id == DeleteData!.Id).FirstOrDefault()!); + } + + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(ListSlopMeterPTCWaterFlow); + + //更新后检测时间是否匹配并界面提示 + CheckPTCWaterFlowSlopListTime(); + + } + else + { + //不删除,不进行动作 + return; + } + } + + //2 再判断之前是否存在常值数据 + var ConstPTCWaterFlowData = ListProStep.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.ToList(); + if (ConstPTCWaterFlowData != null && ConstPTCWaterFlowData.Where(a => a.ValueType == ConfigValueType.Constant && a.ProStepId == SelectedProStepDto.Id).Count() == 0) + { + //没有常值数据,则新增 + var MeterPTCWaterFlowData = new MeterPTCWaterFlow() + { + Constant = SelectedConstPTCWaterFlowValue, + ValueType = ConfigValueType.Constant, + KeepTime = GetKeepTimeBySpeed(), + ProStepId = SelectedProStepDto.Id, + //StepNo = AutoGetMeterPTCWaterFlowStepNo(), + }; + + //增加数据 + var InsertDataId = FreeSql.Insert(MeterPTCWaterFlowData).ExecuteIdentity(); + + //重新查询获取的数据包括子集 + var GetInsertData = RefreshPTCWaterFlowById(InsertDataId); + + //上级的新增数据到集合中 + SelectedProgramSeg!.ProSteps!.Where(a => a.Id == SelectedProStepDto.Id).FirstOrDefault()!.MeterPTCWaterFlows!.Add(GetInsertData);//常值只有一个 + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(new List { GetInsertData }); + + + } + else + { + //常值数据不为0,那么说明之前是存在数据的,则需要更改操作 + var ConstantData = ConstPTCWaterFlowData!.Where(a => a.ValueType == ConfigValueType.Constant).FirstOrDefault(); + //更新常值信息 + FreeSql.Update() + .Set(a => a.Constant, SelectedConstPTCWaterFlowValue) + .Set(a => a.KeepTime, GetKeepTimeBySpeed()) + .Where(a => a.Id == ConstantData!.Id) + .ExecuteAffrows(); + + //重新查询获取的数据包括子集 + var GetUpdateData = RefreshPTCWaterFlowById(ConstantData!.Id); + + //删除上级的旧数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterFlows!.Remove(ConstantData); + + //上级新增数据 + SelectedProgramSeg!.ProSteps!.FindFirst(a => a.Id == SelectedProStepDto!.Id).MeterPTCWaterFlows!.Add(GetUpdateData); + + //更新ProStep的字符串的集合数据 + ListProStepDtoItems.FindFirst(a => a.Id == SelectedProStepDto!.Id)!.MeterPTCWaterFlowInfo = MeterPTCWaterFlowToString(new List() { GetUpdateData }); + + } + } + + private bool _ProStepMeterPTCWaterFlowSwitchConstSlopPar; + /// + /// Constant/Slop 切换命令的参数值 + /// + public bool ProStepMeterPTCWaterFlowSwitchConstSlopPar + { + get { return _ProStepMeterPTCWaterFlowSwitchConstSlopPar; } + set { _ProStepMeterPTCWaterFlowSwitchConstSlopPar = value; RaisePropertyChanged(); } + } + + + private int _ProStepPTCWaterFlowSwitchConstSlopIndex; + /// + /// Constant/Slop 切换命令的参数值 Index + /// + public int ProStepPTCWaterFlowSwitchConstSlopIndex + { + get { return _ProStepPTCWaterFlowSwitchConstSlopIndex; } + set { _ProStepPTCWaterFlowSwitchConstSlopIndex = value; RaisePropertyChanged(); } + } + + + private DelegateCommand _MeterPTCWaterFlowSwitchConstSlopCmd; + /// + /// PTCWaterFlow 常值和斜率切换 命令 + /// + public DelegateCommand MeterPTCWaterFlowSwitchConstSlopCmd + { + set + { + _MeterPTCWaterFlowSwitchConstSlopCmd = value; + } + get + { + if (_MeterPTCWaterFlowSwitchConstSlopCmd == null) + { + _MeterPTCWaterFlowSwitchConstSlopCmd = new DelegateCommand((obj) => MeterPTCWaterFlowSwitchConstSlopCmdMethod(obj)); + } + return _MeterPTCWaterFlowSwitchConstSlopCmd; + } + } + private void MeterPTCWaterFlowSwitchConstSlopCmdMethod(object obj) + { + if ((int)obj == 0) + { + ProStepMeterPTCWaterFlowSwitchConstSlopPar = false; + } + else + { + ProStepMeterPTCWaterFlowSwitchConstSlopPar = true; + } + + } + + + private DelegateCommand _MeterPTCWaterFlowParConfigCmd; + /// + /// PTCWaterFlow 仪表参数的命令 + /// + public DelegateCommand MeterPTCWaterFlowParConfigCmd + { + set + { + _MeterPTCWaterFlowParConfigCmd = value; + } + get + { + if (_MeterPTCWaterFlowParConfigCmd == null) + { + _MeterPTCWaterFlowParConfigCmd = new DelegateCommand((par) => MeterPTCWaterFlowParConfigCmdMethod(par)); + } + return _MeterPTCWaterFlowParConfigCmd; + } + } + /// + /// PTCWaterFlow参数设置的命令 + /// + /// + /// + private void MeterPTCWaterFlowParConfigCmdMethod(object par) + { + if (par != null && par is string) + { + CallMeterParConfig("PTC功率", par! as string); + } + } + + + /// + /// 步骤数据转字符串格式 + /// + /// + /// + private string MeterPTCWaterFlowToString(List data) + { + var strInfo = new StringBuilder(); + if (data != null && data.Count() > 0) + { + if (data.Where(a => a.ValueType == ConfigValueType.Slope).Count() > 0) + { + var Count = data.Count; + foreach (var item in data) + { + Count--; + strInfo.Append(item.StartValue); + strInfo.Append("->"); + strInfo.Append(item.EndValue); + strInfo.Append(" ["); + strInfo.Append(SecToString((int)item.KeepTime)); + strInfo.Append("]"); + if (Count != 0) + { + strInfo.Append(Environment.NewLine); + } + } + } + else + { + strInfo.Append(data.FirstOrDefault()!.Constant); + strInfo.Append($" [{SecToString(data.FirstOrDefault()!.KeepTime)}]"); + } + } + else + { + //空的集合数据 + strInfo.Append("---"); + } + + + + return strInfo.ToString(); + //return @"< ASDFA-ADFA-FASD-ADF "+ Environment.NewLine+" ASDFA-ADFA-FASD-ADF ASDFA-ADFA-FASD-ADF "; + } + + /// + /// 检查斜率配置时间集合是否满足要求 + /// + private void CheckPTCWaterFlowSlopListTime() + { + //更新后检测时间是否匹配并界面提示 + MeterPTCWaterFlowExDto.SlopTime = ListSlopMeterPTCWaterFlow.Sum(a => a.KeepTime); + if (MeterPTCWaterFlowExDto.SlopTime != 0) + { + if (GetKeepTimeBySpeed() % MeterPTCWaterFlowExDto.SlopTime != 0) + { + MeterPTCWaterFlowExDto.SlopCycle = GetKeepTimeBySpeed() * 1.0 / MeterPTCWaterFlowExDto.SlopTime; + MeterPTCWaterFlowExDto.IsTimeOk = false; + } + else + { + MeterPTCWaterFlowExDto.SlopCycle = GetKeepTimeBySpeed() * 1.0 / MeterPTCWaterFlowExDto.SlopTime; + MeterPTCWaterFlowExDto.IsTimeOk = true; + } + } + else + { + //被除数为0, + } + + } + + + /// + /// 根据ID获取MeterPTCWaterFlow数据 + /// + /// + private MeterPTCWaterFlow RefreshPTCWaterFlowById(long id) + { + var Data = FreeSql.Select() + .Where(c => c.Id == id) + .Include(a => a.ProStep) + .ToList(); + + if (Data != null && Data.Count() > 0) + { + return Data.FirstOrDefault()!; + } + else + { + return new MeterPTCWaterFlow(); + } + } + + + #endregion + + #region EnvRH表 diff --git a/CapMachine.Wpf/Views/ProConfigView.xaml b/CapMachine.Wpf/Views/ProConfigView.xaml index 84919f8..e8f2633 100644 --- a/CapMachine.Wpf/Views/ProConfigView.xaml +++ b/CapMachine.Wpf/Views/ProConfigView.xaml @@ -843,6 +843,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1466,7 +1503,9 @@ Style="{StaticResource MaterialDesignSwitchToggleButton}" ToolTip="PTC使能" /> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +