Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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;
            }
        }
Beispiel #3
0
        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));
            }
        }
Beispiel #4
0
        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));
            }
        }
Beispiel #5
0
 /// <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);
 }
Beispiel #6
0
        /// <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;
            }
        }