コード例 #1
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("信道协议未编写!");
        }