将ASCII值写入串行通讯设备(如RS485)的寄存器中

2019年12月6日 10点热度 0条评论

我正在创建一个Java桌面应用程序。我想将数据写入设备的寄存器。根据我的项目文档,寄存器的大小为16位长。我正在使用EasyModbusJava jar将数据写入寄存器。到目前为止,我已经在设备的寄存器中写入了一些整数数据。现在,我想在16个连续寄存器(每个寄存器2个字符)中写入32个字符的ascii。但是问题在于,在寄存器上进行写入的可用方法将int作为参数。如果要传递ascii值的short(int)数组,则需要进行类型转换,这意味着它将不再获取short数据类型的大小。

有两种方法可以写入寄存器地址。

单寄存器写入

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

用于多寄存器写入

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

提出一些解决我的问题的方法。

以下是我在项目中使用的jar文件文档的链接。


Docs of Jar File.

解决方案如下:

我认为最简单的方法是使用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);
}