コード例 #1
0
        //示例: $00010K01yymmddhh#13
        public String BuildQuery(string sid, EStationType stationType, ETrans trans, DateTime beginTime, EChannelType ctype)
        {
            //  拼接发送指令的字符串
            StringBuilder sb = new StringBuilder();

            sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype));
            sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));
            sb.Append("0K");
            //  type : 01:01为水位 02为雨量
            sb.Append(ProtocolHelpers.StationType2ProtoStr(stationType));

            switch (trans)
            {
            case ETrans.ByHour:
                sb.Append(beginTime.ToString("yyMMddHH"));
                break;

            case ETrans.ByDay:
                sb.Append(beginTime.ToString("yyMMdd"));
                sb.Append("88");
                break;

            default:
                throw new Exception("传输格式错误");
            }
            sb.Append('\r');
            return(sb.ToString());
        }
コード例 #2
0
        //        ESoil = 3,         //  04墒情站
        //ESoilRain = 4,     //  05墒情雨量站
        //ESoilWater = 5,     //  06,16墒情水位站
        //ESoilHydrology = 6  //  07,17墒情水文站

        public static string StationTypeToUIStr(EStationType type)
        {
            string result = "";

            switch (type)
            {
            case EStationType.ERainFall: { result = CS_EStationType_ERainFall_UIStr; } break;

            case EStationType.ERiverWater: { result = CS_EStationType_ERiverWater_UIStr; } break;

            case EStationType.EHydrology: { result = CS_EStationType_EHydrology_UIStr; } break;

            case EStationType.ESoil: { result = CS_EStationType_ESoil_UIStr; } break;

            case EStationType.ESoilRain: { result = CS_EStationType_ESoilRain_UIStr; } break;

            case EStationType.ESoilWater: { result = CS_EStationType_ESoilWater_UIStr; } break;

            case EStationType.ESoilHydrology: { result = CS_EStationType_ESoilHydrology_UIStr; } break;

            case EStationType.EH: { result = CS_EStationType_RiverHydro_UIStr; } break;

            case EStationType.RE: { result = CS_EStationType_SK_UIStr; } break;

            case EStationType.GT: { result = CS_EStationType_ZB_UIStr; } break;

            case EStationType.RP: { result = CS_EStationType_BZ_UIStr; } break;

            default: { result = "未知站点类型"; } break;
            }
            return(result);
        }
コード例 #3
0
        //  批量数据Flash下行
        public String BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype)
        {
            String result       = String.Empty;
            String dataProtocol = Manager.XmlStationData.Instance.GetProtocolBySId(sid);

            //RG30
            if (dataProtocol == "RG30")
            {
                Down = new Data.RG30.DownParser();
            }
            //时差法
            if (dataProtocol == "TDXY")
            {
                Down = new Data.TDXY.DownParser();
            }
            //中游局协议
            if (dataProtocol == "ZYJBX")
            {
                Down = new Data.ZYJBX.DownParser();
            }
            if (dataProtocol == "SM100H")
            {
                Down = new Data.SM100H.DownParser();
            }
            result = Down.BuildQuery_Flash(sid, stationType, trans, beginTime, endTime, ctype);
            return(result);
        }
コード例 #4
0
        public static string StationTypeToDBStr(EStationType type)
        {
            switch (type)
            {
            case EStationType.ERainFall: return(CS_EStationType_ERainFall_DBStr);

            case EStationType.ERiverWater: return(CS_EStationType_ERiverWater_DBStr);

            case EStationType.EHydrology: return(CS_EStationType_EHydrology_DBStr);

            case EStationType.ESoil: return(CS_EStationType_ESoil_DBStr);

            case EStationType.ESoilRain: return(CS_EStationType_ESoilRain_DBStr);

            case EStationType.ESoilWater: return(CS_EStationType_ESoilWater_DBStr);

            case EStationType.ESoilHydrology: return(CS_EStationType_ESoilHydrology_DBStr);

            case EStationType.EH: return(CS_EStationType_RiverHydro_DBStr);

            case EStationType.RE: return(CS_EStationType_SK_DBStr);

            case EStationType.GT: return(CS_EStationType_ZB_DBStr);

            case EStationType.RP: return(CS_EStationType_BZ_DBStr);
            }
            throw new Exception("StationTypeToDBStr ERROR");
        }
コード例 #5
0
        //解析数据段
        private bool GetData(string data, DateTime recvTime, decimal voltage, EStationType stationType, out CReportData report)
        {
            report = new CReportData();
            try
            {//  解析时间
                report.Time = recvTime;

                //  解析电压  2(整数位) + 2(小数位)  单位V
                report.Voltge = voltage;

                // 此处根据站点类型类判断是否需要解析相应的数据,避免因为非必要字段导致的异常信息
                //  解析水位  4(整数位) + 2(小数位)  单位m
                //  解析雨量                         单位mm,未乘以精度
                //  初始化雨量,水位,电压值
                //  雨量  包含雨量Rain
                //  水文  包含雨量Rain,水位Water
                //  水位  包含水位Water
                switch (stationType)
                {
                case EStationType.ERainFall:
                {
                    //  雨量
                    //  解析雨量                         单位mm,未乘以精度
                    Decimal rain = Decimal.Parse(data.Substring(6, 4));
                    report.Rain = rain;
                } break;

                case EStationType.EHydrology:
                {
                    //  水文
                    //  解析雨量                         单位mm,未乘以精度
                    Decimal rain = Decimal.Parse(data.Substring(6, 4));
                    //  解析水位  4(整数位) + 2(小数位)  单位m
                    Decimal water = Decimal.Parse(data.Substring(0, 6)) * (Decimal)0.01;
                    report.Rain  = rain;
                    report.Water = water;
                }
                break;

                case EStationType.ERiverWater:
                {
                    //  水位
                    //  解析水位  4(整数位) + 2(小数位)  单位m
                    Decimal water = Decimal.Parse(data.Substring(0, 6)) * (Decimal)0.01;
                    report.Water = water;
                    break;
                }

                default: break;
                }

                return(true);
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine(exp.Message);
            }
            return(false);
        }
コード例 #6
0
        /// <summary>
        /// 解析站点数据内容
        /// 示例数据:090227080012345600011260
        /// 0902270800      10位数据时报
        /// 123456          6位水位
        /// 0001            4位雨量
        /// 1260            4位电压
        /// </summary>
        /// <param name="data">数据</param>
        /// <param name="stationType">站类</param>
        /// <param name="report"></param>
        /// <returns></returns>
        private bool GetData(string data, EStationType stationType, out CReportData report)
        {
            report = new CReportData();
            try
            {
                //  解析时间
                report.Time = new DateTime
                              (
                    year: Int32.Parse("20" + data.Substring(0, 2)),     //  年
                    month: Int32.Parse(data.Substring(2, 2)),           //  月
                    day: Int32.Parse(data.Substring(4, 2)),             //  日
                    hour: Int32.Parse(data.Substring(6, 2)),            //  时
                    minute: Int32.Parse(data.Substring(8, 2)),          //  分
                    second: 0                                           //  秒
                              );
                //  解析电压  2(整数位) + 2(小数位)  单位V
                Decimal Voltge = Decimal.Parse(data.Substring(20, 4)) * (Decimal)0.01;
                //  解析水位  4(整数位) + 2(小数位)  单位m
                Decimal water = Decimal.Parse(data.Substring(10, 6)) * (Decimal)0.01;
                //  解析雨量                         单位mm,未乘以精度
                Decimal rain = Decimal.Parse(data.Substring(16, 4));

                //  初始化雨量,水位,电压值
                //  雨量  包含雨量Rain
                //  水文  包含雨量Rain,水位Water
                //  水位  包含水位Water
                switch (stationType)
                {
                case EStationType.ERainFall:       //  雨量
                    report.Rain = rain; break;

                case EStationType.EHydrology:      //  水文
                    report.Rain  = rain;
                    report.Water = water;
                    break;

                case EStationType.ERiverWater:     //  水位
                    report.Water = water; break;

                default: break;
                }
                report.Voltge = Voltge;

                return(true);
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine(exp.Message);
            }
            return(false);
        }
コード例 #7
0
        private List <CReportData> GetData(IList <string> dataSegs, EStationType stationType)
        {
            var result = new List <CReportData>();

            foreach (var item in dataSegs)
            {
                CReportData data = new CReportData();
                if (GetData(item, stationType, out data))
                {
                    result.Add(data);
                }
            }
            return(result);
        }
コード例 #8
0
        //        ESoil = 3,         //  04墒情站
        //ESoilRain = 4,     //  05墒情雨量站
        //ESoilWater = 5,     //  06,16墒情水位站
        //ESoilHydrology = 6  //  07,17墒情水文站

        public static string StationTypeToUIStr(EStationType type)
        {
            string result = "";

            switch (type)
            {
            case EStationType.ERainFall: { result = CS_EStationType_ERainFall_UIStr; } break;

            case EStationType.ERiverWater: { result = CS_EStationType_ERiverWater_UIStr; } break;

            case EStationType.EHydrology: { result = CS_EStationType_EHydrology_UIStr; } break;

            case EStationType.ESoil: { result = CS_EStationType_ESoil_UIStr; } break;

            case EStationType.ESoilRain: { result = CS_EStationType_ESoilRain_UIStr; } break;

            case EStationType.ESoilWater: { result = CS_EStationType_ESoilWater_UIStr; } break;

            case EStationType.ESoilHydrology: { result = CS_EStationType_ESoilHydrology_UIStr; } break;

            case EStationType.EP: { result = CS_EStationType_EP_UIStr; } break;

            case EStationType.EH: { result = CS_EStationType_EH_UIStr; } break;

            case EStationType.EK: { result = CS_EStationType_EK_UIStr; } break;

            case EStationType.EZ: { result = CS_EStationType_EZ_UIStr; } break;

            case EStationType.ED: { result = CS_EStationType_ED_UIStr; } break;

            case EStationType.ET: { result = CS_EStationType_ET_UIStr; } break;

            case EStationType.EM: { result = CS_EStationType_EM_UIStr; } break;

            case EStationType.EG: { result = CS_EStationType_EG_UIStr; } break;

            case EStationType.EQ: { result = CS_EStationType_EQ_UIStr; } break;

            case EStationType.EI: { result = CS_EStationType_EI_UIStr; } break;

            case EStationType.EO: { result = CS_EStationType_EO_UIStr; } break;

            default: { result = "未知站点类型"; } break;
            }
            return(result);
        }
コード例 #9
0
        public static String StationType2ProtoStr_1(EStationType type)
        {
            string str = string.Empty;

            switch (type)
            {
            case EStationType.EHydrology:
            case EStationType.ERiverWater:
                str = ProtocolMaps.StationType4UIMap.FindValue(EStationType.ERainFall);
                break;

            case EStationType.ERainFall:
                str = ProtocolMaps.StationType4UIMap.FindValue(EStationType.ERiverWater);
                break;
            }
            return(str);
        }
コード例 #10
0
        //  批量数据UBatch下行
        public String BuildQuery_UBatch(string sid, EStationType stationType, ETrans trans, DateTime beginTime, EChannelType ctype)
        {
            //  构建发送指令的字符串
            StringBuilder sb = new StringBuilder();

            sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype));
            sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));
            sb.Append("0K");

            //   stationtype :  01为水位 02为雨量
            sb.Append(ProtocolHelpers.StationType2ProtoStr_1(stationType));

            //  时间
            sb.Append(beginTime.ToString("yyMMddHH"));

            sb.Append('\r');
            return(sb.ToString());
        }
コード例 #11
0
        public static string StationTypeToDBStr(EStationType type)
        {
            switch (type)
            {
            case EStationType.ERainFall: return(CS_EStationType_ERainFall_DBStr);

            case EStationType.ERiverWater: return(CS_EStationType_ERiverWater_DBStr);

            case EStationType.EHydrology: return(CS_EStationType_EHydrology_DBStr);

            case EStationType.ESoil: return(CS_EStationType_ESoil_DBStr);

            case EStationType.ESoilRain: return(CS_EStationType_ESoilRain_DBStr);

            case EStationType.ESoilWater: return(CS_EStationType_ESoilWater_DBStr);

            case EStationType.ESoilHydrology: return(CS_EStationType_ESoilHydrology_DBStr);

            case EStationType.EP: return(CS_EStationType_EP_DBStr);

            case EStationType.EH: return(CS_EStationType_EH_DBStr);

            case EStationType.EK: return(CS_EStationType_EK_DBStr);

            case EStationType.EZ: return(CS_EStationType_EZ_DBStr);

            case EStationType.ED: return(CS_EStationType_ED_DBStr);

            case EStationType.ET: return(CS_EStationType_ET_DBStr);

            case EStationType.EM: return(CS_EStationType_EM_DBStr);

            case EStationType.EG: return(CS_EStationType_EG_DBStr);

            case EStationType.EQ: return(CS_EStationType_EQ_DBStr);

            case EStationType.EI: return(CS_EStationType_EI_DBStr);

            case EStationType.EO: return(CS_EStationType_EO_DBStr);
            }
            throw new Exception("StationTypeToDBStr ERROR");
        }
コード例 #12
0
        //  批量数据Flash下行
        public String BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype)
        {
            //  构建发送指令的字符串
            StringBuilder sb = new StringBuilder();

            sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype));
            sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));
            sb.Append("0K");

            //   stationtype :  01为水位 02为雨量
            sb.Append(ProtocolHelpers.StationType2ProtoStr_1(stationType));

            //  dayOrHour : 03为按小时传 02为按天传
            //              按小时传  时间格式:   yyMMddHH
            //              按天传   时间格式:   yyMMdd
            //              按一天整点传  时间格式:  yyMMddHH
            sb.Append(ProtocolMaps.TransMap.FindValue(trans));
            switch (trans)
            {
            case ETrans.ByHour:
                sb.Append(beginTime.ToString("yyMMddHH"));
                sb.Append(endTime.ToString("yyMMddHH"));
                break;

            case ETrans.ByDay:
                sb.Append(beginTime.ToString("yyMMdd"));
                sb.Append(endTime.ToString("yyMMdd"));
                break;

            case ETrans.ByDayHour:
                sb.Append(beginTime.ToString("yyMMddHH"));
                sb.Append(endTime.ToString("yyMMddHH"));
                break;

            default:
                throw new Exception("传输格式错误");
            }

            sb.Append('\r');
            return(sb.ToString());
        }
コード例 #13
0
        /// <summary>
        /// 单个数据项读取函数
        /// </summary>
        /// <param name="data">原始数据信息</param>
        /// <param name="recvtime">接收时间</param>
        /// <param name="voltage">电压信息</param>
        /// <param name="stationType">站点类型,作为读取数据的依据</param>
        /// <param name="report">作为返回的结果</param>
        /// <returns>填充成功与否</returns>
        private bool FillData(string data, DateTime recvtime, Decimal voltage, EStationType stationType, out CReportData report)
        {
            report = new CReportData();
            try
            {
                //时间
                report.Time = recvtime;
                //电压
                report.Voltge = voltage;
                //根据站类读取相应的数据
                switch (stationType)
                {
                //水位站只要读水位信息
                case EStationType.ERiverWater:
                    report.Water = Decimal.Parse(data.Substring(0, 6)) * (Decimal)0.01;
                    break;

                //雨量站只要读雨量信息
                case EStationType.ERainFall:
                    report.Rain = Decimal.Parse(data.Substring(6, 4));
                    break;

                //水文站要读水位信息和雨量信息
                case EStationType.EHydrology:
                    report.Water = Decimal.Parse(data.Substring(0, 6)) * (Decimal)0.01;
                    report.Rain  = Decimal.Parse(data.Substring(6, 4));
                    break;

                default:
                    System.Diagnostics.Debug.WriteLine("解析XYJBX信息中站点类别有误!");
                    break;
                }
                return(true);
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e.Message);
                return(false);
            }
        }
コード例 #14
0
        public bool Parse(String msg, out CReportStruct report)
        {
            //$30011G2512010030yymmddhhmm1297001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100;
            report = null;
            try
            {
                string data = string.Empty;
                if (!ProtocolHelpers.DeleteSpecialChar(msg, out data))
                {
                    return(false);
                }

                //  解析站号
                String StationId = data.Substring(0, 4);
                //  解析通信类别
                String type = data.Substring(4, 2);
                //定义报文类别
                String reportTypeString = data.Substring(6, 2);
                //定义站点类别
                String stationTypeString = data.Substring(8, 2);
                //  根据报文类别进行区别处理
                switch (reportTypeString)
                {
                case "25":
                {
                    //  解析报文类别
                    reportTypeString = "22";
                    EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString);
                    //  解析站点类别
                    EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString);
                    //解析间隔分钟
                    int intervalMin = Int32.Parse(data.Substring(10, 2));
                    //解析数据个数
                    int dataNum = Int32.Parse(data.Substring(12, 4));
                    //解析接收时间
                    DateTime recvTime = new DateTime(
                        year: Int32.Parse("20" + data.Substring(16, 2)),          //年
                        month: Int32.Parse(data.Substring(18, 2)),                //月
                        day: Int32.Parse(data.Substring(20, 2)),                  //日
                        hour: Int32.Parse(data.Substring(22, 2)),                 //时
                        minute: Int32.Parse(data.Substring(24, 2)),               //分
                        second: 0
                        );
                    //解析电压 2(整数位)+ 2(小数位) 单位 V
                    Decimal Voltage = Decimal.Parse(data.Substring(26, 4)) * (Decimal)0.01;
                    //获取数据段,不包括间隔分钟、数据个数、电压等
                    var lists = data.Substring(30).Split(CSpecialChars.BALNK_CHAR);
                    var datas = GetProData(intervalMin, dataNum, lists, recvTime, Voltage);

                    report = new CReportStruct()
                    {
                        Stationid   = StationId,
                        Type        = type,
                        ReportType  = reportType,
                        StationType = stationType,
                        RecvTime    = recvTime,
                        Datas       = datas
                    };
                } break;

                case "22":
                {
                    //  解析报文类别
                    EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString);
                    //  解析站点类别
                    EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString);
                    //解析包序号
                    String PackageNum = data.Substring(10, 4);
                    //解析接收时间
                    DateTime recvTime = new DateTime(
                        year: Int32.Parse("20" + data.Substring(14, 2)), //年
                        month: Int32.Parse(data.Substring(16, 2)),       //月
                        day: Int32.Parse(data.Substring(18, 2)),         //日
                        hour: Int32.Parse(data.Substring(20, 2)),        //时
                        minute: 0,                                       //分
                        second: 0                                        //秒
                        );
                    //把包序号写入缓存
                    CEntityPackage package = new CEntityPackage()
                    {
                        StrStationID = StationId,
                        PackageNum   = PackageNum,
                        time         = recvTime
                    };
                    if (cEntityPackage.ContainsKey(StationId))
                    {
                        cEntityPackage[StationId] = package;
                    }
                    else
                    {
                        cEntityPackage.Add(StationId, package);
                    }
                    //解析电压 2(整数位)+ 2(小数位) 单位 V
                    Decimal Voltage = Decimal.Parse(data.Substring(22, 4)) * (Decimal)0.01;
                    //获取数据段,不包括间隔分钟、数据个数、电压等
                    var lists = data.Substring(26).Split(CSpecialChars.BALNK_CHAR);
                    var datas = GetData(lists, recvTime, Voltage, stationType);

                    report = new CReportStruct()
                    {
                        Stationid   = StationId,
                        Type        = type,
                        ReportType  = reportType,
                        StationType = stationType,
                        RecvTime    = recvTime,
                        Datas       = datas
                    };
                } break;

                case "21":
                {
                    if (data.Substring(8, 2) != "11")
                    {
                        //  解析报文类别
                        EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString);
                        //  解析站点类别
                        EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString);
                        //  解析接收时间
                        DateTime recvTime = new DateTime(
                            year: Int32.Parse("20" + data.Substring(10, 2)), //年
                            month: Int32.Parse(data.Substring(12, 2)),       //月
                            day: Int32.Parse(data.Substring(14, 2)),         //日
                            hour: Int32.Parse(data.Substring(16, 2)),        //时
                            minute: Int32.Parse(data.Substring(18, 2)),      //分
                            second: 0                                        //秒
                            );

                        var lists = data.Substring(20).Split(CSpecialChars.BALNK_CHAR);
                        var datas = GetAddData(lists, recvTime, stationType);

                        report = new CReportStruct()
                        {
                            Stationid   = StationId,
                            Type        = type,
                            ReportType  = reportType,
                            StationType = stationType,
                            RecvTime    = recvTime,
                            Datas       = datas
                        };
                    }
                    else
                    {
                        //1G2111为人工水位

                        //  解析报文类别
                        EMessageType reportType = EMessageType.EMannual;
                        //  解析站点类别
                        EStationType stationType = EStationType.ERiverWater;
                        //  解析接收时间
                        DateTime recvTime = new DateTime(
                            year: DateTime.Now.Year,                    //年
                            month: DateTime.Now.Month,                  //月
                            day: DateTime.Now.Day,                      //日
                            hour: Int32.Parse(data.Substring(10, 2)),   //时
                            minute: Int32.Parse(data.Substring(12, 2)), //分
                            second: 0                                   //秒
                            );

                        var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR);
                        var datas = GetMannualData(lists, recvTime);

                        report = new CReportStruct()
                        {
                            Stationid   = StationId,
                            Type        = type,
                            ReportType  = reportType,
                            StationType = stationType,
                            RecvTime    = recvTime,
                            Datas       = datas
                        };
                    }
                } break;

                case "23":
                {
                    //1G23为人工流量
                    //  解析报文类别
                    EMessageType reportType = EMessageType.EMannual;
                    //  解析站点类别
                    EStationType stationType = EStationType.ERiverWater;
                    //  解析接收时间
                    DateTime recvTime = new DateTime(
                        year: DateTime.Now.Year,                    //年
                        month: DateTime.Now.Month,                  //月
                        day: Int32.Parse(data.Substring(8, 2)),     //日
                        hour: Int32.Parse(data.Substring(10, 2)),   //时
                        minute: Int32.Parse(data.Substring(12, 2)), //分
                        second: 0                                   //秒
                        );

                    var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR);
                    var datas = GetWaterData(lists, recvTime);

                    report = new CReportStruct()
                    {
                        Stationid   = StationId,
                        Type        = type,
                        ReportType  = reportType,
                        StationType = stationType,
                        RecvTime    = recvTime,
                        Datas       = datas
                    };
                } break;

                case "29":
                {
                    string doubleMsg = data.Substring(8);
                    Parse(doubleMsg, out report);
                } break;
                }
                return(true);
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine("数据:" + msg);
                System.Diagnostics.Debug.WriteLine("数据协议解析不完整" + exp.Message);
            }
            return(false);
        }
コード例 #15
0
        /// <summary>
        /// 解析站点数据内容
        /// 示例数据:090227080012345600011260
        /// 0902270800      10位数据时报
        /// 123456          6位水位
        /// 0001            4位雨量
        /// 1260            4位电压
        ///
        /// </summary>
        /// <param name="data">数据</param>
        /// <param name="stationType">站类</param>
        /// <param name="report"></param>
        /// <returns></returns>
        private bool GetData(string data, EStationType stationType, out CReportData report)
        {
            report = new CReportData();
            try
            {
                //  解析时间
                report.Time = new DateTime
                              (
                    year: Int32.Parse("20" + data.Substring(0, 2)),     //  年
                    month: Int32.Parse(data.Substring(2, 2)),           //  月
                    day: Int32.Parse(data.Substring(4, 2)),             //  日
                    hour: Int32.Parse(data.Substring(6, 2)),            //  时
                    minute: Int32.Parse(data.Substring(8, 2)),          //  分
                    second: 0                                           //  秒
                              );


                Decimal Voltge, rain, water;

                //  解析电压  2(整数位) + 2(小数位)  单位V
                try
                {
                    Voltge = Decimal.Parse(data.Substring(20, 4)) * (Decimal)0.01;
                }catch (Exception e1)
                {
                    Voltge = -1;
                }

                // cln:20141110修改,此处根据站点类型类判断是否需要解析相应的数据,避免因为非必要字段导致的异常信息
                //  解析水位  4(整数位) + 2(小数位)  单位m
                //Decimal water = Decimal.Parse(data.Substring(10, 6)) * (Decimal)0.01;
                //  解析雨量                         单位mm,未乘以精度
                //Decimal rain = Decimal.Parse(data.Substring(16, 4));

                //  初始化雨量,水位,电压值
                //  雨量  包含雨量Rain
                //  水文  包含雨量Rain,水位Water
                //  水位  包含水位Water
                switch (stationType)
                {
                case EStationType.ERainFall:
                {
                    //  雨量
                    //  解析雨量                         单位mm,未乘以精度
                    try
                    {
                        rain = Decimal.Parse(data.Substring(16, 4));
                    }catch (Exception e)
                    {
                        rain = -1;
                    }
                    report.Rain = rain;
                } break;

                case EStationType.EHydrology:
                {
                    //  水文
                    //  解析雨量                         单位mm,未乘以精度
                    try
                    {
                        rain = Decimal.Parse(data.Substring(16, 4));
                    }
                    catch (Exception e)
                    {
                        rain = -1;
                    }
                    //  解析水位  4(整数位) + 2(小数位)  单位m
                    try
                    {
                        water = Decimal.Parse(data.Substring(10, 6)) * (Decimal)0.01;
                    }catch (Exception e)
                    {
                        water = -200;
                    }
                    report.Rain  = rain;
                    report.Water = water;
                }
                break;

                case EStationType.ERiverWater:
                {
                    //  水位
                    //  解析水位  4(整数位) + 2(小数位)  单位m
                    try
                    {
                        water = Decimal.Parse(data.Substring(10, 6)) * (Decimal)0.01;
                    }
                    catch (Exception e)
                    {
                        water = -200;
                    }
                    report.Water = water;
                    break;
                }

                default: break;
                }
                report.Voltge = Voltge;

                return(true);
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine(exp.Message);
            }
            return(false);
        }
コード例 #16
0
        public bool Parse(String msg, out CReportStruct report)
        {
            //6013 $60131G2201161111040003046112271367
            report = null;
            try
            {
                string data = string.Empty;
                if (!ProtocolHelpers.DeleteSpecialChar(msg, out data))
                {
                    return(false);
                }

                //  解析站点ID
                String stationID = data.Substring(0, 4);
                //  解析通信类别
                String type = data.Substring(4, 2);
                //  解析报文类别
                EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(data.Substring(6, 2));

                //  解析站点类别
                //EStationType stationType = EStationType.EHydrology;
                //String stationTypeStr = data.Substring(8, 2);
                //switch (stationTypeStr)
                //{
                //    case "01":  //  雨量
                //        stationType = EStationType.ERainFall;
                //        break;
                //    case "02":  //  水位
                //    case "12":
                //        stationType = EStationType.ERiverWater;
                //        break;
                //    case "03":  //  水文
                //    case "13":
                //        stationType = EStationType.EHydrology;
                //        break;
                //}
                EStationType stationType = ProtocolHelpers.ProtoStr2StationType(data.Substring(8, 2));

                //  解析接收时间
                DateTime recvTime = DateTime.Now;

                //  获取数据段,不包含站号、类别、报类、站类信息
                var lists = data.Substring(10).Split(CSpecialChars.BALNK_CHAR);
                var datas = GetData(lists, stationType);

                report = new CReportStruct()
                {
                    Stationid   = stationID,
                    Type        = type,
                    ReportType  = reportType,
                    StationType = stationType,
                    RecvTime    = recvTime,
                    Datas       = datas
                };
                return(true);
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine("数据:" + msg);
                System.Diagnostics.Debug.WriteLine("上行指令解析数据不完整!" + exp.Message);
            }
            return(false);
        }
コード例 #17
0
        private bool DealWithLineData(string str, int lineNumber, ref string strErroInfo, ref List <string> gprs)
        {
            Boolean flag = false;

            //if (str.StartsWith("(") && str.EndsWith(")"))
            //{
            // gm 添加
            //string tmp = str.Substring(1, str.Length - 2);
            string[] arrayStr = str.Split(',');
            if (arrayStr.Length == 21)
            {
                if (arrayStr[0].Length == 4)
                {
                    try
                    {
                        string stationId   = arrayStr[0].Trim();
                        int    subcenterid = 2;
                        try
                        {
                            subcenterid = CDBDataMgr.Instance.GetSubCenterByName(arrayStr[3]).SubCenterID;
                        }
#pragma warning disable CS0168 // 声明了变量“ew”,但从未使用过
                        catch (Exception ew)
#pragma warning restore CS0168 // 声明了变量“ew”,但从未使用过
                        {
                        }

                        if (CDBDataMgr.Instance.GetStationById(stationId) != null)
                        {
                            strErroInfo = string.Format("行:{0} 站点不能重复\"{1}\"", lineNumber, stationId);
                            return(false);
                        }
                        //int subcenterid = int.Parse(arrayStr[1]);
                        string       stationname = arrayStr[1].Trim();
                        EStationType stationtype = CEnumHelper.UIStrToStationType(arrayStr[2]);
                        if (stationtype == EStationType.ERainFall)
                        {
                            float RAccuracy = 0.5f;
                            try
                            {
                                RAccuracy = float.Parse(arrayStr[8]);
                            }
#pragma warning disable CS0168 // 声明了变量“e5”,但从未使用过
                            catch (Exception e5)
#pragma warning restore CS0168 // 声明了变量“e5”,但从未使用过
                            {
                                RAccuracy = 0.5f;
                            }

                            Decimal RChange = 20.0M;
                            try
                            {
                                RChange = Decimal.Parse(arrayStr[9]);
                            }
#pragma warning disable CS0168 // 声明了变量“e6”,但从未使用过
                            catch (Exception e6)
#pragma warning restore CS0168 // 声明了变量“e6”,但从未使用过
                            {
                                RChange = 20.0M;
                            }
                            string Gsm  = arrayStr[10].Trim();
                            string Gprs = arrayStr[11].Trim();
                            if (Gprs != "" && gprs.Contains(Gprs))
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,GPRS与已有站点重复", lineNumber);
                                return(false);
                            }
                            else
                            {
                                gprs.Add(Gprs);
                            }

                            string BDSatellite = arrayStr[12].Trim();
                            string BDmember    = arrayStr[13].Trim();
                            float  VoltageMin  = 11;
                            try
                            {
                                VoltageMin = float.Parse(arrayStr[14]);
                            }
#pragma warning disable CS0168 // 声明了变量“er”,但从未使用过
                            catch (Exception er)
#pragma warning restore CS0168 // 声明了变量“er”,但从未使用过
                            {
                                VoltageMin = 11;
                            }

                            string maintran     = arrayStr[15].Trim();
                            string subtran      = arrayStr[16].Trim();
                            string dataprotocol = arrayStr[17].Trim();
                            //string watersensor = arrayStr[18].Trim();
                            string rainsensor     = arrayStr[19].Trim();
                            string reportinterval = arrayStr[20].Trim();

                            CEntityStation tmp = new CEntityStation();
                            tmp.StationID   = stationId;
                            tmp.SubCenterID = subcenterid;
                            tmp.StationName = stationname;
                            tmp.StationType = stationtype;
                            //tmp.DWaterBase = WBase;
                            //tmp.DWaterMax = WMax;
                            //tmp.DWaterMin = WMin;
                            //tmp.DWaterChange = WChange;
                            tmp.DRainAccuracy     = RAccuracy;
                            tmp.DRainChange       = RChange;
                            tmp.GSM               = Gsm;
                            tmp.GPRS              = Gprs;
                            tmp.BDSatellite       = BDSatellite;
                            tmp.BDMemberSatellite = BDmember;
                            tmp.DVoltageMin       = VoltageMin;
                            //判定maintrain不能为空
                            if (maintran == "SX-GPRS" || maintran == "HD-GPRS" || maintran == "GSM" || maintran == "Beidou-Normal" || maintran == "Beidou-500")
                            {
                                tmp.Maintran = maintran;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,主信道不能为空", lineNumber);
                                return(false);
                            }
                            //判定subtran不能为空
                            if (subtran == "SX-GPRS" || subtran == "HD-GPRS" || subtran == "GSM" || subtran == "Beidou-Normal" || subtran == "Beidou-500" || subtran == "无")
                            {
                                tmp.Subtran = subtran;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,备用信道不能为空", lineNumber);
                                return(false);
                            }
                            //判定数据协议不能为空
                            if (dataprotocol == "LN" || dataprotocol == "ZYJBX")
                            {
                                tmp.Datapotocol = dataprotocol;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,数据协议出错", lineNumber);
                                return(false);
                            }
                            // 判定watersensor不能为空
                            //if (watersensor == "浮子水位" || watersensor == "气泡水位" || watersensor == "压阻水位" || watersensor == "雷达水位" || watersensor == "无")
                            //{
                            //    tmp.Watersensor = CEnumHelper.WaterSensorTypeToDBStr(maintran).ToString();
                            //}
                            //else
                            //{
                            //    strErroInfo = string.Format("行:{0} 数据格式错误,水位传感器不能为空", lineNumber);
                            //    return false;
                            //}
                            // 判定Rainsensor不能为空
                            if (rainsensor == "翻斗雨量" || rainsensor == "雨雪雨量" || rainsensor == "无")
                            {
                                tmp.Rainsensor = CEnumHelper.RainSensorTypeToDBStr(rainsensor).ToString();
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,雨量传感器不能为空", lineNumber);
                                return(false);
                            }
                            //检测报讯断次
                            if (reportinterval == "1" || reportinterval == "4" || reportinterval == "8" ||
                                reportinterval == "12" || reportinterval == "24" || reportinterval == "48")
                            {
                                tmp.Reportinterval = reportinterval;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,报讯断次不能为空", lineNumber);
                                return(false);
                            }
                            tmp.Reportinterval = reportinterval;
                            m_listImport.Add(tmp);
                            flag = true;
                        }
                        else if (stationtype == EStationType.ERiverWater)
                        {
                            Decimal WBase = 0.0M;
                            try
                            {
                                WBase = Decimal.Parse(arrayStr[4]);
                            }
#pragma warning disable CS0168 // 声明了变量“e1”,但从未使用过
                            catch (Exception e1)
#pragma warning restore CS0168 // 声明了变量“e1”,但从未使用过
                            {
                                WBase = 0;
                            }
                            Decimal WMax = 100M;
                            try
                            {
                                WMax = Decimal.Parse(arrayStr[5]);
                            }
#pragma warning disable CS0168 // 声明了变量“e2”,但从未使用过
                            catch (Exception e2)
#pragma warning restore CS0168 // 声明了变量“e2”,但从未使用过
                            {
                                WMax = 100M;
                            }

                            Decimal WMin = 0.1M;
                            try
                            {
                                WMin = Decimal.Parse(arrayStr[6]);
                            }
#pragma warning disable CS0168 // 声明了变量“e3”,但从未使用过
                            catch (Exception e3)
#pragma warning restore CS0168 // 声明了变量“e3”,但从未使用过
                            {
                                WMin = 0.1M;
                            }
                            Decimal WChange = 2.2M;
                            try
                            {
                                WChange = Decimal.Parse(arrayStr[7]);
                            }
#pragma warning disable CS0168 // 声明了变量“e4”,但从未使用过
                            catch (Exception e4)
#pragma warning restore CS0168 // 声明了变量“e4”,但从未使用过
                            {
                                WChange = 2.2M;
                            }
                            //float RAccuracy = 0.5f;
                            //try
                            //{
                            //    RAccuracy = float.Parse(arrayStr[8]);
                            //}
                            //catch (Exception e5)
                            //{
                            //    RAccuracy = 0.5f;
                            //}
                            //Decimal RChange = 20.0M;
                            //try
                            //{
                            //    RChange = Decimal.Parse(arrayStr[9]);
                            //}
                            //catch (Exception e6)
                            //{
                            //    RChange = 20.0M;
                            //}
                            string Gsm = arrayStr[10].Trim();

                            string Gprs = arrayStr[11].Trim();
                            if (Gprs != "" && gprs.Contains(Gprs))
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,GPRS与已有站点重复", lineNumber);
                                return(false);
                            }
                            else
                            {
                                gprs.Add(Gprs);
                            }

                            string BDSatellite  = arrayStr[12].Trim();
                            string BDmember     = arrayStr[13].Trim();
                            float  VoltageMin   = float.Parse(arrayStr[14]);
                            string maintran     = arrayStr[15].Trim();
                            string subtran      = arrayStr[16].Trim();
                            string dataprotocol = arrayStr[17].Trim();
                            string watersensor  = arrayStr[18].Trim();
                            //string rainsensor = arrayStr[19].Trim();
                            string reportinterval = arrayStr[20].Trim();

                            CEntityStation tmp = new CEntityStation();
                            tmp.StationID    = stationId;
                            tmp.SubCenterID  = subcenterid;
                            tmp.StationName  = stationname;
                            tmp.StationType  = stationtype;
                            tmp.DWaterBase   = WBase;
                            tmp.DWaterMax    = WMax;
                            tmp.DWaterMin    = WMin;
                            tmp.DWaterChange = WChange;
                            //tmp.DRainAccuracy = RAccuracy;
                            //tmp.DRainChange = RChange;
                            tmp.GSM               = Gsm;
                            tmp.GPRS              = Gprs;
                            tmp.BDSatellite       = BDSatellite;
                            tmp.BDMemberSatellite = BDmember;
                            tmp.DVoltageMin       = VoltageMin;
                            //判定maintrain不能为空
                            if (maintran == "SX-GPRS" || maintran == "HD-GPRS" || maintran == "GSM" || maintran == "Beidou-Normal" || maintran == "Beidou-500")
                            {
                                tmp.Maintran = maintran;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,主信道不能为空", lineNumber);
                                return(false);
                            }
                            //判定subtran不能为空
                            if (subtran == "SX-GPRS" || subtran == "HD-GPRS" || subtran == "GSM" || subtran == "Beidou-Normal" || subtran == "Beidou-500" || subtran == "无")
                            {
                                tmp.Subtran = subtran;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,备用信道不能为空", lineNumber);
                                return(false);
                            }
                            //判定数据协议不能为空
                            if (dataprotocol == "LN" || dataprotocol == "ZYJBX")
                            {
                                tmp.Datapotocol = dataprotocol;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,数据协议出错", lineNumber);
                                return(false);
                            }
                            // 判定watersensor不能为空
                            if (watersensor == "浮子水位" || watersensor == "气泡水位" || watersensor == "压阻水位" || watersensor == "雷达水位" || watersensor == "无")
                            {
                                tmp.Watersensor = CEnumHelper.WaterSensorTypeToDBStr(watersensor).ToString();
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,水位传感器不能为空", lineNumber);
                                return(false);
                            }
                            // 判定Rainsensor不能为空
                            //if (rainsensor == "翻斗雨量" || rainsensor == "雨雪雨量" || rainsensor == "无")
                            //{
                            //    tmp.Rainsensor = CEnumHelper.RainSensorTypeToDBStr(maintran).ToString();
                            //}
                            //else
                            //{
                            //    strErroInfo = string.Format("行:{0} 数据格式错误,雨量传感器不能为空", lineNumber);
                            //    return false;
                            //}
                            //检测报讯断次
                            if (reportinterval == "1" || reportinterval == "4" || reportinterval == "8" ||
                                reportinterval == "12" || reportinterval == "24" || reportinterval == "48")
                            {
                                tmp.Reportinterval = reportinterval;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,报讯断次不能为空", lineNumber);
                                return(false);
                            }
                            //tmp.Reportinterval = reportinterval;
                            m_listImport.Add(tmp);
                            flag = true;
                        }
                        else if (stationtype == EStationType.EHydrology)
                        {
                            Decimal WBase = 0.0M;
                            try
                            {
                                WBase = Decimal.Parse(arrayStr[4]);
                            }
#pragma warning disable CS0168 // 声明了变量“e1”,但从未使用过
                            catch (Exception e1)
#pragma warning restore CS0168 // 声明了变量“e1”,但从未使用过
                            {
                                WBase = 0;
                            }
                            Decimal WMax = 100M;
                            try
                            {
                                WMax = Decimal.Parse(arrayStr[5]);
                            }
#pragma warning disable CS0168 // 声明了变量“e2”,但从未使用过
                            catch (Exception e2)
#pragma warning restore CS0168 // 声明了变量“e2”,但从未使用过
                            {
                                WMax = 100M;
                            }

                            Decimal WMin = 0.1M;
                            try
                            {
                                WMin = Decimal.Parse(arrayStr[6]);
                            }
#pragma warning disable CS0168 // 声明了变量“e3”,但从未使用过
                            catch (Exception e3)
#pragma warning restore CS0168 // 声明了变量“e3”,但从未使用过
                            {
                                WMin = 0.1M;
                            }
                            Decimal WChange = 2.2M;
                            try
                            {
                                WChange = Decimal.Parse(arrayStr[7]);
                            }
#pragma warning disable CS0168 // 声明了变量“e4”,但从未使用过
                            catch (Exception e4)
#pragma warning restore CS0168 // 声明了变量“e4”,但从未使用过
                            {
                                WChange = 2.2M;
                            }
                            float RAccuracy = 0.5f;
                            try
                            {
                                RAccuracy = float.Parse(arrayStr[8]);
                            }
#pragma warning disable CS0168 // 声明了变量“e5”,但从未使用过
                            catch (Exception e5)
#pragma warning restore CS0168 // 声明了变量“e5”,但从未使用过
                            {
                                RAccuracy = 0.5f;
                            }
                            Decimal RChange = 20.0M;
                            try
                            {
                                RChange = Decimal.Parse(arrayStr[9]);
                            }
#pragma warning disable CS0168 // 声明了变量“e6”,但从未使用过
                            catch (Exception e6)
#pragma warning restore CS0168 // 声明了变量“e6”,但从未使用过
                            {
                                RChange = 20.0M;
                            }
                            string Gsm = arrayStr[10].Trim();

                            string Gprs = arrayStr[11].Trim();
                            if (Gprs != "" && gprs.Contains(Gprs))
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,GPRS与已有站点重复", lineNumber);
                                return(false);
                            }
                            else
                            {
                                gprs.Add(Gprs);
                            }

                            string         BDSatellite    = arrayStr[12].Trim();
                            string         BDmember       = arrayStr[13].Trim();
                            float          VoltageMin     = float.Parse(arrayStr[14]);
                            string         maintran       = arrayStr[15].Trim();
                            string         subtran        = arrayStr[16].Trim();
                            string         dataprotocol   = arrayStr[17].Trim();
                            string         watersensor    = arrayStr[18].Trim();
                            string         rainsensor     = arrayStr[19].Trim();
                            string         reportinterval = arrayStr[20].Trim();
                            CEntityStation tmp            = new CEntityStation();
                            tmp.StationID         = stationId;
                            tmp.SubCenterID       = subcenterid;
                            tmp.StationName       = stationname;
                            tmp.StationType       = stationtype;
                            tmp.DWaterBase        = WBase;
                            tmp.DWaterMax         = WMax;
                            tmp.DWaterMin         = WMin;
                            tmp.DWaterChange      = WChange;
                            tmp.DRainAccuracy     = RAccuracy;
                            tmp.DRainChange       = RChange;
                            tmp.GSM               = Gsm;
                            tmp.GPRS              = Gprs;
                            tmp.BDSatellite       = BDSatellite;
                            tmp.BDMemberSatellite = BDmember;
                            tmp.DVoltageMin       = VoltageMin;
                            //判定maintrain不能为空
                            if (maintran == "SX-GPRS" || maintran == "HD-GPRS" || maintran == "GSM" || maintran == "Beidou-Normal" || maintran == "Beidou-500")
                            {
                                tmp.Maintran = maintran;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,主信道不能为空", lineNumber);
                                return(false);
                            }
                            //判定subtran不能为空
                            if (subtran == "SX-GPRS" || subtran == "HD-GPRS" || subtran == "GSM" || subtran == "Beidou-Normal" || subtran == "Beidou-500" || subtran == "无")
                            {
                                tmp.Subtran = subtran;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,备用信道不能为空", lineNumber);
                                return(false);
                            }
                            //判定数据协议不能为空
                            if (dataprotocol == "LN" || dataprotocol == "ZYJBX")
                            {
                                tmp.Datapotocol = dataprotocol;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,数据协议出错", lineNumber);
                                return(false);
                            }
                            // 判定watersensor不能为空
                            if (watersensor == "浮子水位" || watersensor == "气泡水位" || watersensor == "压阻水位" || watersensor == "雷达水位" || watersensor == "无")
                            {
                                tmp.Watersensor = CEnumHelper.WaterSensorTypeToDBStr(watersensor).ToString();
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,水位传感器不能为空", lineNumber);
                                return(false);
                            }
                            // 判定Rainsensor不能为空
                            if (rainsensor == "翻斗雨量" || rainsensor == "雨雪雨量" || rainsensor == "无")
                            {
                                tmp.Rainsensor = CEnumHelper.RainSensorTypeToDBStr(rainsensor).ToString();
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,雨量传感器不能为空", lineNumber);
                                return(false);
                            }
                            //检测报讯断次
                            if (reportinterval == "1" || reportinterval == "4" || reportinterval == "8" ||
                                reportinterval == "12" || reportinterval == "24" || reportinterval == "48")
                            {
                                tmp.Reportinterval = reportinterval;
                            }
                            else
                            {
                                strErroInfo = string.Format("行:{0} 数据格式错误,报讯断次不能为空", lineNumber);
                                return(false);
                            }
                            tmp.Reportinterval = reportinterval;
                            m_listImport.Add(tmp);
                            flag = true;
                        }
                    }
                    catch (Exception e)
                    {
                        strErroInfo = string.Format("行:{0} 数据格式错误", lineNumber);
                        Debug.WriteLine(e.ToString());
                        return(false);
                    }
                }
            }
            else
            {
                strErroInfo = string.Format("行:{0} 数据格式错误", lineNumber);

                return(false);
            }

            return(flag);

            //if (str.StartsWith("(") && str.EndsWith(")"))
            //{

            //    return false;
            //}
            //else
            //{
            //    // 格式不对
            //    strErroInfo = (string.Format("行:{0} 开始结束符号\"(\"\")\"格式错误", lineNumber));
            //    return false;
            //}
        }
コード例 #18
0
        public bool Parse_New(string msg, out List <CUpReport> upReport)
        {
            upReport = new List <CUpReport>();
            CUpReport report  = null;
            var       msgSegs = msg.Split(CSpecialChars.BALNK_CHAR);

            foreach (var msgItem in msgSegs)
            {
                try
                {
                    string data = string.Empty;
                    if (!ProtocolHelpers.DeleteSpecialChar(msgItem, out data))
                    {
                        return(false);
                    }

                    //  解析站点ID
                    String stationID = data.Substring(0, 4);
                    //  解析通信类别
                    String type = data.Substring(4, 2);
                    //  解析报文类别
                    EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(data.Substring(6, 2));
                    //  解析站点类别
                    EStationType stationType = ProtocolHelpers.ProtoStr2StationType(data.Substring(8, 2));
                    //  解析包序号
                    string packageNum = data.Substring(10, 4);
                    // 解析接收时间
                    DateTime recvTime = new DateTime(
                        year: Int32.Parse("20" + data.Substring(14, 2)),  //年
                        month: Int32.Parse(data.Substring(16, 2)),        //月
                        day: Int32.Parse(data.Substring(18, 2)),          //日
                        hour: Int32.Parse(data.Substring(20, 2)),         //时
                        minute: Int32.Parse(data.Substring(22, 2)),       //分
                        second: 0
                        );

                    //  解析数据
                    CUpData upData = new CUpData();

                    string item = data.Substring(24);

                    while (item.Length > 2)
                    {
                        try
                        {
                            //  数据分为两部分
                            //  2 Byte 指令  +  剩下的为数据,数据的长度>= 1
                            //  解析指令类型param
                            ENewParam param = NewTypeMaps.NewParamMap.FindKey(item.Substring(0, 2));
                            //  如果接收到的数据段长度大于2,表示对应的字段有值
                            //  默认为String.Empty
                            string info   = string.Empty;
                            int    length = Int32.Parse(NewTypeMaps.NewParamLengthMap.FindValue(param));
                            info = item.Substring(2, length);
                            item = item.Substring(2 + length);
                            if (String.IsNullOrEmpty(info) && ProtocolHelpers.isLegalCharacters(info))
                            {
                                continue;
                            }

                            switch (param)
                            {
                            case ENewParam.Rain:
                                upData.Rain = Decimal.Parse(info); break;

                            case ENewParam.Water1:
                                upData.Water1 = Decimal.Parse(info) * (Decimal)0.01; break;

                            case ENewParam.Water2:
                                upData.Water2 = Decimal.Parse(info) * (Decimal)0.01; break;

                            case ENewParam.Clock:
                                int year   = Int32.Parse("20" + info.Substring(0, 2));
                                int month  = Int32.Parse(info.Substring(2, 2));
                                int day    = Int32.Parse(info.Substring(4, 2));
                                int hour   = Int32.Parse(info.Substring(6, 2));
                                int minute = Int32.Parse(info.Substring(8, 2));
                                int second = Int32.Parse(info.Substring(10, 2));
                                upData.Time = new DateTime(year, month, day, hour, minute, second);
                                break;

                            case ENewParam.Voltage:
                                upData.Voltage = (Decimal.Parse(info) * (Decimal)0.01); break;

                            case ENewParam.WaterInterval:
                                int WaterInterval = Int32.Parse(info); break;

                            case ENewParam.RainInterval:
                                int RainInterval = Int32.Parse(info); break;

                            case ENewParam.ETimedNum:
                                int ETimedNum = Int32.Parse(info); break;

                            case ENewParam.ESaveNum:
                                int ESaveNum = Int32.Parse(info); break;

                            case ENewParam.WaterBase1:
                                Decimal WaterBase1 = Decimal.Parse(info) * (Decimal)0.01; break;

                            case ENewParam.WaterBase2:
                                Decimal WaterBase2 = Decimal.Parse(info) * (Decimal)0.01; break;

                            case ENewParam.MannualWater:
                                DateTime MannualWaterTime = new DateTime(
                                    year: Int32.Parse(info.Substring(0, 2)),
                                    month: Int32.Parse(info.Substring(2, 2)),
                                    day: Int32.Parse(info.Substring(4, 2)),
                                    hour: Int32.Parse(data.Substring(6, 2)),
                                    minute: Int32.Parse(data.Substring(8, 2)),
                                    second: 0
                                    );
                                Decimal MannualWater = Decimal.Parse(info.Substring(10, 6)) * (Decimal)0.01;
                                upData.WaterList.Add(MannualWaterTime, MannualWater);
                                break;

                            case ENewParam.WaterAddRange:
                                Decimal WaterAddRange = Decimal.Parse(info); break;

                            case ENewParam.RainAddRange:
                                Decimal RainAddRange = Decimal.Parse(info); break;

                            case ENewParam.DestPhoneNum1:
                                string DestPhoneNum1 = info; break;

                            case ENewParam.DestPhoneNum2:
                                string DestPhoneNum2 = info; break;

                            case ENewParam.TerminalNum:
                                string TerminalNum = info; break;

                            case ENewParam.RespWave:
                                string RespWave = info; break;

                            case ENewParam.WavePost:
                                int WavePost = Int32.Parse(info); break;

                            case ENewParam.WorkStatus:
                                EWorkStatus WorkStatus = OldTypeMaps.WorkStatus4ProtoMap.FindKey(info); break;

                            case ENewParam.StandbyChannel:
                                ChannelType MainChannel = OldTypeMaps.ChannelType4ProtoMap.FindKey(info);
                                System.Diagnostics.Debug.Assert(MainChannel != ChannelType.None, "主用信道不能为NONE");
                                ChannelType ViceChannel = OldTypeMaps.ChannelType4ProtoMap.FindKey(info.Substring(2, 2));
                                break;

                            case ENewParam.GSMSignal:
                                Decimal GSMSignal = Decimal.Parse(info); break;

                            case ENewParam.MannualFlow:
                                DateTime MannualFlowTime = new DateTime(
                                    year: Int32.Parse(info.Substring(0, 2)),
                                    month: Int32.Parse(info.Substring(2, 2)),
                                    day: Int32.Parse(info.Substring(4, 2)),
                                    hour: Int32.Parse(data.Substring(6, 2)),
                                    minute: Int32.Parse(data.Substring(8, 2)),
                                    second: 0
                                    );
                                upData.Time      = MannualFlowTime;
                                upData.WaterFlow = Decimal.Parse(info.Substring(10, 6)) * (Decimal)0.01;
                                break;

                            case ENewParam.GSMElec:
                                EGSMElec GSMElec = OldTypeMaps.GSMElec4ProtoMap.FindKey(info); break;

                            case ENewParam.WaterTemp:
                                upData.WaterTemp = Decimal.Parse(info) * (Decimal)0.1; break;

                            case ENewParam.FourWaterTemp:
                                var      waterTempList = new Dictionary <DateTime, Decimal>();
                                DateTime WaterTempTime = recvTime;
                                for (int i = 1; i <= 4; i++)
                                {
                                    Decimal WaterTemp = Decimal.Parse(info.Substring(0, 4)) * (Decimal)0.1;
                                    WaterTempTime = recvTime.AddHours(-6 * (i - 1));
                                    info          = info.Substring(4);
                                    waterTempList.Add(WaterTempTime, WaterTemp);
                                }
                                upData.TempList = waterTempList;
                                break;

                            case ENewParam.DataPackNum:
                                int DataPackNum = Int32.Parse(info); break;

                            default: break;
                            }
                        }
                        catch (Exception e)
                        {
                            System.Diagnostics.Debug.WriteLine("数据:" + msg);
                            System.Diagnostics.Debug.WriteLine("下行指令解析数据不完整!" + e.Message);
                            break;
                        }
                        //填充基本数据
                        report = new CUpReport()
                        {
                            Stationid   = stationID,
                            Type        = type,
                            ReportType  = reportType,
                            StationType = stationType,
                            RecvTime    = recvTime,
                            PackageNum  = packageNum,
                            Data        = upData
                        };
                        upReport.Add(report);
                    }
                }
                catch (Exception exp)
                {
                    System.Diagnostics.Debug.WriteLine(exp.Message);
                    continue;
                }
            }
            return(true);
        }
コード例 #19
0
        public bool Parse_Old(string msg, out List <CUpReport> upReport)
        {
            upReport = new List <CUpReport>();
            var msgSegs = msg.Split(CSpecialChars.BALNK_CHAR);

            foreach (var msgItem in msgSegs)
            {
                try
                {
                    CUpReport report = null;
                    string    data   = string.Empty;
                    if (!ProtocolHelpers.DeleteSpecialChar(msgItem, out data))
                    {
                        return(false);
                    }

                    //  解析站点ID
                    String StationID = data.Substring(0, 4);
                    //  解析通信类别
                    String type = data.Substring(4, 2);
                    //  解析报文类别
                    EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(data.Substring(6, 2));
                    //  解析站点类别
                    EStationType stationType = ProtocolHelpers.ProtoStr2StationType(data.Substring(8, 2));
                    // 解析接收时间
                    DateTime recvTime = new DateTime(
                        year: Int32.Parse("20" + data.Substring(10, 2)),              //年
                        month: Int32.Parse(data.Substring(12, 2)),                    //月
                        day: Int32.Parse(data.Substring(14, 2)),                      //日
                        hour: Int32.Parse(data.Substring(16, 2)),                     //时
                        minute: Int32.Parse(data.Substring(18, 2)),                   //分
                        second: 0
                        );
                    //  解析包序号
                    string packageNum = data.Substring(20, 2);
                    //  解析数据
                    string  item   = data.Substring(22);
                    CUpData upData = new CUpData();

                    while (item.Length > 2)
                    {
                        try
                        {
                            //  数据分为两部分
                            //  2 Byte 指令  +  剩下的为数据,数据的长度>= 1
                            //  解析指令类型param
                            EOldParam param = OldTypeMaps.OldParamMap.FindKey(item.Substring(0, 2));
                            //  如果接收到的数据段长度大于2,表示对应的字段有值
                            //  默认为String.Empty
                            string info   = string.Empty;
                            int    length = Int32.Parse(OldTypeMaps.OldParamLengthMap.FindValue(param));
                            info = item.Substring(2);
                            if (String.IsNullOrEmpty(info) && ProtocolHelpers.isLegalCharacters(info))
                            {
                                continue;
                            }

                            switch (param)
                            {
                            case EOldParam.Rain:
                                upData.Rain = Decimal.Parse(info.Substring(0, length)); break;

                            case EOldParam.Water:
                                upData.Water1 = Decimal.Parse(info.Substring(0, length)) * (Decimal)0.01; break;

                            case EOldParam.WaterTimed:
                                //  将水位定时报中的数据储存到list中
                                var waterList = new Dictionary <DateTime, Decimal>();
                                int roundNum  = Int32.Parse(info.Substring(0, 2));
                                var watersegs = info;
                                if (roundNum == 01 || roundNum == 02)
                                {
                                    roundNum  = roundNum == 01 ? 12 : 24;
                                    length    = roundNum == 24 ? 96 : 48;
                                    watersegs = info.Substring(2);
                                }
                                else
                                {
                                    roundNum = 12;
                                }
                                recvTime = recvTime.AddMinutes(-5 * roundNum);

                                for (int i = 1; i <= roundNum; i++)
                                {
                                    DateTime WaterTime  = recvTime.AddMinutes(5);
                                    Decimal  TimedWater = Decimal.Parse(watersegs.Substring(0, 4)) * (Decimal)0.01;
                                    waterList.Add(WaterTime, TimedWater);
                                    watersegs = watersegs.Substring(4);
                                }
                                upData.WaterList = waterList;
                                break;

                            case EOldParam.HalfVoltage:
                                //  将电压值存入list中
                                var      halfVoltageList = new Dictionary <DateTime, Decimal>();
                                DateTime HalfVoltageTime = recvTime;
                                for (int i = 1; i <= 12; i++)
                                {
                                    Decimal Voltage = Decimal.Parse(info.Substring(0, 4)) * (Decimal)0.01;
                                    HalfVoltageTime = recvTime.AddHours(-1 * (i - 1));
                                    halfVoltageList.Add(HalfVoltageTime, Voltage);
                                    info = info.Substring(4);
                                }
                                upData.VoltageList = halfVoltageList;
                                break;

                            case EOldParam.Voltage:
                                upData.Voltage = (Decimal.Parse(info.Substring(0, length)) * (Decimal)0.01); break;

                            case EOldParam.AllVoltage:
                                //  将电压值存入list中
                                var      allVoltageList = new Dictionary <DateTime, Decimal>();
                                DateTime AllVoltageTime = recvTime;
                                for (int i = 1; i <= 24; i++)
                                {
                                    Decimal Voltage = Decimal.Parse(info.Substring(0, 4)) * (Decimal)0.01;
                                    AllVoltageTime = recvTime.AddHours(-1 * (i - 1));
                                    allVoltageList.Add(AllVoltageTime, Voltage);
                                    info = info.Substring(4);
                                }
                                upData.VoltageList = allVoltageList;
                                break;

                            case EOldParam.Interval:
                                int Interval = Int32.Parse(info.Substring(0, length)); break;

                            case EOldParam.ESaveNum:
                                int ESaveNum = Int32.Parse(info.Substring(0, length)); break;

                            case EOldParam.ETimedNum:
                                int ETimedNum = Int32.Parse(info.Substring(0, length)); break;

                            case EOldParam.WaterBase:
                                decimal WaterBase = Decimal.Parse(info.Substring(0, length)) * (Decimal)0.01; break;

                            case EOldParam.MannualWater:
                                DateTime MannualWaterTime = new DateTime(
                                    year: Int32.Parse(info.Substring(0, 2)),
                                    month: Int32.Parse(info.Substring(2, 2)),
                                    day: Int32.Parse(info.Substring(4, 2)),
                                    hour: Int32.Parse(data.Substring(6, 2)),
                                    minute: Int32.Parse(data.Substring(8, 2)),
                                    second: 0
                                    );
                                recvTime = MannualWaterTime;
                                Decimal MannualWater = Decimal.Parse(info.Substring(10, 6)) * (Decimal)0.01;
                                upData.WaterList.Add(MannualWaterTime, MannualWater);
                                break;

                            case EOldParam.WaterAddRange:
                                Decimal WaterAddRange = Decimal.Parse(info.Substring(0, length)); break;

                            case EOldParam.RainAddRange:
                                Decimal RainAddRange = Decimal.Parse(info.Substring(0, length)); break;

                            case EOldParam.DestPhoneNum:
                                string DestPhoneNum = info.Substring(0, length); break;

                            case EOldParam.TerminalNum:
                                string TerminalNum = info.Substring(0, length); break;

                            case EOldParam.RespWave:
                                string RespWave = info.Substring(0, length); break;

                            case EOldParam.WavePost:
                                int WavePost = Int32.Parse(info.Substring(0, length)); break;

                            case EOldParam.WorkStatus:
                                EWorkStatus WorkStatus = OldTypeMaps.WorkStatus4ProtoMap.FindKey(info.Substring(0, length)); break;

                            case EOldParam.StandbyChannel:
                                ChannelType MainChannel = OldTypeMaps.ChannelType4ProtoMap.FindKey(info.Substring(0, 2));
                                System.Diagnostics.Debug.Assert(MainChannel != ChannelType.None, "主用信道不能为NONE");
                                ChannelType ViceChannel = OldTypeMaps.ChannelType4ProtoMap.FindKey(info.Substring(2, 2));
                                break;

                            case EOldParam.GSMSignal:
                                Decimal GSMSignal = Decimal.Parse(info.Substring(0, length)); break;

                            case EOldParam.MannualFlow:
                                DateTime MannualFlowTime = new DateTime(
                                    year: Int32.Parse(info.Substring(0, 2)),
                                    month: Int32.Parse(info.Substring(2, 2)),
                                    day: Int32.Parse(info.Substring(4, 2)),
                                    hour: Int32.Parse(data.Substring(6, 2)),
                                    minute: Int32.Parse(data.Substring(8, 2)),
                                    second: 0
                                    );
                                recvTime         = MannualFlowTime;
                                upData.WaterFlow = Decimal.Parse(info.Substring(10, 6)) * (Decimal)0.01;
                                break;

                            case EOldParam.GSMElec:
                                EGSMElec GSMElec = OldTypeMaps.GSMElec4ProtoMap.FindKey(info.Substring(0, length)); break;

                            case EOldParam.WaterTemp:
                                upData.WaterTemp = Decimal.Parse(info.Substring(0, length)) * (Decimal)0.1; break;

                            case EOldParam.DataPackNum:
                                int dataPackNum = Int32.Parse(info.Substring(0, length)); break;

                            default: break;
                            }
                            item = item.Substring(2 + length);
                        }
                        catch (Exception e)
                        {
                            System.Diagnostics.Debug.WriteLine("数据:" + msg);
                            System.Diagnostics.Debug.WriteLine("下行指令解析数据不完整!" + e.Message);
                            break;
                        }

                        //填充基本数据
                        report = new CUpReport()
                        {
                            Stationid   = StationID,
                            Type        = type,
                            ReportType  = reportType,
                            StationType = stationType,
                            RecvTime    = recvTime,
                            PackageNum  = packageNum,
                            Data        = upData
                        };
                        upReport.Add(report);
                    }
                }
                catch (Exception exp)
                {
                    System.Diagnostics.Debug.WriteLine(exp.Message);
                    continue;
                }
            }
            return(true);
        }
コード例 #20
0
        /// <summary>
        /// 针对后面的连续数据项,逐个数据项进行填充,最后将数据结果作为list返回。
        /// </summary>
        /// <param name="list">原数据字符串</param>
        /// <param name="recvtime">接收数据时间,作为数据项的起始时间逐个往前推算。</param>
        /// <param name="voltage">电压值,每个数据项都要填充上电压信息</param>
        /// <param name="stationType">站点类型,作为读取数据部分的依据:需要读取雨量还是水位信息。</param>
        /// <returns>列表形式的数据集</returns>
        private List <CReportData> GetData(string list, DateTime recvtime, Decimal voltage, EStationType stationType)
        {
            var    result = new List <CReportData>();
            string tmp;

            for (int i = 0; i < 12; i++)
            {
                CReportData data = new CReportData();
                tmp = list.Substring(i * 10, 10);
                if (FillData(tmp, recvtime, voltage, stationType, out data))
                {
                    result.Add(data);
                }
                recvtime = recvtime.AddMinutes(-5);
            }
            return(result);
        }
コード例 #21
0
        /// <summary>
        /// #S1209110500705141749 000.87001.06000.98000.76000.82
        /// #S1209110500705141755 000.67000.96000.90
        /// </summary>
        /// <param name="rawStr"></param>
        /// <param name="soil"></param>
        /// <returns></returns>
        ///
        public bool Parse(string resp, out CEntitySoilData soil, out CReportStruct report)
        {
            soil   = null;
            report = null;
            report = new CReportStruct();
            try
            {
                string rawStr = resp.Trim();

                if (rawStr.StartsWith("#S1"))
                {
                    soil = new CEntitySoilData();
                    //  终端机号
                    soil.StrDeviceNumber = rawStr.Substring(3, 8);

                    //  数据采集时间
                    int year   = Int32.Parse("20" + rawStr.Substring(11, 2));
                    int month  = Int32.Parse(rawStr.Substring(13, 2));
                    int day    = Int32.Parse(rawStr.Substring(15, 2));
                    int hour   = Int32.Parse(rawStr.Substring(17, 2));
                    int minute = Int32.Parse(rawStr.Substring(19, 2));
                    soil.DataTime = new DateTime(year, month, day, hour, minute, 0);

                    // #S1209110500705141749 000.87001.06000.98000.76000.82
                    if (rawStr.Length.Equals(22 + 30))
                    {
                        soil.Voltage10 = float.Parse(rawStr.Substring(22, 6));
                        soil.Voltage20 = float.Parse(rawStr.Substring(28, 6));
                        soil.Voltage30 = float.Parse(rawStr.Substring(34, 6));
                        soil.Voltage40 = float.Parse(rawStr.Substring(40, 6));
                        soil.Voltage60 = float.Parse(rawStr.Substring(46, 6));
                    }
                    // #S1209110500705141755 000.67000.96000.90
                    if (rawStr.Length.Equals(22 + 18))
                    {
                        soil.Voltage10 = float.Parse(rawStr.Substring(22, 6));
                        soil.Voltage20 = float.Parse(rawStr.Substring(28, 6));
                        soil.Voltage40 = float.Parse(rawStr.Substring(34, 6));
                    }
                    return(true);
                }
                else if (rawStr.StartsWith("$") && "1G" == rawStr.Substring(5, 2))
                {
                    soil = new CEntitySoilData();
                    string StationID = rawStr.Substring(1, 4);
                    soil.StationID = StationID;
                    //  $70521G25142523453124
                    string cmd = rawStr.Substring(7, 2);
                    if ("25" == cmd)
                    {
                        var now = DateTime.Now;
                        soil.DataTime = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0);
                        //  $70521G25142523453124
                        if (21 == rawStr.Length)
                        {
                            soil.Voltage10 = float.Parse(rawStr.Substring(9, 4)) / 100;
                            soil.Voltage20 = float.Parse(rawStr.Substring(13, 4)) / 100;
                            soil.Voltage40 = float.Parse(rawStr.Substring(17, 4)) / 100;
                        }
                        else if (29 == rawStr.Length)//  $70521G2514252345312412345678
                        {
                            soil.Voltage10 = float.Parse(rawStr.Substring(9, 4)) / 100;
                            soil.Voltage20 = float.Parse(rawStr.Substring(13, 4)) / 100;
                            soil.Voltage30 = float.Parse(rawStr.Substring(17, 4)) / 100;
                            soil.Voltage40 = float.Parse(rawStr.Substring(21, 4)) / 100;
                            soil.Voltage60 = float.Parse(rawStr.Substring(25, 4)) / 100;
                        }
                        else
                        {
                            return(false);
                        }
                        return(true);
                    }
                    else if ("22" == cmd || "21" == cmd)
                    {
                        //  $70521G2217yymmddhhmm12345600011256000100020003
                        EStationType stationType = EStationType.EHydrology;
                        decimal      water       = decimal.Parse(rawStr.Substring(21, 6)) / 100;
                        decimal      rain        = decimal.Parse(rawStr.Substring(27, 4));
                        decimal      volegate    = decimal.Parse(rawStr.Substring(31, 4)) / 100;
                        CReportData  reportData  = new CReportData();
                        switch (rawStr.Substring(9, 2))
                        {
                        case "04":
                            stationType = EStationType.ESoil;
                            if ("21" == cmd)
                            {
                                report.ReportType = EMessageType.EAdditional;
                            }
                            if ("22" == cmd)
                            {
                                report.ReportType = EMessageType.ETimed;
                            }
                            break;

                        case "05":
                            stationType       = EStationType.ESoilRain;
                            reportData.Rain   = rain;
                            reportData.Voltge = volegate;
                            break;

                        case "06":
                        case "16":
                            stationType       = EStationType.ESoilWater;
                            reportData.Water  = water;
                            reportData.Voltge = volegate;
                            break;

                        case "07":
                        case "17":
                            reportData.Rain   = rain;
                            reportData.Water  = water;
                            reportData.Voltge = volegate;
                            stationType       = EStationType.ESoilHydrology;
                            break;

                        default: throw new Exception(); break;
                        }

                        int      year        = Int32.Parse("20" + rawStr.Substring(11, 2));
                        int      month       = Int32.Parse(rawStr.Substring(13, 2));
                        int      day         = Int32.Parse(rawStr.Substring(15, 2));
                        int      hour        = Int32.Parse(rawStr.Substring(17, 2));
                        int      minute      = Int32.Parse(rawStr.Substring(19, 2));
                        DateTime collectTime = new DateTime(year, month, day, hour, minute, 0);

                        soil.DataTime = collectTime;

                        //gm  20161030  下1行
                        soil.DVoltage = volegate;

                        if (47 == rawStr.Length)
                        {
                            //  $7052 1G2217 yymmddhhmm 123456 0001 1256 0001 0002 0003
                            soil.Voltage10 = float.Parse(rawStr.Substring(35, 4)) / 100;
                            soil.Voltage20 = float.Parse(rawStr.Substring(39, 4)) / 100;
                            soil.Voltage40 = float.Parse(rawStr.Substring(43, 4)) / 100;

                            //  report = new CReportStruct();
                            report.Datas       = new List <CReportData>();
                            report.Stationid   = StationID;
                            report.StationType = stationType;
                            report.RecvTime    = DateTime.Now;
                            reportData.Time    = DateTime.Now;
                            report.Datas.Add(reportData);
                        }
                        else if (47 + 8 == rawStr.Length)
                        {
                            //  $70521G2217yymmddhhmm123456 0001 1256 0001 0002 0003 0004 0005
                            soil.Voltage10 = float.Parse(rawStr.Substring(35, 4)) / 100;
                            soil.Voltage20 = float.Parse(rawStr.Substring(39, 4)) / 100;
                            soil.Voltage30 = float.Parse(rawStr.Substring(43, 4)) / 100;
                            soil.Voltage40 = float.Parse(rawStr.Substring(47, 4)) / 100;
                            soil.Voltage60 = float.Parse(rawStr.Substring(51, 4)) / 100;

                            report             = new CReportStruct();
                            report.Stationid   = StationID;
                            report.StationType = stationType;
                            report.RecvTime    = DateTime.Now;
                            reportData.Time    = DateTime.Now;
                            report.Datas       = new List <CReportData>();
                            report.Datas.Add(reportData);
                        }
                        else
                        {
                            return(false);
                        }
                        return(true);
                    }
                }
            }
            catch (Exception exp) { }
            return(false);
        }
コード例 #22
0
ファイル: DownParser.cs プロジェクト: radtek/HydroWh
 public string BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype)
 {
     throw new NotImplementedException();
 }
コード例 #23
0
        /// <summary>
        /// 对下游局报讯报文进行处理
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="report"></param>
        /// <returns></returns>
        public bool Parse(String msg, out CReportStruct report)
        {
            //$30151G22010201120326001297065535323906553532390655353239065535323906553532390655353239065535323906553532390655353239065535323906553532390655353239
            report = null;
            try
            {
                string data = string.Empty;
                //卫星信道报
                if (msg.StartsWith("$"))
                {
                    data = ProtocolHelpers.dealBCD(data);
                }
                //去除起始符'$'
                if (!ProtocolHelpers.DeleteSpecialChar(msg, out data))
                {
                    return(false);
                }
                //站号(4位)
                string StationId = data.Substring(0, 4);
                //类别(2位):1G
                string type = data.Substring(4, 2);
                //报类(2位):22-定时报
                string reportTypeString = data.Substring(6, 2);
                //站类(2位)
                string stationTypeString = data.Substring(8, 2);
                ///0201120326001297065535323906553532390655353239065535323906553532390655353239065535323906553532390655353239065535323906553532390655353239
                //站类区别处理
                switch (reportTypeString)
                {
                //定时报
                case "22":
                {
                    //获取报类
                    EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString);
                    //获取站类
                    EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString);
                    //包序号暂不处理
                    string packageNum = data.Substring(10, 4);
                    //接收时间
                    DateTime recvTime = new DateTime(
                        year: Int32.Parse("20" + data.Substring(14, 2)),
                        month: Int32.Parse(data.Substring(16, 2)),
                        day: Int32.Parse(data.Substring(18, 2)),
                        hour: Int32.Parse(data.Substring(20, 2)),
                        minute: 0,
                        second: 0
                        );
                    //电压值:1297=12.97V
                    Decimal voltage = Decimal.Parse(data.Substring(22, 4)) * (Decimal)0.01;
                    //数据段
                    var lists = data.Substring(26).Replace(" ", "");
                    var datas = GetData(lists, recvTime, voltage, stationType);
                    report = new CReportStruct()
                    {
                        Stationid   = StationId,
                        Type        = type,
                        ReportType  = reportType,
                        StationType = stationType,
                        RecvTime    = recvTime,
                        Datas       = datas
                    };
                    break;
                }

                //报讯系统加报
                case "21":
                {
                    if (data.Substring(8, 2) != "11")
                    {
                        //  解析报文类别
                        EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString);
                        //  解析站点类别
                        EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString);
                        //  解析接收时间
                        DateTime recvTime = new DateTime(
                            year: Int32.Parse("20" + data.Substring(10, 2)), //年
                            month: Int32.Parse(data.Substring(12, 2)),       //月
                            day: Int32.Parse(data.Substring(14, 2)),         //日
                            hour: Int32.Parse(data.Substring(16, 2)),        //时
                            minute: Int32.Parse(data.Substring(18, 2)),      //分
                            second: 0                                        //秒
                            );

                        var lists = data.Substring(20).Split(CSpecialChars.BALNK_CHAR);
                        var datas = GetAddData(lists, recvTime, stationType);

                        report = new CReportStruct()
                        {
                            Stationid   = StationId,
                            Type        = type,
                            ReportType  = reportType,
                            StationType = stationType,
                            RecvTime    = recvTime,
                            Datas       = datas
                        };
                    }
                    else
                    {
                        //1G2111为人工水位

                        //  解析报文类别
                        EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString);
                        //  解析站点类别
                        EStationType stationType = EStationType.ERiverWater;
                        //  解析接收时间
                        DateTime recvTime = new DateTime(
                            year: DateTime.Now.Year,                    //年
                            month: DateTime.Now.Month,                  //月
                            day: DateTime.Now.Day,                      //日
                            hour: Int32.Parse(data.Substring(10, 2)),   //时
                            minute: Int32.Parse(data.Substring(12, 2)), //分
                            second: 0                                   //秒
                            );

                        var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR);
                        var datas = GetMannualData(lists, recvTime);

                        //处理datas为空情况
                        if (datas.Count == 0)
                        {
                            return(false);
                        }

                        report = new CReportStruct()
                        {
                            Stationid   = StationId,
                            Type        = type,
                            ReportType  = reportType,
                            StationType = stationType,
                            RecvTime    = recvTime,
                            Datas       = datas
                        };
                    }
                    break;
                }

                //人工报
                case "23":
                {
                    //1G23为人工流量
                    //  解析报文类别
                    EMessageType reportType = EMessageType.EMannual;
                    //  解析站点类别
                    EStationType stationType = EStationType.ERiverWater;
                    //  解析接收时间
                    DateTime recvTime = new DateTime(
                        year: DateTime.Now.Year,                    //年
                        month: DateTime.Now.Month,                  //月
                        day: Int32.Parse(data.Substring(8, 2)),     //日
                        hour: Int32.Parse(data.Substring(10, 2)),   //时
                        minute: Int32.Parse(data.Substring(12, 2)), //分
                        second: 0                                   //秒
                        );

                    var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR);
                    var datas = GetWaterData(lists, recvTime);

                    report = new CReportStruct()
                    {
                        Stationid   = StationId,
                        Type        = type,
                        ReportType  = reportType,
                        StationType = stationType,
                        RecvTime    = recvTime,
                        Datas       = datas
                    };
                    break;
                }
                }
                return(true);
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("数据:" + msg);
                System.Diagnostics.Debug.WriteLine("数据协议解析不完整" + e.Message);
                return(false);
            }
        }
コード例 #24
0
        public bool DealData(string msg, string reportType, out CReportStruct report)
        {
            EStationType type = new EStationType();

            report = new CReportStruct();
            try
            {
                string data = msg;
                // 丢弃流水号(4位)
                data = data.Substring(4);
                // 丢弃发报时间(12位)
                DateTime sendTime = new DateTime(
                    year: int.Parse("20" + data.Substring(0, 2)),
                    month: int.Parse(data.Substring(2, 2)),
                    day: int.Parse(data.Substring(4, 2)),
                    hour: int.Parse(data.Substring(6, 2)),
                    minute: int.Parse(data.Substring(8, 2)),
                    second: int.Parse(data.Substring(10, 2))
                    );
                //删除发送时间
                data = data.Substring(12);
                //删除ST  站号引导符号
                data = data.Substring(2);
                //删除空格
                data = data.Substring(1);
                //获取站点ID
                string stationId = data.Substring(0, 10);
                //删除站点ID
                data = data.Substring(10);
                //删除空格
                data = data.Substring(1);
                string stationTypeString = data.Substring(0, 1);
                if (stationTypeString == "H")
                {
                    type = EStationType.EH;
                }
                if (stationTypeString == "P")
                {
                    type = EStationType.ERainFall;
                }
                //删除站点类型
                data = data.Substring(1);

                // report中的数据初始化
                List <CReportData> datas = new List <CReportData>();
                TimeSpan           span  = new TimeSpan(0);

                DateTime dataTime = sendTime;
                //int dataAccuracyLength;
                //int dataLength;
                //Decimal dataAccuracy;
                //Decimal dayRain;

                Nullable <Decimal> diffRain   = null;
                Nullable <Decimal> totalRain  = null;
                Nullable <Decimal> waterStage = null;
                Nullable <Decimal> voltage    = null;
                //string dataDefine, dataDefine1, dataDefine2;
                //int flag = 0;
                if (data.Length >= 10)
                {
                    string[] dataArr = Regex.Split(data, "TT", RegexOptions.IgnoreCase);
                    for (int i = 0; i < dataArr.Length; i++)
                    {
                        string         oneGram   = dataArr[i].Trim();
                        List <decimal> rainList  = new List <decimal>();
                        List <decimal> waterList = new List <decimal>();
                        if (oneGram.Length < 10)
                        {
                            continue;
                        }
                        dataTime = new DateTime(
                            year: int.Parse("20" + oneGram.Substring(0, 2)),
                            month: int.Parse(oneGram.Substring(2, 2)),
                            day: int.Parse(oneGram.Substring(4, 2)),
                            hour: int.Parse(oneGram.Substring(6, 2)),
                            minute: int.Parse(oneGram.Substring(8, 2)),
                            second: 0
                            );
                        //观测时间引导符
                        if (oneGram.Contains("TT"))
                        {
                        }
                        if (oneGram.Contains("RGZS"))
                        {
                        }
                        if (oneGram.Contains("PIC"))
                        {
                        }
                        if (oneGram.Contains("DRP"))
                        {
                            int    index       = oneGram.IndexOf("DRP");
                            string rainListStr = oneGram.Substring(index + 4, 24).Trim();
                            for (int j = 0; j < 12; j++)
                            {
                                rainList.Add((System.Int32.Parse(rainListStr.Substring(j * 2, 2), System.Globalization.NumberStyles.HexNumber)) * (decimal)(0.1));
                            }
                        }
                        if (oneGram.Contains("DRZ"))
                        {
                        }
                        if (oneGram.Contains("DRZ1"))
                        {
                            int    index        = oneGram.IndexOf("DRZ1");
                            string waterListStr = oneGram.Substring(index + 5, 48).Trim();
                            for (int j = 0; j < 12; j++)
                            {
                                waterList.Add((System.Int32.Parse(waterListStr.Substring(j * 4, 4), System.Globalization.NumberStyles.HexNumber)) * (decimal)0.01);
                            }
                        }
                        if (oneGram.Contains("DATA"))
                        {
                        }
                        if (oneGram.Contains("AC"))
                        {
                        }
                        if (oneGram.Contains("AI"))
                        {
                        }
                        if (oneGram.Contains("C"))
                        {
                        }
                        if (oneGram.Contains("DRxnn"))
                        {
                        }
                        if (oneGram.Contains("DT"))
                        {
                        }
                        if (oneGram.Contains("ED"))
                        {
                        }
                        if (oneGram.Contains("EJ"))
                        {
                        }
                        if (oneGram.Contains("FL"))
                        {
                        }
                        if (oneGram.Contains("GH"))
                        {
                        }
                        if (oneGram.Contains("GN"))
                        {
                        }
                        if (oneGram.Contains("GS"))
                        {
                        }
                        if (oneGram.Contains("GT"))
                        {
                        }
                        if (oneGram.Contains("GTP"))
                        {
                        }
                        if (oneGram.Contains("H"))
                        {
                        }
                        if (oneGram.Contains("HW"))
                        {
                        }
                        if (oneGram.Contains("M10"))
                        {
                        }
                        if (oneGram.Contains("M20"))
                        {
                        }
                        if (oneGram.Contains("M30"))
                        {
                        }
                        if (oneGram.Contains("M40"))
                        {
                        }
                        if (oneGram.Contains("M50"))
                        {
                        }
                        if (oneGram.Contains("M60"))
                        {
                        }
                        if (oneGram.Contains("M80"))
                        {
                        }
                        if (oneGram.Contains("M100"))
                        {
                        }
                        if (oneGram.Contains("MST"))
                        {
                        }
                        if (oneGram.Contains("P1"))
                        {
                        }
                        if (oneGram.Contains("P2"))
                        {
                        }
                        if (oneGram.Contains("P3"))
                        {
                        }
                        if (oneGram.Contains("P6"))
                        {
                        }
                        if (oneGram.Contains("P12"))
                        {
                        }
                        //日降水量
                        if (oneGram.Contains("PD"))
                        {
                        }
                        //当前降水量
                        if (oneGram.Contains("PJ"))
                        {
                            int      index          = oneGram.IndexOf("PJ");
                            string   endStr         = oneGram.Substring(index).Trim();
                            string[] endStrList     = endStr.Split(' ');
                            string   diffRainString = endStrList[1];
                            try
                            {
                                diffRain = Decimal.Parse(diffRainString);
                            }
                            catch (Exception e)
                            {
                                System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                            }
                        }
                        //1分钟时段降水量
                        if (oneGram.Contains("PN01"))
                        {
                        }
                        //5分钟时段降水量
                        if (oneGram.Contains("PN05"))
                        {
                        }
                        //10分钟时段降水量
                        if (oneGram.Contains("PN10"))
                        {
                        }
                        //30分钟时段降水量
                        if (oneGram.Contains("PN30"))
                        {
                        }
                        //暴雨量
                        if (oneGram.Contains("PR"))
                        {
                        }
                        if (oneGram.Contains("PT"))
                        {
                            int      index           = oneGram.IndexOf("PT");
                            string   endStr          = oneGram.Substring(index).Trim();
                            string[] endStrList      = endStr.Split(' ');
                            string   totalRainString = endStrList[1];
                            try
                            {
                                totalRain = Decimal.Parse(totalRainString);
                            }
                            catch (Exception e)
                            {
                                System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                            }
                        }
                        //瞬时河道水位、潮位
                        if (oneGram.Contains("Z "))
                        {
                            int      index            = oneGram.IndexOf("Z ");
                            string   endStr           = oneGram.Substring(index).Trim();
                            string[] endStrList       = endStr.Split(' ');
                            string   waterStageString = endStrList[1];
                            try
                            {
                                waterStage = Decimal.Parse(waterStageString);
                            }
                            catch (Exception e)
                            {
                                System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                            }
                        }
                        //电压
                        if (oneGram.Contains("VT"))
                        {
                            int      index         = oneGram.IndexOf("VT");
                            string   endStr        = oneGram.Substring(index).Trim();
                            string[] endStrList    = endStr.Split(' ');
                            string   voltageString = endStrList[1];
                            try
                            {
                                voltage = Decimal.Parse(voltageString);
                            }
                            catch (Exception e)
                            {
                                System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                            }
                        }
                        //定时报和均匀时段报处理
                        // 雨量组 和 水位组 均有数据 且数量相等。
                        if (rainList != null && rainList.Count > 0 && waterList != null && rainList.Count == waterList.Count)
                        {
                            CReportData oneData = new CReportData();
                            for (int k = 0; k < rainList.Count; k++)
                            {
                                DateTime tmpDate = dataTime.AddMinutes(5 * k);
                                oneData.Time     = tmpDate;
                                oneData.DiffRain = rainList[k];
                                oneData.Water    = waterList[k];
                                datas.Add(DeepClone(oneData));
                            }
                        }
                        // 雨量组数据 和 水位组数据不匹配
                        else
                        {
                            //
                            if (rainList != null && rainList.Count > 0)
                            {
                                CReportData oneData = new CReportData();
                                for (int k = 0; k < rainList.Count; k++)
                                {
                                    DateTime tmpDate = dataTime.AddMinutes(5 * k);
                                    oneData.Time     = tmpDate;
                                    oneData.DiffRain = rainList[k];
                                    datas.Add(DeepClone(oneData));
                                }
                            }

                            if (waterList != null && waterList.Count > 0)
                            {
                                CReportData oneData = new CReportData();
                                for (int k = 0; k < waterList.Count; k++)
                                {
                                    DateTime tmpDate = dataTime.AddMinutes(5 * k);
                                    oneData.Time  = tmpDate;
                                    oneData.Water = waterList[k];
                                    datas.Add(DeepClone(oneData));
                                }
                            }
                        }
                        //普通报文处理
                        if (diffRain != null || totalRain != null || voltage != null)
                        {
                            CReportData oneData = new CReportData();
                            oneData.Time     = dataTime;
                            oneData.Rain     = totalRain;
                            oneData.DiffRain = diffRain;
                            oneData.Water    = waterStage;
                            oneData.Voltge   = voltage;
                            datas.Add(DeepClone(oneData));
                        }
                    }
                }
                #region 废码代码
                //while (data.Length >= 2)
                //{
                //    // 截取要素标识符
                //    string sign = data.Substring(0, 2);
                //    flag = flag + 1;
                //    if(flag > 100)
                //    {
                //        break;
                //    }
                //    // 根据要素标识符取数据
                //    switch (sign)
                //    {
                //        case "ST":
                //            // 丢弃标识符
                //            data = data.Substring(2);
                //            // 丢弃一个字节
                //            data = data.Substring(1);
                //            // 丢弃一个测站地址
                //            data = data.Substring(10);
                //            // 丢弃一个字节
                //            data = data.Substring(1);

                //            // 遥测站分类码,不确定是不是一定在这个后面
                //            string stationTypeString = data.Substring(0,1);
                //            if(stationTypeString == "H")
                //            {
                //                type = EStationType.EH;
                //            }
                //            if(stationTypeString == "P")
                //            {
                //                type = EStationType.ERainFall;
                //            }
                //            data = data.Substring(1);
                //            //type = stationTypeString == "50" ? EStationType.ERainFall : EStationType.EHydrology;
                //            data = data.Substring(1);
                //            break;
                //        case "TT":
                //            // 丢弃标识符
                //            data = data.Substring(2);
                //            //丢弃一个字节
                //            data = data.Substring(1);
                //            dataTime = new DateTime(
                //                year: int.Parse("20" + data.Substring(0, 2)),
                //                month: int.Parse(data.Substring(2, 2)),
                //                day: int.Parse(data.Substring(4, 2)),
                //                hour: int.Parse(data.Substring(6, 2)),
                //                minute: int.Parse(data.Substring(8, 2)),
                //                second: 0
                //            );
                //            data = data.Substring(10);
                //            //丢弃一个字节
                //            data = data.Substring(1);
                //            break;
                //        case "PD":
                //            // 丢弃标识符
                //            data = data.Substring(2);
                //            // 丢弃数据定义19 3个字节、精度1
                //            dataDefine1 = Convert.ToString(int.Parse(data.Substring(0, 1)), 2);
                //            dataDefine2 = Convert.ToString(int.Parse(data.Substring(1, 1)), 2);
                //            dataDefine = dataDefine1.PadLeft(4, '0') + dataDefine2.PadLeft(4, '0');
                //            dataLength = Convert.ToInt32(dataDefine.Substring(0, 5), 2) * 2;
                //            dataAccuracyLength = Convert.ToInt32(dataDefine.Substring(5, 3), 2);
                //            dataAccuracy = 1;
                //            while (dataAccuracyLength > 0)
                //            {
                //                dataAccuracy *= (decimal)0.1;
                //                dataAccuracyLength--;
                //            }
                //            data = data.Substring(2);

                //            string dayRainString = data.Substring(0, dataLength);
                //            data = data.Substring(dataLength);
                //            try
                //            {
                //                dayRain = Decimal.Parse(dayRainString) * dataAccuracy;
                //            }
                //            catch (Exception e)
                //            {
                //                System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                //            }
                //            break;
                //        case "PJ":
                //            // 丢弃标识符
                //            data = data.Substring(2);
                //            // 丢掉一个字节
                //            data = data.Substring(1);
                //            string[] rainArr = data.Split('.');
                //            int rainLen = rainArr[0].Length;

                //            string rainStr = data.Substring(0,rainLen + 2);
                //            data = data.Substring(rainLen + 2);
                //            data = data.Substring(1);
                //            // 丢弃数据定义19 3个字节、精度1



                //            string diffRainString = rainStr;

                //            try
                //            {
                //                diffRain = Decimal.Parse(diffRainString);
                //            }
                //            catch (Exception e)
                //            {
                //                System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                //            }
                //            break;
                //        case "PT":
                //            // 丢弃标识符
                //            data = data.Substring(2);
                //            // 丢掉一个字节
                //            data = data.Substring(1);

                //            string[] dataArr = data.Split('.');
                //            int tmp = dataArr[0].Length;
                //            string totalRain = data.Substring(0,tmp + 2);

                //            data = data.Substring(tmp + 2);
                //            data = data.Substring(1);

                //            // 根据长度精度解析数据
                //            if (reportType == "31")
                //            {
                //                for (int i = 0; i < 13; i++)
                //                {
                //                    try
                //                    {
                //                        // 数据截取
                //                        string rainString = totalRain;

                //                        if (i != 0)
                //                        {
                //                            dataTime = dataTime + span;
                //                        }
                //                        Decimal rain = 0;
                //                        rain = Decimal.Parse(rainString);

                //                        // 数据封包
                //                        bool isExists = false;
                //                        if (datas.Count != 0)
                //                        {
                //                            foreach (var d in datas)
                //                            {
                //                                if (d.Time == dataTime)
                //                                {
                //                                    isExists = true;
                //                                    d.Rain = rain;
                //                                }
                //                            }
                //                        }
                //                        if (isExists == false)
                //                        {
                //                            CReportData reportData = new CReportData
                //                            {
                //                                Rain = rain,
                //                                Time = dataTime
                //                            };
                //                            datas.Add(reportData);
                //                        }

                //                    }
                //                    catch (Exception e)
                //                    {
                //                        System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                //                    }
                //                }
                //            }
                //            else if (reportType == "32" || reportType == "33" || reportType == "30")
                //            {
                //                try
                //                {
                //                    // 数据截取
                //                    string rainString = totalRain;

                //                    Decimal rain = 0;
                //                    rain = Decimal.Parse(rainString);

                //                    // 数据封包
                //                    bool isExists = false;
                //                    if (datas.Count != 0)
                //                    {
                //                        foreach (var d in datas)
                //                        {
                //                            if (d.Time == dataTime)
                //                            {
                //                                isExists = true;
                //                                d.Rain = rain;
                //                            }
                //                        }
                //                    }
                //                    if (isExists == false)
                //                    {
                //                        CReportData reportData = new CReportData
                //                        {
                //                            Rain = rain,
                //                            Time = dataTime
                //                        };
                //                        datas.Add(reportData);
                //                    }

                //                }
                //                catch (Exception e)
                //                {
                //                    System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                //                }
                //            }
                //            break;
                //        case "VT":
                //            // 丢弃标识符
                //            data = data.Substring(2);
                //            //丢掉一个位置
                //            data = data.Substring(1);
                //            // 丢弃数据定义?? ?个字节、精度?
                //            string[] voltageArr = data.Split('.');
                //            int voltageLen = voltageArr[0].Length;
                //            string voltageStr = data.Substring(0,voltageLen + 3);
                //            data = data.Substring(voltageLen + 3);
                //            data = data.Substring(1);

                //            // 根据长度精度解析数据
                //            if (reportType == "31")
                //            {
                //                for (int i = 0; i < 13; i++)
                //                {
                //                    try
                //                    {
                //                        // 数据截取
                //                        string voltageString = voltageStr;
                //                        if (i != 0)
                //                        {
                //                            dataTime = dataTime + span;
                //                        }
                //                        Decimal voltage = 0;
                //                        voltage = Decimal.Parse(voltageString);

                //                        // 数据封包
                //                        bool isExists = false;
                //                        if (datas.Count != 0)
                //                        {
                //                            foreach (var d in datas)
                //                            {
                //                                if (d.Time == dataTime)
                //                                {
                //                                    isExists = true;
                //                                    d.Voltge = voltage;
                //                                }
                //                            }
                //                        }
                //                        if (isExists == false)
                //                        {
                //                            CReportData reportData = new CReportData
                //                            {
                //                                Voltge = voltage,
                //                                Time = dataTime
                //                            };
                //                            datas.Add(reportData);
                //                        }
                //                    }
                //                    catch (Exception e)
                //                    {
                //                        System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                //                    }
                //                }
                //            }
                //            else if (reportType == "32" || reportType == "33" ||reportType == "30")
                //            {
                //                try
                //                {
                //                    // 数据截取
                //                    string voltageString = voltageStr;

                //                    Decimal voltage = 0;
                //                    voltage = Decimal.Parse(voltageString);

                //                    // 数据封包
                //                    bool isExists = false;
                //                    if (datas.Count != 0)
                //                    {
                //                        foreach (var d in datas)
                //                        {
                //                            if (d.Time == dataTime)
                //                            {
                //                                isExists = true;
                //                                d.Voltge = voltage;
                //                            }
                //                        }
                //                    }
                //                    if (isExists == false)
                //                    {
                //                        CReportData reportData = new CReportData
                //                        {
                //                            Voltge = voltage,
                //                            Time = dataTime
                //                        };
                //                        datas.Add(reportData);
                //                    }
                //                }
                //                catch (Exception e)
                //                {
                //                    System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                //                }
                //            }
                //            break;
                //        default:
                //            if (data.StartsWith("Z"))
                //            {
                //                // 丢弃标识符
                //                data = data.Substring(1);
                //                //丢掉一个字节
                //                data = data.Substring(1);
                //                string[] dataArr2 = data.Split('.');
                //                int tmp2 = dataArr2[0].Length;
                //                // 丢弃数据定义23 4个字节、精度3
                //                string waterStr = data.Substring(0,tmp2 + 4);
                //                data = data.Substring(tmp2 + 4);
                //                data = data.Substring(1);

                //                // 根据长度精度解析数据
                //                if (reportType == "31")
                //                {
                //                    for (int i = 0; i < 13; i++)
                //                    {
                //                        try
                //                        {
                //                            // 数据截取
                //                            string waterString = waterStr;
                //                            if (i != 0)
                //                            {
                //                                dataTime = dataTime + span;
                //                            }
                //                            Decimal water = 0;
                //                            water = Decimal.Parse(waterString);

                //                            // 数据封包
                //                            bool isExists = false;
                //                            if (datas.Count != 0)
                //                            {
                //                                foreach (var d in datas)
                //                                {
                //                                    if (d.Time == dataTime)
                //                                    {
                //                                        isExists = true;
                //                                        d.Water = water;
                //                                    }
                //                                }
                //                            }
                //                            if (isExists == false)
                //                            {
                //                                CReportData reportData = new CReportData
                //                                {
                //                                    Water = water,
                //                                    Time = dataTime
                //                                };
                //                                datas.Add(reportData);
                //                            }
                //                        }
                //                        catch (Exception e)
                //                        {
                //                            System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                //                        }
                //                    }
                //                }
                //                else if (reportType == "32" || reportType == "33" || reportType == "30")
                //                {
                //                    try
                //                    {
                //                        // 数据截取
                //                        string waterString = waterStr;
                //                        Decimal water = 0;
                //                        water = Decimal.Parse(waterString);

                //                        // 数据封包
                //                        bool isExists = false;
                //                        if (datas.Count != 0)
                //                        {
                //                            foreach (var d in datas)
                //                            {
                //                                if (d.Time == dataTime)
                //                                {
                //                                    isExists = true;
                //                                    d.Water = water;
                //                                }
                //                            }
                //                        }
                //                        if (isExists == false)
                //                        {
                //                            CReportData reportData = new CReportData
                //                            {
                //                                Water = water,
                //                                Time = dataTime
                //                            };
                //                            datas.Add(reportData);
                //                        }
                //                    }
                //                    catch (Exception e)
                //                    {
                //                        System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString());
                //                    }
                //                }
                //            }
                //            else if (data.StartsWith("DRxnn"))
                //            {
                //                // 丢弃标识符
                //                data = data.Substring(2);
                //                // 丢弃数据定义18 3个字节、精度0
                //                data = data.Substring(2);
                //                // 时间步长
                //                string timeSpanString = data.Substring(0, 6);
                //                data = data.Substring(6);
                //                TimeSpan timeSpan = new TimeSpan(Int32.Parse(timeSpanString.Substring(0, 2)), Int32.Parse(timeSpanString.Substring(2, 2)), Int32.Parse(timeSpanString.Substring(4, 2)), 0);
                //                span = span + timeSpan;
                //            }

                //            break;
                //    }
                //}
                #endregion

                foreach (var d in datas)
                {
                    if (!d.Rain.HasValue)
                    {
                        d.Rain = -1;
                    }
                    if (!d.Water.HasValue)
                    {
                        d.Water = -20000;
                    }
                    if (d.Voltge <= 0)
                    {
                        d.Voltge = -20;
                    }
                }

                report = new CReportStruct
                {
                    StationType = type,
                    Datas       = datas
                };

                return(true);
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("数据:" + msg);
                System.Diagnostics.Debug.WriteLine("规约协议正文解析错误" + e.Message);
                return(false);
            }
        }
コード例 #25
0
        // 检验输入是否有效
        private bool AssertInputValid()
        {
            try
            {
                // 1. stationId 不能为空, 也不能重复,只能占用四个字节
                string stationId = textBox_StationID.Text.Trim();
                if (stationId.Equals(""))
                {
                    MessageBox.Show("测站编号不能为空");
                    return(false);
                }
                // 测站编号不能超过10位
                if (stationId.Length > 10)
                {
                    MessageBox.Show("测站编码不能超过10位");
                    return(false);
                }

                // 判断编号是否为负数
                try
                {
                    int.Parse(stationId);
                }
                catch (System.Exception)
                {
                    MessageBox.Show("站点编号不能含有非法字符");
                    return(false);
                }
                for (int i = 0; i < m_listStationCombination.Count; ++i)
                {
                    if (m_listStationCombination[i].StationID.Trim() == stationId)
                    {
                        //MessageBox.Show(string.Format("测站站号不能重复!编号 \"{0}\" 与测站 \"{1}\" 重复",
                        //    stationId, m_listStationCombination[i].StationName.Trim()));
                        MessageBox.Show(string.Format("水情测站站号不能重复!已存在水情测站{0}",
                                                      stationId));
                        return(false);
                    }
                }
                //for (int i = 0; i < m_listSoilStation.Count; ++i)
                //{
                //    if (m_listSoilStation[i].StationID.Trim() == stationId)
                //    {
                //        MessageBox.Show(string.Format("水情测站站号不能与墒情测站编号一样!已存在墒情测站{0}",
                //        stationId));
                //        return false;
                //    }
                //}
                if (comb_MainRoad.Text.ToString() == "SX-GPRS" || comb_PrepareRoad.Text.ToString() == "SX-GPRS")
                {
                    string gprs = textBox_GPRS.Text.Trim();
                    if (gprs.Equals(""))
                    {
                        MessageBox.Show("GPRS号码不能为空!");
                        return(false);
                    }
                    else
                    {
                        //GPRS号码
                        //  string gprsNum = textBox_GPRS.Text.Trim();
                        if (!CStringUtil.IsDigit(gprs))
                        {
                            MessageBox.Show("GPRS号码参数不合法,必须全部是数字!");
                            return(false);
                        }
                        else
                        {
                        }
                    }

                    for (int i = 0; i < m_listStationCombination.Count; ++i)
                    {
                        if (m_listStationCombination[i].GPRS.Trim() == gprs)
                        {
                            MessageBox.Show(string.Format("水情测站Gprs不能重复!与水情站{0} gprs号码一样 ",
                                                          m_listStationCombination[i].StationID.Trim()));
                            return(false);
                        }
                    }
                    //for (int i = 0; i < m_listSoilStation.Count; ++i)
                    //{
                    //    if (m_listSoilStation[i].GPRS.Trim() == gprs)
                    //    {
                    //        MessageBox.Show(string.Format("水情测站Gprs不能重复!与墒情站{0} gprs号码一样 ",
                    //       m_listSoilStation[i].StationID.Trim()));
                    //        return false;
                    //    }

                    //}
                }

                if (System.Text.Encoding.Default.GetByteCount(stationId) > 10)
                {
                    MessageBox.Show("测站ID字符数不能超过10个");
                    return(false);
                }

                // 2. 站名不能为空,不能超过50个字符
                if (textBox_StationName.Text.Trim().Equals(""))
                {
                    MessageBox.Show("站名不能为空");
                    return(false);
                }
                if (System.Text.Encoding.Default.GetByteCount(textBox_StationName.Text.Trim()) > 50)
                {
                    MessageBox.Show("站名不能超过50个字符");
                    return(false);
                }
                // 3. 站类不能为空
                if (cmb_StationType.Text.Equals(""))
                {
                    MessageBox.Show("站点类型不能为空");
                    return(false);
                }
                // 4. 分中心不能为空
                if (cmb_SubCenter.Text.Equals(""))
                {
                    MessageBox.Show("分中心不能为空");
                    return(false);
                }
                // 5. 雨量精度不能为空,如果是水文站或者雨量站
                EStationType type = CEnumHelper.UIStrToStationType(cmb_StationType.Text);
                if (type == EStationType.EHydrology || type == EStationType.ERainFall)
                {
                    if (cmb_RainAccuracy.Text.Equals(""))
                    {
                        MessageBox.Show("雨量精度不能为空");
                        return(false);
                    }
                }
                // 6. 水位基值合法
                if (!textBox_WaterBase.Text.Equals(""))
                {
                    try
                    {
                        Decimal.Parse(textBox_WaterBase.Text);
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show("请输入正确的水位基值" + ex.Message);
                        return(false);
                    }
                }
                // 7. 水位变化合法
                if (!textBox_WaterChange.Text.Equals(""))
                {
                    try
                    {
                        if (Decimal.Parse(textBox_WaterChange.Text) < 0)
                        {
                            MessageBox.Show("水位阀值不能为负!");
                            return(false);
                        }
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show("请输入正确的水位变化值" + ex.Message);
                        return(false);
                    }
                }
                // 8. 水位最大值合法
                if (!textBox_WaterMax.Text.Equals(""))
                {
                    try
                    {
                        Decimal.Parse(textBox_WaterMax.Text);
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show("请输入正确的水位最大值" + ex.Message);
                        return(false);
                    }
                }
                // 9. 水位最小值
                if (!textBox_WaterMin.Text.Equals(""))
                {
                    try
                    {
                        Decimal.Parse(textBox_WaterMin.Text);
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show("请输入正确的水位最小值" + ex.Message);
                        return(false);
                    }
                }
                // 10. 雨量变化合法
                if (!textBox_RainChange.Text.Equals(""))
                {
                    try
                    {
                        if (Decimal.Parse(textBox_RainChange.Text) < 0)
                        {
                            MessageBox.Show("雨量阀值不能为负!");
                            return(false);
                        }
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show("请输入正确的雨量变化值" + ex.Message);
                        return(false);
                    }
                }

                // 11. 电压下限合法
                if (!textBox_Voltage.Text.Equals(""))
                {
                    try
                    {
                        if (float.Parse(textBox_Voltage.Text) < 0)
                        {
                            MessageBox.Show("电压阀值不能为负!");
                            return(false);
                        }
                    }
                    catch (System.Exception)
                    {
                        MessageBox.Show("请输入正确的电压阀值");
                        return(false);
                    }
                }

                return(true);
            }catch (Exception ex)
            {
                return(false);
            }
        }
コード例 #26
0
        /// <summary>
        /// 处理6个报文
        /// </summary>
        /// <param name="list"></param>
        /// <param name="recvtime"></param>
        /// <param name="voltage"></param>
        /// <param name="stationType"></param>
        /// <returns></returns>
        private List <CReportData> GetData_1(string list, DateTime recvtime, decimal voltage, EStationType stationType)
        {
            var    result = new List <CReportData>();
            string tmp;

            for (int i = 0; i < 6; i++)
            {
                CReportData data = new CReportData();
                if (list.Length >= (i * 10 + 10))
                {
                    tmp = list.Substring(i * 10, 10);
                    if (FillData(tmp, recvtime, voltage, stationType, out data))
                    {
                        result.Add(data);
                    }
                    recvtime = recvtime.AddMinutes(-5);
                }
            }
            // 将结果中的数据顺序逆置
            result.Reverse();
            return(result);
        }
コード例 #27
0
        public void Import(CBatchStruct batch, DateTime DStartTime, DateTime DEndTime, bool isUpdate = false)
        {
            DateTime?     lastTime             = null;
            ERTDDataState tmpRTDWaterDataState = ERTDDataState.ENormal;
            ////gm  1024 $60091K02031610220800084505230800084505
            //string rawString = rawData;
            //string startTime = rawString.Substring(11, 10);
            //string endTime = rawString.Substring(27, 6);
            //string strYear = 20 + startTime.Substring(0, 2);
            //string strMonth = startTime.Substring(2, 2);
            //string strStartDay = startTime.Substring(4, 2);
            //string strStartHour = startTime.Substring(6, 2);
            //string strStartMinute = startTime.Substring(8, 2);
            //string strEndDay = endTime.Substring(0, 2);
            //string strEndHour = endTime.Substring(2, 2);
            //string strEndMinute = endTime.Substring(4, 2);

            ////DateTime DStartTime = new DateTime(int.Parse(strYear), int.Parse(strMonth), int.Parse(strStartDay), int.Parse(strStartHour), int.Parse(strStartMinute), 0);
            ////DateTime DEndTime = new DateTime(int.Parse(strYear), int.Parse(strMonth), int.Parse(strEndDay), int.Parse(strEndHour), int.Parse(strEndMinute), 0);

            List <CTimeAndData> datas = batch.Datas;
            string         stationid  = batch.StationID;
            EStationType   type       = batch.StationType;
            CEntityStation station    = m_proxyStation.QueryById(stationid);

            //  if (type == EStationType.ERainFall)
            if (type == EStationType.ERiverWater)
            // if (true)
            {
                for (int i = 0; i < datas.Count; i++)
                {
                    if (lastTime == datas[i].Time)
                    {
                        lastTime = datas[i].Time;
                        continue;
                    }
                    lastTime = datas[i].Time;
                    int                status          = 1;
                    DateTime           dt              = datas[i].Time;
                    string             data            = datas[i].Data.ToString();
                    int                RawtotalRain    = int.Parse(data.Substring(0, 4));
                    Nullable <Decimal> RawrainAccuracy = decimal.Parse((data.Substring(4, 2)));
                    Nullable <Decimal> rainAccuracy    = RawrainAccuracy / 10;
                    Nullable <Decimal> totalRain       = RawtotalRain * rainAccuracy;
                    CEntityRain        LastSharpMes    = new CEntityRain();
                    CEntityRain        LastDayMes      = new CEntityRain();
                    //如果是第一条数据,则通过数据库获取上一条数据
                    if (i == 0)
                    {
                        Nullable <Decimal>      lastTotalRain = null, lastDayTotalRain = null, lastSharpClockTotalRain = null;
                        Nullable <DateTime>     lastDayTime        = null;
                        Nullable <DateTime>     lastClockSharpTime = null;
                        Nullable <DateTime>     lastDataTime       = null;
                        Nullable <Decimal>      lastPeriodRain     = null;
                        Nullable <EChannelType> lastChannelType    = null;
                        Nullable <EMessageType> lastMessageType    = null;

                        LastSharpMes = m_proxyRain.GetLastSharpRain(stationid, dt);
                        LastDayMes   = m_proxyRain.GetLastDayRain(stationid, dt);

                        lastTotalRain           = m_proxyRain.GetLastRain(stationid, dt).TotalRain;
                        lastSharpClockTotalRain = LastSharpMes.TotalRain;
                        lastDayTotalRain        = LastDayMes.TotalRain;

                        lastClockSharpTime = LastSharpMes.TimeCollect;
                        lastDayTime        = LastDayMes.TimeCollect;

                        //改动

                        // 查询成功

                        station.LastTotalRain    = lastTotalRain;
                        station.LastDayTotalRain = lastDayTotalRain;
                        station.LastPeriodRain   = lastPeriodRain;
                        if (lastDataTime != null && lastDataTime.HasValue)
                        {
                            station.LastDataTime = lastDataTime;
                        }
                        if (lastClockSharpTime != null && lastClockSharpTime.HasValue)
                        {
                            station.LastClockSharpTime = lastClockSharpTime;
                        }
                        if (lastDayTime != null && lastDayTime.HasValue)
                        {
                            station.LastDayTime = lastDayTime;
                        }
                        if (lastChannelType != null && lastChannelType.HasValue)
                        {
                            station.LastChannelType = lastChannelType;
                        }
                        if (lastMessageType != null && lastMessageType.HasValue)
                        {
                            station.LastMessageType = lastMessageType;
                        }

                        //int year = dt.Year;
                        //int month = dt.Month;
                        //int day = dt.Day;
                        //DateTime tmp1 = new DateTime(year, month, day, 8, 0, 0);
                        //DateTime tmp2 = tmp1.Subtract(new TimeSpan(24, 0, 0));
                        //station.LastDayTime = tmp2;
                        //lastSharpClockTotalRain = m_proxyRain.GetLastClockSharpTotalRain(stationid, dt);
                        //lastDayTotalRain = m_proxyRain.GetLastDayTotalRain(stationid, tmp2);
                        station.LastTotalRain = lastTotalRain;

                        station.LastClockSharpTotalRain = lastSharpClockTotalRain;
                        station.LastClockSharpTime      = lastClockSharpTime;

                        station.LastDayTotalRain = lastDayTotalRain;
                        station.LastDayTime      = lastDayTime;
                    }
                    CEntityRain rain = new CEntityRain();
                    rain.StationID   = stationid;
                    rain.TimeCollect = dt;
                    rain.TotalRain   = totalRain;
                    // rain.DifferneceRain = CalDifferenceRain(rainAccuracy, RawtotalRain, station.LastTotalRain, station.DRainChange, ref status);

                    if ((dt.Minute + dt.Second) == 0)
                    {
                        //rain.PeriodRain = CalPeriodRain(rainAccuracy, RawtotalRain, dt, station.LastClockSharpTotalRain);
                        rain.PeriodRain = CalPeriodRain_2(rainAccuracy, RawtotalRain, dt, station.LastClockSharpTotalRain, station.LastClockSharpTime, station.LastTotalRain);
                        station.LastClockSharpTotalRain = totalRain;
                        station.LastClockSharpTime      = dt;
                    }
                    if (dt.Hour == 8)
                    {
                        //rain.DayRain = CalDayRain(rainAccuracy, RawtotalRain, dt, station.LastDayTime, station.LastDayTotalRain);
                        rain.DayRain             = CalDayRain_2(rainAccuracy, RawtotalRain, dt, station.LastDayTotalRain, station.LastDayTime);
                        station.LastDayTotalRain = totalRain;
                        station.LastDayTime      = dt;
                    }
                    rain.DifferneceRain   = CalDifferenceRain_1(rainAccuracy, RawtotalRain, station.LastTotalRain, station.DRainChange, ref status);
                    station.LastTotalRain = totalRain;
                    // 待检测
                    rain.ChannelType = EChannelType.GPRS;
                    rain.MessageType = EMessageType.Batch;

                    rain.TimeRecieved = DateTime.Now;
                    if (status == 1)
                    {
                        rain.BState = 1;
                    }
                    else
                    {
                        rain.BState = 0;
                    }

                    rainResults.Add(rain);
                }
                List <CEntityRain> listInsert   = new List <CEntityRain>();
                List <CEntityRain> listUpdate   = new List <CEntityRain>();
                List <DateTime>    listDateTime = m_proxyRain.getExistsTime(stationid, DStartTime, DEndTime);
                for (int i = 0; i < rainResults.Count; i++)
                {
                    if (listDateTime.Contains(rainResults[i].TimeCollect))
                    {
                        listUpdate.Add(rainResults[i]);
                    }
                    else
                    {
                        listInsert.Add(rainResults[i]);
                    }
                }
                m_proxyRain.AddNewRows(listInsert); //写入数据库
                m_proxyRain.UpdateRows(listUpdate); //更新

                //m_proxyRain.AddOrUpdate(rainResults);
            }
            //操作water表
            //   if (type == EStationType.ERiverWater)
            if (type == EStationType.ERainFall)
            {
                for (int i = 0; i < datas.Count; i++)
                {
                    decimal  data = 0;
                    DateTime dt   = datas[i].Time;
                    try
                    {
                        string strData = datas[i].Data.Trim();
                        //decimal data = int.Parse(datas[i].Data) / 100;
                        data = decimal.Parse(strData) / 100;
                    }
#pragma warning disable CS0168 // 声明了变量“e”,但从未使用过
                    catch (Exception e)
#pragma warning restore CS0168 // 声明了变量“e”,但从未使用过
                    {
                        break;
                    }
                    //操作water表
                    CEntityWater water = new CEntityWater();
                    water.StationID    = station.StationID;
                    water.TimeCollect  = dt;
                    water.TimeRecieved = DateTime.Now;
                    if (station.DWaterBase.HasValue)
                    {
                        // 减去水位基值
                        water.WaterStage = data + station.DWaterBase.Value;
                    }
                    else
                    {
                        water.WaterStage = data;
                    }
                    water.WaterFlow = CDBDataMgr.GetInstance().GetWaterFlowByWaterStageAndStation(stationid, data);
                    //此处 waterflow需要计算的
                    water.ChannelType = EChannelType.GPRS;
                    water.MessageType = EMessageType.Batch;
                    AssertWaterData(water, ref tmpRTDWaterDataState);
                    //if (tmpRTDWaterDataState == ERTDDataState.ENormal)
                    //{
                    //    water.state = 1;
                    //}
                    //if (tmpRTDWaterDataState == ERTDDataState.EError)
                    //{
                    //    water.state = 0;
                    //}
                    //if (tmpRTDWaterDataState == ERTDDataState.EWarning)
                    //{
                    //    water.state = 2;
                    //}

                    waterResults.Add(water);
                }
                List <CEntityWater> listInsert   = new List <CEntityWater>();
                List <CEntityWater> listUpdate   = new List <CEntityWater>();
                List <DateTime>     listDateTime = m_proxyWater.getExistsTime(stationid, DStartTime, DEndTime);
                for (int i = 0; i < waterResults.Count; i++)
                {
                    if (listDateTime.Contains(waterResults[i].TimeCollect))
                    {
                        listUpdate.Add(waterResults[i]);
                    }
                    else
                    {
                        listInsert.Add(waterResults[i]);
                    }
                }
                //
                m_proxyWater.AddNewRows(listInsert); //写入数据库
                m_proxyWater.UpdateRows(listUpdate); //更新数据库

                //m_proxyWater.AddOrUpdate(waterResults);
            }
        }
コード例 #28
0
        private List <CReportData> GetAddData(IList <string> dataSegs, DateTime recvTime, EStationType stationType)
        {
            var result = new List <CReportData>();

            foreach (var item in dataSegs)
            {
                CReportData data = new CReportData();
                //  解析时间
                data.Time = recvTime;
                //  根据站点类型解析数据
                switch (stationType)
                {
                case EStationType.ERainFall:
                {
                    //  雨量
                    //  解析雨量                         单位mm,未乘以精度
                    Decimal rain = Decimal.Parse(item.Substring(6, 4));
                    data.Rain = rain;
                } break;

                case EStationType.EHydrology:
                {
                    //  水文
                    //  解析雨量                         单位mm,未乘以精度
                    Decimal rain = Decimal.Parse(item.Substring(6, 4));
                    //  解析水位  4(整数位) + 2(小数位)  单位m
                    Decimal water = Decimal.Parse(item.Substring(0, 6)) * (Decimal)0.01;
                    data.Rain  = rain;
                    data.Water = water;
                }
                break;

                case EStationType.ERiverWater:
                {
                    //  水位
                    //  解析水位  4(整数位) + 2(小数位)  单位m
                    Decimal water = Decimal.Parse(item.Substring(0, 6)) * (Decimal)0.01;
                    data.Water = water;
                    break;
                }

                default: break;
                }
                //解析电压 2(整数位)+ 2(小数位) 单位 V
                Decimal voltage = Decimal.Parse(item.Substring(10, 4)) * (Decimal)0.01;
                data.Voltge = voltage;
                result.Add(data);
            }
            return(result);
        }
コード例 #29
0
        private List <CReportData> GetData(IList <string> lists, DateTime recvtime, decimal voltage, EStationType stationType)
        {
            var result = new List <CReportData>();

            foreach (var item in lists)
            {
                string itemData    = item;
                string itemProcess = item;
                for (int i = 1; i <= 12; i++)
                {
                    CReportData data = new CReportData();
                    itemProcess = itemData.Substring(0, 10);
                    if (GetData(itemProcess, recvtime, voltage, stationType, out data))
                    {
                        result.Add(data);
                    }
                    recvtime = recvtime.AddMinutes(-5);
                    itemData = itemData.Substring(10);
                }
            }
            return(result);
        }
コード例 #30
0
        private void SendBatchMsg(BatchRequest request)
        {
            this.batchMsg = null;
            this.batchMsg = new BatchMsg()
            {
            };
            this.batchList = new List <BatchData>();
            EStationType stype = request.ReportType == true ? EStationType.ERainFall : EStationType.EHydrology;
            ETrans       trans = request.TransType == true ? ETrans.ByDay : ETrans.ByHour;
            DateTime     st    = Convert.ToDateTime(request.StartTime);
            DateTime     et    = Convert.ToDateTime(request.EndTime);
            DateTime     beginTime;
            DateTime     endTime;

            if (trans == ETrans.ByHour)
            {
                beginTime = new DateTime(
                    year: st.Year,
                    month: st.Month,
                    day: st.Day,
                    hour: st.Hour,
                    minute: 0,
                    second: 0

                    );
                endTime = new DateTime(
                    year: et.Year,
                    month: et.Month,
                    day: et.Day,
                    hour: et.Hour,
                    minute: 0,
                    second: 0

                    );
            }
            else
            {
                beginTime = new DateTime(
                    year: st.Year,
                    month: st.Month,
                    day: st.Day,
                    hour: 8,
                    minute: 0,
                    second: 0

                    );
                endTime = new DateTime(
                    year: st.Year,
                    month: et.Month,
                    day: et.Day,
                    hour: 8,
                    minute: 0,
                    second: 0

                    );
            }

            string query = string.Empty;
            var    gprs  = CPortDataMgr.Instance.FindGprsByUserid(request.Gprsid);

            if (gprs != null)
            {
                uint dtuID = 0;
                if (gprs.FindByID(request.Gprsid, out dtuID))
                {
                    query = gprs.FlashBatch.BuildQuery(request.StationId, stype, trans, beginTime, endTime, EChannelType.GPRS);
                    gprs.SendDataTwiceForBatchTrans(dtuID, query);
                }
            }
            else
            {
                batchMsg = new BatchMsg()
                {
                    NotOL = true
                };
                BatchData error = new BatchData();
                error.StationId = request.StationId;
                error.NotOL     = true;
                this.batchList.Add(error);
                BatchData endInfo = new BatchData();
                endInfo.StationId = endInfo.StationId;
                endInfo.End       = true;
                this.batchList.Add(endInfo);
            }
        }