Хобрук: Ваш путь к мастерству в программировании

Преобразование массива байтов в двойное при получении целочисленных значений от симулятора Modbus?

Кто-нибудь знает о симуляторе Modbus, я застрял в преобразовании значений. Я использую wimpi modbus api для подключения к устройству и чтения и записи значений регистров. Итак, у меня есть симулятор Modbus, в котором я получил некоторые значения в каждом регистре на основе того, что один регистр имеет 2 байта. поэтому у меня есть 4 значения регистра, которые вместе дают мне одно значение измерения. Итак, используя wimpi readregister, я получаю целочисленные значения для определенного регистра. У меня есть измерение напряжения как (16492 35578 10726 22350). Эти 4 значения регистра составляют одно двойное значение. Итак, мне нужно преобразовать эти 4 целочисленных значения в одно двойное значение, для которого доступен метод modbusutil.registersToDouble(), который принимает значения массива байтов.

Если кто-нибудь поможет мне для преобразования будет заметным.

Прямо сейчас я пытаюсь так:

byte[] bytes = {(byte) 16492,(byte) 35578,(byte) 10726,(byte) 22350};
        Double d = ModbusUtil.registersToDouble(bytes);
System.out.println(d);

это исключение

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at net.wimpi.modbus.util.ModbusUtil.registersToDouble(ModbusUtil.java:343)

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

Я получаю значения ответа, используя:

ReadInputRegistersResponse registersResponse = (ReadInputRegistersResponse) this.modbusTCPTransaction.getResponse();

registersResponse.getRegister(1).getValue();
registersResponse.getRegister(2).getValue();
registersResponse.getRegister(3).getValue();
registersResponse.getRegister(4).getValue();
01.08.2015

Ответы:


1

Из документов:

registersToDouble

общедоступные статические окончательные двойные регистрыToDouble (байты [] байты)

Преобразует двоичное двойное значение byte[8] в двойной примитив.

Параметры:

bytes - байт[8] для преобразования.

Возвращает:

двойное значение.

Итак, я думаю, вам нужно иметь массив из 8 элементов.

Кроме того, из Документов Oracle по Java:

byte: тип данных byte представляет собой 8-битное целое число в дополнении до двух со знаком. Он имеет минимальное значение -128 и максимальное значение 127 (включительно).

Поэтому я думаю, что вы потеряете информацию о преобразовании ваших измерений 35578 в byte. Это дает: -6 и это не то, что вам, вероятно, нужно.

01.08.2015
  • Можете ли вы мне помочь, Xeon, потому что наше устройство настроено на отправку 4 значений регистра только для одного измерения, и в устройстве оно находится в шестнадцатеричной форме. Как сделать это преобразование успешным без потери данных... любая ссылка 01.08.2015
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...