一个轻量级61850客户端框架

这是一个基于Qt的IEC 61850客户端实现,用于与61850服务器进行通信,包括数据采集、控制、定值读写、录波文件处理和小电流选线等功能。下面我将从整体架构和各个模块的角度进行分析。

  1. 整体架构:
  • 该项目是一个61850客户端,使用MMS(制造报文规范)协议与61850服务器通信。
  • 核心类是P61850App,它作为整个应用的入口,管理多个EServer实例(每个实例代表一个61850设备)。
  • EServer代表一个61850设备,管理连接、报告、数据集、控制、定值等。
  • 其他类如EReport、EDataSet、EControl、ESetting、ERdre、EGrounding等分别处理报告、数据集、控制、定值、录波和接地选线等功能。
  1. 模块分析:

a. EModel:所有模型的基类,封装了与MMS通信的基本操作,如获取属性、读写值、读写目录、读写文件等。它使用定时器来处理重连和命令队列。

b. EServer:代表一个61850设备,包含多个连接(双网口),每个连接由一个MMSConnection管理。它负责管理该设备下的所有功能模型,包括报告、数据集、控制、定值等。它还处理网络状态的变化和备份数据的处理。

c. EReport:处理61850报告功能。包括使能报告、总查询(GI)和报告解析。报告解析时,根据OptFlds解析报告中的各个字段,然后根据数据引用名或索引找到对应的变量,并更新实时库。

d. EDataSet和EVar:数据集和变量。数据集包含多个变量,每个变量关联一个或多个测量点(遥测、遥信等)。当收到报告数据时,根据变量配置更新实时库。

e. EControl和EControlData:控制功能。支持选择、执行、取消等操作。控制过程中会检查超时和状态变位,并返回结果。

f. ESetting:定值读写功能。包括定值区切换、定值读取和写入。定值变量有活动值和编辑值,定值区切换通过写定值区对象实现。

h. EGrounding:小电流选线功能。读取接地相关的电流和方向数据,并支持接地试跳。

  1. 通信流程:

a. 连接建立:EServer根据配置的IP地址创建MMSConnection,并连接服务器。连接状态变化会更新实时库中的通信状态点。

b. 属性获取:连接建立后,各个模型(报告、变量等)会获取其属性(类型定义)。属性获取成功后,才能进行值操作。

c. 报告使能:报告控制块使能后,服务器会主动上送报告。客户端解析报告并更新实时库。

d. 总查询:定时触发总查询,获取全数据。

e. 控制:通过EControl发送控制命令,包括选择、执行、取消。控制命令中包含控制序号、时间、检查条件等。

f. 定值操作:读取定值区号、定值,写入定值需要先切换到编辑定值区,然后写入定值,最后确认编辑。

h. 小电流选线:读取接地相关的电流和方向数据,并支持试跳操作。

  1. 异常处理:
  • 超时处理:各种操作(如写值、等待状态变位、等待原因等)都有超时处理,超时后会返回失败。
  • 连接中断:当连接中断时,会停止定时器,并清除命令队列。连接恢复后,会重新获取属性。
  • 属性获取失败:会记录失败次数,并尝试重新获取。
  1. 数据持久化:
  • 属性获取成功后,会保存到本地文件,下次启动时直接加载,避免重复获取。
  1. 多线程:
  • 录波文件处理在单独的线程中完成,避免阻塞主线程。
  1. 备份处理:
  • 当处于备机状态时,收到的变位数据会暂存,待切换到主机后,再处理这些数据。
  1. 信号与槽:
  • 使用Qt的信号槽机制进行异步通信,例如控制结果、定值操作结果等通过信号发出。
  1. 实时库更新:
  • 使用RtField来更新实时库
  1. 监控和日志:
  • 使用`ProMonitorApp`记录监控信息,包括错误、信息等。

总结:该项目是一个功能完整的61850客户端,实现了61850标准的常用功能,包括数据采集、控制、定值操作、录波文件处理和小电流选线等。代码结构清晰,模块化程度高,使用了Qt的诸多特性,如信号槽、定时器、多线程等。

这是一个基于 IEC 61850 标准 的客户端实现,用于与变电站自动化系统进行通信。代码结构清晰,模块化程度高,下面我将从架构设计、模块功能、通信流程等方面进行的自我分析:


🏗 一、整体架构

1. 层次结构

P61850App (应用层)

└── EServer (设备服务层)

├── EReport (报告处理)

├── EDataSet (数据集)

├── EControl (遥控)

├── ESetting (定值)

├── EGrounding (接地选线)

2. 核心模块说明

模块 功能
P61850App 应用入口,提供对外的控制、定值、接地等接口
EServer 代表一个61850设备,管理连接、数据集、报告、控制等
EModel 所有模型的基类,封装了MMS通信的基础操作
EReport 处理61850报告(Report)的接收与解析
EDataSet 管理数据集(DataSet)和变量(EVar)
EControl 遥控操作,包括选择、执行、取消
ESetting 定值读写、定值区切换
EGrounding 小电流接地选线功能
ERdre 录波文件的上传与存储

🔌 二、通信机制

1. MMS 协议封装

  • 使用 MMSClient 和 MMSConnection 进行底层通信
  • 支持双网口冗余连接(m_conns)
  • 自动重连、超时处理、命令队列机制

2. 报告接收流程

ReportReceived → ListReport → 解析OptFlds → 更新EVar → 写入实时库

  • 支持序列号、时间戳、数据引用、原因码等可选字段
  • 支持数据变化(dchg)、品质变化(qchg)、总召(gi)等触发条件

3. 遥控流程

SendControl → EControlData::Write → SetValue → 等待状态变位或超时

  • 支持 SBO(Select Before Operate)模式
  • 支持操作前检查(Check 字段)
  • 支持等待遥信变位确认操作结果

🧩 三、关键功能实现

1. 定值读写

  • 支持活动定值区(ActSG)和编辑定值区(EditSG)
  • 支持定值区切换(SetZoon)
  • 支持批量写定值(WriteSetting)

2. 接地选线

3. 录波文件管理

  • 自动扫描服务器录波文件目录(COMTRADE)
  • 下载并保存到数据库(wavefile 表)
  • 使用独立线程处理文件操作,避免阻塞主线程

4. 实时库同步

  • 通过 RtField 将接收到的数据写入实时数据库
  • 支持变化通知(ChangeNotify)和总是通知(AlwaysNotify)
  • 支持主备机同步,备机缓存变化数据,切主后同步

四、超时与异常处理

1. 多种超时机制

类型 时间 用途
写超时 WriteTimeOut 写操作无响应
状态等待超时 WaitStatusTimeOut 等待遥信变位
原因等待超时 WaitReasonTimeOut 等待额外原因码
定值操作超时 TimeOut 定值读写超时

2. 错误处理

  • 通过 ControlResult、SettingResult、GroundingResult 统一返回结果
  • 记录详细日志到 ProMonitorApp
  • 支持装置返回的额外原因码(LastApplError)

🔄 五、主备切换处理

  • 通过 SysApp::DutyChange 信号感知主备状态变化
  • 主机时启动总召、报告使能、录波文件下载
  • 备机时停止主动操作,缓存变化数据

📁 六、配置文件与属性缓存

  • 每个设备的属性(类型定义)缓存到本地文件(*.att)
  • 避免重复获取属性,提高启动速度
  • 支持属性获取失败后的重试机制

详细信息,可以发邮件或者加群继续讨论。3288950@qq.com 群号 818308204