wanshenmean
2026-03-17 94ad631d316da04c46266ddb1fc6e63e6f8f2fae
Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Application/Protocol/Devices/WcsLineProtocolHandler.cs
@@ -24,7 +24,7 @@
    public bool Process(IMemoryStore memoryStore, ProtocolTemplate template, ProtocolRuntimeState runtimeState)
    {
        var configRules = ResolveConfiguredRules();
        var configRules = ResolveConfiguredRules(template);
        var autoRules = ResolveAutoRulesFromTemplate(template, configRules.Select(x => x.RuleId));
        bool changed = false;
@@ -37,12 +37,15 @@
        return changed;
    }
    private IReadOnlyList<MirrorAckRuleOptions> ResolveConfiguredRules()
    private IReadOnlyList<MirrorAckRuleOptions> ResolveConfiguredRules(ProtocolTemplate template)
    {
        if (_options.WcsLineRuleIds.Count == 0)
        {
            return Array.Empty<MirrorAckRuleOptions>();
        }
        // 按模板字段过滤规则,避免把 11001 这类规则错误套到其他线体模板上。
        var keySet = new HashSet<string>(template.Fields.Select(x => x.FieldKey), StringComparer.OrdinalIgnoreCase);
        return _options.WcsLineRuleIds
            .Where(x => !string.IsNullOrWhiteSpace(x))
@@ -51,6 +54,7 @@
                string.Equals(x.RuleId, ruleId, StringComparison.OrdinalIgnoreCase)))
            .Where(rule => rule != null)
            .Select(rule => rule!)
            .Where(rule => keySet.Contains(rule.WcsAckFieldKey) && keySet.Contains(rule.PlcStbFieldKey))
            .ToArray();
    }