예제 #1
0
        //  数据下行设置
        public String BuildSet(string sid, IList <EDownParam> cmds, CDownConf down, 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.BuildSet(sid, cmds, down, ctype);
            return(result);
        }
예제 #2
0
        //  数据下行读取
        public String BuildQuery(string sid, IList <EDownParam> cmds, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); //添加首字符
            sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));          //添加四位站点ID号
            sb.Append("0G");                                                      //添加指令类型

            int length = 6;                                                       //  查询后指令的长度

            foreach (var cmd in cmds)
            {
                length = length + 3 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);

                sb.Append(CSpecialChars.BALNK_CHAR);
                sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
            }
            sb.Append(CSpecialChars.ENTER_CHAR);    //  添加结束符

            if (ctype == EChannelType.None)
            {
                //  短信一包最大字节数为160
                return(length > 160 ? string.Empty : sb.ToString());
            }
            else if (ctype == EChannelType.BeiDou)
            {
                //  北斗卫星最大字节数为98
                return(length > 98 ? string.Empty : sb.ToString());
            }
            else if (ctype == EChannelType.GPRS || ctype == EChannelType.GSM)
            {
                return(sb.ToString());
            }
            throw new Exception("信道协议未编写!");
        }
예제 #3
0
        public bool Init(string ip, int port, string account, string password)
        {
            try
            {
                if (ip == "" || port == 0)
                {
                    return(false);
                }
                ///http://223.100.11.11:7080/SMSService.asmx
                sMS = new SMSService.SMSService();
                string reference = ip;
                sMS.Url            = reference;
                this.account       = account;
                this.password      = password;
                this.m_channelType = EChannelType.GSM;

                if (tmrData == null)
                {
                    tmrData = new System.Timers.Timer(250);
                }
                tmrData.Elapsed += new ElapsedEventHandler(tmrData_Elapsed);


                tmrData.Start();
                m_threadDealData.Start();
                //Start();
                return(true);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                return(false);
            }
        }
예제 #4
0
        /// <summary>
        /// 批量传输sd卡
        /// </summary>
        /// <param name="sid"></param>
        /// <param name="trans"></param>
        /// <param name="beginTime"></param>
        /// <param name="ctype"></param>
        /// <returns></returns>
        public String BuildQuery_SD(string sid, DateTime beginTime, 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_SD(sid, beginTime, ctype);
            return(result);
        }
예제 #5
0
        /// <summary>
        /// 批量传输sd卡
        /// </summary>
        /// <param name="sid"></param>
        /// <param name="trans"></param>
        /// <param name="beginTime"></param>
        /// <param name="ctype"></param>
        /// <returns></returns>
        public String BuildQuery_SD(string sid, 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("0B");
            sb.Append(beginTime.ToString("yyMMddHH"));

            return(sb.ToString());
        }
예제 #6
0
        //  批量数据主板下行
        public String BuildQuery_Batch(string sid, ETrans trans, DateTime beginTime, EChannelType ctype)
        {
            try
            {
                //获取packageNum和recvtime
                CEntityPackage package    = UpParser.cEntityPackage[sid];
                String         packageNum = package.PackageNum;
                DateTime       recvtime   = package.time;

                StringBuilder sb = new StringBuilder();
                sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype));
                sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));
                sb.Append("0G");
                sb.Append(" 29");
                int dayRound  = Int32.Parse(packageNum.Substring(0, 2));
                int hourRound = Int32.Parse(packageNum.Substring(2, 2));
                switch (trans)
                {
                case ETrans.ByHour:
                {
                    int dayRoundTrans = dayRound + beginTime.Day - recvtime.Day;
                    sb.Append(String.Format("{0:D2}", dayRoundTrans));
                    int hourRoundTrans = hourRound - recvtime.Hour + beginTime.Hour;
                    sb.Append(String.Format("{0:D2}", hourRoundTrans));
                }
                break;

                case ETrans.ByDay:
                {
                    int dayRoundTrans = dayRound + beginTime.Day - recvtime.Day;
                    dayRoundTrans = (dayRoundTrans <= 0) ? dayRoundTrans + 5 : dayRoundTrans;
                    sb.Append((dayRoundTrans == dayRound) ? "00" : String.Format("{0:D2}", dayRoundTrans));
                    sb.Append("00");
                }
                break;

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

                ///// 20190410-SYJ-Add
                //sb.Append(String.Format("{0:D2}", beginTime.Day));
                //sb.Append(String.Format("{0:D2}", beginTime.Hour));
                sb.Append('\r');

                return(sb.ToString());
            }
            catch (Exception e)
            {
                return("无对应站点包序号!");
            }
        }
예제 #7
0
        public static string ChannelTypeToUIStr(EChannelType type)
        {
            switch (type)
            {
            case EChannelType.GPRS: { return(CS_EChannelType_GPRS_UIStr); }

            case EChannelType.BeiDou: { return(CS_EChannelType_Beidou_UIStr); }

            case EChannelType.GSM: { return(CS_EChannelType_GSM_UIStr); }

            case EChannelType.PSTN: { return(CS_EChannelType_PSTN_UIStr); }

            case EChannelType.None: { return(CS_EChannelType_None_UIStr); }
            }
            throw new Exception("ChannelTypeToUIStr Error");
        }
예제 #8
0
        /// <summary>
        /// 读取指令设置
        /// </summary>
        /// <param name="sid"></param>
        /// <param name="cmds"></param>
        /// <param name="ctype"></param>
        /// <returns>
        /// GMS:
        ///     如果返回结果的长度>140字符,发送命令为String.Empty,即不发送命令
        ///     否则发送设置指令
        /// GPRS:
        ///     发送指令长度字节数的限制
        /// Beidou:
        ///      判断最终查询后的长度是否大于79*2Byte
        ///          如果大于79*2Byte,返回String.Empty
        /// </returns>
        public String BuildQuery(string sid, IList <EDownParam> cmds, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); //  添加首字符
            sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));          //  添加四位站点ID号
            sb.Append("0G");                                                      //  添加指令类型

            int length = 6;                                                       //  查询后指令的长度

            foreach (var cmd in cmds)
            {
                length = length + 3 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);

                sb.Append(CSpecialChars.BALNK_CHAR);                 //  添加空格符
                sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd)); //  添加指令对应的类型
            }
            sb.Append(CSpecialChars.ENTER_CHAR);                     //  添加结束符

            if (ctype == EChannelType.GSM)
            {
                //sb.Append("#26");
                //  GSM类型
                //  判断最终查询后的长度是否大于140Byte
                //      如果大于140Byte,返回String.Empty
                return(length > 140 ? string.Empty : sb.ToString());
            }
            else if (ctype == EChannelType.GPRS)
            {
                return(sb.ToString());
            }
            else if (ctype == EChannelType.BeiDou)
            {
                //  Beidou类型
                //  判断最终查询后的长度是否大于79*2Byte
                //      如果大于79*2Byte,返回String.Empty
                return((length > 79 * 2) ? string.Empty : sb.ToString());
            }
            throw new Exception("信道协议未编写!");
        }
예제 #9
0
        public void Init()
        {
            InitMap();
            this.m_channelType = EChannelType.GPRS;
            this.m_portType    = EListeningProtType.Port;
            if (tmrData == null)
            {
                tmrData = new System.Timers.Timer(250);
            }
            tmrData.Elapsed += new ElapsedEventHandler(tmrData_Elapsed);

            if (tmrDTU == null)
            {
                tmrDTU = new System.Timers.Timer(2000);
            }
            tmrDTU.Elapsed += new ElapsedEventHandler(tmrDTU_Elapsed);

            if (DTUList == null)
            {
                DTUList = new List <HDModemInfoStruct>();
            }
        }
예제 #10
0
 public bool Parse_Flash(string msg, EChannelType ctype, out CBatchStruct batch)
 {
     throw new NotImplementedException();
 }
예제 #11
0
 public string BuildSet(string sid, IList <EDownParam> cmds, CDownConf down, EChannelType ctype)
 {
     throw new NotImplementedException();
 }
예제 #12
0
 public string BuildQuery_SD(string sid, DateTime beginTime, EChannelType ctype)
 {
     throw new NotImplementedException();
 }
예제 #13
0
        public String BuildQuery(string sid, IList <EDownParamGY> cmds, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

            //sb.Append(Encoding.ASCII.GetBytes("01"));//  添加首字符
            sb.Append("\u0001");//  测试
            //sb.Append(String.Format("{0:D10}", Int32.Parse(sid.Trim())));//  添加遥测站地址
            //sb.Append(String.Format("{0:D2}", Int32.Parse(sid.Trim())));//  添加中心站地址
            //sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));//  添加密码
            //sb.Append(String.Format("{0:D2}", Int32.Parse(sid.Trim())));//  添加功能码
            sb.Append("00");                                              //  添加中心站地址
            sb.Append(String.Format("{0:D10}", Int32.Parse(sid.Trim()))); //  添加遥测站地址

            sb.Append("1234");                                            //  添加密码
            sb.Append("45");
            int    dataLength = 16;
            string length1    = Convert.ToString(dataLength, 16);
            string flag       = "8" + "0" + length1;

            sb.Append(flag);
            sb.Append("\u0002"); //  测试
            sb.Append("0000");   //  添加下行流水号
            int length = 4;      //  指令的长度

            foreach (var cmd in cmds)
            {
                switch (cmd)
                {
                case EDownParamGY.ontime:    //  发报时间
                    sb.Append(timeToString()); length += 12; break;

                case EDownParamGY.oldPwd:    //  旧密码
                    sb.Append("03");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append("1234");
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 8; break;

                case EDownParamGY.newPwd:    //  新密码
                    sb.Append("03");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append("4321"); length += 7; break;

                case EDownParamGY.memoryReset:    //  初始化固态存储
                    sb.Append("97"); length += 2; break;

                case EDownParamGY.timeFrom_To:    //  时段起止时间
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 17; break;

                /*case EDownParam.timeTo://  时段结束时间
                 *  sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
                 *  sb.Append(CSpecialChars.BALNK_CHAR); length += 9; break;*/

                case EDownParamGY.DRZ:    //  1 小时内 5 分钟间隔相对水位
                    sb.Append("DRZ");
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 4; break;

                case EDownParamGY.DRP:    //  1 小时内每 5 分钟时段雨量
                    sb.Append("DRP");
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 4; break;

                case EDownParamGY.Step:    //  时间步长码
                    sb.Append("DR");
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 6; break;

                case EDownParamGY.basicConfig:    //  遥测站基本配置读取/修改
                    /*for (var  in ) {
                     *  sb.Append(cmd);
                     *  sb.Append(CSpecialChars.BALNK_CHAR);
                     *  if (ProtocolMaps.DownParamMap.FindValue(cmd) != null)
                     *  {
                     *      sb.Append(CSpecialChars.BALNK_CHAR);
                     *      length += 4 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);
                     *  }
                     *  else
                     *      length += 3;
                     * }*/
                    break;

                case EDownParamGY.operatingPara:    //  运行参数读取/修改
                                                    /*for (var  in ){
                                                     * sb.Append(cmd);
                                                     * sb.Append(CSpecialChars.BALNK_CHAR);
                                                     * if (ProtocolMaps.DownParamMap.FindValue(cmd) != null)
                                                     * {
                                                     *     sb.Append(CSpecialChars.BALNK_CHAR);
                                                     *     length += 4 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);
                                                     * }
                                                     * else
                                                     *     length += 3;
                                                     * }*/
                    break;

                case EDownParamGY.Reset:    //  恢复出厂设置
                    sb.Append("98"); length += 2; break;

                case EDownParamGY.ICconfig:    //  设罝遥测站IC卡状态
                    sb.Append("ZT");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += 11; break;

                case EDownParamGY.pumpCtrl:    //  控制水泵状态
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break;

                case EDownParamGY.valveCtrl:    //  控制阀门状态
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break;

                case EDownParamGY.gateCtrl:    //  控制闸门状态
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break;

                case EDownParamGY.waterYield:    //  水量定值控制
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    length += 2; break;

                default:
                    throw new Exception("设置下行指令参数错误");
                }
            }
            //sb.Insert(19, String.Format("{0:D1}", 8));//  添加报文标识
            //length = 10;
            //Insert(20, String.Format("{0:X3}", length));//  添加报文长度
            sb.Append("\u0003");
            string dataMsg = sb.ToString();
            string crcMsg  = CRC.ToCRC16(dataMsg, false);
            string resut   = dataMsg + crcMsg;

            return(resut);
        }
예제 #14
0
 public string BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype)
 {
     throw new NotImplementedException();
 }
예제 #15
0
 public String BuildQuery_Batch(string sid, ETrans trans, DateTime beginTime, EChannelType ctype)
 {
     return("");
 }
예제 #16
0
        public string BuildSet(string sid, IList <EDownParamGY> cmds, CDownConfGY down, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("\u0001");                                          //  添加首字符
            sb.Append(String.Format("{0:D10}", Int32.Parse(sid.Trim()))); //  添加遥测站地址
            sb.Append(String.Format("{0:D2}", "00"));                     //  添加中心站地址
            sb.Append(String.Format("{0:D4}", "1234"));                   //  添加密码
            sb.Append("\u0002");                                          //  添加单包起始和结束符
            sb.Append("0000");                                            //  添加下行流水号
            sb.Append(timeToString());                                    // 添加发报时间
            int length = 16;                                              //  指令的长度

            foreach (var cmd in cmds)
            {
                switch (cmd)
                {
                case EDownParamGY.ICconfig:    //  设罝遥测站IC卡状态
                    sb.Insert(17, "4B");
                    sb.Append("ZT");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append(down.ICconfig); length += 11; break;

                case EDownParamGY.pumpCtrl:    //  控制水泵状态
                    sb.Insert(17, "4C");
                    sb.Append(down.PumpCtrl);
                    length += down.PumpCtrl.Length; break;

                case EDownParamGY.valveCtrl:    //  控制阀门状态
                    sb.Insert(17, "4D");
                    sb.Append(down.ValveCtrl);
                    length += down.ValveCtrl.Length; break;

                case EDownParamGY.gateCtrl:    //  控制闸门状态
                    sb.Insert(17, "4E");
                    sb.Append(down.GateCtrl);
                    length += down.GateCtrl.Length; break;

                case EDownParamGY.oldPwd:   //  旧密码
                    sb.Insert(17, "49");    //  添加功能码
                    sb.Append("03");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append(down.OldPwd);
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 8; break;

                case EDownParamGY.newPwd:    //  新密码
                    sb.Append("03");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append(down.NewPwd); length += 7; break;

                case EDownParamGY.basicConfigModify:    //  遥测站基本配置修改
                    sb.Insert(17, "40");

                    /*for (var  in ) {
                     *  sb.Append(cmd);
                     *  sb.Append(CSpecialChars.BALNK_CHAR);
                     *  if (ProtocolMaps.DownParamMap.FindValue(cmd) != null)
                     *  {
                     *      sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
                     *      sb.Append(CSpecialChars.BALNK_CHAR);
                     *      length += 4 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);
                     *  }
                     *  else
                     *      length += 3;
                     * }*/
                    break;

                case EDownParamGY.operatingParaModify:    //  运行参数修改
                    sb.Insert(17, "42");

                    /*for (var  in ){
                     *  sb.Append(cmd);
                     *  sb.Append(CSpecialChars.BALNK_CHAR);
                     *  if (ProtocolMaps.DownParamMap.FindValue(cmd) != null)
                     *  {
                     *      sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
                     *      sb.Append(CSpecialChars.BALNK_CHAR);
                     *      length += 4 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);
                     *  }
                     *  else
                     *      length += 3;
                     * }*/
                    break;

                case EDownParamGY.waterYield: //  水量定值控制
                    sb.Append(down.WaterYield);
                    sb.Insert(17, "4F");      //  插入功能码
                    length += 2; break;

                case EDownParamGY.clockset:    //  设置遥测站时钟
                    sb.Insert(17, "4A");
                    break;

                default:
                    throw new Exception("设置下行指令参数错误");
                }
            }
            sb.Insert(19, String.Format("{0:D1}", 8));      //  添加报文标识
            sb.Insert(20, String.Format("{0:X3}", length)); //  添加报文长度
            sb.Append("\u0003");                            //  添加结束符
            string dataMsg = sb.ToString();
            string crcMsg  = CRC.ToCRC16(dataMsg, false);
            string resut   = dataMsg + crcMsg;

            return(resut);

            throw new NotImplementedException();
        }
예제 #17
0
        public string BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("\u0001");                                          //  添加首字符
            sb.Append(String.Format("{0:D10}", Int32.Parse(sid.Trim()))); //  添加遥测站地址
            sb.Append(String.Format("{0:D2}", "00"));                     //  添加中心站地址
            sb.Append(String.Format("{0:D4}", "1234"));                   //  添加密码
            sb.Append("\u0002");                                          //  添加单包起始和结束符
            sb.Append("0000");                                            //  添加下行流水号
            sb.Append(timeToString());                                    // 添加发报时间
            int length = 16;                                              //  指令的长度
            //截取时间段的str
            string year  = beginTime.Year.ToString().Substring(2, 2);
            string month = beginTime.Month.ToString();

            if (month.Length < 2)
            {
                month = "0" + month;
            }
            string day = beginTime.Day.ToString();

            if (day.Length < 2)
            {
                day = "0" + day;
            }
            string hour = beginTime.Hour.ToString();

            if (hour.Length < 2)
            {
                hour = "0" + hour;
            }
            string strtMsg = year + month + day + hour;

            year  = endTime.Year.ToString().Substring(2, 2);
            month = endTime.Month.ToString();
            if (month.Length < 2)
            {
                month = "0" + month;
            }
            day = endTime.Day.ToString();
            if (day.Length < 2)
            {
                day = "0" + day;
            }
            hour = endTime.Hour.ToString();
            if (hour.Length < 2)
            {
                hour = "0" + hour;
            }
            string endMsg = year + month + day + hour;

            string msg = strtMsg + endMsg;

            //条件判定 暂时不需要
            if (true)
            {
                sb.Insert(17, "38");//  添加功能码(查询遥测站时段数据)
                sb.Append(msg);
                sb.Append(CSpecialChars.BALNK_CHAR);

                sb.Append("DRN05");
                sb.Append(CSpecialChars.BALNK_CHAR);
                sb.Append("DRP");
                length += 26;
            }
            sb.Insert(19, String.Format("{0:D1}", 8));      //  添加报文标识
            sb.Insert(20, String.Format("{0:X3}", length)); //  添加报文长度
            sb.Append("\u0005");                            //  添加结束符
            string dataMsg = sb.ToString();
            string crcMsg  = CRC.ToCRC16(dataMsg, false);
            string resut   = dataMsg + crcMsg;

            return(resut);
        }
예제 #18
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);
        }
예제 #19
0
 //  批量数据flash下行解析
 public bool Parse_Flash(String msg, EChannelType ctype, out CBatchStruct batch)
 {
     batch = null;
     return(false);
 }
예제 #20
0
        /// <summary>
        /// 设置指令设置
        /// </summary>
        /// <param name="sid"></param>
        /// <param name="cmds"></param>
        /// <param name="down"></param>
        /// <param name="ctype"></param>
        /// <returns>
        /// GMS:
        ///     如果返回结果的长度>140字符,发送命令为String.Empty,即不发送命令
        ///     否则发送设置指令
        /// GPRS:
        ///     发送指令长度字节数的限制
        /// Beidou:
        ///      判断最终查询后的长度是否大于79*2Byte
        ///          如果大于79*2Byte,返回String.Empty
        /// </returns>
        public String BuildSet(string sid, IList <EDownParam> cmds, CDownConf down, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

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

            int length = 6;

            foreach (var cmd in cmds)
            {
                length = length + 3 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);

                sb.Append(CSpecialChars.BALNK_CHAR);
                sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
                switch (cmd)
                {
                case EDownParam.Clock: sb.Append(down.Clock.Value.ToString("yyMMddHHmmss")); break;

                case EDownParam.NormalState: sb.Append(ProtocolMaps.NormalState4ProtoMap.FindValue(down.NormalState.Value)); break;

                case EDownParam.Voltage: sb.Append(String.Format("{0:D4}", (int)down.Voltage.Value)); break;

                case EDownParam.StationCmdID: sb.Append(down.StationCmdID); break;

                case EDownParam.TimeChoice: sb.Append(ProtocolMaps.TimeChoice4ProtoMap.FindValue(down.TimeChoice.Value)); break;

                case EDownParam.TimePeriod: sb.Append(ProtocolMaps.TimePeriodMap.FindValue(down.TimePeriod.Value)); break;

                case EDownParam.WorkStatus: sb.Append(ProtocolMaps.WorkStatus4ProtoMap.FindValue(down.WorkStatus.Value)); break;

                case EDownParam.VersionNum: sb.Append(down.VersionNum); break;

                case EDownParam.StandbyChannel:
                    sb.Append(ProtocolMaps.ChannelType4ProtoMap.FindValue(down.MainChannel.Value));
                    sb.Append(ProtocolMaps.ChannelType4ProtoMap.FindValue(down.ViceChannel.Value));
                    break;

                case EDownParam.TeleNum: sb.Append(down.TeleNum); break;

                case EDownParam.RingsNum: sb.Append(String.Format("{0:D2}", (int)down.RingsNum.Value)); break;

                case EDownParam.DestPhoneNum: sb.Append(down.DestPhoneNum); break;

                case EDownParam.TerminalNum: sb.Append(down.TerminalNum); break;

                case EDownParam.RespBeam: sb.Append(down.RespBeam); break;

                case EDownParam.AvegTime: sb.Append(String.Format("{0:D2}", (int)down.AvegTime.Value)); break;

                case EDownParam.KC: sb.Append(down.KC); break;

                case EDownParam.RainPlusReportedValue: sb.Append(String.Format("{0:D2}", (int)down.RainPlusReportedValue.Value)); break;

                case EDownParam.Rain: sb.Append(String.Format("{0:D4}", (int)down.Rain.Value)); break;

                case EDownParam.Water: sb.Append(String.Format("{0:D6}", (int)down.StorageWater.Value)); break;

                case EDownParam.WaterPlusReportedValue: sb.Append(String.Format("{0:D2}", (int)down.WaterPlusReportedValue.Value)); break;

                case EDownParam.SelectCollectionParagraphs: sb.Append(ProtocolMaps.SelectCollectionParagraphs4ProtoMap.FindValue(down.SelectCollectionParagraphs.Value)); break;

                case EDownParam.StationType: sb.Append(ProtocolHelpers.StationType2ProtoStr_set(down.StationType.Value)); break;

                case EDownParam.UserName: sb.Append(down.UserName); break;

                case EDownParam.StationName: sb.Append(down.StationName); break;

                default:
                    throw new Exception("设置下行指令参数错误");
                }
            }
            sb.Append(CSpecialChars.ENTER_CHAR);
            if (ctype == EChannelType.GSM)
            {
                //  GSM类型
                //  判断最终查询后的长度是否大于140Byte
                //      如果大于140Byte,返回String.Empty
                return(length > 140 ? string.Empty : sb.ToString());
            }
            else if (ctype == EChannelType.GPRS)
            {
                return(sb.ToString());
            }
            else if (ctype == EChannelType.BeiDou)
            {
                //  Beidou类型
                //  判断最终查询后的长度是否大于79*2Byte
                //      如果大于79*2Byte,返回String.Empty
                return((length > 79 * 2) ? string.Empty : sb.ToString());
            }
            throw new Exception("信道协议未编写!");
        }
예제 #21
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());
        }
예제 #22
0
 public String BuildQuery(string sid, IList <EDownParam> cmds, EChannelType ctype)
 {
     return("");
 }
예제 #23
0
        public String BuildSet(string sid, IList <EDownParamEV> cmds, CDownConfEV down, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("at+");//AT指令头
            foreach (var cmd in cmds)
            {
                switch (cmd)
                {
                case EDownParamEV.Clock:    //时钟命令
                    sb.Append("cclk=\"");
                    sb.Append(down.Date);
                    sb.Append("\"");
                    break;

                case EDownParamEV.TelephoneNum:    //目的手机卡号命令
                    sb.Append("cpbw=1,\"");
                    sb.Append(down.TelephoneNumD);
                    sb.Append("\",129,\"DestID\"");
                    break;

                case EDownParamEV.ID:    //ID号命令
                    sb.Append("cpbw=2,\"");
                    sb.Append(down.ID);
                    sb.Append("\",129,\"ID\"");
                    break;

                case EDownParamEV.HeightLimit:    //液位限制命令
                    sb.Append("cpbw=3,\"");
                    sb.Append(down.HeightLimit);
                    sb.Append("\",129,\"Hight\"");
                    break;
                }
            }
            return(sb.ToString());
        }
예제 #24
0
        public String BuildQuery(string sid, IList <EDownParamGY> cmds, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("\u0001");                                          //  测试
            sb.Append(String.Format("{0:D10}", Int32.Parse(sid.Trim()))); //  添加遥测站地址
            sb.Append(String.Format("{0:D2}", "00"));                     //  添加中心站地址
            sb.Append(String.Format("{0:D4}", "1234"));                   //  添加密码
            sb.Append("\u0002");                                          //  添加单包起始和结束符
            sb.Append("0000");                                            //  添加下行流水号
            sb.Append(timeToString());                                    // 添加发报时间
            int length = 16;                                              //  指令的长度

            foreach (var cmd in cmds)
            {
                switch (cmd)
                {
                case EDownParamGY.Rdata:    //  查询遥测站实时数据
                    sb.Insert(17, "37");    //  添加功能码
                    break;

                case EDownParamGY.ArtifN:    //  查询人工置数
                    sb.Insert(17, "39");
                    break;

                case EDownParamGY.Selement:    //  查询指定要素
                    sb.Insert(17, "3A");
                    break;

                case EDownParamGY.pumpRead:    //  查询水泵实时数据
                    sb.Insert(17, "44");
                    break;

                case EDownParamGY.version:    //  查询软件版本
                    sb.Insert(17, "45");
                    break;

                case EDownParamGY.alarm:    //  查询报警信息
                    sb.Insert(17, "46");
                    break;

                case EDownParamGY.clockset:    //  设置遥测站时钟
                    sb.Insert(17, "4A");
                    break;

                case EDownParamGY.history:    //  查询事件记录
                    sb.Insert(17, "50");
                    break;

                case EDownParamGY.clocksearch:    //  查询遥测站时钟
                    sb.Insert(17, "51");
                    break;

                case EDownParamGY.oldPwd:   //  旧密码
                    sb.Insert(17, "49");    //  添加功能码
                    sb.Append("03");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append("1234");
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 8; break;

                case EDownParamGY.newPwd:    //  新密码
                    sb.Append("03");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append("4321"); length += 7; break;

                case EDownParamGY.memoryReset: //  初始化固态存储
                    sb.Insert(17, "47");       //  添加功能码(初始化固态存储数据)
                    sb.Append("97"); length += 2; break;

                case EDownParamGY.timeFrom_To: //  时段起止时间
                    sb.Insert(17, "38");       //  添加功能码(查询遥测站时段数据)
                    sb.Append("1401231014012311");
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 17; break;

                /*case EDownParam.timeTo://  时段结束时间
                 *  sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
                 *  sb.Append(CSpecialChars.BALNK_CHAR); length += 9; break;*/

                case EDownParamGY.DRZ:    //  1 小时内 5 分钟间隔相对水位
                    sb.Append("DRZ1");
                    //sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 5; break;

                case EDownParamGY.DRP:    //  1 小时内每 5 分钟时段雨量
                    sb.Append("DRP");
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 4; break;

                case EDownParamGY.Step:    //  时间步长码
                    sb.Append("DR");
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    sb.Append(CSpecialChars.BALNK_CHAR); length += 6; break;

                case EDownParamGY.basicConfigRead:    //  遥测站基本配置读取
                    sb.Insert(17, "41");

                    /*for (var  in ) {
                     *  sb.Append(cmd);
                     *  sb.Append(CSpecialChars.BALNK_CHAR);
                     *  length += 3;
                     * }*/
                    break;

                case EDownParamGY.basicConfigModify:    //  遥测站基本配置修改
                    sb.Insert(17, "40");

                    /*for (var  in ) {
                     *  sb.Append(cmd);
                     *  sb.Append(CSpecialChars.BALNK_CHAR);
                     *  if (ProtocolMaps.DownParamMap.FindValue(cmd) != null)
                     *  {
                     *      sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
                     *      sb.Append(CSpecialChars.BALNK_CHAR);
                     *      length += 4 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);
                     *  }
                     *  else
                     *      length += 3;
                     * }*/
                    break;

                case EDownParamGY.operatingParaRead:    //  运行参数读取
                    sb.Insert(17, "43");

                    /*for (var  in ){
                     *  sb.Append(cmd);
                     *  sb.Append(CSpecialChars.BALNK_CHAR);
                     *  length += 3;
                     * }*/
                    break;

                case EDownParamGY.operatingParaModify:    //  运行参数修改
                    sb.Insert(17, "42");

                    /*for (var  in ){
                     *  sb.Append(cmd);
                     *  sb.Append(CSpecialChars.BALNK_CHAR);
                     *  if (ProtocolMaps.DownParamMap.FindValue(cmd) != null)
                     *  {
                     *      sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
                     *      sb.Append(CSpecialChars.BALNK_CHAR);
                     *      length += 4 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);
                     *  }
                     *  else
                     *      length += 3;
                     * }*/
                    break;

                case EDownParamGY.Reset:    //  恢复出厂设置
                    sb.Insert(17, "48");
                    sb.Append("98"); length += 2; break;

                case EDownParamGY.ICconfig:    //  设罝遥测站IC卡状态
                    sb.Insert(17, "4B");
                    sb.Append("ZT");
                    sb.Append(CSpecialChars.BALNK_CHAR);
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += 11; break;

                case EDownParamGY.pumpCtrl:    //  控制水泵状态
                    sb.Insert(17, "4C");
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break;

                case EDownParamGY.valveCtrl:    //  控制阀门状态
                    sb.Insert(17, "4D");
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break;

                case EDownParamGY.gateCtrl:    //  控制闸门状态
                    sb.Insert(17, "4E");
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break;

                case EDownParamGY.waterYield:    //  水量定值控制
                    sb.Insert(17, "4F");
                    sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd));
                    length += 2; break;

                default:
                    throw new Exception("设置下行指令参数错误");
                }
            }
            sb.Insert(19, String.Format("{0:D1}", 8));      //  添加报文标识
            sb.Insert(20, String.Format("{0:X3}", length)); //  添加报文长度
            sb.Append("\u0005");
            string dataMsg = sb.ToString();
            string crcMsg  = CRC.ToCRC16(dataMsg, false);
            string resut   = dataMsg + crcMsg;

            return(resut);
        }
예제 #25
0
 public string BuildQuery(string sid, IList <EDownParam> cmds, EChannelType ctype)
 {
     throw new NotImplementedException();
 }
예제 #26
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());
        }
예제 #27
0
        //  数据下行设置
        public String BuildSet(string sid, IList <EDownParam> cmds, CDownConf down, EChannelType ctype)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); //添加首字符
            sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));          //添加四位站点ID号
            sb.Append("0S");                                                      //添加指令类型

            int length = 6;                                                       //  查询后指令的长度

            foreach (var cmd in cmds)
            {
                length = length + 3 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]);

                sb.Append(CSpecialChars.BALNK_CHAR);
                sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd));
                switch (cmd)
                {
                case EDownParam.Clock: sb.Append(down.Clock.Value.ToString("yyMMddHHmmss")); break;

                case EDownParam.NormalState: sb.Append(ProtocolMaps.NormalState4ProtoMap.FindValue(down.NormalState.Value)); break;

                case EDownParam.Voltage: sb.Append(String.Format("{0:D4}", (int)down.Voltage.Value)); break;

                case EDownParam.StationCmdID: sb.Append(down.StationCmdID); break;

                case EDownParam.TimeChoice: sb.Append(ProtocolMaps.TimeChoice4ProtoMap.FindValue(down.TimeChoice.Value)); break;

                case EDownParam.TimePeriod: sb.Append(ProtocolMaps.TimePeriodMap.FindValue(down.TimePeriod.Value)); break;

                case EDownParam.WorkStatus: sb.Append(ProtocolMaps.WorkStatus4ProtoMap.FindValue(down.WorkStatus.Value)); break;

                case EDownParam.VersionNum: sb.Append(down.VersionNum); break;

                case EDownParam.StandbyChannel:
                    sb.Append(ProtocolMaps.ChannelType4ProtoMap.FindValue(down.MainChannel.Value));
                    sb.Append(ProtocolMaps.ChannelType4ProtoMap.FindValue(down.ViceChannel.Value));
                    break;

                case EDownParam.TeleNum: sb.Append(down.TeleNum); break;

                case EDownParam.RingsNum: sb.Append(String.Format("{0:D2}", (int)down.RingsNum.Value)); break;

                case EDownParam.DestPhoneNum: sb.Append(down.DestPhoneNum); break;

                case EDownParam.TerminalNum: sb.Append(down.TerminalNum); break;

                case EDownParam.GSMElec: sb.Append(ProtocolMaps.GSMElec4ProtoMap.FindValue(down.GSMElec.Value)); break;

                case EDownParam.RespBeam: sb.Append(down.RespBeam); break;

                case EDownParam.AvegTime: sb.Append(String.Format("{0:D2}", (int)down.AvegTime.Value)); break;

                case EDownParam.KC: sb.Append(down.KC); break;

                case EDownParam.RainPlusReportedValue: sb.Append(String.Format("{0:D2}", (int)down.RainPlusReportedValue.Value)); break;

                case EDownParam.Rain: sb.Append(String.Format("{0:D4}", (int)down.Rain.Value)); break;

                case EDownParam.realWater: sb.Append(String.Format("{0:D6}", (int)down.realWater.Value)); break;

                case EDownParam.WaterBase: sb.Append(String.Format("{0:D6}", (int)down.WaterBase.Value)); break;

                case EDownParam.WaterPlusReportedValue: sb.Append(String.Format("{0:D2}", (int)down.WaterPlusReportedValue.Value)); break;

                case EDownParam.SelectCollectionParagraphs: sb.Append(ProtocolMaps.SelectCollectionParagraphs4ProtoMap.FindValue(down.SelectCollectionParagraphs.Value)); break;

                case EDownParam.StationType: sb.Append(ProtocolHelpers.StationType2ProtoStr_set_proto(down.StationType.Value)); break;

                case EDownParam.SensorType: sb.Append(ProtocolMaps.SensorType4ProtoMap.FindValue(down.SensorType.Value)); break;

                case EDownParam.UserName: sb.Append(down.UserName); break;

                case EDownParam.StationName: sb.Append(down.StationName); break;

                default:
                    throw new Exception("设置下行指令参数错误");
                }
            }
            sb.Append(CSpecialChars.ENTER_CHAR);    //添加结束符

            if (ctype == EChannelType.None)
            {
                //  短信一包最大字节数为160
                return(length > 160 ? string.Empty : sb.ToString());
            }
            else if (ctype == EChannelType.BeiDou)
            {
                //  北斗卫星最大字节数为98
                return(length > 98 ? string.Empty : sb.ToString());
            }
            else if (ctype == EChannelType.GPRS || ctype == EChannelType.GSM)
            {
                return(sb.ToString());
            }
            throw new Exception("信道协议未编写!");
        }
예제 #28
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());
        }