Последовательный опрос устройств по Modbus RTU
Здравствуйте, пишу сюда впервые и очень надеюсь на вашу помощь. Задача в последовательном опросе устройств по Modbus RTU.
Пытаюсь произвести последовательный опрос 3 устройств и испробовал разные способы, Good practice к сожалению не знаю в этом вопросе.
Вот мои попытки:
Код:
//STEP - переменная для шага, по умолчанию 1
//пользовательский ФБ запроса по RTU
MB_R1(
START := STEP = 1,
SLAVE := 1,
FUNC := 4,
ADDR := 5000,
NUMBER := 12,
ERR_TIME := 1000);
MBR1 := MB_R1.READY;
COUNTER1 := MB_R1.CNT;
//сокращенная форма IF(IN, VAL1, VAL2) - если IN = TRUE, то возвращает VAL1, иначе VAL2
STEP := IFI(MB_R1.READY, 2, STEP);
MB_R2(
START := STEP = 2,
SLAVE := 1,
FUNC := 4,
ADDR := 5050,
NUMBER := 12,
ERR_TIME := 1000);
MBR2 := MB_R2.READY;
COUNTER2 := MB_R2.CNT;
STEP := IFI(MB_R1.READY, 3, STEP);
MB_R3(
START := STEP = 3,
SLAVE := 1,
FUNC := 4,
ADDR := 5100,
NUMBER := 12,
ERR_TIME := 1000);
MBR3 := MB_R3.READY;
COUNTER3 := MB_R3.CNT;
STEP := IFI(MB_R3.READY, 1, STEP);
В итоге запрос виснет только в одном из ФБ, сюда привел самый простой и понятный вариант из написанного, пробовал уже и с передним фронтом и с таймером, но все равно не работает. Может есть какой-то типовой алгоритм для опроса по Modbus RTU? Сил уже нет