1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Что такое "nan" и как его распознать

Модератор: специалисты Weintek

Ответить
Аватара пользователя

Автор темы
Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Что такое "nan" и как его распознать

Сообщение Никита »

Задача следующая:
Имеем 5 трубопроводов с расходомерами 4-20мА.
Сейчас скриптом, раз в секунду, через GetData опрашиваются приборы, потом высчитывается (сложением) суммарный расход.
Проблема: при отключении любого из приборов (сигнал меньше 4мА) на панели отображается "-nan", то же получается и при суммировании.
Вопрос: Каким условием в скрипте можно отловить этот "-nan" и обнулить эту переменную, для нормального расчета суммы по остальным.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

skr
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 208
Зарегистрирован: 22 мар 2013, 11:52
Имя: Денис Порфирьев
город/регион: Санкт-Петербург
Поблагодарили: 6 раз

Что такое "nan" и как его распознать

Сообщение skr »

NaN - not a number. Любые вычисления с NaN дадут результатом NaN.
Проверкой диапазона может и получится спастись, а может и нет - результат сравнения NaN с другими числами непредсказуем. Можно попробовать посмотреть, как ведёт себя панель при сравнении с заданными минимум/максимумом.

Лично я бы посмотрел на значение в хексе, подозреваю, там просто 0xFFFFFFFF, в этом случае проверка делается ОЧЕНЬ легко.
Аватара пользователя

Автор темы
Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Что такое "nan" и как его распознать

Сообщение Никита »

с проверки диапазона и начали. Не спасло. Еще нюанс - модули ввода имеют внутренний пересчет и в панель приходит уже отмасштабированное float. Запросом 3xDouble. Как его посмотреть в hex?
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

skr
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 208
Зарегистрирован: 22 мар 2013, 11:52
Имя: Денис Порфирьев
город/регион: Санкт-Петербург
Поблагодарили: 6 раз

Что такое "nan" и как его распознать

Сообщение skr »

Сохранить считанное значение с помощью SetData в LW и посмотреть объектом "числа" с форматом 32bit hex. Границы надо не забыть поставить от 0 до 4294967295 (ffffffff).
Аватара пользователя

Автор темы
Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Что такое "nan" и как его распознать

Сообщение Никита »

Все таки помогло простое сравнение со шкалой. Исследовать шестнадцатиричные буду когда времени побольше станет
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

Marrenoloth
завсегдатай
завсегдатай
Сообщения: 524
Зарегистрирован: 05 окт 2009, 11:51
Имя: Тихомиров Дмитрий Викторович
Страна: Россия
город/регион: Москва
Благодарил (а): 16 раз
Поблагодарили: 18 раз

Что такое "nan" и как его распознать

Сообщение Marrenoloth »

А в языке скриптов нет, как в том же бейсике, функции типа isnan(), возвращающей true, когда всё плохо?
Аватара пользователя

den_vish
освоился
освоился
Сообщения: 233
Зарегистрирован: 11 апр 2013, 13:22
Имя: Вишневский Денис
Благодарил (а): 10 раз
Поблагодарили: 12 раз

Что такое "nan" и как его распознать

Сообщение den_vish »

на ноль делите походу, и походу модуль перед масштабированием не проверяет что у него приходит
up. а может попробовать нан с самим собой сравнить, а то вики говорит что сработать может, и если нан - то оно просто не сравнится,
и если оно не сравнится - то его обнулить в скрипте.
"- Знаешь, дружище, в чем истинный смысл второго закона термодинамики?
Как ни упирайся, а бардака все больше. И чем серьезнее ты упираешься, тем страшнее неразбериха."(с)
Аватара пользователя

Автор темы
Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Что такое "nan" и как его распознать

Сообщение Никита »

На ноль не делим. Просто модули Овена возвращают при обрыве датчика бешеные значения. Их можно отловить, взяв данные из соседнего регистра статуса, но с учетом того, что сигналов в системе сотни - морока та еще.

Кстати, а как получить nan не имея железа? Один вариант - поделить на ноль уже подсказали. Хотелось бы более вежливый.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

Marrenoloth
завсегдатай
завсегдатай
Сообщения: 524
Зарегистрирован: 05 окт 2009, 11:51
Имя: Тихомиров Дмитрий Викторович
Страна: Россия
город/регион: Москва
Благодарил (а): 16 раз
Поблагодарили: 18 раз

Что такое "nan" и как его распознать

Сообщение Marrenoloth »

Подозреваю, что объявление переменной без присвоения ей значения может дать похожий эффект...
Аватара пользователя

skr
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 208
Зарегистрирован: 22 мар 2013, 11:52
Имя: Денис Порфирьев
город/регион: Санкт-Петербург
Поблагодарили: 6 раз

Что такое "nan" и как его распознать

Сообщение skr »

Никита писал(а): Кстати, а как получить nan не имея железа? Один вариант - поделить на ноль уже подсказали. Хотелось бы более вежливый.
Поместить 32-битное целое в те же регистры, откуда читается 32-bit float.
0x7F800000 плюс бесконечность
0xFF800000 минус бесконечность
Если любые из младших битов в этих значениях установить, будет NaN (пример 0xFFFFFFFF).

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Что такое "nan" и как его распознать

Сообщение Василий Иванович »

Этих NaNов дофига в природе и любой производитель может изобрести свою битмаску. Важны единицы в показателе степени, вот их и нужно искать в битмаске.
В соответствии с IEEE 754, такое состояние задаётся через установку показателя степени в зарезервированное значение 11…11, а мантиссы — во что угодно, кроме 0 (зарезервированное значение для машинной бесконечности). Знак и мантисса могут нести какую-то дополнительную информацию: многие библиотеки «отрицательный» NaN выводят как -NaN.
https://ru.wikipedia.org/wiki/NaN
Аватара пользователя

vodav
освоился
освоился
Сообщения: 275
Зарегистрирован: 28 авг 2014, 09:30
Имя: Воднев Александр Васильевич
Страна: РФ
город/регион: Томск
Благодарил (а): 16 раз
Поблагодарили: 26 раз

Что такое "nan" и как его распознать

Сообщение vodav »

С подобной проблемой справился с путем включения по входу модуля фильтра типа "RC" с постоянной 5 сек.
Аватара пользователя

Marrenoloth
завсегдатай
завсегдатай
Сообщения: 524
Зарегистрирован: 05 окт 2009, 11:51
Имя: Тихомиров Дмитрий Викторович
Страна: Россия
город/регион: Москва
Благодарил (а): 16 раз
Поблагодарили: 18 раз

Что такое "nan" и как его распознать

Сообщение Marrenoloth »

Нет, меня прям тянет разобраться. В языке NAN есть, а средств его отловить нет? Давайте предметно: Что за железяка и какой язык скриптов?
Аватара пользователя

izhidkov
частый гость
частый гость
Сообщения: 404
Зарегистрирован: 25 фев 2016, 12:18
Имя: Жидков Игорь Алексеевич
Страна: РФ
город/регион: Королев/Фрязино
Благодарил (а): 4 раза
Поблагодарили: 12 раз

Что такое "nan" и как его распознать

Сообщение izhidkov »

float NaN: Старшие 9 бит: x11111111, в остальных 23-х хотя бы 1 бит не ноль.
Компилятор - лучший друг человека!
Ответить

Вернуться в «Операторские панели»