Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
DC360_1drap3_xiaoju_V1
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
丁雨邯
DC360_1drap3_xiaoju_V1
Commits
a044ceb9
提交
a044ceb9
authored
5月 19, 2020
作者:
wysheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
梳理TCU通讯协议,修改部分错误
上级
517c7b69
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
246 行增加
和
128 行删除
+246
-128
Drv_TCUComm.c
DcPillar/Src/Drivers/Drv_TCUComm.c
+245
-127
Drv_TCUComm.h
DcPillar/Src/Drivers/Drv_TCUComm.h
+1
-1
没有找到文件。
DcPillar/Src/Drivers/Drv_TCUComm.c
浏览文件 @
a044ceb9
...
@@ -691,40 +691,17 @@ void StartMeg(StructTCUSend * pPgnRecv)
...
@@ -691,40 +691,17 @@ void StartMeg(StructTCUSend * pPgnRecv)
/*
/*
00H:成功
00H:成功
01H:数据合法性校验失败(“充电启动帧”中“负荷控制开关”等数据项合法性校验失败)
02H:充电控制器与计费控制单元通讯超时(“计费控制单元心跳帧”接收超时)
03H:充电控制器与计费控制单元“版本校验”未完成
04H:充电控制器与计费控制单元“下发充电参数”未完成
05H:充电桩暂停服务(参见9.7节 充电服务启停控制)
06H:充电桩处于“工作”状态
07H:充电桩处于“暂停”状态(参见GB/T 27930-2015中10.3.3和10.3.4小节)
08H:充电桩与车辆处于未连接状态
09H:急停按钮动作故障
0AH:门禁故障(充电桩)
0BH:避雷器故障
0CH:烟感故障
0CH:烟感故障
0DH:充电桩过温故障(一体式充电桩内部过温故障保护,分体式充电桩充电机柜内部过温故障保护或充电桩内部过温故障保护)
0DH:充电桩过温故障(一体式充电桩内部过温故障保护,分体式充电桩充电机柜内部过温故障保护或充电桩内部过温故障保护)
0EH:充电接口过温故障
0EH:充电接口过温故障
0FH:充电接口电子锁故障
10H:绝缘监测故障(仅直流桩使用)
11H:电池极性反接故障(仅直流桩使用)
12H:BMS通信超时故障(仅直流桩使用)备注:还未进入自检阶段,实际不存在此失败原因
13H:输入高压断路器故障
14H:输入高压接触器拒动/误动故障
14H:输入高压接触器拒动/误动故障
15H:输入高压接触器粘连故障
15H:输入高压接触器粘连故障
16H:输出高压接触器拒动/误动故障
16H:输出高压接触器拒动/误动故障
17H:输出高压接触器粘连故障
18H:输出高压熔断器故障
18H:输出高压熔断器故障
19H:并联接触器拒动/误动故障(仅直流桩使用)
19H:并联接触器拒动/误动故障(仅直流桩使用)
1AH:并联接触器粘连故障(仅直流桩使用)
1BH:泄放回路故障
1BH:泄放回路故障
1CH:辅助电源故障(仅直流桩使用)
1CH:辅助电源故障(仅直流桩使用)
1DH:充电机模块故障
1EH:输入电源故障(交流输入电压过压故障、交流输入电压欠压故障、交流输入缺相故障、交流输入电流过流故障等)
1FH:输出电压过压故障
20H:输出电压欠压故障
20H:输出电压欠压故障
21H:输出电流过流故障
22H:输出短路故障
23H:无空余充电机模块可用(仅限具备功率分配功能的直流充电桩使用)
23H:无空余充电机模块可用(仅限具备功率分配功能的直流充电桩使用)
24H:预留
24H:预留
25H:门禁故障(充电机柜,仅直流桩使用)
25H:门禁故障(充电机柜,仅直流桩使用)
...
@@ -738,54 +715,55 @@ void StartMeg(StructTCUSend * pPgnRecv)
...
@@ -738,54 +715,55 @@ void StartMeg(StructTCUSend * pPgnRecv)
2DH:灯板通信故障
2DH:灯板通信故障
2EH: 电能表通信故障
2EH: 电能表通信故障
FFH:充电桩其他故障
FFH:充电桩其他故障
*/
*/
u8
AllowDTUStartCharge
(
u8
*
Reason
)
u8
AllowDTUStartCharge
(
u8
*
Reason
)
{
{
if
(
TCUCurChgRecd
.
StarValid
==
0
)
if
(
TCUCurChgRecd
.
StarValid
==
0
)
*
Reason
=
0x01
;
*
Reason
=
0x01
;
//数据合法性校验失败(“充电启动帧”中“负荷控制开关”等数据项合法性校验失败)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
*
Reason
=
0x02
;
*
Reason
=
0x02
;
//充电控制器与计费控制单元通讯超时(“计费控制单元心跳帧”接收超时)
else
if
(
TCUCommuStatus
.
VerChkVaild
==
0
)
else
if
(
TCUCommuStatus
.
VerChkVaild
==
0
)
*
Reason
=
0x03
;
*
Reason
=
0x03
;
//03H:充电控制器与计费控制单元“版本校验”未完成
else
if
(
TCUCommuStatus
.
ParamVaild
==
0
)
else
if
(
TCUCommuStatus
.
ParamVaild
==
0
)
*
Reason
=
0x04
;
*
Reason
=
0x04
;
//04H:充电控制器与计费控制单元“下发充电参数”未完成
else
if
(
TCUControlInfo
.
ChargingServiceFlag
==
0x01
)
//服务暂停
else
if
(
TCUControlInfo
.
ChargingServiceFlag
==
0x01
)
//服务暂停
*
Reason
=
0x05
;
*
Reason
=
0x05
;
//05H:充电桩暂停服务(参见9.7节 充电服务启停控制)
else
if
(
ChargeCtrl
.
CurProcess
!=
eChgPro_ChgIdle
)
else
if
(
ChargeCtrl
.
CurProcess
!=
eChgPro_ChgIdle
)
*
Reason
=
0x06
;
*
Reason
=
0x06
;
//06H:充电桩处于“工作”状态
else
if
(
ChargePauseFlag
==
1
)
//充电暂停
else
if
(
ChargePauseFlag
==
1
)
//充电暂停
*
Reason
=
0x07
;
*
Reason
=
0x07
;
//07H:充电桩处于“暂停”状态(参见GB/T 27930-2015中10.3.3和10.3.4小节)
else
if
(
eSwSta_On
!=
CcStatusRead
())
else
if
(
eSwSta_On
!=
CcStatusRead
())
*
Reason
=
0x08
;
*
Reason
=
0x08
;
//08H:充电桩与车辆处于未连接状态
else
if
(
PillarError
.
Value
.
Emergency
==
1
)
else
if
(
PillarError
.
Value
.
Emergency
==
1
)
*
Reason
=
0x09
;
*
Reason
=
0x09
;
//09H:急停按钮动作故障
else
if
(
PillarError
.
Value
.
Door
==
1
)
else
if
(
PillarError
.
Value
.
Door
==
1
)
*
Reason
=
0x0A
;
*
Reason
=
0x0A
;
//0AH:门禁故障(充电桩)
else
if
(
PillarError
.
Value
.
SPD
==
1
)
else
if
(
PillarError
.
Value
.
SPD
==
1
)
*
Reason
=
0x0B
;
*
Reason
=
0x0B
;
//0BH:避雷器故障
else
if
(
PillarError
.
Value
.
EleLock
==
1
)
else
if
(
PillarError
.
Value
.
EleLock
==
1
)
*
Reason
=
0x0F
;
*
Reason
=
0x0F
;
//0FH:充电接口电子锁故障
else
if
((
PillarError
.
Value
.
Insulation
==
1
)
||
(
PillarError
.
Value
.
ImdDev
==
1
))
else
if
((
PillarError
.
Value
.
Insulation
==
1
)
||
(
PillarError
.
Value
.
ImdDev
==
1
))
*
Reason
=
0x010
;
*
Reason
=
0x010
;
//10H:绝缘监测故障(仅直流桩使用)
else
if
(
ChargeStopType
==
eChgStop_PillarReady_BatVoltError
)
else
if
(
ChargeStopType
==
eChgStop_PillarReady_BatVoltError
)
*
Reason
=
0x11
;
*
Reason
=
0x11
;
//11H:电池极性反接故障(仅直流桩使用)
else
if
((
ChargeStopType
==
eChgStop_Imd_BhmTimeOut
)
||
(
ChargeStopType
==
eChgStop_ComBreak_CommError
))
else
if
((
ChargeStopType
==
eChgStop_Imd_BhmTimeOut
)
||
(
ChargeStopType
==
eChgStop_ComBreak_CommError
))
*
Reason
=
0x12
;
*
Reason
=
0x12
;
//12H:BMS通信超时故障(仅直流桩使用)备注:还未进入自检阶段,实际不存在此失败原因
else
if
(
PillarError
.
Value
.
ACContactor
==
1
)
else
if
(
PillarError
.
Value
.
ACContactor
==
1
)
*
Reason
=
0x13
;
*
Reason
=
0x13
;
//13H:输入高压断路器故障
else
if
(
PillarError
.
Value
.
Contactor
)
else
if
(
PillarError
.
Value
.
Contactor
)
*
Reason
=
0x17
;
*
Reason
=
0x17
;
//17H:输出高压接触器粘连故障
else
if
(
PillarError
.
Value
.
UniContactor
)
else
if
(
PillarError
.
Value
.
UniContactor
)
*
Reason
=
0x1A
;
*
Reason
=
0x1A
;
//1AH:并联接触器粘连故障(仅直流桩使用)
else
if
(
PillarError
.
Value
.
DCmodError
)
else
if
(
PillarError
.
Value
.
DCmodError
)
*
Reason
=
0x1D
;
*
Reason
=
0x1D
;
//1DH:充电机模块故障
else
if
(
PillarError
.
Value
.
InVolt
)
*
Reason
=
0x1E
;
//1EH:输入电源故障(交流输入电压过压故障、交流输入电压欠压故障、交流输入缺相故障、交流输入电流过流故障等)
else
if
(
PillarError
.
Value
.
OutVolt
)
else
if
(
PillarError
.
Value
.
OutVolt
)
*
Reason
=
0x1F
;
*
Reason
=
0x1F
;
//1FH:输出电压过压故障
else
if
(
PillarError
.
Value
.
OutCurrt
)
else
if
(
PillarError
.
Value
.
OutCurrt
)
*
Reason
=
0x21
;
*
Reason
=
0x21
;
//21H:输出电流过流故障
else
if
(
ChargeStopType
==
eChgStop_Imd_Short
)
else
if
(
ChargeStopType
==
eChgStop_Imd_Short
)
*
Reason
=
0x22
;
*
Reason
=
0x22
;
//22H:输出短路故障
else
else
{
{
*
Reason
=
0x00
;
*
Reason
=
0x00
;
...
@@ -837,6 +815,8 @@ u8 AllowDTUStartCharge_B(u8 * Reason)
...
@@ -837,6 +815,8 @@ u8 AllowDTUStartCharge_B(u8 * Reason)
*
Reason
=
0x1A
;
*
Reason
=
0x1A
;
else
if
(
PillarError_B
.
Value
.
DCmodError
)
else
if
(
PillarError_B
.
Value
.
DCmodError
)
*
Reason
=
0x1D
;
*
Reason
=
0x1D
;
else
if
(
PillarError_B
.
Value
.
InVolt
)
*
Reason
=
0x1E
;
else
if
(
PillarError_B
.
Value
.
OutVolt
)
else
if
(
PillarError_B
.
Value
.
OutVolt
)
*
Reason
=
0x1F
;
*
Reason
=
0x1F
;
else
if
(
PillarError_B
.
Value
.
OutCurrt
)
else
if
(
PillarError_B
.
Value
.
OutCurrt
)
...
@@ -908,47 +888,25 @@ void StartMegAck_B(void)
...
@@ -908,47 +888,25 @@ void StartMegAck_B(void)
/*
/*
00H:成功
00H:成功
01H:充电中控制导引故障
01H:充电中控制导引故障
02H:充电控制器与计费控制单元通讯超时
03H:急停按钮动作故障
04H:门禁故障(充电桩)
05H:避雷器故障
06H:烟感故障
06H:烟感故障
07H:交流输入断路器故障
08H:交流输入接触器拒动/误动故障
08H:交流输入接触器拒动/误动故障
09H:交流输入接触器粘连故障
09H:交流输入接触器粘连故障
0AH:交流输入故障(过压,欠压,缺相,过流)
0BH:充电桩过温故障
0BH:充电桩过温故障
0CH:充电接口过温故障
0CH:充电接口过温故障
0DH:充电接口电子锁故障
0EH:绝缘监测故障
0FH:电池极性反接故障
10H:直流输出接触器拒动/误动故障
10H:直流输出接触器拒动/误动故障
11H:直流输出接触器粘连故障
12H:直流输出熔断器故障
12H:直流输出熔断器故障
13H:并联接触器拒动/误动故障
13H:并联接触器拒动/误动故障
14H:并联接触器粘连故障
15H:泄放回路故障
15H:泄放回路故障
16H:辅助电源故障
16H:辅助电源故障
17H:充电机模块故障
18H:直流母线输出电压过压故障
19H:直流母线输出电压欠压故障
19H:直流母线输出电压欠压故障
1AH:直流母线输出电流过流故障
1BH:直流母线输出短路故障
1CH:电池最高允许充电电压小于充电机最小输出电压
1DH:绝缘监测前直流输出接触器外侧电压≥10 V
1EH:启动充电前直流输出接触器外侧电压与通信报文电池电压相差>±5%
1FH:启动充电前直流输出接触器外侧电压小于充电机最小输出电压
1FH:启动充电前直流输出接触器外侧电压小于充电机最小输出电压
20H:启动充电前直流输出接触器外侧电压大于充电机最大输出电压
20H:启动充电前直流输出接触器外侧电压大于充电机最大输出电压
21H:电池端电压大于电池最高允许充电电压
21H:电池端电压大于电池最高允许充电电压
22H:BRM 报文接收超时
23H:BRM 报文数据项异常(报文数据长度错误,BMS 通信协议版本号错误,其他数据错误)
23H:BRM 报文数据项异常(报文数据长度错误,BMS 通信协议版本号错误,其他数据错误)
24H:BCP 报文接收超时
25H:BCP 报文数据项异常(报文数据长度错误,电池当前电压越限,其他数据项错误)
25H:BCP 报文数据项异常(报文数据长度错误,电池当前电压越限,其他数据项错误)
26H:BRO 报文(0x00)接收超时
26H:BRO 报文(0x00)接收超时
27H:BRO 报文(0xAA)接收超时
28H:预留
28H:预留
29H:BCL报文接收超时
2AH:BCS报文接收超时
2BH:门禁故障(充电机柜,仅直流桩使用)
2BH:门禁故障(充电机柜,仅直流桩使用)
2CH:水浸故障(充电桩)
2CH:水浸故障(充电桩)
2DH:水浸故障(充电机柜,仅直流桩使用)
2DH:水浸故障(充电机柜,仅直流桩使用)
...
@@ -967,11 +925,8 @@ void StartMegAck_B(void)
...
@@ -967,11 +925,8 @@ void StartMegAck_B(void)
3AH:灯板通信故障
3AH:灯板通信故障
3BH:绝缘监测超时
3BH:绝缘监测超时
3CH:电能表通信故障
3CH:电能表通信故障
3DH: 车辆验证确认帧超时
3FH:车辆鉴权不通过
FFH:充电机其他故障
FFH:充电机其他故障
*/
*/
u8
AllowDTUStartCompCharge
(
u8
*
Reason
)
u8
AllowDTUStartCompCharge
(
u8
*
Reason
)
{
{
...
@@ -981,55 +936,59 @@ u8 AllowDTUStartCompCharge(u8 * Reason)
...
@@ -981,55 +936,59 @@ u8 AllowDTUStartCompCharge(u8 * Reason)
return
TRUE
;
return
TRUE
;
}
}
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
*
Reason
=
0x02
;
//通讯超时
*
Reason
=
0x02
;
//
充电控制器与计费控制单元
通讯超时
else
if
(
PillarError
.
Value
.
Emergency
==
1
)
else
if
(
PillarError
.
Value
.
Emergency
==
1
)
*
Reason
=
0x03
;
*
Reason
=
0x03
;
//03H:急停按钮动作故障
else
if
(
PillarError
.
Value
.
Door
==
1
)
else
if
(
PillarError
.
Value
.
Door
==
1
)
*
Reason
=
0x04
;
*
Reason
=
0x04
;
//04H:门禁故障(充电桩)
else
if
(
PillarError
.
Value
.
SPD
==
1
)
else
if
(
PillarError
.
Value
.
SPD
==
1
)
*
Reason
=
0x05
;
*
Reason
=
0x05
;
//05H:避雷器故障
else
if
(
PillarError
.
Value
.
ACContactor
==
1
)
else
if
(
PillarError
.
Value
.
ACContactor
==
1
)
*
Reason
=
0x07
;
*
Reason
=
0x07
;
//07H:交流输入断路器故障
else
if
(
PillarError
.
Value
.
InVolt
==
1
)
else
if
(
PillarError
.
Value
.
InVolt
==
1
)
*
Reason
=
0x0A
;
*
Reason
=
0x0A
;
//0AH:交流输入故障(过压,欠压,缺相,过流)
else
if
(
PillarError
.
Value
.
EleLock
==
1
)
else
if
(
PillarError
.
Value
.
EleLock
==
1
)
*
Reason
=
0x0D
;
*
Reason
=
0x0D
;
//0DH:充电接口电子锁故障
else
if
((
PillarError
.
Value
.
Insulation
==
1
)
||
(
PillarError
.
Value
.
ImdDev
==
1
))
else
if
((
PillarError
.
Value
.
Insulation
==
1
)
||
(
PillarError
.
Value
.
ImdDev
==
1
))
*
Reason
=
0x0E
;
*
Reason
=
0x0E
;
//0EH:绝缘监测故障
else
if
(
ChargeStopType
==
eChgStop_PillarReady_BatVoltError
)
else
if
(
ChargeStopType
==
eChgStop_PillarReady_BatVoltError
)
*
Reason
=
0x0F
;
*
Reason
=
0x0F
;
//0FH:电池极性反接故障
else
if
(
PillarError
.
Value
.
Contactor
)
else
if
(
PillarError
.
Value
.
Contactor
)
*
Reason
=
0x11
;
*
Reason
=
0x11
;
//11H:直流输出接触器粘连故障
else
if
(
PillarError
.
Value
.
UniContactor
)
else
if
(
PillarError
.
Value
.
UniContactor
)
*
Reason
=
0x14
;
*
Reason
=
0x14
;
//14H:并联接触器粘连故障
else
if
(
PillarError
.
Value
.
DCmodError
)
else
if
(
PillarError
.
Value
.
DCmodError
)
*
Reason
=
0x17
;
*
Reason
=
0x17
;
//17H:充电机模块故障
else
if
(
PillarError
.
Value
.
OutVolt
)
else
if
(
PillarError
.
Value
.
OutVolt
)
*
Reason
=
0x18
;
*
Reason
=
0x18
;
//18H:直流母线输出电压过压故障
else
if
(
PillarError
.
Value
.
OutCurrt
)
else
if
(
PillarError
.
Value
.
OutCurrt
)
*
Reason
=
0x1A
;
*
Reason
=
0x1A
;
//1AH:直流母线输出电流过流故障
else
if
(
PillarError
.
Value
.
OutShort
)
else
if
(
PillarError
.
Value
.
OutShort
)
*
Reason
=
0x1B
;
*
Reason
=
0x1B
;
//1BH:直流母线输出短路故障
else
if
(
ChargeStopType
==
eChgStop_Imd_Short
)
else
if
(
ChargeStopType
==
eChgStop_Imd_Short
)
*
Reason
=
0x1B
;
*
Reason
=
0x1B
;
else
if
(
ChargeStopType
==
eChgStop_Conf_ChgMaxVoltLessPillarMinVolt
)
else
if
(
ChargeStopType
==
eChgStop_Conf_ChgMaxVoltLessPillarMinVolt
)
*
Reason
=
0x1C
;
*
Reason
=
0x1C
;
//1CH:电池最高允许充电电压小于充电机最小输出电压
else
if
(
TCUCurChgRecd
.
TCUChgStopType
==
0x1d
)
else
if
(
TCUCurChgRecd
.
TCUChgStopType
==
0x1d
)
*
Reason
=
0x1D
;
*
Reason
=
0x1D
;
//1DH:绝缘监测前直流输出接触器外侧电压≥10 V
else
if
(
ChargeStopType
==
eChgStop_PillarReady_BatVoltMismatchBcpVolt
)
else
if
(
ChargeStopType
==
eChgStop_PillarReady_BatVoltMismatchBcpVolt
)
*
Reason
=
0x1E
;
*
Reason
=
0x1E
;
//1EH:启动充电前直流输出接触器外侧电压与通信报文电池电压相差>±5%
else
if
(
CemMsg
.
Cem
.
Value
.
Brm
==
1
)
else
if
(
CemMsg
.
Cem
.
Value
.
Brm
==
1
)
*
Reason
=
0x22
;
*
Reason
=
0x22
;
//22H:BRM 报文接收超时
else
if
(
CemMsg
.
Cem
.
Value
.
Bcp
==
1
)
else
if
(
CemMsg
.
Cem
.
Value
.
Bcp
==
1
)
*
Reason
=
0x24
;
*
Reason
=
0x24
;
//24H:BCP 报文接收超时
else
if
(
CemMsg
.
Cem
.
Value
.
Bro
==
1
)
else
if
(
CemMsg
.
Cem
.
Value
.
Bro
==
1
)
*
Reason
=
0x27
;
*
Reason
=
0x27
;
//27H:BRO 报文(0xAA)接收超时
else
if
((
CemMsg
.
Cem
.
Value
.
Bro
!=
0
)
||
(
ChargeStopType
!=
0
))
else
if
((
CemMsg
.
Cem
.
Value
.
Bro
!=
0
)
||
(
ChargeStopType
!=
0
))
*
Reason
=
0x28
;
*
Reason
=
0x28
;
else
if
(
CemMsg
.
Cem
.
Value
.
Bcl
==
1
)
*
Reason
=
0x29
;
//29H:BCL报文接收超时
else
if
(
CemMsg
.
Cem
.
Value
.
Bcs
==
1
)
*
Reason
=
0x2A
;
//2AH:BCS报文接收超时
else
if
((
VerificaInfo
.
result
==
1
)
&&
(
StartMeg_A
.
PlugToChgFlag
==
1
))
else
if
((
VerificaInfo
.
result
==
1
)
&&
(
StartMeg_A
.
PlugToChgFlag
==
1
))
*
Reason
=
0x
29
;
*
Reason
=
0x
3D
;
//3DH: 车辆验证确认帧超时
else
if
(
TCUCommuStatus
.
ErrData
.
Value
.
verificationAck
==
1
)
else
if
(
TCUCommuStatus
.
ErrData
.
Value
.
verificationAck
==
1
)
*
Reason
=
0x3
0
;
*
Reason
=
0x3
F
;
//3FH:车辆鉴权不通过
else
if
(
TCUCurChgRecd
.
TCUStartCompresult
==
2
)
else
if
(
TCUCurChgRecd
.
TCUStartCompresult
==
2
)
*
Reason
=
0x01
;
//控制导引故障
*
Reason
=
0x01
;
//控制导引故障
else
else
...
@@ -1092,10 +1051,14 @@ u8 AllowDTUStartCompCharge_B(u8 * Reason)
...
@@ -1092,10 +1051,14 @@ u8 AllowDTUStartCompCharge_B(u8 * Reason)
*
Reason
=
0x27
;
*
Reason
=
0x27
;
else
if
((
CemMsg_B
.
Cem
.
Value
.
Bro
!=
0
)
||
(
ChargeStopType_B
!=
0
))
else
if
((
CemMsg_B
.
Cem
.
Value
.
Bro
!=
0
)
||
(
ChargeStopType_B
!=
0
))
*
Reason
=
0x28
;
*
Reason
=
0x28
;
else
if
(
CemMsg_B
.
Cem
.
Value
.
Bcl
==
1
)
*
Reason
=
0x29
;
//29H:BCL报文接收超时
else
if
(
CemMsg_B
.
Cem
.
Value
.
Bcs
==
1
)
*
Reason
=
0x2A
;
//2AH:BCS报文接收超时
else
if
((
VerificaInfo_B
.
result
==
1
)
&&
(
StartMeg_B
.
PlugToChgFlag
==
1
))
else
if
((
VerificaInfo_B
.
result
==
1
)
&&
(
StartMeg_B
.
PlugToChgFlag
==
1
))
*
Reason
=
0x
29
;
*
Reason
=
0x
3D
;
else
if
(
TCUCommuStatus_B
.
ErrData
.
Value
.
verificationAck
==
1
)
else
if
(
TCUCommuStatus_B
.
ErrData
.
Value
.
verificationAck
==
1
)
*
Reason
=
0x3
0
;
*
Reason
=
0x3
F
;
else
if
(
TCUCurChgRecd_B
.
TCUStartCompresult
==
2
)
else
if
(
TCUCurChgRecd_B
.
TCUStartCompresult
==
2
)
*
Reason
=
0x01
;
//控制导引故障
*
Reason
=
0x01
;
//控制导引故障
else
else
...
@@ -1235,8 +1198,8 @@ void startCompSend_B(void)
...
@@ -1235,8 +1198,8 @@ void startCompSend_B(void)
Data
[
len
++
]
=
BrmMsg_B
.
BatType
;
Data
[
len
++
]
=
BrmMsg_B
.
BatType
;
Data
[
len
++
]
=
BcpMsg_B
.
MaxTemp
;
Data
[
len
++
]
=
BcpMsg_B
.
MaxTemp
;
Data
[
len
++
]
=
(
u8
)
(
BcpMsg
.
ChgMaxVolt
>>
0
);
//最高允许充电电压 BIN码 2
Data
[
len
++
]
=
(
u8
)
(
BcpMsg
_B
.
ChgMaxVolt
>>
0
);
//最高允许充电电压 BIN码 2
Data
[
len
++
]
=
(
u8
)
(
BcpMsg
.
ChgMaxVolt
>>
8
);
Data
[
len
++
]
=
(
u8
)
(
BcpMsg
_B
.
ChgMaxVolt
>>
8
);
//单体最高允许充电电压
//单体最高允许充电电压
Data
[
len
++
]
=
(
u8
)
(
BcpMsg_B
.
PerBatMaxVolt
>>
0
);
Data
[
len
++
]
=
(
u8
)
(
BcpMsg_B
.
PerBatMaxVolt
>>
0
);
Data
[
len
++
]
=
(
u8
)
(
BcpMsg_B
.
PerBatMaxVolt
>>
8
);
Data
[
len
++
]
=
(
u8
)
(
BcpMsg_B
.
PerBatMaxVolt
>>
8
);
...
@@ -1364,7 +1327,59 @@ void StopMegAck_B(void)
...
@@ -1364,7 +1327,59 @@ void StopMegAck_B(void)
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_stopAck
,
4
,
ChargerCont1939Addr_B
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_stopAck
,
4
,
ChargerCont1939Addr_B
);
}
}
/*
01H:计费控制单元正常停止
02H:计费控制单元自身故障终止
03H:计费控制单元判断充电控制器故障停止
04H:启动完成状态帧确认超时故障终止
05H:充电中控制导引故障
06H:充电控制器与计费控制单元通讯超时
07H:充电桩充电中暂停超时
08H:急停按钮动作故障
09H:门禁故障(充电桩)
0AH:避雷器故障
0BH:烟感故障
0CH:交流输入断路器故障
0DH:交流输入接触器拒动/误动故障
0EH:交流输入接触器粘连故障
0FH:交流输入故障(过压,欠压,缺相,过流)
10H:充电桩过温故障
11H:充电接口过温故障
12H:充电接口电子锁故障
13H:直流输出接触器拒动/误动故障
14H:直流输出接触器粘连故障
15H:直流输出熔断器故障
16H:并联接触器拒动/误动故障
17H:并联接触器粘连故障
18H:泄放回路故障
19H:辅助电源故障
1AH:充电机模块故障
1BH:直流母线输出电压过压故障
1CH:直流母线输出电压欠压故障
1DH:直流母线输出电流过流故障
1EH:直流母线输出短路故障
1FH:电池充电需求报文(BCL)超时
20H:电池充电总状态报文(BCS)超时
21H:动力蓄电池状态信息(BSM)超时
22H:BSM 报文中单体动力蓄电池电压过压
23H:BSM 报文中单体动力蓄电池电压过低
24H:BSM 报文中SOC 过高
25H:BSM 报文中SOC 过低
26H:BSM 报文中充电过电流
27H:BSM 报文中动力蓄电池温度过高
28H:BSM 报文中动力蓄电池绝缘状态异常
29H:BSM 报文中连接器连接状态异常
2AH:BMS 正常终止充电
2BH:BMS 异常终止充电
2CH:充电桩判断BMS 其他异常终止
2DH:预留
2EH:无有效电流停止
2FH:环境监控板通信故障
30H:灯板通信故障
31H: 电能表通信故障
FFH:充电桩其他故障
*/
void
GetStopReason_A
(
u8
*
stopReason
)
void
GetStopReason_A
(
u8
*
stopReason
)
{
{
if
(
TCUCurChgRecd
.
TCUChgStopType
==
1
)
if
(
TCUCurChgRecd
.
TCUChgStopType
==
1
)
...
@@ -1527,32 +1542,123 @@ void stopCompSend_A(void)
...
@@ -1527,32 +1542,123 @@ void stopCompSend_A(void)
u8
reason
;
u8
reason
;
Data
[
len
++
]
=
0x00
;
Data
[
len
++
]
=
0x00
;
//停止原因
GetStopReason_A
(
&
reason
);
GetStopReason_A
(
&
reason
);
Data
[
len
++
]
=
reason
;
//成功标识
Data
[
len
++
]
=
reason
;
Data
[
len
++
]
=
00
;
//成功标识
Data
[
len
++
]
=
00
;
//BMS中止充电原因
/*
第 1~2 位:达到所需求的 SOC 目标值
<00>:=未达到所需SOC目标值;
<01>:=达到所需SOC 目标值;
<10>:=不可信状态;
第 3~4 位:达到总电压的设定值
<00>:=未达到总电压设定值;
<01>:=达到总电压设定值;
<10>:=不可信状态;
第 5~6 位:达到单体电压的设定值
<00>:=未达到单体电压设定值;
<01>:=达到单体电压设定值;
<10>:=不可信状态;
第 7~8 位:充电机主动中止
<00>:=正常;
<01>:=充电机中止(收到 CST 帧);
<10>:=不可信状态。
*/
Data
[
len
++
]
=
BstMsg
.
StopReason
.
Mult
;
Data
[
len
++
]
=
BstMsg
.
StopReason
.
Mult
;
//BMS充电故障原因
/*
第 1~2 位:绝缘故障
<00>:=正常;
<01>:=故障;
<10>:=不可信状态;
第 3~4 位:输出连接器过温故障
<00>:=正常;
<01>:=故障;
<10>:=不可信状态;
第 5~6 位:BMS 元件、输出连接器过温
<00>:=正常;
<01>:=故障;
<10>:=不可信状态;
第 7~8 位:充电连接器故障
<00>:=充电连接器正常;
<01>:=充电连接器故障;
<10>:=不可信状态;
第 9~10 位:电池组温度过高故障
<00>:=电池组温度正常;
<01>:=电池组温度过高;
<10>:=不可信状态;
第 11~12 位:高压继电器故障
<00>:=正常;
<01>:=故障;
<10>:=不可信状态;
第 13~14 位:检测点 2 电压检测故障
<00>:=正常;
<01>:=故障;
<10>:=不可信状态;
第 15~16 位:其他故障
<00>:=正常;
<01>:=故障;
<10>:=不可信状态。
*/
Data
[
len
++
]
=
BstMsg
.
StopTruble
.
Mult
;
Data
[
len
++
]
=
BstMsg
.
StopTruble
.
Mult
;
Data
[
len
++
]
=
BstMsg
.
StopTruble
.
Mult
>>
8
;
Data
[
len
++
]
=
BstMsg
.
StopTruble
.
Mult
>>
8
;
//BMS 中止错误原因
/*
第 1~2 位:电流过大
<00>:=电流正常;
<01>:=电流超过需求值;
<10>:=不可信状态;
第 3~4 位:电压异常
<00>:=正常;
<01>:=电压异常;
<10>:=不可信状态;
*/
Data
[
len
++
]
=
BstMsg
.
StopFault
.
Mult
;
Data
[
len
++
]
=
BstMsg
.
StopFault
.
Mult
;
//中止荷电状态(SOC)
Data
[
len
++
]
=
BsdMsg
.
StopSOC
;
Data
[
len
++
]
=
BsdMsg
.
StopSOC
;
//动力蓄电池单体最低电压(V)
Data
[
len
++
]
=
BsdMsg
.
PerMinVolt
;
Data
[
len
++
]
=
BsdMsg
.
PerMinVolt
;
Data
[
len
++
]
=
BsdMsg
.
PerMinVolt
>>
8
;
Data
[
len
++
]
=
BsdMsg
.
PerMinVolt
>>
8
;
//动力蓄电池单体最高电压(V)
Data
[
len
++
]
=
BsdMsg
.
PerMaxVolt
;
Data
[
len
++
]
=
BsdMsg
.
PerMaxVolt
;
Data
[
len
++
]
=
BsdMsg
.
PerMaxVolt
>>
8
;
Data
[
len
++
]
=
BsdMsg
.
PerMaxVolt
>>
8
;
//动力蓄电池最低温度(ºC)
Data
[
len
++
]
=
BsdMsg
.
MinTemp
;
Data
[
len
++
]
=
BsdMsg
.
MinTemp
;
//动力蓄电池最高温度(ºC)
Data
[
len
++
]
=
BsdMsg
.
MaxTemp
;
Data
[
len
++
]
=
BsdMsg
.
MaxTemp
;
Data
[
len
++
]
=
CemMsg
.
Cem
.
Mult
;
//接收SPN2560=0x00 的充电机辨识报文超时
Data
[
len
++
]
=
BsdMsg
.
MaxTemp
;
//接收SPN2560=0xAA 的充电机辨识报文超时
Data
[
len
++
]
=
Data
[
len
++
]
=
(
u8
)(
BemMsg
.
Bem
.
Mult
&
0x000000ff
);
BemMsg
.
Bem
.
Value
.
Crm_00
+
(
BemMsg
.
Bem
.
Value
.
Crm_AA
<<
2
)
+
(
BemMsg
.
Bem
.
Value
.
Cml_Cts
<<
4
)
+
(
BemMsg
.
Bem
.
Value
.
Cro
<<
6
);
//接收充电机的时间同步和充电机最大输出能力报文超时
Data
[
len
++
]
=
//接收充电机完成充电准备报文超时
BemMsg
.
Bem
.
Value
.
Ccs
+
(
BemMsg
.
Bem
.
Value
.
Cst
<<
2
)
+
(
BemMsg
.
Bem
.
Value
.
Csd
<<
4
)
+
((
0x03
&
BemMsg
.
Bem
.
Value
.
Other
)
<<
6
);
Data
[
len
++
]
=
(
u8
)((
BemMsg
.
Bem
.
Mult
>>
8
)
&
0x00ff
);
//接收充电机充电状态报文超时
Data
[
len
++
]
=
//接收充电机中止充电报文超时
((
0x0c
&
BemMsg
.
Bem
.
Value
.
Other
)
>>
2
)
+
((
0x30
&
BemMsg
.
Bem
.
Value
.
Other
)
>>
2
)
+
(
CemMsg
.
Cem
.
Value
.
Brm
<<
4
)
+
((
CemMsg
.
Cem
.
Value
.
Bcp
)
<<
6
);
Data
[
len
++
]
=
(
u8
)((
BemMsg
.
Bem
.
Mult
>>
16
)
&
0x00ff
);
Data
[
len
++
]
=
//接收充电机充电统计报文超时
((
CemMsg
.
Cem
.
Value
.
Bro
)
<<
0
)
+
((
CemMsg
.
Cem
.
Value
.
Bcs
)
<<
2
)
+
((
CemMsg
.
Cem
.
Value
.
Bcl
)
<<
4
)
+
((
CemMsg
.
Cem
.
Value
.
Bst
)
<<
6
);
//BMS 其他错误
Data
[
len
++
]
=
CemMsg
.
Cem
.
Value
.
Bsd
+
((
0x3F
&
CemMsg
.
Cem
.
Value
.
Other
)
<<
2
);
Data
[
len
++
]
=
(
u8
)((
BemMsg
.
Bem
.
Mult
>>
24
)
&
0x00ff
);
//接收 BMS 和车辆的辨识报文超时
Data
[
len
++
]
=
(
u8
)(
CemMsg
.
Cem
.
Mult
&
0x000000ff
);
//接收电池充电参数报文超时
//接收 BMS 完成充 电准备报文超时
Data
[
len
++
]
=
(
u8
)((
CemMsg
.
Cem
.
Mult
>>
8
)
&
0x00ff
);
//接收电池充电总状 态报文超时
//接收电池充电要求报文超时
//接收 BMS 中止充电报文超时
Data
[
len
++
]
=
(
u8
)((
CemMsg
.
Cem
.
Mult
>>
16
)
&
0x00ff
);
//接收 BMS 充电统计报文超时
//充电机其他错误
Data
[
len
++
]
=
(
u8
)((
CemMsg
.
Cem
.
Mult
>>
24
)
&
0x00ff
);
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_stopComp
,
4
,
ChargerCont1939Addr
);
//多包传输
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_stopComp
,
4
,
ChargerCont1939Addr
);
//多包传输
}
}
...
@@ -1578,20 +1684,32 @@ void stopCompSend_B(void)
...
@@ -1578,20 +1684,32 @@ void stopCompSend_B(void)
Data
[
len
++
]
=
BsdMsg_B
.
PerMaxVolt
>>
8
;
Data
[
len
++
]
=
BsdMsg_B
.
PerMaxVolt
>>
8
;
Data
[
len
++
]
=
BsdMsg_B
.
MinTemp
;
Data
[
len
++
]
=
BsdMsg_B
.
MinTemp
;
Data
[
len
++
]
=
BsdMsg_B
.
MaxTemp
;
Data
[
len
++
]
=
BsdMsg_B
.
MaxTemp
;
Data
[
len
++
]
=
CemMsg_B
.
Cem
.
Mult
;
//接收SPN2560=0x00 的充电机辨识报文超时
Data
[
len
++
]
=
BsdMsg_B
.
MaxTemp
;
//接收SPN2560=0xAA 的充电机辨识报文超时
Data
[
len
++
]
=
(
u8
)(
BemMsg_B
.
Bem
.
Mult
&
0x000000ff
);
Data
[
len
++
]
=
//接收充电机的时间同步和充电机最大输出能力报文超时
BemMsg_B
.
Bem
.
Value
.
Crm_00
+
(
BemMsg_B
.
Bem
.
Value
.
Crm_AA
<<
2
)
+
(
BemMsg_B
.
Bem
.
Value
.
Cml_Cts
<<
4
)
+
(
BemMsg_B
.
Bem
.
Value
.
Cro
<<
6
);
//接收充电机完成充电准备报文超时
Data
[
len
++
]
=
Data
[
len
++
]
=
(
u8
)((
BemMsg_B
.
Bem
.
Mult
>>
8
)
&
0x00ff
);
BemMsg_B
.
Bem
.
Value
.
Ccs
+
(
BemMsg_B
.
Bem
.
Value
.
Cst
<<
2
)
+
(
BemMsg_B
.
Bem
.
Value
.
Csd
<<
4
)
+
((
0x03
&
BemMsg_B
.
Bem
.
Value
.
Other
)
<<
6
);
//接收充电机充电状态报文超时
//接收充电机中止充电报文超时
Data
[
len
++
]
=
Data
[
len
++
]
=
(
u8
)((
BemMsg_B
.
Bem
.
Mult
>>
16
)
&
0x00ff
);
((
0x0c
&
BemMsg_B
.
Bem
.
Value
.
Other
)
>>
2
)
+
((
0x30
&
BemMsg_B
.
Bem
.
Value
.
Other
)
>>
2
)
+
(
CemMsg_B
.
Cem
.
Value
.
Brm
<<
4
)
+
((
CemMsg_B
.
Cem
.
Value
.
Bcp
)
<<
6
);
//接收充电机充电统计报文超时
Data
[
len
++
]
=
//BMS 其他错误
((
CemMsg_B
.
Cem
.
Value
.
Bro
)
<<
0
)
+
((
CemMsg_B
.
Cem
.
Value
.
Bcs
)
<<
2
)
+
((
CemMsg_B
.
Cem
.
Value
.
Bcl
)
<<
4
)
+
((
CemMsg_B
.
Cem
.
Value
.
Bst
)
<<
6
);
Data
[
len
++
]
=
(
u8
)((
BemMsg_B
.
Bem
.
Mult
>>
24
)
&
0x00ff
);
Data
[
len
++
]
=
CemMsg_B
.
Cem
.
Value
.
Bsd
+
((
0x3F
&
CemMsg_B
.
Cem
.
Value
.
Other
)
<<
2
);
//接收 BMS 和车辆的辨识报文超时
Data
[
len
++
]
=
(
u8
)(
CemMsg_B
.
Cem
.
Mult
&
0x000000ff
);
//接收电池充电参数报文超时
//接收 BMS 完成充 电准备报文超时
Data
[
len
++
]
=
(
u8
)((
CemMsg_B
.
Cem
.
Mult
>>
8
)
&
0x00ff
);
//接收电池充电总状 态报文超时
//接收电池充电要求报文超时
//接收 BMS 中止充电报文超时
Data
[
len
++
]
=
(
u8
)((
CemMsg_B
.
Cem
.
Mult
>>
16
)
&
0x00ff
);
//接收 BMS 充电统计报文超时
//充电机其他错误
Data
[
len
++
]
=
(
u8
)((
CemMsg_B
.
Cem
.
Mult
>>
24
)
&
0x00ff
);
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_stopComp
,
4
,
ChargerCont1939Addr_B
);
//多包传输
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_stopComp
,
4
,
ChargerCont1939Addr_B
);
//多包传输
}
}
...
...
DcPillar/Src/Drivers/Drv_TCUComm.h
浏览文件 @
a044ceb9
...
@@ -66,7 +66,7 @@ typedef struct
...
@@ -66,7 +66,7 @@ typedef struct
//u8 GunNum; //抢号 单枪 0 一机多冲 1-255
//u8 GunNum; //抢号 单枪 0 一机多冲 1-255
u8
LoadSswitch
;
//负荷控制开关 是否根据用户型号提供不同输出功率 01启用02关闭其他无效
u8
LoadSswitch
;
//负荷控制开关 是否根据用户型号提供不同输出功率 01启用02关闭其他无效
u8
AckFlag
;
u8
AckFlag
;
u32
RecvTick
;
//
u32 RecvTick;
}
StructStartCompMeg
;
}
StructStartCompMeg
;
typedef
struct
typedef
struct
{
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论