我使用SDM 220米来计算使用MODBUS RS485协议的电力系统的能量。但是当我读取寄存器值时,它以十六进制格式编号(IEEE 32位标准格式)给出。那么如何正确转换寄存器值;
注册值:17261 实际值:237.9 Votls 如何转换寄存器值以获得实际值?
fatal: The current branch 293-error-pages has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin 293-error-pages
答案 0 :(得分:0)
As(jlibModbus java lib我用作协议)它通过使用16位2寄存器使用32位,我有两个寄存器值。
int[] registerValues = master.readInputRegisters(1,330,14);
int unitsReg1=registerValues[12];
int unitsReg2=registerValues[13];
float units=getRealRegisterValue(unitsReg1,unitsReg2);
然后我写了这个方法
private float getRealRegisterValue(int register1, int register2) {
//Get binary string of register values
String s1 = Integer.toBinaryString(register1);
String s2 = Integer.toBinaryString(register2);
//Append them respectively
String b=s1+"s2";
//get integer values
int intBits = Integer.parseInt(b, 2);
System.out.println(intBits);
//get float real value from IEEE 754 format
float realValue = Float.intBitsToFloat(intBits);
return realValue;
}
我认为这对某人有帮助,我必须花很多时间在这上面。