private void Classificator(Tag addingTag) { if (addingTag.TagDirection == Direction.Write) { if (!allWriteTags.ContainsKey(addingTag.Name)) { allWriteTags.Add(addingTag.Name, addingTag); } return; } if (addingTag.InnerTag is BoolTag) { if (!allBoolTags.ContainsKey(addingTag.Name)) { allBoolTags.Add(addingTag.Name, (addingTag.InnerTag as BoolTag)); } } else if (addingTag.InnerTag is UshortTag) { allUshortTags.Add(addingTag.Name, (addingTag.InnerTag as UshortTag)); } else if (addingTag.InnerTag is FloatTag) { allFloatTags.Add(addingTag.Name, (addingTag.InnerTag as FloatTag)); } if (addingTag.InnerTag.Function == StatusFunction.CoilStatus) { if (!CoilStatuses.ContainsKey(addingTag.Name)) { CoilStatuses.Add(addingTag.Name, (addingTag.InnerTag)); } } else if (addingTag.InnerTag.Function == StatusFunction.InputStatus) { if (!InputStatuses.ContainsKey(addingTag.Name)) { InputStatuses.Add(addingTag.Name, (addingTag.InnerTag)); } } else if (addingTag.InnerTag.Function == RegisterFunction.HoldingRegister) { if (!InputStatuses.ContainsKey(addingTag.Name)) { HoldingRegisters.Add(addingTag.Name, (addingTag.InnerTag)); } } else if (addingTag.InnerTag.Function == RegisterFunction.InputRegister) { if (!InputStatuses.ContainsKey(addingTag.Name)) { InputRegisters.Add(addingTag.Name, (addingTag.InnerTag)); } } addingTag.TagStatusChanged += delegate(Tag sender, object value, bool quality) { TagStatusChanged?.Invoke(sender, value, quality); }; }
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; } } }
public void Read(BinaryReader binaryReader) { InputRegisters.Clear(); IsNull = binaryReader.ReadBoolean(); if (IsNull) { return; } else { var length = binaryReader.ReadInt32(); for (var i = 0; length > i; i++) { var inputRegister = new MODBUSMaster_InputRegister(); inputRegister.Read(binaryReader); InputRegisters.Add(inputRegister); } } }
public MODBUSMaster_InputRegisterArray AddInputRegister(MODBUSMaster_InputRegister inputRegister) { InputRegisters.Add(inputRegister); return(this); }
private void Classificator(Tag addingTag) { if (addingTag.TagDirection == Direction.Write) { if (!allWriteTags.ContainsKey(addingTag.Name)) { allWriteTags.Add(addingTag.Name, addingTag); } return; } if (addingTag.InnerTag is BoolTag) { if (!allBoolTags.ContainsKey(addingTag.Name)) { allBoolTags.Add(addingTag.Name, (addingTag.InnerTag as BoolTag)); } } else if (addingTag.InnerTag is UshortTag) { allUshortTags.Add(addingTag.Name, (addingTag.InnerTag as UshortTag)); } else if (addingTag.InnerTag is FloatTag) { allFloatTags.Add(addingTag.Name, (addingTag.InnerTag as FloatTag)); } else if (addingTag.InnerTag is UintTag) { allUintTags.Add(addingTag.Name, (addingTag.InnerTag as UintTag)); } if (addingTag.InnerTag.Function == StatusFunction.CoilStatus) { if (!CoilStatuses.ContainsKey(addingTag.Name)) { CoilStatuses.Add(addingTag.Name, (addingTag.InnerTag)); } } else if (addingTag.InnerTag.Function == StatusFunction.InputStatus) { if (!InputStatuses.ContainsKey(addingTag.Name)) { InputStatuses.Add(addingTag.Name, (addingTag.InnerTag)); } } else if (addingTag.InnerTag.Function == RegisterFunction.HoldingRegister) { if (!HoldingRegisters.ContainsKey(addingTag.Name)) { HoldingRegisters.Add(addingTag.Name, (addingTag.InnerTag)); } } else if (addingTag.InnerTag.Function == RegisterFunction.InputRegister) { if (!InputRegisters.ContainsKey(addingTag.Name)) { InputRegisters.Add(addingTag.Name, (addingTag.InnerTag)); } } addingTag.TagStatusChanged += (sender, e) => { TagStatusChanged?.Invoke(sender, EventArgs.Empty); }; }
public InputRegisterArray AddInputRegister(InputRegister inputRegister) { InputRegisters.Add(inputRegister); return(this); }
public void AddInputRegister(Register register)//Register<UInt16> register) { InputRegisters.Add(register); InputRegsCount = (UInt16)InputRegisters.Count; }