Пример #1
0
 public string BuildSet(string sid, IList <EDownParamGY> cmds, CDownConfGY down, EChannelType ctype)
 {
     throw new NotImplementedException();
 }
Пример #2
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();
        }