0

使用Calimero,我想在 KNX 系统中读取和写入带符号的 int 值。

我对无符号整数使用了 ProcessCommunicatorImpl 的 readUnsigned 和 write 方法,但没有读取和写入有符号整数的方法。

例如我无法访问的这些类型:
DataPoint 6.x(8 位 2 的补码)
DataPoint 8.x(16 位 2 的补码)
DataPoint 13.x(32 位 2 的补码)

唯一可用的方法是:
String read(Datapoint)
String readString(GroupAddress)
int readControl(GroupAddress)
double readFloat(GroupAddress, boolean)
int readUnsigned(GroupAddress, String)
bool readBool(GroupAddress)

而我只有一个GroupAddress,没有Datapoint。


有谁知道我如何读写这些类型的数据点?

谢谢!

4

1 回答 1

0

以 zapl 的评论为灵感,我想出了以下代码:

int getIntFrom8Bit2Complement(GroupAddress groupAddress) throws KNXException, InterruptedException {

    final Datapoint dp = new StateDP(groupAddress, "my datapoint "+groupAddress.toString());
    dp.setDPT(0, DPTXlator8BitSigned.DPT_VALUE_1_UCOUNT.getID());
    String result = processCommunicator.read(dp);
    try {
        return Integer.parseInt(result);
    } catch (NumberFormatException e) {
        throw new KNXException("Error Parsing 8 bit 2 complement result as int -- result = "+result);
    }
}

我不能 100% 确定将结果解析为 int,但我无法测试,因为我没有可以向我发送签名 int 的 KNX 设备。
当我有机会测试一个时,我会确认或调整这个答案。

于 2018-06-02T12:07:58.203 回答