Постоянное чтение переменных в 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: