| | |
| | | |
| | | 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; |
| | |
| | | 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)) |
| | |
| | | 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(); |
| | | } |
| | | |