添加配置跳过重量前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

@@ -30,10 +30,12 @@
<!--曲线采样间隔(ms)-->
<add key="CurveCollectorSampleIntervalMs" value="200"/>
<!--曲线稳定窗口点数-->
<add key="CurveStableWindowSize" value="20"/>
</appSettings>
<!--曲线稳定窗口点数-->
<add key="CurveStableWindowSize" value="20"/>
<!--最终重量计算时跳过前置称重点数0=不跳过-->
<add key="CurveStableSkipStartPointCount" value="0"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>

View File

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