Ejemplo n.º 1
0
        public RegisterNumber(DeviceBlock deviceBlock, RegisterSettings settings,
            SetNumberValueDelegate setValue, GetNumberValueDelegate getValue = null)
            : base(deviceBlock, settings)
        {
            UseScale = false;
            _ScaleFactor = 1;
            Inserter = null;
            String defaultValue = Settings.RegisterValue;
            if (defaultValue != null)
                RegisterValueNumber = new RegisterValueNumber(this, defaultValue);
            if (RegisterValueNumber != null)
            {
                HasFixedValue = true;
                MappedToRegisterData &= (Device.Params.Protocol.Type == ProtocolSettings.ProtocolType.Modbus);
                _Value = RegisterValueNumber.ValueDecimal;
            }
            else
                HasFixedValue = false;
            SetNumberValueInternal = setValue;
            GetNumberValueInternal = getValue;
            UseScale = settings.UseScale;
            ScaleValueType = settings.ScaleValueType;
            if (UseScale)
                _ScaleFactor = 1 / settings.DefaultScale;

            LoadExtractor(settings.Extractor);
            LoadInserter(settings.Inserter);
        }
Ejemplo n.º 2
0
 public RegisterBytes(DeviceBlock deviceBlock, RegisterSettings settings,
     SetBytesValueDelegate setValue, GetBytesValueDelegate getValue = null)
     : base(deviceBlock, settings)
 {
     String defaultValue = Settings.RegisterValue;
     if (defaultValue != null)
         RegisterValueBytes = new RegisterValueBytes(this, defaultValue);
     if (RegisterValueBytes != null)
     {
         HasFixedValue = true;
         MappedToRegisterData &= (Device.Params.Protocol.Type == ProtocolSettings.ProtocolType.Modbus);
         _Value = RegisterValueBytes.ValueBytes;
     }
     else
     {
         HasFixedValue = false;
         _Value = null;
     }
     SetBytesValueInternal = setValue;
     GetBytesValueInternal = getValue;
     LoadExtractor(settings.Extractor);
     LoadInserter(settings.Inserter);
 }
Ejemplo n.º 3
0
        protected Register(DeviceBlock deviceBlock, RegisterSettings settings)
        {
            //SendBufferStartPos = 0;
            //ReceiveBufferStartPos = 0;
            PayloadPosition = settings.Position;

            Name = settings.Name;
            Content = settings.Content;

            Settings = settings;
            DeviceBlock = deviceBlock;
            Device = deviceBlock.Device;
            ValueType = settings.Type;
            Message = settings.Message;
            BindingName = settings.Binding;
            Binding = DeviceBlock.Conversation.GetVariable(BindingName);
            if (Binding == null)
            {
                BoundToSend = false;
                BoundToRead = false;
                BoundToFind = false;
                BoundToExtract = false;
            }
            else
            {
                bool res = DeviceBlock.Conversation.GetVariableUsage(BindingName, out BoundToSend, out BoundToRead, out BoundToFind, out BoundToExtract);
                if (!res)
                    LogMessage("Register Constructor - Variable: " + BindingName + " - not used in conversation: " + DeviceBlock.Conversation, LogEntryType.ErrorMessage);
            }
            MappedToRegisterData = (DeviceBlock.GetType() == typeof(DeviceBlock_Modbus) && settings.Id.HasValue)
                || (DeviceBlock.GetType() != typeof(DeviceBlock_Modbus) && BindingName == "");
            //IsContent = Content != "";
            StartRegister = settings.Id.HasValue ? settings.Id.Value : (UInt16)0;
            RegisterCount = settings.RegisterCount;
            UInt16? size = settings.Size;
            Size = size.HasValue ? size.Value : (UInt16)(RegisterCount * 2);
            FixedSize = settings.Size;
            IsAlarmFlag = settings.IsAlarmFlag;
            IsAlarmDetail = settings.IsAlarmDetail;
            IsErrorFlag = settings.IsErrorFlag;
            IsErrorDetail = settings.IsErrorDetail;
            IsHexadecimal = settings.IsHexadecimal;
            IsCString = settings.IsCString;

            LoadValueList();
        }
        protected internal Register GetRegister(DeviceBlock block, RegisterSettings settings)
        {
            String itemName = settings.Content;

            if (itemName != "")
            {
                VariableEntry var = FindVariable(itemName);

                if (var != null)
                {
                    if (var.GetType() == typeof(VariableEntry_Numeric))
                        return new RegisterNumber(block, settings, ((VariableEntry_Numeric)var).SetValueDelegate, ((VariableEntry_Numeric)var).GetValueDelegate);
                    else if (var.GetType() == typeof(VariableEntry_String))
                        return new RegisterString(block, settings, ((VariableEntry_String)var).SetValueDelegate, ((VariableEntry_String)var).GetValueDelegate);
                    else if (var.GetType() == typeof(VariableEntry_Bytes))
                        return new RegisterBytes(block, settings, ((VariableEntry_Bytes)var).SetValueDelegate, ((VariableEntry_Bytes)var).GetValueDelegate);
                }
                // some devices do not need external exposure of the Register entries - eg CC128
                // LogMessage("Device.GetRegister - Cannot find 'Content': " + itemName, LogEntryType.Trace);
            }

            RegisterSettings.RegisterValueType type = settings.Type;

            if (type == RegisterSettings.RegisterValueType.rv_bytes)
                return new RegisterBytes(block, settings, null);
            if (type == RegisterSettings.RegisterValueType.rv_string)
                return new RegisterString(block, settings, null);

            return new RegisterNumber(block, settings, null);
        }
        private void CommonConstruction()
        {
            ExitOnSuccess = ActionSettings.ExitOnSuccess;
            ExitOnFailure = ActionSettings.ExitOnFailure;
            if (ExitOnSuccess || ExitOnFailure)
                ContinueOnFailure = true;
            else
                ContinueOnFailure = ActionSettings.ContinueOnFailure;

            DeviceBlock = FindBlock();
            LoadActions();
            LoadParameters();
        }
        public DeviceBlock FindBlock()
        {
            // return local block if present
            if (DeviceBlock != null)
                return DeviceBlock;

            string blockName = ActionSettings.BlockName;
            if (blockName != "")
            {
                DeviceBlock = Device.FindBlock(blockName);
                if (DeviceBlock == null)
                    throw new Exception("AlgorithmAction - Cannot find target block: '" + blockName + "'");
            }
            else if (ParentAction != null) // climb the parent tree
                DeviceBlock = ParentAction.FindBlock();
            else
                DeviceBlock = null;

            return DeviceBlock;
        }