// 数据下行设置 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("信道协议未编写!"); }