diff --git a/HybirdFrameworkCore/Utils/BitUtls.cs b/HybirdFrameworkCore/Utils/BitUtls.cs
index 3207533..075bb4c 100644
--- a/HybirdFrameworkCore/Utils/BitUtls.cs
+++ b/HybirdFrameworkCore/Utils/BitUtls.cs
@@ -15,10 +15,11 @@ public static class BitUtls
/// 精度
/// 保留几位小数
/// 位偏移
+ /// 对float和double 默认无符号
///
///
public static object Bytes2Value(byte[] bytes, Type propertyType, int start, int length,
- double scale, int round, double offset)
+ double scale, int round, double offset, bool unSign = true)
{
if (propertyType == BOOLEAN) return Convert.ChangeType(Byte2Bit(bytes, start, length) == 1, propertyType);
@@ -44,11 +45,11 @@ public static class BitUtls
if (propertyType == FLOAT)
return
- Convert.ChangeType(Math.Round(Byte2Float(bytes, start, length, scale) - offset, round), propertyType);
+ Convert.ChangeType(Math.Round(Byte2Float(bytes, start, length, scale, unSign) - offset, round), propertyType);
if (propertyType == DOUBLE)
return
- Convert.ChangeType(Math.Round(Byte2Double(bytes, start, length, scale) - offset, round),
+ Convert.ChangeType(Math.Round(Byte2Double(bytes, start, length, scale, unSign) - offset, round),
propertyType);
if (propertyType == STRING)
@@ -220,23 +221,23 @@ public static class BitUtls
return list.ToArray();
}
- public static float Byte2Float(byte[] bytes, int startBit, int length, double factor)
+ public static float Byte2Float(byte[] bytes, int startBit, int length, double factor, bool unSign)
{
if (length < 17)
{
- int d = Byte2Int16(bytes, startBit, length);
+ int d =unSign ? Byte2UInt16(bytes, startBit, length) : Byte2Int16(bytes, startBit, length);
return (float)(d * factor);
}
else
{
- var d = Byte2Int32(bytes, startBit, length);
+ Int64 d = unSign ? Byte2UInt32(bytes, startBit, length) : Byte2Int32(bytes, startBit, length) ;
return (float)(d * factor);
}
}
- public static double Byte2Double(byte[] bytes, int startBit, int length, double factor)
+ public static double Byte2Double(byte[] bytes, int startBit, int length, double factor, bool unSign)
{
- var d = Byte2UInt32(bytes, startBit, length);
+ Int64 d = unSign ? Byte2UInt32(bytes, startBit, length) : Byte2Int32(bytes, startBit, length);
return (float)(d * factor);
}
diff --git a/HybirdFrameworkDriver/ModbusTcpMaster/ModbusDecoder.cs b/HybirdFrameworkDriver/ModbusTcpMaster/ModbusDecoder.cs
index fee6009..08521d0 100644
--- a/HybirdFrameworkDriver/ModbusTcpMaster/ModbusDecoder.cs
+++ b/HybirdFrameworkDriver/ModbusTcpMaster/ModbusDecoder.cs
@@ -91,7 +91,7 @@ public static class ModbusDecoder
}
case ModbusProperty floatProperty:
{
- SetPropertyValue(startRegisterNo, floatProperty, decodeUseBytes);
+ SetPropertyValue(startRegisterNo, floatProperty, decodeUseBytes, true);
// SetPropertyValue(floatProperty.RegisterNo, floatProperty, decodeUseBytes);
break;
}
@@ -112,7 +112,7 @@ public static class ModbusDecoder
return t;
}
- private static void SetPropertyValue(int startRegisterNo, ModbusProperty field, byte[] bytes)
+ private static void SetPropertyValue(int startRegisterNo, ModbusProperty field, byte[] bytes, bool unSign = true)
{
var registerNo = field.RegisterNo;
var start = field.Start;
@@ -134,7 +134,7 @@ public static class ModbusDecoder
_ => length
};
- var value = BitUtls.Bytes2Value(bytes, valueType, start, length, scale, round, offset);
+ var value = BitUtls.Bytes2Value(bytes, valueType, start, length, scale, round, offset, unSign);
field.Value = (T)value;
}
}
\ No newline at end of file