第三章 ISO 15118-3 SLAC协议原理与实现
3.3 SLAC协议核心原理
本节详细协议中的SLAC连接过程,同时分析休眠和唤醒机制,超时机制,信号强度测量过程。
参考资料: ISO 15118-3 附录A HomePlug Green PHY on CP
3.3.1 EV-EVSE匹配过程
EV和EVSE完成SLAC匹配涉及4个对象:
- EVSE Host: 指的是SLAC检测程序,在EVSE的主MCU上运行。
- EVSE PLC node: PLC芯片, 内部运行的程序会实现应答。
- EV Host: 指的是SLAC检测程序,在EV的主MCU上运行。
- EV PLC node: PLC芯片, 内部运行的程序会实现应答。
匹配流程图:
EV发起SLAC连接过程,EVSE端作为Server端等待SLAC请求命令。
(1)程序一开始就要对PLC node进行初始化。
EVSE必须初始化本节点的NID、NMK,根据指定算法生成随机的NID、NMK。
EVSE Host发出CM_SET_KEY.REQ,node应答CM_SET_KEY.CNF。
EVSE Host在收到应答之后进入监听状态,等待时间TT_EVSE_SLAC_init(20s~50s),在此期间内等待EV端发出CM_SLAC_PARM.REQ。
(2)EV端发送CM_SLAC_PARM.REQ。
这是双方第一个SLAC命令。
EV端通过UDP广播CM_SLAC_PARM.REQ,等待TT_match_response(200ms)时间内收到应答。
EVSE收到请求后在TP_match_response(100ms)时间内发送应答CM_SLAC_PARM.CNF。
(3)EV启动衰减特性测量CM_START_ATTEN_CHAR.IND
EV端连发3次消息,间隔TP_EV_batch_msg_interval(20~50ms),目的是通知EVSE端开始进行信号衰减特性测量过程。
(4)EV发送发送探测信号(M-Sounds)确定信道质量。CM_MNBC_SOUND.IND
EV发送10次CM_MNBC_SOUND.IND,每次发送间隔TP_EV_batch_msg_interval(20~50ms),每个命令携带的数据并不相同。
EVSE PLC node在收到CM_MNBC_SOUND.IND,还会发送内部命令:CM_ATTEN_PROFILE.IND, 因此,EVSE Host程序会接受到两种包。
内部命令CM_ATTEN_PROFILE.IND, 从EVSE PLC芯片发送给EVSE Host,每条命令都携带了测量到的58组衰减数值。
EV端在发送第一条CM_START_ATTEN_CHAR.IND消息时启动定时器TT_EV_atten_results,超时时间1200ms, 要求在此期间内执行完下列过程:
3次CM_START_ATTEN_CHAR.IND+10次CM_MNBC_SOUND.IND,并收到EVSE发出的应答CM_ATTEN_CHAR.IND。
EVSE端在收到第一条CM_START_ATTEN_CHAR.IND消息时启动定时器TT_EVSE_match_MNBC, 超时时间600ms,在此期间内收到3次CM_START_ATTEN_CHAR.IND+10次CM_MNBC_SOUND.IND。 600ms之后,开始计算平均值,发出应答CM_ATTEN_CHAR.IND,这段计算时间是TP_EVSE_avg_atten_calc(100ms)。
(5)EVSE收集衰减数据并计算通信参数。
EVSE发出此应答消息CM_ATTEN_CHAR.IND ,携带了58个衰减平均值。如果没有收到应答,就重发一次,仍然没收到应答就宣告失败。
EV发送应答CM_ATTEN_CHAR.RSP, 字段Result=Success, 表示匹配成功。应答消息之后进入匹配会话阶段。
(6)可选:信号校验CM_VALIDATE.REQ
当EV端发现信号强度平均值在范围: 10db<平均值<=20db,表示发现的EVSE信号强度不足。 EV可以决定是否发起信号校验过程。
(7)EV确认匹配结果,完成链路建立。
EV发送消息CM_SLAC_MATCH.REQ请求加入逻辑网络。
EVSE发送应答CM_SLAC_MATCH.CNF, 携带了PLC Node的NID、NMK。
EV收到应答后设置自己的PLC node同样的参数,当然也是使用内部命令CM_SET_KEY.REQ。 这样双方的PLC Node就处于同一个逻辑网络了,可以正常进行15118通信了。
(8)双方进行链路检测,然后各自通知上层 D-LINK_READY
(9)可选:信号增益调整CM_AMP_MAP.REQ
当EVSE端发觉信号频谱功率密度不良时可以主动请求调整某一个频率上的发射功率。 这个过程后面会加以说明。
(10)离开逻辑网络
当双方结束了15118会话,最后一步就是通知PLC要断开连接,退出逻辑网络。
离开逻辑网络无需双方命令,各自使用内部命令CM_SET_KEY.REQ设置一个新的NID和NMK,就会退出原来的逻辑网络。之后逻辑网络中的CCo需要等待几秒钟才能发现EV已经离开网络。
【SLAC消息序列】
CM_SLAC_PARAM.REQ/RSP:参数协商(如信号强度阈值、超时时间)。
CM_START_ATTEN_CHAR.IND:启动衰减特性测量。
CM_MNBC_SOUND.IND:发送探测信号(M-Sounds)确定信道质量。
CM_ATTEN_CHAR.IND/RSP:收集衰减数据并计算通信参数。
CM_SLAC_MATCH.REQ/RSP:确认匹配结果,完成链路建立。
3.3.2 信号强度测量-参数交换
协议规定:
[V2G3-A09-20] 要使用CM_ATTEN_CHAR.IND消息中携带的所有组数据的算术平均值计算平均衰减值。可以使用加权平均值。
EV根据平均值决定应答状态:
EVSE_FOUND: 平均值<= 10db, 毫不犹豫确定发现了EVSE, 阈值C_EV_match_signalattn_direct = 10
EVSE_POTENTIALLY_FOUND: 10db<平均值<=20db, 可能的EVSE,阈值 C_EV_match_signalattn_indirect=20,
EVSE_NOT_FOUND: 20db<平均值, 信号衰减太厉害了,没发现EVSE。
[V2G3-A09-38] EV发送应答 CM_ATTEN_CHAR.RSP后,开始与选定的EVSE进行匹配处理。
-
如果EV发现状态是EVSE_FOUND,就发送 CM_SLAC_MATCH.REQ。也可以坚持进行验证。
-
如果EV发现状态是EVSE_POTENTIALLY_FOUND, 可能发送CM_SLAC_MATCH.REQ,也可能发送CM_VALIDATE.REQ。
EV完成匹配决策后,通过消息CM_SLAC_MATCH.REQ从所选的EVSE请求逻辑网络的参数。EVSE使用CM_SLAC_MATCH.CNF响应EV请求, 它包含加入EVSE的逻辑网络的所有参数。
[V2G3-A09-92] EVSE切换到私有逻辑网络,本地NMK会是一个随机值。EVSE端的配置通过发送CM_SLAC_MATCH.CNF 或提前完成。NID就是网络ID,是从NMK生成的,参考 [HPGP], 4.4.3.1。
Figure A.11 完整清楚的描述了信号强度测量过程。 -75 和-50的作用, EVSE如何发出应答包中的数字,EV端收到应答后如何计算算术平均值。
3.3.3 超时控制
根据协议evse端处理要求:
[V2G3-A09-42] EVSE收到CM_START_ATTEN_CHAR.IND,启动定时器TT_EVSE_match_MNBC timer(600ms)。
[V2G3-A09-43] 定时器TT_EVSE_match_MNBC timer运行期间,EVSE接收到一系列消息CM_ATTEN_PROFILE.IND,直到定时器过期。
[V2G3-A09-44] 定时器一旦过期,如果接收到了全部的M-Sound消息(10条),在时间TP_EVSE_avg_atten_calc(100ms)之内evse开始计算算术平均值。
[V2G3-A09-45] EVSE计算完毕后,在时间TP_EVSE_avg_atten_calc(100ms)之内发送CM_ATTEN_CHAR.IND,等待应答时间TT_match_response(200ms)。
[V2G3-A09-46] 如果EVSE没有在200ms内收到应答CM_ATTEN_CHAR.RSP,就重发一次CM_ATTEN_CHAR.IND,再等待应答时间TT_match_response(200ms)。如果还是没收到应答CM_ATTEN_CHAR.RSP,EVSE宣告匹配过程失败。
[V2G3-A09-47] 如果EVSE收到的CM_ATTEN_CHAR.RSP无效,就忽略之。 只有应答结果Result是0x00才是成功的,其它值都是失败,要忽略。
3.3.4 幅值图交换(Amplitude map exchange )
振幅图交换是一种可选的功能,它要求对应的底层通信模块来降低某些载波的传输功率。 频率范围是2 MHz to 30 MHz。实际载波有1024个,PLC Node会测量每个载波的发射,当当发现某些频点上信号较弱时,可以通知对方提高发射功率。
一般是EVSE作为请求方设备发送CM_AMP_MAP.REQ,EV应答 CM_AMP_MAP.CNF, 也就是由EVSE控制EV的载波发射功率。
CM_AMP_MAP.REQ: 一种情况是一个主机发给另一个主机请求,告之每个载波请求的传输功率。这属于双方通信
另一种情况是一个主机发给自己底层通信模块,修改传输功率。这是一方内部命令。
命令中数值解析:传输功率参考值是-50dBm/Hz, 分辨率是-2 dB, 因此0b0011表示 3*-2dB= -6dB
某通解答说PLC芯片是支持这个命令的。但是提供的示例代码中没有这个命令。 使用Sniffer进行Tx power校准。
3.3.5 逻辑网络
我们从产品的角度思考问题。
每个充电桩的PLC芯片是相同的,使用的NID和NMK参数应该是不同的。我们可以通过不同的配置文件或者代码中用随机生成方法进行区分。
每个电车的PLC芯片使用的NID和NMK也是不同的。
如果插上枪后接通了PLC电路就能直接通信的话,那么这个通信命令就会在这个PLC线路上传播到其它PLC芯片,被无关的设备接收到。因为是电力线载波通信,这样的旁路干扰很常见。
现在双方建立了逻辑网络,这样双方的命令就只被加入逻辑网络的PLC芯片接收,其它网络外的芯片是不会接收的。效果类似于大群和私聊。
只有在逻辑网络建立之后,才能运行ISO15118代码, 否则双方的PLC芯片是不会传递消息的,evcc发送SDP命令就无法得到secc的应答,永远发现不了。
当充电完成后,双方拆除线路,就各自退出逻辑网络,等待下一次充电时重新进行slac匹配。
3.3.6 NID/NMD
理解了逻辑网络后,现在介绍NID和NMK的作用。
NID(Network Identifier)
NID即网络标识符,用于唯一标识一个PLC通信网络,确保不同网络间的设备互不干扰。在PLC组网过程中,中央协调器(CCO)负责生成并分配NID,所有加入该网络的站点(STA)需同步此标识符以实现通信互联。
核心作用:
-
网络区分:通过NID判断设备是否属于同一PLC网络,避免跨网络通信冲突。
-
快速组网:在多次组网过程中,未入网的设备可通过校验NID快速恢复通信(如断电后重连时直接匹配历史NID)
NMK(Network Membership Key)
NMK即网络成员密钥,属于PLC网络的安全认证机制,用于加密通信数据并验证设备合法性,防止未授权设备接入。
核心作用:
-
数据加密:采用AES等算法对PLC信道中的传输内容加密,保障隐私与完整性。
-
权限控制:仅持有正确NMK的设备可加入网络并参与通信,增强网络安全性。
NID与NMK的协同机制
在PLC网络运行中,NID与NMK共同构建网络的安全与稳定性:
组网阶段:
-
CCO生成NID并广播,同时通过NMK加密组网指令,确保合法设备加入。
-
站点(STA)接收NID后,需验证NMK合法性以完成身份认证。
通信阶段:
-
数据包头部携带NID标识目标网络,载荷内容由NMK加密传输。
-
跨网络通信需中继设备转发,且需通过NMK验证中继节点的权限。
【总结】
-
NID确保网络的物理层连通性与管理效率,NMK保障数据链路层的安全性与隐私性。
-
通过NID区分不同配电区域的PLC子网,避免跨网络数据冲突。
-
NMK加密通信数据,确保仅授权系统可解析。
NID和NMK的生成关系
虽然协议中表明NID并非由NMK生成,二者分别负责网络标识与安全认证,属于PLC协议栈中不同层次的功能模块,但是作者在研究联芯通的PLC芯片时发现并非如此。
在某个资源包中的test程序提供了生成NID和NMK的代码。交叉编译后在板子上的运行示例:略
上述步骤很明显是先生成NMK,后生成NID。 为什么这样还不清楚原因。
3.3.7 SLAC连接过程运行示例
为了帮助读者理解SLAC过程,这里先给出XXX_SDK示例程序运行结果。
这是1#板子,固件是EVSE, 运行slac_evse
这是2#板子,固件是pev, 运行slac_pev:
结果略
上面的记录中,ev收到的信号增益均值是27dB,但是使用了-o参数,所以强制发出了CM_VALIDATE.REQ命令,然后收到了应答CM_VALIDATE.CNF。
------ 测试成功--------