2025-04-17 20:28:50 +08:00

298 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using JiShe.CollectBus.Common.Enums;
using JiShe.CollectBus.Common.Models;
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace JiShe.CollectBus.Common.BuildSendDatas
{
/// <summary>
/// 构建下发报文,只适用与定时抄读
/// </summary>
public static class TelemetryPacketBuilder
{
/// <summary>
/// 构建报文的委托
/// </summary>
/// <param name="request.FocusAddress"></param>
/// <param name="request.Fn"></param>
/// <param name="request.Pn"></param>
public delegate byte[] AFNDelegate(TelemetryPacketRequest request);
/// <summary>
/// 编码与方法的映射表
/// </summary>
public static readonly Dictionary<string, AFNDelegate> AFNHandlersDictionary = new();
static TelemetryPacketBuilder()
{
// 初始化时自动注册所有符合命名规则的方法
var methods = typeof(TelemetryPacketBuilder).GetMethods(BindingFlags.Static | BindingFlags.Public);
foreach (var method in methods)
{
if (method.Name.StartsWith("AFN") && method.Name.EndsWith("_Fn_Send"))
{
string code = method.Name;
var delegateInstance = (AFNDelegate)Delegate.CreateDelegate(typeof(AFNDelegate), method);
AFNHandlersDictionary[code] = delegateInstance;
}
}
}
#region AFN_00H
public static byte[] AFN00_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.2,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 0,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN_01H
public static byte[] AFN01_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 10,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN_02H
public static byte[] AFN02_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.2,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 0,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN_04H
public static byte[] AFN04_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.1,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 10,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN_05H
public static byte[] AFN05_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.1,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 10,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN_09H
public static byte[] AFN09_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.2,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 0,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN_0AH
public static byte[] AFN0A_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.2,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 0,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN_0CH
public static byte[] AFN0C_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.2,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 2,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN_0DH
public static byte[] AFN0D_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.2,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 2,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter);
return bytes;
}
#endregion
#region AFN10H
public static byte[] AFN10_Fn_Send(TelemetryPacketRequest request)
{
var reqParameter = new ReqParameter2()
{
AFN = AFN.,
FunCode = (int)CMasterStationFunCode.2,
A = request.FocusAddress,
Seq = new Seq()
{
TpV = TpV.,
FIRFIN = FIRFIN.,
CON = CON.,
PRSEQ = 0,
},
MSA = Build3761SendData.GetMSA(request.FocusAddress),
Pn = request.Pn,
Fn = request.Fn
};
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter,request.DataUnit);
return bytes;
}
#region SpecialAmmeter
//TODO 特殊电表处理
#endregion
#endregion
}
}