变量公式


1.EG网关变量公式使用说明

1.1 采集公式

采集公式功能是为了将网关采集到的变量值,通过自定义公式处理成想要在平台上展示与使用的值。比如固定值补偿、变量值成倍扩大或缩小、将4-20mA或0-5V测量值工程转换等。
经过公式运算后,平台上只显示和起效此变量处理后的值,如:此变量在设备监控中列表和组态中展示的值、历史报表中的值、报警值等都是公式处理后的值。

1.2写入公式

写入公式功能是采集公式功能的逆过程,它可以把在平台上输入框中输入的值,通过自定义公式处理成想要写入设备中的值。网关会把处理后的值,写入到设备中。

1.3公式输入格式

公式遵循的原理是整个公式输入框中的内容为f(X),最终输出的值为y=f(X)(注意:X为大写英文字母,公式输入时不需要写“y=”)。
采集公式中,X为网关采集到的原始值,公式处理后输出的值是在平台上展示的值。
写入公式中,X为在平台写入框中写入的值,公式处理后输出的值会直接写入到设备中。
在输入公式的过程中请保持所有输入均为英文半角字符输入,不能出现汉字符号与文字。
采集公式示例:(0.5*X-40)/16    输入公式示例:(16*X+40)*2。

1.4 支持的运算符

如果网关为高性能的EG20、EG21系列网关,则变量公式支持如下的运算符:

1.4.1基本算数运算符

加、减、乘、除运算符
示例:X + 5
取余运算符 %
功能:计算两个数值相除后的余数,且保留整数
示例:X % 3

1.4.2支持大部分的Math函数

1. 绝对值函数 Math.abs(X)
示例:Math.abs(X - 50)
2. 四舍五入函数 Math.round(X)
功能:对数值进行四舍五入取整
示例:Math.round(X)
 如果采集值 X = 12.3,则计算结果为 12
如果采集值 X = 12.7,则计算结果为 13
3. 向上取整函数 Math.ceil(X)
功能:对数值进行向上取整
示例:Math.ceil(X)
 如果采集值 X = 12.1,则计算结果为 13
如果采集值 X = 12.9,则计算结果为 13
4. 向下取整函数 Math.floor(X)
示例:Math.floor(X)
如果采集值 X = 12.1,则计算结果为 12
// 如果采集值 X = 12.9,则计算结果为 12
5. 幂运算函数 Math.pow(X, n)
示例:Math.pow(X, 2)
如果采集值 X = 5,则计算结果为 25
6. 平方根函数 Math.sqrt(X)
示例:Math.sqrt(X)

1.4.3三元条件运算符

功能:根据条件判断返回不同的值
基本语法:“条件 ? 值1 : 值2”, 意思是如果条件为真,返回值1,如果条件为假,返回值2
示例1:X > 50 ? 1 : 0
如果采集值 X = 60,则计算结果为 1
如果采集值 X = 40,则计算结果为 0

1.4.4公式填写注意事项

变量表示:公式中的变量必须使用大写字母 X
字符格式:所有符号必须使用英文半角字符
运算优先级:遵循数学运算优先级(括号 > 乘除 > 加减)
数据类型:确保运算中的数据类型的兼容性
通过合理组合这些运算符和函数,可以实现各种复杂的数据处理需求,满足工业现场的数据采集和转换要求。

注意:低算力网关运算符支持有限制

如果网关为EG10、BS10系列低算力网关,则仅支持 “加、减、乘、除”四种算数运算符,其余暂不支持

1.5. 应用案例

1.5.1 对数据进行固定值补偿;

如采集到的温度值为25℃,而实际温度值为26℃,此时我们就可以使用公式进行补偿,在采集公式中填入“X+1”即可。

1.5.2 对4-20mA等模拟量测量值进行工程转换 

举列说明:4-20mA模拟量测量模块,对应平台测量公式计算如下。
测量显示值=(20mA对应测量值-4mA对应测量值)*(X-4mA对应数字量)/(20mA对应数字量-4mA对应数字量)+4mA对应值测量值
如: 温度 4-20MA 测量0-100℃ ,即 0℃对应数字量4000 ,100℃对应数字量20000。
那么:温度显示值=(100-0)*(X-4000)/(20000-4000)+0=100*(X-4000)/16000
最终公式:(X-4000)/160
则,将“(X-4000)/160”输入到公式输入框中,如下图,这样平台实时数据展示时显示的值即为转化后的温度值。
当从站采集到的数据为12000(代表12mA)时,显示数据 50℃

2.低功耗网关变量公式说明

本说明适用于低功耗仪表中变量公式的编写。公式基于Lua语法,支持常用数学函数、基本算术运算及扩展运算符号。所有公式计算结果为数值类型。

2.1支持的运算符

运算符说明示例
+加法a + b
-减法 / 取负a - b 或 -x
*乘法a * b
/除法(结果为浮点数)a / b
%取模(求余数)a % b
//整除(向下取整除法)a // b
^幂运算(乘方)a ^ b 表示 a 的 b 次方
注意:// 与 % 遵循与Lua一致的规则,即 a // b 返回向下取整的商,a % b 返回余数,满足 a = (a // b) * b + (a % b)

2.2支持的数学函数

所有函数均使用英文小写名称,参数写在圆括号内。
函数说明示例
sin(x)正弦函数,x 为弧度sin(3.14159/2) → 约 1.0
cos(x)余弦函数,x 为弧度cos(0) → 1.0
tan(x)正切函数,x 为弧度tan(0.7854) → 约 1.0
sqrt(x)平方根,x≥0sqrt(9) → 3.0
abs(x)绝对值abs(-5.2) → 5.2
log(x)自然对数(以 e 为底)log(2.71828) → 约 1.0
exp(x)指数函数,e 的 x 次方exp(1) → 约 2.71828
注意:三角函数参数为弧度,若需使用角度,请先转换为弧度(角度 × π/180)。仪表内部不提供 π 常量,可用 3.1415926535 或 3.1415926535^1 近似。

2.3运算优先级

遵循标准数学优先级(从高到低):
  1. 函数调用(如 sin(x)
  2. 幂运算 ^
  3. 取负 -(一元)
  4. 乘 *、除 /、取模 %、整除 //
  5. 加 +、减 -(二元)
同一优先级从左到右计算。建议使用圆括号 () 明确运算顺序。

2.4编写规范

  • 公式中可使用数字常量(如 3.14-2.51e-3)。
  • 除法分母不能为零;sqrt 参数不能为负;log 参数必须大于零。
  • 公式计算结果超出仪表数值范围时,行为由底层Lua定义(通常返回 inf 或 nan)。
  • 公式遵循的原理是整个公式输入框中的内容为f(X),最终输出的值为y=f(X)(注意:X为大写英文字母,公式输入时不需要写“y=”),X为网关采集到的原始值,公式处理后输出的值是在平台上展示的值。

2.5应用案例

案例1:根据温度计算热敏电阻输出(Steinhart-Hart近似)

已知温度 x(单位℃),需计算电阻值 R = exp( a + b/T + c/T^3 ),其中 a=1.0, b=0.5, c=0.1。公式:exp(1.0 + 0.5/(X+273.15) + 0.1/((X+273.15)^3))(注意:温度转换为开尔文,分母需用括号确保优先级)

案例2:4-20mA模拟量测量模块转换

假设4-20mA电流信号对应物理量范围为 0~100 kPa(压力),仪表采集到的电流值为 I(单位mA)。线性转换公式为:
物理量 = (量程上限 - 量程下限) / (20 - 4) × (X - 4) + 量程下限
代入数值:
公式:(100 - 0) / (20 - 4) * (X - 4) + 0
简化后:6.25 * (X - 4)
若电流 X = 12 mA,则计算结果 = 6.25 × 8 = 50 kPa。
若物理量范围是 -10~100 ℃,则公式为:
公式:(100 - (-10)) / (20 - 4) * (X - 4) + (-10)
即 110 / 16 * (X - 4) - 10 或 6.875 * (X - 4) - 10

1.6常见错误与注意事项

错误写法正确写法说明
sin30sin(30)函数必须带括号
log(0)log(1e-6)对数参数必须 >0
sqrt(-4)避免负数无实数平方根
a / 0避免除零错误
2^32^3使用 ^ 运算符
(a+b//c)(a+b)//c 或 a+(b//c)注意整除优先级高于加法

七、调试建议

  1. 先使用简单常量测试函数是否可用,如 sin(1.5708)
  2. 复杂公式可拆分为多步中间变量(如果仪表支持子表达式)。
  3. 注意浮点数精度,避免直接比较相等(使用差值容限)。
  4. 查看仪表日志或输出值,检查是否出现 inf 或 nan
帮助中心 帮助中心
4 天前
11856

扫描下方二维码手机阅读文章

23 0