/// <summary> /// 封装LIST /// </summary> /// <param name="valuelist">读取的byte</param> /// <param name="dt">读取的table</param> /// <returns></returns> public List <TagValue> getValue(byte[] resultAry, DataTable dt) { List <TagValue> tagList = new List <TagValue>(); byte[] valuelist = new byte[132]; if (resultAry.Length != 137) { return(tagList); } Array.Copy(resultAry, 3, valuelist, 0, resultAry.Length - 5); Array.Reverse(valuelist); try { TagValue objValue; // int diviceId = BitConverter.ToInt32(valuelist, 0); int num0 = int.Parse(resultAry[0].ToString()); if (num0 < 100 || num0 > 200) { return(tagList); } DataRow[] rows = dt.Select("PLCAddress='" + num0 + "'"); Console.WriteLine("PLC" + num0 + "|" + resultAry.Length); if (rows.Length > 0) { DataRow resultRow = dt.Select("PLCAddress='" + num0 + "'")[0]; int bitcount = int.Parse(resultRow["BitCount"].ToString()); float[] fvlist = new float[bitcount]; for (int i = 0; i < bitcount; i++) { float floatValue = BitConverter.ToSingle(valuelist, i * 4); fvlist[i] = floatValue; } Array.Reverse(fvlist); for (int i = 0; i < bitcount; i++) { string str_tagname = resultRow[5 + i].ToString(); if (str_tagname == "1" || str_tagname.Trim() == "") { continue; } objValue = new TagValue(); objValue.TagName = str_tagname; objValue.DateTime = DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute); objValue.DeviceId = resultRow["HotName"].ToString(); if (fvlist[i] < 0) { objValue.Value = 0; } else { objValue.Value = Math.Round(fvlist[i] / 100, 2); } if (double.IsNaN(objValue.Value)) { objValue.Value = -123456; } objValue.PLCadd = resultRow["PLCAddress"].ToString(); tagList.Add(objValue); } } } catch (Exception ex) { Console.WriteLine("error:" + ex.Message); } return(tagList); }