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