From 1caa2fdd9f25a8c506cea27becf81e90ad8d0c4a Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Sat, 1 Mar 2025 11:26:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E5=85=B6=E4=BB=96=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E7=9A=84=E4=B8=8B=E8=BD=BD=E5=8F=82=E6=95=B0=20?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=20=E5=81=9C=E6=AD=A2=20=20=E6=9A=82=E5=81=9C?= =?UTF-8?q?=E7=9A=84=E9=98=B2=E5=91=86=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CapMachine.Wpf/Models/PlcLoadConfigCell.cs | 27 +- .../Models/ProModelPars/ProExModel.cs | 45 +- .../Models/ProModelPars/RunStepType.cs | 18 + CapMachine.Wpf/Models/ProRunTimeCalc.cs | 144 + .../Models/State/MachineRunState.cs | 145 +- CapMachine.Wpf/Models/State/RunState.cs | 6 + CapMachine.Wpf/Models/Tag/ITag.cs | 5 + CapMachine.Wpf/Models/Tag/Tag.cs | 25 + CapMachine.Wpf/PrismEvent/ProRunEvent.cs | 14 + CapMachine.Wpf/PrismEvent/ProRunEventMsg.cs | 24 + .../Services/MachineRtDataService.cs | 190 +- CapMachine.Wpf/Services/ProRuntimeService.cs | 2611 ++++++++++++++++- CapMachine.Wpf/ViewModels/MonitorViewModel.cs | 163 +- .../ViewModels/ProConfigViewModel.cs | 40 - CapMachine.Wpf/Views/MonitorView.xaml | 53 +- CapMachine.Wpf/Views/ProConfigView.xaml | 68 +- 16 files changed, 3318 insertions(+), 260 deletions(-) create mode 100644 CapMachine.Wpf/Models/ProRunTimeCalc.cs create mode 100644 CapMachine.Wpf/PrismEvent/ProRunEvent.cs create mode 100644 CapMachine.Wpf/PrismEvent/ProRunEventMsg.cs diff --git a/CapMachine.Wpf/Models/PlcLoadConfigCell.cs b/CapMachine.Wpf/Models/PlcLoadConfigCell.cs index 8903d3a..063badb 100644 --- a/CapMachine.Wpf/Models/PlcLoadConfigCell.cs +++ b/CapMachine.Wpf/Models/PlcLoadConfigCell.cs @@ -20,7 +20,32 @@ namespace CapMachine.Wpf.Models /// /// 地址 /// - public string? Address { get; set; } + public string? SvAddress { get; set; } + + /// + /// 地址信息 Pid_P + /// + public string? Pid_PAddress { get; set; } + + /// + /// 地址信息 Pid_I + /// + public string? Pid_IAddress { get; set; } + + /// + /// 地址信息 Pid_D + /// + public string? Pid_DAddress { get; set; } + + /// + /// 地址信息 Limit_Up + /// + public string? Limit_UpAddress { get; set; } + + /// + /// 地址信息 Limit_Down + /// + public string? Limit_DownAddress { get; set; } /// /// 精度 1,10,100,1000 diff --git a/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs b/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs index 1f6e0e7..155cca9 100644 --- a/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs +++ b/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs @@ -1,4 +1,5 @@ -using CapMachine.Wpf.ChannelModel; +using AngleSharp.Dom.Events; +using CapMachine.Wpf.ChannelModel; using CapMachine.Wpf.Services; using ImTools; using Masuit.Tools; @@ -34,8 +35,13 @@ namespace CapMachine.Wpf.Models.ProModelPars CycleTimer.AutoReset = true; CycleTimer.Enabled = true; CycleTimer.Start(); + } + /// + /// 是否是速度仪表参数 + /// + public bool IsSpeed { get; set; }=false; /// /// 程序执行管道 @@ -96,7 +102,11 @@ namespace CapMachine.Wpf.Models.ProModelPars #region 仪表步骤执行时间信息 - public EventHandler RunTimeCallSglEvent; + /// + /// 速度运行结束事件 + /// + public event EventHandler SpeedRunEndEvent; + /// /// 是否启用 @@ -145,12 +155,17 @@ namespace CapMachine.Wpf.Models.ProModelPars //RunEnable = false; //时间到了触发下载下一步步骤 + + //不为空的数据 if (NextProStepExe == null) { Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【参数名称】:{MeterName} " + $"【Msg】:当前仪表参数全部执行完毕 "); + //速度执行结束发布事件 + if (IsSpeed) SpeedRunEndEvent.Invoke(this, "OK"); + //为空时不执行后续的数据 RunEnable = false; return; @@ -185,6 +200,18 @@ namespace CapMachine.Wpf.Models.ProModelPars ////////发送步骤信息/////////// if (NextProStepExe.ExistSlop) { + //存在斜坡数据,SV是通过集合陆续打点写入,但是PID和Limit需要判断是否要写入,只要写一次即可 + ProRunChannel.Writer.WriteAsync(new ProRunChannelData() + { + MeterName = MeterName, + SV = NextProStepExe.EndSV, + ProSegName = NextProStepExe.ProSegName, + MeterStep = NextProStepExe.MeterStep, + CurLoadLimit = LimitResult == true ? new Limit() { Up = (short)NextProStepExe.CurConfigLimitDto.Up, Down = (short)NextProStepExe.CurConfigLimitDto.Down } : new Limit(), + 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), + }); + //存在坡度数据 var SecStepDur = NextProStepExe.EndSV - NextProStepExe.StartSV; var SecStepValue = SecStepDur * 1.0 / NextProStepExe.KeepTime; @@ -256,7 +283,7 @@ namespace CapMachine.Wpf.Models.ProModelPars if (ListProStepExe.Where(x => x.MeterStep == CurProStepExe.MeterStep + 1).Any()) { //存在下一步数据 - NextProStepExe = ListProStepExe.FirstOrDefault(x => x.MeterStep == CurProStepExe.MeterStep + 1); + NextProStepExe = ListProStepExe.FirstOrDefault(x => x.MeterStep == CurProStepExe.MeterStep + 1)!; } else { @@ -312,6 +339,18 @@ namespace CapMachine.Wpf.Models.ProModelPars { return RunStepType.StepSV; } + else if (pid && limit) + { + return RunStepType.LimitPid; + } + else if (limit) + { + return RunStepType.Limit; + } + else if (pid) + { + return RunStepType.Pid; + } else { return RunStepType.Step; diff --git a/CapMachine.Wpf/Models/ProModelPars/RunStepType.cs b/CapMachine.Wpf/Models/ProModelPars/RunStepType.cs index 9089fa4..0db343a 100644 --- a/CapMachine.Wpf/Models/ProModelPars/RunStepType.cs +++ b/CapMachine.Wpf/Models/ProModelPars/RunStepType.cs @@ -35,6 +35,24 @@ namespace CapMachine.Wpf.Models.ProModelPars /// StepSV = 4, + /// + /// 正常的步骤信息-Limit 下载数据 + /// 就是:包括:SV PID和SLIMIT的数据,当然SV PID和SLIMIT跟上次是一样的话,则不需要下载 + /// + LimitPid = 5, + + /// + /// 正常的步骤信息-Limit 下载数据 + /// 就是:包括:SV PID和SLIMIT的数据,当然SV PID和SLIMIT跟上次是一样的话,则不需要下载 + /// + Limit = 6, + + /// + /// 正常的步骤信息-PID 下载数据 + /// 就是:包括:SV PID和SLIMIT的数据,当然SV PID和SLIMIT跟上次是一样的话,则不需要下载 + /// + Pid = 7, + /// /// 斜率单元 /// 带斜率的数据打点执行,只传送SV值 diff --git a/CapMachine.Wpf/Models/ProRunTimeCalc.cs b/CapMachine.Wpf/Models/ProRunTimeCalc.cs new file mode 100644 index 0000000..36b0a71 --- /dev/null +++ b/CapMachine.Wpf/Models/ProRunTimeCalc.cs @@ -0,0 +1,144 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Timers; +using System.Windows; +using System.Windows.Threading; + +namespace CapMachine.Wpf.Models +{ + /// + /// 程序运行时间统计 + /// + public class ProRunTimeCalc : BindableBase + { + public ProRunTimeCalc() + { + //秒触发一次 + CycleTimer = new System.Timers.Timer(1000); + CycleTimer.Elapsed += ProRunCycleAction; + CycleTimer.AutoReset = true; + CycleTimer.Enabled = true; + + } + + /// + /// 程序运行时间周期统计 + /// + /// + /// + /// + private void ProRunCycleAction(object? sender, ElapsedEventArgs e) + { + Application.Current.Dispatcher.BeginInvoke(new Action(() => + { + CalcTime(); + })); + + //CycleTimer.Stop(); + + //CycleTimer.Start(); + } + + /// + /// 统计时间 + /// + private void CalcTime() + { + ProEndDt = DateTime.Now; + + ProRunTimeStr = ConvertSecToDHMS((int)((ProEndDt - ProStartDt).TotalSeconds - PauseTotalSecTime)); + } + + private string ConvertSecToDHMS(int totalSeconds) + { + // 驗證非負(可根據需求調整) + if (totalSeconds < 0) + return "00:00:00:00"; + + int days = totalSeconds / 86400; // 1天 = 86400秒 + int remainingSeconds = totalSeconds % 86400; + + int hours = remainingSeconds / 3600; // 1小時 = 3600秒 + remainingSeconds %= 3600; + + int minutes = remainingSeconds / 60; // 1分鐘 = 60秒 + int seconds = remainingSeconds % 60; + + // 格式化輸出,確保時、分、秒為兩位數 + return $"{days}天:{hours:D2}时:{minutes:D2}分:{seconds:D2}秒"; + } + + /// + /// 开始计时 + /// + public void StartProRunTime() + { + ProStartDt = DateTime.Now; + CycleTimer.Start(); + } + + /// + /// 暂停计时 + /// + public void PauseProRunTime() + { + CycleTimer.Stop(); + } + + /// + /// 继续计时 + /// + public void ContinueProRunTime() + { + CycleTimer.Start(); + } + + /// + /// 结束计时 + /// + public void EndProRunTime() + { + CycleTimer.Stop(); + CalcTime(); + } + + /// + /// 周期定时器 + /// + private System.Timers.Timer CycleTimer { get; set; } + + + /// + /// 程序开始的时间 + /// + public DateTime ProStartDt { get; set; } + + /// + /// 程序结束的时间 + /// + public DateTime ProEndDt { get; set; } + + + private string? _ProRunTimeStr; + /// + /// 程序运行时间字符串 + /// + public string? ProRunTimeStr + { + get { return _ProRunTimeStr; } + set { _ProRunTimeStr = value; RaisePropertyChanged(); } + } + + /// + /// 全部的暂停的时间 + /// 可能暂停多次 + /// + public int PauseTotalSecTime { get; set; } + + + } +} diff --git a/CapMachine.Wpf/Models/State/MachineRunState.cs b/CapMachine.Wpf/Models/State/MachineRunState.cs index 21fa9ea..e4a5307 100644 --- a/CapMachine.Wpf/Models/State/MachineRunState.cs +++ b/CapMachine.Wpf/Models/State/MachineRunState.cs @@ -71,6 +71,7 @@ namespace CapMachine.Wpf.Models /// private void InitConfig() { + //未配置触发器 CanFire 返回值 false //状态机初始化 StateMachine = new StateMachine(RunState.Wait); @@ -80,54 +81,82 @@ namespace CapMachine.Wpf.Models .PermitIf(RunStateTrig.AlarmTrig, RunState.Alarm, () => AlarmPreValid()) .PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid()) //.Permit(RunStateTrig.StartTrig, RunState.Run) - //.Permit(RunStateTrig.ResetTrig, RunState.Wait) - .PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid()) - .PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid()) - .Ignore(RunStateTrig.ResetTrig) - .Ignore(RunStateTrig.WaitTrig); + .PermitIf(RunStateTrig.ResetTrig, RunState.Stop, () => StopPreValid()); + //.PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid()) + //.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid()) + //.Ignore(RunStateTrig.ResetTrig); + //.Ignore(RunStateTrig.ContinueTrig) + //.Ignore(RunStateTrig.WaitTrig); StateMachine.Configure(RunState.Alarm) .OnEntry(t => AlarmEntryCall()) .OnExit(t => AlarmExitCall()) .PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid()) - .PermitIf(RunStateTrig.ResetTrig, RunState.Wait, () => WaitPreValid()) - .PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid()) - .PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid()) - .PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid()) - .Ignore(RunStateTrig.AlarmTrig); + .PermitIf(RunStateTrig.ResetTrig, RunState.Stop, () => StopPreValid()); + //.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid()) + //.PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid()) + //.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid()) + //.Ignore(RunStateTrig.ContinueTrig) + //.Ignore(RunStateTrig.AlarmTrig); StateMachine.Configure(RunState.Run) .OnEntry(t => RunEntryCall()) .OnExit(t => RunExitCall()) - .PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid()) - .PermitIf(RunStateTrig.ResetTrig, RunState.Wait, () => WaitPreValid()) + //.PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid()) + .PermitIf(RunStateTrig.ResetTrig, RunState.Stop, () => StopPreValid()) .PermitIf(RunStateTrig.AlarmTrig, RunState.Alarm, () => AlarmPreValid()) .PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid()) - .PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid()) - .Ignore(RunStateTrig.StartTrig); + .PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid()); + //.PermitIf(RunStateTrig.ContinueTrig, RunState.Stop, () => false) + //.Ignore(RunStateTrig.ContinueTrig) + //.Ignore(RunStateTrig.StartTrig); StateMachine.Configure(RunState.Stop) .OnEntry(t => StopEntryCall()) .OnExit(t => StopExitCall()) .PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid()) - .PermitIf(RunStateTrig.ResetTrig, RunState.Wait, () => WaitPreValid()) .PermitIf(RunStateTrig.AlarmTrig, RunState.Alarm, () => AlarmPreValid()) - .PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid()) - .PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid()) - .Ignore(RunStateTrig.EndTrig); + .PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid()); + //.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid()) + //.Ignore(RunStateTrig.ContinueTrig) + //.Ignore(RunStateTrig.PauseTrig) + //.Ignore(RunStateTrig.EndTrig); StateMachine.Configure(RunState.Pause) .OnEntry(t => PauseEntryCall()) .OnExit(t => PauseExitCall()) - .PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid()) - .PermitIf(RunStateTrig.ResetTrig, RunState.Wait, () => WaitPreValid()) + .Permit(RunStateTrig.ContinueTrig, RunState.Run) + //.PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid()) + .PermitIf(RunStateTrig.ResetTrig, RunState.Stop, () => StopPreValid()) .PermitIf(RunStateTrig.AlarmTrig, RunState.Alarm, () => AlarmPreValid()) - .PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid()) - .PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid()) - .Ignore(RunStateTrig.PauseTrig); + //.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid()) + .Permit(RunStateTrig.EndTrig, RunState.Stop); + //.Ignore(RunStateTrig.PauseTrig); } + private bool _BtnStartState; + /// + /// 界面的开始按钮状态 + /// + public bool BtnStartState + { + get { return _BtnStartState; } + set { _BtnStartState = value; RaisePropertyChanged(); } + } + + private bool _BtnEndState; + /// + /// 界面的结束按钮状态 + /// + public bool BtnEndState + { + get { return _BtnEndState; } + set { _BtnEndState = value; RaisePropertyChanged(); } + } + + + #region 验证状态 /// @@ -144,7 +173,7 @@ namespace CapMachine.Wpf.Models } else { - MessageBox.Show($"WaitTrig-没有满足条件"); + MessageBox.Show($"WaitTrig-没有满足Wait条件"); return false; } } @@ -155,17 +184,19 @@ namespace CapMachine.Wpf.Models /// public bool FireAlarm() { - var Result = StateMachine.CanFire(RunStateTrig.AlarmTrig); - if (Result) - { - StateMachine.Fire(RunStateTrig.AlarmTrig); - return true; - } - else - { - MessageBox.Show($"AlarmTrig-没有满足条件"); - return false; - } + StateMachine.Fire(RunStateTrig.AlarmTrig); + return true; + //var Result = StateMachine.CanFire(RunStateTrig.AlarmTrig); + //if (Result) + //{ + // StateMachine.Fire(RunStateTrig.AlarmTrig); + // return true; + //} + //else + //{ + // MessageBox.Show($"AlarmTrig-没有满足条件"); + // return false; + //} } /// @@ -182,7 +213,7 @@ namespace CapMachine.Wpf.Models } else { - MessageBox.Show($"ResetTrig-没有满足条件"); + MessageBox.Show($"ResetTrig-没有满足Reset条件"); return false; } } @@ -201,7 +232,7 @@ namespace CapMachine.Wpf.Models } else { - MessageBox.Show($"StartTrig-没有满足条件"); + MessageBox.Show($"StartTrig-没有满足Start条件"); return false; } } @@ -220,7 +251,7 @@ namespace CapMachine.Wpf.Models } else { - MessageBox.Show($"EndTrig-没有满足条件"); + MessageBox.Show($"EndTrig-没有满足End条件"); return false; } } @@ -239,12 +270,29 @@ namespace CapMachine.Wpf.Models } else { - MessageBox.Show($"PauseTrig-没有满足条件"); + MessageBox.Show($"PauseTrig-没有满足Pause条件"); return false; } } - + /// + /// 进入 Continue 状态 + /// + /// + public bool FireContinue() + { + var Result = StateMachine.CanFire(RunStateTrig.ContinueTrig); + if (Result) + { + StateMachine.Fire(RunStateTrig.ContinueTrig); + return true; + } + else + { + MessageBox.Show($"ContinueTrig-没有满足Continue条件"); + return false; + } + } @@ -293,12 +341,13 @@ namespace CapMachine.Wpf.Models /// private bool StopPreValid() { - //运行切换到停止 - if (StateMachine.State == RunState.Run) - { - return true; - } - return false; + return true; + ////运行切换到停止 + //if (StateMachine.State == RunState.Run) + //{ + // return true; + //} + //return false; } /// @@ -334,6 +383,7 @@ namespace CapMachine.Wpf.Models private void StopExitCall() { + BtnEndState = false; Console.WriteLine($"{Name}-StopExitCall"); } @@ -342,6 +392,7 @@ namespace CapMachine.Wpf.Models /// private void StopEntryCall() { + BtnEndState = true; RunStateMsg = "停止"; Console.WriteLine($"{Name}-StopEntryCall"); @@ -350,6 +401,7 @@ namespace CapMachine.Wpf.Models private void RunExitCall() { + BtnStartState = false; //退出运行状态 IsRunState = false; Console.WriteLine($"{Name}-RunExitCall"); @@ -360,6 +412,7 @@ namespace CapMachine.Wpf.Models /// private void RunEntryCall() { + BtnStartState = true; RunStateMsg = "运行"; Console.WriteLine($"{Name}-RunEntryCall"); //进入运行状态 diff --git a/CapMachine.Wpf/Models/State/RunState.cs b/CapMachine.Wpf/Models/State/RunState.cs index 22c60b9..d50b8cd 100644 --- a/CapMachine.Wpf/Models/State/RunState.cs +++ b/CapMachine.Wpf/Models/State/RunState.cs @@ -40,6 +40,12 @@ namespace CapMachine.Wpf.Models /// 复位 触发 /// ResetTrig = 6, + + /// + /// 继续 触发 + /// + ContinueTrig = 7, + } /// diff --git a/CapMachine.Wpf/Models/Tag/ITag.cs b/CapMachine.Wpf/Models/Tag/ITag.cs index a7d5cbe..1e4d8e6 100644 --- a/CapMachine.Wpf/Models/Tag/ITag.cs +++ b/CapMachine.Wpf/Models/Tag/ITag.cs @@ -117,5 +117,10 @@ namespace CapMachine.Wpf.Models.Tag /// bool IsMeter { get; set; } string AutoHandSwitchAddress { get; set; } + string Pid_PAddress { get; set; } + string Pid_IAddress { get; set; } + string Pid_DAddress { get; set; } + string Limit_UpAddress { get; set; } + string Limit_DownAddress { get; set; } } } diff --git a/CapMachine.Wpf/Models/Tag/Tag.cs b/CapMachine.Wpf/Models/Tag/Tag.cs index 719dc74..c5490ba 100644 --- a/CapMachine.Wpf/Models/Tag/Tag.cs +++ b/CapMachine.Wpf/Models/Tag/Tag.cs @@ -122,6 +122,31 @@ namespace CapMachine.Wpf.Models.Tag /// public string MVAddress { get; set; } + /// + /// 地址信息 Pid_P + /// + public string Pid_PAddress { get; set; } + + /// + /// 地址信息 Pid_I + /// + public string Pid_IAddress { get; set; } + + /// + /// 地址信息 Pid_D + /// + public string Pid_DAddress { get; set; } + + /// + /// 地址信息 Limit_Up + /// + public string Limit_UpAddress { get; set; } + + /// + /// 地址信息 Limit_Down + /// + public string Limit_DownAddress { get; set; } + /// /// 地址信息 Index /// diff --git a/CapMachine.Wpf/PrismEvent/ProRunEvent.cs b/CapMachine.Wpf/PrismEvent/ProRunEvent.cs new file mode 100644 index 0000000..b332355 --- /dev/null +++ b/CapMachine.Wpf/PrismEvent/ProRunEvent.cs @@ -0,0 +1,14 @@ +using Prism.Events; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.PrismEvent +{ + public class ProRunEvent : PubSubEvent + { + + } +} diff --git a/CapMachine.Wpf/PrismEvent/ProRunEventMsg.cs b/CapMachine.Wpf/PrismEvent/ProRunEventMsg.cs new file mode 100644 index 0000000..ddea579 --- /dev/null +++ b/CapMachine.Wpf/PrismEvent/ProRunEventMsg.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.PrismEvent +{ + /// + /// 程序运行事件消息 + /// + public class ProRunEventMsg + { + /// + /// 机器 + /// + public string? Machine { get; set; } + + /// + /// 消息 + /// + public string? Msg { get; set; } + } +} diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index b281064..fbeec9a 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -96,6 +96,11 @@ namespace CapMachine.Wpf.Services ///// //public List ListRtDataModel { get; set; } + /// + /// PLC加载配置数据集合 + /// + public List ListPlcLoadConfigCell { get; set; } + /// /// 标签管理中心 /// @@ -151,39 +156,39 @@ namespace CapMachine.Wpf.Services #region 标签管理 ////三电 Sample - TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0, IsMeter = true, }); - TagManger.AddTag(new Tag("排气压力", "排气压力[BarA]", "ExPress", "程序", "VW15002", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("吸气压力", "吸气压力[BarA]", "InhPress", "程序", "VW15004", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("COND1温度", "COND1温度[℃]", "Cond1Temp", "程序", "VW15008", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("润滑油压力", "润滑油压力[BarA]", "LubePress", "程序", "VW15010", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("COND2压力", "COND2压力[BarA]", "Cond2Press", "程序", "VW15012", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true }); + TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("排气压力", "排气压力[BarA]", "ExPress", "程序", "VW15002", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("吸气压力", "吸气压力[BarA]", "InhPress", "程序", "VW15004", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("COND1温度", "COND1温度[℃]", "Cond1Temp", "程序", "VW15008", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("润滑油压力", "润滑油压力[BarA]", "LubePress", "程序", "VW15010", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("COND2压力", "COND2压力[BarA]", "Cond2Press", "程序", "VW15012", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); //TagManger.AddTag(new Tag("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); - TagManger.AddTag(new Tag("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true }); + TagManger.AddTag(new Tag("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); //TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 }); - TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); + TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); //TagManger.AddTag(new Tag("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); - TagManger.AddTag(new Tag("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("膨胀阀前压力", "膨胀阀前压力[BarA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("EVAP出口压力", "EVAP出口压力[BarA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("腔内压力", "腔内压力[BarA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true }); - TagManger.AddTag(new Tag("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); - TagManger.AddTag(new Tag("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true }); + TagManger.AddTag(new Tag("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("膨胀阀前压力", "膨胀阀前压力[BarA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("EVAP出口压力", "EVAP出口压力[BarA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("腔内压力", "腔内压力[BarA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + TagManger.AddTag(new Tag("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); TagManger.AddTag(new Tag("通讯Cmp母线电流", "通讯Cmp母线电流[A]", "ComCapBusCur", "程序", "VW15060", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = false }); TagManger.AddTag(new Tag("通讯Cmp母线电压", "通讯Cmp母线电压[V]", "ComCapBusVol", "程序", "VW15062", 100, 0, 10, "V", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); TagManger.AddTag(new Tag("通讯Cmp逆变器温度", "通讯Cmp逆变器温度[℃]", "ComCapInvTemp", "程序", "VW15064", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); @@ -1024,6 +1029,18 @@ namespace CapMachine.Wpf.Services return false; } + /// + /// 程序继续 + /// 取反 + /// + /// + public bool SysContinue() + { + return true; + + } + + #endregion @@ -1140,7 +1157,7 @@ namespace CapMachine.Wpf.Services while (ThreadEnable) { - + //await Task.CompletedTask; DiagnosticsTime.Reset(); @@ -1589,6 +1606,115 @@ namespace CapMachine.Wpf.Services { ////第一次计时 //stopwatch.Start(); //启动Stopwatch + switch (ProRunChannelData.RunStepType) + { + case RunStepType.Step: + { + var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!)); + //Sv + var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); + if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); + //Pid + var Pid_PResult = SiemensDrive.Write(CurMeterInfo.Pid_PAddress, (short)ProRunChannelData.CurLoadPID!.P); + if (!Pid_PResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-P写入失败"); + var Pid_IResult = SiemensDrive.Write(CurMeterInfo.Pid_IAddress, (short)ProRunChannelData.CurLoadPID!.I); + if (!Pid_IResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-I写入失败"); + var Pid_DResult = SiemensDrive.Write(CurMeterInfo.Pid_DAddress, (short)ProRunChannelData.CurLoadPID!.D); + if (!Pid_DResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-D写入失败"); + //Limit + var Limit_UpResult = SiemensDrive.Write(CurMeterInfo.Limit_UpAddress, (short)ProRunChannelData.CurLoadLimit!.Up); + if (!Limit_UpResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Up写入失败"); + var Limit_DownResult = SiemensDrive.Write(CurMeterInfo.Limit_DownAddress, (short)ProRunChannelData.CurLoadLimit!.Down); + if (!Limit_DownResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Down写入失败"); + } + break; + case RunStepType.StepPID: + { + var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!)); + //Sv + var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); + if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); + //Pid + var Pid_PResult = SiemensDrive.Write(CurMeterInfo.Pid_PAddress, (short)ProRunChannelData.CurLoadPID!.P); + if (!Pid_PResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-P写入失败"); + var Pid_IResult = SiemensDrive.Write(CurMeterInfo.Pid_IAddress, (short)ProRunChannelData.CurLoadPID!.I); + if (!Pid_IResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-I写入失败"); + var Pid_DResult = SiemensDrive.Write(CurMeterInfo.Pid_DAddress, (short)ProRunChannelData.CurLoadPID!.D); + if (!Pid_DResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-D写入失败"); + } + break; + case RunStepType.StepLimit: + { + var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!)); + //Sv + var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); + if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); + //Limit + var Limit_UpResult = SiemensDrive.Write(CurMeterInfo.Limit_UpAddress, (short)ProRunChannelData.CurLoadLimit!.Up); + if (!Limit_UpResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Up写入失败"); + var Limit_DownResult = SiemensDrive.Write(CurMeterInfo.Limit_DownAddress, (short)ProRunChannelData.CurLoadLimit!.Down); + if (!Limit_DownResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Down写入失败"); + } + break; + case RunStepType.StepSV: + { + var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!)); + //Sv + var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); + if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); + } + break; + case RunStepType.LimitPid: + { + var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!)); + //Pid + var Pid_PResult = SiemensDrive.Write(CurMeterInfo.Pid_PAddress, (short)ProRunChannelData.CurLoadPID!.P); + if (!Pid_PResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-P写入失败"); + var Pid_IResult = SiemensDrive.Write(CurMeterInfo.Pid_IAddress, (short)ProRunChannelData.CurLoadPID!.I); + if (!Pid_IResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-I写入失败"); + var Pid_DResult = SiemensDrive.Write(CurMeterInfo.Pid_DAddress, (short)ProRunChannelData.CurLoadPID!.D); + if (!Pid_DResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-D写入失败"); + //Limit + var Limit_UpResult = SiemensDrive.Write(CurMeterInfo.Limit_UpAddress, (short)ProRunChannelData.CurLoadLimit!.Up); + if (!Limit_UpResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Up写入失败"); + var Limit_DownResult = SiemensDrive.Write(CurMeterInfo.Limit_DownAddress, (short)ProRunChannelData.CurLoadLimit!.Down); + if (!Limit_DownResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Down写入失败"); + } + break; + case RunStepType.Pid: + { + var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!)); + //Pid + var Pid_PResult = SiemensDrive.Write(CurMeterInfo.Pid_PAddress, (short)ProRunChannelData.CurLoadPID!.P); + if (!Pid_PResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-P写入失败"); + var Pid_IResult = SiemensDrive.Write(CurMeterInfo.Pid_IAddress, (short)ProRunChannelData.CurLoadPID!.I); + if (!Pid_IResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-I写入失败"); + var Pid_DResult = SiemensDrive.Write(CurMeterInfo.Pid_DAddress, (short)ProRunChannelData.CurLoadPID!.D); + if (!Pid_DResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-D写入失败"); + } + break; + case RunStepType.Limit: + { + var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!)); + //Limit + var Limit_UpResult = SiemensDrive.Write(CurMeterInfo.Limit_UpAddress, (short)ProRunChannelData.CurLoadLimit!.Up); + if (!Limit_UpResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Up写入失败"); + var Limit_DownResult = SiemensDrive.Write(CurMeterInfo.Limit_DownAddress, (short)ProRunChannelData.CurLoadLimit!.Down); + if (!Limit_DownResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Down写入失败"); + } + break; + case RunStepType.SlopCell: + { + var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!)); + //Sv + var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); + if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); + } + break; + default: + break; + } + if (ProRunChannelData.RunStepType == RunStepType.SlopCell) { SiemensDrive.Write("D1", (short)ProRunChannelData.SV); @@ -1612,7 +1738,7 @@ namespace CapMachine.Wpf.Services } - Thread.Sleep(50); + //Thread.Sleep(50); //DownLoadPID(); //stopwatch.Stop(); //停止Stopwatch //Console.WriteLine("保存数据耗时::{0}", stopwatch.Elapsed.TotalSeconds.ToString()); diff --git a/CapMachine.Wpf/Services/ProRuntimeService.cs b/CapMachine.Wpf/Services/ProRuntimeService.cs index a32334e..6e799be 100644 --- a/CapMachine.Wpf/Services/ProRuntimeService.cs +++ b/CapMachine.Wpf/Services/ProRuntimeService.cs @@ -25,6 +25,7 @@ using Masuit.Tools.Hardware; using CapMachine.Model.MeterConfig; using Masuit.Tools; using System.Timers; +using Prism.Events; namespace CapMachine.Wpf.Services { @@ -37,11 +38,13 @@ namespace CapMachine.Wpf.Services /// /// 实例化函数 /// - public ProRuntimeService(IFreeSql freeSql, IMapper mapper, MachineRtDataService machineRtDataService, ILogService logService) + public ProRuntimeService(IFreeSql freeSql, IMapper mapper, IEventAggregator eventAggregator, MachineRtDataService machineRtDataService, ILogService logService) { FreeSql = freeSql; Mapper = mapper; + EventAggregator = eventAggregator; MachineRtDataService = machineRtDataService; + ProRunChannel = MachineRtDataService.ProRunChannel; LogService = logService; @@ -49,9 +52,9 @@ namespace CapMachine.Wpf.Services ListProExModel = new List() { new ProExModel(ProRunChannel){ - MeterName="速度", + MeterName="转速", ListProStepExe=new List(), - + IsSpeed=true, }, new ProExModel(ProRunChannel){ MeterName="COND1温度", @@ -145,6 +148,9 @@ namespace CapMachine.Wpf.Services } }; + //SpeedRunEndEvent + ListProExModel.FindFirst(a => a.MeterName.Contains("转速")).SpeedRunEndEvent += ProRuntimeService_SpeedRunEndEvent; + //从变量集合中加载PLC转制的配置数据 ListPlcLoadConfigCell = new List(); foreach (var itemKeyValue in MachineRtDataService.TagManger.DicTags) @@ -155,11 +161,19 @@ namespace CapMachine.Wpf.Services ListPlcLoadConfigCell.Add(new PlcLoadConfigCell() { Name = itemKeyValue.Key, - Address = itemKeyValue.Value.SVAddress, + SvAddress = itemKeyValue.Value.SVAddress, + Limit_UpAddress = itemKeyValue.Value.Limit_UpAddress, + Limit_DownAddress = itemKeyValue.Value.Limit_DownAddress, + Pid_PAddress = itemKeyValue.Value.Pid_PAddress, + Pid_IAddress = itemKeyValue.Value.Pid_IAddress, + Pid_DAddress = itemKeyValue.Value.Pid_DAddress, Precision = itemKeyValue.Value.Precision, }); } } + //反写给MachineRtDataService,MachineRtDataService也要写到PLC中 + MachineRtDataService.ListPlcLoadConfigCell = ListPlcLoadConfigCell; + //驱动实例 SiemensDrive = MachineRtDataService.SiemensDrive; @@ -170,15 +184,15 @@ namespace CapMachine.Wpf.Services } - - /// /// 选中的程序运行集合 /// public List SelectedListProSegRun { get; set; } public IFreeSql FreeSql { get; } public IMapper Mapper { get; } + public IEventAggregator EventAggregator { get; } public MachineRtDataService MachineRtDataService { get; } + public ILogService LogService { get; } /// @@ -264,9 +278,9 @@ namespace CapMachine.Wpf.Services //统计当前步骤itemStep的速度所有时间,供后面的其他参数使用,因为其他的参数也是牟定当前步骤速度是总时间,在这个步骤中,所有的参数的总时间是一样的 var SpeedStepTotaolTime = 0; - //********* 单个【速度】步骤信息的解析 ********* + //********* 单个【转速】步骤信息的解析 ********* { - var CurMeterName = "速度"; + var CurMeterName = "转速"; if (itemStep.MeterSpeeds != null && itemStep.MeterSpeeds.Any()) { switch (itemStep.MeterSpeeds.FirstOrDefault()!.ValueType) @@ -540,6 +554,2539 @@ namespace CapMachine.Wpf.Services } + //********* 单个【COND1温度】步骤信息的解析 ********* + { + var CurMeterName = "COND1温度"; + if (itemStep.MeterCond1Temps != null && itemStep.MeterCond1Temps.Any()) + { + switch (itemStep.MeterCond1Temps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterCond1Temps) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterCond1Temps.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.MeterCond1Temps) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【COND2温度】步骤信息的解析 ********* + { + var CurMeterName = "COND2温度"; + if (itemStep.MeterCond2Temps != null && itemStep.MeterCond2Temps.Any()) + { + switch (itemStep.MeterCond2Temps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterCond2Temps) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterCond2Temps.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.MeterCond2Temps) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【COND2压力】步骤信息的解析 ********* + { + var CurMeterName = "COND2压力"; + if (itemStep.MeterCond2Presss != null && itemStep.MeterCond2Presss.Any()) + { + switch (itemStep.MeterCond2Presss.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterCond2Presss) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterCond2Presss.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.MeterCond2Presss) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【EVAP出口温度】步骤信息的解析 ********* + { + var CurMeterName = "EVAP出口温度"; + if (itemStep.MeterEVAPExpTemps != null && itemStep.MeterEVAPExpTemps.Any()) + { + switch (itemStep.MeterEVAPExpTemps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterEVAPExpTemps) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterEVAPExpTemps.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.MeterEVAPExpTemps) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【HV电压】步骤信息的解析 ********* + { + var CurMeterName = "HV电压"; + if (itemStep.MeterHVVols != null && itemStep.MeterHVVols.Any()) + { + switch (itemStep.MeterHVVols.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterHVVols) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterHVVols.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.MeterHVVols) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【吸气压力】步骤信息的解析 ********* + { + var CurMeterName = "吸气压力"; + if (itemStep.MeterInhPresss != null && itemStep.MeterInhPresss.Any()) + { + switch (itemStep.MeterInhPresss.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterInhPresss) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterInhPresss.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.MeterInhPresss) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【吸气温度】步骤信息的解析 ********* + { + var CurMeterName = "吸气温度"; + if (itemStep.MeterInhTemps != null && itemStep.MeterInhTemps.Any()) + { + switch (itemStep.MeterInhTemps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterInhTemps) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterInhTemps.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.MeterInhTemps) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【润滑油压力】步骤信息的解析 ********* + { + var CurMeterName = "润滑油压力"; + if (itemStep.MeterLubePresss != null && itemStep.MeterLubePresss.Any()) + { + switch (itemStep.MeterLubePresss.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterLubePresss) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterLubePresss.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.MeterLubePresss) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【LV电压】步骤信息的解析 ********* + { + var CurMeterName = "LV电压"; + if (itemStep.MeterLVVols != null && itemStep.MeterLVVols.Any()) + { + switch (itemStep.MeterLVVols.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterLVVols) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterLVVols.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.MeterLVVols) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【OCR】步骤信息的解析 ********* + { + var CurMeterName = "OCR"; + if (itemStep.MeterOCRs != null && itemStep.MeterOCRs.Any()) + { + switch (itemStep.MeterOCRs.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterOCRs) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterOCRs.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.MeterOCRs) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + + //********* 单个【OS1温度】步骤信息的解析 ********* + { + var CurMeterName = "OS1温度"; + if (itemStep.MeterOS1Temps != null && itemStep.MeterOS1Temps.Any()) + { + switch (itemStep.MeterOS1Temps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterOS1Temps) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterOS1Temps.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.MeterOS1Temps) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【OS2温度】步骤信息的解析 ********* + { + var CurMeterName = "OS2温度"; + if (itemStep.MeterOS2Temps != null && itemStep.MeterOS2Temps.Any()) + { + switch (itemStep.MeterOS2Temps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterOS2Temps) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterOS2Temps.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.MeterOS2Temps) + { + 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}", + 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.MeterPTCEntTemps != null && itemStep.MeterPTCEntTemps.Any()) + { + switch (itemStep.MeterPTCEntTemps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterPTCEntTemps) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCEntTemps.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.MeterPTCEntTemps) + { + 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}", + 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.MeterPTCFlows != null && itemStep.MeterPTCFlows.Any()) + { + switch (itemStep.MeterPTCFlows.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterPTCFlows) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCFlows.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.MeterPTCFlows) + { + 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}", + 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.MeterPTCPws != null && itemStep.MeterPTCPws.Any()) + { + switch (itemStep.MeterPTCPws.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterPTCPws) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCPws.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.MeterPTCPws) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【压缩机环境湿度】步骤信息的解析 ********* + { + var CurMeterName = "压缩机环境湿度"; + if (itemStep.MeterEnvRHs != null && itemStep.MeterEnvRHs.Any()) + { + switch (itemStep.MeterEnvRHs.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterEnvRHs) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterEnvRHs.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.MeterEnvRHs) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【压缩机环境温度】步骤信息的解析 ********* + { + var CurMeterName = "压缩机环境温度"; + if (itemStep.MeterEnvTemps != null && itemStep.MeterEnvTemps.Any()) + { + switch (itemStep.MeterEnvTemps.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterEnvTemps) + { + 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}-{itemMeterValueCell.StepNo}", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterEnvTemps.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.MeterEnvTemps) + { + 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}", + 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} - 未找到步骤信息。步骤为空"); + } + + } } @@ -547,9 +3094,6 @@ namespace CapMachine.Wpf.Services } } - - StartProRun(); - } @@ -633,12 +3177,29 @@ namespace CapMachine.Wpf.Services } } + #region 程序调度执行 + /// - /// 暂停的时间 + /// 速度运行结束事件 + /// 执行结束 /// - public int PauseSecTime { get; set; } + /// + /// + /// + private void ProRuntimeService_SpeedRunEndEvent(object? sender, string e) + { + Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【Msg】:程序运行结束 《《《《-------------------"); + EndProRun(); + + EventAggregator.GetEvent().Publish(new ProRunEventMsg() { Machine = "M1", Msg = "执行完毕" }); + } + + /// + /// 程序运行时间计算模型 + /// + public ProRunTimeCalc ProRunTimeCalcModel { get; set; } = new ProRunTimeCalc(); /// /// 暂停开始时间 @@ -655,6 +3216,10 @@ namespace CapMachine.Wpf.Services /// public void StartProRun() { + + //开始计时 + ProRunTimeCalcModel.StartProRunTime(); + //开始运行前的需要进行一些设置和数据初始化 foreach (var itemProExModel in ListProExModel) { @@ -679,13 +3244,17 @@ namespace CapMachine.Wpf.Services /// public void EndProRun() { + //结束计时 + ProRunTimeCalcModel.EndProRunTime(); + + //取消步骤结束时间的扫描 ProRunTaskScanTimeEnable = false; ProRunTimeScanTokenSource.Cancel(); //先清空当前步骤数据 foreach (var itemProExModel in ListProExModel) { - itemProExModel.ListProStepExe.Clear(); + //itemProExModel.ListProStepExe.Clear(); itemProExModel.ListSlopExStep.Clear(); } } @@ -697,6 +3266,8 @@ namespace CapMachine.Wpf.Services { //开始暂停的计时 PauseStartDt = DateTime.Now; + //暂停计时统计 + ProRunTimeCalcModel.PauseProRunTime(); //取消扫描 ProRunTaskScanTimeEnable = false; @@ -714,10 +3285,12 @@ namespace CapMachine.Wpf.Services /// public void ContinueProRun() { - PauseEndDt = DateTime.Now; + //统计的暂停的时间 var PauseTime = (PauseEndDt - PauseStartDt).TotalSeconds; + ProRunTimeCalcModel.PauseTotalSecTime = ProRunTimeCalcModel.PauseTotalSecTime + (int)PauseTime; + ProRunTimeCalcModel.ContinueProRunTime(); //斜坡打点暂定 foreach (var itemProExModel in ListProExModel) @@ -1043,6 +3616,14 @@ namespace CapMachine.Wpf.Services // } //} + #endregion + + + #region 时间统计信息 + + + + #endregion } } diff --git a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs index b141a71..f5b9ee2 100644 --- a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs +++ b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs @@ -27,7 +27,8 @@ namespace CapMachine.Wpf.ViewModels /// /// public MonitorViewModel(ConfigService configService, IEventAggregator eventAggregator, - DataRecordService dataRecordService, SysRunService sysRunService, AlarmService alarmService, PPCService pPCService,CanDriveService canDriveService,LinDriveService linDriveService, + DataRecordService dataRecordService, SysRunService sysRunService, AlarmService alarmService, PPCService pPCService, CanDriveService canDriveService, LinDriveService linDriveService, + ProRuntimeService proRuntimeService, MachineRtDataService machineRtDataService, IDialogService dialogService) { ConfigService = configService; @@ -39,10 +40,12 @@ namespace CapMachine.Wpf.ViewModels PPCService = pPCService; CanDriveService = canDriveService; LinDriveService = linDriveService; + ProRuntimeService = proRuntimeService; MachineRtDataService = machineRtDataService; DialogService = dialogService; TagManager = MachineRtDataService.TagManger; _EventAggregator.GetEvent().Subscribe(GetChartRtEvent); + _EventAggregator.GetEvent().Subscribe(GetProRunEvent); //赋值实例化 ListHandSwitchData = MachineRtDataService.ListHandSwitchData; @@ -76,6 +79,7 @@ namespace CapMachine.Wpf.ViewModels public PPCService PPCService { get; } public CanDriveService CanDriveService { get; } public LinDriveService LinDriveService { get; } + public ProRuntimeService ProRuntimeService { get; } public MachineRtDataService MachineRtDataService { get; } public IDialogService DialogService { get; } public List ListChartRtValue { get; set; } = new List() @@ -214,6 +218,11 @@ namespace CapMachine.Wpf.ViewModels return _OperCmd; } } + + + + + /// /// 操作指令执行方法 /// @@ -223,59 +232,77 @@ namespace CapMachine.Wpf.ViewModels switch (Par) { case "开始": - - MachineRtDataService.SysStart(); - - this.SysRunServer.MachineRunState1.FireStart(); - - DataRecordService.StartRecord(); - break; - case "结束": - MachineRtDataService.SysEnd(); - - this.SysRunServer.MachineRunState1.FireEnd(); - DataRecordService.EndRecord(); - - //结束运行的时候,需要将压缩机的速度值设置为0 - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + //状态机运行 用状态机的状态判断逻辑 + if (this.SysRunServer.MachineRunState1.FireStart()) { - case CanLinEnum.Can: - //获取PLC的SV数据 更新SV的速度值到压缩机 - CanDriveService.UpdateSpeedCmdData(0); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //获取PLC的SV数据 更新SV的速度值到压缩机 - LinDriveService.UpdateSpeedCmdData(0); - //itemTag.Value.EngPvValue = 0; - break; - default: - break; + //程序步骤执行开始运行 + ProRuntimeService.StartProRun(); + //运行 一些PLC的状态写入 + MachineRtDataService.SysStart(); + //开始记录数据 + DataRecordService.StartRecord(); + } + break; + case "结束": + //状态机结束 用状态机的状态判断逻辑 + if (this.SysRunServer.MachineRunState1.FireEnd()) + { + //程序步骤执行结束运行 + ProRuntimeService.EndProRun(); + //结束 一些PLC的状态写入 + MachineRtDataService.SysEnd(); + //结束记录数据 + DataRecordService.EndRecord(); + + //结束运行的时候,需要将压缩机的速度值设置为0 + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + { + case CanLinEnum.Can: + //获取PLC的SV数据 更新SV的速度值到压缩机 + CanDriveService.UpdateSpeedCmdData(0); + //itemTag.Value.EngPvValue = 0; + break; + case CanLinEnum.Lin: + //获取PLC的SV数据 更新SV的速度值到压缩机 + LinDriveService.UpdateSpeedCmdData(0); + //itemTag.Value.EngPvValue = 0; + break; + default: + break; + } + } break; case "复位": - MachineRtDataService.SysReset(); - - this.SysRunServer.MachineRunState1.FireReset(); - DataRecordService.EndRecord(); - - //结束运行的时候,需要将压缩机的速度值设置为0 - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + //状态机 复位 用状态机的状态判断逻辑 + if (this.SysRunServer.MachineRunState1.FireReset()) { - case CanLinEnum.Can: - //获取PLC的SV数据 更新SV的速度值到压缩机 - CanDriveService.UpdateSpeedCmdData(0); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //获取PLC的SV数据 更新SV的速度值到压缩机 - LinDriveService.UpdateSpeedCmdData(0); - //itemTag.Value.EngPvValue = 0; - break; - default: - break; + //程序步骤执行结束运行 + ProRuntimeService.EndProRun(); + //复位 一些PLC的状态写入 + MachineRtDataService.SysReset(); + //结束记录数据 + DataRecordService.EndRecord(); + + //结束运行的时候,需要将压缩机的速度值设置为0 + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + { + case CanLinEnum.Can: + //获取PLC的SV数据 更新SV的速度值到压缩机 + CanDriveService.UpdateSpeedCmdData(0); + //itemTag.Value.EngPvValue = 0; + break; + case CanLinEnum.Lin: + //获取PLC的SV数据 更新SV的速度值到压缩机 + LinDriveService.UpdateSpeedCmdData(0); + //itemTag.Value.EngPvValue = 0; + break; + default: + break; + } + } break; @@ -287,8 +314,26 @@ namespace CapMachine.Wpf.ViewModels break; case "暂停": - MachineRtDataService.SysPause(); + //状态机 暂停 用状态机的状态判断逻辑 + if (this.SysRunServer.MachineRunState1.FirePause()) + { + //程序步骤执行暂停运行 + ProRuntimeService.PauseProRun(); + //暂停 一些PLC的状态写入 + MachineRtDataService.SysPause(); + } + + break; + case "继续": + //状态机 继续 用状态机的状态判断逻辑 + if (this.SysRunServer.MachineRunState1.FireContinue()) + { + //程序步骤执行继续运行 + ProRuntimeService.ContinueProRun(); + //继续 一些PLC的状态写入 + MachineRtDataService.SysContinue(); + } //ShowDialogExpInfo(); break; case "试验信息": @@ -303,6 +348,28 @@ namespace CapMachine.Wpf.ViewModels } + + /// + /// 程序运行的状态 + /// 来自于程序的自动调度执行 + /// + /// + /// + private void GetProRunEvent(ProRunEventMsg msg) + { + switch (msg.Msg) + { + case "执行完毕": + OperCmdCall("结束"); + break; + default: + break; + } + + } + + + private DelegateCommand _AutoHandCmd; /// /// 操作指令你 diff --git a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs index 70c5f63..fbc1d43 100644 --- a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs @@ -2297,46 +2297,6 @@ namespace CapMachine.Wpf.ViewModels } } - private DelegateCommand _ProRunSelectedDelete1; - /// - /// 删除命令 - /// - public DelegateCommand ProRunSelectedDelete1 - { - set - { - _ProRunSelectedDelete1 = value; - } - get - { - if (_ProRunSelectedDelete1 == null) - { - _ProRunSelectedDelete1 = new DelegateCommand((p) => ProRunSelectedDelete1Method(p)); - } - return _ProRunSelectedDelete1; - } - } - - private void ProRunSelectedDelete1Method(string Par) - { - if (Par.Contains("1")) - { - ProRuntimeService.EndProRun(); - } - else if (Par.Contains("2")) - { - ProRuntimeService.PauseProRun(); - } - else if (Par.Contains("3")) - { - ProRuntimeService.ContinueProRun(); - } - else - { - } - - } - private DelegateCommand _GenProPlcCmd; /// /// 新增命令 diff --git a/CapMachine.Wpf/Views/MonitorView.xaml b/CapMachine.Wpf/Views/MonitorView.xaml index 1faec5f..8d9ff9c 100644 --- a/CapMachine.Wpf/Views/MonitorView.xaml +++ b/CapMachine.Wpf/Views/MonitorView.xaml @@ -277,7 +277,7 @@ FontSize="26" FontWeight="Bold" Foreground="LimeGreen" - Text="{Binding MachineRtDataService.CurSysExdInfo.RunTimeMsg}" /> + Text="{Binding ProRuntimeService.ProRunTimeCalcModel.ProRunTimeStr}" /> @@ -341,14 +341,12 @@ Width="100" Margin="5,0" HorizontalAlignment="Center" - Background="Green" BorderBrush="Blue" BorderThickness="2" Command="{Binding OperCmd}" CommandParameter="开始" - GroupName="OpRunStop" - IsChecked="{Binding MachineRtDataService.SysExdBoolInfos.StartRunStateQuickTag.Value}" - Style="{StaticResource MaterialDesignChoiceChipSecondaryRadioButton}"> + GroupName="OpRunStop"> + + + + + GroupName="OpRunStop"> + + + + @@ -432,6 +453,22 @@ + - - - - +