西门子S7驱动使用ReadMultipleVars代替Read方法
xiaodaidi1 opened this issue · comments
xiaodaidi1 commented
目前逻辑是按照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;
}
}
Sam commented
感谢你的建议。
- 方便的话可以提交一个pr吗?