void OnRecMsg(RecMsgArgs args) { try { if(args.DataType==typeof(LL_Status)) { LL_Status stat = (LL_Status)args.Data; double batVol=(stat.battery_voltage_1)/1000.0; meterBattery.CurrentValue=batVol; textInfo.AppendText("状态数据LL_Status\r\n"); } if(args.DataType==typeof(IMU_CalcData)) { IMU_CalcData icd=(IMU_CalcData)args.Data; double heigt=icd.height/1000.0; double pitch=icd.angle_nick/1000.0; double roll=icd.angle_roll / 1000.0; double yaw=icd.angle_yaw / 1000.0; meterHeight.CurrentValue=heigt; meterPitch.CurrentValue=pitch; meterRoll.CurrentValue = roll; meterYaw.CurrentValue = yaw; chartAt.Series["Pitch"].Points.AddXY(sysTime / 10.0, pitch); chartAt.Series["Roll"].Points.AddXY(sysTime / 10.0,roll); //chartAt.Series["Yaw"].Points.AddXY(sysTime / 10.0, icd.angvel_yaw/1000.0); textInfo.AppendText("飞行数据LL_Status\r\n"); } if(args.DataType==null) { textInfo.AppendText(string.Format("{0:X}",args.RawData)+"\r\n"); } //Application.DoEvents(); } catch { } }
void xbee_OnRecMsg(object sender, SerialRecMsgEventArgs args) { while (!mutex) { Thread.Sleep(1); } mutex = false; try { byte[] pack = CombineBytes(lastPack, args.MessageBuf); RecMsgArgs targs = new RecMsgArgs(); Debug.WriteLine("上次:" + BytesToHexString(lastPack)); Debug.WriteLine("新接收:" + BytesToHexString(args.MessageBuf)); Debug.WriteLine("组合包:" + BytesToHexString(pack)); lastPack = pack; while (pack != null) { pack = GetPackage(lastPack, out lastPack); try { if (lastPack != null) { Debug.WriteLine("剩余包:" + BytesToHexString(lastPack)); } } catch (Exception e) { Debug.WriteLine("空引用--" + e.Message); } Debug.WriteLine("完整包:" + BytesToHexString(pack)); if (pack == null) { return; } Debug.WriteLine("数据总长度:" + pack.Length.ToString()); byte p = (byte)pack[5]; UInt16 l = (UInt16)(((UInt16)pack[4]) * 256 + (UInt16)pack[3]); Debug.WriteLine("数据有效字段长度:" + l.ToString()); byte[] data = GetBytes(pack, 6, l); switch (p) { case (byte)PackDes.LL_Status: targs.RawData = args.Message; targs.DataType = typeof(LL_Status); targs.Data = StructBytesConvertor.BytesToStruts(data, typeof(LL_Status)); SetRecEvent(targs); break; case (byte)PackDes.IMU_CalcData: targs.RawData = args.Message; targs.DataType = typeof(IMU_CalcData); byte[] tmp = new byte[4]; for (int k = 0; k < 4; k++) { tmp[k] = data[k + 76]; } /* byte tmp = data[76]; data[76] = data[78]; data[78] = tmp; tmp = data[77]; data[77] = data[79]; data[79] = tmp;*/ targs.Data = StructBytesConvertor.BytesToStruts(data, typeof(IMU_CalcData)); SetRecEvent(targs); break; } } } catch (Exception e) { Debug.WriteLine("接收线程异常:" + e.Message); } finally { mutex = true; } }
void Instance_OnRecMsg(RecMsgArgs args) { OnRecMsgHandler orm = new OnRecMsgHandler(OnRecMsg); BeginInvoke(orm, args); }
public void SetRecEvent(RecMsgArgs msg) { try { OnRecMsg(msg); } catch { } }