Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/开发者指南/开发工具与实用程序/开发工具与实用程序.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

11 KiB
Raw Blame History

开发工具与实用程序

**本文档引用的文件** - [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 类,用于处理串口通信。该类提供了串口的打开、关闭、数据发送和接收等基本功能。主要功能包括:

  • 串口管理:通过 OpenCommCloseComm 方法管理串口的打开和关闭。
  • 数据传输:提供 SendDataDirectlyReceiveDataDirectly 方法进行数据的直接发送和接收。
  • 事件处理:支持通过 SetOwnerWndSetCommID 设置所有者窗口和通信ID,以便在串口事件发生时进行通知。

Section sources

  • SComPort.cpp
  • SComPort.h

TcpClient.cpp - TCP网络通信

TcpClient.cpp 文件实现了 CTcpClient 类,用于处理TCP网络通信。该类提供了TCP连接的初始化、连接、断开连接、数据发送和接收等功能。主要功能包括:

  • 连接管理:通过 InitailTcpConnectToServer 方法初始化和建立TCP连接。
  • 数据传输:提供 SendDataRecvData 方法进行数据的发送和接收。
  • 连接状态检查:通过 GetConnectStatus 方法检查连接状态,确保通信的可靠性。

Section sources

  • TcpClient.cpp
  • TcpClient.h

Zmodem.cpp - Zmodem协议文件传输

Zmodem.cpp 文件实现了 Zmodem 类,用于实现Zmodem协议的文件传输。该类提供了文件的发送和接收功能,支持断点续传。主要功能包括:

  • 文件发送:通过 Send 方法发送文件,支持批量文件传输。
  • 文件接收:通过 Receive 方法接收文件,支持断点续传。
  • 协议处理:内部实现了Zmodem协议的各种帧类型处理,如 ZRQINITZRINITZFILE 等。

Section sources

  • Zmodem.cpp
  • Zmodem.h

数据处理工具

Crc16.cpp 和 Crc32.cpp - 数据校验

Crc16.cppCrc32.cpp 文件分别实现了 Crc16Crc32 类,用于提供数据校验功能。这些类通过计算CRC(循环冗余校验)值来确保数据的完整性。主要功能包括:

  • CRC16Crc16 类提供16位CRC校验,适用于较小的数据块。
  • CRC32Crc32 类提供32位CRC校验,适用于较大的数据块。

Section sources

  • Crc16.cpp
  • Crc16.h
  • Crc32.cpp
  • Crc32.h

FileOperTools.cpp - 文件操作封装

FileOperTools.cpp 文件实现了 CFileOperTools 类,提供了一系列文件操作的封装方法。主要功能包括:

  • 文件复制:通过 CopyFolder 方法复制整个文件夹。
  • 文件删除:通过 DeleteFileDirectDeleteDirectory 方法删除文件和目录。
  • 日志记录:通过 WriteComLog 方法记录通信日志,支持多线程安全。

Section sources

  • FileOperTools.cpp
  • FileOperTools.h

设备交互工具

GD10OperCmd.cpp - GD10设备通信指令

GD10OperCmd.cpp 文件实现了 CGD10OperCmd 类,定义了与GD10设备的通信指令。主要功能包括:

  • 工程管理:通过 project_addproject_delete 方法添加和删除工程。
  • 测区管理:通过 testzone_addtestzone_delete 方法添加和删除测区。
  • 脚本管理:通过 script_addscript_delete 方法添加和删除脚本。

Section sources

  • GD10OperCmd.cpp
  • GD10OperCmd.h

NetWorkOper.cpp - 网络操作

NetWorkOper.cpp 文件实现了 CNetWorkOper 类,处理网络操作。主要功能包括:

  • 连接管理:通过 StartConnect 方法建立与服务器的连接。
  • 数据传输:通过 TransferOper 方法进行数据的转发。
  • 实时数据接收:通过 ThreadFunction 方法在后台线程中接收实时数据。

Section sources

  • NetWorkOper.cpp
  • NetWorkOper.h

辅助工具

GUCodeCreator.cpp - GU码生成

GUCodeCreator.cpp 文件实现了 CGUCodeCreator 类,用于生成GU码。主要功能包括:

  • MAC地址获取:通过 GetMacAddress 方法获取本机的MAC地址。
  • 时间戳生成:通过 GetTotalSecond 方法获取当前时间的总秒数。
  • GU码生成:通过 GenerateGUCode 方法生成GU码,结合MAC地址和时间戳。

Section sources

  • GUCodeCreator.cpp
  • GUCodeCreator.h

excel.cpp - Excel文件导出

excel.cpp 文件实现了与Excel文件的交互,主要用于数据导出。主要功能包括:

  • Excel操作:通过 _Application 类提供的方法进行Excel文件的创建、打开、保存等操作。
  • 数据写入:通过 RangeCells 方法将数据写入Excel文件。

Section sources

  • excel.cpp
  • excel.h

checkupdate.cpp - 版本检查

checkupdate.cpp 文件实现了 Ccheckupdate 类,用于版本检查和更新。主要功能包括:

  • 版本检查:通过 checkGeoMaive 方法检查当前版本是否需要更新。
  • 文件下载:通过 RequestFileContent 方法从服务器下载文件内容。
  • 更新操作:通过 UpdateAppToDevUpdateGD10Dev 方法执行更新操作。

Section sources

  • checkupdate.cpp
  • checkupdate.h

调用示例与最佳实践

通信相关工具调用示例

串口通信

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网络通信

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协议文件传输

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校验

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();

文件操作

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设备通信

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")) {
    // 脚本添加成功
}

网络操作

CNetWorkOper netOper;
if (netOper.Initialize()) {
    if (netOper.StartConnect("192.168.1.1", 8080)) {
        if (netOper.StartWork()) {
            // 网络操作开始
        }
    }
}

辅助工具调用示例

GU码生成

CGUCodeCreator guCodeCreator;
CString guCode = guCodeCreator.GenerateGUCode();

Excel文件导出

_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();

版本检查

Ccheckupdate checkUpdate;
if (checkUpdate.checkGeoMaive()) {
    // 需要更新
    if (checkUpdate.DownLoadFileList()) {
        if (checkUpdate.UpdateGD10Dev()) {
            // 更新成功
        }
    }
}

Section sources

  • SComPort.cpp
  • TcpClient.cpp
  • Zmodem.cpp
  • Crc16.cpp
  • Crc32.cpp
  • FileOperTools.cpp
  • GD10OperCmd.cpp
  • NetWorkOper.cpp
  • GUCodeCreator.cpp
  • excel.cpp
  • checkupdate.cpp