Доброго времени суток!
Товарищи, подскажите кто и как делает контроль связи при использовании modbus.lib ??

Я реализовал так:
Вычитываю фиксированную переменную (адрес/slave id) с устройства (все тот же danfoss FC051 он же ПЧВ1), сбрасывая в ноль перед чтением и сравниваю потом с константой (=так же Slave ID)

SlaveID:=0; // Сброс в 0, для каждый цикл

IF enable THEN up:=FALSE; // Проверяем стартовое условие, если FALSE - ничего дальше не делаем
IF Write_Command <> Prev_Command THEN ex:=81; END_IF; // Проверяем наличие команд на запись
CASE ex OF // Последовательный опрос регистров

0: BlockRead ....


50:
BlockRead (Enable:=Enable, Mode:=MB_RTU, DevAddr:=DevAdr, FirstAddr:=8309, Quantity:=1, ComHandle:=CHandle, TimeOut:=TOut, Buffer:=abyRead_buffer);
IF BlockRead.Complete THEN
IF BlockRead.Exception=0 THEN
//B2W.IN2Byte[0]:=abyRead_buffer[1];
//B2W.IN2Byte[1]:=abyRead_buffer[0];
SlaveID:=abyRead_buffer[1]; // передаю в переменную вычитанное значение из буфера
END_IF;
т.е. по моей задумке в теле ФБ, где все это сделано, сначала значение сбрасывается в 0, потом принимает вычитанное из устройство значение и идет дальше на выход и сравнение.

Это все работает. Но
большое НО - бывает значение не обновляется до полуминуты (30 секунд) - уже в CFC блоком TON это отслеживаю.
И так как бы по всем переменным. Программа в целом работает, опрашивает, но вот по ходу это самое условие не всегда срабатывает:
IF BlockRead.Complete THEN
IF BlockRead.Exception=0 THEN
Как можно соптимизировать?
- пробовал "играть" временем цикла задачи от 2 до 20 мс (как понимаю это фактически интервал между соседними запросами к устройству, от перехода к след условию CASE)
- делал паузу до 3 сек после завершения всего опроса
- да, с точки зрения минимизации запросов-ответов у меня не правильно: 16 запросов в основном по 1 регистру. но по другому ни как: у устройства не сквозная карта памяти, идет ошибка при попытки считать "соседние" регистры. но даже при этом не также все плохо должно быть...

кардинально изменений можно сказать нет ((

видел тут статистику/расчеты на запрос-получение одного регистра и нескольких - помогите мне тоже укладываться хотя бы в 500ms.