使用Calimero for Java读取和写入KNX系统的有符号int值
使用,我想在KNX系统中读取和写入有符号的int值 我使用ProcessCommunicationOrImpl的readUnsigned和write方法来读取未签名的整数,但没有读取和写入已签名整数的方法。使用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
例如,这些类型我无法访问:
数据点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谢谢您,多亏了您,我才解决了这个问题!