Проверил на живой ПР200: fDiv 0/0=0. Ничего не зависает.
По исходнику из CoDeSys - когда-то очень давно (лет 8 назад) скопировал из Util.lib себе в проект - нужна была только эта функция. Там тоже деление на ноль не проверялось. Вот:
K := (OUT_MAX - OUT_MIN) / (IN_MAX - IN_MIN);
IF (IN <= IN_MIN) THEN
LIN_TRAFO_FUN := OUT_MIN;
END_IF;
IF ((IN > IN_MIN) AND (IN < IN_MAX)) THEN
LIN_TRAFO_FUN := OUT_MIN + K * (IN - IN_MIN);
END_IF;
IF (IN >= IN_MAX) THEN
LIN_TRAFO_FUN := OUT_MAX;
END_IF;
Поскольку IN_MIN,IN_MAX,OUT_MIN,OUT_MAX у меня всегда задавались константой при программировании - никогда на деление на ноль не нарывался.
Сейчас глянул в Util.lib, котрорая вместе с текущей версией CoDeSys поставилась - там вообще все по другому, и деление на ноль проверяется, и выход ошибки появился..
Нашел еще - такой макрос уже на форуме пробегал, только для ПР114 - http://www.owen.ru/forum/showthread....l=1#post123611. Там тоже деление на 0 не проверяется.




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