From 35b5c02945eb782bd626352418bf1fbc1dc2382a Mon Sep 17 00:00:00 2001 From: smartwyy <645583145@qq.com> Date: Sun, 26 May 2024 17:06:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E8=A7=A3=E6=9E=90float?= =?UTF-8?q?=E5=92=8Cdouble=E6=94=AF=E6=8C=81=E6=9C=89=E7=AC=A6=E5=8F=B7?= =?UTF-8?q?=E5=92=8C=E6=97=A0=E7=AC=A6=E5=8F=B7=EF=BC=8C=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E6=97=A0=E7=AC=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HybirdFrameworkCore/Utils/BitUtls.cs | 17 +++++++++-------- .../ModbusTcpMaster/ModbusDecoder.cs | 6 +++--- 2 files changed, 12 insertions(+), 11 deletions(-) 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