На форуме обязательно:
  1. Заполнить свой профиль на Русском языке. См. Правила, п.2.d.
  2. Не писать свой вопрос в первую попавшуюся тему, а вместо этого создать свою. См. Правила, п.3.a.

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

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

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

Автор темы
Никита
почётный участник форума
почётный участник форума
Сообщения: 2662
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Откуда: Мурманск
Благодарил (а): 10 раз
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Никита » 07 сен 2016, 18:34

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

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

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

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

Сообщение skr » 07 сен 2016, 19:38

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

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

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

Автор темы
Никита
почётный участник форума
почётный участник форума
Сообщения: 2662
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Откуда: Мурманск
Благодарил (а): 10 раз
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Никита » 07 сен 2016, 20:48

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

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

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

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

Сообщение skr » 07 сен 2016, 22:24

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

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

Автор темы
Никита
почётный участник форума
почётный участник форума
Сообщения: 2662
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Откуда: Мурманск
Благодарил (а): 10 раз
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Никита » 08 сен 2016, 19:25

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

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

Marrenoloth
завсегдатай
завсегдатай
Сообщения: 521
Зарегистрирован: 05 окт 2009, 10:51
Имя: Тихомиров Дмитрий Викторович
Откуда: Москва
Благодарил (а): 17 раз
Поблагодарили: 20 раз
Контактная информация:

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

Сообщение Marrenoloth » 08 сен 2016, 22:06

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

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

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

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

Сообщение den_vish » 09 сен 2016, 04:27

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

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

Автор темы
Никита
почётный участник форума
почётный участник форума
Сообщения: 2662
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Откуда: Мурманск
Благодарил (а): 10 раз
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Никита » 10 сен 2016, 18:11

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

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

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

Marrenoloth
завсегдатай
завсегдатай
Сообщения: 521
Зарегистрирован: 05 окт 2009, 10:51
Имя: Тихомиров Дмитрий Викторович
Откуда: Москва
Благодарил (а): 17 раз
Поблагодарили: 20 раз
Контактная информация:

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

Сообщение Marrenoloth » 10 сен 2016, 18:38

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

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

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

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

Сообщение skr » 10 сен 2016, 19:58

Никита писал(а):Источник цитаты Кстати, а как получить nan не имея железа? Один вариант - поделить на ноль уже подсказали. Хотелось бы более вежливый.

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


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

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

Сообщение Василий Иванович » 10 сен 2016, 21:39

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


https://ru.wikipedia.org/wiki/NaN

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

vodav
осмотрелся
осмотрелся
Сообщения: 147
Зарегистрирован: 28 авг 2014, 08:30
Имя: Воднев Александр Васильевич
Благодарил (а): 7 раз
Поблагодарили: 6 раз

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

Сообщение vodav » 11 сен 2016, 03:09

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

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

Marrenoloth
завсегдатай
завсегдатай
Сообщения: 521
Зарегистрирован: 05 окт 2009, 10:51
Имя: Тихомиров Дмитрий Викторович
Откуда: Москва
Благодарил (а): 17 раз
Поблагодарили: 20 раз
Контактная информация:

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

Сообщение Marrenoloth » 11 сен 2016, 09:32

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

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

izhidkov
освоился
освоился
Сообщения: 249
Зарегистрирован: 25 фев 2016, 12:18
Имя: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 6 раз
Контактная информация:

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

Сообщение izhidkov » 15 сен 2016, 17:32

float NaN: Старшие 9 бит: x11111111, в остальных 23-х хотя бы 1 бит не ноль.
want to have ultimate control, and the sky is the limit!


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



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость