2.2 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()求多个参数的最大值/最小值,参数用“,”分隔
rand()输出[0,1)之间的随机数
rand2(a,b)输出[a,b)之间的随机数
indexOfYear()、Year()返回日期的年
indexOfMonth()、Month()返回日期的月
indexOfWeekday()、Weekday()返回日期的星期几,星期一至星期日分别为1-7
indexOfDay()、Day()返回日期的日
indexOfHour()、Hour()返回时间的小时,从当天0点算起
indexOfMinute()、Minute()返回时间的分钟,从当天0点算起
indexOfSecond()、Second()返回时间的秒,从当天0点算起
now()返回当前13位时间戳
TotalMemory()返回总内存大小
UsedMemory()返回已使用内存大小
UsedMemorySelf()返回程序本身已使用内存大小
MemUsage()返回内存使用率
MemUsageSelf()返回程序本身内存使用率
TotalSwap()返回总Swap大小
UsedSwap()返回已使用Swap大小
CpuUsage()返回Cpu使用率
CpuUsageSelf()返回程序本身Cpu使用率
TotalSpace()返回总空间大小
UsedSpace()返回已使用空间大小
DiskUsage()返回已使用磁盘率
TotalReceived()返回总接收数据量
TotalTransmitted()返回总发送数据量

注:indexOfYear()等时间相关函数中,index不区分大小写。

数字表示约定

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

类别
名称
AOE表示
数学常数
圆周率 pi
自然常数 e
数字表示方法
科学计数法 1e-2    1E-3

测点值及采样时间相关表达式

注:以下以点号为1234,别名为POINT_EXAMPLE的测点为例。

测点值及采样时间相关表达式

若在前后几次采样中,测点值都相同,那么测点的变化可以指代两种情况,一种是指值的变化,只有值发生改变时,才认为测点发生了变化;另一种是无论值是否变化,只要进行一次采样,就认为测点发生了变化(更新)。这里对可能产生的歧义做一个说明。

  • 一、默认情况下,按第二种方式判别测点的变化。

别名_t 表示最近一次的采样时间。别名_dt 是指最近一次采样和上一次采样的时间间隔,别名_err 是指这一次采样和上一次采样的测点值之差,别名_ddt 指测点值变化率。

在这几个值的计算中,都是将当前采样的时间和值与上一次采样得到的时间和值进行对比。举一个例子,假设通讯通道每隔 1s 获取一次数据,各个值列表如下:

本次采样时间1ms2ms3ms4ms5ms6ms7ms8ms9ms
本次采样值111213141414141516
上次时间012344448
上次值01112131414141415
t123456789
dt111112341
err1111100011
界面显示时间123444489
界面显示的值111213141414141516
  • 二、若希望测点值变化时,才认为是测点发生变化,则将测点变化条件设置为 测点_err!=0

别名_t 仍表示最近一次的采样时间。别名_dt 是指最近一次采样和上一次发生值变化的采样的时间间隔,别名_err 是指这一次采样和上一次发生值变化的采样的测点值之差,别名_ddt 指测点值变化率。仍然是上述例子,在这个设定下,各个值列表如下:

本次采样时间1ms2ms3ms4ms5ms6ms7ms8ms9ms
本次采样值111213141414141516
上次时间012344448
上次值01112131414141415
t123456789
dt111112341
err1111100011
界面显示时间123444489
界面显示的值111213141414141516

如果只关心测点值的改变和改变的时间间隔,则需要用上述第二种方案。

若需要分辨每次采样而不要求测点值一定发生改变,以通信成功获取测点值来作为触发aoe的条件,则需要通过别名_t来辨别每次采样的时间,并用aoe中的变量记录上一次的采样时间,若别名_t等于上一次采样的时间,则还没有获取新的通信数据,若别名_t大于上一次采样的时间,则获成功取新的通信数据。

需要说明的是,上述测点是针对通信测点的采样进行阐述的,对于aoe的置点和计算点的计算也是同理的。