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