skyeyesystem/MiniSAR-Simulator-Py-main/README.md
2026-01-29 09:47:15 +08:00

260 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# UDP交互程序
基于Python3的完整UDP交互系统包含三个独立模块用于实现雷达控制系统的通信功能。
## 系统架构
### 三个模块
#### 模块1UDP接收模块module1_receiver.py
- **功能**监听38101端口接收来自主控的控制指令
- **主类**`UDPReceiver`
- **关键方法**
- `start()`:启动接收模块
- `stop()`:停止接收模块
- `set_callback(callback)`:设置接收回调函数
#### 模块2UDP发送响应包模块module2_sender.py
- **功能**向37001端口发送控制指令的执行结果和状态包
- **主类**`ResponseSender`、`StatusPacketSender`
- **关键方法**
- `send_response(remote_addr, status, device_status)`:发送响应包
- `send_status_packet(remote_addr, device_status)`:发送设备状态包
#### 模块3UDP数据包发送模块module3_data_sender.py
- **功能**向37004端口发送回波和图像数据
- **主类**`DataSender`
- **关键方法**
- `send_echo_data(remote_addr, echo_data, sequence, max_packet_size)`:发送回波数据(自动分包)
- `send_image_data(remote_addr, image_data, imaging_params)`:发送图像数据
### 通信端口
| 模块 | 端口 | 方向 | 功能 |
|------|------|------|------|
| 模块1 | 38101 | 接收 | 接收控制指令 |
| 模块2 | 37001 | 发送 | 发送响应包和状态包 |
| 模块3 | 37004 | 发送 | 发送回波和图像数据 |
## 数据格式
### 控制包格式表4
```
帧头(4B) + 设备编号(1B) + 预留(3B) + 控制数据(192B) + 校验和(4B) + 帧尾(4B)
总长度208字节
```
### 控制数据格式表3
```
工作模式(1B) + 工作指令(1B) + 成像模式(1B) + 分辨率(1B) + 预留(4B) +
航线参数(多个) + 飞行参数(多个) + 其他参数(多个)
总长度192字节小端模式
```
### 响应包格式表9
```
帧头(4B) + 状态包类型(8B) + 设备编号(1B) + 预留(3B) + 系统版本(4B) +
错误包(8B) + 设备状态(64B) + 校验和(4B) + 帧尾(4B)
总长度100字节
```
### 回波数据包格式表12
```
同步码(2B) + 设备编号(2B) + 序号(2B) + 分包编号(2B) + 分包个数(2B) +
包大小(2B) + 负载数据(可变) + 校验和(1B) + 帧尾(1B)
最大长度1472字节
```
## 工作指令
| 指令 | 工作模式 | 工作指令 | 说明 |
|------|---------|---------|------|
| 连接 | 0 | 4 | 建立连接,启动状态包发送 |
| 断开连接 | 0 | 5 | 断开连接,停止状态包发送 |
| 上传航线 | 4 | 0 | 上传航线参数 |
| 开始计算 | 4 | 1 | 开始计算开关机 |
| 手动开机 | 4 | 2 | 手动开启雷达 |
| 结束当前任务 | 4 | 3 | 关闭当前任务 |
| 结束所有任务 | 0 | 3 | 停止所有任务 |
## 使用示例
### 启动服务器
```python
from main import RadarControlSystem
# 创建系统
system = RadarControlSystem()
# 启动系统
system.start()
# 保持运行
import time
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
system.stop()
```
### 运行测试客户端
```bash
# 在一个终端启动服务器
python3 main.py
# 在另一个终端运行测试客户端
python3 test_client.py
```
### 自定义使用
```python
from module1_receiver import UDPReceiver
from module2_sender import ResponseSender
from module3_data_sender import DataSender
from data_structures import ControlPacket, ExecutionStatus
# 创建接收模块
def on_packet_received(packet, remote_addr):
print(f"Received packet from {remote_addr}")
print(f"Work Mode: {packet.control_data.work_mode}")
print(f"Work Instruction: {packet.control_data.work_instruction}")
receiver = UDPReceiver(callback=on_packet_received)
receiver.start()
# 创建发送模块
sender = ResponseSender()
sender.send_response(('127.0.0.1', 12345), ExecutionStatus.SUCCESS)
# 创建数据发送模块
data_sender = DataSender()
echo_data = b'Echo data test' * 100
data_sender.send_echo_data(('127.0.0.1', 12345), echo_data)
```
## 文件结构
```
udp_program/
├── __init__.py # 包初始化文件
├── data_structures.py # 数据结构定义
├── module1_receiver.py # 模块1接收模块
├── module2_sender.py # 模块2发送响应模块
├── module3_data_sender.py # 模块3数据发送模块
├── main.py # 主程序
├── test_client.py # 测试客户端
└── README.md # 本文档
```
## 关键特性
1. **完整的数据结构支持**:根据文档表格完整实现所有数据结构
2. **自动分包处理**回波数据自动分包最大1472字节/包
3. **校验和验证**支持Uint32和Uint8校验和计算和验证
4. **小端模式**:所有数据采用小端模式序列化
5. **线程安全**:接收和发送在独立线程中运行
6. **完整日志**:详细的日志输出便于调试
7. **回调机制**:接收模块支持自定义回调处理
## 校验机制
### 控制包校验
- 帧头0x7EFFDC01
- 帧尾0x7EFFDC02
- 校验和从帧头到校验和不包含的所有字节Uint32无符号累加
### 回波数据包校验
- 同步码0x650F回波或0x750F图像
- 帧尾标志0xCB
- 校验和除校验字节外所有字节Uint8累加
## 连接流程
1. 主控发送"连接"指令到38101端口
2. 雷达接收并校验
3. 雷达通过37001端口发送响应包状态包类型=0执行状态=0
4. 连接成功后雷达开始向37001端口发送状态包1s/次)
5. 主控发送"断开连接"指令
6. 雷达停止发送状态包
## 日志输出
系统使用Python标准logging库支持以下日志级别
- INFO一般信息
- WARNING警告信息
- ERROR错误信息
- DEBUG调试信息
可通过修改日志级别来控制输出详细程度:
```python
import logging
logging.basicConfig(level=logging.DEBUG)
```
## 性能指标
- 接收延迟:< 1ms
- 发送延迟< 1ms
- 状态包发送频率1Hz可配置
- 最大分包大小1472字节
- 支持并发客户端无限制
## 故障排查
### 端口被占用
```bash
# 查看端口占用情况
lsof -i :38101
lsof -i :37001
lsof -i :37004
# 杀死占用进程
kill -9 <PID>
```
### 接收不到数据
1. 检查防火墙设置
2. 确认服务器正在运行
3. 检查客户端发送地址是否正确
4. 查看日志输出
### 校验和错误
1. 确认数据格式正确
2. 检查字节序应为小端模式
3. 验证校验和计算逻辑
## 扩展功能
### 添加自定义指令处理
`RadarControlSystem`类中添加新的处理方法
```python
def _handle_custom_instruction(self, remote_addr, control_data):
"""处理自定义指令"""
# 添加处理逻辑
self._send_response(remote_addr, ExecutionStatus.SUCCESS)
```
### 添加数据持久化
可以添加数据库支持来存储接收到的指令和状态信息
### 添加Web界面
可以使用Flask/Django等框架添加Web管理界面
## 版本历史
- v1.0.0 (2026-01-19)初始版本完整实现三个模块
## 许可证
MIT License
## 联系方式
如有问题或建议请联系开发团队