# 开发工具与实用程序 **本文档引用的文件** - [SComPort.cpp](file://cpp\Tools\SComPort.cpp) - [SComPort.h](file://h\SComPort.h) - [TcpClient.cpp](file://cpp\Tools\TcpClient.cpp) - [TcpClient.h](file://h\TcpClient.h) - [Zmodem.cpp](file://cpp\Tools\Zmodem.cpp) - [Zmodem.h](file://h\Zmodem.h) - [Crc16.cpp](file://cpp\Tools\Crc16.cpp) - [Crc16.h](file://h\Crc16.h) - [Crc32.cpp](file://cpp\Tools\Crc32.cpp) - [Crc32.h](file://h\Crc32.h) - [FileOperTools.cpp](file://cpp\Tools\FileOperTools.cpp) - [FileOperTools.h](file://h\FileOperTools.h) - [GD10OperCmd.cpp](file://cpp\Tools\GD10OperCmd.cpp) - [GD10OperCmd.h](file://h\GD10OperCmd.h) - [NetWorkOper.cpp](file://cpp\Tools\NetWorkOper.cpp) - [NetWorkOper.h](file://h\NetWorkOper.h) - [GUCodeCreator.cpp](file://cpp\Tools\GUCodeCreator.cpp) - [GUCodeCreator.h](file://h\GUCodeCreator.h) - [excel.cpp](file://cpp\Tools\excel.cpp) - [excel.h](file://h\excel.h) - [checkupdate.cpp](file://cpp\Tools\checkupdate.cpp) - [checkupdate.h](file://h\checkupdate.h) ## 目录 1. [通信相关工具](#通信相关工具) 2. [数据处理工具](#数据处理工具) 3. [设备交互工具](#设备交互工具) 4. [辅助工具](#辅助工具) 5. [调用示例与最佳实践](#调用示例与最佳实践) ## 通信相关工具 ### SComPort.cpp - 串口通信 `SComPort.cpp` 文件实现了 `CSComPort` 类,用于处理串口通信。该类提供了串口的打开、关闭、数据发送和接收等基本功能。主要功能包括: - **串口管理**:通过 `OpenComm` 和 `CloseComm` 方法管理串口的打开和关闭。 - **数据传输**:提供 `SendDataDirectly` 和 `ReceiveDataDirectly` 方法进行数据的直接发送和接收。 - **事件处理**:支持通过 `SetOwnerWnd` 和 `SetCommID` 设置所有者窗口和通信ID,以便在串口事件发生时进行通知。 **Section sources** - [SComPort.cpp](file://cpp\Tools\SComPort.cpp#L1-L1199) - [SComPort.h](file://h\SComPort.h#L1-L74) ### TcpClient.cpp - TCP网络通信 `TcpClient.cpp` 文件实现了 `CTcpClient` 类,用于处理TCP网络通信。该类提供了TCP连接的初始化、连接、断开连接、数据发送和接收等功能。主要功能包括: - **连接管理**:通过 `InitailTcp` 和 `ConnectToServer` 方法初始化和建立TCP连接。 - **数据传输**:提供 `SendData` 和 `RecvData` 方法进行数据的发送和接收。 - **连接状态检查**:通过 `GetConnectStatus` 方法检查连接状态,确保通信的可靠性。 **Section sources** - [TcpClient.cpp](file://cpp\Tools\TcpClient.cpp#L1-L449) - [TcpClient.h](file://h\TcpClient.h#L1-L76) ### Zmodem.cpp - Zmodem协议文件传输 `Zmodem.cpp` 文件实现了 `Zmodem` 类,用于实现Zmodem协议的文件传输。该类提供了文件的发送和接收功能,支持断点续传。主要功能包括: - **文件发送**:通过 `Send` 方法发送文件,支持批量文件传输。 - **文件接收**:通过 `Receive` 方法接收文件,支持断点续传。 - **协议处理**:内部实现了Zmodem协议的各种帧类型处理,如 `ZRQINIT`、`ZRINIT`、`ZFILE` 等。 **Section sources** - [Zmodem.cpp](file://cpp\Tools\Zmodem.cpp#L1-L1940) - [Zmodem.h](file://h\Zmodem.h#L1-L143) ## 数据处理工具 ### Crc16.cpp 和 Crc32.cpp - 数据校验 `Crc16.cpp` 和 `Crc32.cpp` 文件分别实现了 `Crc16` 和 `Crc32` 类,用于提供数据校验功能。这些类通过计算CRC(循环冗余校验)值来确保数据的完整性。主要功能包括: - **CRC16**:`Crc16` 类提供16位CRC校验,适用于较小的数据块。 - **CRC32**:`Crc32` 类提供32位CRC校验,适用于较大的数据块。 **Section sources** - [Crc16.cpp](file://cpp\Tools\Crc16.cpp#L1-L54) - [Crc16.h](file://h\Crc16.h#L1-L37) - [Crc32.cpp](file://cpp\Tools\Crc32.cpp#L1-L51) - [Crc32.h](file://h\Crc32.h#L1-L37) ### FileOperTools.cpp - 文件操作封装 `FileOperTools.cpp` 文件实现了 `CFileOperTools` 类,提供了一系列文件操作的封装方法。主要功能包括: - **文件复制**:通过 `CopyFolder` 方法复制整个文件夹。 - **文件删除**:通过 `DeleteFileDirect` 和 `DeleteDirectory` 方法删除文件和目录。 - **日志记录**:通过 `WriteComLog` 方法记录通信日志,支持多线程安全。 **Section sources** - [FileOperTools.cpp](file://cpp\Tools\FileOperTools.cpp#L1-L420) - [FileOperTools.h](file://h\FileOperTools.h#L1-L37) ## 设备交互工具 ### GD10OperCmd.cpp - GD10设备通信指令 `GD10OperCmd.cpp` 文件实现了 `CGD10OperCmd` 类,定义了与GD10设备的通信指令。主要功能包括: - **工程管理**:通过 `project_add` 和 `project_delete` 方法添加和删除工程。 - **测区管理**:通过 `testzone_add` 和 `testzone_delete` 方法添加和删除测区。 - **脚本管理**:通过 `script_add` 和 `script_delete` 方法添加和删除脚本。 **Section sources** - [GD10OperCmd.cpp](file://cpp\Tools\GD10OperCmd.cpp#L1-L1213) - [GD10OperCmd.h](file://h\GD10OperCmd.h#L1-L37) ### NetWorkOper.cpp - 网络操作 `NetWorkOper.cpp` 文件实现了 `CNetWorkOper` 类,处理网络操作。主要功能包括: - **连接管理**:通过 `StartConnect` 方法建立与服务器的连接。 - **数据传输**:通过 `TransferOper` 方法进行数据的转发。 - **实时数据接收**:通过 `ThreadFunction` 方法在后台线程中接收实时数据。 **Section sources** - [NetWorkOper.cpp](file://cpp\Tools\NetWorkOper.cpp#L1-L706) - [NetWorkOper.h](file://h\NetWorkOper.h#L1-L37) ## 辅助工具 ### GUCodeCreator.cpp - GU码生成 `GUCodeCreator.cpp` 文件实现了 `CGUCodeCreator` 类,用于生成GU码。主要功能包括: - **MAC地址获取**:通过 `GetMacAddress` 方法获取本机的MAC地址。 - **时间戳生成**:通过 `GetTotalSecond` 方法获取当前时间的总秒数。 - **GU码生成**:通过 `GenerateGUCode` 方法生成GU码,结合MAC地址和时间戳。 **Section sources** - [GUCodeCreator.cpp](file://cpp\Tools\GUCodeCreator.cpp#L1-L395) - [GUCodeCreator.h](file://h\GUCodeCreator.h#L1-L37) ### excel.cpp - Excel文件导出 `excel.cpp` 文件实现了与Excel文件的交互,主要用于数据导出。主要功能包括: - **Excel操作**:通过 `_Application` 类提供的方法进行Excel文件的创建、打开、保存等操作。 - **数据写入**:通过 `Range` 和 `Cells` 方法将数据写入Excel文件。 **Section sources** - [excel.cpp](file://cpp\Tools\excel.cpp#L1-L7130) - [excel.h](file://h\excel.h#L1-L37) ### checkupdate.cpp - 版本检查 `checkupdate.cpp` 文件实现了 `Ccheckupdate` 类,用于版本检查和更新。主要功能包括: - **版本检查**:通过 `checkGeoMaive` 方法检查当前版本是否需要更新。 - **文件下载**:通过 `RequestFileContent` 方法从服务器下载文件内容。 - **更新操作**:通过 `UpdateAppToDev` 和 `UpdateGD10Dev` 方法执行更新操作。 **Section sources** - [checkupdate.cpp](file://cpp\Tools\checkupdate.cpp#L1-L1523) - [checkupdate.h](file://h\checkupdate.h#L1-L37) ## 调用示例与最佳实践 ### 通信相关工具调用示例 #### 串口通信 ```cpp CSComPort comPort; if (comPort.OpenComm("COM1")) { char sendData[] = "Hello, World!"; comPort.SendDataDirectly(sendData, strlen(sendData)); char receiveData[1024]; int receiveSize; if (comPort.ReceiveDataDirectly(receiveData, &receiveSize)) { // 处理接收到的数据 } comPort.CloseComm(); } ``` #### TCP网络通信 ```cpp CTcpClient tcpClient; if (tcpClient.InitailTcp()) { if (tcpClient.ConnectToServer("192.168.1.1", 8080)) { char sendData[] = "Hello, Server!"; tcpClient.SendData(sendData, strlen(sendData)); char receiveData[1024]; int actualLen; if (tcpClient.RecvData(receiveData, 1024, actualLen)) { // 处理接收到的数据 } tcpClient.CloseConnect(); } } ``` #### Zmodem协议文件传输 ```cpp CSComPort comPort; Zmodem zmodem(&comPort); if (comPort.OpenComm("COM1")) { char *files[] = {"file1.txt", "file2.txt", NULL}; if (zmodem.Send(files)) { // 文件发送成功 } if (zmodem.Receive("C:\\ReceivedFiles\\")) { // 文件接收成功 } comPort.CloseComm(); } ``` ### 数据处理工具调用示例 #### CRC16和CRC32校验 ```cpp Crc16 crc16(0); Crc32 crc32(0xFFFFFFFFL); char data[] = "Hello, World!"; for (int i = 0; i < strlen(data); i++) { crc16.update(data[i]); crc32.update(data[i]); } unsigned short crc16Value = crc16.value(); unsigned long crc32Value = crc32.value(); ``` #### 文件操作 ```cpp CFileOperTools fileTools; if (fileTools.CopyFolder("C:\\SourceFolder", "D:\\DestinationFolder")) { // 文件夹复制成功 } if (fileTools.DeleteDirectory("D:\\OldFolder")) { // 文件夹删除成功 } CString logMessage = "This is a log message."; fileTools.WriteComLog(logMessage); ``` ### 设备交互工具调用示例 #### GD10设备通信 ```cpp CGD10OperCmd gd10Cmd; if (gd10Cmd.project_add("00:11:22:33:44:55", "MyProject")) { // 工程添加成功 } if (gd10Cmd.testzone_add("MyProject", "MyTestZone", "Type1")) { // 测区添加成功 } if (gd10Cmd.script_add("VES123", "Script1", "0")) { // 脚本添加成功 } ``` #### 网络操作 ```cpp CNetWorkOper netOper; if (netOper.Initialize()) { if (netOper.StartConnect("192.168.1.1", 8080)) { if (netOper.StartWork()) { // 网络操作开始 } } } ``` ### 辅助工具调用示例 #### GU码生成 ```cpp CGUCodeCreator guCodeCreator; CString guCode = guCodeCreator.GenerateGUCode(); ``` #### Excel文件导出 ```cpp _Application excelApp; excelApp.CreateDispatch("Excel.Application"); excelApp.SetVisible(TRUE); _Workbook workbook = excelApp.GetWorkbooks().Add(); _Worksheet worksheet = workbook.GetWorksheets().GetItem(1); Range range = worksheet.GetRange("A1"); range.SetValue2("Hello, Excel!"); workbook.SaveAs("C:\\ExportedFile.xlsx"); workbook.Close(); excelApp.Quit(); ``` #### 版本检查 ```cpp Ccheckupdate checkUpdate; if (checkUpdate.checkGeoMaive()) { // 需要更新 if (checkUpdate.DownLoadFileList()) { if (checkUpdate.UpdateGD10Dev()) { // 更新成功 } } } ``` **Section sources** - [SComPort.cpp](file://cpp\Tools\SComPort.cpp#L1-L1199) - [TcpClient.cpp](file://cpp\Tools\TcpClient.cpp#L1-L449) - [Zmodem.cpp](file://cpp\Tools\Zmodem.cpp#L1-L1940) - [Crc16.cpp](file://cpp\Tools\Crc16.cpp#L1-L54) - [Crc32.cpp](file://cpp\Tools\Crc32.cpp#L1-L51) - [FileOperTools.cpp](file://cpp\Tools\FileOperTools.cpp#L1-L420) - [GD10OperCmd.cpp](file://cpp\Tools\GD10OperCmd.cpp#L1-L1213) - [NetWorkOper.cpp](file://cpp\Tools\NetWorkOper.cpp#L1-L706) - [GUCodeCreator.cpp](file://cpp\Tools\GUCodeCreator.cpp#L1-L395) - [excel.cpp](file://cpp\Tools\excel.cpp#L1-L7130) - [checkupdate.cpp](file://cpp\Tools\checkupdate.cpp#L1-L1523)