Exemple #1
0
        //  数据批量主板下行解析
        public bool Parse_Batch(String msg, out CBatchStruct batch)
        {
            batch = new CBatchStruct();
            UpParser      up     = new UpParser();
            CReportStruct report = new CReportStruct();

            try
            {
                if (up.Parse(msg.Substring(msg.IndexOf("1G29") + 5), out report))
                {
                    batch.StationID   = report.Stationid;
                    batch.StationType = report.StationType;
                    List <CTimeAndData> datas  = new List <CTimeAndData>();
                    List <CTimeAndData> rains  = new List <CTimeAndData>();
                    List <CTimeAndData> waters = new List <CTimeAndData>();
                    if (report.StationType == EStationType.ERainFall)
                    {
                        foreach (var d in report.Datas)
                        {
                            CTimeAndData rain = new CTimeAndData();
                            rain.Time = d.Time;
                            if (d.Rain != -1)
                            {
                                int rainData = (int)(d.Rain);
                                rain.Data = string.Format("{0:D4}", rainData);
                                datas.Add(rain);
                            }
                        }
                    }
                    else if (report.StationType == EStationType.ERiverWater)
                    {
                        foreach (var d in report.Datas)
                        {
                            CTimeAndData water = new CTimeAndData();
                            water.Time = d.Time;
                            if (d.Water != -20000 && d.Water != -200)
                            {
                                int waterData = (int)(d.Water * 100);
                                water.Data = string.Format("{0:D6}", waterData);
                                datas.Add(water);
                            }
                        }
                    }
                    else if (report.StationType == EStationType.EHydrology)
                    {
                        foreach (var d in report.Datas)
                        {
                            CTimeAndData rain = new CTimeAndData();
                            rain.Time = d.Time;
                            CTimeAndData water = new CTimeAndData();
                            water.Time = d.Time;
                            if (d.Water != -20000 && d.Water != -200)
                            {
                                int waterData = (int)(d.Water * 100);
                                water.Data = string.Format("{0:D6}", waterData);
                                waters.Add(water);
                            }
                            if (d.Rain != -1)
                            {
                                int rainData = (int)(d.Rain);
                                rain.Data = string.Format("{0:D4}", rainData);
                                rains.Add(rain);
                            }
                        }
                    }
                    batch.Datas  = datas;
                    batch.Rains  = rains;
                    batch.Waters = waters;
                    return(true);
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("批量主板异常:" + e);
            }
            return(false);
        }
Exemple #2
0
        //  批量数据UBatch下行解析
        public bool Parse(String msg, out CBatchStruct batch)
        {
            batch = new CBatchStruct();
            try
            {
                string data = string.Empty;
                if (!ProtocolHelpers.DeleteSpecialChar(msg, out data))
                {
                    return(false);
                }

                //  解析站点ID , 4位     0001
                batch.StationID = data.Substring(0, 4);
                //  解析命令指令 ,2位     1K
                batch.Cmd = data.Substring(4, 2);
                //  解析站点类型, 2位     01
                batch.StationType = ProtocolHelpers.ProtoStr2StationType(data.Substring(6, 2));
                int DataYear  = Int32.Parse(data.Substring(8, 2));
                int DataMonth = Int32.Parse(data.Substring(10, 2));
                int DataDay   = Int32.Parse(data.Substring(12, 2));
                //创建返回的数据对象
                var datas = new List <CTimeAndData>();
                var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR);

                foreach (var item in lists)
                {
                    string itemData = item;
                    while (itemData.Length > 0)
                    {
                        int DataHour   = Int32.Parse(itemData.Substring(0, 2));
                        int DataMinute = Int32.Parse(itemData.Substring(2, 2));
                        //  解析出数据时间
                        DateTime recvTime = new DateTime(
                            year: DataYear,
                            month: DataMonth,
                            day: DataDay,
                            hour: DataHour,
                            minute: DataMinute,
                            second: 0
                            );
                        //  解析出16进制的数据
                        string itemDatas = itemData.Substring(4, 4);
                        //  将16进制数据转化为10进制
                        itemDatas = int.Parse(itemDatas, System.Globalization.NumberStyles.AllowHexSpecifier).ToString();

                        //  创建CTimeAndData对象
                        CTimeAndData result = new CTimeAndData();
                        result.Time = recvTime;
                        result.Data = itemDatas;
                        //  将对像填充至list中
                        datas.Add(result);

                        //构成循环
                        itemData = itemData.Substring(10);
                    }
                }

                batch.Datas = datas;
                return(true);
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine("数据:" + msg);
                System.Diagnostics.Debug.WriteLine("批量数据解析不完整" + exp.Message);
            }
            return(false);
        }