2025-05-08 17:26:10 +08:00

295 lines
7.9 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.

# 376.1协议集中器测试程序
本程序用于模拟集中器与主站通信支持376.1协议标准。可以同时模拟多个集中器,并支持各种常见操作。
## 功能特点
1. **完整的376.1协议支持**
- 支持登录、心跳、阀控等标准操作
- 完整实现了报文结构和编码规则
- 支持BCD编码的地址域处理
2. **多种消息类型**
- 登录消息
- 心跳消息
- 阀控操作消息
- 数据上传消息
- 数据读取消息
- 参数设置消息
3. **多集中器管理**
- 支持创建多个集中器实例
- 批量创建集中器
- 自动生成集中器地址
4. **自动化功能**
- 创建集中器后自动登录
- 登录确认后自动发送心跳4分钟间隔
- 自动响应接收到的请求
- 事件通知机制
5. **数据模拟**
- 内置模拟表计数据(水表、电表、气表等)
- 支持自定义数据更新
- **新增**: 随机数据生成功能,模拟真实用水用电用气规律
6. **日志系统**
- 集成Serilog日志框架
- 支持控制台和文件日志
- 可选的十六进制报文展示
7. **报文分析工具**
- 详细解析376.1协议报文
- 提供报文结构、控制码和数据域的解释
- 校验和验证功能
8. **断线重连机制**
- 自动检测连接断开
- 可配置的重连参数
- 重连成功后自动恢复之前的登录状态
9. **通信统计**
- 跟踪消息收发成功率
- 响应时间统计
- 错误类型分析
10. **测试场景管理**
- 保存和加载测试配置
- 创建自定义测试场景
- 支持批量运行测试步骤
- **新增**: 导出测试场景为批处理脚本,支持无人值守自动化测试
## 使用方法
### 启动程序
编译并运行程序后,首先需要配置服务器地址和端口:
```
376.1协议集中器模拟器启动
--------------------------------------
服务器地址: 127.0.0.1:10502
--------------------------------------
输入help查看所有可用命令
--------------------------------------
```
程序默认使用127.0.0.1:10502作为服务器地址和端口。
### 自动启动模式
程序支持命令行参数自动启动:
```
# 自动创建并登录10个集中器
Protocol376Simulator.exe auto-login 10
# 指定服务器地址和端口
Protocol376Simulator.exe auto-server 192.168.1.100 8888
```
### 命令行界面
程序使用简洁的命令行界面,所有命令都可通过输入`help`查看。所有命令都在同一层级,无需通过菜单导航。
命令示例:
```
> c 312003001 # 创建集中器
> login 312003001 # 登录集中器
> valve 312003001 1 # 开阀
> meter 312003001 1 random # 设置随机水表数据
> stats all # 查看所有集中器的通信统计
```
界面设计特点:
- 命令简洁直观
- 无需在菜单间切换
- 支持批量操作命令
- help命令显示完整命令列表
### 自动工作流程
1. 创建集中器时会自动登录
2. 登录成功确认后会自动启动心跳功能
3. 心跳报文每4分钟发送一次
4. 收到请求后自动生成响应报文
### 数据类型说明
数据类型代码:
- 1: 水表
- 2: 电表
- 3: 气表
- 4: 状态
阀控操作码:
- 1: 开阀
- 2: 关阀
- 3: 查询状态
### 日志系统
日志文件存储在 `Logs` 目录中,按日期自动分割。可以通过命令开启十六进制报文日志查看详细报文内容。
## 断线重连功能
系统支持自动断线重连机制,你可以配置以下参数:
- 是否启用自动重连
- 最大重连尝试次数
- 重连间隔时间
使用以下命令设置断线重连参数:
```
reconnect [集中器地址] [开启/关闭(1/0)] [最大尝试次数] [延迟秒数]
```
## 报文分析工具
可以使用内置的报文分析工具解析任意376.1协议报文:
```
analyze [十六进制报文字符串]
```
报文分析结果会包含详细的帧结构、控制码解释和数据域分析。
## 随机数据生成
可以生成符合真实使用场景的随机表计数据:
```
meter [集中器地址] [数据类型] random
```
也可以开启随机数据模式,所有数据都会使用随机生成:
```
random-on
```
## 测试场景管理
测试场景功能允许您保存、加载和运行测试配置,大大提高测试效率。
### 创建测试场景
创建一个新的测试场景,可以指定服务器配置和集中器数量:
```
create-scenario
```
系统会引导您输入场景名称、描述、服务器地址/端口和集中器数量。
### 保存当前配置
将当前运行状态保存为测试场景:
```
save-scenario [名称] [描述]
```
所有当前运行的集中器配置会被保存到场景中。
### 加载测试场景
加载一个已保存的测试场景:
```
load-scenario [文件名或路径]
```
系统会读取场景配置,并提示您是否要创建其中包含的集中器。
### 查看所有场景
列出所有保存的测试场景及其详细信息:
```
list-scenario
```
### 运行测试场景
执行一个测试场景中定义的所有测试步骤:
```
run-scenario [文件名或路径]
```
### 导出为脚本
将测试场景导出为可执行的批处理脚本:
```
export-scenario [场景文件路径] [脚本文件名]
```
导出的脚本将保存在`Scripts`目录中,可以在没有程序界面的情况下自动执行测试步骤。
### 场景文件存储
所有测试场景文件保存在 `Scenarios` 目录中使用JSON格式存储可以手动编辑。
## 技术细节
1. **地址域编码**
程序使用BCD编码方式处理集中器地址自动将集中器地址转换为4字节的地址域格式。
2. **报文格式**
符合376.1协议标准:`68 36 00 36 00 68 C9 XX XX XX XX 07 02 70 00 00 04 00 29 F4 CS 16`
3. **校验和计算**
自动计算并添加校验和字节,确保报文完整性。
4. **自动心跳机制**
在收到登录确认后自动启动心跳发送间隔为4分钟。
5. **断线重连机制**
自动检测连接断开,并根据设置的参数进行重连。
## 开发技术
- 编程语言C#
- 目标框架:.NET 8.0
- 日志框架Serilog 4.2.0
- 网络通信TCP/IP
- 序列化System.Text.Json
## 注意事项
1. 确保服务器地址和端口配置正确
2. 正确使用集中器地址,推荐使用自动生成的地址
3. 在退出程序前,建议手动断开所有集中器连接
4. 创建集中器时会自动登录,无需手动执行登录命令
## 自动化测试脚本使用
本程序支持将测试场景导出为批处理脚本,便于执行无人值守的自动化测试:
1. **创建测试场景**
```
create-scenario
```
按照提示创建包含所需配置和测试步骤的场景。
2. **导出为批处理脚本**
```
export-scenario 场景文件名.json 脚本名称
```
将生成的脚本保存在`Scripts`目录下。
3. **执行批处理脚本**
直接双击或在命令行中运行生成的`.bat`文件即可自动执行测试场景中定义的所有步骤。
脚本功能特点:
- 自动配置服务器连接参数
- 自动创建场景中定义的所有集中器
- 按顺序执行所有测试步骤,包括登录、发送心跳、数据上传等
- 支持等待和延时操作
- 全自动执行,无需人工干预
该功能特别适合:
- 长时间稳定性测试
- 压力测试和负载测试
- 测试环境的快速搭建
- 测试过程的标准化和规范化
## 版本历史
- V1.0: 基本的报文结构和集中器模拟器
- V2.0: 添加心跳和阀控功能
- V3.0: 改进交互方式和地址处理
- V4.0: 添加批量创建和日志系统
- V5.0: 增加数据上传、读取和设置功能
- V6.0: 优化UI界面分类显示命令
- V7.0: 添加自动登录和登录确认后自动心跳功能
- V8.0: 添加报文分析工具、断线重连机制、随机数据生成和测试场景管理功能
- V8.1: 增加测试场景导出为脚本功能,支持自动化批量测试