public static int GetTagOffset(string tagName, int baseNum) { if (string.IsNullOrEmpty(tagName)) { return(0); } int off = 0; switch (tagName[0]) { case 'X': case 'x': case 'Y': case 'y': if (baseNum == 8) { off = (int)FxConvert.OctToValue(tagName.Substring(1)); // 8进制 } else { off = (int)FxConvert.HexToDec(tagName.Substring(1)); // 16进制 } break; default: off = (int)FxConvert.DecToValue(tagName.Substring(1)); // 十进制 break; } return(off); }
/// <summary> /// 解析PLC响应数据(到集合中) /// </summary> /// <typeparam name="T">支持数据类型 UInt16DataType,UInt32DataType</typeparam> /// <param name="pureData"></param> /// <param name="startIndex"></param> /// <param name="value">解析后的返回值</param> public static void ParseSmart <T>(byte[] data, int startIndex, out List <int> value) where T : ICellDataType, new() { T t = new T(); value = new List <int>(); if (data.Length < 7) { return; // 长度至少大于7 } if (data[startIndex] != FxControlCode._STX) { return; } // 每次处理一个 4B 或 8B,对应着 ushort,uint if (t.DataItemSize == 1) { for (int i = startIndex + 1; i < (data.Length - startIndex - t.DataItemHexStringSize); i += t.DataItemHexStringSize) { int v = FxConvert.HexToDec(data, i, t.DataItemHexStringSize); value.Add(v); } } else { for (int i = startIndex + 1; i < (data.Length - startIndex - t.DataItemHexStringSize); i += t.DataItemHexStringSize) { int v = FxConvert.HexToDecBig(data, i, t.DataItemHexStringSize); value.Add(v); } } }