/// <summary> /// 添加波形片段 /// </summary> /// <param name="rwf">波形信息</param> /// <returns>添加结果 true-添加成功, fasle-添加失败</returns> public bool AddInformation(RecordWaveform rwf) { //判断通道号 if (Channel == rwf.Channel) { if (TimeStamp == null) { //初始化时间戳 TimeStamp = new CP56Time2a(rwf.TimeStamp.GetDataArray()); } else { //判断时间戳是否相同,不同则返回 if (!TimeStamp.IsEqual(rwf.TimeStamp)) { return(false); } } if (RecordMask[rwf.WaveformNum - 1][rwf.GroupNum - 1] == false) { RecordMask[rwf.WaveformNum - 1][rwf.GroupNum - 1] = true; //计算数据存储索引 int index = (rwf.WaveformNum - 1) * WavePointNum + (rwf.GroupNum - 1) * 64; Array.Copy(rwf.RawAdcArray, 0, WaveDataAdc, index, rwf.RawAdcArray.Length); return(true); } else { throw new Exception("重复添加波形--RecordDataItem-AddInformation"); } } return(false); }
/// <summary> /// 将波形记录信息添加到指定位置 /// </summary> /// <param name="rwf">一帧数据波形信息</param> /// <returns>是否完成添加 true-完成 false-未完成</returns> public bool AddRecordWaveform(RecordWaveform rwf) { var state = RecordList[rwf.Channel].AddInformation(rwf); if (++AddCount >= 8 * 12 * 2) { IsFinished = true; foreach (var m in RecordList) { if (m.IsFinished == false) { IsFinished = false; break; } } if (IsFinished) { if (WaveformArrived != null) { WaveformArrived(this, new WaveformArrivedEventArgs(RecordList)); } } } return(state); }
/// <summary> /// 获取校准信息 /// </summary> /// <param name="dataArray">数据数组</param> void GetCalbrationMessage(byte[] dataArray) { int len = dataArray[2]; int count = len / 4; var array = new UInt32[count]; for (int i = 0; i < count; i++) //大端模式 { array[i] = ((UInt32)dataArray[4 * i + 7] << 24) + ((UInt32)dataArray[4 * i + 8] << 16) + ((UInt32)dataArray[4 * i + 9] << 8) + (UInt32)dataArray[4 * i + 10]; } CalibrationAction property; switch (dataArray[5]) { case 0x40: { property = CalibrationAction.FactorCall; CalibrationMessageArrived(this, new OldCalibrationEventArgs(dataArray, array, property)); break; } case 0x41: { property = CalibrationAction.FactorDownload; CalibrationMessageArrived(this, new OldCalibrationEventArgs(dataArray, array, property)); break; } case 0x42: { property = CalibrationAction.FactorFix; CalibrationMessageArrived(this, new OldCalibrationEventArgs(dataArray, array, property)); break; } case 0x2A: //录波数据 { property = CalibrationAction.RecordWaveform; var form = new RecordWaveform(dataArray); RecordWaveformMessageArrived(this, new RecordWaveformEventArgs(form, dataArray)); break; } default: { property = CalibrationAction.Null; break; } } }
/// <summary> /// 录波数据事件参数 /// </summary> /// <param name="wave">录播数据结构体</param> /// <param name="array">字节数组</param> public RecordWaveformEventArgs(RecordWaveform wave, byte[] array) { Waveform = wave; DataArray = array; }