AUTOSAR通信篇 - CAN网络通信(四:CanSM)

news2024/11/28 8:35:02

文章目录

    • 简述
    • CAN网络状态机
      • 触发器
        • PowerOn
        • CanSM_Init
        • CanSM_DeInit
        • T_START_WAKEUP_SOURCE
        • T_STOP_WAKEUP_SOURCE
        • T_FULL_COM_MODE_REQUEST
        • T_SILENT_COM_MODE_REQUEST
        • T_NO_COM_MODE_REQUEST
        • T_BUS_OFF
      • 防护条件
        • G_FULL_COM_MODE_REQUESTED
        • G_SILENT_COM_MODE_REQUESTED
      • 作用
        • E_PRE_NOCOM
        • E_NOCOM
        • E_FULL_COM
        • E_FULL_TO_SILENT_COM
        • E_BR_END_FULL_COM
        • E_BR_END_SILENT_COM
        • E_SILENT_TO_FULL_COM
      • 子状态机 CANSM_BSM_WUVALIDATION
        • 在状态S_TRCV_NORMAL下的操作
        • 防护条件 G_TRCV_NORMAL_E_OK
        • 触发器 T_TRCV_NORMAL_INDICATED
        • 触发器 T_TRCV_NORMAL_TIMEOUT
        • 在 S_CC_STOPPED状态下的操作
        • 防护条件 G_CC_STOPPED_OK
        • 触发器 T_CC_STOPPED_INDICATED
        • 触发器 T_CC_STOPPED_TIMEOUT
        • 在 S_CC_STARTED状态下的操作
        • 防护条件 G_CC_STARTED_E_OK
        • 触发器 T_CC_STARTED_INDICATED
        • 触发器 T_CC_STARTED_TIMEOUT
      • 子状态机 CANSM_BSM_S_PRE_NOCOM
        • 防护条件 CANSM_BSM_G_PN_NOT_SUPPORTED
        • 防护条件 CANSM_BSM_G_PN_SUPPORTED
        • 子状态机 CANSM_BSM_DeInitPnSupported
          • 在状态 S_PN_CLEAR_WUF的操作
          • 防护条件 G_PN_CLEAR_WUF_E_OK
          • 触发器 T_CLEAR_WUF_INDICATED
          • 触发器 T_CLEAR_WUF_TIMEOUT
          • 在状态 S_CC_STOPPED中的操作
          • 防护条件 G_CC_STOPPED_E_OK
          • 触发器 T_CC_STOPPED_INDICATED
          • 触发器 T_CC_STOPPED_TIMEOUT
          • 在状态S_TRCV_NORMAL下的操作
          • 防护条件 G_TRCV_NORMAL_E_OK
          • 触发器 T_TRCV_NORMAL_INDICATED
          • 触发器 T_TRCV_NORMAL_TIMEOUT
          • 在状态 S_TRCV_STANDBY的操作
          • 防护条件 G_TRCV_STANDBY_E_OK
          • 触发器 T_TRCV_STANDBY_INDICATED
          • 触发条件 T_TRCV_STANDBY_TIMEOUT
          • 在状态 G_CC_SLEEP_E_OK 的操作
          • 防护条件 G_CC_SLEEP_E_OK
          • 触发器 T_CC_SLEEP_INDICATED
          • 触发器 CANSM_BSM_T_CC_SLEEP_TIMEOUT
          • 在状态 S_CHECK_WFLAG_IN_CC_SLEEP的操作
          • 防护条件 G_CHECK_WFLAG_E_OK
          • 触发器 T_CHECK_WFLAG_INDICATED
          • 触发器 T_CHECK_WFLAG_TIMEOUT
          • 在状态 S_CHECK_WFLAG_IN_NOT_CC_SLEEP 的操作
        • 子状态机 CANSM_BSM_DeInitPnNotSupported
          • 在状态 S_CC_STOPPED 的操作
          • 防护条件 CANSM_BSM_G_CC_STOPPED_OK
          • 触发器 T_CC_STOPPED_INDICATED
          • 触发器 T_CC_STOPPED_TIMEOUT
          • 在状态 S_CC_SLEEP 的操作
          • 防护条件 G_CC_SLEEP_E_OK
          • 触发器 T_CC_SLEEP_INDICATED
          • 触发器 T_CC_SLEEP_TIMEOUT
          • 在状态 S_TRCV_NORMAL 的操作
          • 防护条件 G_TRCV_NORMAL_E_OK
          • 触发器 T_TRCV_NORMAL_INDICATED
          • 触发器 T_TRCV_NORMAL_TIMEOUT
          • 在状态 S_TRCV_STANDBY 的操作
          • 防护条件 G_TRCV_STANDBY_E_OK
          • 触发条件 T_TRCV_STANDBY_INDICATED
          • 触发条件 CANSM_BSM_T_TRCV_STANDBY_TIMEOUT
      • 子状态机 CANSM_BSM_S_SILENTCOM_BOR
        • 效果:BUS_OFF
        • 状态操作:S_RESTART_CC
        • G_RESTART_CC_E_OK
        • 触发器: T_RESTART_CC_INDICATED
        • T_RESTART_CC_TIMEOUT
        • 效果:E_TX_OFF
      • 子状态机 CANSM_BSM_S_PRE_FULLCOM
        • 在状态 S_TRCV_NORMAL 的操作
        • 防护条件 G_TRCV_NORMAL_E_OK
        • 触发器T_TRCV_NORMAL_INDICATED
        • 触发器 T_TRCV_NORMAL_TIMEOUT
        • 在状态 S_CC_STOPPED 的操作
        • 防护条件 G_CC_STOPPED_OK
        • 触发器 T_CC_STOPPED_INDICATED
        • 触发器 T_CC_STOPPED_TIMEOUT
        • 在状态 S_CC_STARTED 的操作
        • 防护条件 G_CC_STARTED_OK
        • 触发器 T_CC_STARTED_INDICATED
        • 触发器 T_CC_STARTED_TIMEOUT
      • 子状态机 CANSM_BSM_S_FULLCOM
        • 防护条件: G_BUS_OFF_PASSIVE
        • 效果:E_BUS_OFF_PASSIVE
        • 触发器:T_CHANGE_BR_REQUEST
        • 效果:E_CHANGE_BR_BSWM_MODE
        • 触发器:T_BUS_OFF
        • 效果:E_BUS_OFF
        • 在状态 S_RESTART_CC 的操作
        • 防护条件 G_RESTART_CC_OK
        • 触发器 T_RESTART_CC_INDICATED
        • 触发器 T_RESTART_CC_TIMEOUT
        • 效果 E_TX_OFF
        • 防护条件 G_TX_ON
        • 效果 E_TX_ON
        • 触发器 T_TX_TIMEOUT_EXCEPTION
        • note
        • 子状态机 CANSM_BSM_S_TX_TIMEOUT_EXCEPTION
          • 触发器 T_CC_STOPPED_TIMEOUT
          • 防护条件 G_CC_STOPPED_E_OK
          • 状态操作 DO_SET_CC_MODE_STOPPED()
          • 触发器 T_CC_STOPPED_INDICATED
          • 触发器 T_CC_STARTED_INDICATED
          • 防护条件 G_CC_STARTED_E_OK
          • 状态操作 DO_SET_CC_MODE_STARTED
          • ExitPoint:TxTimeout
      • 子状态机 CANSM_BSM_S_CHANGE_BAUDRATE
        • 在进入时需要执行的状态操作:DO_SET_BAUDRATE_DIRECT
        • 防护条件:G_SET_BAUDRATE_DIRECT_OK
        • 防护条件:G_SET_BAUDRATE_DIRECT_NOT_OK
        • 状态 S_CC_STOPPED 中的操作
        • 防护条件:G_CC_STOPPED_OK
        • 触发器:T_CC_STOPPED_INDICATED
        • 触发器:T_CC_STOPPED_TIMEOUT
        • 效果:E_CHANGE_BAUDRATE
        • 状态 S_CC_STARTED 中的操作
        • 防护条件:G_CC_STARTED_OK
        • 触发器:T_CC_STARTED_INDICATED
        • 触发器:T_CC_STARTED_TIMEOUT
        • 防护条件:G_NO_COM_MODE_REQUESTED
        • 防护条件:G_NO_COM_MODE_NOT_REQUESTED
    • 总结

本章我们介绍CAN状态管理器(CAN State Manager,CanSM)。CanSM位于BSW的通信服务层,它与通信硬件抽象层和系统服务层交互。下图所示为CanSM在AUTOSAR BSW中的位置。
CanSM在分层软件架构中的位置
下图简要描述了CanSM模块需要其他模块间的交互。
CanSM模块的依赖模块
关于模块交互、依赖,在此前的模块介绍中都没做介绍,但CanSM模块与依赖模块的交互我们需要了解一下,因为CanSM作为CAN网络的状态管理器,与其他模块的交互对于我们理解掌握整个CAN通信系统的运行有重要的作用。这里捡出几个重要相关的交互模块:

  • EcuM(ECU State Manager):EcuM模块初始化CanSM,与CanSM交互进行CAN唤醒的验证;
  • SchM(BSW Scheduler):BSW调度程序模块调用CanSM模块的main函数,这是周期处理CanSM模块任务所必需的;
  • ComM(Communication Manager): ComM模块使用CanSM模块的API请求CAN网络的通信模式,不同CAN网络用唯一的network handle 识别,CanSM通知ComM当前CAN网络的通信模式;
  • CanIf(CAN Interface):CanSM使用CanIf的API控制分配到CAN网络的CAN控制器和CAN收发器的运行模式。CanIf通知CanSM外设事件。
  • BswM(Basic Software Mode Manager):CanSM通知BswM模块总线模式的改变。
  • CanNM(CAN Network Manager):CanSM模块需要向CanNm模块通知部分网络可用性,并应在部分网络的情况下处理通知的CanNm超时异常。

简述

在一个ECU上可能存在多个类型的通信网络。每个通信网络都以唯一的网络handle代表,当ComM请求网络通信模式时,根据配置它知道那个handle分配给那种(个)网络,当网络为CAN网络是,ComM通过CanSM请求CAN网络模式。
CanSM负责CAN网络的控制流抽象,它根据ComM模块的请求更改CAN网络的通信模式。因此CanSM模块使用CanIf的API,CanIf负责所配置的CAN控制器和收发器的控制流抽象(CanIf模块的数据流抽象与CanSM模块无关)。CAN控制器和CAN收发器的模式改变都会被CanIf通知到CanSM,依据该通知和CAN网络状态机的状态,CanSM模块通知ComM和BswM。

CanSM会内部存储关于Can网络状态、通信模式、CAN控制器状态。

CAN网络状态机

下图描述的是CanSM状态机(CANSM_BSM)行为。
在这里插入图片描述

CanSM状态机的流转是被上图一系列条件所触发跳转,按类型分为:触发器、防护条件、作用。

触发器

PowerOn

上电后,CanSM状态机处于CANSM_BSM_NOT_INITIALIZED状态。

CanSM_Init

如果CanSM模块被请求执行CanSM_Init,该行为会触发CanSM状态机为所有配置的CAN网络执行CanSM_Init,状态机处于CANSM_BSM_S_PRE_NOCOM状态。

CanSM_DeInit

如果CanSM模块被请求执行CanSM_DeInit,该行为会触发CanSM状态机为所有配置的CAN网络执行CanSM_DeInit,状态机处于CANSM_BSM_NOT_INITIALIZED状态,调用CanSM_DeInit的函数保证CanSM处于CANSM_BSM_NOCOM状态。

T_START_WAKEUP_SOURCE

如果API请求 CanSM_StartWakeUpSource返回E_OK,将会以参数T_START_WAKEUP_SOURCE触发CanSM状态机,跳转进入CANSM_BSM_WUVALDATION状态。

T_STOP_WAKEUP_SOURCE

如果API请求 CanSM_StopWakeUpSource返回E_OK,将会以参数T_STOP_WAKEUP_SOURCE触发CanSM状态机,跳转进入CANSM_BSM_S_PRE_NOCOM状态。

T_FULL_COM_MODE_REQUEST

如果API请求CanSM_RequestComMode,且使用参数ComM_Mode = COMM_FULL_COMMUNICATION ,那么将会以参数T_FULL_COM_MODE_REQUEST触发CanSM状态机跳转,进入CANSM_BSM_S_PRE_FULLCOM。

T_SILENT_COM_MODE_REQUEST

如果API请求CanSM_RequestComMode,且使用参数ComM_Mode = COMM_SILENT_COMMUNICATION ,那么将会以参数T_SILENT_COM_MODE_REQUEST触发CanSM状态机从CANSM_BSM_S_FULLCOM跳转,进入CANSM_BSM_S_SILENTCOM。

通常此过程对应的应用场景是CanNM网络管理中,网络模式从network模式到Prepare bus-sleep模式的切换

T_NO_COM_MODE_REQUEST

如果API请求CanSM_RequestComMode,且使用参数ComM_Mode = COMM_NO_COMMUNICATION ,那么将会以参数T_NO_COM_MODE_REQUEST触发CanSM状态机从跳转,进入CANSM_BSM_S_PRE_NOCOM。

根据ComM的配置,ComM将决定是先请求COMM_SILENT_COMMUNICATION,再请求COMM_NO_COMMUNICATION。或者直接请求COMM_NO_COMMUNICATION(omMNmVariant=LIGHT)

T_BUS_OFF

调用回调函数CanSM_ControllerBusOff将会以参数T_BUS_OFF触发CanSM状态机。

防护条件

G_FULL_COM_MODE_REQUESTED

当上一个通过CanSM_RequestComMode请求接收到的通信模式请求为COMM_FULL_COMMUNICATION时,将评估CanSM_BSM状态机的防护条件G_FULL_COM_MODE_REQUESTED。

G_SILENT_COM_MODE_REQUESTED

当上一个通过CanSM_RequestComMode请求接收到的通信模式请求为COMM_SILENT_COMMUNICATION时,将评估CanSM_BSM状态机的防护条件G_SILENT_COM_MODE_REQUESTED。

作用

E_PRE_NOCOM

CanSM_BSM状态机的作用E_PRE_NOCOM应为相应的CAN网络调用API BswM_CanSM_CurrentState,参数Network:= CanSMComMNetworkHandleRef和current state:= CanSM _BSWM _NO _COMMUNICATION。

E_NOCOM

CanSM_BSM状态机的作用E_NOCOM将对应CAN网络的内部存储网络模式更改为COMM_NO_COMMUNICATION。
如果网络的通信模式请求已经存在,且存储的通信模式请求为COMM_NO_COMMUNICATION,则CanSM_BSM状态机的E_NOCOM应调用API ComM_BusSM_ModeIndication,参数为Channel:= CanSMComMNetworkHandleRef和ComMode := COMM_NO_COMMUNICATION。

E_FULL_COM

如果ECU节点不是被动节点,CanSM_BSM状态机的作用E_FULL_COM应首先为CAN网络的每个已配置CAN控制器调用API CanIf_SetPduMode,使用参数ControllerId := CanSMControllerId 和 PduModeRequest := CANIF_ONLINE。
如果ECU节点为被动节点,CanSM_BSM状态机的作用E_FULL_COM应首先为CAN网络的每个已配置CAN控制器调用API CanIf_SetPduMode,使用参数ControllerId := CanSMControllerId 和 PduModeRequest := CANIF_TX_OFFLINE_ACTIVE。
然后,在CanSM状态机的E_FULL_COM上下文中CanSM为相应CAN网络调用API ComM_BusSM_ModeIndication,使用参数 Channel := CanSMComMNetworkHandleRef 和 ComMode := COMM_FULL_COMMUNICATION。
再然后,在CanSM状态机的E_FULL_COM上下文中CanSM为相应CAN网络调用API BswM_CanSM_CurrentState,使用参数Network := CanSMComMNetworkHandleRef 和 CurrentState := CANSM_BSWM_FULL_COMMUNICATION。

E_FULL_TO_SILENT_COM

CanSM_BSM状态机的作用E_FULL_TO_SILENT_COM应首先为CAN网络的每个已配置CAN控制器调用API BswM_CanSM_CurrentState,使用参数Network := CanSMComMNetworkHandleRef 和 CurrentState := CANSM_BSWM_SILENT_COMMUNICATION。
CanSM_BSM状态机的的作用E_FULL_TO_SILENT_COM应然后调用API CanIf_SetPduMode,参数为controller id:= CanSMControllerId和PduModeRequest:= CanIf _TX _OFFLINE。
CanSM_BSM状态机的作用E_FULL_TO_SILENT_COM应再然后调用ComM_BusSM_ModeIndication,参数为Channel := CanSMComMNetworkHandleRef 和ComMode := COMM_SILENT_COMMUNICATION。

E_BR_END_FULL_COM

CanSM_BSM状态机的效果E_BR_END_FULL_COM的作用与E_FULL_COM相同。

E_BR_END_SILENT_COM

CanSM_BSM状态机的效果E_BR_END_SILENT_COM的作用与E_FULL_TO_SILENT_COM相同

E_SILENT_TO_FULL_COM

CanSM_BSM状态机的效果E_SILENT_TO_FULL_COM的作用与E_FULL_COM相同。

子状态机 CANSM_BSM_WUVALIDATION

子状态机CANSM_BSM_WUVALIDATION

在状态S_TRCV_NORMAL下的操作

在一个配置CAN收发器的CAN网络,则只要子状态机CANSM_BSM_WUVALIDATION处于状态S_TRCV_NORMAL状态,CanSM模块需要执行DO_SET_TRCV_MODE_NORMAL的操作,并因此为CAN网络的已配置CAN收发器重复API请求CanIf_SetTrcvMode,使用的参数TransceiverMode 为 CANTRCV_TRCVMODE_NORMAL。

防护条件 G_TRCV_NORMAL_E_OK

如果子状态机CANSM_BSM_S_PRE_FULLCOM处于S_TRCV_NORMAL状态,使用TransceiverMode = CANTRCV_TRCVMODE_NORMAL调用API CanIf_SetTrcvMode 返回E_OK,子状态机CANSM_BSM_WUVALIDATION的防护条件G_TRCV_NORMAL_E_OK也应通过。

触发器 T_TRCV_NORMAL_INDICATED

如果CanSM模块在相应的请求后已获得CAN网络已配置CAN收发器的CANTRCV_TRCVMODE_NORMAL模式指示,这将以T_TRCV_NORMAL_INDICATED触发CAN网络的子状态机CANSM_BSM_WUVALIDATION。

触发器 T_TRCV_NORMAL_TIMEOUT

在收发器的正常指示在CANSM_MODEREQ_REPEAT_TIME超时后,该条件将以T_TRCV_NORMAL_TIMEOUT触发相应的网络的子状态机CANSM_BSM_WUVALIDATION。

在 S_CC_STOPPED状态下的操作

当子状态机CANSM_BSM_WUVALIDATION处于S_CC_STOPPED状态,CanSM应该执行操作DO_SET_CC_MODE_STOPPED,如果当前CAN网络配置的CNA控制器状态不是CAN_CS_STOPPED,为CAN网络配置的CAN控制器使用ControllerMode = CAN_CS_STOPPED 调用API CanIf_SetControllerMode。

防护条件 G_CC_STOPPED_OK

当在S_CC_STOPPED状态下的操作的所有API返回E_OK,子状态机CANSM_BSM_WUVALIDATION的防护条件G_CC_STOPPED_OK应通过。

触发器 T_CC_STOPPED_INDICATED

如果在停止CAN网络的CAN控制器的相应请求之后,CanSM模块已经获得CAN网络的已配置CAN控制器的所有模式指示,这将以T_CC_STOPPED_INDICATED触发CAN网络的子状态机CANSM_BSM_WUVALIDATION。

触发器 T_CC_STOPPED_TIMEOUT

所有控制器的停止模式指示,在CANSM_MODEREQ_REPEAT_TIME超时后,将使用T_CC_STOPPED_TIMEOUT触发相应的网络子状态机CANSM_BSM_WUVALIDATION。

在 S_CC_STARTED状态下的操作

只要子状态机CANSM_BSM_WUVALIDATION处于状态S_CC_STARTED,CANSM模块就应执行DO_SET_CC_MODE_STARTED操作,因此,如果CAN控制器模式不是CAN_CS_STARTED,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,使用参数ControllerMode = CAN_CS_STARTED。

防护条件 G_CC_STARTED_E_OK

当在S_CC_STARTED状态下的操作的所有API返回E_OK,子状态机CANSM_BSM_WUVALIDATION的防护条件G_CC_STARTED_E_OK应通过。

触发器 T_CC_STARTED_INDICATED

如果在启动CAN网络的CAN控制器的相应请求之后,CanSM模块已获得CAN网络的已配置CAN控制器的所有模式指示,将以T_CC_STARTED_INDICATED触发CAN网络的子状态机CANSM_BSM_WUVALIDATION。

触发器 T_CC_STARTED_TIMEOUT

所有控制器的启动模式指示,在CANSM_MODEREQ_REPEAT_TIME超时后,将以T_CC_STARTED_TIMEOUT触发相应网络的子状态机CANSM_BSM_WUVALIDATION。

子状态机 CANSM_BSM_S_PRE_NOCOM

CanSM的子状态机CANSM_BSM_S_PRE_NOCOM

防护条件 CANSM_BSM_G_PN_NOT_SUPPORTED

子状态机CANSM_BSM_S_PRE_NO_COM的保护条件CANSM_BSM_G_PN_NOT_SUPPORTED应评估配置参数CanTrcvPnEnabled是否为假(可通过参考CanSMTransceiverId获得)或是否根本未配置CanSMTransceiverId。

防护条件 CANSM_BSM_G_PN_SUPPORTED

子状态机CANSM_BSM_S_PRE_NO_COM的保护条件CANSM_BSM_G_PN_SUPPORTED应评估是否配置了CanSMTransceiverId,以及配置参数CanTrcvPnEnabled是否为真(可通过参考CanSMTransceiverId获得)。

子状态机 CANSM_BSM_DeInitPnSupported

CANSM_BSM_S_PRE_NOCOM的子状态机CANSM_BSM_DeinitPnSupported

在状态 S_PN_CLEAR_WUF的操作

只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_PN_CLEAR_WUF,CANSM模块就执行DO_CLEAR_TRCV_WUF操作,重复API请求CanIf_ClrTrcvWufFlag,并使用配置的收发器作为API函数参数。

防护条件 G_PN_CLEAR_WUF_E_OK

如果状态S_PN_CLEAR_WUF下调用的API返回都为E_OK,应通过子状态机CANSM_BSM_DeinitPnSupported的保护条件G_PN_CLEAR_WUF_E_OK。

触发器 T_CLEAR_WUF_INDICATED

如果函数CanSM_ClearTrcvWufFlagIndication的参数Transceiver与CAN网络的已配置CAN收发器相匹配,则回调函数CanSM _ ClearTrcvWufFlagIndication应以T_CLEAR_WUF_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnSupported。

触发器 T_CLEAR_WUF_TIMEOUT

在回调函数CANSM_ClearTrcvWufFlagIndication超时CANSM_MODEREQ_REPEAT_TIME后,将以T_CLEAR_WUF_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。

在状态 S_CC_STOPPED中的操作

只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_CC_STOPPED,CANSM模块就应执行DO_SET_CC_MODE_STOPPED操作,因此,如果当前CAN控制器模式不为CAN_CS_STOPPED,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中请求的ControllerMode为CAN_CS_STOPPED。

防护条件 G_CC_STOPPED_E_OK

如果状态S_CC_STOPPED中的所有API调用都返回了E_OK,则应通过子状态机CANSM_BSM_DeinitPnSupported的保护条件G_CC_STOPPED_E_OK。

触发器 T_CC_STOPPED_INDICATED

如果在分别请求停止CAN网络的CAN控制器之后,CanSM模块已经获得CAN网络的已配置CAN控制器的所有模式指示,将以T_CC_STOPPED_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnSupported。

触发器 T_CC_STOPPED_TIMEOUT

控制器停止模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,将以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。

在状态S_TRCV_NORMAL下的操作

只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_TRCV_NORMAL,CANSM模块就应执行DO_SET_TRCV_MODE_NORMAL操作,为CAN网络的已配置CAN收发器重复API请求CanIf_SetTrcvMode,其中使用参数TransceiverMode等于CANTRCV_TRCVMODE_NORMAL。

防护条件 G_TRCV_NORMAL_E_OK

如果在状态S_TRCV_NORMAL下的API调用返回了E_OK,则应通过子状态机CANSM_BSM_DeinitPnSupported的保护条件G_TRCV_NORMAL_E_OK。

触发器 T_TRCV_NORMAL_INDICATED

如果CanSM模块在相应的请求后已获得CAN网络中已配置的CAN收发器的CANTRCV_TRCVMODE_NORMAL模式指示,这将以T_TRCV_NORMAL_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnSupported。

触发器 T_TRCV_NORMAL_TIMEOUT

收发器正常指示超时CANSM_MODEREQ_REPEAT_TIME后,该条件将以T_TRCV_NORMAL_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。

在状态 S_TRCV_STANDBY的操作

只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_TRCV_STANDBY,CANSM模块就应执行动作DO_SET_TRCV_STANDBY,并为CAN网络的已配置CAN收发器重复API请求CanIf_SetTrcvMode,其中TransceiverMode等于CANTRCV_TRCVMODE_STANDBY。

防护条件 G_TRCV_STANDBY_E_OK

如果在状态S_TRCV_STANDBY下的API调用返回了E_OK,则应通过子状态机CANSM_BSM_DeinitPnSupported的保护条件G_TRCV_STANDBY_E_OK。

触发器 T_TRCV_STANDBY_INDICATED

如果CanSM模块在相应请求后已获得CAN网络中已配置的CAN收发器的CANTRCV_TRCVMODE_STANDBY模式指示,这将以T_TRCV_STANDBY_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnSupported。

触发条件 T_TRCV_STANDBY_TIMEOUT

收发器待机指示超时CANSM_MODEREQ_REPEAT_TIME后,该条件将T_TRCV_STANDBY_TIMEOUT以触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。

在状态 G_CC_SLEEP_E_OK 的操作

只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_CC_SLEEP,CANSM模块就应执行动作DO_SET_CC_MODE_SLEEP,如果当前CAN控制器模式不同,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_SLEEP。

防护条件 G_CC_SLEEP_E_OK

如果在状态G_CC_SLEEP_E_OK下的所有API调用都返回了E_OK,则应通过子状态机CANSM_BSM_DeinitPnSupported的保护条件G_CC_SLEEP_E_OK。

触发器 T_CC_SLEEP_INDICATED

如果在将CAN网络的CAN控制器设置为睡眠模式的相应请求之后,CanSM模块已获得CAN网络的所有已配置CAN控制器的模式指示,这将以T_CC_SLEEP_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnSupported。

触发器 CANSM_BSM_T_CC_SLEEP_TIMEOUT

对于控制器睡眠模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,该条件将以CANSM_BSM_T_CC_SLEEP_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。

在状态 S_CHECK_WFLAG_IN_CC_SLEEP的操作

只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_CHECK_WFLAG_IN_CC_SLEEP,CANSM模块就会执行动作DO_CHECK_WFLAG,重复API请求CanIf _CheckTrcvWakeFlag,并使用网络已配置CAN收发器作为收发器参数。

防护条件 G_CHECK_WFLAG_E_OK

如果在状态S_CHECK_WFLAG_IN_CC_SLEEP或S_CHECK_WFLAG_IN_NOT_CC_SLEEP下的API调用返回了E_OK,则应通过子状态机CANSM_BSM_DeinitPnSupported的保护条件G_CHECK_WFLAG_E_OK。

触发器 T_CHECK_WFLAG_INDICATED

如果CanSM_CheckTransceiverWakeFlagIndication的函数参数Transceiver与CAN网络的已配置CAN收发器相匹配,则回调函数CanSM_CheckTransceiverWakeFlagIndication应以T_CHECK_WFLAG_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnSupported。

触发器 T_CHECK_WFLAG_TIMEOUT

在回调函数CanSM_CheckTransceiverWakeFlagIndication超时CANSM_MODEREQ_REPEAT_TIME后,该条件将以T_CHECK_WFLAG_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。

在状态 S_CHECK_WFLAG_IN_NOT_CC_SLEEP 的操作

只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_CHECK_WFLAG_IN_NOT_CC_SLEEP,CANSM模块就会执行动作DO_CHECK_WFLAG,重复API请求CanIf_CheckTrcvWakeFlag,并使用相关网络的已配置CAN收发器作为收发器参数。

子状态机 CANSM_BSM_DeInitPnNotSupported

CANSM_BSM_S_PRE_NOCOM的子状态机CANSM_BSM_DeinitPnNotSupported

在状态 S_CC_STOPPED 的操作

只要子状态机CANSM_BSM_DeinitPnNotSupported处于状态S_CC_STOPPED,CANSM模块就应执行动作DO_SET_CC_MODE_STOPPED,如果当前CAN控制器模式不同,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STOPPED。

防护条件 CANSM_BSM_G_CC_STOPPED_OK

如果在状态 S_CC_STOPPED的所有API调用都返回了E_OK,则应通过子状态机CANSM_BSM_DeinitPnNotSupported的保护条件CANSM_BSM_G_CC_STOPPED_OK。

触发器 T_CC_STOPPED_INDICATED

如果在CAN网络的CAN控制器相应的停止请求之后,CanSM模块已经获得CAN网络的已配置所有CAN控制器的模式指示,这将T_CC_STOPPED_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。

触发器 T_CC_STOPPED_TIMEOUT

对于控制器停止模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,该条件应以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnNotSupported。

在状态 S_CC_SLEEP 的操作

只要子状态机CANSM_BSM_DeinitPnNotSupported处于状态S_CC_SLEEP,CANSM模块就应执行动作DO_SET_CC_MODE_SLEEP,如果当前CAN控制器模式不为CAN_CS_SLEEP,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_SLEEP。

防护条件 G_CC_SLEEP_E_OK

如果在状态 S_CC_SLEEP的所有API调用都返回了E_OK,则应通过子状态机CANSM_BSM_DeinitPnNotSupported的保护条件G_CC_SLEEP_E_OK。

触发器 T_CC_SLEEP_INDICATED

如果在将CAN网络的CAN控制器设置为睡眠模式的相应请求之后,CanSM模块已获得CAN网络的所有已配置CAN控制器的模式指示,这将以T_CC_SLEEP_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。

触发器 T_CC_SLEEP_TIMEOUT

对于控制器睡眠模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,应以T_CC_SLEEP_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnNotSupported。

在状态 S_TRCV_NORMAL 的操作

如果为CAN网络配置了CAN收发器,则只要子状态机CANSM_BSM_DeinitPnNotSupported处于状态S_TRCV_NORMAL,CANSM模块就应执行动作DO_SET_TRCV_MODE_NORMAL,并为CAN网络的已配置CAN收发器重复API请求CanIf_SetTrcvMode,其中TransceiverMode等于CANTRCV_TRCVMODE_NORMAL。

防护条件 G_TRCV_NORMAL_E_OK

如果在状态 G_TRCV_NORMAL_E_OK的API调用返回E_OK,则应通过子状态机CANSM_BSM_DeinitPnNotSupported的保护条件G_TRCV_NORMAL_E_OK。

触发器 T_TRCV_NORMAL_INDICATED

如果CanSM模块在相应的请求后已获得CAN网络已配置的CAN收发器的CANTRCV_TRCVMODE_NORMAL模式指示,这将以T_TRCV_NORMAL_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。
如果没有为CAN网络配置CAN收发器,则将在状态S_TRCV_NORMAL中以T_TRCV_NORMAL_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。

触发器 T_TRCV_NORMAL_TIMEOUT

在收发器正常指示超时CANSM_MODEREQ_REPEAT_TIME后,该条件将以T_TRCV_NORMAL_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnNotSupported。

在状态 S_TRCV_STANDBY 的操作

如果为CAN网络配置了CAN收发器,则只要子状态机CANSM_BSM_DeinitPnNotSupported处于状态S_TRCV_STANDBY,CANSM模块就应执行动作DO_SET_TRCV_MODE_STANDBY,并为CAN网络的已配置CAN收发器重复API请求CanIf_SetTrcvMode,其中TransceiverMode等于CANTRCV_TRCVMODE_STANDBY。

防护条件 G_TRCV_STANDBY_E_OK

如果在状态 S_TRCV_STANDBY 的API调用返回E_OK,则应通过子状态机CANSM_BSM_DeinitPnNotSupported的保护条件G_TRCV_STANDBY_E_OK。

触发条件 T_TRCV_STANDBY_INDICATED

如果CanSM模块在相应的请求后已获得CAN网络中已配置的CAN收发器的CANTRCV_TRCVMODE_STANDBY模式指示,这将以T_TRCV_STANDBY_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。
如果没有为CAN网络配置CAN收发器,则在状态 S_TRCV_STANDBY中以T_TRCV_STANDBY_INDICATED触发CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。

触发条件 CANSM_BSM_T_TRCV_STANDBY_TIMEOUT

在收发器待机指示超时CANSM_MODEREQ_REPEAT_TIME后,将以CANSM_BSM_T_TRCV_STANDBY_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnNotSupported。

子状态机 CANSM_BSM_S_SILENTCOM_BOR

CANSM_BSM子状态机CANSM_BSM_S_SILENTCOM_BOR

效果:BUS_OFF

子状态机CANSM_BSM_S_FULLCOM 和 CANSM_BSM_S_SILENTCOM_BOR 的E_BUS_OFF效果是
使用参数EventId := CANSM_E_BUS_OFF和
EventStatus:= DEM_EVENT_STATUS_PRE_FAILED,调用Dem_SetEventStatus。

状态操作:S_RESTART_CC

只要子状态机CANSM_BSM_S_SILENTCOM_BOR处于状态S_RESTART_CC,CANSM模块就应执行动作DO_SET_CC_MODE_STARTED,如果当前CAN控制器模式不为CAN_CS_STARTED,则为CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STARTED。

G_RESTART_CC_E_OK

如果状态S_RESTART_CC的所有API调用都返回E_OK,则应通过子状态机CANSM_BSM_S_SILENTCOM_BOR的保护条件G_RESTART_CC_OK。

触发器: T_RESTART_CC_INDICATED

如果在启动CAN网络的CAN控制器相应请求之后,CanSM模块已经获得CAN网络的所有已配置CAN控制器的模式指示,这将以T_RESTART_CC_INDICATED触发CAN网络的子状态CANSM_BSM_S_SILENTCOM_BOR。

T_RESTART_CC_TIMEOUT

假定控制器启动模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,该条件应以T_RESTART_CC_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_SILENTCOM_BOR。

效果:E_TX_OFF

效果E_TX_OFF应不起作用(CAN控制器重启后的默认PDU模式已经是TX OFF,参考CanIf SWS)。

子状态机 CANSM_BSM_S_PRE_FULLCOM

CANSM_BSM的子状态机CANSM_BSM_S_PRE_FULLCOM

在状态 S_TRCV_NORMAL 的操作

如果为CAN网络配置了CAN收发器,则只要子状态机CANSM_BSM_S_PRE_FULLCOM处于状态S_TRCV_NORMAL,CANSM模块就应执行动作DO_SET_TRCV_MODE_NORMAL,并为CAN网络的已配置CAN收发器重复API请求CanIf_SetTrcvMode,其中TransceiverMode等于CANTRCV_TRCVMODE_NORMAL。

防护条件 G_TRCV_NORMAL_E_OK

如果在状态 S_TRCV_NORMAL下的API调用返回E_OK,则应通过子状态机CANSM_BSM_S_PRE_FULLCOM的防护条件G_TRCV_NORMAL_E_OK。

触发器T_TRCV_NORMAL_INDICATED

如果CanSM模块在相应的请求后已经获得CAN网络的已配置CAN收发器的CANTRCV_TRCVMODE_NORMAL模式指示,这将以T_TRCV_NORMAL_INDICATED触发CAN网络的子状态机CANSM_BSM_S_PRE_FULLCOM。
如果没有为CAN网络配置CAN收发器,则将在状态S_TRCV_NORMAL 中以T_TRCV_NORMAL_INDICATED触发CAN网络的子状态机CANSM_BSM_S_PRE_FULLCOM。

触发器 T_TRCV_NORMAL_TIMEOUT

在收发器正常指示超时CANSM_MODEREQ_REPEAT_TIME后,将以T_TRCV_NORMAL_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_PRE_FULLCOM。

在状态 S_CC_STOPPED 的操作

只要子状态机CANSM_BSM_S_PRE_FULLCOM处于状态S_CC_STOPPED,CANSM模块就应执行动作DO_SET_CC_MODE_STOPPED,如果当前CAN控制器模式不为CAN_CS_STOPPED,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STOPPED。

防护条件 G_CC_STOPPED_OK

如果在状态 S_CC_STOPPED的API调用都返回E_OK,则应通过状态机CANSM_BSM_S_PRE_FULLCOM的防护条件G_CC_STOPPED_OK。

触发器 T_CC_STOPPED_INDICATED

在停止CAN网络的CAN控制器的相应请求之后,CanSM模块已经获得CAN网络的所有已配置CAN控制器的模式指示,这将以T_CC_STOPPED_INDICATED触发CAN网络的子状态机CANSM_BSM_S_PRE_FULLCOM。

触发器 T_CC_STOPPED_TIMEOUT

控制器停止模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,将以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_PRE_FULLCOM。

在状态 S_CC_STARTED 的操作

只要子状态机CANSM_BSM_S_PRE_FULLCOM处于状态S_CC_STARTED,CANSM模块就应执行动作DO_SET_CC_MODE_STARTED,如果当前CAN控制器模式不为CAN_CS_STARTED,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STARTED。

防护条件 G_CC_STARTED_OK

如果在状态 S_CC_STARTED下的所有API调用都返回E_OK,则应通过子状态机CANSM_BSM_S_PRE_FULLCOM的保护条件G_CC_STARTED_OK。

触发器 T_CC_STARTED_INDICATED

如果在CAN网络的CAN控制器相应的请求启动之后,CanSM模块已获得CAN网络所有的已配置CAN控制器的模式指示,这将以T_CC_STARTED_INDICATED触发CAN网络的子状态机CANSM_BSM_S_PRE_FULLCOM。

触发器 T_CC_STARTED_TIMEOUT

控制器启动模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,该条件应以T_CC_STARTED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_PRE_FULLCOM。

子状态机 CANSM_BSM_S_FULLCOM

CANSM_BSM的子状态机CANSM_BSM_S_FULLCOM

防护条件: G_BUS_OFF_PASSIVE

如果CANSM_BOR_TX_CONFIRMATION_POLLING被禁用,并且自E_TX_ON起的持续时间大于或等于等于配置参数CANSM_BOR_TIME_TX_ENSURED,子状态机CANSM_BSM_S_FULLCOM的保护条件G_BUS_OFF_PASSIVE应通过。
如果CANSM_BOR_TX_CONFIRMATION_POLLING使能,CAN网络所有已配置CAN控制器的API CanIf_GetTxConfirmationState返回CANIF_TX_RX_NOTIFICATION,子状态机CANSM_BSM_S_FULLCOM的保护条件G_BUS_OFF_PASSIVE
应通过。

效果:E_BUS_OFF_PASSIVE

子状态机CANSM_BSM_S_FULLCOM的效果E_BUS_OFF_PASSIVE
应使用参数EventId := CANSM_E_BUS_OFF和EventStatus:= DEM_EVENT_STATUS_PASSED,调用Dem_SetEventStatus。

触发器:T_CHANGE_BR_REQUEST

如果不存在拒绝CanSM_SetBaudrate请求的条件,这将通过T_CHANGE_BR_REQUEST分别触发状态机CANSM_BSM_S_FULLCOM和父状态机CANSM_BSM(通过CanIf_SetBaudrate直接改变波特率,或者启动所需的异步进程来实现改变波特率)

效果:E_CHANGE_BR_BSWM_MODE

子状态机CANSM_BSM_S_FULLCOM的效果E_CHANGE_BR_BSWM_MODE是使用参数Network:= CanSMComMNetworkHandleRef和CurrentState:= CANSM_BSWM_CHANGE_BAUDRATE为相应的CAN网络调用API BswM_CanSM_CurrentState。

触发器:T_BUS_OFF

如果CAN网络的一个已配置CAN控制器与回调函数CanSM_ControllerBusOff的函数参数ControllerId相匹配,则回调函数CanSM_ControllerBusOff应以T_BUS_OFF触发CAN网络的子状态机CANSM_BSM_S_FULLCOM。
如果多个CAN控制器属于一个CAN网络,并且其中一个控制器的总线关闭由CanSM_ControllerBusOff指示,则CanSM应在效果E_BUS_OFF的上下文停止CAN网络的其他CAN控制器。

效果:E_BUS_OFF

子状态机CANSM_BSM_S_FULLCOM的效果E_BUS_OFF应首先调用相应CAN网络的API BswM_CanSM_CurrentState,使用参数为Network:= CanSMComMNetworkHandleRef和CurrentState:= CANSM_BSWM_BUS_OFF。

子状态机CANSM_BSM_S_FULLCOM的效果E_BUS_OFF应然后就调用API ComM_BusSM_ModeIndication,使用参数为Channel:= CanSMComMNetworkHandleRef和ComMode:= ComM_SILENT_COMMUNICATION。

子状态机CANSM_BSM_S_FULLCOM的函数E_BUS_OFF应使用参数EventId:= CANSM_E_BUS_OFF和EventStatus:= DEM_EVENT_STATUS_PRE_FAILED,调用Dem_SetEventStatus。

在状态 S_RESTART_CC 的操作

只要子状态机CANSM_BSM_S_FULLCOM处于状态S_RESTART_CC,CANSM模块就应执行动作DO_SET_CC_MODE_STARTED,如果当前CAN控制器模式不为CAN_CS_STARTED,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STARTED。

防护条件 G_RESTART_CC_OK

如果在状态 S_RESTART_CC的所有API调用都返回E_OK,则应通过子状态机CANSM_BSM_S_FULLCOM的保护条件G_RESTART_CC_OK。

触发器 T_RESTART_CC_INDICATED

如果CAN网络的CAN控制器在相应启动请求之后,CanSM模块已获得CAN网络已配置的所有CAN控制器的模式指示,这将以T_RESTART_CC_INDICATED触发CAN网络的子状态CANSM_BSM_S_FULLCOM。

触发器 T_RESTART_CC_TIMEOUT

假定控制器启动模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,该条件应以T_RESTART_CC_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_FULLCOM。

效果 E_TX_OFF

效果 E_TX_OFF什么也不做

防护条件 G_TX_ON

如果CanSMEnableBusOffDelay为FALSE,则在与最后一次T_BUS_OFF相关的CanSMBorTimeL1的持续时间之后,应通过子状态机CANSM_BSM_S_FULLCOM的保护条件G_TX_ON,如果未通过保护条件G_BUS_OFF_PASSIVE的具有E_BUS_OFF的bus-off recovery 复重试次数低于CanSMBorCounterL1ToL2。

如果CanSMEnableBusOffDelay为FASLE,则在与最后一次T_BUS_OFF相关的CanSMBorTimeL2的持续时间之后,应通过子状态机CANSM_BSM_S_FULLCOM的保护条件G_TX_ON,如果未通过保护条件G_BUS_OFF_PASSIVE的具有E_BUS_OFF的bus-off recovery重试次数大于或等于CanSMBorCounterL1ToL2

如果CanSMEnableBusOffDelay为真,则以上两种情况下的保护条件应在每种情况下的指定持续时间加上额外的随机延迟值后通过,该值应在总线关闭事件后通过配置的回调函数< User_GetBusOffDelay >请求。

效果 E_TX_ON

如果ECU被动为假,则子状态机CANSM_BSM_S_FULLCOM的效果E_TX_ON应第一件事首先使用参数ControllerId:= CanSMControllerId和PduModeRequest := CANIF_ONLINE调用API函数CanIf_SetPduMode,以配置CAN网络的CAN控制器。

如果ECU被动为真,则子状态机CANSM_BSM_S_FULLCOM的效果E_TX_ON应第一件事首先使用参数ControllerId:= CanSMControllerId和PduModeRequest:= CanIf_TX_OFFLINE_ACTIVE调用API函数CanIf_SetPduMode。

子状态机CANSM_BSM_S_FULLCOM的效果E_TX_ON应第二件事是调用API BswM_CanSM_CurrentState,使用参数为Network:= CanSMComMNetworkHandleRef 和CurrentState:=CANSM_BSWM_FULL_COMMUNICATION。

子状态机CANSM_BSM_S_FULLCOM的作用E_TX_ON应第三件事事调用API ComM_BusSM_ModeIndication,使用参数为Channel:= CanSMComMNetworkHandleRef和ComMode:=ComM_FULL_COMMUNICATION。

触发器 T_TX_TIMEOUT_EXCEPTION

回调函数CanSM_TxTimeoutException应通过T_TX_TIMEOUT_EXCEPTION触发子状态机CANSM_BSM_S_FULLCOM。

note

在S_NO_BUS_OFF状态下,CanSM模块不需要任何状态操作。

子状态机 CANSM_BSM_S_TX_TIMEOUT_EXCEPTION

CANSM_BSM的子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION

触发器 T_CC_STOPPED_TIMEOUT

假定控制器停止模式指示,在CANSM_MODEREQ_REPEAT_TIME超时后,该条件应通过T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION。

防护条件 G_CC_STOPPED_E_OK

如果状态操作 DO_SET_CC_MODE_STOPPED()的所有API调用都返回了E_OK,则通过子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION的防护条件G_CC_STOPPED_E_OK。

状态操作 DO_SET_CC_MODE_STOPPED()

只要子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION处于状态S_CC_STOPPED,CANSM模块就应执行动作DO_SET_CC_MODE_STOPPED,如果当前CAN控制器模式不为CAN_CS_STOPPED,则为CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STOPPED。

触发器 T_CC_STOPPED_INDICATED

如果在请求停止相应的CAN网络的CAN控制器后,CanSM模块已获得CAN网络的所有已配置CAN控制器的模式指示,这将通过T_CC_STOPPED_INDICATED触发CAN网络的子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION。

触发器 T_CC_STARTED_INDICATED

如果在请求启动CAN网络的CAN控制器的相应之后,CanSM模块已经获得CAN网络的所有已配置CAN控制器的模式指示,这将通过T_CC_STARTED_INDICATED触发CAN网络的子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION。

防护条件 G_CC_STARTED_E_OK

如果状态操作DO_SET_CC_MODE_STARTED返回E_OK,那么应通过子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION的防护条件G_CC_STARTED_E_OK。

状态操作 DO_SET_CC_MODE_STARTED

只要子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION处于状态S_CC_STARTED,CANSM模块就应执行动作DO_SET_CC_MODE_STARTED,如果当前CAN控制器模式不为CAN_CS_STARTED,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STARTED。

ExitPoint:TxTimeout

如果通过T_CC_STARTED_INDICATED触发了子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION,则应使用参数CANIF_ONLINE调用API CanIf_SetPduMode()。

子状态机 CANSM_BSM_S_CHANGE_BAUDRATE

CANSM_BSM的子状态机CANSM_BSM_S_CHANGE_BAUDRATE

在进入时需要执行的状态操作:DO_SET_BAUDRATE_DIRECT

状态操作DO_SET_BAUDRATE_DIRECT应为CAN网络中所有已配置的CAN控制器调用API请求CanIf_SetBaudrate,并使用各自的ControllerId参数。CanSM_SetBaudrate()中的相应函数参数BaudRateConfigID作为BaudRateConfigID参数。

防护条件:G_SET_BAUDRATE_DIRECT_OK

如果所有CanIf_SetBaudrate请求都返回E_OK,则应通过保护条件G_SET_BAUDRATE_DIRECT_OK。

防护条件:G_SET_BAUDRATE_DIRECT_NOT_OK

如果任意CanIf_SetBaudrate请求返回E_NOT_OK,那么应通过状态CANSM_BSM_CHANGE_BR_SYNC的防护条件G_SET_BAUDRATE_NOT_OK。

状态 S_CC_STOPPED 中的操作

只要子状态机CANSM_BSM_S_CHANGE_BAUDRATE处于状态S_CC_STOPPED,CANSM模块就应执行动作DO_SET_CC_MODE_STOPPED,如果当前CAN控制器模式不是CAN_CS_STOPPED,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STOPPED。

防护条件:G_CC_STOPPED_OK

如果 状态 S_CC_STOPPED 中的操作的所有API调用都返回了E_OK,则应通过子状态机CANSM_BSM_S_CHANGE_BAUDRATE的保护条件G_CC_STOPPED_OK。

触发器:T_CC_STOPPED_INDICATED

在请求停止相应的CAN网络的CAN控制器之后,如果CanSM模块已获得CAN网络的已配置所有CAN控制器的模式指示,这将通过T_CC_STOPPED_INDICATED触发CAN网络的子状态机CANSM_BSM_S_CHANGE_BAUDRATE。

触发器:T_CC_STOPPED_TIMEOUT

控制器停止模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,该条件应通过T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_CHANGE_BAUDRATE。

效果:E_CHANGE_BAUDRATE

子状态机CANSM_BSM_S_CHANGE_BAUDRATE的作用E_CHANGE_BAUDRATE的第一件事是为相应的CAN网络调用API ComM_BusSM_ModeIndication,使用参数为Channel:= CanSMComMNetworkHandleRef和ComMode:=COMM_NO_COMMUNICATION。

子状态机CANSM_BSM_S_CHANGE_BAUDRATE的作用E_CHANGE_BAUDRATE的第二件事是为CAN网络的所有已配置CAN控制器使用相应的ControllerId参数调用API请求CanIf_SetBaudrate,并应使用CanSM_SetBaudrate调用中记忆的BaudRateConfigID作为BaudRateConfigID参数。

状态 S_CC_STARTED 中的操作

只要子状态机CANSM_BSM_S_CHANGE_BAUDRATE处于状态S_CC_STARTED,CANSM模块就应执行动作DO_SET_CC_MODE_STARTED,如果当前CAN控制器模式不是CAN_CS_STARTED,则对CAN网络的所有已配置CAN控制器重复API请求CanIf_SetControllerMode,其中ControllerMode等于CAN_CS_STARTED。

防护条件:G_CC_STARTED_OK

如果在状态 S_CC_STARTED 中的操作的所有API返回都为E_OK,那么应通过子状态机CANSM_BSM_S_CHANGE_BAUDRATE的防护条件G_CC_STARTED_OK。

触发器:T_CC_STARTED_INDICATED

如果在请求启动相应CAN网络的CAN控制器之后,CanSM模块已获得CAN网络的所有已配置CAN控制器的模式指示,这将通过T_CC_STARTED_INDICATED触发CAN网络的子状态机CANSM_BSM_S_CHANGE_BAUDRATE。

触发器:T_CC_STARTED_TIMEOUT

假定控制器启动模式指示,在CANSM_MODEREQ_REPEAT_TIME超时之后,该条件应通过T_CC_STARTED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_CHANGE_BAUDRATE。

防护条件:G_NO_COM_MODE_REQUESTED

如果通过CanSM_RequestComMode最近接受的通信模式请求,参数ComM_Mode等于COMM_NO_COMMUNICATION,则子状态机CANSM_BSM_S_CHANGE_BAUDRATE应通过保护条件G_NO_COM_MODE_REQUESTED。

防护条件:G_NO_COM_MODE_NOT_REQUESTED

如果通过CanSM_RequestComMode最近接受的通信模式请求,参数ComM_Mode等于COMM_SILENT_COMMUNICATION或COMM_FULL_COMMUNICATION,则子状态机CANSM_BSM_S_CHANGE_BAUDRATE应通过保护条件G_NO_COM_MODE_NOT_REQUESTED。

总结

  • 本篇CanSM全都是关于状态机的触发流转,全部记住是几乎不可能的,只要了解即可;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Question Log

Question Log 提示&#xff1a;记录一下平常遇到的坑 Question Log&#xff08;★ &#xff1e; &#xff09; Question LogⅠ、★ &#xff1e; 使用VsCode构建Unity开发环境1.环境配置2.遇到的相关问题★.The .NET Core SDK cannot be located: A valid dotnet installation …

【Flutter】Flutter 使用splashscreen包创建启动页面

文章目录 一、 前言二、 什么是启动页面和 splashscreen三、 如何安装和使用 splashscreen四、 详细的代码示例&#xff1a;使用 splashscreen 创建启动页面五、 总结 一、 前言 大家好&#xff0c;今天我们要聊一聊如何在 Flutter 中使用 splashscreen 包来创建一个漂亮的启动…

使用Fiddler模拟网络

Fiddler已经预置提供了模拟Modem速度的选项&#xff0c;其位置位于&#xff1a; Rules->Performances->Simulate Modem Speeds 果你想学习Fiddler抓包工具&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&#x…

【道友避坑】yolov5视频抽帧构建数据集

写在前面&#xff1a;本篇博客记录了yolov5视频抽帧构建数据集的全过程。 目录 一、 视频材料准备 二、数据集构建 三、运行数据集 一、 视频材料准备 1. 在yolov5-master下创建mydata目录&#xff0c;然后创建video目录和images目录、labels目录 2. 下载一个一两分钟的视频…

数据安全保护:DataSecurity Plus助您防止数据泄露

导言&#xff1a; 在数字化时代&#xff0c;数据安全已成为企业和个人必须高度关注的重要议题。数据泄露可能导致重大损失&#xff0c;包括财务损失、声誉受损以及违反法规的风险。为了帮助组织有效地防止数据泄露&#xff0c;DataSecurity Plus是一款强大的解决方案&#xff…

Android PopupWindow+RecyclerView 实现二级联动筛选

前言 这篇文章主要的功能是利用 PopupWindow 和 RecyclerView 实现条件筛选包括二级联动筛选&#xff0c;主要是仿小红书里的筛选功能而写的一个 Demo 效果如下&#xff0c;代码通俗易懂&#xff0c;保姆级教程 一、使用步骤 1.引入库 api com.github.CymChad:BaseRecycler…

smart Java——BIO、NIO、AIO的工作流程和代码实现

文章目录 〇、前置知识1.套接字2.线程池 一、BIO1.工作流程2.代码实现3.缺点 二、NIO&#xff08;基于轮训&#xff09;1.相比于BIO的优化2.工作流程3.代码实现 三、AIO&#xff08;基于订阅-通知&#xff09;1.工作流程2.代码实现 参考 〇、前置知识 1.套接字 在计算机网络编…

回溯算法之广度优先遍历

目录 迷宫问题 N叉树的层序遍历 腐烂的橘子 单词接龙 最小基因变化 打开转盘锁 迷宫问题 假设有一个迷宫&#xff0c;里面有障碍物&#xff0c;迷宫用二维矩阵表示&#xff0c;标记为0的地方表示可以通过&#xff0c;标记为1的地方表示障碍物&#xff0c;不能通过。现在给一…

【机器人3】图像雅可比矩阵原理与推导

图像雅可比矩阵原理与推导 理想情况下&#xff0c;图像像素坐标系和图像物理坐标系无倾斜&#xff0c;则二者坐标转换关系如下&#xff0c;且两边求导&#xff1a; [ u v 1 ] [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] (1) \begin{bmatrix}u\\v\\1\end{bmatrix}\begin{b…

C语言-变量

1 内存的分区 1、内存&#xff1a;物理内存、虚拟内存 物理内存&#xff1a;实实在在存在的存储设备 虚拟内存&#xff1a;操作系统虚拟出来的内存。 操作系统会在物理内存和虚拟内存之间做映射。 在32位系统下&#xff0c;每个进程的寻址范围是4G,0x00 00 00 00 ~0xff ff …

和想要通过学习 Python 转行的同学聊一聊

在开始之前我想说&#xff0c;关于这类话题&#xff0c;永远会存在分歧和争论。比如有人看好互联网发展&#xff0c;有人说泡沫太大&#xff1b;有人说要做项目&#xff0c;有人说得多刷题&#xff1b;有人说要去培训班&#xff0c;有人说不如自学&#xff1b;有人说你学 Pytho…

【MySql】基本查询

文章目录 插入操作insert查询操作selectselect查询where条件判断order by排序limit筛选分页结果 更新操作update删除操作delete插入查询结果 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 先创建提供一张表&am…

给大家分享一份适合练手的软件测试实战项目

我们都知道软件测试是一个理论性强的分支。 正是这种特点&#xff0c;决定了在学习的过程中不单单是看或者去背相应的知识点&#xff0c;而是真真切切的基于这些理论基础知识&#xff0c;结合实战项目进行演练。这也就是所谓的眼过千遍不如手过一遍。而且大家也都能看到&#…

13. 100ASK-V853-PRO开发板 摄像头测试指南

100ASK-V853-PRO开发板 摄像头测试指南 硬件要求&#xff1a; 100ASK-V853-PRO开发板GC2053摄像头 软件要求&#xff1a; 固件下载地址&#xff1a;链接&#xff1a;百度网盘 提取码&#xff1a;sp6a 固件位于资料光盘中的10_测试镜像/3.测试摄像头/v853_linux_100ask_uart0…

119.【Uniapp】

uni-app (一)、uni-app 起步1.Uniapp简介2.Uniapp开发工具(1).下载HbuilderX(2).安装scss/sass编译(3).快捷键方案切换(4).修改编辑器的基本设置 3.新建 uni-app项目4.uniapp 的目录结构5.把项目运行到微信开发者工具中(1).填写自己的微信小程序的AppID:(2).在HBuilderX中&…

java循环语句

文章目录 for循环while循环do-while循环嵌套循环关键字break和continue的使用break带标签的使用 for循环 语法格式&#xff1a; for (①初始化部分; ②循环条件部分; ④迭代部分)&#xff5b;③循环体部分; &#xff5d;说明&#xff1a; for(;;)中的两个&#xff1b;不能多…

视觉SLAM十四讲——ch7实践(视觉里程计1)

视觉SLAM十四讲----ch7的实践操作及避坑 1. 实践操作前的准备工作2. 实践过程2.1 特征提取与匹配2.2 对极几何2.3 三角测量2.4 求解PnP2.5 求解ICP 3. 遇到的问题3.1 准备工作遇到的问题 1. 实践操作前的准备工作 在终端中进入ch7文件夹下&#xff0c;顺序执行以下命令进行编译…

Sentinel的限流和Gateway的限流差别?

Sentinel的限流与Gateway的限流有什么差别&#xff1f; 问题说明&#xff1a;考察对限流算法的掌握情况 限流算法常见的有三种实现&#xff1a;滑动时间窗口&#xff0c;令牌桶算法&#xff0c;漏桶算法。gateway则采用基于Redis实现的令牌桶算法。但是我们不会去用&#xff…

PCB做了盲埋孔,还有必要再做盘中孔工艺吗

一博高速先生成员--王辉东 初夏的西湖美艳无边&#xff0c;若不去看看人生总觉遗憾。 杭州两大美女明明和琪琪约好这个星期天&#xff0c;一起去西湖转转&#xff0c;到灵隐寺许个愿&#xff0c;再到北高峰爬个山。 话说两人正行之间&#xff0c;看到正对面也有两个美女结伴同…

Spring Security Oauth2.1 最新版 1.1.0 整合 gateway 完成授权认证(基于 springboot 3.1)

目录 背景 版本 Spring Boot 3.1 Spring Authorization Server 1.1.0官方文档 基础 spring security OAuth2.0 模块构成 授权方式 集成过程 官方demo 代码集成 依赖 授权服务AuthorizationServerConfig配置 重要组件 测试 查看授权服务配置 访问授权服务 授…