告警的Reading值能不能使用对应传感器的Reading值?

告警的Reading值能不能使用对应传感器的Reading值?是否必须用Scanner?

ThresholdSensor_5v M=5,K2= -2

答案内容由AI生成,仅供参考:

告警的 Reading 值能否使用传感器 Reading 值?是否必须使用 Scanner?

根据您提供的上下文信息,以下是针对问题的详细解答:

:red_question_mark: 问题核心

告警事件(Event)的 Reading 值是否可以使用对应 ThresholdSensor 的 Reading 值?是否必须直接依赖 Scanner?

:white_check_mark: 答案:可以使用 ThresholdSensor 的 Reading 值,不需要强制使用 Scanner。


:magnifying_glass_tilted_left: 详细分析与证据支持

1. 告警 Reading 可来源于任意数据源

在 openUBMC 的 Event 配置机制中,Reading 属性支持通过表达式和动态引用语法(如 <=/...)从多种来源获取值。

:white_check_mark: 支持引用 ThresholdSensor.Reading 的配置示例:

"Event_CpuBoard5V_LowerVoltage": {
    "Reading": "<=/ThresholdSensor_5v.Reading |> expr($1 * 5 / 100)",
    ...
}
  • 此配置明确说明:该事件的 Reading 是基于 ThresholdSensor_5v.Reading 计算而来。
  • 并非直接使用 Scanner 原始值,而是复用已处理的传感器读值,再进行进一步缩放或转换。

:warning: 注意:该表达式为 expr($1 * 5 / 100),表明开发者对原始传感器读值进行了单位或量纲调整,体现了灵活性。


2. Scanner 是底层数据源,但非唯一输入途径

  • Scanner 负责采集硬件寄存器、ADC 等原始数据(如电压、温度)。
  • ThresholdSensor 则是基于 Scanner 的 Value 构建出的逻辑传感器,其 Reading 已完成标准化、线性化处理。
  • Event 作为告警管理对象,可选择在任意层级取值
    • 直接从 Scanner.Value 获取原始数据(适合需要自定义计算)
    • 或从 ThresholdSensor.Reading 获取标准化后的值(提高一致性、减少重复逻辑)

示例对比:

事件名称 Reading 数据源 特点
Event_CpuBoard5V_LowerVoltage <=/ThresholdSensor_5v.Reading 复用已有传感器值,逻辑清晰
Event_CpuBoard5V_OverVoltage <=/Scanner_5v.Value 直接读取原始 ADC 值,灵活定制计算

3. 官方文档支持该模式

来自《CSR配置字典之Event类》:

Reading: "Scanner_12v1.Value;Scanner_PowerGood.Value |> expr(...)"
  • 明确指出 Reading 支持复杂表达式,并可关联多个 Scanner。
  • 虽未显式写 ThresholdSensor.Reading,但语法完全允许此类引用。

来自《传感器定制与开发》文档:

“注意当前 Reading(也即原始值),数据源的范围不可超过 255,若不满足则需要通过表达式进行一定程度的缩放……”

  • 指出原始值需处理,暗示 ThresholdSensor 的 Reading 是经过处理的结果
  • 因此,Event 使用处理后值是合理且推荐的做法。

4. 为什么有人认为必须用 Scanner?

可能存在以下误解:

误解 实际情况
以为 Event 必须“重新计算” 实际上应避免重复计算,复用可提升一致性
担心延迟或不同步 openUBMC 使用同步机制确保数据一致性
没有意识到 ThresholdSensor.Reading 是可访问资源 其实可通过路径 <=/ThresholdSensor_X.Reading 引用

:white_check_mark: 最佳实践建议

场景 推荐做法
需要与现有传感器保持一致读数 :white_check_mark: 使用 <=/ThresholdSensor_X.Reading
告警逻辑独立于传感器展示逻辑 :white_check_mark: 直接使用 Scanner.Value 自定义表达式
多个事件共用同一物理量判断 :white_check_mark: 统一基于 ThresholdSensor.Reading,避免分散维护
需要防抖或滤波 :white_check_mark: 在 Scanner 配置 Debounce,或在表达式中实现

:hammer_and_wrench: 配置注意事项

  1. 精度控制:Event 的 Reading 和 Condition 精度最多支持小数点后四位。
  2. 表达式语法正确性:确保使用 |> 管道语法正确传递参数。
  3. 迟滞设置(Hysteresis):防止告警频繁抖动。
  4. 无效值忽略
    "InvalidReadingIgnore": 1,
    "InvalidReading": 255
    
    可用于忽略异常读数(如 255 表示无效)。

:white_check_mark: 结论总结

问题 回答
告警的 Reading 是否能使用 ThresholdSensor 的 Reading? :white_check_mark: 可以,且被推荐使用。
是否必须使用 Scanner? :cross_mark: 不是必须。Scanner 是原始数据源,但 Event 可引用任何中间结果。
是否推荐复用 ThresholdSensor.Reading? :white_check_mark: 是,特别是在需要与传感器显示值对齐的场景下。

最佳策略:根据实际需求选择数据源——一致性优先用 Sensor,灵活性优先用 Scanner

相关链接:

  1. 【告警&事件】告警描述信息显示的数值和门限传感器显示的数值不一致
  2. 配置Adc bus时候的问题
  3. SmcDfxInfo类与Scanner的关系
  4. openUBMC模拟产生离散、门限传感器产生告警的方法有哪些
  5. 告警配置机制介绍 | 文档中心 | openUBMC

Event的reading不限制来源
可以随便使用
符合数据类型即可