This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
@@ -0,0 +1,250 @@
# 测区数据同步
<cite>
**本文档引用的文件**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
- [DetcGD10Dev.cpp](file://cpp/Operator/DetcGD10Dev.cpp)
- [OnLineSynTdDlg.cpp](file://cpp/Views/OnLineSynTdDlg.cpp)
- [OnLineSynDevDlg.cpp](file://cpp/Views/OnLineSynDevDlg.cpp)
- [OpSynDlg.cpp](file://cpp/Views/OpSynDlg.cpp)
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp)
- [DataOperator.cpp](file://cpp/Operator/DataOperator.cpp)
</cite>
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 引言
本文档全面构建了测区数据同步机制的技术文档,重点描述了CProManager如何协调FileTransfer和UpdateDataBase组件实现测区数据在本地应用与GD10设备间的双向同步。详细说明了同步协议的实现细节,包括数据包格式、传输校验机制(如CRC16/CRC32)和断点续传逻辑。解释了同步过程中对testzone.xml文件的读取、解析和更新流程,以及如何确保设备端与PC端测区数据的一致性。分析了同步失败的异常处理策略,如网络中断、设备无响应等情况下的重试机制和错误码定义。提供了性能优化建议,包括大数据量测区的分批传输策略和同步进度的UI反馈实现。文档包含实际同步日志的分析示例,帮助开发者诊断常见同步问题。
## 项目结构
项目结构显示了测区数据同步相关的文件和目录,包括CACHE、DB、Install、LOG、Release、cpp、h、res、tools等目录。关键文件包括ProManager.cpp、SynOperator.cpp、UpdateDataBase.cpp、FileTransfer.cpp等,这些文件实现了测区数据同步的核心功能。
```mermaid
graph TD
A[GeomativeStudio] --> B[CACHE]
A --> C[DB]
A --> D[Install]
A --> E[LOG]
A --> F[Release]
A --> G[cpp]
A --> H[h]
A --> I[res]
A --> J[tools]
G --> K[Managers]
G --> L[Operator]
G --> M[Tools]
G --> N[Views]
K --> O[ProManager.cpp]
L --> P[SynOperator.cpp]
L --> Q[UpdateDataBase.cpp]
M --> R[FileTransfer.cpp]
M --> S[Crc16.cpp]
M --> T[Crc32.cpp]
N --> U[OnLineSynTdDlg.cpp]
N --> V[OnLineSynDevDlg.cpp]
N --> W[OpSynDlg.cpp]
```
**Diagram sources**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
- [OnLineSynTdDlg.cpp](file://cpp/Views/OnLineSynTdDlg.cpp)
- [OnLineSynDevDlg.cpp](file://cpp/Views/OnLineSynDevDlg.cpp)
- [OpSynDlg.cpp](file://cpp/Views/OpSynDlg.cpp)
**Section sources**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
- [OnLineSynTdDlg.cpp](file://cpp/Views/OnLineSynTdDlg.cpp)
- [OnLineSynDevDlg.cpp](file://cpp/Views/OnLineSynDevDlg.cpp)
- [OpSynDlg.cpp](file://cpp/Views/OpSynDlg.cpp)
## 核心组件
核心组件包括CProManager、CSynOperator、CUpdateDataBase、FileTransfer、Crc16、Crc32等类,这些类实现了测区数据同步的核心功能。CProManager负责管理工程和测区,CSynOperator负责同步操作,CUpdateDataBase负责数据库更新,FileTransfer负责文件传输,Crc16和Crc32负责数据校验。
**Section sources**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
## 架构概述
测区数据同步机制的架构包括本地应用、GD10设备、网络通信、文件传输、数据校验等组件。CProManager协调FileTransfer和UpdateDataBase组件,实现测区数据在本地应用与GD10设备间的双向同步。
```mermaid
graph TD
A[本地应用] --> B[CProManager]
B --> C[FileTransfer]
B --> D[UpdateDataBase]
C --> E[GD10设备]
D --> F[数据库]
E --> G[网络通信]
C --> H[Crc16]
C --> I[Crc32]
```
**Diagram sources**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
## 详细组件分析
### CProManager分析
CProManager类负责管理工程和测区,包括创建工程、创建测区、同步数据等操作。它通过调用FileTransfer和UpdateDataBase组件实现测区数据的同步。
```mermaid
classDiagram
class CProManager {
+ShowTzList()
+GetDMS()
+ShowProList()
+CreateProjectInDB()
+InsertDefaultTzToProject()
+CreateProjectInDev()
+CreateDefaultTzInDev()
+CreateTzInDev()
}
```
**Diagram sources**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
### CSynOperator分析
CSynOperator类负责同步操作,包括同步测区数据、同步任务数据等。它通过调用CProManager和FileTransfer组件实现数据同步。
```mermaid
classDiagram
class CSynOperator {
+Syn()
+InitialSynDlg()
}
```
**Diagram sources**
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
### CUpdateDataBase分析
CUpdateDataBase类负责数据库更新,包括更新数据库版本、更新数据库结构等。它通过解析XML文件实现数据库的更新。
```mermaid
classDiagram
class CUpdateDataBase {
+QueryPreVersion()
+CheckNecessaryVersion()
+WriteVersionToDB()
+GetDBUpdatesInfo()
+ParserUpdateDBXml()
+AddDBTable()
+DeleteDBTable()
+AddTableCol()
+ModifyTableCol()
+ModifyDBTable()
}
```
**Diagram sources**
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
### FileTransfer分析
FileTransfer类负责文件传输,包括发送文件、接收文件等。它通过调用底层通信接口实现文件的传输。
```mermaid
classDiagram
class FileTransfer {
+error()
+status()
}
```
**Diagram sources**
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
### Crc16和Crc32分析
Crc16和Crc32类负责数据校验,包括计算CRC16和CRC32校验码。它们通过查表法实现高效的校验码计算。
```mermaid
classDiagram
class Crc16 {
+table[256]
+initialized
+Crc16()
}
class Crc32 {
+table[256]
+initialized
+Crc32()
}
```
**Diagram sources**
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
**Section sources**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
## 依赖分析
测区数据同步机制的依赖包括本地应用、GD10设备、网络通信、文件传输、数据校验等。CProManager依赖于FileTransfer和UpdateDataBase组件,FileTransfer依赖于Crc16和Crc32组件。
```mermaid
graph TD
A[CProManager] --> B[FileTransfer]
A --> C[UpdateDataBase]
B --> D[Crc16]
B --> E[Crc32]
```
**Diagram sources**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
## 性能考虑
为了提高测区数据同步的性能,可以采用分批传输策略,将大数据量的测区数据分成多个小批次进行传输。同时,可以通过UI反馈显示同步进度,提高用户体验。
## 故障排除指南
同步失败的常见原因包括网络中断、设备无响应、数据校验失败等。可以通过重试机制和错误码定义来处理这些异常情况。例如,当网络中断时,可以等待网络恢复后重新尝试同步;当设备无响应时,可以检查设备连接状态并重新连接。
**Section sources**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
## 结论
本文档详细描述了测区数据同步机制的实现细节,包括核心组件、架构概述、详细组件分析、依赖分析、性能考虑和故障排除指南。通过本文档,开发者可以更好地理解和实现测区数据同步功能。