Запись значений ASCII в реестр устройств последовательной связи, таких как RS485 - PullRequest
0 голосов
/ 25 апреля 2020

Я создаю java Настольное приложение. Я хочу записать данные в реестр устройства. Согласно документу моего проекта, размер регистра составляет 16 бит. Я использую EasyModbus Java jar для записи данных в реестр. До сих пор я записал некоторые целочисленные данные в регистр устройства. Теперь я хочу написать ascii из 32 символов в 16 последовательных регистрах (2 символа в регистре). Но проблема в том, что доступные методы для записи в регистры принимают int в качестве аргумента. Если я передаю короткий (int) массив значений ascii, то он должен быть typecast, что означает, что он больше не будет получать размер короткого типа данных.

Существует для записи в адрес регистров доступны два метода.

Для записи в единый регистр

public void WriteMultipleRegisters(int startingAddress, int[] values){...}

Для записи в нескольких регистрах

public void WriteMultipleRegisters(int startingAddress, int[] values){...}

Предложить какой-либо способ решения моей проблемы.

Ниже приведена ссылка на документацию файла jar, которую я использую в своей проект. Файл документов Jar.

1 Ответ

0 голосов
/ 25 апреля 2020

I думаю проще всего использовать ByteBuffer для управления этой манипуляцией байтами. Что-то вроде

char[] arr = "Hello, World".toCharArray();
ByteBuffer bb = ByteBuffer.allocate(arr.length);
for (char ch : arr) {
    bb.put((byte) ch);
}
bb.rewind();
// You may need a call to ByteBuffer.order(ByteOrder) here.
for (int i = 0; i < arr.length / 2; i++) {
    int v = bb.getShort(); // Reads two bytes and converts to 16-bit short integer
    System.out.println(v);
}
...