iotgateway icon indicating copy to clipboard operation
iotgateway copied to clipboard

西门子S7驱动使用ReadMultipleVars代替Read方法

Open xiaodaidi1 opened this issue 1 year ago • 1 comments

目前逻辑是按照DeviceVariables循环串行读取,在个数多的情况下,性能会明显变慢 可以使用ReadMultipleVars方法批量读取数据加快响应,提高吞吐量

                var pageSize = plcPageSize;
                var pages = (ioarg.Count / pageSize) + 1;
                for (int pageIndex = 0; pageIndex < pages; pageIndex++)
                {
                    var source = ioarg.Skip(pageIndex * pageSize).Take(pageSize).ToList();
                    var items = source.Select(x =>
                    {
                        var dataItem = S7.Net.Types.DataItem.FromAddress(x.arg.Address);
                        return dataItem;
                    }).ToList();
                    plc.ReadMultipleVars(items);
                    for (int i = 0; i < source.Count; i++)
                    {
                        source[i].Value = items[i].Value;
                    }
                }

xiaodaidi1 avatar Apr 18 '23 07:04 xiaodaidi1