跳转到内容

AOE基本表达式

低代码控制器采用基于AOE事件驱动的控制方式,在利用AOE网络进行控制策略设计时,所涉及的基本语法介绍如下。

AOE可以直接将某一数值或表达式赋给某个变量。赋值号为冒号:或等号=,推荐使用冒号=,赋值顺序为将赋值号右边的值赋给左边。

相关示例如下:

#示例1:直接将值1赋给变量State_POINT
State_POINT: 1;
#示例2:将由变量Cartset_POINT与Cart_POINT组成的表达式的值赋给变量ECar
Ecar: Cartset_POINT - Cart_POINT;

AOE可完成的基本数值运算及涉及的运算符如下表所示。

名称运算符
四则运算+    -    *    /
关系运算<    <=    >    >=    ==    !=
逻辑运算&&    ||
取余运算%
幂运算^
位运算&    |    ^^    ~    <<    >>    @

相关示例如下:

#示例3:简单四则运算
Iout: Iout + Igain * Ecarn1 * Ts;
#示例4:多种运算混合
Ilimout: (Iout <= Iuplim && Iout >= Idownlim) * Iout + (Iout > Iuplim) * Iuplim + (Iout < Idownlim) * Idownlim;

AOE内置多种常用数学函数及实用时间获取函数,可通过向括号内传入参数进行直接调用,支持的函数及其具体功能如下表所示。

函数功能
abs()求绝对值
sqrt()求平方根
exp()求以e为底的指数
ln()、log10()求自然对数(以e为底)、求常用对数(以10为底)
sin()、cos()、tan()正弦函数、余弦函数、正切函数,单位为弧度
asin()、acos()、atan()反正弦函数、反余弦函数、反正切函数
sinh()、cosh()、tanh()双曲正弦函数、双曲余弦函数、双曲正切函数
asinh()、acosh()、atanh()反双曲正弦函数、反双曲余弦函数、反双曲正切函数
floor()向下取整,即取不大于传入参数的最大整数
ceil()向上取整,即取不小于传入参数的最小整数
round()将传入参数进行四舍五入
signum()符号函数,指出参数正负号,若为正则返回1;零返回0;负返回-1
atan2()计算方位角,弧度表示
max()、min()求多个参数的最大值/最小值,参数用“,”分隔
indexOfYear()返回日期的年
indexOfMonth()返回日期的月
indexOfDay()返回日期的日
indexOfMinute()返回时间的分钟
indexOfSecond()返回时间的秒
indexOfHour()返回时间的小时

AOE支持的数学常数和数字表示约定如下表。

类别
名称
AOE表示
数学常数
圆周率 pi
自然常数 e
数字表示方法
科学计数法 1e-2    1E-3
十六进制表示 x123    _123    $123

动作指一个复杂的控制策略所细分出来的步骤,在AOE中表现为节点之间的有向边。当首节点所表示的事件被触发后,则按照节点事件中所定义的规则,对应的动作(边)将被执行。

按照不同的动作内容,AOE动作可分为以下几类。

动作类型动作名称含义
None无动作不进行任何动作
SetPoints置点对测点和变量赋值
Solve方程组求解对线性方程组进行求解
MILP混合整数线性规划(稀疏)稀疏描述的混合整数线性规划问题求解
SimpleMILP混合整数线性规划(稠密)稠密描述的混合整数线性规划问题求解
NLP非线性规划非线性规划问题求解

具体的配置格式详见AOE策略文件配置。

无动作即控制器不执行任何动作,该节点事件被触发后,直接进入下一节点事件的等待触发状态。

置点动作可以进行测点的赋值,测点即指测点配置文件中用户已定义的对象;也可以进行变量的定义,此处的变量指本控制策略中涉及到的非测点对象,可用于定义控制过程中出现的数学计算式、声明物理意义的中间变量、为减少策略撰写工作量而对表达式整体标识一个别名等等。

置点动作可以直接赋值或赋予表达式,测点或已定义的变量可用于定义新变量。赋值对象的类型可以为数字量或者模拟量。

可求解线性方程组 Ax = b,其中 A 为系数矩阵,x 为未知数组成的向量,b 为常数项向量。

MILP与SimpleMILP(混合整数线性规划)

Section titled “MILP与SimpleMILP(混合整数线性规划)”

此动作用于在给定可行域内,求解线性约束下线性目标函数的最优解及最优值。

MILP全称为Mixed-integer linear programming,即混合整数线性规划,指目标函数和约束条件均为线性,部分决策变量限制为整数的数学规划问题。具体来说,其约束条件支持等式约束及不等式约束;变量类型包括 0-1变量、整型变量、实数型变量。

在本控制器的动作设置中,MILP和SimpleMILP区别在于前者的约束为稀疏矩阵,即后者则为稠密矩阵。通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时的矩阵为稀疏矩阵。

以混合整数线性规划(MILP)为例,其动作的设置参数包括:

#1)目标函数:#
min/max(<表达式>)
#2)约束条件:#
<bool表达式1>;
<bool表达式2>;
...
#3)变量声明:#
<变量名1>:<变量类型1>,
<变量名2>:<变量类型2>,
...

其中变量类型包括以下三类:

变量类型含义
10-1二进制变量
2整型变量
3实数型变量

实际列写时,按顺序写下目标函数、约束条件、变量声明的标准格式式子即可,上例中##间的内容不必写入。具体例子详见微网储能平衡控制——AOE边声明。

此动作用于在给定可行域内,求解约束下目标函数的最优解及最优值,其中目标函数和约束条件至少有一个为非线性。

NLP全称为Nonlinear programming,即非线性规划,指目标函数和约束条件至少有一个为非线性的数学规划问题。具体来说,其约束条件支持等式约束及不等式约束;变量类型包括 0-1变量、整型变量、实数型变量。

AOE动作定义(边声明)配置内容:AOE ID、首尾节点、动作名称、失败模式、动作类型、动作参数。

AOE ID首尾节点动作名称失败模式动作类型动作参数
<u64><u64>;<u64><String>Default
Ignore
StopFailed
StopAll
None
SetPoints
Solve
MILP
SimpleMilp
NLP
< \ >
<String>:<Expr>;…
<Expr>
<Expr>
<Expr>
<Expr>
  • AOE ID:声明动作属于哪个AOE网络,用<u64>(64位无符号整数)表示。

  • 首尾节点:边需要声明首尾节点,用一对正整数表示,格式为:<尾节点ID>;<首节点ID>。边的方向为:尾节点→首节点。节点ID与AOE事件定义中相对应。

  • 动作名称:便于理解动作内容,是对动作的简要文字解释,用<String>(表示字符串类型)表示。

  • 失败模型:指动作执行失败后需要采取的措施。执行失败后可以选择以下几种处理措施:Default(尝试重新执行失败的动作)、Ignore(忽略本次失败并不影响其它动作)、StopFailed(停止受到影响的动作)、StopAll(停止本次控制策略的执行)。

  • 动作类型:分为None(无动作)、SetPoints(置点)、Solve(方程组求解)、MILP与SimpleMilp(混合整数线性规划)、NLP(非线性规划)。其中,SetPoints除了对测点设值之外,还可以进行变量定义和计算,动作参数分为数字量和模拟量。动作的含义及其参数详见 AOE动作类型。

  • 动作参数:根据动作类型不同而表示不同的含义:

    • 动作类型为无动作时,动作参数缺省;
    • 动作类型为置点时,动作参数为字符串和表达式,并按照变量类型分为数字量和模拟量两部分,置点动作既可以进行变量的定义,也可以把数字量或者模拟量设置给测点,其中字符串表示变量或测点名称,表达式表示变量定义式或者测点被设置的值;
    • 动作类型为线性方程组求解、稀疏混合整数线性规划问题求解、稠密描述的混合整数线性规划问题求解和非线性规划问题求解时,动作参数为描述对应的数学模型的字符串。