public static IEnumerable <HoldingRegistersWorkItem> GetWorkItems(IEnumerable <IModbusHoldingRegistersTag> Tags, UInt16 MaxQuantityOfRegisters = 125) { IList <IModbusHoldingRegistersTag> TagList = Tags.Where(tag => tag.Address.Table == Table.HoldingRegisters).OrderBy(tag => tag.Address.Index).ToList(); List <HoldingRegistersWorkItem> WorkItems = new List <HoldingRegistersWorkItem>(); HoldingRegistersWorkItem WorkItem = null; foreach (IModbusHoldingRegistersTag tag in TagList) { if (WorkItem == null) { WorkItem = new HoldingRegistersWorkItem(MaxQuantityOfRegisters); WorkItems.Add(WorkItem); } if (!(WorkItem.Add(tag))) { WorkItem = new HoldingRegistersWorkItem(MaxQuantityOfRegisters); WorkItem.Add(tag); WorkItems.Add(WorkItem); } } return(WorkItems); }
private void Read(HoldingRegistersWorkItem workItem) { UInt16 address = workItem.Address.Index; UInt16 length = workItem.QuantityOfRegisters; UInt16[] reply; lock (DriverLock) { reply = Driver.ReadHoldingRegisters(1, address, length); } Byte[] buffer = new Byte[reply.Length * sizeof(UInt16)]; Buffer.BlockCopy(reply, 0, buffer, 0, buffer.Length); workItem.Buffer = buffer; }
public static IEnumerable<HoldingRegistersWorkItem> GetWorkItems(IEnumerable<IModbusHoldingRegistersTag> Tags, UInt16 MaxQuantityOfRegisters = 125) { IList<IModbusHoldingRegistersTag> TagList = Tags.Where(tag => tag.Address.Table == Table.HoldingRegisters).OrderBy(tag => tag.Address.Index).ToList(); List<HoldingRegistersWorkItem> WorkItems = new List<HoldingRegistersWorkItem>(); HoldingRegistersWorkItem WorkItem = null; foreach (IModbusHoldingRegistersTag tag in TagList) { if (WorkItem == null) { WorkItem = new HoldingRegistersWorkItem(MaxQuantityOfRegisters); WorkItems.Add(WorkItem); } if (!(WorkItem.Add(tag))) { WorkItem = new HoldingRegistersWorkItem(MaxQuantityOfRegisters); WorkItem.Add(tag); WorkItems.Add(WorkItem); } } return WorkItems; }