Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: МВ210-101 не соответствие float и целочисленных значений

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию МВ210-101 не соответствие float и целочисленных значений

    Всех приветствую.

    Возникла проблема с датчиками Pt100. Подключены 3 шт. к первым 3-м каналам. Я считываю целочисленные данные своей программой по протоколу SNMP. В какой-то момент вместо нормальных температур 20-60°С значения становятся отрицательными. Какие-то каналы могут выдавать реальные показания, другие - отрицательные. Иногда отрицательные становятся реальными. Могут все 3 канала давать сбой. При этом через конфигуратор с удивлением обнаружил, что значения float показывают реальные температуры. Я думал, что целочисленные значения - это округленное до целого значение float * 10^(точек после запятой).

    01_s.jpg

    Это глюк модуля? Может прошивка старая и в новой всё исправлено?

    02_s.jpg

    При считывании значений float не могу расшифровать данные. Может у кого-нибудь есть пример в Delphi преобразования/извлечения данных? Был бы благодарен за урок.

    С уважением, Антон.

  2. #2
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,982

    По умолчанию

    а вы значения с отрицательно на биты раскидывали? нет там случайно по документации передачи ошибок старшими битами?

  3. #3

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    а вы значения с отрицательно на биты раскидывали? нет там случайно по документации передачи ошибок старшими битами?
    Нет. В обычном рабочем состоянии читаю целочисленные значения, делю их на заданное число разрядов после запятой и получаю точное реальное значение температуры.

  4. #4

    По умолчанию

    Так а какое значение у параметра "точек после запятой". Судя по всему 3, тогда значения INT выходят за диапазон

  5. #5
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,105

    По умолчанию

    Цитата Сообщение от Sergey361 Посмотреть сообщение
    Так а какое значение у параметра "точек после запятой". Судя по всему 3, тогда значения INT выходят за диапазон
    +100500 !!!
    максимальное значение 32,767, выше будет показывать как сейчас
    Последний раз редактировалось petera; 18.09.2025 в 13:03.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #6

    По умолчанию

    Цитата Сообщение от Sergey361 Посмотреть сообщение
    Так а какое значение у параметра "точек после запятой". Судя по всему 3, тогда значения INT выходят за диапазон
    Т.е. мне достаточно снизить точность, убавив количество разрядов после запятой с 3 на 2 и всё заработает?

  7. #7

    По умолчанию

    Цитата Сообщение от Anton_V_A Посмотреть сообщение
    Т.е. мне достаточно снизить точность, убавив количество разрядов после запятой с 3 на 2 и всё заработает?
    Да, даже 1 достаточно, так как вторая и третья после запятой, обычно прыгают.

  8. #8

    По умолчанию

    Цитата Сообщение от Anton_V_A Посмотреть сообщение
    Всех приветствую.

    Возникла проблема с датчиками Pt100. Подключены 3 шт. к первым 3-м каналам. Я считываю целочисленные данные своей программой по протоколу SNMP. В какой-то момент вместо нормальных температур 20-60°С значения становятся отрицательными. Какие-то каналы могут выдавать реальные показания, другие - отрицательные. Иногда отрицательные становятся реальными. Могут все 3 канала давать сбой. При этом через конфигуратор с удивлением обнаружил, что значения float показывают реальные температуры. Я думал, что целочисленные значения - это округленное до целого значение float * 10^(точек после запятой).

    01_s.jpg

    Это глюк модуля? Может прошивка старая и в новой всё исправлено?

    02_s.jpg

    При считывании значений float не могу расшифровать данные. Может у кого-нибудь есть пример в Delphi преобразования/извлечения данных? Был бы благодарен за урок.

    С уважением, Антон.


    Добрый день.

    Действительно, значение типа INT получается из значения типа FLOAT домножением на 10^(положение точки).
    Соответственно, если результат этой операции выходит за диапазон INT (-32768..+32767), произойдёт переполнение. Поэтому Вы наблюдаете отрицательные значения.

    В этом случае 2 варианта:
    1. Использовать в своём коде только FLOAT;
    2. Уменьшить значение параметра Положение точки для соответствующего канала;


    Для Delphi примера кода нет. Возможно, Вам пригодится конвертер: https://www.h-schmidt.net/FloatConverter/IEEE754.html
    Инженер по продукту ПЛК

    e-mail: a.pineko-skvortsov@owen.ru

  9. #9
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,982

    По умолчанию

    ну у Дельфи наверняка как у других float идет от младшего байта к старшему вероятно. И если надо переставить байты, регистры местами то что-то вроде Array.Copy или может просто реверс и уже потом подсовывать.

  10. #10
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,046

    По умолчанию

    Цитата Сообщение от Anton_V_A Посмотреть сообщение
    Т.е. мне достаточно снизить точность, убавив количество разрядов после запятой с 3 на 2 и всё заработает?
    Накой? Читайте float в single и всё будет норм. Слова переставить см. ниже
    А для отображалок есть format('%0.2f',[..])

    Цитата Сообщение от Anton_V_A Посмотреть сообщение
    ..При считывании значений float не могу расшифровать данные. Может у кого-нибудь есть пример в Delphi преобразования/извлечения данных?
    Код:
    function Swap(x: Single): Single;
    asm
      mov eax,x
      rol eax,16
      mov Result,eax
    end;

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Как обойти ограничение ПР200 в 63 целочисленных регистра SLAVE?
    от arty в разделе Среда программирования OWEN Logic
    Ответов: 10
    Последнее сообщение: 29.10.2020, 10:46
  2. МВ210-101 Значение float
    от DKE в разделе Мх210
    Ответов: 1
    Последнее сообщение: 20.08.2020, 07:47
  3. Ошибка считывания значений модуля МВ210-204
    от ДмитрийИ в разделе Мх210
    Ответов: 0
    Последнее сообщение: 19.07.2019, 16:41
  4. Можно настроить формат представления float значений?
    от Владимир Ситников в разделе Среда программирования OWEN Logic
    Ответов: 17
    Последнее сообщение: 21.03.2016, 01:51
  5. Переход от float (Nullable) к просто float
    от ASo в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 12.11.2014, 14:21

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •