Сообщение от
capzap
отвлеченный вопрос, а почему не понравилось использовать SEL и написали свой IFI?
а по поводу опроса, если брать библиотеку modbus.lib нужно дождаться прихода COMPLETE чтоб перейти к о просу следующего модуля. Для кокой цели служит Ваш READY не известно потому что не пишите что за бибка и где её брали
Для использования SEL необходимо будет каждый раз добавлять NOT в условии, а мне это показалось неудобным (использую ПЛК TREI и среду UNIMOD PRO). По поводу второго вопроса, вот мой ФБ:
Код:
MB_R_F1(
START,
IDDRV,
SLAVE,
FUNC,
ADDR,
NUMBER);
FAULT:=MB_R_F1.FAULT;
//таймер на сработку ошибки
TON_1(
IN := NOT (MB_R_F1.READY AND FAULT = 0),
PT := ERR_TIME);
//в случае отсутствия ошибок считываем регистры в промежуточный массив, либо обнуляем его
IF NOT TON_1.Q THEN
MB_R_FARR[0]:= MB_R_F1.REG01;
MB_R_FARR[1]:= MB_R_F1.REG02;
MB_R_FARR[2]:= MB_R_F1.REG03;
MB_R_FARR[3]:= MB_R_F1.REG04;
MB_R_FARR[4]:= MB_R_F1.REG05;
//счетчик успешно выполненных запросов
CNT := CNT + 1;
READY := TRUE;
ELSE
FOR I := 0 TO 4 DO
MB_R_FARR[I]:= 0.0;
END_FOR;
CNT := 0;
READY := FALSE;
END_IF;
FLOAT_00 := MB_R_FARR[0];
FLOAT_01 := MB_R_FARR[1];
FLOAT_02 := MB_R_FARR[2];
FLOAT_03 := MB_R_FARR[3];
FLOAT_04 := MB_R_FARR[4];
END_IF;