using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using IStation.Untity;
|
|
namespace IStation.DataDockingSocket
|
{
|
/// <summary>
|
/// 处理数据辅助类
|
/// </summary>
|
internal class HandleDataHelper
|
{
|
/// <summary>
|
/// 处理数据
|
/// </summary>
|
public static List<Model.MonitorDataDockingSrcRecord> HandleData
|
(
|
byte[] bts
|
)
|
{
|
|
var list = new List<Model.MonitorDataDockingSrcRecord>();
|
|
//将指令转化为字节数组
|
var instrution_bts = bts;
|
var byte4 = new byte[4];
|
var byte2 = new byte[2];
|
var byte1 = new byte[1];
|
|
//数据读取日期
|
Array.Copy(instrution_bts, 13, byte4, 0, 4);
|
var date = Bytes2Int4(byte4);
|
|
//数据读取时间
|
Array.Copy(instrution_bts, 17, byte4, 0, 4);
|
var time = Bytes2Int4(byte4);
|
|
var hms = time.ToString();
|
if (hms.Length < 6)
|
hms = "0" + hms;
|
var ttt = hms.Substring(0, 2) + ":" + hms.Substring(2, 2) + ":" + hms.Substring(4, 2);
|
var strTime = $"{date} {ttt}";
|
DateTime dataTime = DateTime.ParseExact(strTime.ToString(), "yyyyMMdd hh:mm:ss", System.Globalization.CultureInfo.CurrentCulture);
|
|
|
//瞬时流量,m3/h
|
Array.Copy(instrution_bts, 21, byte4, 0, 4);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1590274355240243200",
|
SrcValue = Bytes2Double(byte4).ToString()
|
});
|
|
//瞬时压力,Mpa
|
Array.Copy(instrution_bts, 25, byte4, 0, 4);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589903942416994304",
|
SrcValue = Bytes2Double(byte4).ToString()
|
});
|
|
//瞬时流速,m3/h
|
Array.Copy(instrution_bts, 29, byte4, 0, 4);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589904380742733824",
|
SrcValue = Bytes2Double(byte4).ToString()
|
});
|
|
//正向累计整数
|
Array.Copy(instrution_bts, 33, byte4, 0, 4);
|
var ForwardCumulativeFlowInteger = Bytes2Int4(byte4);
|
//正向累计的小数/1000
|
Array.Copy(instrution_bts, 41, byte2, 0, 2);
|
var ForwardCumulativeFlowDecimal = Bytes2Int32(byte2);
|
//正向累积流量
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589903863446638592",
|
SrcValue = (ForwardCumulativeFlowInteger + ForwardCumulativeFlowDecimal * 0.001).ToString()
|
});
|
|
//反向累计整数
|
Array.Copy(instrution_bts, 37, byte4, 0, 4);
|
var ReverseCumulativeFlowInteger = Bytes2Int4(byte4);
|
//反向累计的小数 /1000
|
Array.Copy(instrution_bts, 43, byte2, 0, 2);
|
var ReverseCumulativeFlowDecimal = Bytes2Int32(byte2);
|
//反向累积流量
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589904635718668288",
|
SrcValue = (ReverseCumulativeFlowInteger + ReverseCumulativeFlowDecimal * 0.001).ToString()
|
});
|
|
//水表电池电量
|
Array.Copy(instrution_bts, 45, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589906693322575872",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
//GPRS电池电量
|
Array.Copy(instrution_bts, 46, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589906830698614784",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
//系统报警
|
Array.Copy(instrution_bts, 47, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589905499946618880",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
//水表空管报警
|
Array.Copy(instrution_bts, 48, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589905855032201216",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
//断励磁报警
|
Array.Copy(instrution_bts, 49, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589905963715006464",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
//流量上线报警
|
Array.Copy(instrution_bts, 50, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589906172004143104",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
//流量下线报警
|
Array.Copy(instrution_bts, 51, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589906236487372800",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
//压力上限报警
|
Array.Copy(instrution_bts, 52, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589906299754254336",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
//压力下限报警
|
Array.Copy(instrution_bts, 53, byte1, 0, 1);
|
list.Add(new Model.MonitorDataDockingSrcRecord()
|
{
|
SignId = "1589906389663354880",
|
SrcValue = Bytes2Int32(byte1).ToString()
|
});
|
|
return list;
|
}
|
|
public static double Bytes2Double(byte[] value, int offset = 0)
|
{
|
return BitConverter.ToSingle(value.Reverse().ToArray(), 0);//采用了IEEE-754二进制浮点数算术标准
|
}
|
|
public static int Bytes2Int4(byte[] src, int offset = 0)
|
{
|
src = src.Reverse().ToArray();
|
int value;
|
value = (int)(((src[offset] & 0xFF) << 24)
|
| ((src[offset + 1] & 0xFF) << 16)
|
| ((src[offset + 2] & 0xFF) << 8)
|
| (src[offset + 3] & 0xFF));
|
return value;
|
}
|
|
public static int Bytes2Int32(byte[] bytes)
|
{
|
return Convert.ToInt32(Byte2HexStr(bytes.Reverse().ToArray()), 16); ;
|
}
|
|
|
/// <summary>
|
/// byte[]转为16进制字符串
|
/// </summary>
|
public static string Byte2HexStr(byte[] bytes)
|
{
|
string returnStr = "";
|
if (bytes != null)
|
{
|
for (int i = 0; i < bytes.Length; i++)
|
{
|
returnStr += bytes[i].ToString("X2");
|
}
|
}
|
return returnStr;
|
}
|
}
|
}
|