开发者中心 开发者中心
  • 简体中文
  • English
视频教程
敢为云网站
  • 6.0版本
  • 6.1 版本
视频教程
敢为云网站
  • 平台概述
  • 平台功能
  • 平台安装
  • 开发者指南
  • 项目实战
  • 附录
    • 常用协议说明
      • MODBUS
      • SNMP
      • OPC
      • BACNet
      • 字符协议
    • 常用调试工具
    • 接口说明
    • 数据库说明
    • 平台接入能力
    • 如何使用gRPC
    • 敢为公共库
    • 内网平台获取外网平台数据
    • 扩展插件使用说明
    • VForm3开发者文档
    • 虚拟计算表达式
      • 配置入口指引
      • 常量值配置
      • 运算符表达式配置
        • 三角函数表达式
        • 反三角函数
        • 双曲函数
      • 函数表达式
        • 绝对值函数 abs(值)
        • 平方根函数 $sqrt(值)
        • 向上取整函数 $ciel(值)
        • 向下取整函数 $floor(值)
        • 指数函数 $exp(值)
        • 以10为底的对数函数 $log10(值)
        • 自然对数函数 $log(值)
        • 以2为底的对数函数 $log(值, 2)
      • 设备表达式配置
        • 测点值计算表达式解析与示例
        • 设备实时状态函数 $E(设备号)
        • $C(2,1) 表示设备下1号测点实时模拟量(包括单位)
        • $C1(设备号,测点号) 表示设备下1号测点实时模拟量(不包括单位)
        • 测点元数据函数 $C2(设备号,测点号)
        • ASC(设备号,测点号) 表示设备 下1号测点的实时状态(显示0-1)
        • 测点名称函数 $X(设备号, 遥信号)
        • $X1(设备号,遥信号) 表示设备下1号测点的实时模拟量(不包括测点名称)
        • 遥信报警状态函数 ASX(设备号, 遥信号)
        • 资产维保状态函数 $Z(ZCID)
      • 逻辑函数
        • 条件判断函数 $iif(a, b, c)
        • 多条件分支函数 $case()
      • 函数表达式配置
        • 最大值函数 $max(a, b)
        • 最小值函数 $min(a, b)
        • 幂函数 $pow(a, b)
        • 四舍五入函数 $round(a, b)
        • 当前时间函数 $now()
        • 当前系统的日期函数$today()
        • 最大日期函数 $maxdate()
        • 日期加减函数 adddays(a, b)
        • 月份加减函数 addmonths(a, b)
        • 年份加减函数 addyears(a, b)
    • 基于K8s负载均衡云服务配置
    • Q&A

虚拟计算表达式实践

# 虚拟计算表达式实践

# 配置入口指引

所有表达式配置均需通过以下路径进入:

  1. 进入「设备管理」菜单

  2. 选择目标设备 → 点击「遥测编辑」

  3. 滑动至页面底部 → 展开「高级设置」区域

⚠️ 特别提示:

✓ 本文后续所有操作均默认在该位置进行,不再重复说明路径

✓ 不同版本的界面布局可能存在细微差异,请认准「遥测量编辑界面」

# 常量值配置

在参数表达式编辑区域,用户可直接输入自定义常量值。 如:设置当前温湿度#1的温度固定为25

示例演示

实时同步效果 配置完成后,设备列表将自动同步显示已配置的常量参数

# 运算符表达式配置

📘【运算符优先级规范说明】

  1. 运算符分类定义

    • 一元运算符(单目运算符)

      • 符号集:-(取负)、~(按位取反)、!(逻辑非)

      • 特性:仅作用于单个操作数,优先级高于所有二元运算符

    • 二元运算符(双目运算符)

      • 符号集:*、/、%、+、-、<、>、<=、>=、==、!=、&、^、&&、|

      • 特性:连接两个操作数进行运算,优先级按类别区分

  2. 优先级执行规范

    • 绝对优先规则:
      ( ) → 强制优先级括号
      
      • 括号内表达式始终优先计算,可嵌套使用
  3. 示例演示

一元运算符示例:

实时同步效果

二元运算符示例:

实时同步效果

注意

其他一元/二元运算与上述使用方法相同。

注意

‌\frac‌是数学符号,用于表示分数。在数学表达式中,\frac用于表示分子与分母的关系。例如,\frac{1}{2}表示二分之一等同于1/2。 命令格式:

   \frac{分子}{分母}

# 三角函数表达式

# 1. 正弦函数 $sin(值)

  • 输入范围:任意实数(角度默认以弧度为单位,如需角度制需转换)。
  • 输出范围:[-1, 1]
  • 示例:
    • $sin(0) = 0

# 2. 余弦函数 $cos(值)

  • 输入范围:任意实数。
  • 输出范围:[-1, 1]
  • 示例:
    • $cos(0) = 1

# 3. 正切函数 $tan(值)

  • 示例:
    • $tan(\frac{π}{4}) = 1

# 4. 余割函数 $csc(值)

  • 示例:
    • $csc(\frac{π}{2}) = 1

# 5. 正割函数 $sec(值)

  • 示例:
    • $sec(0) = 1

# 6. 余切函数 $cot(值)

  • 示例:
    • $cot(\frac{π}{4}) = 1

# 反三角函数

# 1. 反正弦函数 asin(值)

  • 输入范围:[-1, 1]
  • 示例:
    • asin(1) = \frac{π}{2}

# 2. 反余弦函数 acos(值)

  • 输入范围:[-1, 1]
  • 输出范围:[0, π](主值范围)
  • 示例:
    • acos(-1) = π

# 3. 反正切函数 atan(值)

  • 输入范围:任意实数。
  • 示例:
    • atan(1) = \frac{π}{4}

# 双曲函数

# 1. 双曲正弦函数 $sinh(值)

  • 输入范围:任意实数。
  • 示例:
    • $sinh(0) = 0

# 2. 双曲余弦函数 $cosh(值)

  • 输入范围:任意实数。
  • 示例:
    • $cosh(0) = 1

# 3. 双曲正切函数 $tanh(值)

  • 输入范围:任意实数。
  • 输出范围:$(-1, 1)
  • 示例:
    • $tanh(0) = 0

# 函数表达式

# 绝对值函数 abs(值)

  1. 输入范围
  • 任意实数(正数、负数、零)
  1. 示例
  2. 基础计算
    • abs(5) = 5
    • abs(-3.2) = 3.2
    • abs(0) = 0

# 平方根函数 $sqrt(值)

  1. 输出范围
  • 若输入合法,输出为 $\geq 0 的实数。
  1. 示例

  2. 基础计算

    • $sqrt(4) = 2(因为 $2^2 = 4)
    • $sqrt(0.25) = 0.5(因为 $0.5^2 = 0.25)
  3. 边界值

    • $sqrt(0) = 0
    • $sqrt(1) = 1

# 向上取整函数 $ciel(值)

  1. 输入范围
  • 任意双精度浮点数(正数、负数、零、小数)
  1. 输出范围
  • 整数(输出类型可能为 int, long 等,依编程语言而定)
  1. 示例

  2. 基础计算

    • $ciel(3.2) = 4(大于3.2的最小整数)
    • $ciel(-1.7) = -1(大于-1.7的最小整数,注意负数方向)
    • $ciel(5) = 5(输入为整数时直接返回自身)
  3. 边界值

    • $ciel(0.0) = 0
    • $ciel(-0.0) = -0(部分语言中-0.0与0.0等价)

# 向下取整函数 $floor(值)

  1. 输入范围
  • 任意双精度浮点数(正数、负数、零、小数)
  1. 输出范围
  • 整数(输出类型可能为 int, long 等,依编程语言而定)
  1. 示例

  2. 基础计算

    • $floor(3.8) = 3(小于3.8的最大整数)
    • $floor(-1.2) = -2(小于-1.2的最大整数,注意负数方向)
    • $floor(5) = 5(输入为整数时直接返回自身)
  3. 边界值

    • $floor(0.0) = 0
    • $floor(-0.0) = -0(部分语言中-0.0与0.0等价)

# 指数函数 $exp(值)

  1. 定义 返回自然常数 $e$(约等于 2.71828)的「值」次方,即 $e^{值}$。数学上表示为 $\exp(值)。

  2. 输入范围

  • 任意实数(正数、负数、零)
  1. 输出范围
  • 正实数(输出 > 0)
  1. 示例 基础计算
    • $exp(1) = e^1 ‌≈‌ 2.71828
    • $exp(0) = e^0 = 1
    • $exp(-2) = e^{-2} ‌≈‌ 0.13534

# 以10为底的对数函数 $log10(值)

  1. 定义 返回一个正实数「值」的以10为底的对数,即求解方程 $10^x = 值$ 中的 $x$。数学上表示为 $\log_{10}(值) 或 $\lg(值)。

2 .输入范围

  • 值 $> 0(输入必须为正实数,否则无定义)

3.输出范围

  • 任意实数($输出 \in (-\infty, +\infty))
  1. 示例 基础计算
    • $log10(100) = 2(因为 $10^2 = 100)
    • $log10(0.1) = -1(因为 $10^{-1} = 0.1)
    • $log10(1) = 0(因为 $10^0 = 1)

# 自然对数函数 $log(值)

  1. 定义 返回一个正实数「值」的自然对数,即以数学常数 $e$(约等于 2.71828)为底的对数,求解方程 $e^x = 值$ 中的 $x$。数学上表示为 $\ln(值) 或 $\log_e(值)。

  2. 输入范围

  • 值 $> 0(输入必须为正实数,否则无定义)
  1. 输出范围
  • 任意实数($输出 \in (-\infty, +\infty))
  1. 示例 基础计算
    • $log(1) = 0(因为 $e^0 = 1)
    • $log(e) = 1(因为 $e^1 = e)
    • $log(e^2) = 2(直接利用指数与对数的互逆性)
    • $log(10) ‌≈‌ 2.3026(非整数结果)

# 以2为底的对数函数 $log(值, 2)

  1. 定义 返回一个正实数「值」的以2为底的对数,即求解方程 $2^x = 值$ 中的 $x$。数学上表示为 $\log_2(值),部分编程语言中需明确指定底数(如 log(值, 2))。

  2. 输入范围

  • 值 $> 0(输入必须为正实数,否则无定义)
  • 底数:此处固定为2(若底数可变,需满足底数 $> 0 且 $\neq 1)
  1. 输出范围
  • 任意实数($输出 \in (-\infty, +\infty))
  1. 示例 基础计算
    • $log(8, 2) = 3(因为 $2^3 = 8)
    • $log(1, 2) = 0(因为 $2^0 = 1)
    • $log(0.5, 2) = -1(因为 $2^{-1} = 0.5)

# 设备表达式配置

# 测点值计算表达式解析与示例

核心函数说明

  1. this

    • 代表当前测点的实时值(最新采样值)
    • 示例:this = 25.3(当前温度值)
  2. old

    • 代表上一次采样周期的测点值
    • 示例:old = 24.8(上一周期温度值)
  3. $C1(设备号, 测点号)

    • 跨设备测点引用函数,返回指定设备的实时测点值
    • 示例:$C1(2, 2) 表示获取2号设备第2号测点的实时值

表达式示例解析 目标公式:
(this * 100 + $C1(2, 2)) / 2

计算逻辑:

  1. 取当前测点值 this 并乘以100
    (如 this = 30 → 30 * 100 = 3000)

  2. 获取2号设备2号测点的实时值
    (假设 $C1(2,2) = 50)

  3. 将两者相加后除以2
    ((3000 + 50) / 2 = 1525)

注意

this和old这两个关键字只对真实设备的表达式有用,虚拟设备或者其它场合下的表达式这两个关键字无意义。

# 设备实时状态函数 $E(设备号)

函数定义 $E(2) 用于获取指定设备的实时通讯与运行状态,返回整数型状态码。该函数是设备健康监测的核心接口,广泛应用于工业监控、物联网平台及自动化控制场景。

状态码解析表

返回值 状态名称 含义说明 典型场景与操作建议
0 不通讯 设备无数据响应(物理连接中断/电源故障/协议不匹配) ▸ 检查网络链路
▸ 验证设备供电
▸ 重启通讯模块
1 通讯正常 数据链路畅通,设备在线(无业务级报警) ▸ 常规监控状态
▸ 可进行参数读取操作
2 有报警 设备检测到业务异常(传感器越限/机械故障/安全门开启) ▸ 触发声光报警
▸ 推送通知至运维人员
▸ 启动应急预案
3 正在进行设置 设备处于参数配置模式(禁止业务操作) ▸ 暂停生产流程
▸ 显示配置进度条
▸ 设置超时重试机制
4 正在初始化 设备启动自检流程(硬件检测/固件加载/服务启动) ▸ 显示初始化进度
▸ 禁止外部干预
▸ 超时自动复位
5 撤防 安全系统解除警戒(门禁开放/报警抑制) ▸ 记录撤防操作日志
▸ 联动视频监控
▸ 设置撤防时效

# $C(2,1) 表示设备下1号测点实时模拟量(包括单位)

测点实时模拟量函数 $C(2,1) 使用指南

函数定义 $C(设备号, 测点号) 用于获取指定设备下测点的实时模拟量值,返回值包含数值与物理单位(如 25.3°C、101.3kPa)。该函数是工业数据采集的核心接口,支持跨设备数据联动与单位感知计算。

# $C1(设备号,测点号) 表示设备下1号测点实时模拟量(不包括单位)

测点实时模拟量函数 $C1(2,1) 使用指南

函数定义 $C1(设备号, 测点号) 用于获取指定设备下测点的实时模拟量值,仅返回纯数值(如 25.3、101.3),不包含物理单位信息。该函数适用于需要原始数值进行计算的场景,与 $C() 函数形成互补。

# 测点元数据函数 $C2(设备号,测点号)

使用指南

函数定义 $C2(设备号, 测点号) 用于获取指定设备下测点的实时模拟量值,返回包含测点名称与物理单位的元数据信息(如 "反应釜温度(°C)")。该函数为数据消费端提供完整的测点上下文,适用于需要人机交互的显示场景。

# ASC(设备号,测点号) 表示设备 下1号测点的实时状态(显示0-1)

测点实时状态函数 ASC(2,1) 使用指南

函数定义 ASC(设备号, 测点号) 用于获取指定设备下测点的实时数字量状态,返回值以布尔型整数表示(0 表示关闭/非激活状态,1 表示开启/激活状态)。该函数专注于二进制状态监测,适用于开关量信号、数字传感器等场景。

返回值解析

返回值 状态含义 典型场景
0 非激活状态 阀门关闭、传感器未触发、继电器断开
1 激活状态 阀门开启、红外探测触发、安全门开启

# 测点名称函数 $X(设备号, 遥信号)

函数定义 $X(设备号, 测点号) 用于获取指定设备下测点的实时模拟量名称(纯文本标识),不包含数值与单位信息。该函数专注于提供测点的语义化标识,适用可读标签的显示场景。

# $X1(设备号,遥信号) 表示设备下1号测点的实时模拟量(不包括测点名称)

配置参考

# 遥信报警状态函数 ASX(设备号, 遥信号)

函数定义 ASX(设备号, 遥信号) 用于获取指定设备下遥信测点的实时报警状态,当测点处于报警状态时返回 True,否则返回 False。该函数专注于二进制报警信号监测,适用于开关量报警、数字传感器异常检测等场景。

# 返回值解析

返回值 状态含义 典型场景
True 报警激活状态 烟雾探测器触发、电机过载、安全门非法开启
False 正常状态 系统运行正常、传感器未检测到异常

# 资产维保状态函数 $Z(ZCID)

函数定义 $Z(ZCID) 用于查询指定资产的维保过期天数,若资产存在且维保过期则返回正整数天数,若资产不存在返回 false。该函数是资产管理系统的核心接口,支持设备全生命周期管理。

# 返回值解析

返回值类型 示例值 含义说明 典型处理逻辑
正整数 15 维保已过期15天(需立即处理) 触发维护工单、红色警示标记
false - 资产不存在或ID无效 记录错误日志、提示用户检查资产编码

说明

使用$Z(ZCID)表达式后修改档案信息后需要重启平台才能更新当前天数信息。

# 逻辑函数

# 条件判断函数 $iif(a, b, c)

定义 根据条件 a 的布尔值,返回 b(若 a 为 true)或 $c$(若 a 为 false)。等效于三元运算符 a ? b : c,是 if-else 逻辑的简洁表达形式。

输入范围

  • a:布尔表达式(如 x > 0、is_valid)或可隐式转换为布尔值的类型(如数字 0/非0、字符串空检查)
  • b:条件为真时返回的值(任意类型)
  • $c$:条件为假时返回的值(任意类型,需与 b 类型兼容或可隐式转换)

输出范围

  • 返回 b 或 $c$ 的值,类型取决于输入参数(如数字、字符串、对象等)

示例

  1. 基础计算
    • $iif(5 > 3, "Yes", "No") = "Yes"$
    • $iif(0, "True", "False") = "False"$(数字 0 隐式转为 false)

# 多条件分支函数 $case()

定义 按顺序评估多个条件-值对,返回第一个满足条件的对应值;若所有条件均不满足,则返回 else 参数指定的默认值。等效于编程中的 if-else if 链或 SQL 的 CASE 语句,支持多分支逻辑。

输入范围

  • 参数结构:
    $case(condition1, val1, condition2, val2, ..., else, val)
    • condition1, condition2, ...:布尔表达式或可隐式转换为布尔值的条件
    • val1, val2, ...:对应条件为真时返回的值(类型需兼容或可隐式转换)
    • else:固定关键字,表示所有条件不满足时的默认值
    • val:默认返回值(当所有条件为假时)

输出范围

  • 返回第一个满足条件的 val,或 else 后的 val(若无条件满足)

示例

  1. 基础分级判断

    • $case(score >= 90, "A", score >= 80, "B", score >= 60, "C", else, "D")
      若 score=85,返回 "B";若 score=50,返回 "D"
  2. 类型匹配

    • $case(type == "admin", 1, type == "editor", 2, else, 0)
      若 type="guest",返回 0
  3. 优先级处理

    • $case(urgent, "立即处理", high_priority, "2小时内", normal, "24小时内", else, "计划内")
      若 urgent=true,跳过后续条件直接返回 "立即处理"
  4. 混合数据类型

    • $case(qty > 100, 0.9, qty > 50, 0.95, else, 1.0)
      若 qty=75,返回 0.95(折扣率)

# 函数表达式配置

# 最大值函数 $max(a, b)

  1. 定义 返回两个数 a 和 b 中的较大值。若 a > b,则返回 a;否则返回 b。数学上等价于 max(a, b)。

  2. 输入范围

  • a 和 b 可以是任意实数(正数、负数、零、整数、浮点数)
  1. 输出范围
  • 返回 a 和 b 中的较大值,类型与输入一致(如整数、浮点数)
  1. 示例

基础计算

  • $max(3, 5) = 5
  • $max(-2, -7) = -2
  • $max(0, 0) = 0

# 最小值函数 $min(a, b)

定义 返回两个数 a 和 b 中的较小值。若 a < b,则返回 a;否则返回 b。数学上等价于 $\min(a, b)。

输入范围

  • a 和 b 可以是任意实数(正数、负数、零、整数、浮点数)

输出范围

  • 返回 a 和 b 中的较小值,类型与输入一致(如整数、浮点数)

示例

  1. 基础计算
    • $min(3, 5) = 3$
    • $min(-2, -7) = -7$
    • $min(0, 0) = 0

# 幂函数 $pow(a, b)

定义 返回以 a 为底数、b 为指数的幂运算结果,即计算 a^b。数学上表示为 a^b,其中 a 称为底数,b 称为指数。

输入范围

  • 底数 a:任意实数(正数、负数、零、整数、浮点数)
  • 指数 b:任意实数(正数、负数、零、整数、浮点数)

输出范围

  • 输出为 a^b 的计算结果,类型通常为浮点数(即使输入为整数,结果也可能为浮点数)

示例

  1. 基础计算
    • $pow(2, 3) = 8
    • $pow(5, 0) = 1
    • $pow(-2, 3) = -8
    • $pow(2, -2) = 0.25

# 四舍五入函数 $round(a, b)

输入范围

  • a:任意浮点数(正数、负数、零)
  • b(可选):非负整数(指定保留的小数位数,若省略则默认为0)

输出范围

  • 返回四舍五入后的浮点数或整数,类型取决于输入。

示例

  1. 基础计算
    • $round(3.1415, 2) = 3.14(保留两位小数)
    • $round(2.71828) = 3(四舍五入到整数)
    • $round(-1.5) = -2(负数四舍五入)

# 当前时间函数 $now()

定义 返回当前系统的日期和时间,等效于编程中的 DateTime.Now(C#)或类似功能。无需参数,直接调用即可获取实时时间戳。

输入范围

  • 无参数:直接调用函数,无需输入任何值。

输出范围

  • 返回当前系统的日期和时间,格式通常为 YYYY-MM-DD HH:MM:SS(具体格式依赖语言或环境)。

示例

  1. 基础调用
    • $now() = 2025-05-06 16:18:06(假设当前时间为2025年5月6日14:30:00)

# 当前系统的日期函数$today()

函数定义

  1. $today()
    返回当前系统的日期(不包含时间部分),等效于 DateTime.Today。输出格式通常为 YYYY-MM-DD。

# 最大日期函数 $maxdate()

最大日期函数 $maxdate() 使用说明

定义 返回当前系统支持的最大日期值,等效于编程中的 DateTime.MaxValue(如C#)或类似常量。该值通常表示日期类型的上限,用于初始化或边界条件判断。

输入范围

  • 无参数:直接调用函数,无需输入任何值。

输出范围

  • 返回系统支持的最大日期值,格式通常为 YYYY-MM-DD 23:59:59(具体值依赖语言或环境,如C#中为 9999-12-31 23:59:59.9999999)。

示例

  1. 基础调用
    • $maxdate() = 9999-12-31 23:59:59(假设系统最大日期为9999年底)

# 日期加减函数 adddays(a, b)

定义 将参数 a 转换为日期时间对象后,增加 b 天,返回新的日期时间。等效于 C# 中的 Convert.ToDateTime(a).AddDays(b),支持正向(未来日期)和负向(过去日期)天数偏移。

输入范围

  • a:可转换为日期的对象(如字符串 "2025-05-06"、DateTime 对象、时间戳等)
  • b:整数(正数表示未来天数,负数表示过去天数,0 表示原日期)

输出范围

  • 返回新的 DateTime 对象,格式为 YYYY-MM-DD HH:MM:SS(具体格式依赖语言环境)

示例

  1. 基础计算
    • adddays("2025-05-06", 5) = 2025-05-11
    • adddays("2025-05-06", -3) = 2025-05-03
    • adddays("2025-02-28", 1) = 2025-03-01(处理月末溢出)

# 月份加减函数 addmonths(a, b)

定义 将参数 a 转换为日期时间对象后,增加 b 个月,返回新的日期时间。等效于 C# 中的 Convert.ToDateTime(a).AddMonths(b),支持正向(未来月份)和负向(过去月份)偏移,自动处理月末日期溢出(如1月31日加1个月变为2月28日或29日)。

输入范围

  • a:可转换为日期的对象(如字符串 "2025-05-06"、DateTime 对象、时间戳等)
  • b:整数(正数表示未来月份,负数表示过去月份,0 表示原月份)

输出范围

  • 返回新的 DateTime 对象,格式为 YYYY-MM-DD HH:MM:SS(具体格式依赖语言环境)

示例

  1. 基础计算
    • addmonths("2025-05-06", 3) = 2025-08-06
    • addmonths("2025-05-06", -2) = 2025-03-06
    • addmonths("2025-01-31", 1) = 2025-02-28(非闰年月末调整)
    • addmonths("2024-01-31", 1) = 2024-02-29(闰年月末调整)

# 年份加减函数 addyears(a, b)

定义 将参数 a 转换为日期时间对象后,增加 b 年,返回新的日期时间。等效于 C# 中的 Convert.ToDateTime(a).AddYears(b),支持正向(未来年份)和负向(过去年份)偏移,自动处理闰年及月末日期溢出(如2月29日在非闰年调整为2月28日)。

输入范围

  • a:可转换为日期的对象(如字符串 "2025-05-06"、DateTime 对象、时间戳等)
  • b:整数(正数表示未来年份,负数表示过去年份,0 表示原年份)

输出范围

  • 返回新的 DateTime 对象,格式为 YYYY-MM-DD HH:MM:SS(具体格式依赖语言环境)

示例

  1. 基础计算
    • addyears("2025-05-06", 3) = 2028-05-06
    • addyears("2025-05-06", -2) = 2023-05-06
    • addyears("2024-02-29", 1) = 2025-02-28(非闰年调整)
    • addyears("2020-02-29", 4) = 2024-02-29(闰年保持)

上次更新: 2025/5/16 15:15:07

← VForm3开发者文档 基于K8s负载均衡云服务配置→

目录
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式