更新:1、增加日志模块,将标准输出信息写入到日志文件;
2、将RadarPara中DATA_RATE_TAS的单位由Hz改为s; 3、修复TAS_Ctrl::tas_beam_output函数中给Tracking_beam->TAS_track_index赋值错误的问题; Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
+35
-13
@@ -2,19 +2,41 @@
|
||||
|
||||
## 概述
|
||||
|
||||
<!-- 过时信息
|
||||
本次主要修改TAS波束控制逻辑,
|
||||
原有逻辑为:
|
||||
- 维护一个tas_target_queue队列,队列中每个元素可以保存一个TAS跟踪目标
|
||||
- 每次调用Beam_Ctrl()函数时,判断队列首个元素是否为空(empty_flag),若不为空,则输出TAS跟踪波束信息,否则不输出
|
||||
- 将队列进行循环移位,队列第一个目标移动至队尾,下一次Beam_Ctrl()调用将会跟踪下一个目标
|
||||
增加日志文件输出功能,具体需求如下:
|
||||
- 将标准输出std::cout重定向到日志文件,考虑使用 rdbuf() 方法,见[参考1](#参考1)
|
||||
- 在parameters.h中添加一个日志输出开关的宏定义,开关关闭时,不重定向输出到文件
|
||||
- 日志文件输出路径为“.\\rdp_logs\\”,日志文件名按当前日期+时间命名
|
||||
- 增加宏定义,在输出日志时添加时间戳、代码文件、代码行数等关键信息再输出到标准输出
|
||||
|
||||
原有逻辑的问题:
|
||||
- 原有逻辑下,TAS跟踪目标的数据率(目标信息更新频率)与波束时间相关,波束时间越短,则调用Beam_Ctrl()的频率越高,TAS目标的数据率也越高
|
||||
## 参考
|
||||
|
||||
新的逻辑为保证TAS目标的数据率不变:
|
||||
- 维护一个tas_target_queue队列,队列中每个元素可以保存一个TAS跟踪目标
|
||||
- 每次调用Beam_Ctrl()函数时,判断队列首个元素是否为空(empty_flag),若不为空,则再判断目标的航迹时间(T_track)和当前最新时间戳(latest_timestamp)的差值,若差值大于1 / DATA_RATE_TAS,则输出TAS跟踪波束信息,否则不输出
|
||||
- 将队列进行循环移位,队列第一个目标移动至队尾,下一次Beam_Ctrl()调用将会跟踪下一个目标
|
||||
### 参考1
|
||||
使用 rdbuf() 方法重定向标准输出,更符合C++的流式风格,通过替换 std::cout 的底层流缓冲区(streambuf),将其指向一个文件输出流(std::ofstream)。
|
||||
|
||||
注意:在RadarPara结构体中新增一项:DATA_RATE_TAS(TAS模式数据率),由dll调用者输入该参数的值(track_process_parameters_initial()),上述逻辑中DATA_RATE_TAS使用Work_Parameter中的DATA_RATE_TAS参数值,而不是使用parameters.h中的DATA_RATE_TAS宏定义值。 -->
|
||||
```cpp
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
int main() {
|
||||
std::ofstream file("output.txt");
|
||||
if (!file.is_open()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 保存原始的 cout 缓冲区,以便之后恢复
|
||||
auto original_buf = std::cout.rdbuf();
|
||||
|
||||
// 将 cout 的缓冲区替换为 file 的缓冲区
|
||||
std::cout.rdbuf(file.rdbuf());
|
||||
|
||||
// 此后的输出都会写入文件
|
||||
std::cout << "这条信息会写入文件。" << std::endl;
|
||||
|
||||
// 恢复 cout 的原始缓冲区,让输出回到控制台
|
||||
std::cout.rdbuf(original_buf);
|
||||
// file 对象会在析构时自动关闭
|
||||
|
||||
std::cout << "这条信息会回到控制台。" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user