文章目录
- 简述
- 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作为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
在状态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_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
在状态 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
在状态 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
效果: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
在状态 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
防护条件: 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
触发器 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
在进入时需要执行的状态操作: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全都是关于状态机的触发流转,全部记住是几乎不可能的,只要了解即可;