/// <summary> /// 解包协议 /// </summary> /// <param name="buffer">待解包的数组</param> /// <param name="startSit">ASDU起始位置</param> /// <param name="lenth">长度</param> /// <returns></returns> public TransRes UnPack(byte[] buffer, int startSit, int lenth) { if ((lenth + startSit > buffer.Length) || (lenth - startSit < 4)) { return(TransRes.UnDef); } this.type = (FunType)buffer[startSit]; this.sqn = buffer[startSit + 1]; this.transRes = buffer[startSit + 2]; this.apduAddr = buffer[startSit + 4]; TransRes res = this.GetTransRes(this.transRes); switch (res) { case TransRes.ResAll: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; case TransRes.AutoSend: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; case TransRes.ActiveEnd: break; case TransRes.Active: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; case TransRes.ActiveConfirm: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; case ASDUClass.TransRes.Res001: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; case ASDUClass.TransRes.Res002: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; case ASDUClass.TransRes.Res003: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; case ASDUClass.TransRes.Res004: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; case ASDUClass.TransRes.Telecontrolling: GetDataUnpack(buffer, startSit + 6, lenth - 6); break; default: return(TransRes.UnDef); } return(res); }
/// <summary> /// 打包 /// </summary> /// <param name="active">激活/行动类型(传输原因)</param> /// <param name="funType">功能(数据类型)</param> public void Pack(TransRes active, FunType funType) { switch (active) { case TransRes.Active: { switch (funType) { case FunType.ClockConfirm: this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; this.apduAddr = 1; this.data.Add(new DataStruct() { Addr = 0, Time = DateTime.Now }); break; case FunType.CalAll: this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; this.apduAddr = 1; this.data.Add(new DataStruct() { Addr = 0, Data = 0x14 }); break; case FunType.CalEnergyPulse: this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; this.apduAddr = 1; //0x6401 this.data.Add(new DataStruct() { Addr = 0, Data = 0x05 }); break; } } break; case TransRes.ActiveEnd: break; case TransRes.ActiveStop: break; default: break; } }
public dynamic SaveReceiveAction(dynamic data) { string jsondata = token_gen.Authorize_aesdecrpty(data); //string jsondata = JsonConvert.SerializeObject(data); try { TransRes val = JsonConvert.DeserializeObject <TransRes>(jsondata); return(Ok(_Loginhel.SaveReceiveAction_helper(val))); } catch (Exception ex) { _response.Status = 102; _response.Reason = ex.Message.ToString(); return(Ok(_response)); } }
public dynamic SideMenuDashboardData(dynamic data) { string jsondata = token_gen.Authorize_aesdecrpty(data); try { TransRes val = JsonConvert.DeserializeObject <TransRes>(jsondata); return(Ok(_Loginhel.GetRegRecDashboard(val))); // return "Success"; } catch (Exception ex) { _response.Status = 102; _response.Reason = _Loginhel.ErrorMessage; return(Ok(_response)); } }
/// <summary> /// 设置传输原因 /// </summary> /// <param name="yes_no">是否肯定/否定</param> /// <param name="isTest">是否测试</param> /// <param name="type">传输原因</param> /// <returns>设置是否成功</returns> public bool SetTransRes(bool yes_no, bool isTest, TransRes type) { transRes = (byte)(Convert.ToByte(type) | (isTest?(1 << 7):0) | (yes_no?(1 << 6):0)); return(true); }
/// <summary> /// 打包 /// </summary> /// <param name="active">激活/行动类型(传输原因)</param> /// <param name="funType">功能(数据类型)</param> public void Pack(TransRes active, FunType funType, int?addr = null, double dValue = 0.0, byte qds = (byte)0) { switch (active) { case TransRes.Active: { switch (funType) { case FunType.ClockConfirm: this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; //this.apduAddr = 1; this.data.Add(new DataStruct() { Addr = addr, Time = DateTime.Now }); break; case FunType.CalAll: this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; //this.apduAddr = 1; this.data.Add(new DataStruct() { Addr = addr, Data = 0x14 }); //this.data.Add(new DataStruct(0, new byte[4]{0x14, 0, 0, 0}, 0, 4)); break; } } break; case TransRes.ActiveEnd: break; case TransRes.ActiveStop: { switch (funType) { case FunType.CalAll: this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; //this.apduAddr = 1; this.data.Add(new DataStruct() { Addr = addr, Data = 0x14 }); //this.data.Add(new DataStruct(0, new byte[4]{0x14, 0, 0, 0}, 0, 4)); break; } } break; case TransRes.ActiveConfirm: { switch (funType) { case FunType.CalAll: this.sqn = 1; this.SetTransRes(false, false, TransRes.ActiveConfirm); this.type = funType; //this.apduAddr = 1; this.data.Add(new DataStruct() { Addr = addr, Data = 0x14 }); //this.data.Add(new DataStruct(0, new byte[4] { 0x14, 0, 0, 0 }, 0, 4)); break; } } break; case TransRes.Res001: //Group 1 { switch (funType) { case FunType.CalAll: //下行 this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; this.data.Add(new DataStruct() { Addr = addr, Data = 0x14 }); break; case FunType.FloatMValue: //上行 //遥测信息+品质描述词 this.sqn = (byte)(Convert.ToByte("10000000", 2) + 3); //3个连续信息体 this.SetTransRes(false, false, TransRes.Res001); this.type = funType; this.data.Add(new DataStruct() { Addr = addr, Data = dValue }); DataStruct temp = this.data[this.data.Count - 1]; temp.DataLength = 4; temp.Quality = DataStruct.QualityType.OK; break; } } break; case TransRes.Res002: //Group 2 { switch (funType) { case FunType.CalAll: //下行 this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; this.data.Add(new DataStruct() { Addr = addr, Data = 0x14 }); break; case FunType.FloatMValue: //上行 //遥测信息+品质描述词 this.sqn = (byte)(Convert.ToByte("10000000", 2) + 6); //6个连续信息体 this.SetTransRes(false, false, TransRes.Res002); this.type = funType; this.data.Add(new DataStruct() { Addr = addr, Data = dValue }); DataStruct temp = this.data[this.data.Count - 1]; temp.DataLength = 4; temp.Quality = DataStruct.QualityType.OK; //this.data.Add(new DataStruct() { Data = qds }); break; } } break; case TransRes.Res003: //Group 3 { switch (funType) { case FunType.CalAll: //下行 this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; this.data.Add(new DataStruct() { Addr = addr, Data = 0x14 }); break; case FunType.Single_point: //上行 //遥信(不带品质描述词,单点数据已经包含品质描述 ) this.sqn = (byte)(Convert.ToByte("00000000", 2) + 1); //1个单点信息 this.SetTransRes(false, false, TransRes.Res003); this.type = funType; this.data.Add(new DataStruct() { Addr = addr, Data = dValue }); DataStruct temp = this.data[this.data.Count - 1]; temp.DataLength = 1; break; } } break; case TransRes.Telecontrolling: { switch (funType) { case FunType.CalAll: //下行 this.sqn = 1; this.SetTransRes(false, false, active); this.type = funType; this.data.Add(new DataStruct() { Addr = addr, Data = 0x14 }); break; case FunType.Single_point: //上行 //遥信(不带品质描述词,单点数据已经包含品质描述 ) this.sqn = (byte)(Convert.ToByte("00000000", 2) + 1); //1个单点信息 this.SetTransRes(false, false, TransRes.Telecontrolling); this.type = funType; this.data.Add(new DataStruct() { Addr = addr, Data = dValue }); DataStruct temp = this.data[this.data.Count - 1]; temp.DataLength = 1; break; } } break; default: break; } }