Exemple #1
0
        public override void OnNewValueToChannel(object sender, TagExchangeWithChannelArgs eventArgs)
        {
            base.OnNewValueToChannel(sender, eventArgs);

            switch (_limitMonitorType)
            {
            case MessageLimitMonitorType.GreaterThen:
                if (IsActive)
                {
                    if (Value.CompareTo(_limitMinusHyst) < 0)
                    {
                        IsActive = false;
                    }
                }
                else
                {
                    if (Value.CompareTo(_limit) > 0)
                    {
                        IsActive = true;
                        OnActivated();
                    }
                }

                break;

            case MessageLimitMonitorType.GreaterOrEqual:
                if (IsActive)
                {
                    if (Value.CompareTo(_limitMinusHyst) < 0)
                    {
                        IsActive = false;
                    }
                }
                else
                {
                    if (Value.CompareTo(_limit) >= 0)
                    {
                        IsActive = true;
                        OnActivated();
                    }
                }
                break;

            case MessageLimitMonitorType.LessThen:
                if (IsActive)
                {
                    if (Value.CompareTo(_limitPlusHyst) > 0)
                    {
                        IsActive = false;
                    }
                }
                else
                {
                    if (Value.CompareTo(_limit) < 0)
                    {
                        IsActive = true;
                        OnActivated();
                    }
                }

                break;

            case MessageLimitMonitorType.LessOrEqual:
                if (IsActive)
                {
                    if (Value.CompareTo(_limitPlusHyst) > 0)
                    {
                        IsActive = false;
                    }
                }
                else
                {
                    if (Value.CompareTo(_limit) <= 0)
                    {
                        IsActive = true;
                        OnActivated();
                    }
                }

                break;

            case MessageLimitMonitorType.Equal:
                if (IsActive)
                {
                    if (Value.CompareTo(_limit) != 0)
                    {
                        IsActive = false;
                    }
                }
                else
                {
                    if (Value.CompareTo(_limit) == 0)
                    {
                        IsActive = true;
                        OnActivated();
                    }
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            IsFirstCall = false;
        }
 public void OnNewValueToChannel(object sender, TagExchangeWithChannelArgs eventArgs)
 {
     NewValueToChannel?.Invoke(this, new ValueToChannelArgs(_startAddress, eventArgs.Value));
 }