4.2.1 基础数据模型
使用和设计是工业产品的一体两面,作为设计者,我们需要从用户需求出发,穿越过去,然后构建出产品的骨架。本小节,我会带着大家从用户的需求出发,构建出产品的基础数据模型。
我们的抓手是两款保护产品:用电端过流保护和变压器差动保护。用电端过流保护适用于用户端电气设备保护,其工作原理类似保险丝,如果电流大于特定值且持续超过特定时间,发出开出命令并跳开断路器。
变压器为多侧电力设备,一般为两侧或三侧,用于实现不同等级电压的转换,如110kV转为10kV。变压器差动保护工作原理是所有侧的电流相加理论上为0(实际运行中有一定的不平衡电流),因此如果各侧电流之和大于允许不平衡电流且保持特定时间,变压器保护会发出开出命令跳开断路器各侧断路器,以保护昂贵的变压器设备。
这两款产品工作原理中都有相似的描述:电流值大于设定值且保持一段时间,其中电流值被称为模拟量输入值,常用AI表示。类似的,电压、功率、相角等都是模拟量输入值,AI一般为浮点数类型,通过采样或计算获得。
外部加入0.5A的电流,我们期望对应的电流模拟量也为0.5。但计算机内部实现时,电流值是通过AD采样回路获取的,如果为12位采样,可能0.5A对应300这样的一个整数。如何将300换算成0.5呢,就需要一个转换系数。
因为批量生产的硬件存在细微差异,因此设备出厂前需要进行检验,其中设定转换系数就是很重要的一环。系数一般在出厂时设定,后期很少修改。
微机保护需要监视它所保护的各种电器设备运行工况,如断路器的分合状态等。这类电气量是布尔变量,因此习惯性称之为数字量输入,常用DI表示。
过流保护检测到电力系统发生过流时,首先驱动自己的继电器出口,然后通过外部回路驱动断路器断开。继电器出口是布尔变量,因此习惯称之为数字量输出、开入量输出或开出,常用DO表示。
类似于DI和DO,和AI对应的就是AO了。模拟量输出变量最常用于PLC控制回路,如依据锅炉反应温度控制油量阀等。在微机保护产品中,AO变量常用于调解变压器温度水位等。
AI、DI、DO、AO合在一起,构成了工业PLC控制的基础组件。
◇◇◇
再回顾过流保护产品的工作原理,电流值大于特定值且保持一段时间,其中这些电流特定值和时间被称之为定值。定值是由用户依据现场运行工况计算后输入的,因此需要保存在设备中,掉电不能丢失。
定值有一个很重要的特性,必须同时写入。如过流保护中的电流和时间定值,如果一个一个依次写入,容易发生保护误动,这是绝对不允许的。定值写入过程中需要短暂的闭锁保护出口,会影响保护实时性,也需要充分考虑。后续我们会探讨如何构建定值数据模型和接口。
在电力系统运行过程中,保护动作跳闸是非常重要的事情,需要运行人员尽快分析跳闸原因,排除异常后继续恢复运行。为了便于运行人员分析问题,微机保护跳闸后,会产生一条报告信息,详细记录跳闸的时间、原因,跳闸时的电气量大小等。
动作报告信息一般构建成环形缓冲区,并掉电保持。类似于动作报告,用户操作记录、开入变位记录也是构建成环形缓冲区,并掉电保持。他们除了单条信息的描述结构存在差异外,组织方式完全一致,本书后续将其统称为报告类数据结构。
动作报告仅能记录简单动作原因,为了分析一些复杂的电力系统故障,需要抓取故障发生时刻前后一段时间的采样数据,在电力行业这类数据模型习惯性称之为扰动数据。对扰动数据的分析需要专业人员使用专业工具,堪称现场故障分析的核武器,在各行各业中经常有类似的策略。
微机保护装置是一款设备,为了便于用户操作巡检,设备面板上有液晶、按键和led等基础元素。led一般有两种颜色,红色和绿色,红色表示各种保护动作信号,绿色表示运行或报警信号。绿色led是实时显示的,发生报警时点亮,报警解除后熄灭。为了便于用户在跳闸后分析问题,红色led一旦点亮就要求保持,直到用户分析完故障原因并触发信号复归按钮后才熄灭。
目前工业设备组网已经是基本需求了,这就要求微机保护设备具备各种通讯规约功能,而基于通讯规约也会衍生出特定的逻辑功能需求。AI、DI、AO增加通讯功能后成为遥测、遥信和遥调功能。电力行业对远程控制断路器的准确度要求很高,误操作不仅会导致异常停电,也会给运维人员带来生命危险。为了基于通讯规约构建100%要求的远程断路器控制操作,电力行业衍生出“预置——反较——执行”的遥控操作。遥测、遥信、遥控、遥调合成四遥。
如上,AI、AO、DI、DO、系数、报告、定值、扰动数据、led、信号复归和四遥,构成了微机保护装置最基本的数据模型。
4.2.2 高级数据模型
除了基础数据模型,可能还会有一些基于基础数据模型的衍生模型。这类数据模型被我们称之为高级数据模型,本节我们继续从用户的需求出发,去构建微机保护装置的高级数据模型。
- 历史数据模型
AI数据是实时变化的,为了分析一段时间内的设备运行工况,如地铁机车一天的工作状态,需要以固定时间间隔对AI进行采样记录,这称之为历史数据模型。
历史数据模型一般对AI和DI进行采样记录。因为记录时间长,数据量比较大,一般存储在外部flash中。
- 趋势分析
大型电机在启动过程中,一开始启动电流会比较高,然后会慢慢的降到额定运行状态,如下图所示。
为了设定恰当的过流定值,需要抓取电机启动过程的详细运行工况。用历史数据模型时间间隔太大,用扰动数据模型时间太短,为此我们构建了一种新的数据模型:趋势分析模型。
趋势分析模型首先需要一个触发条件,发生触发条件后,以适当的时间间隔记录AI电气量。趋势分析模型一般也是仅对AI和DI采样,数据量也比较大,需要存储在外部flash中。
- 遥测越限
AI值时时刻刻在发生变化,处于正常范围内不需要关心,但一旦越过了正常范围就需要运维人员参与了。为了表达AI值超出合理范围这个状态信息,我们构建了遥测越限数据模型。
AI越限值一般有四个边界,上越限、上上越限、下越限、下下越限。因为并非所有的AI越限都用足这四个边界,因此需要额外增加四个使能标志。
AI越限相当于将AI数据模型转化为DI和报告数据模型,其组织结构同报告类数据模型。
- 累加量和电度
累加量模型中最典型的值就是电度了,我们知道对有功功率进行累加就是有功电度,对无功功率进行累加就是无功电度。
累加操作易持续放大误差,为了减少误差,需要在AI值精度和时间精度两方面下功夫。提升AI精度的最佳策略是算数平均,提升时间精度侧重于充分考虑累积误差。
基于基本电度模型,还可以构建出分时电度和电度冻结两个数据模型。分时电度数据模型是按照尖、峰、平、谷四种运行工况分别统计电度,不同情况下电费不同,有助于引导大家错峰用电。电度冻结用于记录特定时刻的电度值,如记录每天零点零时零分的电度值,就可以比较每天的用电量了。
累加量需要增加调整和清零接口。
- 保护元件
前文我们提及,微机保护的一个特征是可用一套硬件实现很多种保护逻辑。在产品研发中,为了让设备具有更大的实用性,我们经常在一款产品中集成很多的保护逻辑,现场按照用户的需求选择投入。这样的策略带来了新问题,就是产品的定值数量非常多,甚至高达到几百个,给用户使用带来复杂度。
为了解决这个问题,一种策略是将定值按保护逻辑进行分组,未投入的保护逻辑其定值干脆对用户不可见。
保护逻辑的另外一层价值是软件模块复用,如某保护逻辑需要断路器状态、Ia电流作为输入条件,直接硬编码会导致代码因缺乏灵活性而难以复用。一种策略是构建虚拟输入节点,然后在保护逻辑投入时才关联到真实电气量上。
此时一个新的抽象组合出现了,它包含输入、定值、输出三类虚拟节点,能够完成一段独立的保护判断逻辑,我们经常将这一抽象概念称之为保护元件。
- 计数器
计数器有点类似于遥测的累加量,不过是对事件进行累加。计数器一般有两个DI输入,一个用于计数,一个用于复位。计数一般有三种模式:上升沿计数、下降沿计数和跳变计数。
计数器常用于记录某一件事件发生的次数,因此需要掉电保持。对外可以通过遥测方式通讯远传。
4.2.3 数据字典
前文阐述编程规范时,提到需要构建数据字典,而依据用户需求提炼数据模型,恰好是构建数据字典的起点。
我们团队的数据字典构建如下:
序号 | 名称 | 字典 | 备注 |
---|---|---|---|
1 | 数字量输入 | di,DI | 全小写或全大写,不允许混杂 |
2 | 模拟量输入 | ai,AI | |
3 | 数字量输出 | do,DO | |
4 | 模拟量输出 | ao,AO | |
5 | 系数 | ratio | |
6 | 报告类数据 | report | |
7 | 保护动作报告 | tripReport | trip在前,防止“名词+动词”命名冲突 |
8 | 遥信变位 | soeReport,SOEReport | SOE是顺序事件记录的缩写,全大写或全小写,不允许混杂。 |
9 | 操作事项 | eventReport | |
10 | 定值 | setting | |
11 | 扰动数据 | disturb | disturbance一词的缩写。 |
12 | 信号复归 | signalRst | Rst为reset的缩写 |
13 | 遥测 | YC | 汉语拼音yao che的缩写,行业习惯用法。仅允许大写。 |
14 | 遥信 | YX | 汉语拼音yao xin的缩写,行业习惯用法。仅允许大写。 |
15 | 遥控 | YK | 汉语拼音yao kong的缩写,行业习惯用法。仅允许大写。 |
16 | 遥调 | YT | 汉语拼音yao tiao的缩写,行业习惯用法。仅允许大写。 |
17 | 历史数据模型 | history | |
18 | 趋势分析 | trend | |
19 | 遥测越限 | overLimit | |
20 | 累加量和电度 | acc | accumulation一次的缩写 |
21 | 分时电度 | timeAcc | acc在后,防止同“名词+动词”命名冲突 |
22 | 电度冻结 | frozenAcc | |
23 | 保护元件 | relayWord | 由sel继保继承而来,早期保护元件仅支持布尔量,构成一个个的word字,大家习惯称之为relayWord(继电器字)。 |
24 | 计数器 | counter |
特点如下:
- 用到一些大家约定俗称的汉语拼音缩写,如四遥。
- 较短的缩写不允许大小写混杂,主要是AI,DI之类。为了满足匈牙利命名规范,如果起始字符是小写,后续也是小写,如果起始字符大写,后续也是大写。
- 尽量不要使用相同的词根,如果难以避免,差异部分置前,如acc和frozenAcc,这样在后期采用“名称+动词”命名规范定义函数时,不易冲突。否则我们会将accFrozen当做acc类的一个类成员函数。
这个数据字典我们团队已使用较长历史时间了,限于专业英语水平和历史原因,可能很多词根选择的并不恰当。但可以保证一点,如果熟悉了上述词根,书写、阅读、审核代码时,能省去不少麻烦。
——————————————
我是小马儿,一个渴望良知与灵魂的嵌入式软件工程师,欢迎您的陪伴与同行,如感兴趣可加个人微信号nzn_xiaomaer交流,需备注“异维”二字。