Вобщем с Вашей помощью в проблеме я разобрался.
Еще раз, кратко, у меня идет обмен по MODBUS с устройствами. Часть каналов опрашиваются циклически с периодом 100мс. из них осуществляется только чтение, запись туда не осуществляется. Это информативные значения.
В остальные каналы осуществляется запись только по триггерной переменной. Чтение из этих каналов также по триггерной переменной, но чтение, в принципе, нужно только чтобы убедиться что параметр в канал записан.
Я предполагал что 200мс (цикл вызова задачи визуализации) будет достаточно чтобы записать данные во все каналы. Я почему-то так решил. Поэтому в одном из циклов я триггер поднимал, а уже в следующем сбрасывал.
Но если прикинуть в среднем на обмен по одному каналу требуется около 20 мс. А я пишу сразу по 10-15 параметров в 2 устройства. Соответственно это 30*20 = 600 мс. минимум. Т.е. все параметры не успели записаться, а я уже флаг сбросил.
Таким образом я установил задержку на сброс триггерной переменной, чтобы все параметры успели гарантировано записаться.
Жаль только что нельзя получить инфу выполнилась ли запись в канал или нет через системную переменную. Т.е. вроде как переменные есть, но они динамически меняются и если пакетов много, что записалось - не отловить.
А вопрос теперь остался один - переменная xError если происходит ошибка при обмене, как долго держит свое значение TRUE?




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