295 lines
7.9 KiB
Markdown
Raw Permalink Normal View History

2025-05-08 17:26:10 +08:00
# 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: 增加测试场景导出为脚本功能,支持自动化批量测试