Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 39

Тема: Целочисленные в формате u32 и u64

  1. #11

    По умолчанию

    Цитата Сообщение от Dimaes Посмотреть сообщение
    Да, Измеритель параметров электрической сети WB-MAP3E.
    Но там конечно можно использовать только регистры u32. Еще есть регистры s32 (у которых есть знак). С ними как быть?
    Есть раздел алгоритмов - длинная арифметика. Сложение/вычитание просто поразрядно, умножение можно тоже поразрядно (как умножение на бумаге в столбик), а есть умножение Карацубы - сверхбыстрое, но при реализации потребуется рекурсия, деление - вот это совсем сложный вариант.

    В данном случае арифметика будет хоть и "длинной" но весьма ограниченной 64 разрядами.

    Эта длинная тирада к тому, что если эти данные нужно просто отображать, то можно использовать самостоятельно реализованные или взятые с форума алгоритмы.
    несмотря на то, что в документации по Modbus регистрам может быть указан множитель (к примеру, 1e-5) это означает всего лишь, что нужно при выводе целого числа отделить последние 5 символов (цифр) символом точка, т.е. реального деления не будет - такой формат чисел называется десятичные дроби с фиксированной точкой.
    Чуть выше приведённой ранее ссылки с делением есть вывод принятого 64 разрядного числа с множителем 1e-5.
    https://owen.ru/forum/showthread.php...l=1#post431901


    Собственно, скажите, что предполагает заказчик и алгоритм от этих чисел?

  2. #12

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Я, наверное, опять не так понял?!
    Взял максимальный u32 и преобразовал его во float и обратно - вроде все биты на месте?!
    Вложение 79464
    float только 5-6 знаков поддерживает, остальное откидывает, при чём не только после запятой, но и перед, если знаков больше 5,
    а 32 битное целочисленное считает все 10 знаков.

    FPavel, вроде уже решили, что на ПР это не сделать, вы опять за своё)) Он тупо 4 регистра разом прочитать не может, не говоря про расчёты.
    Последний раз редактировалось kondor3000; 16.10.2024 в 15:38.

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

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Я, наверное, опять не так понял?!
    Взял максимальный u32 и преобразовал его во float и обратно - вроде все биты на месте?!
    Вложение 79464
    Случайность. На конце входного поставьте 0 заместо 5

    Точнее - особенность чисто ОЛ-преобразования reaL_to_dword. Все что больше FFFF_FFFF - приводит к FFFF_FFFF
    Последний раз редактировалось Валенок; 16.10.2024 в 15:40.

  4. #14

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    float только 5-6 знаков поддерживает, остальное откидывает, при чём не только после запятой, но и перед, если знаков больше 5,
    а 32 битное целочисленное считает все 10 знаков.

    FPavel, вроде уже решили, что на ПР это не сделать, вы опять за своё)) Он тупо 4 регистра разом прочитать не может, не говоря про расчёты.
    Понятно, что в мантиссу float 23 бита не впихнуть 32 бита. Однако костыли есть и для 64 бита - это 2 по 32. Работает же?!
    Если очень захотеть можно приделать костыли для работы с double float.
    Последний раз редактировалось EFrol; 16.10.2024 в 15:49.

  5. #15

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    FPavel, вроде уже решили, что на ПР это не сделать, вы опять за своё)) Он тупо 4 регистра разом прочитать не может, не говоря про расчёты.
    Изрядно забыл, чем тогда дело закончилось... А у самого не на чем проверить...
    Если прибор не отдаёт 4 регистра по-отдельности, а требует чтения в один запрос, то тогда ничего не поделать.

    Но если
    - регистры можно прочитать,
    - значение в этом 64 разрядном регистре меняется медленнее, чем несколько запросов,
    - от этих данных требуется просто вывод на экран
    То можно же прочитать и вывести. Для достоверности можно отбрасывать те результаты, которые отличаются более, чем на некоторое значение (возникшее при переполнении младшего регистра без своевременного прочтения старшего).

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

    По умолчанию

    Цитата Сообщение от Dimaes Посмотреть сообщение
    Да, Измеритель параметров электрической сети WB-MAP3E.
    Но там конечно можно использовать только регистры u32. Еще есть регистры s32 (у которых есть знак). С ними как быть?
    Про 64 на ПР проще забыть. Или купить ошейник и плетку - тот же эффект, но быстрее
    А со 32 signed - а ПР позволяет 2 регистра сразу прочитать? А по частям - слепить их именно как udint, посмотреть на признак знака и с учетом этого преобразовать в real. Всё просто.

    Фигня может быть из-за не одномоментности считывания 2 регистров.
    от этих данных требуется просто вывод на экран
    тогда не страшно. А что выводить-то надо?

    Или купите ПЛК. ПР - не для такого
    Последний раз редактировалось Валенок; 16.10.2024 в 16:03.

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

    По умолчанию

    - от этих данных требуется просто вывод на экран
    Вот это тут основное. И стоит ли оно затрат ПР для вывода.

    Кстати на анализаторах сети часто есть double по Modbus. Учитывая, что это просто набор регистров хранения, а что туда запихнули не важно. Важно позволяет ли конечное устройство не только отображение, но еще и обработку.
    А никто ведь не мешает прочитать как float два соседних регистра. У ПР то это один запрос будет. Дальше на биты и в число. Или там что-то может потеряться? как-то за ненадобностью таким не баловался.
    На ПК это легко все делает, а вот на ПР?

  8. #18

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Про 64 на ПР проще забыть.
    Фигня может быть из-за не одномоментности считывания 2 регистров.


    Купите ПЛК. ПР - не для такого
    2 регистра читать можно и как 32 битное знаковое целочисленное пересчитать во Foat тут выложено
    Функции FLOAT_TO_DINT и DINT_TO_FLOAT на ST____ https://owen.ru/forum/showthread.php...821#post429821

    А вот можно ли прочитать 4 регистра, по 2 шт. за 2 раза, никто так и не написал, потому что в РЭ написано читать 4 регистра разом.
    Последний раз редактировалось kondor3000; 16.10.2024 в 16:12.

  9. #19

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Изрядно забыл, чем тогда дело закончилось... А у самого не на чем проверить...
    Если прибор не отдаёт 4 регистра по-отдельности, а требует чтения в один запрос, то тогда ничего не поделать.

    Но если
    - регистры можно прочитать,
    - значение в этом 64 разрядном регистре меняется медленнее, чем несколько запросов,
    - от этих данных требуется просто вывод на экран
    То можно же прочитать и вывести. Для достоверности можно отбрасывать те результаты, которые отличаются более, чем на некоторое значение (возникшее при переполнении младшего регистра без своевременного прочтения старшего).
    Я согласен с Вами! Накопительный счетчик сохраняю в 2-х u32 и сравниваю со следующими. Если младшие u32 изменились, а старшие u32 - нет, то значению можно верить.

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

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    2 регистра читать можно и как 32 битное знаковое целочисленное пересчитать во Foat тут выложено.
    Нет никаких проблем пересчитать 2 регистра (из внешнего dint) в real. А они одновременно пришли?

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Как присвоить различные целочисленные значения для одной переменной?
    от Пётр Поросёнков в разделе Среда программирования OWEN Logic
    Ответов: 8
    Последнее сообщение: 24.02.2024, 18:58
  2. ПМ 01 не отправлет смс в формате PDU
    от djmadmax в разделе Эксплуатация
    Ответов: 18
    Последнее сообщение: 01.12.2016, 11:34
  3. Системное время в формате DATE
    от Columbariy в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 10.10.2014, 23:54
  4. Ответов: 10
    Последнее сообщение: 01.10.2014, 15:47
  5. Передавать архивы файлов в формате csv
    от IDN в разделе ПЛК3xx (архив)
    Ответов: 5
    Последнее сообщение: 16.05.2014, 10:33

Ваши права

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