// 数据下行设置 public String BuildSet(string sid, IList <EDownParam> cmds, CDownConf down, EChannelType ctype) { String result = String.Empty; String dataProtocol = Manager.XmlStationData.Instance.GetProtocolBySId(sid); //RG30 if (dataProtocol == "RG30") { Down = new Data.RG30.DownParser(); } //时差法 if (dataProtocol == "TDXY") { Down = new Data.TDXY.DownParser(); } //中游局协议 if (dataProtocol == "ZYJBX") { Down = new Data.ZYJBX.DownParser(); } if (dataProtocol == "SM100H") { Down = new Data.SM100H.DownParser(); } result = Down.BuildSet(sid, cmds, down, ctype); return(result); }
// 数据下行读取 public String BuildQuery(string sid, IList <EDownParam> cmds, 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("0G"); //添加指令类型 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)); } 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("信道协议未编写!"); }
public bool Init(string ip, int port, string account, string password) { try { if (ip == "" || port == 0) { return(false); } ///http://223.100.11.11:7080/SMSService.asmx sMS = new SMSService.SMSService(); string reference = ip; sMS.Url = reference; this.account = account; this.password = password; this.m_channelType = EChannelType.GSM; if (tmrData == null) { tmrData = new System.Timers.Timer(250); } tmrData.Elapsed += new ElapsedEventHandler(tmrData_Elapsed); tmrData.Start(); m_threadDealData.Start(); //Start(); return(true); } catch (Exception e) { Debug.WriteLine(e.Message); return(false); } }
/// <summary> /// 批量传输sd卡 /// </summary> /// <param name="sid"></param> /// <param name="trans"></param> /// <param name="beginTime"></param> /// <param name="ctype"></param> /// <returns></returns> public String BuildQuery_SD(string sid, DateTime beginTime, EChannelType ctype) { String result = String.Empty; String dataProtocol = Manager.XmlStationData.Instance.GetProtocolBySId(sid); //RG30 if (dataProtocol == "RG30") { Down = new Data.RG30.DownParser(); } //时差法 if (dataProtocol == "TDXY") { Down = new Data.TDXY.DownParser(); } //中游局协议 if (dataProtocol == "ZYJBX") { Down = new Data.ZYJBX.DownParser(); } if (dataProtocol == "SM100H") { Down = new Data.SM100H.DownParser(); } result = Down.BuildQuery_SD(sid, beginTime, ctype); return(result); }
/// <summary> /// 批量传输sd卡 /// </summary> /// <param name="sid"></param> /// <param name="trans"></param> /// <param name="beginTime"></param> /// <param name="ctype"></param> /// <returns></returns> public String BuildQuery_SD(string sid, DateTime beginTime, EChannelType ctype) { // 构建发送指令的字符串 StringBuilder sb = new StringBuilder(); sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim()))); sb.Append("0B"); sb.Append(beginTime.ToString("yyMMddHH")); return(sb.ToString()); }
// 批量数据主板下行 public String BuildQuery_Batch(string sid, ETrans trans, DateTime beginTime, EChannelType ctype) { try { //获取packageNum和recvtime CEntityPackage package = UpParser.cEntityPackage[sid]; String packageNum = package.PackageNum; DateTime recvtime = package.time; StringBuilder sb = new StringBuilder(); sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim()))); sb.Append("0G"); sb.Append(" 29"); int dayRound = Int32.Parse(packageNum.Substring(0, 2)); int hourRound = Int32.Parse(packageNum.Substring(2, 2)); switch (trans) { case ETrans.ByHour: { int dayRoundTrans = dayRound + beginTime.Day - recvtime.Day; sb.Append(String.Format("{0:D2}", dayRoundTrans)); int hourRoundTrans = hourRound - recvtime.Hour + beginTime.Hour; sb.Append(String.Format("{0:D2}", hourRoundTrans)); } break; case ETrans.ByDay: { int dayRoundTrans = dayRound + beginTime.Day - recvtime.Day; dayRoundTrans = (dayRoundTrans <= 0) ? dayRoundTrans + 5 : dayRoundTrans; sb.Append((dayRoundTrans == dayRound) ? "00" : String.Format("{0:D2}", dayRoundTrans)); sb.Append("00"); } break; default: throw new Exception("传输格式错误"); } ///// 20190410-SYJ-Add //sb.Append(String.Format("{0:D2}", beginTime.Day)); //sb.Append(String.Format("{0:D2}", beginTime.Hour)); sb.Append('\r'); return(sb.ToString()); } catch (Exception e) { return("无对应站点包序号!"); } }
public static string ChannelTypeToUIStr(EChannelType type) { switch (type) { case EChannelType.GPRS: { return(CS_EChannelType_GPRS_UIStr); } case EChannelType.BeiDou: { return(CS_EChannelType_Beidou_UIStr); } case EChannelType.GSM: { return(CS_EChannelType_GSM_UIStr); } case EChannelType.PSTN: { return(CS_EChannelType_PSTN_UIStr); } case EChannelType.None: { return(CS_EChannelType_None_UIStr); } } throw new Exception("ChannelTypeToUIStr Error"); }
/// <summary> /// 读取指令设置 /// </summary> /// <param name="sid"></param> /// <param name="cmds"></param> /// <param name="ctype"></param> /// <returns> /// GMS: /// 如果返回结果的长度>140字符,发送命令为String.Empty,即不发送命令 /// 否则发送设置指令 /// GPRS: /// 发送指令长度字节数的限制 /// Beidou: /// 判断最终查询后的长度是否大于79*2Byte /// 如果大于79*2Byte,返回String.Empty /// </returns> public String BuildQuery(string sid, IList <EDownParam> cmds, 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("0G"); // 添加指令类型 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)); // 添加指令对应的类型 } sb.Append(CSpecialChars.ENTER_CHAR); // 添加结束符 if (ctype == EChannelType.GSM) { //sb.Append("#26"); // 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("信道协议未编写!"); }
public void Init() { InitMap(); this.m_channelType = EChannelType.GPRS; this.m_portType = EListeningProtType.Port; if (tmrData == null) { tmrData = new System.Timers.Timer(250); } tmrData.Elapsed += new ElapsedEventHandler(tmrData_Elapsed); if (tmrDTU == null) { tmrDTU = new System.Timers.Timer(2000); } tmrDTU.Elapsed += new ElapsedEventHandler(tmrDTU_Elapsed); if (DTUList == null) { DTUList = new List <HDModemInfoStruct>(); } }
public bool Parse_Flash(string msg, EChannelType ctype, out CBatchStruct batch) { throw new NotImplementedException(); }
public string BuildSet(string sid, IList <EDownParam> cmds, CDownConf down, EChannelType ctype) { throw new NotImplementedException(); }
public string BuildQuery_SD(string sid, DateTime beginTime, EChannelType ctype) { throw new NotImplementedException(); }
public String BuildQuery(string sid, IList <EDownParamGY> cmds, EChannelType ctype) { StringBuilder sb = new StringBuilder(); //sb.Append(Encoding.ASCII.GetBytes("01"));// 添加首字符 sb.Append("\u0001");// 测试 //sb.Append(String.Format("{0:D10}", Int32.Parse(sid.Trim())));// 添加遥测站地址 //sb.Append(String.Format("{0:D2}", Int32.Parse(sid.Trim())));// 添加中心站地址 //sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim())));// 添加密码 //sb.Append(String.Format("{0:D2}", Int32.Parse(sid.Trim())));// 添加功能码 sb.Append("00"); // 添加中心站地址 sb.Append(String.Format("{0:D10}", Int32.Parse(sid.Trim()))); // 添加遥测站地址 sb.Append("1234"); // 添加密码 sb.Append("45"); int dataLength = 16; string length1 = Convert.ToString(dataLength, 16); string flag = "8" + "0" + length1; sb.Append(flag); sb.Append("\u0002"); // 测试 sb.Append("0000"); // 添加下行流水号 int length = 4; // 指令的长度 foreach (var cmd in cmds) { switch (cmd) { case EDownParamGY.ontime: // 发报时间 sb.Append(timeToString()); length += 12; break; case EDownParamGY.oldPwd: // 旧密码 sb.Append("03"); sb.Append(CSpecialChars.BALNK_CHAR); sb.Append("1234"); sb.Append(CSpecialChars.BALNK_CHAR); length += 8; break; case EDownParamGY.newPwd: // 新密码 sb.Append("03"); sb.Append(CSpecialChars.BALNK_CHAR); sb.Append("4321"); length += 7; break; case EDownParamGY.memoryReset: // 初始化固态存储 sb.Append("97"); length += 2; break; case EDownParamGY.timeFrom_To: // 时段起止时间 sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); sb.Append(CSpecialChars.BALNK_CHAR); length += 17; break; /*case EDownParam.timeTo:// 时段结束时间 * sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd)); * sb.Append(CSpecialChars.BALNK_CHAR); length += 9; break;*/ case EDownParamGY.DRZ: // 1 小时内 5 分钟间隔相对水位 sb.Append("DRZ"); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); sb.Append(CSpecialChars.BALNK_CHAR); length += 4; break; case EDownParamGY.DRP: // 1 小时内每 5 分钟时段雨量 sb.Append("DRP"); sb.Append(CSpecialChars.BALNK_CHAR); length += 4; break; case EDownParamGY.Step: // 时间步长码 sb.Append("DR"); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); sb.Append(CSpecialChars.BALNK_CHAR); length += 6; break; case EDownParamGY.basicConfig: // 遥测站基本配置读取/修改 /*for (var in ) { * sb.Append(cmd); * sb.Append(CSpecialChars.BALNK_CHAR); * if (ProtocolMaps.DownParamMap.FindValue(cmd) != null) * { * sb.Append(CSpecialChars.BALNK_CHAR); * length += 4 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]); * } * else * length += 3; * }*/ break; case EDownParamGY.operatingPara: // 运行参数读取/修改 /*for (var in ){ * sb.Append(cmd); * sb.Append(CSpecialChars.BALNK_CHAR); * if (ProtocolMaps.DownParamMap.FindValue(cmd) != null) * { * sb.Append(CSpecialChars.BALNK_CHAR); * length += 4 + Int32.Parse(ProtocolMaps.DownParamLengthMap[cmd]); * } * else * length += 3; * }*/ break; case EDownParamGY.Reset: // 恢复出厂设置 sb.Append("98"); length += 2; break; case EDownParamGY.ICconfig: // 设罝遥测站IC卡状态 sb.Append("ZT"); sb.Append(CSpecialChars.BALNK_CHAR); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += 11; break; case EDownParamGY.pumpCtrl: // 控制水泵状态 sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break; case EDownParamGY.valveCtrl: // 控制阀门状态 sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break; case EDownParamGY.gateCtrl: // 控制闸门状态 sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break; case EDownParamGY.waterYield: // 水量定值控制 sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += 2; break; default: throw new Exception("设置下行指令参数错误"); } } //sb.Insert(19, String.Format("{0:D1}", 8));// 添加报文标识 //length = 10; //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); }
public string BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype) { throw new NotImplementedException(); }
public String BuildQuery_Batch(string sid, ETrans trans, DateTime beginTime, EChannelType ctype) { return(""); }
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(); }
public string BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, 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; // 指令的长度 //截取时间段的str string year = beginTime.Year.ToString().Substring(2, 2); string month = beginTime.Month.ToString(); if (month.Length < 2) { month = "0" + month; } string day = beginTime.Day.ToString(); if (day.Length < 2) { day = "0" + day; } string hour = beginTime.Hour.ToString(); if (hour.Length < 2) { hour = "0" + hour; } string strtMsg = year + month + day + hour; year = endTime.Year.ToString().Substring(2, 2); month = endTime.Month.ToString(); if (month.Length < 2) { month = "0" + month; } day = endTime.Day.ToString(); if (day.Length < 2) { day = "0" + day; } hour = endTime.Hour.ToString(); if (hour.Length < 2) { hour = "0" + hour; } string endMsg = year + month + day + hour; string msg = strtMsg + endMsg; //条件判定 暂时不需要 if (true) { sb.Insert(17, "38");// 添加功能码(查询遥测站时段数据) sb.Append(msg); sb.Append(CSpecialChars.BALNK_CHAR); sb.Append("DRN05"); sb.Append(CSpecialChars.BALNK_CHAR); sb.Append("DRP"); length += 26; } sb.Insert(19, String.Format("{0:D1}", 8)); // 添加报文标识 sb.Insert(20, String.Format("{0:X3}", length)); // 添加报文长度 sb.Append("\u0005"); // 添加结束符 string dataMsg = sb.ToString(); string crcMsg = CRC.ToCRC16(dataMsg, false); string resut = dataMsg + crcMsg; return(resut); }
// 批量数据flash下行解析 public bool Parse_Flash(String msg, EChannelType ctype, out CBatchStruct batch) { batch = new CBatchStruct(); try { string data = string.Empty; if (!ProtocolHelpers.DeleteSpecialChar(msg, out data)) { return(false); } // 解析站点ID , 4位 0001 batch.StationID = data.Substring(0, 4); // 解析命令指令 ,2位 1K batch.Cmd = data.Substring(4, 2); // 解析站点类型, 2位 01 batch.StationType = ProtocolHelpers.ProtoStr2StationType_1(data.Substring(6, 2)); // 解析传输类型, 2位 02/03 batch.TransType = ProtocolMaps.TransMap.FindKey(data.Substring(8, 2)); //创建返回的数据对象 var datas = new List <CTimeAndData>(); //ByDay ByHour区分 //02 按天传 03按小时 04按一天整点 switch (batch.TransType) { //按天传 02 case ETrans.ByDay: { int dateYear = Int32.Parse("20" + data.Substring(10, 2)); // 年 int dateMonth = Int32.Parse(data.Substring(12, 2)); // 月 //数据处理 data = data.Substring(14); while (data.Length >= 12) { DateTime recvTime = new DateTime( year: dateYear, //年 month: dateMonth, //月 day: Int32.Parse(data.Substring(0, 2)), //日 hour: Int32.Parse(data.Substring(2, 2)), //时 minute: Int32.Parse(data.Substring(4, 2)), //分 second: 0 ); string datasegs = data.Substring(6, 6); datas.Add(new CTimeAndData { Time = recvTime, Data = datasegs }); data = data.Substring(12); } } break; //按小时传 03 case ETrans.ByHour: { //判断是GSM还是GPRS传送方式 //GSM:yymmddhh GPRS:yymm if (ctype == EChannelType.GPRS) { //GPRS类型 int dateYear = Int32.Parse("20" + data.Substring(10, 2)); // 年 int dateMonth = Int32.Parse(data.Substring(12, 2)); // 月 //数据处理 data = data.Substring(14); while (data.Length >= 12) { DateTime recvTime = new DateTime( year: dateYear, //年 month: dateMonth, //月 day: Int32.Parse(data.Substring(0, 2)), //日 hour: Int32.Parse(data.Substring(2, 2)), //时 minute: Int32.Parse(data.Substring(4, 2)), //分 second: 0 ); string datasegs = data.Substring(6, 6); datas.Add(new CTimeAndData { Time = recvTime, Data = datasegs }); data = data.Substring(12); } } else if (ctype == EChannelType.GSM) { //GSM类型 int dateYear = Int32.Parse("20" + data.Substring(10, 2)); // 年 int dateMonth = Int32.Parse(data.Substring(12, 2)); // 月 int dateDay = Int32.Parse(data.Substring(14, 2)); // 日 int dateHour = Int32.Parse(data.Substring(16, 2)); // 时 //数据处理 data = data.Substring(14); while (data.Length >= 12) { DateTime recvTime = new DateTime( year: dateYear, //年 month: dateMonth, //月 day: dateDay, //日 hour: dateHour, //时 minute: Int32.Parse(data.Substring(0, 2)), //分 second: 0 ); string datasegs = data.Substring(2, 6); datas.Add(new CTimeAndData { Time = recvTime, Data = datasegs }); data = data.Substring(8); } } } break; //按一天整点传 04 case ETrans.ByDayHour: { int dateYear = Int32.Parse("20" + data.Substring(10, 2)); // 年 int dateMonth = Int32.Parse(data.Substring(12, 2)); // 月 int dateDay = Int32.Parse(data.Substring(14, 2)); // 日 //数据处理 data = data.Substring(16); while (data.Length >= 8) { DateTime recvTime = new DateTime( year: dateYear, //年 month: dateMonth, //月 day: dateDay, //日 hour: Int32.Parse(data.Substring(0, 2)), //时 minute: 0, //分 second: 0 ); string datasegs = data.Substring(2, 6); datas.Add(new CTimeAndData { Time = recvTime, Data = datasegs }); data = data.Substring(8); } } break; } batch.Datas = datas; return(true); } catch (Exception exp) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("批量数据解析不完整" + exp.Message); } return(false); }
// 批量数据flash下行解析 public bool Parse_Flash(String msg, EChannelType ctype, out CBatchStruct batch) { batch = null; return(false); }
/// <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("信道协议未编写!"); }
// 批量数据Flash下行 public String BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype) { // 构建发送指令的字符串 StringBuilder sb = new StringBuilder(); sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim()))); sb.Append("0K"); // stationtype : 01为水位 02为雨量 sb.Append(ProtocolHelpers.StationType2ProtoStr_1(stationType)); // dayOrHour : 03为按小时传 02为按天传 // 按小时传 时间格式: yyMMddHH // 按天传 时间格式: yyMMdd // 按一天整点传 时间格式: yyMMddHH sb.Append(ProtocolMaps.TransMap.FindValue(trans)); switch (trans) { case ETrans.ByHour: sb.Append(beginTime.ToString("yyMMddHH")); sb.Append(endTime.ToString("yyMMddHH")); break; case ETrans.ByDay: sb.Append(beginTime.ToString("yyMMdd")); sb.Append(endTime.ToString("yyMMdd")); break; case ETrans.ByDayHour: sb.Append(beginTime.ToString("yyMMddHH")); sb.Append(endTime.ToString("yyMMddHH")); break; default: throw new Exception("传输格式错误"); } sb.Append('\r'); return(sb.ToString()); }
public String BuildQuery(string sid, IList <EDownParam> cmds, EChannelType ctype) { return(""); }
public String BuildSet(string sid, IList <EDownParamEV> cmds, CDownConfEV down, EChannelType ctype) { StringBuilder sb = new StringBuilder(); sb.Append("at+");//AT指令头 foreach (var cmd in cmds) { switch (cmd) { case EDownParamEV.Clock: //时钟命令 sb.Append("cclk=\""); sb.Append(down.Date); sb.Append("\""); break; case EDownParamEV.TelephoneNum: //目的手机卡号命令 sb.Append("cpbw=1,\""); sb.Append(down.TelephoneNumD); sb.Append("\",129,\"DestID\""); break; case EDownParamEV.ID: //ID号命令 sb.Append("cpbw=2,\""); sb.Append(down.ID); sb.Append("\",129,\"ID\""); break; case EDownParamEV.HeightLimit: //液位限制命令 sb.Append("cpbw=3,\""); sb.Append(down.HeightLimit); sb.Append("\",129,\"Hight\""); break; } } return(sb.ToString()); }
public String BuildQuery(string sid, IList <EDownParamGY> cmds, 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.Rdata: // 查询遥测站实时数据 sb.Insert(17, "37"); // 添加功能码 break; case EDownParamGY.ArtifN: // 查询人工置数 sb.Insert(17, "39"); break; case EDownParamGY.Selement: // 查询指定要素 sb.Insert(17, "3A"); break; case EDownParamGY.pumpRead: // 查询水泵实时数据 sb.Insert(17, "44"); break; case EDownParamGY.version: // 查询软件版本 sb.Insert(17, "45"); break; case EDownParamGY.alarm: // 查询报警信息 sb.Insert(17, "46"); break; case EDownParamGY.clockset: // 设置遥测站时钟 sb.Insert(17, "4A"); break; case EDownParamGY.history: // 查询事件记录 sb.Insert(17, "50"); break; case EDownParamGY.clocksearch: // 查询遥测站时钟 sb.Insert(17, "51"); break; case EDownParamGY.oldPwd: // 旧密码 sb.Insert(17, "49"); // 添加功能码 sb.Append("03"); sb.Append(CSpecialChars.BALNK_CHAR); sb.Append("1234"); sb.Append(CSpecialChars.BALNK_CHAR); length += 8; break; case EDownParamGY.newPwd: // 新密码 sb.Append("03"); sb.Append(CSpecialChars.BALNK_CHAR); sb.Append("4321"); length += 7; break; case EDownParamGY.memoryReset: // 初始化固态存储 sb.Insert(17, "47"); // 添加功能码(初始化固态存储数据) sb.Append("97"); length += 2; break; case EDownParamGY.timeFrom_To: // 时段起止时间 sb.Insert(17, "38"); // 添加功能码(查询遥测站时段数据) sb.Append("1401231014012311"); sb.Append(CSpecialChars.BALNK_CHAR); length += 17; break; /*case EDownParam.timeTo:// 时段结束时间 * sb.Append(ProtocolMaps.DownParamMap.FindValue(cmd)); * sb.Append(CSpecialChars.BALNK_CHAR); length += 9; break;*/ case EDownParamGY.DRZ: // 1 小时内 5 分钟间隔相对水位 sb.Append("DRZ1"); //sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); sb.Append(CSpecialChars.BALNK_CHAR); length += 5; break; case EDownParamGY.DRP: // 1 小时内每 5 分钟时段雨量 sb.Append("DRP"); sb.Append(CSpecialChars.BALNK_CHAR); length += 4; break; case EDownParamGY.Step: // 时间步长码 sb.Append("DR"); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); sb.Append(CSpecialChars.BALNK_CHAR); length += 6; break; case EDownParamGY.basicConfigRead: // 遥测站基本配置读取 sb.Insert(17, "41"); /*for (var in ) { * sb.Append(cmd); * sb.Append(CSpecialChars.BALNK_CHAR); * length += 3; * }*/ 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.operatingParaRead: // 运行参数读取 sb.Insert(17, "43"); /*for (var in ){ * sb.Append(cmd); * sb.Append(CSpecialChars.BALNK_CHAR); * 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.Reset: // 恢复出厂设置 sb.Insert(17, "48"); sb.Append("98"); length += 2; break; case EDownParamGY.ICconfig: // 设罝遥测站IC卡状态 sb.Insert(17, "4B"); sb.Append("ZT"); sb.Append(CSpecialChars.BALNK_CHAR); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += 11; break; case EDownParamGY.pumpCtrl: // 控制水泵状态 sb.Insert(17, "4C"); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break; case EDownParamGY.valveCtrl: // 控制阀门状态 sb.Insert(17, "4D"); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break; case EDownParamGY.gateCtrl: // 控制闸门状态 sb.Insert(17, "4E"); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += Int32.Parse(ProtocolMaps.DownParamLengthMapGY[cmd]); break; case EDownParamGY.waterYield: // 水量定值控制 sb.Insert(17, "4F"); sb.Append(ProtocolMaps.DownParamMapGY.FindValue(cmd)); length += 2; break; default: throw new Exception("设置下行指令参数错误"); } } sb.Insert(19, String.Format("{0:D1}", 8)); // 添加报文标识 sb.Insert(20, String.Format("{0:X3}", length)); // 添加报文长度 sb.Append("\u0005"); string dataMsg = sb.ToString(); string crcMsg = CRC.ToCRC16(dataMsg, false); string resut = dataMsg + crcMsg; return(resut); }
public string BuildQuery(string sid, IList <EDownParam> cmds, EChannelType ctype) { throw new NotImplementedException(); }
//示例: $00010K01yymmddhh#13 public String BuildQuery(string sid, EStationType stationType, ETrans trans, DateTime beginTime, EChannelType ctype) { // 拼接发送指令的字符串 StringBuilder sb = new StringBuilder(); sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim()))); sb.Append("0K"); // type : 01:01为水位 02为雨量 sb.Append(ProtocolHelpers.StationType2ProtoStr(stationType)); switch (trans) { case ETrans.ByHour: sb.Append(beginTime.ToString("yyMMddHH")); break; case ETrans.ByDay: sb.Append(beginTime.ToString("yyMMdd")); sb.Append("88"); break; default: throw new Exception("传输格式错误"); } sb.Append('\r'); return(sb.ToString()); }
// 数据下行设置 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("信道协议未编写!"); }
// 批量数据UBatch下行 public String BuildQuery_UBatch(string sid, EStationType stationType, ETrans trans, DateTime beginTime, EChannelType ctype) { // 构建发送指令的字符串 StringBuilder sb = new StringBuilder(); sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim()))); sb.Append("0K"); // stationtype : 01为水位 02为雨量 sb.Append(ProtocolHelpers.StationType2ProtoStr_1(stationType)); // 时间 sb.Append(beginTime.ToString("yyMMddHH")); sb.Append('\r'); return(sb.ToString()); }