diff --git a/CapMachine.Wpf/CapMachine.Wpf.csproj b/CapMachine.Wpf/CapMachine.Wpf.csproj index b69e6ea..d498c91 100644 --- a/CapMachine.Wpf/CapMachine.Wpf.csproj +++ b/CapMachine.Wpf/CapMachine.Wpf.csproj @@ -1,7 +1,7 @@  - Exe + WinExe net6.0-windows enable enable diff --git a/CapMachine.Wpf/Services/ProRuntimeService.cs b/CapMachine.Wpf/Services/ProRuntimeService.cs index b67a393..7818ddb 100644 --- a/CapMachine.Wpf/Services/ProRuntimeService.cs +++ b/CapMachine.Wpf/Services/ProRuntimeService.cs @@ -26,6 +26,7 @@ using CapMachine.Model.MeterConfig; using Masuit.Tools; using System.Timers; using Prism.Events; +using System.Windows.Threading; namespace CapMachine.Wpf.Services { @@ -51,6 +52,7 @@ namespace CapMachine.Wpf.Services LinDriveService = linDriveService; ProRunChannel = MachineRtDataService.ProRunChannel; LogService = logService; + CurDispatcher = Dispatcher.CurrentDispatcher; //实例化函数 ListProExModel = new List(); @@ -116,6 +118,7 @@ namespace CapMachine.Wpf.Services public CanDriveService CanDriveService { get; } public LinDriveService LinDriveService { get; } public ILogService LogService { get; } + public Dispatcher CurDispatcher { get; set; } /// /// 西门子连接驱动程序 @@ -163,2986 +166,3016 @@ namespace CapMachine.Wpf.Services return $"{hours}:{minutes:D2}:{seconds:D2}"; } + /// + /// 是否在下载中 + /// + public bool IsLoadProSeging { get; set; } = false; //是否加载了程序运行集合 + /// /// 加载选中的程序运行集合 /// 目前步骤设置常值,是OK的,但是在斜坡多步骤里面也可以设置 50-50 10秒的常值设置,那么在打点时,上面的两个常值都能识别 /// - public void LoadProSegRun(List SelectedListProSegRun) + public async Task LoadProSegRun(List SelectedListProSegRun, CancellationToken cancellationToken = default) { if (SelectedListProSegRun == null || SelectedListProSegRun.Count() == 0) { return; } + //标记下载过程的状态 + IsLoadProSeging = true; - //取消之前的程序执行 - EndProRun(); - //先清空之前的步骤数据 - foreach (var itemProExModel in ListProExModel) + try { - itemProExModel.ListProStepExe.Clear(); - itemProExModel.ListSlopExStep.Clear(); - } - - //多个选中的程序块循环 - foreach (var itemProSegRun in SelectedListProSegRun) - { - //获取当前程序块 - //逐个对应的程序 - var CurProgramSeg = FreeSql.Select(itemProSegRun.ProgramSegId) - .IncludeMany(a => a.ProSteps, - then => then.IncludeMany(b => b.MeterSpeeds) - .IncludeMany(b => b.MeterCond1Temps) - .IncludeMany(b => b.MeterCond2Temps) - .IncludeMany(b => b.MeterCond2Presss) - .IncludeMany(b => b.MeterEVAPExpTemps) - .IncludeMany(b => b.MeterExPresss) - .IncludeMany(b => b.MeterHVVols) - .IncludeMany(b => b.MeterInhPresss) - .IncludeMany(b => b.MeterInhTemps) - .IncludeMany(b => b.MeterLubePresss) - .IncludeMany(b => b.MeterLVVols) - .IncludeMany(b => b.MeterOCRs) - .IncludeMany(b => b.MeterOS1Temps) - .IncludeMany(b => b.MeterOS2Temps) - .IncludeMany(b => b.MeterPTCEntTemps) - .IncludeMany(b => b.MeterPTCFlows) - .IncludeMany(b => b.MeterPTCPws) - .IncludeMany(b => b.MeterEnvRHs) - .IncludeMany(b => b.MeterEnvTemps) - ).ToList().FirstOrDefault(); - - //获取当前的程序 - if (CurProgramSeg != null && CurProgramSeg.ProSteps != null && CurProgramSeg.ProSteps.Any()) + // 在UI线程上执行必要的UI操作 + await CurDispatcher.InvokeAsync(() => { - var SpeedMaxStep = CurProgramSeg.ProSteps.Max(a => a.StepNo); - - //CurProgramSeg有重复运行的次数 - for (int SegIndex = 0; SegIndex < CurProgramSeg.ProRepeat; SegIndex++) + //取消之前的程序执行 + EndProRun(); + //先清空之前的步骤数据 + foreach (var itemProExModel in ListProExModel) { - //解析程序的多行步骤,表格中的行步骤数据,牟定速度 - foreach (var itemStep in CurProgramSeg.ProSteps.OrderBy(a => a.StepNo)) + itemProExModel.ListProStepExe.Clear(); + itemProExModel.ListSlopExStep.Clear(); + } + }); + + await Task.Run(() => + { + + //多个选中的程序块循环 + foreach (var itemProSegRun in SelectedListProSegRun) + { + cancellationToken.ThrowIfCancellationRequested(); + + //获取当前程序块 + //逐个对应的程序 + var CurProgramSeg = FreeSql.Select(itemProSegRun.ProgramSegId) + .IncludeMany(a => a.ProSteps, + then => then.IncludeMany(b => b.MeterSpeeds) + .IncludeMany(b => b.MeterCond1Temps) + .IncludeMany(b => b.MeterCond2Temps) + .IncludeMany(b => b.MeterCond2Presss) + .IncludeMany(b => b.MeterEVAPExpTemps) + .IncludeMany(b => b.MeterExPresss) + .IncludeMany(b => b.MeterHVVols) + .IncludeMany(b => b.MeterInhPresss) + .IncludeMany(b => b.MeterInhTemps) + .IncludeMany(b => b.MeterLubePresss) + .IncludeMany(b => b.MeterLVVols) + .IncludeMany(b => b.MeterOCRs) + .IncludeMany(b => b.MeterOS1Temps) + .IncludeMany(b => b.MeterOS2Temps) + .IncludeMany(b => b.MeterPTCEntTemps) + .IncludeMany(b => b.MeterPTCFlows) + .IncludeMany(b => b.MeterPTCPws) + .IncludeMany(b => b.MeterEnvRHs) + .IncludeMany(b => b.MeterEnvTemps) + ).ToList().FirstOrDefault(); + + //获取当前的程序 + if (CurProgramSeg != null && CurProgramSeg.ProSteps != null && CurProgramSeg.ProSteps.Any()) { - //单行步骤中包含多个仪表参数的配置,需要逐个仪表参数手动操作解析 + var SpeedMaxStep = CurProgramSeg.ProSteps.Max(a => a.StepNo); - //统计当前步骤itemStep的速度所有时间,供后面的其他参数使用,因为其他的参数也是牟定当前步骤速度是总时间,在这个步骤中,所有的参数的总时间是一样的 - var SpeedStepTotaolTime = 0; - - - //********* 单个【转速】步骤信息的解析 ********* + //CurProgramSeg有重复运行的次数 + for (int SegIndex = 0; SegIndex < CurProgramSeg.ProRepeat; SegIndex++) { - var CurMeterName = "转速"; - if (itemStep.MeterSpeeds != null && itemStep.MeterSpeeds.Any()) + //解析程序的多行步骤,表格中的行步骤数据,牟定速度 + foreach (var itemStep in CurProgramSeg.ProSteps.OrderBy(a => a.StepNo)) { - switch (itemStep.MeterSpeeds.FirstOrDefault()!.ValueType) + //单行步骤中包含多个仪表参数的配置,需要逐个仪表参数手动操作解析 + + //统计当前步骤itemStep的速度所有时间,供后面的其他参数使用,因为其他的参数也是牟定当前步骤速度是总时间,在这个步骤中,所有的参数的总时间是一样的 + var SpeedStepTotaolTime = 0; + + + //********* 单个【转速】步骤信息的解析 ********* { - case ConfigValueType.Constant: //常值 - //常值没有斜率和多个步骤,就一个总时间 - SpeedStepTotaolTime = itemStep.MeterSpeeds.FirstOrDefault()!.KeepTime; - //常值的话就一个数据,循环执行一次 - foreach (var itemMeterValueCell in itemStep.MeterSpeeds) + var CurMeterName = "转速"; + if (itemStep.MeterSpeeds != null && itemStep.MeterSpeeds.Any()) + { + switch (itemStep.MeterSpeeds.FirstOrDefault()!.ValueType) { - 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), - - ListStepExd = new List() + case ConfigValueType.Constant: //常值 + //常值没有斜率和多个步骤,就一个总时间 + SpeedStepTotaolTime = itemStep.MeterSpeeds.FirstOrDefault()!.KeepTime; + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterSpeeds) { + 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), + + ListStepExd = new List() + { new StepExd(){ Name="输出锁定",Value=itemMeterValueCell.OutLock,ValueType=ExdValueType.Bool}, new StepExd(){ Name="吸排气阀",Value=itemMeterValueCell.InhExhValve,ValueType=ExdValueType.Bool}, new StepExd(){ Name="EV",Value=(short)itemMeterValueCell.Ev,ValueType=ExdValueType.Short}, new StepExd(){ Name="压缩机使能",Value=itemMeterValueCell.CapEnable,ValueType=ExdValueType.Bool}, - }, + }, - ProStepInfo = $"{itemStep.StepNo}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); + ProStepInfo = $"{itemStep.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); - } - break; - case ConfigValueType.Slope: //斜率 - //斜率有多个步骤和循环的次数,统计一个总时间 - SpeedStepTotaolTime = itemStep.SpeedCycle * itemStep.MeterSpeeds.Sum(a => a.KeepTime); - //根据循环次数确定 - for (int StepIndex = 0; StepIndex < itemStep.SpeedCycle; StepIndex++) - { - //根据循环次数执行 - foreach (var itemMeterValueCell in itemStep.MeterSpeeds) - { - 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()) + break; + case ConfigValueType.Slope: //斜率 + //斜率有多个步骤和循环的次数,统计一个总时间 + SpeedStepTotaolTime = itemStep.SpeedCycle * itemStep.MeterSpeeds.Sum(a => a.KeepTime); + //根据循环次数确定 + for (int StepIndex = 0; StepIndex < itemStep.SpeedCycle; StepIndex++) { - 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), - - ListStepExd = new List() + //根据循环次数执行 + foreach (var itemMeterValueCell in itemStep.MeterSpeeds) { + 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), + + ListStepExd = new List() + { new StepExd(){ Name="输出锁定",Value=itemMeterValueCell.OutLock,ValueType=ExdValueType.Bool}, new StepExd(){ Name="吸排气阀",Value=itemMeterValueCell.InhExhValve,ValueType=ExdValueType.Bool}, new StepExd(){ Name="EV",Value=(short)itemMeterValueCell.Ev,ValueType=ExdValueType.Short}, new StepExd(){ Name="压缩机使能",Value=itemMeterValueCell.CapEnable,ValueType=ExdValueType.Bool}, - }, + }, - ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } + ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + + break; + default: + break; } - - break; - default: - break; + } + else + { + //当前步骤转速没有配置的话,后面的也不需要执行,直接返回 + continue; + } } - } - else - { - //当前步骤转速没有配置的话,后面的也不需要执行,直接返回 - continue; + + //********* 单个【排气压力】步骤信息的解析 ********* + { + var CurMeterName = "排气压力"; + if (itemStep.MeterExPresss != null && itemStep.MeterExPresss.Any()) + { + switch (itemStep.MeterExPresss.FirstOrDefault()!.ValueType) + { + case ConfigValueType.Constant: //常值 + //常值的话就一个数据,循环执行一次 + foreach (var itemMeterValueCell in itemStep.MeterExPresss) + { + var Pid = new ConfigPID(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) + { + Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); + } + var Limit = new ConfigLimit(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) + { + Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); + } + var Alarm = new ConfigAlarm(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) + { + Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); + } + + ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() + { + //程序块 + ProSegName = CurProgramSeg.Name, + ProSegStep = SegIndex, + ProSegRepeat = CurProgramSeg.ProRepeat, + ProSegIsExeing = false,//配置阶段默认不执行 false + + //程序步骤数据 + StartSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), + EndSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), + KeepTime = itemMeterValueCell.KeepTime, + MeterStepIsExeing = false,//配置阶段默认不执行 false + MeterStepIsOK = false,//配置阶段默认不完成 false + ExistSlop = false,//常值没有斜率 //开始和结束不一样则存在斜率 + + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, + MeterName = CurMeterName, + + LimitNo = itemMeterValueCell.LimitNo, + AlarmNo = itemMeterValueCell.AlarmNo, + PIDNo = itemMeterValueCell.PIDNo, + + CurConfigPIDDto = Mapper.Map(Pid), + CurConfigLimitDto = Mapper.Map(Limit), + CurConfigAlarmDto = Mapper.Map(Alarm), + + ProStepInfo = $"{itemStep.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterExPresss.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.MeterExPresss) + { + var Pid = new ConfigPID(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) + { + Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); + } + var Limit = new ConfigLimit(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) + { + Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); + } + var Alarm = new ConfigAlarm(); + if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) + { + Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); + } + + ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() + { + //程序块 + ProSegName = CurProgramSeg.Name, + ProSegStep = SegIndex, + ProSegRepeat = CurProgramSeg.ProRepeat, + ProSegIsExeing = false,//配置阶段默认不执行 false + + //程序步骤数据 + //SV = CALCHelper.GetQuickSV(itemMeterValueCell.Constant, 1), + StartSV = GetSVByProcess(itemMeterValueCell.StartValue, CurMeterName), + EndSV = GetSVByProcess(itemMeterValueCell.EndValue, CurMeterName), + KeepTime = itemMeterValueCell.KeepTime, + MeterStepIsExeing = false,//配置阶段默认不执行 false + MeterStepIsOK = false,//配置阶段默认不完成 false + ExistSlop = itemMeterValueCell.StartValue == itemMeterValueCell.EndValue ? false : true,//开始和结束不一样则存在斜率 + + MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, + + LimitNo = itemMeterValueCell.LimitNo, + AlarmNo = itemMeterValueCell.AlarmNo, + PIDNo = itemMeterValueCell.PIDNo, + + CurConfigPIDDto = Mapper.Map(Pid), + CurConfigLimitDto = Mapper.Map(Limit), + CurConfigAlarmDto = Mapper.Map(Alarm), + + ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【HV[V]】步骤信息的解析 ********* + { + var CurMeterName = "HV[V]"; + 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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【吸气压力】步骤信息的解析 ********* + { + 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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【吸气温度】步骤信息的解析 ********* + { + 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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【润滑油压力】步骤信息的解析 ********* + { + 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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【LV[V]】步骤信息的解析 ********* + { + var CurMeterName = "LV[V]"; + 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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + ////********* 单个【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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【环境湿度】步骤信息的解析 ********* + { + 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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【环境温度】步骤信息的解析 ********* + { + 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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【PTC入口水温】步骤信息的解析 ********* + { + var CurMeterName = "PTC入口水温"; + if (itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【PTC流量】步骤信息的解析 ********* + { + var CurMeterName = "PTC流量"; + if (itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + //********* 单个【PTC功率】步骤信息的解析 ********* + { + var CurMeterName = "PTC功率"; + if (itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + }); + } + break; + case ConfigValueType.Slope: + //带斜率 + //根据循环次数确定 + var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", + ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", + StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", + MeterName = CurMeterName, + }); + } + } + break; + default: + break; + } + } + else + { + //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 + var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; + if (CurMeterListStepExe.Any()) + { + //之前有步骤数据的话,则直接使用上一步的数据 + + //Copy这个步骤的数据 + var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); + //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 + LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 + LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 + LastStepData.ExistSlop = false; + LastStepData.StartSV = LastStepData.EndSV; + LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; + //添加 + CurMeterListStepExe.Add(LastStepData); + //SpeedStepTotaolTime + } + else + { + //之前步骤没有数据的话,则放弃,不做任何处理 + } + LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); + } + + } + + } } - //********* 单个【排气压力】步骤信息的解析 ********* - { - var CurMeterName = "排气压力"; - if (itemStep.MeterExPresss != null && itemStep.MeterExPresss.Any()) - { - switch (itemStep.MeterExPresss.FirstOrDefault()!.ValueType) - { - case ConfigValueType.Constant: //常值 - //常值的话就一个数据,循环执行一次 - foreach (var itemMeterValueCell in itemStep.MeterExPresss) - { - var Pid = new ConfigPID(); - if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) - { - Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); - } - var Limit = new ConfigLimit(); - if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) - { - Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); - } - var Alarm = new ConfigAlarm(); - if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) - { - Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); - } - - ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() - { - //程序块 - ProSegName = CurProgramSeg.Name, - ProSegStep = SegIndex, - ProSegRepeat = CurProgramSeg.ProRepeat, - ProSegIsExeing = false,//配置阶段默认不执行 false - - //程序步骤数据 - StartSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), - EndSV = GetSVByProcess(itemMeterValueCell.Constant, CurMeterName), - KeepTime = itemMeterValueCell.KeepTime, - MeterStepIsExeing = false,//配置阶段默认不执行 false - MeterStepIsOK = false,//配置阶段默认不完成 false - ExistSlop = false,//常值没有斜率 //开始和结束不一样则存在斜率 - - MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, - MeterName = CurMeterName, - - LimitNo = itemMeterValueCell.LimitNo, - AlarmNo = itemMeterValueCell.AlarmNo, - PIDNo = itemMeterValueCell.PIDNo, - - CurConfigPIDDto = Mapper.Map(Pid), - CurConfigLimitDto = Mapper.Map(Limit), - CurConfigAlarmDto = Mapper.Map(Alarm), - - ProStepInfo = $"{itemStep.StepNo}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterExPresss.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.MeterExPresss) - { - var Pid = new ConfigPID(); - if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any()) - { - Pid = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First(); - } - var Limit = new ConfigLimit(); - if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any()) - { - Limit = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First(); - } - var Alarm = new ConfigAlarm(); - if (FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any()) - { - Alarm = FreeSql.Select().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).First(); - } - - ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Add(new ProStepExe() - { - //程序块 - ProSegName = CurProgramSeg.Name, - ProSegStep = SegIndex, - ProSegRepeat = CurProgramSeg.ProRepeat, - ProSegIsExeing = false,//配置阶段默认不执行 false - - //程序步骤数据 - //SV = CALCHelper.GetQuickSV(itemMeterValueCell.Constant, 1), - StartSV = GetSVByProcess(itemMeterValueCell.StartValue, CurMeterName), - EndSV = GetSVByProcess(itemMeterValueCell.EndValue, CurMeterName), - KeepTime = itemMeterValueCell.KeepTime, - MeterStepIsExeing = false,//配置阶段默认不执行 false - MeterStepIsOK = false,//配置阶段默认不完成 false - ExistSlop = itemMeterValueCell.StartValue == itemMeterValueCell.EndValue ? false : true,//开始和结束不一样则存在斜率 - - MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1, - - LimitNo = itemMeterValueCell.LimitNo, - AlarmNo = itemMeterValueCell.AlarmNo, - PIDNo = itemMeterValueCell.PIDNo, - - CurConfigPIDDto = Mapper.Map(Pid), - CurConfigLimitDto = Mapper.Map(Limit), - CurConfigAlarmDto = Mapper.Map(Alarm), - - ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【HV[V]】步骤信息的解析 ********* - { - var CurMeterName = "HV[V]"; - 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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【吸气压力】步骤信息的解析 ********* - { - 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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【吸气温度】步骤信息的解析 ********* - { - 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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【润滑油压力】步骤信息的解析 ********* - { - 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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【LV[V]】步骤信息的解析 ********* - { - var CurMeterName = "LV[V]"; - 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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - ////********* 单个【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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【环境湿度】步骤信息的解析 ********* - { - 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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【环境温度】步骤信息的解析 ********* - { - 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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【PTC入口水温】步骤信息的解析 ********* - { - var CurMeterName = "PTC入口水温"; - if (itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【PTC流量】步骤信息的解析 ********* - { - var CurMeterName = "PTC流量"; - if (itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - //********* 单个【PTC功率】步骤信息的解析 ********* - { - var CurMeterName = "PTC功率"; - if (itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - }); - } - break; - case ConfigValueType.Slope: - //带斜率 - //根据循环次数确定 - var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.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}", - ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}", - StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]", - MeterName = CurMeterName, - }); - } - } - break; - default: - break; - } - } - else - { - //判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据 - var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe; - if (CurMeterListStepExe.Any()) - { - //之前有步骤数据的话,则直接使用上一步的数据 - - //Copy这个步骤的数据 - var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone(); - //处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据 - LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1 - LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间 - LastStepData.ExistSlop = false; - LastStepData.StartSV = LastStepData.EndSV; - LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}"; - //添加 - CurMeterListStepExe.Add(LastStepData); - //SpeedStepTotaolTime - } - else - { - //之前步骤没有数据的话,则放弃,不做任何处理 - } - LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空"); - } - - } - - } } - } + //通过速度的步骤信息获取总时间 + ProRunTimeCalcModel.TotalProSec = ListProExModel.FindFirst(a => a.MeterName == "转速").ListProStepExe.Sum(a => a.KeepTime); + }, cancellationToken); + + } + catch (Exception ex) + { + IsLoadProSeging = false; + } + finally + { + IsLoadProSeging = false; } - //通过速度的步骤信息获取总时间 - ProRunTimeCalcModel.TotalProSec = ListProExModel.FindFirst(a => a.MeterName == "转速").ListProStepExe.Sum(a => a.KeepTime); } diff --git a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs index 0990da1..26a8af3 100644 --- a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs @@ -16,6 +16,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Text; +using System.Threading.Tasks; using System.Windows; namespace CapMachine.Wpf.ViewModels @@ -2324,7 +2325,7 @@ namespace CapMachine.Wpf.ViewModels { if (_GenProPlcCmd == null) { - _GenProPlcCmd = new DelegateCommand(() => GenProPlcCmdMethod()); + _GenProPlcCmd = new DelegateCommand(async () => await GenProPlcCmdMethod()); } return _GenProPlcCmd; } @@ -2332,17 +2333,23 @@ namespace CapMachine.Wpf.ViewModels /// /// 生产下载执行方法 /// - private void GenProPlcCmdMethod() + private async Task GenProPlcCmdMethod() { if (ProSegRunListViewItems != null && ProSegRunListViewItems.Count() > 0) { //当前的程序开始标记 //ProParsSongZhiHelper.Start(); + if (ProRuntimeService.IsLoadProSeging) + { + MessageBox.Show("下载过程中无法操作,请下载完毕后再操作!", "提示", MessageBoxButton.OK, MessageBoxImage.Hand); + return; + } + //返回的数据 List ReturnPlcParsData = new List(); - ProRuntimeService.LoadProSegRun(ProSegRunListViewItems.ToList()); + await ProRuntimeService.LoadProSegRun(ProSegRunListViewItems.ToList(), new CancellationToken()); ////防止上一次下载的程序多余当前的步骤,为了清空多余的步骤数据,增加一行的数据 //ReturnPlcParsData = ProParsSongZhiHelper.AddNullData(ReturnPlcParsData); @@ -3198,6 +3205,7 @@ namespace CapMachine.Wpf.ViewModels SelectedProStepDto.SpeedCycle!.IsSlop = true; SelectedProStepDto.SpeedCycle!.Cycle = SelectedProStepDto.SpeedCycle.Cycle; + //计算程序段的总时间 SumProSegTime(); //if (MeterSpeedExDto.TotalSlopTime != GetKeepTimeBySpeed()) //{ @@ -3222,7 +3230,7 @@ namespace CapMachine.Wpf.ViewModels var SegStepTime = 0; foreach (var itemProStep in SelectedProgramSeg.ProSteps) { - if (itemProStep.MeterSpeeds != null && itemProStep.MeterSpeeds.Count()>0) + if (itemProStep.MeterSpeeds != null && itemProStep.MeterSpeeds.Count() > 0) { if (itemProStep.MeterSpeeds.FirstOrDefault()!.ValueType == ConfigValueType.Slope) { @@ -3259,6 +3267,7 @@ namespace CapMachine.Wpf.ViewModels if (time.Hours > 0) { + parts.Add($"{time.Days}天"); parts.Add($"{time.Hours}小时"); parts.Add($"{time.Minutes}分"); parts.Add($"{time.Seconds}秒");