Постоянное чтение переменных в Twincat 3 с помощью C# API

Я хочу непрерывно считывать множество переменных (быстрее 10 Гц) через клиент ADS C#. Однако в документации в примерах переменные читаются только один раз.

Я нашел модуль Twincat-OCX, у которого есть эта функция, но он используется для Twincat 2.

Какой способ рекомендуется использовать для Twincat3 при использовании C#?

1 ответ

Решение

Есть разные способы сделать это. Для меня лучше всего подходит способ установки дескриптора уведомления на Toggle Bit в ПЛК (порт 851 TC3), может быть, примерно так:

// tic for ADS notification, imod used for cycle adjustment

diCounter := diCounter + 1;

IF (diCounter MOD imod = 0)
THEN
    bTic := NOT bTic;
END_IF

бит переключения в ПЛК

Дескриптор уведомления - это хороший способ переноса данных в C# в реальном времени. Это прекрасно работает вплоть до цикла 10 мс, если TwinCAT работает на изолированном ядре. На контроллерах Beckhoff эта связь с приложением пользовательского режима стабильна до 1 мс. По крайней мере, таков мой опыт относительно детерминированного оборудования реального времени.

Теперь уведомление циклически поступает в C#, с этим сигналом можно использовать команду ADS sum для получения нескольких переменных в одном запросе. Это также настоятельно рекомендуется для снижения накладных расходов на связь. Пример.NET команд TC3 ADS SUM:

https://infosys.beckhoff.de/english.php?content=../content/1033/tc3_adssamples_net/185258507.html&id=8424732030635156090

Другие вопросы по тегам