Мои 80мс предполагают следующую ситуацию:
1) Буффер отправлен ведомому;
2) Выполняется программа основного алгоритма (~10мс, "с потолка"); (Это еще почти идеальный вариант без PID-регуляторов)
3) MinCycleLenth 1мс;
4) Ответ ведомого: принят полностью (идеальная ситуация);
5) Таймер 3мс считает, разбор буффера еще не начинался;
6) Выполняется программа основного алгоритма (~10мс);
7) MinCycleLenth 1мс;
8) Таймер 3мс Q=TRUE , обработка буффера , DONE;
9) переход к шагу 1;
(Добавочное) Время выполнения для 8 регистров/ 8 ведомых = 8x3 мс + 8x10 мс = 80 --- 104 мс в данном примере.
Такой порядок действий соответствует программе, в которой MODBUS.PRG и CONTROL.PRG выполняются в одной задаче.
Я считаю, что обмен нужно выносить в отдельную задачу для оптимизации обмена. И само собой без таймера 3мс
У меня есть работающий объект, в котором вертится 3 отдельных задачи (Modicon M238, Somachine V3.1=Codesys V3.4): 1)Основной алгоритм (циклическая 100мс) 2) Modbus (циклическая 10мс, местная библиотека, похожая на Mosbus.lib) 3) Низкоприоритетные операции (циклическая 800мс).




Ответить с цитированием