这是一个基于Qt的IEC 61850客户端实现,用于与61850服务器进行通信,包括数据采集、控制、定值读写、录波文件处理和小电流选线等功能。下面我将从整体架构和各个模块的角度进行分析。
- 整体架构:
- 该项目是一个61850客户端,使用MMS(制造报文规范)协议与61850服务器通信。
- 核心类是P61850App,它作为整个应用的入口,管理多个EServer实例(每个实例代表一个61850设备)。
- EServer代表一个61850设备,管理连接、报告、数据集、控制、定值等。
- 其他类如EReport、EDataSet、EControl、ESetting、ERdre、EGrounding等分别处理报告、数据集、控制、定值、录波和接地选线等功能。
- 模块分析:
a. EModel:所有模型的基类,封装了与MMS通信的基本操作,如获取属性、读写值、读写目录、读写文件等。它使用定时器来处理重连和命令队列。
b. EServer:代表一个61850设备,包含多个连接(双网口),每个连接由一个MMSConnection管理。它负责管理该设备下的所有功能模型,包括报告、数据集、控制、定值等。它还处理网络状态的变化和备份数据的处理。
c. EReport:处理61850报告功能。包括使能报告、总查询(GI)和报告解析。报告解析时,根据OptFlds解析报告中的各个字段,然后根据数据引用名或索引找到对应的变量,并更新实时库。
d. EDataSet和EVar:数据集和变量。数据集包含多个变量,每个变量关联一个或多个测量点(遥测、遥信等)。当收到报告数据时,根据变量配置更新实时库。
e. EControl和EControlData:控制功能。支持选择、执行、取消等操作。控制过程中会检查超时和状态变位,并返回结果。
f. ESetting:定值读写功能。包括定值区切换、定值读取和写入。定值变量有活动值和编辑值,定值区切换通过写定值区对象实现。
h. EGrounding:小电流选线功能。读取接地相关的电流和方向数据,并支持接地试跳。
- 通信流程:
a. 连接建立:EServer根据配置的IP地址创建MMSConnection,并连接服务器。连接状态变化会更新实时库中的通信状态点。
b. 属性获取:连接建立后,各个模型(报告、变量等)会获取其属性(类型定义)。属性获取成功后,才能进行值操作。
c. 报告使能:报告控制块使能后,服务器会主动上送报告。客户端解析报告并更新实时库。
d. 总查询:定时触发总查询,获取全数据。
e. 控制:通过EControl发送控制命令,包括选择、执行、取消。控制命令中包含控制序号、时间、检查条件等。
f. 定值操作:读取定值区号、定值,写入定值需要先切换到编辑定值区,然后写入定值,最后确认编辑。
h. 小电流选线:读取接地相关的电流和方向数据,并支持试跳操作。
- 异常处理:
- 超时处理:各种操作(如写值、等待状态变位、等待原因等)都有超时处理,超时后会返回失败。
- 连接中断:当连接中断时,会停止定时器,并清除命令队列。连接恢复后,会重新获取属性。
- 属性获取失败:会记录失败次数,并尝试重新获取。
- 数据持久化:
- 属性获取成功后,会保存到本地文件,下次启动时直接加载,避免重复获取。
- 多线程:
- 录波文件处理在单独的线程中完成,避免阻塞主线程。
- 备份处理:
- 当处于备机状态时,收到的变位数据会暂存,待切换到主机后,再处理这些数据。
- 信号与槽:
- 使用Qt的信号槽机制进行异步通信,例如控制结果、定值操作结果等通过信号发出。
- 实时库更新:
- 使用RtField来更新实时库
- 监控和日志:
- 使用`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