← 所有文档

计算信号

计算信号面板,正在通过表达式 torque 乘以 motor_speed 定义一个名为 power 的新信号

计算信号是通过公式由一个或多个已有通道派生出的新通道,而不是数据记录仪实际记录下来的内容—— 与 ETAS MDA 等工具中的数学/虚拟通道是同一个概念。公式使用 mathjs 语法编写,编辑器中的快速插入按钮 (abssqrtminmaxroundsincoslog、位运算符,以及比较/逻辑运算符)只是 快捷方式,并非功能受限的列表——即使没有对应的按钮,任何 mathjs 函数同样可以使用。

引用信号

引用某个信号的方式,是在表达式中直接输入其精确名称作为一个裸标识符,或者从信号列表中把该 名称拖进来。公式不仅可以引用真实通道,也可以引用另一个计算信号,因此公式可以分层搭建:先做 一次单位换算,再在换算结果之上搭建一个物理量计算,再在该物理量计算之上搭建一个阈值或分类 信号——每一层都是一个独立命名、可单独复用的信号,而不是一条越写越难读的表达式。

公式实际计算的方式与时机

这一点对于习惯了电子表格思维模式的人来说往往出乎意料:计算信号只在您创建或编辑它的那一刻 被计算一次——针对当前加载的测量数据逐个采样点地计算,而不是作为一次向量化的数组运算。它是 一次快照式计算,而不是实时、响应式的重新计算。如果您回头编辑了一个更早的信号,而后面某个信号 依赖于它,那个后面的信号会保留其原有的、已经计算好的数值;它不会仅仅因为其引用的内容发生了 变化就自动重新运行。要获取新的计算结果,您需要自己重新打开并重新提交那个依赖信号。

由于已加载测量数据中的每个通道都已经共享同一个重采样后的公共时间网格(参见 快速入门),公式引擎在计算之前完全不需要对输入进行 插值或对齐——它可以直接假定所有输入都建立在同一个网格之上。

实际保存的内容

会话配置文件保存的是每个计算信号的公式本身,而不是它所产生的计算结果。重新打开该 配置文件时——无论是针对同一个测量文件还是另一个文件——都会按照最初保存时的顺序,针对当时 加载的测量数据重新计算每一条公式(因此,依赖于另一个信号的信号仍然能够正确解析)。如果某条 已保存的公式引用了新加载文件中不存在的通道,该信号会被静默跳过,而不会导致整个加载过程失败。

示例。 假设存在真实通道 torque(N·m)和 motor_speed(rad/s),一个名为 power、表达式为 torque * motor_speed、单位为 W 的计算信号,会在每个采样点计算出 机械功率。第二个名为 power_kw 的计算信号,表达式为 power / 1000, 单位为 kW,通过名称引用第一个计算信号,将其重新表示为更易读的单位——这样就 得到了两个各自命名、可独立查看的信号,而不是一条难以核查的复杂公式。

单位与命名

计算信号的单位字段是一个自由文本标签——系统不会对公式的实际计算结果与您输入的单位进行量纲 分析校验,因此把 torque * motor_speed 标注为 m/s 这样错误的单位, 系统同样会毫无异议地计算出结果。无论是真实通道还是计算信号,每个信号名称在同一测量数据中都 必须唯一;当您尝试将某个计算信号保存为一个已被真实通道或另一个计算信号占用的名称时,应用会 立即予以阻止。

错误处理

格式错误的公式——空表达式、括号不匹配、开头或结尾多出一个运算符,或者是 mathjs 本身就会 拒绝的语法——会在您提交该信号时被检测出来,而不是在输入过程中持续检查,并以行内错误提示的 形式说明具体问题所在。