using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace IStation.DataDockingSocket.helper
|
{
|
/// <summary>
|
/// 作废
|
/// </summary>
|
public class MsgHelper
|
{
|
public bool Msg(string msg)
|
{
|
|
string strMsg = "41 54 2B 44 61 74 61 3D 0F A1 9B 98 00 49 C6 33 01 64 13 01 00 02 AB 5C 42 11 7B B5 3E 56 FF 5D 3E E5 58 02 00 00 00 00 00 1F 02 00 00 05 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 75";
|
string error_info = null;
|
var byteMessage = StringToHexValuve(strMsg, out error_info);
|
if (byteMessage == null)
|
{
|
return false;
|
}
|
|
AnaMsg(byteMessage.ToArray());
|
|
return true;
|
}
|
|
|
private void AnaMsg(byte[] byteMessage)
|
{
|
|
if (byteMessage == null)
|
return;
|
if (byteMessage.Length < 70)
|
return;
|
var list = new List<Model.MonitorDataDockingReceiveRecord>();
|
|
string msg;
|
var now = DateTime.Now;
|
//包头
|
byte[] byte_start = new byte[8];
|
Array.Copy(byteMessage, 0, byte_start, 0, 8);
|
var str_start = Encoding.ASCII.GetString(byte_start);
|
if (str_start != "AT+Data=")
|
return;
|
if (byteMessage[8] != 0x0F)
|
return;
|
|
//GPRS模块识别码
|
byte[] byte_data1 = new byte[4];
|
Array.Copy(byteMessage, 9, byte_data1, 0, 4);
|
var int_data1 = bytesToInt4(byte_data1.Reverse().ToArray(), 0);
|
|
//数据读取日期
|
byte[] byte_data2 = new byte[4];
|
Array.Copy(byteMessage, 13, byte_data2, 0, 4);
|
var int_data2 = bytesToInt4(byte_data2.Reverse().ToArray(), 0);
|
|
//数据读取时间
|
byte[] byte_data3 = new byte[4];
|
Array.Copy(byteMessage, 17, byte_data3, 0, 4);
|
var int_data3 = bytesToInt4(byte_data3.Reverse().ToArray(), 0);
|
|
//瞬时流量,m3/h
|
byte[] byte_data4 = new byte[4];
|
Array.Copy(byteMessage, 21, byte_data4, 0, 4);
|
var int_data4 = GetDouble1(byte_data4.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1590274355240243200,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data4.ToString()
|
});
|
|
//瞬时压力,Mpa
|
byte[] byte_data5 = new byte[4];
|
Array.Copy(byteMessage, 25, byte_data5, 0, 4);
|
var int_data5 = GetDouble1(byte_data5.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589903942416994304,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data5.ToString()
|
});
|
|
//瞬时流速,m3/h
|
byte[] byte_data6 = new byte[4];
|
Array.Copy(byteMessage, 29, byte_data6, 0, 4);
|
var int_data6 = GetDouble1(byte_data6.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589904380742733824,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data6.ToString()
|
});
|
|
//正向累计整数
|
byte[] byte_data7 = new byte[4];
|
Array.Copy(byteMessage, 33, byte_data7, 0, 4);
|
var int_data7 = GetDouble1(byte_data7.Reverse().ToArray(), 0);
|
|
//反向累计整数
|
byte[] byte_data8 = new byte[4];
|
Array.Copy(byteMessage, 37, byte_data8, 0, 4);
|
var int_data8 = GetDouble1(byte_data8.Reverse().ToArray(), 0);
|
|
//正向累计的小数/1000
|
byte[] byte_data9 = new byte[2];
|
Array.Copy(byteMessage, 41, byte_data9, 0, 2);
|
var int_data9 = GetDouble1(byte_data9.Reverse().ToArray(), 0);
|
|
//添加小数
|
int_data7 += int_data9;
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589903863446638592,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data7.ToString()
|
});
|
|
//反向累计的小数/1000
|
byte[] byte_data10 = new byte[2];
|
Array.Copy(byteMessage, 43, byte_data10, 0, 2);
|
var int_data10 = GetDouble1(byte_data10.Reverse().ToArray(), 0);
|
|
//添加小数
|
int_data8 += int_data10;
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589904635718668288,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data8.ToString()
|
});
|
|
//水表电池电量
|
byte[] byte_data11 = new byte[1];
|
Array.Copy(byteMessage, 45, byte_data11, 0, 1);
|
var int_data11 = GetDouble1(byte_data11.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589906693322575872,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data11.ToString()
|
});
|
|
//GPRS电池电量
|
byte[] byte_data12 = new byte[1];
|
Array.Copy(byteMessage, 46, byte_data12, 0, 1);
|
var int_data12 = GetDouble1(byte_data12.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589906830698614784,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data12.ToString()
|
});
|
|
//系统报警
|
byte[] byte_data13 = new byte[1];
|
Array.Copy(byteMessage, 47, byte_data13, 0, 1);
|
var int_data13 = GetDouble1(byte_data13.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589905499946618880,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data13.ToString()
|
});
|
|
//水表空管报警
|
byte[] byte_data14 = new byte[1];
|
Array.Copy(byteMessage, 48, byte_data14, 0, 1);
|
var int_data14 = GetDouble1(byte_data14.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589905855032201216,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data14.ToString()
|
});
|
|
//断励磁报警
|
byte[] byte_data15 = new byte[1];
|
Array.Copy(byteMessage, 49, byte_data15, 0, 1);
|
var int_data15 = GetDouble1(byte_data15.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589905963715006464,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data15.ToString()
|
});
|
|
//流量上线报警
|
byte[] byte_data16 = new byte[1];
|
Array.Copy(byteMessage, 50, byte_data16, 0, 1);
|
var int_data16 = GetDouble1(byte_data16.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589906172004143104,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data16.ToString()
|
});
|
|
//流量下线报警
|
byte[] byte_data17 = new byte[1];
|
Array.Copy(byteMessage, 51, byte_data17, 0, 1);
|
var int_data17 = GetDouble1(byte_data17.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589906236487372800,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data17.ToString()
|
});
|
|
//压力上限报警
|
byte[] byte_data18 = new byte[1];
|
Array.Copy(byteMessage, 52, byte_data18, 0, 1);
|
var int_data18 = GetDouble1(byte_data18.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589906299754254336,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data18.ToString()
|
});
|
|
//压力下限报警
|
byte[] byte_data19 = new byte[1];
|
Array.Copy(byteMessage, 53, byte_data19, 0, 1);
|
var int_data19 = GetDouble1(byte_data19.Reverse().ToArray(), 0);
|
list.Add(new Model.MonitorDataDockingReceiveRecord()
|
{
|
SysId = 1589906389663354880,
|
RecordType = Model.eMonitorType.General,
|
SrcTime = now,
|
SrcValue = int_data19.ToString()
|
});
|
}
|
|
public static int bytesToInt4(byte[] src, int offset = 0)
|
{
|
int value;
|
value = (src[offset] & 0xFF) << 24
|
| (src[offset + 1] & 0xFF) << 16
|
| (src[offset + 2] & 0xFF) << 8
|
| src[offset + 3] & 0xFF;
|
return value;
|
}
|
|
private double GetDouble1(byte[] value, int offset = 0)
|
{
|
|
//return BitConverter.ToDouble(byteMessage, startPosition);
|
return BitConverter.ToSingle(value.Reverse().ToArray(), 0);//采用了IEEE-754二进制浮点数算术标准
|
}
|
|
/// <summary>
|
/// 字符串转16进制字符2
|
/// </summary>
|
/// <param name="content">字符串</param>
|
/// <param name="encode">编码格式</param>
|
/// <returns></returns>
|
private List<byte> StringToHexValuve(string content, out string error_info)
|
{
|
//去掉空格
|
string[] arr = content.Split(' ');
|
if (arr.Length < 3)
|
{
|
arr = content.Split('-');
|
if (arr.Length < 3)
|
{
|
error_info = "字符无法解析";
|
return null;
|
}
|
}
|
List<byte> result = new List<byte>();
|
for (int i = 0; i < arr.Length; i++)
|
{
|
if (string.IsNullOrWhiteSpace(arr[i]))
|
continue;
|
|
var dddd = Convert.ToByte(arr[i], 16);
|
result.Add(dddd);
|
}
|
error_info = null;
|
return result;
|
}
|
|
|
}
|
}
|