В продолжении темы измерения скорости чтения, посмотрим что там с превью версией под .NET Core 3. Заодно увидим как обстоят дела с реактивностью.
ReadAny
static void Main(string[] args)
{
AdsSession session = new AdsSession(new AmsAddress("5.28.214.97.1.1", AmsPort.R0_RTS + 1));
session.Connect();
var connection = session.Connection;
const int HOWMUCH = 1000;
List results = new List();
uint hMain_CycleCount = connection.CreateVariableHandle("MAIN.CycleCount");
for (int i = 0; i < HOWMUCH; i++)
results.Add(
(uint)connection.ReadAny(hMain_CycleCount, typeof(uint)));
foreach (var cycleNumber in results)
Console.WriteLine(cycleNumber);
}
.NET Core 3, AdsRouterConsole
Для сравнения повтор картинки из предыдущего поста для .NET 4.7.1, TwinCAT.IO Router
Reactive
static void Main(string[] args)
{
AdsSession session = new AdsSession(new AmsAddress("5.28.214.97.1.1", AmsPort.R0_RTS + 1));
session.Connect();
const int HOWMUCH = 1000;
List<uint> results = new List<uint>();
var valueObserver = Observer.Create(
val => { // on next
results.Add(val);
//Console.WriteLine(val);
},
exc => { // on error
Console.WriteLine(exc.Message);
},
() => { //on completed
Console.WriteLine($"Read {results.Count} cycles");
foreach (var cycleNumber in results)
Console.WriteLine(cycleNumber);
});
var subscription = session.Connection
.WhenNotification("MAIN.CycleCount", NotificationSettings.ImmediatelyOnChange)
.Take(HOWMUCH)
.Subscribe(valueObserver);
Console.WriteLine("ENTER to stop...");
Console.ReadLine();
}
Все совсем плохо:
Отрицательные значения показывают, что пакеты прилетали не по порядку, а как-то иначе. Причем, если убрать условие в получении N-значений
.Take(1000), и просто попытаться выбрать требуемое количество, то получится такая же точно каша с непоследовательными элементами. Что нарушает уверенность в целостности системы.
При времени цикла меньше одной секунды, перестает работать делегат отвечающий за
onComplеte часть обозревателя. Именно поэтому пришлось добавить в
onNext вывод промежуточных результатов.
Пока что очень сыро и сильно напрягает непоследовательность приходящих элементов.
No comments
Post a Comment
Note: Only a member of this blog may post a comment.