295 lines
7.9 KiB
Markdown
295 lines
7.9 KiB
Markdown
|
|
# 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: 增加测试场景导出为脚本功能,支持自动化批量测试
|