/// <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("信道协议未编写!"); }