Запись значений 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);
}