Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 39

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

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

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

    По умолчанию Целочисленные в формате u32 и u64

    Здравствуйте!
    Подключаю к ПР205 устройство по шине Modbus. Целочисленные переменные типа u16 передаются без проблем. А вот с некоторыми регистрами которые имеют формат u32 или u64 возникает проблема.
    Как можно считать данные регистры и потом математически их привести к нормальной форме. Есть ли у кого нибудь мысли. Мои знания в данной области, к сожалению ограничены.

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

    По умолчанию

    к u64 никак. ПР ограничен u32. Разделить на два регистра, потом собрать.

  3. #3

    По умолчанию

    Кажется я сам нашел ответ на свой вопрос. Может кому нибудь пригодится. Поправьте меня если я ошибаюсь.
    при считывании числа например U64 который занимает 4 регистра нужно считать их в отдельные переменные и потом:

    Чтобы получить итоговое число:
    читаем регистр 0x2200
    младшая часть — значение оставляем «как есть» : 0хb4dfhex = 46303dec
    далее регистр 0x2201
    значение умножаем на 2^16 : 0x0dffhex = 3583dec, 3583 * 65536 = 234815488
    затем регистр 0x2202
    значение умножаем на 2^32 : 0 * 4294967296 = 0
    и в конце 0x2203
    значение умножаем на 2^48 : 0 * 281474976710656 = 0

    Суммируем результаты : 46303 + 234815488 + 0 + 0 = 234861791. Возможно потребуется преобразовать в число с плавающей точкой.
    Может есть более изящное решение?

  4. #4

    По умолчанию

    Небось опять со счётчиком, где 64 битные регистры. Это только на СПК1хх и ПЛК 2хх можно сделать
    Это нормальное решение из РЭ, только это не для ПР, а для ПЛК
    и 0 там только в начале, потом дикие цифры пойдут.
    Последний раз редактировалось kondor3000; 16.10.2024 в 13:03.

  5. #5

    По умолчанию

    Два 16-битных в одни 32-битный еще можно собрать.
    А дальше?! 64-бита придется хранить в 2-х разных переменных.
    Потом придется делить на 10 несколько раз, чтобы отделить по цифре и вывести.
    Я делаю с помощью макроса rDIV https://owen.ru/forum/showthread.php...l=1#post431974
    Отделяю каждую цифру https://owen.ru/forum/showthread.php...l=1#post432009

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

    По умолчанию

    float не переварит преобразование из u64, он и u32 не переварит в принципе. Там где u32 продолжит считать с 1,2 знаками после запятой, float уже загнется.
    А толку от ухищрений с u64? только показать, математика будет недоступна с этим числом.

  7. #7

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    float не переварит преобразование из u64, он и u32 не переварит в принципе. Там где u32 продолжит считать с 1,2 знаками после запятой, float уже загнется.
    А толку от ухищрений с u64? только показать, математика будет недоступна с этим числом.
    Я, наверное, опять не так понял?!
    Взял максимальный u32 и преобразовал его во float и обратно - вроде все биты на месте?!
    Owen.jpg

  8. #8

    По умолчанию

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

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

  9. #9

    По умолчанию

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

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

  10. #10

    По умолчанию

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

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

Страница 1 из 4 123 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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