Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

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

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

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

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

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

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

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

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

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

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

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

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

Лично я бы посмотрел на значение в хексе, подозреваю, там просто 0xFFFFFFFF, в этом случае проверка делается ОЧЕНЬ легко.
"ФАМ-Электрик" - официальный дистрибьютор Weintek в России http://www.rusavtomatika.com

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

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

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

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

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

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

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

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

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

Сохранить считанное значение с помощью SetData в LW и посмотреть объектом "числа" с форматом 32bit hex. Границы надо не забыть поставить от 0 до 4294967295 (ffffffff).
"ФАМ-Электрик" - официальный дистрибьютор Weintek в России http://www.rusavtomatika.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поместить 32-битное целое в те же регистры, откуда читается 32-bit float.
0x7F800000 плюс бесконечность
0xFF800000 минус бесконечность
Если любые из младших битов в этих значениях установить, будет NaN (пример 0xFFFFFFFF).
"ФАМ-Электрик" - официальный дистрибьютор Weintek в России http://www.rusavtomatika.com


Василий Иванович
авторитет
авторитет
Сообщения: 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
осмотрелся
осмотрелся
Сообщения: 132
Зарегистрирован: 28 авг 2014, 08:30
Ф.И.О.: Воднев Александр Васильевич
Благодарил (а): 5 раз
Поблагодарили: 5 раз

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

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

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

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

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

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

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

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

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

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

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

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

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


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



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

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