# IEC104Client **Repository Path**: viccom/iec104-client ## Basic Information - **Project Name**: IEC104Client - **Description**: 一个专注于IEC104协议的客户端实现项目,提供稳定高效的通信服务,适用于电力自动化系统中的数据交换与控制。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-06 - **Last Updated**: 2025-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IEC 104协议TCP客户端 这是一个支持IEC 104协议的TCP客户端程序,用于与IEC 104协议服务器进行通信。该客户端具备通用TCP通信能力,并特别针对IEC 104协议进行了优化,支持协议消息分割、测试帧自动回复等功能。 ## 功能特性 - 支持TCP连接的建立、断开和自动重连 - **IEC 104协议支持** - 自动识别并分割IEC 104协议消息(基于68H标识和XXH长度字节) - 测试帧(TestFrame)自动回复功能 - 支持长帧和短帧格式处理 - 支持通过命令行发送十六进制格式的数据 - 支持从JSON配置文件加载预设报文,并通过命令快速发送 - 实时显示收发的字节数据(十六进制格式) - **增强的日志系统** - 详细记录所有收发的通信报文,每个字节之间自动插入空格提高可读性 - 连接状态变化(建立、断开、重连)清晰记录在消息日志中 - 分离的调试日志和消息日志,便于问题定位 - 提供友好的交互式命令行界面 - 支持命令行参数配置服务器地址和端口等参数 - 快速测试模式,便于验证功能 ## 使用方法 ### 编译程序 ```bash go build -o tcp-client.exe main.go ``` ### 运行程序 #### 基本运行 ```bash ./tcp-client.exe ``` #### 指定服务器配置 ```bash ./tcp-client.exe -addr 127.0.0.1 -port 2404 ``` #### 加载预设报文配置文件 ```bash ./tcp-client.exe -config messages.json ``` #### 快速测试模式 ```bash echo testmsg | ./tcp-client.exe ``` 快速测试模式会自动展示IEC 104协议消息的解析和显示功能,无需实际连接服务器。 #### 完整参数 ```bash ./tcp-client.exe -addr 127.0.0.1 -port 2404 -timeout 10 -reconnect 5 -config messages.json ``` 参数说明: - `-addr`: 服务器地址 - `-port`: 服务器端口 - `-timeout`: 连接超时时间(秒) - `-reconnect`: 重连延迟(秒) - `-config`: 预设报文配置文件路径 ## 交互式命令 程序启动后,提供以下交互式命令: - `help/h/?`: 显示帮助信息 - `quit/q/exit`: 退出程序 - `connect`: 连接到服务器 - `disconnect`: 断开连接 - `send `: 发送十六进制数据(例如:`send 68 04 00 00 00 00` 或 `send 680400000000`) - `preset/msg `: 发送预设报文(使用配置文件中定义的名称) - `list/presets`: 列出所有预设报文 - `load `: 加载预设报文配置文件 - `config [地址] [端口]`: 查看或设置服务器配置 - `verbose`: 切换详细日志显示 - `status`: 显示客户端状态 ## 预设报文配置文件格式 配置文件使用JSON格式,示例: ```json { "messages": { "connect_req": "680400000000640106010100", "reset": "680400000000640114010100", "read_req": "680E00000000640100010001000000010001", "general_interrogation": "680E00000000640164010001000000010001", "end_of_initialization": "680400000000640128010100", "clock_sync": "68140000000064011E01000000000000000000000000", "heartbeat": "6804000000000000" } } ``` - `messages`: 预设报文对象,键为报文名称,值为十六进制字符串 ## 示例操作流程 ### 正常通信流程 1. 启动程序:`./tcp-client.exe -addr 127.0.0.1 -port 2404` 2. 连接到服务器:`connect` 3. 发送数据:`send 680400000000640106010100` 4. 加载预设报文:`load messages.json` 5. 查看预设报文:`list` 6. 发送预设报文:`msg connect_req` 7. 断开连接:`disconnect` 8. 退出程序:`quit` ### IEC 104协议测试流程 1. 启动快速测试模式:`echo testmsg | ./tcp-client.exe` 2. 观察测试消息解析和显示结果 3. 查看生成的日志文件:`Get-Content -Path ./message/*.log` ## 日志系统 程序会自动生成两种类型的日志文件: ### 消息日志 (message/目录) - 记录所有收发的通信报文,每个字节之间自动插入空格提高可读性 - 记录连接状态变化: - `CONNECTION ESTABLISHED`: 连接建立 - `CONNECTION CLOSED`: 用户主动断开连接 - `CONNECTION DISCONNECTED`: 服务器主动断开连接 示例消息日志格式: ``` 2025/10/21 00:05:12 CONNECTION ESTABLISHED: connected to 127.0.0.1:2404 2025/10/21 00:05:12 RECEIVE 6 bytes: 68 04 43 00 00 00 2025/10/21 00:05:12 SEND 6 bytes: 68 04 83 00 00 00 2025/10/21 00:05:15 CONNECTION CLOSED: user disconnected ``` ### 调试日志 (debug/目录) - 记录程序运行的详细信息,包括错误日志和操作记录 - 用于开发调试和问题定位 日志文件按日期自动命名,每天生成新的日志文件。 ## 注意事项 1. 发送的十六进制数据必须是有效的,否则会显示错误 2. 预设报文配置文件必须是有效的JSON格式 3. 程序启动后不会自动连接到服务器,需要手动使用`connect`命令 4. 当连接断开时,程序会自动尝试重新连接(如果启用了重连功能) 5. **IEC 104协议特定说明**: - 测试帧(第一个字节为68,第三个字节为43)会自动回复 - 消息分割基于IEC 104协议格式,第一个字节必须是68(十六进制) - 短帧格式为6字节,长帧格式根据长度字节动态解析 6. **日志系统说明**: - 消息日志和调试日志会保存在程序当前目录下的`message`和`debug`文件夹中 - 请确保程序对这些目录有写入权限 - 定期清理日志文件以避免占用过多磁盘空间