/// <summary> /// 解析RTKBox配置信息协议 /// </summary> /// <param name="sp">当前串口</param> /// <param name="IN19">19数据实体类</param> public static void ParseDataIN19(SerialPort sp, Model.INF_B562_0119 IN19) { byte[] Data = new byte[sp.BytesToRead]; sp.Read(Data, 0, Data.Length); sp.DiscardInBuffer(); string str = null; for (int i = 0; i < Data.Length; i++) { str += Data[i].ToString("X2"); } System.Windows.Forms.MessageBox.Show(str); for (int i = 0; i < Data.Length - 6; i++) { if ((Data[i] == 0xB5) && (Data[i + 1] == 0x62)) { if ((Data[i + 2] == 0x01) && (Data[i + 3] == 0x19)) { ushort len = BitConverter.ToUInt16(Data, i + 4); if (Data.Length - i - 8 >= len) { byte[] buffer = Data.Skip(i + 2).Take(len + 6).ToArray(); if (Protocol_UBX.Checksum(buffer)) { byte[] payload = buffer.Skip(4).Take(len).ToArray(); IN19 = Protocol_UBX.RTKBoxOptions(payload); break; } } } } } }
/// <summary> /// 打开串口 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOpenPort_Click(object sender, EventArgs e) { sp = new SerialPort(); int Baudrate; if ((!string.IsNullOrEmpty(comboBoxPort.Text)) && (int.TryParse(comboBoxBaudrate.Text, out Baudrate))) { Controller.Global.OpenPort(sp, comboBoxPort.Text, Baudrate); Controller.Global.Order(sp, "SET", 1);//进入设置模式读取设置 Thread.Sleep(400); ThreadStart ThS = new ThreadStart(delegate() { IN19 = new Model.INF_B562_0119(); Stf = new Model.SetInf(); Controller.Global.ParseDataIN19(sp, IN19); Controller.Global.In19TOSetInf(IN19, Stf); BeginInvoke((EventHandler)(delegate { labProtocol.Text = Stf.Outputtype; labWoringband.Text = Stf.Rtkrate; labPosFormat.Text = "经纬度"; labGNSSmode.Text = Stf.Gnsstype; labRTKmode.Text = Stf.Rtkmode; labRTKoutBdRate.Text = Stf.Rtkoutputrate; labTFmode.Text = Stf.enableFlag; labNetID.Text = Stf.NetID; labchanel.Text = Stf.channels; SetTable(IN19.Stationtype); })); }); Thread thd = new Thread(ThS); thd.Start(); sp.DataReceived += new SerialDataReceivedEventHandler(Interpret); } else { MessageBox.Show("输入格式有误", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// 设置信息19协议数据转文本信息 /// </summary> /// <param name="In19"></param> /// <param name="Stf"></param> public static void In19TOSetInf(Model.INF_B562_0119 In19, Model.SetInf Stf) { switch (In19.Stationtype) { case 0: Stf.Stationtype = "基准站"; break; case 1: Stf.Stationtype = "流动站"; break; } switch (In19.Outputtype) { case 0: Stf.Outputtype = "NMEA"; break; case 1: Stf.Outputtype = "UBX"; break; case 2: Stf.Outputtype = "SPB"; break; case 3: Stf.Outputtype = "PIX"; break; case 4: Stf.Outputtype = "JIY"; break; case 5: Stf.Outputtype = "ZEROTECH"; break; case 6: Stf.Outputtype = "DJI"; break; } switch (In19.Rtkrate) { case 0: Stf.Rtkrate = "1HZ"; break; case 1: Stf.Rtkrate = "2HZ"; break; case 2: Stf.Rtkrate = "4HZ"; break; case 3: Stf.Rtkrate = "5HZ"; break; case 4: Stf.Rtkrate = "10HZ"; break; } switch (In19.Gnsstype) { case 0: Stf.Gnsstype = "GPS"; break; case 1: Stf.Gnsstype = "GPS+北斗"; break; } switch (In19.Rtkmode) { case 0: Stf.Rtkmode = "静态"; break; case 1: Stf.Rtkmode = "动态"; break; case 2: Stf.Rtkmode = "测向"; break; } switch (In19.Rtkoutputrate) { case 0: Stf.Rtkoutputrate = "9600"; break; case 1: Stf.Rtkoutputrate = "19200"; break; case 2: Stf.Rtkoutputrate = "38400"; break; case 3: Stf.Rtkoutputrate = "57600"; break; case 4: Stf.Rtkoutputrate = "115200"; break; } switch (In19.enableFlag) { case 0: Stf.enableFlag = "关闭"; break; case 1: Stf.enableFlag = "打开"; break; } Stf.NetID = In19.NetID.ToString(); Stf.channels = In19.channels.ToString(); }