public static void Data_operation(object datatemp)
        {
            Tower_send_frame tower_Send_Frame = JsonConvert.DeserializeObject <Tower_send_frame>(datatemp.ToString());

            if (tower_Send_Frame != null)
            {
                Zhgd_iot_tower_current data = new Zhgd_iot_tower_current();
                data.sn                 = tower_Send_Frame.sn;
                data.is_warning         = tower_Send_Frame.is_warning;
                data.warning_type       = tower_Send_Frame.warning_type;
                data.@timestamp         = tower_Send_Frame.@timestamp;
                data.weight             = tower_Send_Frame.weight;
                data.height             = tower_Send_Frame.height;
                data.range              = tower_Send_Frame.range;
                data.rotation           = tower_Send_Frame.rotation;
                data.moment_forces      = tower_Send_Frame.moment_forces;
                data.wind_grade         = tower_Send_Frame.wind_grade;
                data.wind_speed         = tower_Send_Frame.wind_speed;
                data.dip_x              = tower_Send_Frame.dip_x;
                data.dip_y              = tower_Send_Frame.dip_y;
                data.boom_arm_length    = tower_Send_Frame.boom_arm_length;
                data.balance_arm_length = tower_Send_Frame.balance_arm_length;
                data.tower_body_height  = tower_Send_Frame.tower_body_height;
                data.tower_hat_height   = tower_Send_Frame.tower_hat_height;
                data.driver_id_code     = tower_Send_Frame.driver_id_code;

                //进行数据put
                DPC.Tower_operation.Send_tower_Current(data);
            }
        }
        /// <summary>
        /// 警告标识
        /// </summary>
        public static void AlarmFlag(Zhgd_iot_tower_current data, string AlarmStr)
        {
            int           l  = AlarmStr.Length;
            List <string> vs = new List <string>();

            data.is_warning = "N";
            #region 风速报警 bit0
            if (AlarmStr.Substring(l - 1, 1) == "1")//风速报警
            {
                vs.Add(Warning_type.风速报警);
                data.is_warning = "Y";
            }
            #endregion
            #region 超重报警 bit1
            if (AlarmStr.Substring(l - 2, 1) == "1")//超重报警
            {
                vs.Add(Warning_type.重量告警);
                data.is_warning = "Y";
            }
            #endregion
            #region 碰撞报警 bit2
            if (AlarmStr.Substring(l - 3, 1) == "1")//交叉干涉报警
            {
                vs.Add(Warning_type.碰撞报警);
                data.is_warning = "Y";
            }
            #endregion
            #region 力矩报警 bit3
            if (AlarmStr.Substring(l - 4, 1) == "1")//力矩报警
            {
                vs.Add(Warning_type.力矩报警);
                data.is_warning = "Y";
            }
            #endregion
            #region 倾斜 bit4
            if (AlarmStr.Substring(l - 5, 1) == "1")//倾斜报警
            {
                vs.Add(Warning_type.倾斜报警);
                data.is_warning = "Y";
            }
            #endregion
            #region 区域保护前bit12  区域保护后bit13 区域保护左bit14 区域保护右bit15
            if (AlarmStr.Substring(l - 13, 1) == "1" || AlarmStr.Substring(l - 14, 1) == "1" || AlarmStr.Substring(l - 15, 1) == "1" || AlarmStr.Substring(l - 16, 1) == "1")//前进进入禁止区域报警
            {
                vs.Add(Warning_type.区域保护报警);
                data.is_warning = "Y";
            }
            #endregion
            #region  限位bit16  下限位bit17 外限位bit18 内限位bit19 左限位bit20 右限位bit21
            if (AlarmStr.Substring(l - 17, 1) == "1" || AlarmStr.Substring(l - 18, 1) == "1" || AlarmStr.Substring(l - 19, 1) == "1" || AlarmStr.Substring(l - 20, 1) == "1" || AlarmStr.Substring(l - 21, 1) == "1" || AlarmStr.Substring(l - 22, 1) == "1")//上升限位报警
            {
                vs.Add(Warning_type.限位报警);
                data.is_warning = "Y";
            }

            #endregion
            data.warning_type = vs.ToArray();
        }
        /// <summary>
        /// 实时数据
        /// </summary>
        /// <param name="b"></param>
        /// 发送7e 7e 0e 01 00 12 34 56 00 00 00 00 17 09 27 10 12 10 01 00 00 00 02 00 00 00 03 00 04 00 05 00 06 00 01 00 02 00 03 00 04 00 05 00 02 00 00 00 00 00 00 01 00 02 00 03 00 00 00 04 00 00 00 00 7d 7d
        public static Byte[] OnResolveRealData(byte[] b, int bCount, TcpSocketClient client)
        {
            string tStr = ConvertData.ToHexString(b, 0, 2);

            if (tStr != "7E7E")
            {
                return(null);
            }
            Zhgd_iot_tower_current data = new Zhgd_iot_tower_current();

            #region 原协议
            //设备号
            data.sn = ConvertData.ToHexString(b, 5, 3);
            //司机卡号
            data.driver_id_code = ConvertData.ToHexString(b, 8, 4);
            //日期
            tStr = ConvertData.ToHexString(b, 12, 6);
            try
            {
                data.@timestamp = DPC_Tool.GetTimeStamp(DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture));
            }
            catch
            {
                data.@timestamp = DPC_Tool.GetTimeStamp();
            }
            IntValue iv = new IntValue();
            //经度
            iv.bValue1 = b[18];
            iv.bValue2 = b[19];
            iv.bValue3 = b[20];
            iv.bValue4 = b[21];
            //data.Current.Longitude = (iv.iValue / 100000.0).ToString("0.00");
            //纬度
            iv.bValue1 = b[22];
            iv.bValue2 = b[23];
            iv.bValue3 = b[24];
            iv.bValue4 = b[25];
            //data.Current.Latitude = (iv.iValue / 100000.0).ToString("0.00");
            UShortValue s = new UShortValue();
            //高度
            s.bValue1   = b[26];
            s.bValue2   = b[27];
            data.height = double.Parse((s.sValue / 100.00).ToString("0.00"));
            //幅度
            s.bValue1  = b[28];
            s.bValue2  = b[29];
            data.range = double.Parse((s.sValue / 100.00).ToString("0.00"));
            ShortValue sv = new ShortValue();
            //转角
            sv.bValue1    = b[30];
            sv.bValue2    = b[31];
            data.rotation = double.Parse((sv.sValue / 10.00).ToString("0.00"));
            //重量
            s.bValue1   = b[32];
            s.bValue2   = b[33];
            data.weight = double.Parse((s.sValue / 100.00).ToString("0.00"));
            //风速
            s.bValue1       = b[34];
            s.bValue2       = b[35];
            data.wind_speed = double.Parse((s.sValue / 100.00).ToString("0.00"));
            data.wind_grade = ConvertWind.WindToLeve(s.sValue / 100.0f);
            if (data.wind_grade >= 13)
            {
                data.wind_grade = 12;
            }
            //倾角X
            sv.bValue1 = b[36];
            sv.bValue2 = b[37];
            data.dip_x = double.Parse((sv.sValue / 100.00).ToString("0.00"));
            //倾角Y
            sv.bValue1 = b[38];
            sv.bValue2 = b[39];
            data.dip_y = double.Parse((sv.sValue / 100.00).ToString("0.00"));
            //安全力矩
            s.bValue1 = b[40];
            s.bValue2 = b[41];
            //data.Current.Safetorque = (s.sValue / 10.00).ToString("0.00");
            //安全起重量
            s.bValue1 = b[42];
            s.bValue2 = b[43];
            //data.Current.SafeWeight = (s.sValue / 100.00).ToString("0.00");
            //倍率
            //data.Current.Times = Convert.ToInt32(b[44]).ToString();

            //限位控制器状态
            //s.bValue1 = b[51];
            //s.bValue2 = b[52];
            //data.Current.LimitStatus = Convert.ToString(s.sValue, 2).PadLeft(16, '0');
            //LimitFlag(data, data.Current.LimitStatus);

            ////传感器状态
            //s.bValue1 = b[53];
            //s.bValue2 = b[54];
            //data.Current.SensorStatus = Convert.ToString(s.sValue, 2).PadLeft(16, '0');

            //预警告码
            IntValue i = new IntValue();
            //i.bValue1 = b[55];
            //i.bValue2 = b[56];
            //i.bValue3 = b[57];
            //i.bValue4 = b[58];
            //string WarnType = Convert.ToString(i.iValue, 2).PadLeft(32, '0');

            //WarnFlag(data, WarnType);
            //报警告码
            i.bValue1 = b[59];
            i.bValue2 = b[60];
            i.bValue3 = b[61];
            i.bValue4 = b[62];
            string AlarmType = Convert.ToString(i.iValue, 2).PadLeft(32, '0'); //总共是32位右对齐
            AlarmFlag(data, AlarmType);                                        //报警码解析
            tStr = ConvertData.ToHexString(b, 64, 2);
            if (tStr != "7D7D")
            {
                return(null);
            }
            #endregion

            //进行数据put
            Tower_operation.Send_tower_Current(data);
            return(null);
        }