using BatCharging.Model; namespace BatCharging.Service.Encoder.New { public class MsgDisconnectStopChargeEncoder { public byte[] GetDisconnectStopChargeMsg(byte[] destAddr, byte responseResults, ushort reserve) { byte[] result = null; APCI headAPCI = new APCI(); headAPCI.StartChar = CmnChargerConst.APCI_START_CHAR; headAPCI.PackLen = 0; //临时赋值为零,具体数值看下面的计算结果 headAPCI.CtlArea = 0; //控制域 headAPCI.DestAddr = destAddr;//目的地址 headAPCI.SrcAddr = 0;//源地址,本系统中,源地址统一为:00000000(即为0) ASDU headASDU = new ASDU(); headASDU.FrameTypeNo = 45; //帧类型号 headASDU.MsgBodyCount = 1; //信息体个数 headASDU.TransReason = 3; //传送原因 headASDU.PublicAddr = 0; //公共地址 headASDU.MsgBodyAddr = new byte[] { 0, 0, 0 }; //信息体地址 DisconnectStopChargeData disconnectStopChargeData = new DisconnectStopChargeData(); disconnectStopChargeData.ResponseResults= responseResults; disconnectStopChargeData.Reserve = reserve; headASDU.MsgBodyContents = GetMsgContents(disconnectStopChargeData); //信息体 headAPCI.PackLen = Convert.ToUInt16(24 + headASDU.MsgBodyContents.Length); //报文长度 List lstResult = MsgHeadApciEncoder.BuildBaseAPCI(headAPCI); lstResult.AddRange(MsgHeadAsduEncoder.BuildBaseASDU(headASDU).ToArray()); result = lstResult.ToArray(); return result; } private byte[] GetMsgContents(DisconnectStopChargeData disconnectStopChargeData) { byte[] results = null; if (disconnectStopChargeData != null) { List lstContent = new List(); lstContent.Add(disconnectStopChargeData.RecordType); lstContent.Add(disconnectStopChargeData.ResponseResults); lstContent.AddRange(BitConverter.GetBytes(disconnectStopChargeData.Reserve)); results = lstContent.ToArray(); } return results; } class DisconnectStopChargeData { public byte RecordType { get; set; } = 43; //应答结果 0:不使能 1:使能 public byte ResponseResults { get; set; } //保留 public ushort Reserve { get; set; } } } }