提交 a044ceb9 作者: wysheng

梳理TCU通讯协议,修改部分错误

上级 517c7b69
...@@ -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 = 0x29; *Reason = 0x3D;//3DH: 车辆验证确认帧超时
else if (TCUCommuStatus.ErrData.Value.verificationAck == 1) else if (TCUCommuStatus.ErrData.Value.verificationAck == 1)
*Reason = 0x30; *Reason = 0x3F;//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 = 0x29; *Reason = 0x3D;
else if (TCUCommuStatus_B.ErrData.Value.verificationAck == 1) else if (TCUCommuStatus_B.ErrData.Value.verificationAck == 1)
*Reason = 0x30; *Reason = 0x3F;
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); //多包传输
} }
......
...@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论