示例#1
0
        private IList <IWorkItem> GetWorkItems(IEnumerable <IModbusTag> Tags)
        {
            IList <IModbusTag> TagList = Tags.ToList();

            IEnumerable <CoilsWorkItem>            Coils            = CoilsWorkItem.GetWorkItems(TagList.OfType <IModbusCoilsTag>().ToList(), MaxQuantityOfCoils);
            IEnumerable <HoldingRegistersWorkItem> HoldingRegisters = HoldingRegistersWorkItem.GetWorkItems(TagList.OfType <IModbusHoldingRegistersTag>().ToList(), MaxQuantityOfRegisters);

            List <IWorkItem> WorkItems = new List <IWorkItem>();

            WorkItems.AddRange(Coils.Cast <IWorkItem>());
            WorkItems.AddRange(HoldingRegisters.Cast <IWorkItem>());

            return(WorkItems);
        }
示例#2
0
        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;
        }