CommunicationControl就是通信控制服务,因为ISO14229协议是基于CAN的,所以此服务主要是涉及到CAN通信接收和发送相关的控制。
服务 | 描述 |
CommunicationControl | 客户端向服务端请求打开或关闭某类报文信息的发送和接收功能。(这里的类指的通信类型) |
目录
7.2.1.步骤1:将主节点对应此识别号的总线通信转为仅支持诊断的调度模式
7.2.2.步骤2:将主节点对应此识别号的总线通信转为应用程序调度模式
1.英文术语
英文术语 | 解释 |
CommunicationControl | 通信控制 |
CommunicationControl Request SID | 通信控制请求SID ISO14229定义此值为0x28 |
sub-function | 子功能 |
controlType | 控制类型 |
communicationType | 通信类型 |
nodeIdentificationNumber(high byte) | 节点识别号(高字节) |
nodeIdentificationNumber(low byte) | 节点识别号(低字节) |
CommunicationControl Response SID | 通信控制响应SID ISO14229定义此值为(0x28+0x40) |
Sub-bus segment | 子总线段(指在主节点在子总线上,与某子总线节点进行的通信) |
2.缩写表
缩写 | 解释 |
SID | 服务标识符 |
Cvt | 约定值 M 强制的 C 有条件的 U 用户选项 |
NRC | 否定响应码 |
3.服务描述
3.1.通信控制
通信控制服务就是客户端向服务端请求打开或关闭某类或多类报文信息的发送和接收功能,该诊断服务对诊断报文没有控制作用,此服务起作用的是应用程序报文和网络管理报文。
通信控制服务主要出现的场合:
- 在进行程序刷写的时候,为了降低总线负载,就需要将某些控制器的通信报文关闭。
- 我们测试的时候会用电脑去发模拟状态信号去代替某个控制器的发送信号,这时就需要将此控制器通信切断。
通信控制服务是改变ECU功能的服务,要设置在非默认会话模式下执行,当ECU重新回到默认会话模式时,该服务功能就会恢复到默认,即各通信报文都恢复正常。
3.2.CAN节点的概念
CAN节点是指能够挂接在CAN总线上的单元,此单元也可以说就是该总线上挂着的ECU,并能通过CAN总线实现各个节点间的通信,以实现复杂的控制过程。
如下图:
这张图有两条CAN总线,一条CAN总线是500kbps的通信速率,另一条CAN总线是250kbps的通信速率。在这两条CAN总线上接着很多的控制单元,也就是挂着的ECU,这些ECU可能只连接了一路CAN,也有些接了两路CAN。
而我们所说的CAN节点是对于某一路CAN总线而言的,譬如:
下面第一个连接两路CAN的ECU,此ECU对于500kbps的CAN总线(被CAN网络工程师命名)叫节点1,而此ECU对于250kbps的CAN总线(被CAN网络工程师命名)又被叫节点2。
以上就是CAN节点的概念,应该挺好理解的 。
3.3.主节点与它的子总线、子总线节点的概念
如果某控制器涉及到CAN信号转发,那么这个控制器就可以看作一个主节点,而这个主节点涉及到的CAN信号转发,这些CAN信号转发的来源是另一路CAN总线,这一路CAN总线就被称为这个主节点的子总线,而涉及到这一路中某些电控单元的CAN信号转发,这些电控单元被称为这个主节点的子总线节点或子节点。
4.请求消息定义
请求消息定义 | ||||
A_Data字节 | 参数名称 | Cvt | 字节值 | 助记符 |
#1 | 通信控制请求SID | M | 0x28 | CC |
#2 | 子功能 = [控制类型] | M | 0x00 - 0xFF | LEV_CTRLTP |
#3 | 通信类型 | M | 0x00 - 0xFF | CTP |
#4 | 节点识别号(高字节) | 0x00 - 0xFF | NIN | |
#5 | 节点识别号(低字节) | 0x00 - 0xFF | NIN | |
条件a:当子功能 =[控制类型]为0x04或0x05,此参数才存在。 |
4.1.请求消息子功能定义
该服务使用子功能参数选择,也就是控制类型(此字节的bit7表示抑制肯定响应位,下表并没有介绍此位)。
下面标黄的有控制类型比较常用
请求消息子功能定义 | |||
位6-0 | 描述 | Cvt | 助记符 |
0x00 | 启用Rx和Tx 此值表示对于指定的通信类型启用消息的接收和传输。 (在下面有通信类型的介绍,也就是我们提到的某类报文信息) | U | ERXTX |
0x01 | 启用Rx和禁用Tx 此值表示对于指定的通信类型,应启用消息的接收并禁用其传输。 | U | ERXDTX |
0x02 | 禁用Rx并启用Tx 此值表示对于指定的通信类型,应启用消息的传输并禁用其接收。 | U | DRXETX |
0x03 | 禁用Rx和Tx 此值表示对于指定的通信类型,应禁用消息的接收和传输。 | U | DRXTX |
0x04 | 启用Rx并使用增强的地址信息禁用Tx 1、仅支持诊断的调度模式可以理解为就是只激活诊断功能,对我们来说诊断功能是默认开启的,而其他跟诊断无关的功能的都可以禁止,说白了就是直接禁用除诊断报文以外的其他通信,对于主节点来说,也可以直接理解为诊断报文可以到达子总线节点,其他的报文都转不过去。 2、增强的地址信息其实就是为子总线节点编的代号,就是上面说的节点识别号(两个字节)。 子功能过程:通过向主节点请求此子功能服务(带有节点识别号)后,这个请求会被主节点响应,这时候主节点就可以将与对应通信切换到仅支持诊断的模式,主节点可以接收子总线节点的报文和总线节点发来的通信,但是不用去转发相关子节点的报文,即从总线通过主节点转发给子总线节点的报文和子总线节点通过主节点向总线发送的报文。 注意:在此子功能下,请求即使带了通信类型,并不对这个指定的通信类型进行控制,上面仅支持诊断的调度模式就已经指定了只有诊断报文才可正常转发。 以上属于个人理解,如果大家有其他不同看法,欢迎一起讨论! | U | ERXDTXWEAI |
0x05 | 使用增强的寻址信息启用Rx和Tx 此参数值定义了总线的主节点应将其相关的子总线段切换到应用程序调度模式。 注:这就是0x04子功能的恢复过程,将关闭的其他功能开启,重新回到功能齐全的状态下,只要看懂上面0x04就可以知道我们这个子功能需要怎么做。 | U | ERXTXWEAI |
0x06 - 0x3F | ISOSAEReserved 此值范围为本文件为未来定义预留。 | M | ISOSAERESRVD |
0x40 - 0x5F | 车辆制造商特定 此值范围保留以供车辆制造商特定使用。 | U | VMS |
0x60 - 0x7E | 系统供应商特定 此值范围保留以供系统供应商特定使用。 | U | SSS |
0x7F | ISOSAEReserved 此值为本文件为未来定义预留。 | M | ISOSAERESRVD |
4.2.请求消息通信类型定义
下面是该服务通信类型参数选择,也就是选择哪些类的报文。
请求消息通信类型定义 | |||||
通信类型 | 位编码 | 值范围 | 描述 | 约定值 | 助记符 |
0-1 | 0x0 | ISOSAEReserved 该值为本文件为未来定义预留。 | M | ISOSAERESERVD | |
0x1 | 所有与应用程序相关通信 该值指的是所有与应用程序相关的通信(多个车内控制器之间的应用程序间信号交换)。 | U | NCM | ||
0x2 | 所有与网络管理相关通信 该值指的是所有与网络管理相关的通信。 | U | NWMCM | ||
0x3 | 所有与网络管理和应用程序相关通信 该值指的是所有与网络管理和应用程序相关的通信。 | U | NWMCM,NCM | ||
2-3 | 0x0-0x3 | ISOSAEReserved 该值为本文件为未来定义预留。 | M | ISOSAERESERVD | |
4-7 | 0x0 | 禁用/启用指定的通信类型 当4-7bit位为0x0时,这里接收节点也就是服务端仅禁用此服务端到总线上的通信。如果此接收节点是一个主节点,此接收节点不负责去控制它的子节点的通信。 这里其实都是对此服务端到总线上的通信禁用功能开启,当我们选择4-7bit位为0x0时,我们服务端如果是主节点是无法控制它连接的子节点的通信。 | U | DISENSCT | |
0x1-0xE | 禁用/启用由子网编号标识的特定子网 | U | DISENSSIVSN | ||
0xF | 禁用/启用接收请求的网络(接收节点(服务器)) | U | DENWRIRO |
根据以上的对通信类型(一个字节)的位编码可知,其实这个字节中0-3bit位表示通信类型。
此字节0bit位置为1,表示指定的通信类型包含所有与应用程序相关通信。
此字节1bit位置为1,表示指定的通信类型包含所有与网络管理相关通信。
所以此字节的0-1bit都置为1,表示指定的通信类型是所有与应用程序相关通信和所有与网络管理相关通信。
而此字节的2-3bit在ISO14229中还没有用到,也就是此字节的低半个字节(0-3bit)只有0-1bit使用到了,所以我们直接可以理解此字节的0-1bit位表示通信类型。
注意:通信类型字节的4-7bit位我们一般会置为0x0,直接限定服务端只能去控制自己涉及的通信,其他节点的发送和接收我们是无法控制的;而4-7bit位设置的其他值基本不用,ISO14229也没有明确说明,所以我们也不用去做过多了解。
4.3. 请求消息节点识别号参数定义
字节值 | 描述 | Cvt | 助记符 |
0x0000 | ISOSAEReserved 该值为本文件为未来定义预留。 | M | ISOSAERESRVD |
0x0001-0xFFFF | 节点识别号 节点识别号指的是主节点对应的子节点进行编号。 | U | NIN |
4.4.请求消息数据参数定义
请求消息数据参数定义 | |
节点识别号 如果服务器涉及到CAN信号转发,那么这个服务器就可以看作一个主节点,而这个主节点涉及到的CAN信号转发,这些CAN信号转发的来源是另一路CAN总线,这一路CAN总线就被称为这个主节点的子总线,而涉及到这一路中某些电控单元的CAN信号转发,这些电控单元被称为这个主节点的子总线节点或子节点。 节点识别号就是对某个主节点中的多个子总线节点的编码。 比较典型的例子就是:汽车上的TBOX,连接TBOX中的几路CAN总线,这几路CAN总线都可以视为TBOX的子总线,TBOX就是可以算一个主节点。 经验总结:我之前接触的商用车电控五合一中的总成板也可以看成一个主节点,总成板的功能:转发辅控报文和控制接触器吸合或断开。 |
5.肯定响应消息定义
肯定响应消息定义 | ||||
A_Data字节 | 参数名称 | Cvt | 字节值 | 助记符 |
#1 | 通信控制响应SID | M | 0x68 | CCPR |
#2 | 子功能 = [控制类型] | M | 0x00 - 0x7F | LEV_CTRLTP |
5.1.肯定响应消息数据参数定义
肯定响应消息数据参数定义 |
定义 |
控制类型 此参数与请求消息的子功能参数的位6~0相同。 |
6.否定响应消息定义
否定响应消息定义 | ||||
A_Data字节 | 参数名称 | 字节值 | Cvt | 助记符 |
#1 | 否定响应SID | 0x7F | M | SIDNR |
#2 | 通信控制请求SID | 0x28 | M | SIDRQ |
#3 | 否定响应码 | 0xXX | M | NRC_ |
6.1. 否定响应码
此服务支持的否定响应码 | ||
否定响应码 | 描述 | 助记符 |
0x12 | 子功能不支持 如果不支持子功能参数,则应发送此否定响应码。 | SFNS |
0x13 | 消息长度错误或格式无效 如果消息的长度错误,则应发送此否定响应码。 | IMLOIF |
0x22 | 条件错误 如果未满足通信控制请求的条件,因此无法禁用/启用请求的通信类型,则应返回此否定响应码。 | CNC |
0x31 | 请求超出范围 如果服务端检测到通信类型或节点识别号参数中有错误,则服务端应使用此响应码。 | ROOR |
7.服务使用示例
7.1.示例#1-禁用网络管理报文的传输
7.1.1.步骤1:请求禁用网络管理报文的传输
禁用网络管理报文传输请求 | ||||
消息方向 | 客户端→服务端 | |||
消息类型 | 请求 | |||
A_Data字节 | 描述(所以值为16进制) | 字节值 | 助记符 | |
#1 | 通信控制请求SID | 0x28 | CC | |
#2 | 子功能 = [控制类型]=启用Rx和禁用Tx, 抑制肯定响应位 = 假 | 0x01 | ERXTX | |
#3 | 通信类型=所有与网络管理相关通信 | 0x02 | NW |
此过程通过向服务端请求控制对于所有与网络管理相关通信报文的接收(开启)和发送(禁用)。
通信控制肯定响应消息 | ||||
消息方向 | 服务端→客户端 | |||
消息类型 | 响应 | |||
A_Data字节 | 描述(所以值为16进制) | 字节值 | 助记符 | |
#1 | 通信控制响应SID | 0x68 | CCPR | |
#2 | 子功能 = [控制类型]=启用Rx和禁用Tx | 0x01 | CTRLTP |
服务端响应客户端请求。
7.1.2.操作汇总
步骤1:请求禁用网络管理报文的传输
图解:
操作 | CAN报文 | 实体 | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ||
请求禁用网络管理报文传输 | 0x03 | 0x28 | 0x01 | 0x02 | 客户端 | ||||
肯定响应 | 0x02 | 0x68 | 0x01 | 服务端 |
7.2.示例#2-主节点控制从节点报文转发
7.2.1.步骤1:将主节点对应此识别号的总线通信转为仅支持诊断的调度模式
通信控制请求消息 | ||||
消息方向 | 客户端→服务端 | |||
消息类型 | 请求 | |||
A_Data字节 | 描述(所以值为16进制) | 字节值 | 助记符 | |
#1 | 通信控制请求SID | 0x28 | CC | |
#2 | 子功能 = [控制类型]=使用增强的地址信息启用Rx并禁用Tx, 抑制肯定响应位 = 假 | 0x04 | ERXTX | |
#3 | 通信类型=所有与应用程序相关通信 | 0x01 | NMCP | |
#4 | 节点识别号(高字节) | 0x00 | NIN | |
#5 | 节点识别号(低字节) | 0x0A | NIN |
主节点将节点识别号0x000A对应的通信转为仅诊断调度模式,这时候此部分通信,仅可以用来接收往主节点发送的报文,而主节点只能转发给节点识别号0x000A的节点诊断报文。
通信控制肯定响应消息 | ||||
消息方向 | 服务端→客户端 | |||
消息类型 | 响应 | |||
A_Data字节 | 描述(所以值为16进制) | 字节值 | 助记符 | |
#1 | 通信控制响应SID | 0x68 | CCPR | |
#2 | 子功能 = [控制类型]=使用增强的地址信息启用Rx并禁用Tx | 0x04 | CTRLTP |
7.2.2.步骤2:将主节点对应此识别号的总线通信转为应用程序调度模式
通信控制请求消息 | ||||
消息方向 | 客户端→服务端 | |||
消息类型 | 请求 | |||
A_Data字节 | 描述(所以值为16进制) | 字节值 | 助记符 | |
#1 | 通信控制请求SID | 0x28 | CC | |
#2 | 子功能 = [控制类型]=使用增强的地址信息启用Rx和Tx, 抑制肯定响应位 = 假 | 0x05 | ERXTX | |
#3 | 通信类型=所有与应用程序相关通信 | 0x01 | NMCP | |
#4 | 节点识别号(高字节) | 0x00 | NIN | |
#5 | 节点识别号(低字节) | 0x0A | NIN |
主节点将节点识别号0x000A对应的通信转为应用程序调度模式,就时恢复前面的通信。
通信控制肯定响应消息 | ||||
消息方向 | 服务端→客户端 | |||
消息类型 | 响应 | |||
A_Data字节 | 描述(所以值为16进制) | 字节值 | 助记符 | |
#1 | 通信控制响应SID | 0x68 | CCPR | |
#2 | 子功能 = [控制类型]=使用增强的地址信息启用Rx和Tx | 0x05 | CTRLTP |
7.2.3.操作汇总
步骤1:将主节点对应此识别号的总线通信转为仅支持诊断的调度模式
步骤2:将主节点对应此识别号的总线通信转为应用程序调度模式
图解:
操作 | CAN报文 | 实体 | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ||
将主节点对应此识别号的总线通信转为仅支持诊断的调度模式 | 0x05 | 0x28 | 0x04 | 0x01 | 0x00 | 0x0A | 客户端 | ||
肯定响应 | 0x02 | 0x68 | 0x04 | 服务端 | |||||
将主节点对应此识别号的总线通信转为应用程序调度模式 | 0x05 | 0x28 | 0x05 | 0x01 | 0x00 | 0x0A | 客户端 | ||
肯定响应 | 0x02 | 0x68 | 0x05 | 服务端 |
到这里我们的0x28服务基本学完了。
以上解释有没有解决大家的疑惑,如果还是觉得有疑惑的地方,欢迎大家踊跃提出,一起分享,共同进步!!!
有CSDN号的也可以帮忙点个关注,我会陆续更新其它UDS服务。