コード例 #1
0
        public virtual int BatchWrite(SortedDictionary <ITag, object> items, bool isSync = true)
        {
            int             len   = items.Count;
            int             rev   = 0;
            IMultiReadWrite multi = _plcReader as IMultiReadWrite;

            if (multi != null)
            {
                DeviceAddress[] addrs = new DeviceAddress[len];
                object[]        objs  = new object[len];
                int             i     = 0;
                foreach (var item in items)
                {
                    addrs[i] = item.Key.Address;
                    objs[i]  = item.Value;
                    i++;
                }

                rev = multi.WriteMultiple(addrs, objs);
            }
            else
            {
                foreach (var tag in items)
                {
                    if (tag.Key.Write(tag.Value) < 0)
                    {
                        rev = -1;
                    }
                }
            }

            if (DataChange != null && rev >= 0)
            {
                HistoryData[] data = new HistoryData[len];
                int           i    = 0;
                foreach (var item in items)
                {
                    ITag tag = item.Key;
                    data[i].ID        = tag.ID;
                    data[i].TimeStamp = tag.TimeStamp;
                    data[i].Quality   = tag.Quality;
                    data[i].Value     = item.Key.ToStorage(item.Value);
                    i++;
                }

                foreach (DataChangeEventHandler deleg in DataChange.GetInvocationList())
                {
                    deleg.BeginInvoke(this, new DataChangeEventArgs(1, data), null, null);
                }
            }

            return(rev);
        }
コード例 #2
0
        public virtual HistoryData[] BatchRead(DataSource source, bool isSync, params ITag[] itemArray)
        {
            int len = itemArray.Length;

            HistoryData[] values = new HistoryData[len];
            if (source == DataSource.Device)
            {
                IMultiReadWrite multi = _plcReader as IMultiReadWrite;
                if (multi != null)
                {
                    Array.Sort(itemArray);
                    var itemArr = multi.ReadMultiple(Array.ConvertAll(itemArray, x => x.Address));
                    for (int i = 0; i < len; i++)
                    {
                        values[i].ID        = itemArray[i].ID;
                        values[i].Value     = itemArr[i].Value;
                        values[i].TimeStamp = itemArr[i].TimeStamp.ToDateTime();
                        itemArray[i].Update(itemArr[i].Value, values[i].TimeStamp, itemArr[i].Quality);
                    }
                }
                else
                {
                    for (int i = 0; i < len; i++)
                    {
                        itemArray[i].Refresh(source);
                        values[i].ID        = itemArray[i].ID;
                        values[i].Value     = itemArray[i].Value;
                        values[i].Quality   = itemArray[i].Quality;
                        values[i].TimeStamp = itemArray[i].TimeStamp;
                    }
                }
            }
            else
            {
                for (int i = 0; i < len; i++)
                {
                    values[i].ID        = itemArray[i].ID;
                    values[i].Value     = itemArray[i].Value;
                    values[i].Quality   = itemArray[i].Quality;
                    values[i].TimeStamp = itemArray[i].TimeStamp;
                }
            }

            return(values);
        }