您的位置:首页 > 娱乐 > 明星 > 苏州到深圳物流公司_免费发帖网站大全_qq营销软件_网站推广软件ky99

苏州到深圳物流公司_免费发帖网站大全_qq营销软件_网站推广软件ky99

2025/4/29 15:55:13 来源:https://blog.csdn.net/u012084827/article/details/146654517  浏览:    关键词:苏州到深圳物流公司_免费发帖网站大全_qq营销软件_网站推广软件ky99
苏州到深圳物流公司_免费发帖网站大全_qq营销软件_网站推广软件ky99

第三章 ISO 15118-3 SLAC协议原理与实现

3.5 软件实现方案--联芯通HLE-SDK-分析2

3.5.4 分析slac_test_pev运行流程

slac_pev是 ev端的slac测试程序,本文分析程序关键流程,运行机制,最后扩展功能,支持可选命令CM_VALIDATE.REQ的处理。

运行slac_pev

命令行参数:

 -l :  循环标记,内部循环变量loop=1。-c:  断开连接标记,内部变量 exec_disconnection = 1。 每次充电完后会中断连接。/mnt/nfs/HLE_SDK_v1.1/slac_test_pev/obj # ./slac_pev -i vc_ethspi0 -f ../pev1.txt  -d -v -l

slac_pev代码中指定参数-l就会强制设置自动断开标记,就可以省略-c。

只有上面这样才能反复运行。

入口:main()     slac_test_pev.c

关键函数:pev_main()     pev.c

do while主循环,根据状态进行分阶段处理:

pev.state状态变化:  这是大的阶段划分。

DISCONNECTED ->  未连接
UNMATCHED ->   未匹配
MATCHED         已匹配

pev.current_state:   这是依据流程发送和接收的命令状态。

/**
* This struct is used by PEV to manage its current state
*/
typedef enum
{SENT_CM_SLAC_PARM_REQ,RECEIVED_CM_SLAC_PARM_CNF,SENT_CM_START_ATTEN_CHAR_IND,RECEIVED_CM_ATTEN_CHAR_IND,RECEIVED_CM_SLAC_MATCH_CNF
} pev_state;

(1)DISCONNECTED状态下读取PLC芯片状态,结果是未连接状态:状态前进到UNMATCHED,启动下面的匹配过程。

(2)UNMATCHED状态下,依次完成这些命令: 

CM_SLAC_PARM.REQ: EV广播用于后序信号强度测量的参数
CM_SLAC_PARM.CNF:EV从发送请求开始等待TT_match_response(200ms)时间内收到EVSE的应答CM_START_ATTEN_CHAR.IND
CM_START_ATTEN_CHAR.IND
CM_START_ATTEN_CHAR.IND   EV端连发3次消息,间隔TP_EV_batch_msg_interval(20~50ms)。CM_MNBC_SOUND.IND  EV端发送10次消息,计数器cnt递减。
CM_MNBC_SOUND.IND
CM_MNBC_SOUND.IND
CM_MNBC_SOUND.IND
CM_MNBC_SOUND.IND
CM_MNBC_SOUND.IND
CM_MNBC_SOUND.IND
CM_MNBC_SOUND.IND
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.INDCM_ATTEN_CHAR.IND     等待EVSE发出此应答消息, 携带了58个衰减平均值。 
CM_ATTEN_CHAR.RSP     EV发送应答, Result=Success, 表示匹配成功。应答消息之后进入匹配会话阶段,/* --- 协议中有一段可选流程,实测中没有  --- */
CM_VALIDATE.REQ    EV可控制是否发送验证请求1。
CM_VALIDATE.CNF    接收EVSE应答1 
CM_VALIDATE.REQ     EV可控制是否发送验证请求2。
CM_VALIDATE.CNF    接收EVSE应答2。CM_SLAC_MATCH.REQ    EV发送消息请求逻辑网络的参数,收到应答后加入逻辑网络。
CM_SLAC_MATCH.CNF    等待EVSE应答,

当处理到最后消息CM_SLAC_MATCH.CNF成功时,表示双方PLC节点SLAC匹配成功,pev.state切换为MATCHED。

(3)MATCHED状态下,模拟充电,等待一段时间后断开连接。

3.5.4.1 定时器机制

pev端的定时器函数 

int make_pev_timer(pev *pev_status, int expire_ms, int interval_ms)

代码中有两个定时器:

  • cm_slac_parm_timer_id : 发送第一条消息CM_SLAC_PARM.REQ等待应答, 超时时间200ms,无应答就重发一次,然后自动停止定时器。

  • cm_start_atten_char_timer_id:从发送CM_START_ATTEN_CHAR.IND消息后开始计时1200ms,循环等待收到EVSE的测量结果CM_ATTEN_CHAR.IND ,超时后清除标记pev.cm_start_atten_char_timer_flag=0,退出等待循环。

3.5.4.1.1 定时器cm_slac_parm_timer_id

这个定时参数是: 延时200ms,间隔0ms。 这表示定时器在200ms后触发一次,然后自动销毁。

在代码中发送CM_SLAC_PARM.REQ后就陷入while循环,等待接收应答CM_ATTEN_CHAR.RSP。定时器超时后设置控制标志pev.cm_slac_parm_timer_flag=0,这样就退出了while循环,继续进行上一层循环,重发一次CM_SLAC_PARM.REQ。

3.5.4.1.2 定时器cm_start_atten_char_timer_id

这个定时器延时1200ms,间隔0ms,只触发一次。

EV从发送CM_START_ATTEN_CHAR.IND消息后开始计时1200ms,循环等待收到EVSE的测量结果CM_ATTEN_CHAR.IND ,超时后清除标记pev.cm_start_atten_char_timer_flag=0,退出等待循环。

在这段时间内,EV要发送这些消息:

CM_START_ATTEN_CHAR.IND
CM_START_ATTEN_CHAR.IND
CM_START_ATTEN_CHAR.IND   EV端连发3次消息,间隔TP_EV_batch_msg_interval(20~50ms)。CM_MNBC_SOUND.IND  EV端发送10次消息,计数器cnt递减。
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.IND  
CM_MNBC_SOUND.IND

在pev端, 定时器1200ms没有及时销毁,导致在进入充电睡眠中定时器超时触发,错误的唤醒了睡眠,导致流程错误。

【改进方法】应该在收到EVSE的测量结果CM_ATTEN_CHAR.IND时就销毁定时器。

3.5.4.2 收到CM_ATTEN_CHAR.IND

代码中EV收到CM_ATTEN_CHAR.IND命令并没有退出循环,还是等待到1200ms超时后才停止循环。

这一点是错误的, 应该收到后就退出循环。

pev_cm_atten_char_ind_receive()函数中计算信号强度增益值, 保存在evse的参数中。

target_evse->send_cn_atten_char_ind_flag = 1;
target_evse->AAG = average_AAG;

pev_cm_atten_char_rsp_send()函数中发送信号强度增益值匹配结果

代码中没有对上一步的计算结果进行检查,强制设置result=0:表示成功。

atten_rsp.ACVarField.result = 0;

分析结束。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com