Запись значений 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-файла.

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);
}
Другие вопросы по тегам