示例#1
0
        //  批量数据flash下行解析
        public bool Parse_Flash(String msg, EChannelType ctype, 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_1(data.Substring(6, 2));
                //  解析传输类型, 2位     02/03
                batch.TransType = ProtocolMaps.TransMap.FindKey(data.Substring(8, 2));

                //创建返回的数据对象
                var datas = new List <CTimeAndData>();
                //ByDay ByHour区分
                //02 按天传   03按小时  04按一天整点
                switch (batch.TransType)
                {
                //按天传 02
                case ETrans.ByDay:
                {
                    int dateYear  = Int32.Parse("20" + data.Substring(10, 2));  // 年
                    int dateMonth = Int32.Parse(data.Substring(12, 2));         // 月

                    //数据处理
                    data = data.Substring(14);
                    while (data.Length >= 12)
                    {
                        DateTime recvTime = new DateTime(
                            year: dateYear,                            //年
                            month: dateMonth,                          //月
                            day: Int32.Parse(data.Substring(0, 2)),    //日
                            hour: Int32.Parse(data.Substring(2, 2)),   //时
                            minute: Int32.Parse(data.Substring(4, 2)), //分
                            second: 0
                            );
                        string datasegs = data.Substring(6, 6);
                        datas.Add(new CTimeAndData
                            {
                                Time = recvTime,
                                Data = datasegs
                            });
                        data = data.Substring(12);
                    }
                }
                break;

                //按小时传 03
                case ETrans.ByHour:
                {
                    //判断是GSM还是GPRS传送方式
                    //GSM:yymmddhh  GPRS:yymm
                    if (ctype == EChannelType.GPRS)
                    {
                        //GPRS类型
                        int dateYear  = Int32.Parse("20" + data.Substring(10, 2));     // 年
                        int dateMonth = Int32.Parse(data.Substring(12, 2));            // 月

                        //数据处理
                        data = data.Substring(14);
                        while (data.Length >= 12)
                        {
                            DateTime recvTime = new DateTime(
                                year: dateYear,                            //年
                                month: dateMonth,                          //月
                                day: Int32.Parse(data.Substring(0, 2)),    //日
                                hour: Int32.Parse(data.Substring(2, 2)),   //时
                                minute: Int32.Parse(data.Substring(4, 2)), //分
                                second: 0
                                );
                            string datasegs = data.Substring(6, 6);
                            datas.Add(new CTimeAndData
                                {
                                    Time = recvTime,
                                    Data = datasegs
                                });
                            data = data.Substring(12);
                        }
                    }
                    else if (ctype == EChannelType.GSM)
                    {
                        //GSM类型
                        int dateYear  = Int32.Parse("20" + data.Substring(10, 2));  // 年
                        int dateMonth = Int32.Parse(data.Substring(12, 2));         // 月
                        int dateDay   = Int32.Parse(data.Substring(14, 2));         // 日
                        int dateHour  = Int32.Parse(data.Substring(16, 2));         // 时

                        //数据处理
                        data = data.Substring(14);
                        while (data.Length >= 12)
                        {
                            DateTime recvTime = new DateTime(
                                year: dateYear,                            //年
                                month: dateMonth,                          //月
                                day: dateDay,                              //日
                                hour: dateHour,                            //时
                                minute: Int32.Parse(data.Substring(0, 2)), //分
                                second: 0
                                );
                            string datasegs = data.Substring(2, 6);
                            datas.Add(new CTimeAndData
                                {
                                    Time = recvTime,
                                    Data = datasegs
                                });
                            data = data.Substring(8);
                        }
                    }
                }
                break;

                //按一天整点传 04
                case ETrans.ByDayHour:
                {
                    int dateYear  = Int32.Parse("20" + data.Substring(10, 2)); // 年
                    int dateMonth = Int32.Parse(data.Substring(12, 2));        // 月
                    int dateDay   = Int32.Parse(data.Substring(14, 2));        // 日

                    //数据处理
                    data = data.Substring(16);
                    while (data.Length >= 8)
                    {
                        DateTime recvTime = new DateTime(
                            year: dateYear,                          //年
                            month: dateMonth,                        //月
                            day: dateDay,                            //日
                            hour: Int32.Parse(data.Substring(0, 2)), //时
                            minute: 0,                               //分
                            second: 0
                            );
                        string datasegs = data.Substring(2, 6);
                        datas.Add(new CTimeAndData
                            {
                                Time = recvTime,
                                Data = datasegs
                            });
                        data = data.Substring(8);
                    }
                }
                break;
                }
                batch.Datas = datas;
                return(true);
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine("数据:" + msg);
                System.Diagnostics.Debug.WriteLine("批量数据解析不完整" + exp.Message);
            }
            return(false);
        }