예제 #1
0
        public void UpdateValue(Data data, bool readOnlyOverride = false)
        {
            var normalisedAddress = AddressTools.AddressNormalisation(data.Address);
            var addressType       = AddressTools.AddressType(data.Address);

            if (addressType != data.Type)
            {
                throw new DataTypeDoesNotMatchAddressException(data.Address.ToString());
            }

            if (ValueExists(data.Address))
            {
                switch (addressType)
                {
                case DataType.Coil:
                    Coils.Find(c => c.Address == normalisedAddress).Update(data.Value, readOnlyOverride);
                    break;

                case DataType.DiscreteInput:
                    DiscreteInputs.Find(c => c.Address == normalisedAddress).Update(data.Value, readOnlyOverride);
                    break;

                case DataType.InputRegister:
                    InputRegisters.Find(c => c.Address == normalisedAddress).Update(data.Value, readOnlyOverride);
                    break;

                case DataType.HoldingRegister:
                    HoldingRegisters.Find(c => c.Address == normalisedAddress).Update(data.Value, readOnlyOverride);
                    break;
                }
            }
            else
            {
                var normalisedData = Data.Create(normalisedAddress, data.Type);

                switch (addressType)
                {
                case DataType.Coil:
                    Coils.Add(normalisedData);
                    break;

                case DataType.DiscreteInput:
                    DiscreteInputs.Add(normalisedData);
                    break;

                case DataType.InputRegister:
                    InputRegisters.Add(normalisedData);
                    break;

                case DataType.HoldingRegister:
                    HoldingRegisters.Add(normalisedData);
                    break;
                }
            }
        }
예제 #2
0
        public bool ValueExists(int address)
        {
            var normalisedAddress = AddressTools.AddressNormalisation(address);
            var addressType       = AddressTools.AddressType(address);

            switch (addressType)
            {
            case DataType.Coil:
                return(Coils.Exists(c => c.Address == normalisedAddress));

            case DataType.DiscreteInput:
                return(DiscreteInputs.Exists(c => c.Address == normalisedAddress));

            case DataType.InputRegister:
                return(InputRegisters.Exists(c => c.Address == normalisedAddress));

            case DataType.HoldingRegister:
                return(HoldingRegisters.Exists(c => c.Address == normalisedAddress));
            }

            return(false);
        }