2025-04-18 11:31:23 +08:00

298 lines
12 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 TelemetryPacketResponse 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 TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN_01H
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN_02H
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN_04H
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN_05H
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN_09H
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN_0AH
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN_0CH
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN_0DH
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#endregion
#region AFN10H
public static TelemetryPacketResponse 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 new TelemetryPacketResponse() { Seq = reqParameter.Seq, Data = bytes, MSA = reqParameter.MSA, };
}
#region SpecialAmmeter
//TODO 特殊电表处理
#endregion
#endregion
}
}