压缩机PTC 功能

参数控制,由跟随速度到单个大参数控制
This commit is contained in:
2025-08-14 17:28:15 +08:00
parent c4be5e0929
commit 06ac590208
16 changed files with 3545 additions and 862 deletions

View File

@@ -797,7 +797,7 @@ namespace CapMachine.Wpf.Services
EnName = "PTCPw",
Group = "程序",
MinValue = 0,
MaxValue = 150,
MaxValue = 5000,
IsMeter = true,
DecimalPoint = 1,
Precision = 1,
@@ -819,36 +819,100 @@ namespace CapMachine.Wpf.Services
RWInfo = RWInfo.Control,
});
//PTC功率2 控制但非仪表控制 -北厂未启用此功能,南厂有此功能
//TagManger.AddTag(new ShortControlTag()
//{
// Id = 201,
// Name = "PTC功率2[W]",
// NameNoUnit = "PTC功率2",
// EnName = "PTCPw2",
// Group = "程序",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = true,
// DecimalPoint = 1,
// Precision = 1,
// Unit = "W",
// DataType = TagDataType.Short,
// PVModel = new MeterValueAttrCell() { Address = "VW434", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 334},
// SVModel = new MeterValueAttrCell() { Address = "VW434", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 34 },
// MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false },
// MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false },
//PTC功率2 控制但非仪表控制
TagManger.AddTag(new ShortControlTag()
{
Id = 201,
Name = "PTC功率2[W]",
NameNoUnit = "PTC功率2",
EnName = "PTCPw2",
Group = "程序",
MinValue = 0,
MaxValue = 10000,
IsMeter = true,
DecimalPoint = 1,
Precision = 1,
Unit = "W",
DataType = TagDataType.Short,
PVModel = new MeterValueAttrCell() { Address = "VW14022", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 334 },
SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 34 },
MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false },
MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false },
// Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
// Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
// Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
// Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
// Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
// AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
// AutoHandState = false,
Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
AutoHandState = false,
RWInfo = RWInfo.Control,
});
//PTC目标水温 控制但非仪表控制
TagManger.AddTag(new ShortControlTag()
{
Id = 202,
Name = "PTC目标水温[℃]",
NameNoUnit = "PTC目标水温",
EnName = "PTCWaterTemp",
Group = "程序",
MinValue = 0,
MaxValue = 150,
IsMeter = true,
DecimalPoint = 1,
Precision = 1,
Unit = "W",
DataType = TagDataType.Short,
PVModel = new MeterValueAttrCell() { Address = "VW14026", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 334 },
SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 34 },
MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false },
MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false },
Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
AutoHandState = false,
RWInfo = RWInfo.Control,
});
//PTC水流量 控制但非仪表控制
TagManger.AddTag(new ShortControlTag()
{
Id = 203,
Name = "PTC水流量[L/Min]",
NameNoUnit = "PTC水流量",
EnName = "PTCWaterFlow",
Group = "程序",
MinValue = 0,
MaxValue = 500,
IsMeter = true,
DecimalPoint = 2,
Precision = 1,
Unit = "W",
DataType = TagDataType.Short,
PVModel = new MeterValueAttrCell() { Address = "VW14024", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 334 },
SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 34 },
MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false },
MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false },
Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false },
AutoHandState = false,
RWInfo = RWInfo.Control,
});
// RWInfo = RWInfo.Control,
//});
//PTC流量 控制但非仪表控制
@@ -2939,6 +3003,31 @@ namespace CapMachine.Wpf.Services
{
while (ProRunChannel.Reader.TryRead(out var ProRunChannelData))
{
if (ProRunChannelData.ProExFlag != ProExFlag.None)
{
switch (ProRunChannelData.ProExFlag)
{
case ProExFlag.CapSpeed:
SendSpeedSvToCap(ProRunChannelData.SV);
break;
case ProExFlag.CapPTCPw:
SendPTCPwSvToCap(ProRunChannelData.SV);
break;
case ProExFlag.CapPTCPw2:
SendPTCPwSv2ToCap(ProRunChannelData.SV);
break;
case ProExFlag.CapPTCWaterTemp:
SendPTCWaterTempToCap(ProRunChannelData.SV);
break;
case ProExFlag.CapPTCWaterFlow:
SendPTCWaterFlowToCap(ProRunChannelData.SV);
break;
default:
break;
}
continue;
}
////第一次计时
//stopwatch.Start(); //启动Stopwatch
switch (ProRunChannelData.RunStepType)
@@ -3149,89 +3238,89 @@ namespace CapMachine.Wpf.Services
continue;
}
//压缩机PTC功率1的参数直接给压缩机触发
if (itemStepExd.Name!.Contains("PTC功率1"))
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
CanDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!);
break;
case CanLinEnum.CANFD:
CanFdDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!);
break;
case CanLinEnum.Lin:
LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!);
break;
default:
break;
}
continue;
}
////压缩机PTC功率1的参数直接给压缩机触发
//if (itemStepExd.Name!.Contains("PTC功率1"))
//{
// switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
// {
// case CanLinEnum.Can:
// CanDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!);
// break;
// case CanLinEnum.CANFD:
// CanFdDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!);
// break;
// case CanLinEnum.Lin:
// LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!);
// break;
// default:
// break;
// }
// continue;
//}
//压缩机PTC功率2的参数直接给压缩机触发
if (itemStepExd.Name!.Contains("PTC功率2"))
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
CanDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!);
break;
case CanLinEnum.CANFD:
CanFdDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!);
break;
case CanLinEnum.Lin:
//LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!);
break;
default:
break;
}
continue;
}
////压缩机PTC功率2的参数直接给压缩机触发
//if (itemStepExd.Name!.Contains("PTC功率2"))
//{
// switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
// {
// case CanLinEnum.Can:
// CanDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!);
// break;
// case CanLinEnum.CANFD:
// CanFdDriveService.UpdateCapPTCPwCmdData((double)itemStepExd.Value!);
// break;
// case CanLinEnum.Lin:
// //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!);
// break;
// default:
// break;
// }
// continue;
//}
//压缩机PTC水流量的参数直接给压缩机触发
if (itemStepExd.Name!.Contains("PTC水流量"))
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
CanDriveService.UpdateCapPTCFlowCmdData((double)itemStepExd.Value!);
break;
case CanLinEnum.CANFD:
CanFdDriveService.UpdateCapPTCFlowCmdData((double)itemStepExd.Value!);
break;
case CanLinEnum.Lin:
//LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!);
break;
default:
break;
}
continue;
}
////压缩机PTC水流量的参数直接给压缩机触发
//if (itemStepExd.Name!.Contains("PTC水流量"))
//{
// switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
// {
// case CanLinEnum.Can:
// CanDriveService.UpdateCapPTCFlowCmdData((double)itemStepExd.Value!);
// break;
// case CanLinEnum.CANFD:
// CanFdDriveService.UpdateCapPTCFlowCmdData((double)itemStepExd.Value!);
// break;
// case CanLinEnum.Lin:
// //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!);
// break;
// default:
// break;
// }
// continue;
//}
//压缩机PTC水温的参数直接给压缩机触发
if (itemStepExd.Name!.Contains("PTC水温"))
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
CanDriveService.UpdateCapPTCWaterTempCmdData((double)itemStepExd.Value!);
break;
case CanLinEnum.CANFD:
CanFdDriveService.UpdateCapPTCWaterTempCmdData((double)itemStepExd.Value!);
break;
case CanLinEnum.Lin:
//LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!);
break;
default:
break;
}
continue;
////压缩机PTC水温的参数直接给压缩机触发
//if (itemStepExd.Name!.Contains("PTC水温"))
//{
// switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
// {
// case CanLinEnum.Can:
// CanDriveService.UpdateCapPTCWaterTempCmdData((double)itemStepExd.Value!);
// break;
// case CanLinEnum.CANFD:
// CanFdDriveService.UpdateCapPTCWaterTempCmdData((double)itemStepExd.Value!);
// break;
// case CanLinEnum.Lin:
// //LinDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value!);
// break;
// default:
// break;
// }
// continue;
//Console.WriteLine($"{ProRunChannelData.MeterName}拓展参数------------:{itemStepExd.Name}:{itemStepExd.Value}");
//continue;
}
// //Console.WriteLine($"{ProRunChannelData.MeterName}拓展参数------------:{itemStepExd.Name}:{itemStepExd.Value}");
// //continue;
//}
var DataAdrees = ListPlcExdConfigCell.FirstOrDefault(a => a.Name == itemStepExd.Name);
if (DataAdrees != null)
@@ -3292,6 +3381,7 @@ namespace CapMachine.Wpf.Services
}
}
/// <summary>
/// 发送速度SV到压缩机
/// 自动步骤数据发送
@@ -3329,6 +3419,98 @@ namespace CapMachine.Wpf.Services
}
}
/// <summary>
/// 发送PTCPw SV到压缩机
/// 自动步骤数据发送
/// </summary>
private void SendPTCPwSvToCap(double Valuve)
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
CanDriveService.UpdateCapPTCPwCmdData(Valuve!);
break;
case CanLinEnum.CANFD:
CanFdDriveService.UpdateCapPTCPwCmdData(Valuve!);
break;
case CanLinEnum.Lin:
//LinDriveService.UpdateCapPTCPwCmdData((bool)ProRunChannelData.SV!);
break;
default:
break;
}
}
/// <summary>
/// 发送PTCPw2 SV到压缩机
/// 自动步骤数据发送
/// </summary>
private void SendPTCPwSv2ToCap(double Valuve)
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
CanDriveService.UpdateCapPTCPwCmdData(Valuve!);
break;
case CanLinEnum.CANFD:
CanFdDriveService.UpdateCapPTCPwCmdData(Valuve!);
break;
case CanLinEnum.Lin:
//LinDriveService.UpdateCapPTCPwCmdData((bool)ProRunChannelData.SV!);
break;
default:
break;
}
}
/// <summary>
/// 发送PTCPw2 SV到压缩机
/// 自动步骤数据发送
/// </summary>
private void SendPTCWaterTempToCap(double Valuve)
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
CanDriveService.UpdateCapPTCWaterTempCmdData(Valuve!);
break;
case CanLinEnum.CANFD:
CanFdDriveService.UpdateCapPTCWaterTempCmdData(Valuve!);
break;
case CanLinEnum.Lin:
//LinDriveService.UpdateCapPTCPwCmdData((bool)ProRunChannelData.SV!);
break;
default:
break;
}
}
/// <summary>
/// 发送PTCPw2 SV到压缩机
/// 自动步骤数据发送
/// </summary>
private void SendPTCWaterFlowToCap(double Valuve)
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
CanDriveService.UpdateCapPTCFlowCmdData(Valuve!);
break;
case CanLinEnum.CANFD:
CanFdDriveService.UpdateCapPTCFlowCmdData(Valuve!);
break;
case CanLinEnum.Lin:
//LinDriveService.UpdateCapPTCPwCmdData((bool)ProRunChannelData.SV!);
break;
default:
break;
}
}
#endregion
}
}

View File

@@ -82,6 +82,7 @@ namespace CapMachine.Wpf.Services
MeterName = itemKeyValue.Value.NameNoUnit,
ListProStepExe = new List<ProStepExe>(),
IsSpeed = itemKeyValue.Value.Name.Contains("转速") == true ? true : false,
ProExFlag = GetProExFlagByName(itemKeyValue.Value.NameNoUnit),
CurShortControlTag = MachineRtDataService.TagManger.GetShortControlTagByName(itemKeyValue.Key)!,
});
}
@@ -166,6 +167,32 @@ namespace CapMachine.Wpf.Services
return $"{hours}:{minutes:D2}:{seconds:D2}";
}
/// <summary>
/// 根据名称获取具体的标记信息
/// </summary>
/// <returns></returns>
private ProExFlag GetProExFlagByName(string Name)
{
//转速的话,直接获取
if (Name.Contains("转速")) return ProExFlag.CapSpeed;
switch (Name)
{
case "PTC功率":
return ProExFlag.CapPTCPw;
case "PTC功率2":
return ProExFlag.CapPTCPw2;
case "PTC目标水温":
return ProExFlag.CapPTCWaterTemp;
case "PTC水流量":
return ProExFlag.CapPTCWaterFlow;
default:
return ProExFlag.None;
}
}
/// <summary>
/// 是否在下载中
/// </summary>
@@ -231,6 +258,9 @@ namespace CapMachine.Wpf.Services
.IncludeMany(b => b.MeterPTCPws)
.IncludeMany(b => b.MeterEnvRHs)
.IncludeMany(b => b.MeterEnvTemps)
.IncludeMany(b => b.MeterPTCPw2s)
.IncludeMany(b => b.MeterPTCWaterFlows)
.IncludeMany(b => b.MeterPTCWaterTemps)
).ToList().FirstOrDefault();
//获取当前的程序
@@ -294,7 +324,7 @@ namespace CapMachine.Wpf.Services
MeterStepIsExeing = false,//配置阶段默认不执行 false
MeterStepIsOK = false,//配置阶段默认不完成 false
ExistSlop = false,//常值没有斜率 //开始和结束不一样则存在斜率
MeterStep = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe.Count + 1,
MeterName = CurMeterName,
@@ -314,10 +344,10 @@ namespace CapMachine.Wpf.Services
new StepExd(){ Name="压缩机使能",Value=itemMeterValueCell.CapEnable,ValueType=ExdValueType.Bool},
new StepExd(){ Name="PTC使能",Value=itemMeterValueCell.PTCEnable,ValueType=ExdValueType.Bool},
new StepExd(){ Name="PTC功率1",Value=itemMeterValueCell.PTCPw1,ValueType=ExdValueType.Double},
new StepExd(){ Name="PTC功率2",Value=itemMeterValueCell.PTCPw2,ValueType=ExdValueType.Double},
new StepExd(){ Name="PTC水流量",Value=itemMeterValueCell.PTCWaterFlow,ValueType=ExdValueType.Double},
new StepExd(){ Name="PTC水温",Value=itemMeterValueCell.PTCWaterTemp,ValueType=ExdValueType.Double},
//new StepExd(){ Name="PTC功率1",Value=itemMeterValueCell.PTCPw1,ValueType=ExdValueType.Double},
//new StepExd(){ Name="PTC功率2",Value=itemMeterValueCell.PTCPw2,ValueType=ExdValueType.Double},
//new StepExd(){ Name="PTC水流量",Value=itemMeterValueCell.PTCWaterFlow,ValueType=ExdValueType.Double},
//new StepExd(){ Name="PTC水温",Value=itemMeterValueCell.PTCWaterTemp,ValueType=ExdValueType.Double},
},
ProStepInfo = $"{itemStep.StepNo}",
@@ -387,10 +417,10 @@ namespace CapMachine.Wpf.Services
new StepExd(){ Name="压缩机使能",Value=itemMeterValueCell.CapEnable,ValueType=ExdValueType.Bool},
new StepExd(){ Name="PTC使能",Value=itemMeterValueCell.PTCEnable,ValueType=ExdValueType.Bool},
new StepExd(){ Name="PTC功率1",Value=itemMeterValueCell.PTCPw1,ValueType=ExdValueType.Double},
new StepExd(){ Name="PTC功率2",Value=itemMeterValueCell.PTCPw2,ValueType=ExdValueType.Double},
new StepExd(){ Name="PTC水流量",Value=itemMeterValueCell.PTCWaterFlow,ValueType=ExdValueType.Double},
new StepExd(){ Name="PTC水温",Value=itemMeterValueCell.PTCWaterTemp,ValueType=ExdValueType.Double},
//new StepExd(){ Name="PTC功率1",Value=itemMeterValueCell.PTCPw1,ValueType=ExdValueType.Double},
//new StepExd(){ Name="PTC功率2",Value=itemMeterValueCell.PTCPw2,ValueType=ExdValueType.Double},
//new StepExd(){ Name="PTC水流量",Value=itemMeterValueCell.PTCWaterFlow,ValueType=ExdValueType.Double},
//new StepExd(){ Name="PTC水温",Value=itemMeterValueCell.PTCWaterTemp,ValueType=ExdValueType.Double},
},
ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}",
@@ -3167,6 +3197,466 @@ namespace CapMachine.Wpf.Services
}
//********* 单个【PTC功率2】步骤信息的解析 *********
{
var CurMeterName = "PTC功率2";
if (itemStep.MeterPTCPw2s != null && itemStep.MeterPTCPw2s.Any())
{
switch (itemStep.MeterPTCPw2s.FirstOrDefault()!.ValueType)
{
case ConfigValueType.Constant: //常值
//常值的话就一个数据,循环执行一次
foreach (var itemMeterValueCell in itemStep.MeterPTCPw2s)
{
var Pid = new ConfigPID();
if (FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any())
{
Pid = FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First();
}
var Limit = new ConfigLimit();
if (FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any())
{
Limit = FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First();
}
var Alarm = new ConfigAlarm();
if (FreeSql.Select<ConfigAlarm>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any())
{
Alarm = FreeSql.Select<ConfigAlarm>().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<ConfigPIDDto>(Pid),
CurConfigLimitDto = Mapper.Map<ConfigLimitDto>(Limit),
CurConfigAlarmDto = Mapper.Map<ConfigAlarmDto>(Alarm),
ProStepInfo = $"{itemStep.StepNo}",
ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}",
StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]",
});
}
break;
case ConfigValueType.Slope:
//带斜率
//根据循环次数确定
var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCPw2s.Select(p => new MeterCom { Constant = p.Constant, KeepTime = p.KeepTime, StepNo = p.StepNo, ValueType = p.ValueType }).ToList());
for (int StepCycleIndex = 1; StepCycleIndex <= Cycle; StepCycleIndex++)
{
//根据循环次数执行
foreach (var itemMeterValueCell in itemStep.MeterPTCPw2s)
{
var Pid = new ConfigPID();
if (FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any())
{
Pid = FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First();
}
var Limit = new ConfigLimit();
if (FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any())
{
Limit = FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First();
}
var Alarm = new ConfigAlarm();
if (FreeSql.Select<ConfigAlarm>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any())
{
Alarm = FreeSql.Select<ConfigAlarm>().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<ConfigPIDDto>(Pid),
CurConfigLimitDto = Mapper.Map<ConfigLimitDto>(Limit),
CurConfigAlarmDto = Mapper.Map<ConfigAlarmDto>(Alarm),
ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}",
ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}",
StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]",
MeterName = CurMeterName,
});
}
}
break;
default:
break;
}
}
else
{
//判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据
var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe;
if (CurMeterListStepExe.Any())
{
//之前有步骤数据的话,则直接使用上一步的数据
//Copy这个步骤的数据
var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone();
//处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据
LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1
LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间
LastStepData.ExistSlop = false;
LastStepData.StartSV = LastStepData.EndSV;
LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}";
//添加
CurMeterListStepExe.Add(LastStepData);
//SpeedStepTotaolTime
}
else
{
//之前步骤没有数据的话,则放弃,不做任何处理
}
LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空");
}
}
//********* 单个【PTC目标水温】步骤信息的解析 *********
{
var CurMeterName = "PTC目标水温";
if (itemStep.MeterPTCWaterTemps != null && itemStep.MeterPTCWaterTemps.Any())
{
switch (itemStep.MeterPTCWaterTemps.FirstOrDefault()!.ValueType)
{
case ConfigValueType.Constant: //常值
//常值的话就一个数据,循环执行一次
foreach (var itemMeterValueCell in itemStep.MeterPTCWaterTemps)
{
var Pid = new ConfigPID();
if (FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any())
{
Pid = FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First();
}
var Limit = new ConfigLimit();
if (FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any())
{
Limit = FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First();
}
var Alarm = new ConfigAlarm();
if (FreeSql.Select<ConfigAlarm>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any())
{
Alarm = FreeSql.Select<ConfigAlarm>().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<ConfigPIDDto>(Pid),
CurConfigLimitDto = Mapper.Map<ConfigLimitDto>(Limit),
CurConfigAlarmDto = Mapper.Map<ConfigAlarmDto>(Alarm),
ProStepInfo = $"{itemStep.StepNo}",
ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}",
StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]",
});
}
break;
case ConfigValueType.Slope:
//带斜率
//根据循环次数确定
var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCWaterTemps.Select(p => new MeterCom { Constant = p.Constant, KeepTime = p.KeepTime, StepNo = p.StepNo, ValueType = p.ValueType }).ToList());
for (int StepCycleIndex = 1; StepCycleIndex <= Cycle; StepCycleIndex++)
{
//根据循环次数执行
foreach (var itemMeterValueCell in itemStep.MeterPTCWaterTemps)
{
var Pid = new ConfigPID();
if (FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any())
{
Pid = FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First();
}
var Limit = new ConfigLimit();
if (FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any())
{
Limit = FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First();
}
var Alarm = new ConfigAlarm();
if (FreeSql.Select<ConfigAlarm>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any())
{
Alarm = FreeSql.Select<ConfigAlarm>().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<ConfigPIDDto>(Pid),
CurConfigLimitDto = Mapper.Map<ConfigLimitDto>(Limit),
CurConfigAlarmDto = Mapper.Map<ConfigAlarmDto>(Alarm),
ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}",
ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}",
StepExeInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}{Environment.NewLine}{itemMeterValueCell.StartValue}->{itemMeterValueCell.EndValue}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]",
MeterName = CurMeterName,
});
}
}
break;
default:
break;
}
}
else
{
//判断当前的参数是全部都没有设置还是这一步没有设置,如果这个步骤没有设置,则沿用上一个步骤数据
var CurMeterListStepExe = ListProExModel.FindFirst(a => a.MeterName == CurMeterName).ListProStepExe;
if (CurMeterListStepExe.Any())
{
//之前有步骤数据的话,则直接使用上一步的数据
//Copy这个步骤的数据
var LastStepData = CurMeterListStepExe.OrderByDescending(a => a.MeterStep).FirstOrDefault().DeepClone();
//处理这个步骤的数据-处理按照常值的恒定的模式运行,就是维持结束的常值数据
LastStepData!.MeterStep = LastStepData.MeterStep + 1;//步骤+1
LastStepData.KeepTime = SpeedStepTotaolTime;//时间是整个时间
LastStepData.ExistSlop = false;
LastStepData.StartSV = LastStepData.EndSV;
LastStepData.ProStepInfo = $"{itemStep.StepNo}-{1}";
//添加
CurMeterListStepExe.Add(LastStepData);
//SpeedStepTotaolTime
}
else
{
//之前步骤没有数据的话,则放弃,不做任何处理
}
LogService.Warn($"【名称】: {CurMeterName} - 未找到步骤信息。步骤为空");
}
}
//********* 单个【PTC水流量】步骤信息的解析 *********
{
var CurMeterName = "PTC水流量";
if (itemStep.MeterPTCWaterFlows != null && itemStep.MeterPTCWaterFlows.Any())
{
switch (itemStep.MeterPTCWaterFlows.FirstOrDefault()!.ValueType)
{
case ConfigValueType.Constant: //常值
//常值的话就一个数据,循环执行一次
foreach (var itemMeterValueCell in itemStep.MeterPTCWaterFlows)
{
var Pid = new ConfigPID();
if (FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any())
{
Pid = FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First();
}
var Limit = new ConfigLimit();
if (FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any())
{
Limit = FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First();
}
var Alarm = new ConfigAlarm();
if (FreeSql.Select<ConfigAlarm>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any())
{
Alarm = FreeSql.Select<ConfigAlarm>().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<ConfigPIDDto>(Pid),
CurConfigLimitDto = Mapper.Map<ConfigLimitDto>(Limit),
CurConfigAlarmDto = Mapper.Map<ConfigAlarmDto>(Alarm),
ProStepInfo = $"{itemStep.StepNo}",
ProStep = $"{itemStep.StepNo}/{SpeedMaxStep}",
StepExeInfo = $"{itemStep.StepNo}{Environment.NewLine}{itemMeterValueCell.Constant}->{itemMeterValueCell.Constant}{Environment.NewLine}[{ConvertSecToTimeStr(itemMeterValueCell.KeepTime)}]",
});
}
break;
case ConfigValueType.Slope:
//带斜率
//根据循环次数确定
var Cycle = GetCycleBySpeed(itemStep.MeterSpeeds, itemStep.SpeedCycle, itemStep.MeterPTCWaterFlows.Select(p => new MeterCom { Constant = p.Constant, KeepTime = p.KeepTime, StepNo = p.StepNo, ValueType = p.ValueType }).ToList());
for (int StepCycleIndex = 1; StepCycleIndex <= Cycle; StepCycleIndex++)
{
//根据循环次数执行
foreach (var itemMeterValueCell in itemStep.MeterPTCWaterFlows)
{
var Pid = new ConfigPID();
if (FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).Any())
{
Pid = FreeSql.Select<ConfigPID>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.PIDNo).First();
}
var Limit = new ConfigLimit();
if (FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).Any())
{
Limit = FreeSql.Select<ConfigLimit>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.LimitNo).First();
}
var Alarm = new ConfigAlarm();
if (FreeSql.Select<ConfigAlarm>().Where(a => a.MeterName == CurMeterName && a.IndexNo == itemMeterValueCell.AlarmNo).Any())
{
Alarm = FreeSql.Select<ConfigAlarm>().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<ConfigPIDDto>(Pid),
CurConfigLimitDto = Mapper.Map<ConfigLimitDto>(Limit),
CurConfigAlarmDto = Mapper.Map<ConfigAlarmDto>(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} - 未找到步骤信息。步骤为空");
}
}
}
}