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