Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 12 из 12

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

  1. #11

    По умолчанию

    У Delphi, как и у TurboPascal и, наверное, у Pascal из стандарта, есть тип данных - запись (record) с вариантами - который позволяет на одном участке памяти объявить несколько переменных.
    Т.е. можно объявить single и dword и два word и четыре byte на одном участке памяти. Записать в переменную single и переставить байты или слова.
    Код:
      TDWordConvert = packed record
        case word of
          0: (dw: dword);
          1: (w0, w1: word);
          2: (b0, b1, b2, b3: byte);
          3: (f32: single);
      end;
    Перестановка байт 1234 -> 4321 штатными средствами
    Код:
      t.dw := ModbusReadRegisters();
      t.dw := Swap(t.dw);
      t.w0 := Swap(t.w0);
      t.w1 := Swap(t.w1);
      write(t.f32);
    Или можно через промежуточную переменную.

    Сколько помню, для некоторых компиляторов режима x64 закрыли ассемблерные вставки. Поэтому удобно таким подходом воспользоваться.

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

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Перестановка байт 1234 -> 4321 штатными средствами
    1234 -> 3412 для Овена. Байты свапит модбас-клиент //если это модбас-клиент, а не не пойми что



    Цитата Сообщение от FPavel Посмотреть сообщение
    Сколько помню, для некоторых компиляторов режима x64 закрыли ассемблерные вставки..
    Да что же в этом мире происходит то?))


    .... есть тип данных - запись (record) с вариантами .....Или можно через промежуточную переменную.
    Без всего
    Код:
    function Swap(x: Single): Single;
    begin
      PDWord(@Result)^ := PDWord(@x)^ shr 16 + PDWord(@x)^ shl 16;
    end;
    Последний раз редактировалось Валенок; 18.09.2025 в 19:41.

Страница 2 из 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

Ваши права

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