【问题求助】机型长时间BMC重启测试中,概率出现BCU1 3V3_RISER2传感器SEL

【问题现象】
使用社区730基线版本长时间BMC重启测试,概率出现异常SEL,内容为

6,2025-09-24 18:19:10,BCU1 3V3_RISER2,Major,Voltage,Deasserted,Lower Critical going low 
5,2025-09-24 18:19:01,BCU1 3V3_RISER2,Major,Voltage,Asserted,Lower Critical going low 

【初步分析】
查看日志,sel记录时,reading值为0

2025-09-24 18:19:01.817864 sensor NOTICE: sensor_instance.lua(567): [ThresholdSensor_3vRiser2_010101] assert an event [reading: 0, LowerCritical threshold: 98]

通过一键收集看传感器的配置,reading配置的表达式不可能为0,且已配置默认值

        "ThresholdSensor_3vRiser2": {
            "EntityId": "<=/Entity_MainBoard.Id",
            "EntityInstance": "<=/Entity_MainBoard.Instance",
            "Initialization": 127,
            "Capabilities": 232,
            "SensorType": 2,
            "ReadingType": 1,
            "SensorName": "BCU${Slot} 3V3_RISER2",
            "BaseUnit": 4,
            "NominalReading": 110,
            "MaximumReading": 255,
            "Reading": "<=/Scanner_3v2.Value;<=/Scanner_PowerGood.Value |> expr(($2 == 0) ? 110 : (($1 / 24) > 255 ? 110 : ($1 / 24))) |> expr($1 == 0 ? 110 : $1)",
            "ReadingStatus": "<=/Scanner_3v2.Status;<=/Scanner_3v2.Value;<=/Scanner_PowerGood.Value |> expr((($1 == 0) && (($2 / 24) > 255 || $2 == 0) && ($3 == 1)) ? 2 : $1)",
            "@Default": {
                "Reading": 110,
                "ReadingStatus": 2
            },
            "SensorNumber": 255,
            "AssertMask": 516,
            "DeassertMask": 516,
            "ReadingMask": 4626,
            "M": 3,
            "RBExp": 224,
            "UpperCritical": 122,
            "LowerCritical": 98,
            "PositiveHysteresis": 4,
            "NegativeHysteresis": 4
        },

求助还有什么定位思路,还可能在什么场景下导致该传感器出现0的读值

能看到产生告警时这几个scanner的值吗,大概率是和表达式的配置有关导致计算优先级不一样

这个看不到呢,因为是BMC刚启动的时候才有的,没有收到日志

昊阳兄,如果是你的猜想,那应该如何去修正表达式呢

我们重启测试也出现了类似问题,显示:

BCU1 3V3_RISER2 | 5Ch | ns | 7.100 | No Reading

优先计算的表达式模块用括号包一下,看下计算结果是否会变化,

举例一个场景:$1 为 12,$2 为 0
第一层 expr 运算后的结果为 0.5
第二层 expr 运算后的结果为 0.5
最终将 0.5 的值同步给传感器的 Reading 属性(U8类型),Reading 值自然是 0

修复方案:将运算表达式中的 / 修改为整除 //
同样上述场景:
第一层 expr 运算后的结果为 0
第二层 expr 运算后的结果为 110
最终传感器的 Reading 属性值为 110,不会误告警

expr(($2 == 0) ? 110 : (($1 / 24) > 255 ? 110 : ($1 / 24))) |> expr($1 == 0 ? 110 : $1)"

举例一个场景:$1 为 12,$2 为 0
第一层 expr 运算后的结果为 0.5 

第一层 expr 运算后的结果为 0.5  的这个结果是怎么来的呢? 
$2 =0 ,满足 ($2 == 0) ? 110  这个条件,值应该是 110吧

确实是这个原因,这个可以解释最终SEL呈现出来的读值是0,但是依然解释不了为什么运行过程中,SMC寄存器的读值会出现0-24之间的内容。

日志1:

日志2:

日志3:
第一次产生:可以看见直接关联的Scanner读值为1。
2026-01-26 07:54:24.326975 sensor NOTICE: sensor_instance.lua(616): BCU1 3V3_RISER2|{“source”:{“properties”:[{“Property”:“Value”,“Service”:“bmc.kepler.hwproxy”,“Interface”:“bmc.kepler.Scanner”,“Path”:“/bmc/kepler/Scanner/Scanner_3v2_010101”},{“Property”:“Value”,“Service”:“bmc.kepler.hwproxy”,“Interface”:“bmc.kepler.Scanner”,“Path”:“/bmc/kepler/Scanner/Scanner_PowerGood_010101”}],“Default”:110,“expressions”:[“expr(($2 == 0) ? 110 : ((($1/20) * 20 * (3.3 * 1.5 / 4096) * (100 / 3)) > 255 ? 110 : (($1/20)* 20 * (3.3 * 1.5 / 4096) * (100 / 3))))”,“expr($1 == 0 ? 110 : $1)”]},“type”:“synchronization”,“value”:[1,1]}
第一次消除,读值为2700:
2026-01-26 07:57:42.165548 sensor NOTICE: sensor_instance.lua(616): BCU1 3V3_RISER2|{“type”:“synchronization”,“source”:{“properties”:[{“Property”:“Value”,“Interface”:“bmc.kepler.Scanner”,“Service”:“bmc.kepler.hwproxy”,“Path”:“/bmc/kepler/Scanner/Scanner_3v2_010101”},{“Property”:“Value”,“Interface”:“bmc.kepler.Scanner”,“Service”:“bmc.kepler.hwproxy”,“Path”:“/bmc/kepler/Scanner/Scanner_PowerGood_010101”}],“Default”:110,“expressions”:[“expr(($2 == 0) ? 110 : ((($1/20) * 20 * (3.3 * 1.5 / 4096) * (100 / 3)) > 255 ? 110 : (($1/20)* 20 * (3.3 * 1.5 / 4096) * (100 / 3))))”,“expr($1 == 0 ? 110 : $1)”]},“value”:[2700,1]}
第二次产生:读值又变为1
2026-01-26 07:58:28.937361 sensor NOTICE: sel_management.lua(693): add sel[{“SensorId”:“ThresholdSensor_3vRiser2_010101”,“SelEventType”:1,“SensorNumber”:62,“SelMsgVersion”:4,“GenerateId”:32,“Timestamp”:1769414308,“SelType”:2,“RecordId”:70,“SensorType”:2,“SelData1”:82,“RecordSeq”:223,“SelData3”:98,“SelData2”:0,“SubjectName”:“MainBoard”,“SensorName”:“BCU1 3V3_RISER2”}] successfully, record id is 70
第二次消除:读值为0,但是PowerGood寄存器依然为1
2026-01-26 07:58:39.688545 sensor NOTICE: sensor_instance.lua(616): BCU1 3V3_RISER2|{“type”:“synchronization”,“source”:{“properties”:[{“Property”:“Value”,“Interface”:“bmc.kepler.Scanner”,“Service”:“bmc.kepler.hwproxy”,“Path”:“/bmc/kepler/Scanner/Scanner_3v2_010101”},{“Property”:“Value”,“Interface”:“bmc.kepler.Scanner”,“Service”:“bmc.kepler.hwproxy”,“Path”:“/bmc/kepler/Scanner/Scanner_PowerGood_010101”}],“Default”:110,“expressions”:[“expr(($2 == 0) ? 110 : ((($1/20) * 20 * (3.3 * 1.5 / 4096) * (100 / 3)) > 255 ? 110 : (($1/20)* 20 * (3.3 * 1.5 / 4096) * (100 / 3))))”,“expr($1 == 0 ? 110 : $1)”]},“value”:[0,1]}

读值为0是电压为0,按理说可以认为是下电状态。但是此时实际是上电状态,最接近的只有BMC重启的动作,按理说不应该对电压读值产生影响。


时间点附近的动作为升级PSR与CPLD。