Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Calimero for Java读取和写入KNX系统的有符号int值_Java_Knx - Fatal编程技术网

使用Calimero for Java读取和写入KNX系统的有符号int值

使用Calimero for Java读取和写入KNX系统的有符号int值,java,knx,Java,Knx,使用,我想在KNX系统中读取和写入有符号的int值 我使用ProcessCommunicationOrImpl的readUnsigned和write方法来读取未签名的整数,但没有读取和写入已签名整数的方法。 例如,这些类型我无法访问: 数据点6.x(8位2的补码) 数据点8.x(16位2的补码) 数据点13.x(32位2的补码) 唯一可用的方法是: 字符串读取(数据点) 字符串读取字符串(组地址) int readControl(组地址) 双读浮点(组地址,布尔值) int readUnsi

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

我使用ProcessCommunicationOrImpl的readUnsigned和write方法来读取未签名的整数,但没有读取和写入已签名整数的方法。

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

唯一可用的方法是:
字符串读取(数据点)
字符串读取字符串(组地址)
int readControl(组地址)
双读浮点(组地址,布尔值)
int readUnsigned(组地址,字符串)
bool readBool(组地址)

我只有一个组地址,没有数据点。


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


谢谢

以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,但我无法测试,因为我没有一个KNX设备可以向我发送签名int。

当我有机会测试一个时,我会确认或调整这个答案。

只是猜测,但可能是
双精度读取数值(…)
,因为双精度可以表示所有整数而不损失精度。我在我的问题中添加了可用的方法。我不知道在哪里可以找到readNumeric方法。啊,似乎是他们的github的最新添加,它还不在您的库版本中。浏览更多内容后,我认为您可以使用您的地址创建自己的StateDp(datapoint)实例,然后以字符串的形式读写,例如,有一个签名类型的DPTXlator谢谢您,多亏了您,我才解决了这个问题!