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

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

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

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

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

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

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

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

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


person Ketan Sachan    schedule 25.04.2020    source источник
comment
Я не понял.   -  person Ketan Sachan    schedule 25.04.2020
comment
Вероятно, используются только младшие 16 бит каждого int.   -  person Lluis Felisart    schedule 27.04.2020


Ответы (1)


Я думаю, что проще всего использовать 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);
}
person Elliott Frisch    schedule 25.04.2020
comment
Первый метод не принимает массив целых чисел. Это была моя ошибка. public void WriteMultipleRegisters(int startAddress, int values){...} - person Ketan Sachan; 26.04.2020
comment
Являются ли значения, возвращаемые bb.getshort(), ASCII? - person Ketan Sachan; 27.04.2020
comment
@KetanSachan Нет. Потому что это 2 8-битных символа ascii как 1 16-битное короткое целое число. Именно так, как вы просили. - person Elliott Frisch; 27.04.2020