如果状态既不处于预通过状态也不处于预失败状态,如何定义“Dem_EventStatusType”?

问题描述 投票:0回答:2

我正在阅读并尝试了解 DEM 的 Autosar 规范,并偶然发现了 Dem_EventStstusType 的定义方式。只说了案例,

  • DEM_EVENT_STATUS_PASSED
  • DEM_EVENT_STATUS_FAILED
  • DEM_EVENT_STATUS_PREPASSED
  • DEM_EVENT_STATUS_PREFAILED
  • DEM_EVENT_STATUS_FDC_THRESHOLD_REACHED

但不存在这样一种状态可以代表既不预先通过也不预先失败的“灰色地带”。对于我的情况,定义灰色区域是为了确保明确通过或明确失败状态,并通过在失败阈值中使用单个边界来避免模糊状态。 所以,问题是,例如,传感器电压曾经处于失败区域(=预失败),然后变为灰色区域但不在通过区域,我如何表示这种状态?是否仍应预先失败,或预先通过?或者我应该使用保留位(0x05-0xFF)定义一个新的吗?甚至可以这样做吗?

我尝试通过谷歌搜索和GPT找到解决方案,但没有成功。

diagnostics autosar
2个回答
0
投票

您应该能够在显示器中处理此问题:


// As defined in EFX libary
boolean Efx_HystCenterHalfDelta_u16_u8(uint16 X, uint16 center, uint16 halfDelta, boolean* state) {
    boolean ret = state;
    if (X > (center + halfDelta)) {
        ret = TRUE;
    } else if (X < (center - halfDelta)) {
        ret = FALSE;
    } else {
        ret = state;
    }
    *state = ret;
    return ret;
}

static boolean hyst_state = FALSE;
const uint16 center = 8000; // mV
const uint16 half   = 500; // mV
    
void mon_func(void) {
    uint16 v = IoHwAb_GetVoltageX();
    boolean state = Efx_HystCenterHalfDelta_u16_u8(v, center, half, &hyst_state);
    if (state == FALSE) {
        Dem_SetEventStatus(DemEvt_VoltageX_LL, DEM_EVENT_STATUS_FAILED);
    } else {
        Dem_SetEventStatus(DemEvt_VoltageX_LL, DEM_EVENT_STATUS_PASSED);
    }
}

因此,如果它确实在您的灰色区域

center-halfDelta < X < center-halfDelta
更改的状态之外,它只会报告通过/失败。


0
投票

非常感谢您的宝贵反馈。此外,我很幸运地找到了 stackoverflow.com/questions/70556331/... 这也是你很久以前回答的。它已经解释了“0意味着,监视器还没有报告任何内容(既没有通过也没有失败)。”,所以我可以通过抑制(=不设置事件状态)监视器报告(既不是PrePassed也不是PreFailed)来保持计数器它表明信号处于灰色区域。

© www.soinside.com 2019 - 2024. All rights reserved.