添加配置跳过重量前N个点

This commit is contained in:
XingCheng3
2026-05-16 13:51:45 +08:00
parent e11c727114
commit 9aaa9a97e9
2 changed files with 14 additions and 7 deletions

View File

@@ -32,6 +32,8 @@
<add key="CurveCollectorSampleIntervalMs" value="200"/> <add key="CurveCollectorSampleIntervalMs" value="200"/>
<!--曲线稳定窗口点数--> <!--曲线稳定窗口点数-->
<add key="CurveStableWindowSize" value="20"/> <add key="CurveStableWindowSize" value="20"/>
<!--最终重量计算时跳过前置称重点数0=不跳过-->
<add key="CurveStableSkipStartPointCount" value="0"/>
</appSettings> </appSettings>
<startup> <startup>

View File

@@ -39,6 +39,10 @@ namespace MesWork
ConfigurationManager.AppSettings["CurveStableWindowSize"], out int _stableWindowSize) ConfigurationManager.AppSettings["CurveStableWindowSize"], out int _stableWindowSize)
? _stableWindowSize : 20; ? _stableWindowSize : 20;
private static readonly int CurveStableSkipStartPointCount = int.TryParse(
ConfigurationManager.AppSettings["CurveStableSkipStartPointCount"], out int _skipStartPointCount)
? _skipStartPointCount : 0;
/// <summary> /// <summary>
/// 允许工作后启动曲线采集,每个工位同一时间只保留一个采集段。 /// 允许工作后启动曲线采集,每个工位同一时间只保留一个采集段。
/// </summary> /// </summary>
@@ -236,18 +240,19 @@ namespace MesWork
} }
/// <summary> /// <summary>
/// 找连续20点中极差最小的一段,去掉一个最大值和一个最小值后取平均。 /// 跳过前置配置点数后,找连续稳定窗口中极差最小的一段,去掉一个最大值和一个最小值后取平均。
/// </summary> /// </summary>
private bool CurveCollector_CalculateStableWeight(List<decimal> weights, out decimal stableWeight, out int startSeq, out int endSeq) private bool CurveCollector_CalculateStableWeight(List<decimal> weights, out decimal stableWeight, out int startSeq, out int endSeq)
{ {
stableWeight = 0; stableWeight = 0;
startSeq = 0; startSeq = 0;
endSeq = 0; endSeq = 0;
if (weights == null || weights.Count < CurveStableWindowSize) return false; int skipStartPointCount = Math.Max(0, CurveStableSkipStartPointCount);
if (weights == null || weights.Count - skipStartPointCount < CurveStableWindowSize) return false;
int bestStart = 0; // 0-based窗口起点保存时转成1-based序号 int bestStart = 0; // 0-based窗口起点保存时转成1-based序号
decimal bestRange = decimal.MaxValue; decimal bestRange = decimal.MaxValue;
for (int i = 0; i <= weights.Count - CurveStableWindowSize; i++) for (int i = skipStartPointCount; i <= weights.Count - CurveStableWindowSize; i++)
{ {
decimal min = weights[i]; decimal min = weights[i];
decimal max = weights[i]; decimal max = weights[i];