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

7.9 KiB
Raw Blame History

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