using HslCommunication.Core; using HslCommunication.Core.Device; using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; namespace Seyounth.Auto.Plc.Helper { public static class AnalysisHelper { #region 解析类型帮助类 /// /// 根据类型获取字节长度 /// /// /// public static ushort TructToByteCount(string structName) { switch (structName.ToUpper()) { case "SYSTEM.BOOL": case "SYSTEM.BOOLEAN": case "SYSTEM.BIT": return 1; case "SYSTEM.BYTE": return 1; case "SYSTEM.UINT16": case "SYSTEM.INT16": case "SYSTEM.SHORT": case "SYSTEM.USHORT": return 2; case "SYSTEM.UINT32": case "SYSTEM.INT": case "SYSTEM.INT32": case "SYSTEM.FLOAT": case "SYSTEM.SINGLE": return 4; case "SYSTEM.LONG": case "SYSTEM.DOUBLE": return 6; case "SYSTEM.STRING": return 20; default: break; } return 0; } /// /// 根据类型获取字节长度 /// /// /// public static ushort TructToRegCount(string structName) { switch (structName.ToUpper()) { case "SYSTEM.BOOL": case "SYSTEM.BOOLEAN": case "SYSTEM.BIT": return 1; case "SYSTEM.BYTE": return 1; case "SYSTEM.UINT16": case "SYSTEM.INT16": case "SYSTEM.SHORT": case "SYSTEM.USHORT": return 1; case "SYSTEM.UINT32": case "SYSTEM.INT": case "SYSTEM.INT32": case "SYSTEM.FLOAT": case "SYSTEM.SINGLE": return 2; case "SYSTEM.LONG": case "SYSTEM.DOUBLE": return 3; case "SYSTEM.STRING": return 10; default: break; } return 0; } public static T ConvertBytes(byte[] bytes, DeviceCommunication device, int startIndex) { if (bytes == null) throw new ArgumentNullException(); return Type.GetTypeCode(typeof(T)) switch { TypeCode.Boolean => (T)(object)device.ByteTransform.TransBool(bytes, startIndex), TypeCode.Byte => (T)(object)device.ByteTransform.TransByte(bytes, startIndex), TypeCode.Int16 => (T)(object)device.ByteTransform.TransInt16(bytes, startIndex), TypeCode.UInt16 => (T)(object)device.ByteTransform.TransUInt16(bytes, startIndex), TypeCode.Int32 => (T)(object)device.ByteTransform.TransInt32(bytes, startIndex), TypeCode.UInt32 => (T)(object)device.ByteTransform.TransUInt32(bytes, startIndex), TypeCode.Int64 => (T)(object)device.ByteTransform.TransUInt64(bytes, startIndex), TypeCode.UInt64 => (T)(object)device.ByteTransform.TransUInt64(bytes, startIndex), TypeCode.Single => (T)(object)device.ByteTransform.TransSingle(bytes, startIndex), TypeCode.Double => (T)(object)device.ByteTransform.TransDouble(bytes, startIndex), // 添加其他需要的类型... _ => throw new NotSupportedException($"Type {typeof(T)} is not supported") }; } #endregion 解析类型帮助类 } }