Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
DC360_1drap3_xiaoju_V1
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
丁雨邯
DC360_1drap3_xiaoju_V1
Commits
12f46dd1
提交
12f46dd1
authored
4月 29, 2020
作者:
wysheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1. TCU的CAN数据放入队列
2. 按照新协议修改AB抢地址
上级
11550d38
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
270 行增加
和
145 行删除
+270
-145
Drv_TCUComm.c
DcPillar/Src/Drivers/Drv_TCUComm.c
+237
-132
Drv_TCUComm.h
DcPillar/Src/Drivers/Drv_TCUComm.h
+2
-0
Thd_TCU.c
DcPillar/Src/Thread/Thd_TCU.c
+31
-13
没有找到文件。
DcPillar/Src/Drivers/Drv_TCUComm.c
浏览文件 @
12f46dd1
...
...
@@ -7,9 +7,11 @@
#include "Drv_Adc.h"
osMessageQId
TCUMsg
=
0
;
osMessageQId
TCUMsg
=
0
;
extern
osMessageQId
TcuSendMsgId
;
u8
TCUSendMsg
(
StructChargeSend
*
pMsg
)
{
CanTxMsg
TxMsg
;
...
...
@@ -64,7 +66,7 @@ void TCURxIrqHandle(void)
if
(
1
==
Id1939
.
Disp
.
DP
)
return
;
if
((
Id1939
.
Disp
.
DA_PS
!=
ChargerCont1939Addr
)
||
(
Id1939
.
Disp
.
SA
!=
TCU1939Addr
))
if
((
(
Id1939
.
Disp
.
DA_PS
&
0xF6
)
!=
ChargerCont1939Addr
)
||
(
Id1939
.
Disp
.
SA
!=
TCU1939Addr
))
return
;
if
(
Id1939
.
Disp
.
PF
<
240
)
...
...
@@ -150,7 +152,7 @@ void TCURxIrqHandle(void)
if
(
1
==
Id1939
.
Disp
.
DP
)
return
;
if
((
Id1939
.
Disp
.
DA_PS
!=
ChargerCont1939Addr
)
||
(
Id1939
.
Disp
.
SA
!=
TCU1939Addr
))
if
((
(
Id1939
.
Disp
.
DA_PS
&
0xF6
)
!=
ChargerCont1939Addr
)
||
(
Id1939
.
Disp
.
SA
!=
TCU1939Addr
))
return
;
if
(
Id1939
.
Disp
.
PF
<
240
)
...
...
@@ -412,7 +414,7 @@ StructTCUEM TCUChgContralTCUEM_B;
StructTCUCControl
TCUControlInfo
=
{
.
ChargingServiceFlag
=
1
,
.
version
=
0x0
10
0
,
.
version
=
0x0
23
0
,
.
ChargeNum
=
{
0
,
0
,
0
,
0
...
...
@@ -461,7 +463,7 @@ StructTCUCControl TCUControlInfo =
};
void
TCUSinglePackSendMsg
(
u8
*
pframe
,
u16
len
,
EnumTCUCommPgn
cmd
,
u8
Prio
)
void
TCUSinglePackSendMsg
(
u8
*
pframe
,
u16
len
,
EnumTCUCommPgn
cmd
,
u8
Prio
,
u8
addr
)
{
StructChargeSend
FrameSend
;
...
...
@@ -470,7 +472,7 @@ void TCUSinglePackSendMsg(u8 * pframe, u16 len, EnumTCUCommPgn cmd, u8 Prio)
FrameSend
.
Id
.
Disp
.
Prio
=
Prio
;
FrameSend
.
Id
.
Disp
.
PF
=
cmd
>>
8
;
FrameSend
.
Id
.
Disp
.
DA_PS
=
TCU1939Addr
;
FrameSend
.
Id
.
Disp
.
SA
=
ChargerCont1939A
ddr
;
FrameSend
.
Id
.
Disp
.
SA
=
a
ddr
;
FrameSend
.
Len
=
len
;
FrameSend
.
Data
[
0
]
=
pframe
[
0
];
FrameSend
.
Data
[
1
]
=
pframe
[
1
];
...
...
@@ -481,11 +483,16 @@ void TCUSinglePackSendMsg(u8 * pframe, u16 len, EnumTCUCommPgn cmd, u8 Prio)
FrameSend
.
Data
[
6
]
=
pframe
[
6
];
FrameSend
.
Data
[
7
]
=
pframe
[
7
];
TCUSendMsg
(
&
FrameSend
);
//TCUSendMsg(&FrameSend);
//放入队列
if
(
pdTRUE
!=
xQueueSend
(
TcuSendMsgId
,
&
FrameSend
,
0
))
{
//osDelay(10);
}
}
void
TCUMultiPackSendMsg
(
u8
*
pfram
,
u16
len
,
EnumTCUCommPgn
cmd
,
u8
Prio
)
void
TCUMultiPackSendMsg
(
u8
*
pfram
,
u16
len
,
EnumTCUCommPgn
cmd
,
u8
Prio
,
u8
addr
)
{
u8
i
;
StructChargeSend
FrameSend
;
...
...
@@ -495,7 +502,7 @@ void TCUMultiPackSendMsg(u8 * pfram, u16 len, EnumTCUCommPgn cmd, u8 Prio)
FrameSend
.
Id
.
Disp
.
Prio
=
Prio
;
FrameSend
.
Id
.
Disp
.
PF
=
cmd
>>
8
;
FrameSend
.
Id
.
Disp
.
DA_PS
=
TCU1939Addr
;
FrameSend
.
Id
.
Disp
.
SA
=
ChargerCont1939A
ddr
;
FrameSend
.
Id
.
Disp
.
SA
=
a
ddr
;
u16
checkSum
=
0
;
for
(
i
=
0
;
i
<
len
;
i
++
)
...
...
@@ -534,8 +541,13 @@ void TCUMultiPackSendMsg(u8 * pfram, u16 len, EnumTCUCommPgn cmd, u8 Prio)
}
FrameSend
.
Len
=
8
;
TCUSendMsg
(
&
FrameSend
);
osDelay
(
1
);
//TCUSendMsg(&FrameSend);
//osDelay(1);
//放入队列
if
(
pdTRUE
!=
xQueueSend
(
TcuSendMsgId
,
&
FrameSend
,
0
))
{
//osDelay(10);
}
}
}
...
...
@@ -543,7 +555,7 @@ void TCUMultiPackSendMsg(u8 * pfram, u16 len, EnumTCUCommPgn cmd, u8 Prio)
void
StartMeg
(
StructTCUSend
*
pPgnRecv
)
{
if
(
pPgnRecv
->
D
ata
[
0
]
==
0x01
)
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr
)
{
if
((
TCUCurChgRecd
.
TCUChgStartNotetrl
==
0
)
&&
(
TCUCurChgRecd
.
TCUChargeEnable
==
0
)
&&
((
eLcdPro_TCUMainMenu
==
TCUCtrl
.
CurScreen
)
||
(
eLcdPro_TCUChargeSummary_B
==
TCUCtrl
.
CurScreen
)))
...
...
@@ -581,7 +593,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
}
}
else
if
(
pPgnRecv
->
D
ata
[
0
]
==
0x02
)
else
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr_B
)
{
if
((
TCUCurChgRecd_B
.
TCUChgStartNotetrl
==
0
)
&&
(
TCUCurChgRecd_B
.
TCUChargeEnable
==
0
)
&&
((
eLcdPro_TCUMainMenu
==
TCUCtrl
.
CurScreen
)
||
(
eLcdPro_TCUChargeSummary
==
TCUCtrl
.
CurScreen
)))
...
...
@@ -597,7 +609,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
TCUCurChgRecd_B
.
StarChgType
=
pPgnRecv
->
Data
[
2
];
TCUCtrl
.
CurScreen
=
eLcdPro_TCUPrstart_B
;
TCUCtrl
.
Param
=
0
;
TCUCurChgRecd
.
TCUChgStartNotetrl
=
1
;
//回复充电开始发送标志位
TCUCurChgRecd
_B
.
TCUChgStartNotetrl
=
1
;
//回复充电开始发送标志位
}
else
{
...
...
@@ -627,7 +639,7 @@ u8 AllowDTUStartCharge(u8 * Reason)
{
if
(
TCUCurChgRecd
.
StarValid
==
0
)
*
Reason
=
0x01
;
else
if
(
TCUCommuStatus
.
ConnectFlag
==
0
)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
*
Reason
=
0x02
;
else
if
(
TCUCommuStatus
.
VerChkVaild
==
0
)
*
Reason
=
0x03
;
...
...
@@ -684,7 +696,7 @@ u8 AllowDTUStartCharge_B(u8 * Reason)
{
if
(
TCUCurChgRecd_B
.
StarValid
==
0
)
*
Reason
=
0x01
;
else
if
(
TCUCommuStatus
.
ConnectFlag
==
0
)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
*
Reason
=
0x02
;
else
if
(
TCUCommuStatus
.
VerChkVaild
==
0
)
*
Reason
=
0x03
;
...
...
@@ -743,7 +755,7 @@ void StartMegAck_A(void)
};
u8
Reason
=
0x00
;
Data
[
0
]
=
0x0
1
;
Data
[
0
]
=
0x0
0
;
Data
[
1
]
=
StartMeg_A
.
LoadSswitch
;
if
(
FALSE
==
AllowDTUStartCharge
(
&
Reason
))
...
...
@@ -756,7 +768,7 @@ void StartMegAck_A(void)
Data
[
5
]
=
0x00
;
Data
[
6
]
=
0x00
;
Data
[
7
]
=
0x00
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_startAck
,
6
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_startAck
,
6
,
ChargerCont1939Addr
);
}
...
...
@@ -768,7 +780,7 @@ void StartMegAck_B(void)
};
u8
Reason
=
0x00
;
Data
[
0
]
=
0x0
2
;
Data
[
0
]
=
0x0
0
;
Data
[
1
]
=
StartMeg_B
.
LoadSswitch
;
if
(
FALSE
==
AllowDTUStartCharge_B
(
&
Reason
))
...
...
@@ -778,7 +790,7 @@ void StartMegAck_B(void)
Data
[
3
]
=
Reason
;
Data
[
4
]
=
StartMeg_B
.
LoadSswitch
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_startAck
,
6
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_startAck
,
6
,
ChargerCont1939Addr_B
);
}
...
...
@@ -789,7 +801,7 @@ u8 AllowDTUStartCompCharge(u8 * Reason)
*
Reason
=
0x0
;
//成功
return
TRUE
;
}
else
if
(
TCUCommuStatus
.
ConnectFlag
==
0
)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
*
Reason
=
0x02
;
//通讯超时
else
if
(
PillarError
.
Value
.
Emergency
==
1
)
*
Reason
=
0x03
;
...
...
@@ -855,7 +867,7 @@ u8 AllowDTUStartCompCharge_B(u8 * Reason)
*
Reason
=
0x0
;
//成功
return
TRUE
;
}
else
if
(
TCUCommuStatus
.
ConnectFlag
==
0
)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
*
Reason
=
0x02
;
//通讯超时
else
if
(
PillarError_B
.
Value
.
Emergency
==
1
)
*
Reason
=
0x03
;
...
...
@@ -987,7 +999,7 @@ void startCompSend_A(void)
memcpy
(
&
Data
[
len
],
BrmMsg
.
Vin
,
17
);
//车辆识别码 BIN码 17
len
+=
17
;
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_startComp
,
4
);
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_startComp
,
4
,
ChargerCont1939Addr
);
}
...
...
@@ -1064,13 +1076,13 @@ void startCompSend_B(void)
Data
[
len
++
]
=
0x0F
;
//最小输出电流0A
memcpy
(
&
Data
[
len
],
BrmMsg_B
.
Vin
,
17
);
//车辆识别码 BIN码 17
len
+=
17
;
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_startComp
,
4
);
//多包传输
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_startComp
,
4
,
ChargerCont1939Addr_B
);
//多包传输
}
void
ACkStartCompMeg
(
StructTCUSend
*
pPgnRecv
)
{
if
(
pPgnRecv
->
Data
[
0
]
==
0x0
1
)
if
(
pPgnRecv
->
Data
[
0
]
==
0x0
0
)
{
AckStartCompMeg_A
.
GunNum
=
pPgnRecv
->
Data
[
0
];
AckStartCompMeg_A
.
LoadSswitch
=
pPgnRecv
->
Data
[
1
];
...
...
@@ -1083,7 +1095,7 @@ void ACkStartCompMeg(StructTCUSend * pPgnRecv)
TCUCurChgRecd
.
TCUChgStarCompNotetrl
=
3
;
}
else
if
(
pPgnRecv
->
Data
[
0
]
==
0x0
2
)
else
if
(
pPgnRecv
->
Data
[
0
]
==
0x0
0
)
{
AckStartCompMeg_B
.
GunNum
=
pPgnRecv
->
Data
[
0
];
AckStartCompMeg_B
.
LoadSswitch
=
pPgnRecv
->
Data
[
1
];
...
...
@@ -1102,13 +1114,13 @@ void ACkStartCompMeg(StructTCUSend * pPgnRecv)
void
StopMeg
(
StructTCUSend
*
pPgnRecv
)
{
if
(
pPgnRecv
->
D
ata
[
0
]
==
0x01
)
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr
)
{
TCUCurChgRecd
.
TCUChgStopType
=
pPgnRecv
->
Data
[
1
];
TCUCurChgRecd
.
TCUChgStopNotetrl
=
1
;
TCUCurChgRecd
.
TCUChargeEnable
=
0
;
}
else
if
(
pPgnRecv
->
D
ata
[
0
]
==
0x02
)
else
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr_B
)
{
TCUCurChgRecd_B
.
TCUChgStopType
=
pPgnRecv
->
Data
[
1
];
TCUCurChgRecd_B
.
TCUChgStopNotetrl
=
1
;
...
...
@@ -1125,7 +1137,7 @@ void StopMegAck_A(void)
0
};
Data
[
0
]
=
0x0
1
;
Data
[
0
]
=
0x0
0
;
if
(
TCUCurChgRecd
.
TCUChargeEnable
==
1
)
{
...
...
@@ -1135,7 +1147,7 @@ void StopMegAck_A(void)
else
Data
[
1
]
=
01
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_stopAck
,
4
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_stopAck
,
4
,
ChargerCont1939Addr
);
}
...
...
@@ -1146,7 +1158,7 @@ void StopMegAck_B(void)
0
};
Data
[
0
]
=
0x0
1
;
Data
[
0
]
=
0x0
0
;
if
(
TCUCurChgRecd_B
.
TCUChargeEnable
==
1
)
{
...
...
@@ -1156,7 +1168,7 @@ void StopMegAck_B(void)
else
Data
[
1
]
=
01
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_stopAck
,
4
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_stopAck
,
4
,
ChargerCont1939Addr_B
);
}
...
...
@@ -1172,7 +1184,7 @@ void GetStopReason_A(u8 * stopReason)
*
stopReason
=
0x04
;
else
if
(
ChargeStopType
==
eChgStop_Run_CcOpen
)
*
stopReason
=
0x05
;
//控制导引超时//充电过程中充电导引枪连接
else
if
(
TCUCommuStatus
.
ConnectFlag
==
0
)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
*
stopReason
=
0x06
;
//充电控制器与计费单元通讯超时停止
else
if
(
PillarError
.
Value
.
Emergency
)
*
stopReason
=
0x08
;
//急停按钮动作故障
...
...
@@ -1250,7 +1262,7 @@ void GetStopReason_B(u8 * stopReason)
*
stopReason
=
0x04
;
else
if
(
ChargeStopType_B
==
eChgStop_Run_CcOpen
)
*
stopReason
=
0x05
;
//控制导引超时//充电过程中充电导引枪连接
else
if
(
TCUCommuStatus
.
ConnectFlag
==
0
)
else
if
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
*
stopReason
=
0x06
;
//充电控制器与计费单元通讯超时停止
else
if
(
PillarError_B
.
Value
.
Emergency
)
*
stopReason
=
0x08
;
//急停按钮动作故障
...
...
@@ -1321,7 +1333,7 @@ void stopCompSend_A(void)
u8
len
=
0
;
u8
reason
;
Data
[
len
++
]
=
0x0
1
;
Data
[
len
++
]
=
0x0
0
;
GetStopReason_A
(
&
reason
);
Data
[
len
++
]
=
reason
;
//成功标识
Data
[
len
++
]
=
00
;
...
...
@@ -1348,7 +1360,7 @@ void stopCompSend_A(void)
Data
[
len
++
]
=
((
CemMsg
.
Cem
.
Value
.
Bro
)
<<
0
)
+
((
CemMsg
.
Cem
.
Value
.
Bcs
)
<<
2
)
+
((
CemMsg
.
Cem
.
Value
.
Bcl
)
<<
4
)
+
((
CemMsg
.
Cem
.
Value
.
Bst
)
<<
6
);
Data
[
len
++
]
=
CemMsg
.
Cem
.
Value
.
Bsd
+
((
0x3F
&
CemMsg
.
Cem
.
Value
.
Other
)
<<
2
);
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_stopComp
,
4
);
//多包传输
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_stopComp
,
4
,
ChargerCont1939Addr
);
//多包传输
}
...
...
@@ -1358,7 +1370,7 @@ void stopCompSend_B(void)
u8
len
=
0
;
u8
reason
;
Data
[
len
++
]
=
0x0
1
;
Data
[
len
++
]
=
0x0
0
;
GetStopReason_B
(
&
reason
);
Data
[
len
++
]
=
reason
;
Data
[
len
++
]
=
00
;
//成功标识
...
...
@@ -1387,21 +1399,21 @@ void stopCompSend_B(void)
((
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
++
]
=
CemMsg_B
.
Cem
.
Value
.
Bsd
+
((
0x3F
&
CemMsg_B
.
Cem
.
Value
.
Other
)
<<
2
);
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_stopComp
,
4
);
//多包传输
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_stopComp
,
4
,
ChargerCont1939Addr_B
);
//多包传输
}
void
stopCompAck
(
StructTCUSend
*
pPgnRecv
)
{
if
(
pPgnRecv
->
Data
[
0
]
==
0x0
1
)
if
(
pPgnRecv
->
Data
[
0
]
==
0x0
0
)
{
AckStopCompMeg_A
.
GunNum
=
pPgnRecv
->
Data
[
0
];
AckStopCompMeg_A
.
StopReason
=
pPgnRecv
->
Data
[
1
];
AckStopCompMeg_A
.
AckFlag
=
pPgnRecv
->
Data
[
2
];
TCUCurChgRecd
.
TCUChgStopCompNotetrl
=
3
;
//停止完成帧命令发送
}
else
if
(
pPgnRecv
->
Data
[
0
]
==
0x0
2
)
else
if
(
pPgnRecv
->
Data
[
0
]
==
0x0
0
)
{
AckStopCompMeg_B
.
GunNum
=
pPgnRecv
->
Data
[
0
];
AckStopCompMeg_B
.
StopReason
=
pPgnRecv
->
Data
[
1
];
...
...
@@ -1423,7 +1435,7 @@ void TCUHeartBeat_A(void)
Data
[
1
]
=
CountNum
++
;
Data
[
2
]
=
TCUCommuStatus
.
ConnectFlag
;
Data
[
3
]
=
TCUControlInfo
.
ChargingServiceFlag
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_ContHeart
,
6
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_ContHeart
,
6
,
ChargerCont1939Addr
);
}
...
...
@@ -1435,11 +1447,11 @@ void TCUHeartBeat_B(void)
};
static
u8
CountNum
;
//最大255
Data
[
0
]
=
0x0
2
;
Data
[
0
]
=
0x0
0
;
Data
[
1
]
=
CountNum
++
;
Data
[
2
]
=
TCUCommuStatus
.
ConnectFlag
;
Data
[
3
]
=
TCUControlInfo
.
ChargingServiceFlag
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_ContHeart
,
6
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_ContHeart
,
6
,
ChargerCont1939Addr_B
);
}
...
...
@@ -1454,7 +1466,7 @@ void AckTCUHeartBeat(StructTCUSend * pPgnRecv)
TCUCommuStatus
.
ConnectFlag
=
CONNECT_NORMAL
;
//tcu检测控制器心跳状态
TCUCommuStatus
.
HeartBeatVaild
=
CONNECT_NORMAL
;
//控制器检测tcu心跳状态
TCUCommuStatus
.
HeartBeatVaild
=
1
;
//控制器检测tcu心跳状态
}
...
...
@@ -1465,7 +1477,16 @@ void TCUtimeSet(StructTCUSend * pPgnRecv)
cp56time2a
*
time
=
NULL
;
TCUCommuStatus
.
ChgNum
=
pPgnRecv
->
Data
[
0
];
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr
)
{
TCUCommuStatus
.
ChgNum
=
1
;
}
else
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr_B
)
{
TCUCommuStatus
.
ChgNum
=
2
;
}
TCUCommuStatus
.
TimeRecvTime
=
GetSystemTick
();
TCUCommuStatus
.
CommStage
=
TimeStage
;
...
...
@@ -1494,7 +1515,7 @@ void TCUtimeSetAck(void)
StructTime
Time
;
cp56time2a
*
time
=
NULL
;
Data
[
0
]
=
TCUCommuStatus
.
ChgNum
;
Data
[
0
]
=
0
;
//
TCUCommuStatus.ChgNum;
StampToTime
(
RtcGetTime
(),
&
Time
);
time
->
year
=
Time
.
Year
-
2000
;
time
->
month
=
Time
.
Mon
;
...
...
@@ -1503,7 +1524,14 @@ void TCUtimeSetAck(void)
time
->
min
=
Time
.
Min
;
time
->
msec
=
(((
u16
)
Time
.
Sec
)
*
1000
);
memcpy
(
&
Data
[
1
],
time
,
7
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_timeAck
,
6
);
if
(
TCUCommuStatus
.
ChgNum
==
1
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_timeAck
,
6
,
ChargerCont1939Addr
);
}
else
if
(
TCUCommuStatus
.
ChgNum
==
2
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_timeAck
,
6
,
ChargerCont1939Addr_B
);
}
}
...
...
@@ -1511,10 +1539,18 @@ void TCUVersionCheck(StructTCUSend * pPgnRecv)
{
u16
version
;
TCUCommuStatus
.
ChgNum
=
pPgnRecv
->
Data
[
0
];
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr
)
{
TCUCommuStatus
.
ChgNum
=
1
;
}
else
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr_B
)
{
TCUCommuStatus
.
ChgNum
=
2
;
}
version
=
(((
u16
)
pPgnRecv
->
Data
[
2
])
<<
8
)
+
pPgnRecv
->
Data
[
1
];
if
(
TCUControlInfo
.
version
=
=
version
)
if
(
TCUControlInfo
.
version
<
=
version
)
{
TCUCommuStatus
.
VerChkVaild
=
1
;
//版本校验成功
TCUCommuStatus
.
CommStage
=
VersionStage
;
...
...
@@ -1536,16 +1572,32 @@ void TCUVersionCheckSent(void)
0
};
Data
[
0
]
=
TCUCommuStatus
.
ChgNum
;
Data
[
0
]
=
0
;
//
TCUCommuStatus.ChgNum;
Data
[
1
]
=
TCUControlInfo
.
version
;
Data
[
2
]
=
(
u8
)
(
TCUControlInfo
.
version
>>
8
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_versiAck
,
6
);
if
(
TCUCommuStatus
.
ChgNum
==
1
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_versiAck
,
6
,
ChargerCont1939Addr
);
}
else
if
(
TCUCommuStatus
.
ChgNum
==
2
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_versiAck
,
6
,
ChargerCont1939Addr_B
);
}
}
void
TCUParam
(
StructTCUSend
*
pPgnRecv
)
{
TCUCommuStatus
.
ChgNum
=
pPgnRecv
->
Data
[
0
];
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr
)
{
TCUCommuStatus
.
ChgNum
=
1
;
}
else
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr_B
)
{
TCUCommuStatus
.
ChgNum
=
2
;
}
TCUCommuStatus
.
CommStage
=
ChageParamStage
;
memcpy
(
TCUControlInfo
.
ChargeNum
,
&
pPgnRecv
->
Data
[
0
],
8
);
TCUCommuStatus
.
ParamRecvTime
=
GetSystemTick
();
...
...
@@ -1557,7 +1609,7 @@ void TCUParamAck(void)
{
u8
Data
[
8
];
memset
(
Data
,
0
,
8
);
Data
[
0
]
=
TCUCommuStatus
.
ChgNum
;
Data
[
0
]
=
0
;
//
TCUCommuStatus.ChgNum;
if
((
TCUCommuStatus
.
VerChkVaild
==
0
)
||
(
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
))
{
...
...
@@ -1575,21 +1627,36 @@ void TCUParamAck(void)
Data
[
2
]
=
0
;
TCUCommuStatus
.
ParamVaild
=
1
;
}
if
(
TCUCommuStatus
.
ChgNum
==
1
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_paramAck
,
6
,
ChargerCont1939Addr
);
}
else
if
(
TCUCommuStatus
.
ChgNum
==
2
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_paramAck
,
6
,
ChargerCont1939Addr_B
);
}
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_paramAck
,
6
);
}
void
SerConAckAnalysis
(
StructTCUSend
*
pPgnRecv
)
{
TCUCommuStatus
.
ChgNum
=
pPgnRecv
->
Data
[
0
];
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr
)
{
TCUCommuStatus
.
ChgNum
=
1
;
}
else
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr_B
)
{
TCUCommuStatus
.
ChgNum
=
2
;
}
TCUCommuStatus
.
CommStage
=
ServiceContralStage
;
TCUCommuStatus
.
ServiceContralRecvTime
=
GetSystemTick
();
TCUCommuStatus
.
ServiceContralSentTime
=
0
;
if
((
pPgnRecv
->
Data
[
1
]
!=
0x01
)
&&
(
pPgnRecv
->
Data
[
1
]
!=
0x02
))
TCUCommuStatus
.
ServiceContralVaildValue
=
1
;
//数据合法性校验失败
else
if
((
TCUCommuStatus
.
ConnectFlag
==
0
)
||
(
TCUCommuStatus
.
HeartBeatVaild
))
else
if
((
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
||
(
TCUCommuStatus
.
HeartBeatVaild
))
TCUCommuStatus
.
ServiceContralVaildValue
=
2
;
//通讯超时
else
if
(
TCUCommuStatus
.
VerChkVaild
==
0
)
TCUCommuStatus
.
ServiceContralVaildValue
=
3
;
//版本校验未完成
...
...
@@ -1614,7 +1681,7 @@ void SerConAck(void)
0
};
Data
[
0
]
=
TCUCommuStatus
.
ChgNum
;
Data
[
0
]
=
0
;
//
TCUCommuStatus.ChgNum;
Data
[
1
]
=
TCUCommuStatus
.
ChargingServiceSetValue
;
if
(
TCUCommuStatus
.
ServiceContralVaildValue
==
0
)
...
...
@@ -1627,14 +1694,29 @@ void SerConAck(void)
Data
[
2
]
=
01
;
//失败
Data
[
3
]
=
TCUCommuStatus
.
ServiceContralVaildValue
;
//失败
}
if
(
TCUCommuStatus
.
ChgNum
==
1
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_SerConAck
,
4
,
ChargerCont1939Addr
);
}
else
if
(
TCUCommuStatus
.
ChgNum
==
2
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_SerConAck
,
4
,
ChargerCont1939Addr_B
);
}
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_SerConAck
,
4
);
}
void
ElectControlAnalysis
(
StructTCUSend
*
pPgnRecv
)
{
TCUCommuStatus
.
ChgNum
=
pPgnRecv
->
Data
[
0
];
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr
)
{
TCUCommuStatus
.
ChgNum
=
1
;
}
else
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr_B
)
{
TCUCommuStatus
.
ChgNum
=
2
;
}
TCUCommuStatus
.
ElectLockRecvTime
=
GetSystemTick
();
TCUCommuStatus
.
CommStage
=
ElectLockStage
;
TCUCommuStatus
.
ElectLockSentTime
=
0
;
...
...
@@ -1643,7 +1725,7 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
if
(((
pPgnRecv
->
Data
[
1
]
!=
0x01
)
&&
(
pPgnRecv
->
Data
[
1
]
!=
0x02
))
||
((
pPgnRecv
->
Data
[
2
]
!=
0x01
)
&&
(
pPgnRecv
->
Data
[
2
]
!=
0x02
)))
TCUCommuStatus
.
ElectLockVaildValue
=
1
;
//数据合法性校验失败
else
if
((
TCUCommuStatus
.
ConnectFlag
==
0
)
||
(
TCUCommuStatus
.
HeartBeatVaild
))
else
if
((
TCUCommuStatus
.
ConnectFlag
==
CONNECT_TIMEOUT
)
||
(
TCUCommuStatus
.
HeartBeatVaild
))
TCUCommuStatus
.
ElectLockVaildValue
=
2
;
//通讯超时
else
if
(
TCUCommuStatus
.
VerChkVaild
==
0
)
TCUCommuStatus
.
ElectLockVaildValue
=
3
;
//版本校验未完成
...
...
@@ -1685,7 +1767,7 @@ void ElectControlAck(void)
0
};
Data
[
0
]
=
TCUCommuStatus
.
ChgNum
;
Data
[
0
]
=
0
;
//
TCUCommuStatus.ChgNum;
Data
[
1
]
=
TCUCommuStatus
.
ElectLockSetValue
;
if
(
PillarError
.
Value
.
EleLock
==
1
)
...
...
@@ -1702,15 +1784,28 @@ void ElectControlAck(void)
Data
[
2
]
=
01
;
//失败
Data
[
3
]
=
TCUCommuStatus
.
ServiceContralVaildValue
;
//失败
}
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_GunAck
,
4
);
if
(
TCUCommuStatus
.
ChgNum
==
1
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_GunAck
,
4
,
ChargerCont1939Addr
);
}
else
if
(
TCUCommuStatus
.
ChgNum
==
2
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_GunAck
,
4
,
ChargerCont1939Addr_B
);
}
}
void
PowerControlAnalysis
(
StructTCUSend
*
pPgnRecv
)
{
TCUCommuStatus
.
ChgNum
=
pPgnRecv
->
Data
[
0
];
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr
)
{
TCUCommuStatus
.
ChgNum
=
1
;
}
else
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr_B
)
{
TCUCommuStatus
.
ChgNum
=
2
;
}
TCUCommuStatus
.
CommStage
=
PowerControlStage
;
TCUCommuStatus
.
PowerControlRecvTime
=
GetSystemTick
();
TCUCommuStatus
.
PowerControlSentTime
=
0
;
...
...
@@ -1725,7 +1820,7 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
{
TCUCommuStatus
.
PowerControlVaildValue
=
0
;
//数据合法性校验成功
if
(
pPgnRecv
->
D
ata
[
0
]
==
01
)
//a枪
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr
)
//a枪
{
TCUControlInfo
.
PowerControl_A
.
ControlType
=
pPgnRecv
->
Data
[
1
];
...
...
@@ -1738,7 +1833,7 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
TCUControlInfo
.
PowerControl_A
.
Percentage
=
pPgnRecv
->
Data
[
3
];
}
}
else
if
(
pPgnRecv
->
D
ata
[
0
]
==
02
)
//b枪
else
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr_B
)
//b枪
{
TCUControlInfo
.
PowerControl_B
.
ControlType
=
pPgnRecv
->
Data
[
1
];
...
...
@@ -1762,7 +1857,7 @@ void PowerControlAck(void)
{
0
};
Data
[
0
]
=
TCUCommuStatus
.
ChgNum
;
Data
[
0
]
=
0
;
//
TCUCommuStatus.ChgNum;
Data
[
1
]
=
TCUCommuStatus
.
PowerControltype
;
Data
[
2
]
=
(
u8
)
TCUCommuStatus
.
PowerControlParam
;
...
...
@@ -1778,8 +1873,14 @@ void PowerControlAck(void)
Data
[
4
]
=
01
;
Data
[
5
]
=
TCUCommuStatus
.
PowerControlVaildValue
;
//失败
}
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_powerAck
,
4
);
if
(
TCUCommuStatus
.
ChgNum
==
1
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_powerAck
,
4
,
ChargerCont1939Addr
);
}
else
if
(
TCUCommuStatus
.
ChgNum
==
2
)
{
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_powerAck
,
4
,
ChargerCont1939Addr_B
);
}
}
...
...
@@ -1801,12 +1902,12 @@ u8 InsertGunStatu_B(void)
void
InformationReporting_22_A
(
void
)
{
u8
Data
[
12
8
]
=
u8
Data
[
8
]
=
{
0
};
Data
[
0
]
=
0x0
1
;
Data
[
0
]
=
0x0
0
;
if
((
ChargeCtrl
.
CurProcess
==
eChgPro_ChgIdle
)
&&
(
TCUCurChgRecd
.
TCUChargeEnable
==
0
))
{
...
...
@@ -1910,19 +2011,19 @@ void InformationReporting_22_A(void)
memcpy
(
&
Data
[
1
],
InformainReport_A
.
data
,
5
);
Data
[
6
]
=
0
;
Data
[
7
]
=
0
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_DCConInfor1
,
4
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_DCConInfor1
,
4
,
ChargerCont1939Addr
);
}
void
InformationReporting_22_B
(
void
)
{
u8
Data
[
12
8
]
=
u8
Data
[
8
]
=
{
0
};
Data
[
0
]
=
0x0
2
;
Data
[
0
]
=
0x0
0
;
if
((
ChargeCtrl_B
.
CurProcess
==
eChgPro_B_ChgIdle
)
&&
(
TCUCurChgRecd_B
.
TCUChargeEnable
==
0
))
{
...
...
@@ -2026,15 +2127,15 @@ void InformationReporting_22_B(void)
memcpy
(
&
Data
[
1
],
InformainReport_B
.
data
,
5
);
Data
[
6
]
=
0
;
Data
[
7
]
=
0
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_DCConInfor1
,
4
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_DCConInfor1
,
4
,
ChargerCont1939Addr_B
);
}
void
InformationReporting_23_A
(
void
)
{
u8
Data
[
64
]
;
u8
Data
[
8
]
=
{
0
}
;
Data
[
0
]
=
0x0
1
;
Data
[
0
]
=
0x0
0
;
InformainReport2_A
.
InfRe
.
Door
=
PillarError
.
Value
.
Door
;
InformainReport2_A
.
InfRe
.
DCOutConOn
=
0x01
;
...
...
@@ -2052,45 +2153,44 @@ void InformationReporting_23_A(void)
InformainReport2_A
.
InfRe
.
Power
=
00
;
InformainReport2_A
.
InfRe
.
UniContactorOff
=
PillarError
.
Value
.
UniContactor
;
InformainReport2_A
.
InfRe
.
UniContactorOn
=
0x00
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_DCConInfor2
,
6
);
memcpy
(
&
Data
[
1
],
&
InformainReport2_A
.
data
,
2
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_DCConInfor2
,
3
,
ChargerCont1939Addr
);
}
void
InformationReporting_23_B
(
void
)
{
u8
Data
[
64
]
;
u8
Data
[
8
]
=
{
0
}
;
Data
[
0
]
=
0x02
;
Data
[
0
]
=
0x01
;
InformainReport2_A
.
InfRe
.
Door
=
PillarError
.
Value
.
Door
;
InformainReport2_A
.
InfRe
.
DCOutConOn
=
0x01
;
Data
[
0
]
=
0x00
;
InformainReport2_B
.
InfRe
.
Door
=
PillarError_B
.
Value
.
Door
;
InformainReport2_B
.
InfRe
.
DCOutConOn
=
0x01
;
if
(((
ChargeError
.
Value
.
IsolateWarn
==
1
)
||
(
ChargeError
.
Value
.
IsolateError
==
1
))
&&
if
(((
ChargeError
_B
.
Value
.
IsolateWarn
==
1
)
||
(
ChargeError_B
.
Value
.
IsolateError
==
1
))
&&
(
TCUCurChgRecd_B
.
TCUChargeEnable
==
1
))
InformainReport2_
A
.
InfRe
.
ImdWarm
=
0x01
;
InformainReport2_
B
.
InfRe
.
ImdWarm
=
0x01
;
else
InformainReport2_
A
.
InfRe
.
ImdWarm
=
0x00
;
InformainReport2_
A
.
InfRe
.
DrainResist
=
0x00
;
InformainReport2_
A
.
InfRe
.
tempOver
=
0
;
InformainReport2_
A
.
InfRe
.
gunTemp
=
0
;
InformainReport2_
A
.
InfRe
.
AccContacON
=
PillarError
.
Value
.
ACContactor
;
InformainReport2_
A
.
InfRe
.
AccContacOff
=
00
;
InformainReport2_
A
.
InfRe
.
Power
=
00
;
InformainReport2_
A
.
InfRe
.
UniContactorOff
=
PillarError
.
Value
.
UniContactor
;
InformainReport2_
A
.
InfRe
.
UniContactorOn
=
0x00
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_DCConInfor2
,
6
);
InformainReport2_
B
.
InfRe
.
ImdWarm
=
0x00
;
InformainReport2_
B
.
InfRe
.
DrainResist
=
0x00
;
InformainReport2_
B
.
InfRe
.
tempOver
=
0
;
InformainReport2_
B
.
InfRe
.
gunTemp
=
0
;
InformainReport2_
B
.
InfRe
.
AccContacON
=
PillarError_B
.
Value
.
ACContactor
;
InformainReport2_
B
.
InfRe
.
AccContacOff
=
00
;
InformainReport2_
B
.
InfRe
.
Power
=
00
;
InformainReport2_
B
.
InfRe
.
UniContactorOff
=
PillarError_B
.
Value
.
UniContactor
;
InformainReport2_
B
.
InfRe
.
UniContactorOn
=
0x00
;
memcpy
(
&
Data
[
1
],
&
InformainReport2_B
.
data
,
2
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_DCConInfor2
,
3
,
ChargerCont1939Addr_B
);
}
void
measuringReporting20_A
(
void
)
{
u8
Data
[
64
]
;
u8
Data
[
32
]
=
{
0
}
;
u8
len
=
0
;
Data
[
len
++
]
=
0x0
1
;
Data
[
len
++
]
=
0x0
0
;
Data
[
len
++
]
=
GetDcModuleVolt
();
Data
[
len
++
]
=
GetDcModuleVolt
()
>>
8
;
Data
[
len
++
]
=
GetDcModuleCurrt
();
...
...
@@ -2118,20 +2218,20 @@ void measuringReporting20_A(void)
Data
[
len
++
]
=
Adc_Get_a_NTemp
()
+
50
;
Data
[
len
++
]
=
Adc_Get_B_PTemp
()
+
50
;
Data
[
len
++
]
=
Adc_Get_B_NTemp
()
+
50
;
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_DCConMeasu
,
6
);
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_DCConMeasu
,
6
,
ChargerCont1939Addr
);
}
void
measuringReporting20_B
(
void
)
{
u8
Data
[
64
]
;
u8
Data
[
32
]
=
{
0
}
;
u8
len
=
0
;
Data
[
len
++
]
=
0x0
1
;
Data
[
len
++
]
=
GetDcModuleVolt
();
Data
[
len
++
]
=
GetDcModuleVolt
()
>>
8
;
Data
[
len
++
]
=
GetDcModuleCurrt
();
Data
[
len
++
]
=
GetDcModuleCurrt
()
>>
8
;
Data
[
len
++
]
=
0x0
0
;
Data
[
len
++
]
=
GetDcModuleVolt
_B
();
Data
[
len
++
]
=
GetDcModuleVolt
_B
()
>>
8
;
Data
[
len
++
]
=
GetDcModuleCurrt
_B
();
Data
[
len
++
]
=
GetDcModuleCurrt
_B
()
>>
8
;
Data
[
len
++
]
=
BcsMsg_B
.
CurSoc
;
Data
[
len
++
]
=
BsmMsg_B
.
HighTemp
;
Data
[
len
++
]
=
BsmMsg_B
.
LowTemp
;
...
...
@@ -2155,7 +2255,7 @@ void measuringReporting20_B(void)
Data
[
len
++
]
=
Adc_Get_a_NTemp
()
+
50
;
Data
[
len
++
]
=
Adc_Get_B_PTemp
()
+
50
;
Data
[
len
++
]
=
Adc_Get_B_NTemp
()
+
50
;
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_DCConMeasu
,
6
);
TCUMultiPackSendMsg
(
Data
,
len
,
eCmd_DCConMeasu
,
6
,
ChargerCont1939Addr_B
);
}
...
...
@@ -2164,7 +2264,7 @@ void ChgInfornQueryAck(void)
u8
data
[
128
];
u8
len
=
0
;
data
[
len
++
]
=
TCUCommuStatus
.
ChgNum
;
data
[
len
++
]
=
0
;
//
TCUCommuStatus.ChgNum;
memcpy
(
&
data
[
len
],
TCUControlInfo
.
ManufacturerCode
,
4
);
len
+=
4
;
memcpy
(
&
data
[
len
],
TCUControlInfo
.
DeviceModel
,
2
);
...
...
@@ -2188,16 +2288,25 @@ void ChgInfornQueryAck(void)
data
[
len
++
]
=
(
u8
)
((
4000
-
TCUControlInfo
.
DcMaxCurrt
)
>>
8
);
data
[
len
++
]
=
(
u8
)
(
4000
-
TCUControlInfo
.
DcMinCurrt
);
data
[
len
++
]
=
(
u8
)
((
4000
-
TCUControlInfo
.
DcMinCurrt
)
>>
8
);
TCUMultiPackSendMsg
(
data
,
len
,
eCmd_QueryAck
,
6
);
if
(
TCUCommuStatus
.
ChgNum
==
1
)
{
TCUMultiPackSendMsg
(
data
,
len
,
eCmd_QueryAck
,
6
,
ChargerCont1939Addr
);
}
else
if
(
TCUCommuStatus
.
ChgNum
==
2
)
{
TCUMultiPackSendMsg
(
data
,
len
,
eCmd_QueryAck
,
6
,
ChargerCont1939Addr_B
);
}
}
void
verification
(
void
)
{
u8
data
[
128
]
;
u8
data
[
32
]
=
{
0
}
;
u8
len
=
0
;
data
[
len
++
]
=
0x0
1
;
data
[
len
++
]
=
0x0
0
;
memcpy
(
&
data
[
len
],
BrmMsg
.
Vin
,
17
);
len
+=
17
;
memcpy
(
&
data
[
len
],
&
BrmMsg
.
ChgCount
,
3
);
...
...
@@ -2206,16 +2315,16 @@ void verification(void)
len
+=
3
;
memcpy
(
&
data
[
len
],
&
BcpMsg
.
StartVolt
,
2
);
len
+=
2
;
TCUMultiPackSendMsg
(
data
,
len
,
eCmd_verification
,
6
);
TCUMultiPackSendMsg
(
data
,
len
,
eCmd_verification
,
6
,
ChargerCont1939Addr
);
}
void
verification_B
(
void
)
{
u8
data
[
128
]
;
u8
data
[
32
]
=
{
0
}
;
u8
len
=
0
;
data
[
len
++
]
=
0x0
2
;
data
[
len
++
]
=
0x0
0
;
memcpy
(
&
data
[
len
],
BrmMsg_B
.
Vin
,
17
);
len
+=
17
;
memcpy
(
&
data
[
len
],
&
BrmMsg_B
.
ChgCount
,
3
);
...
...
@@ -2224,19 +2333,19 @@ void verification_B(void)
len
+=
3
;
memcpy
(
&
data
[
len
],
&
BcpMsg_B
.
StartVolt
,
2
);
len
+=
2
;
TCUMultiPackSendMsg
(
data
,
len
,
eCmd_verification
,
6
);
TCUMultiPackSendMsg
(
data
,
len
,
eCmd_verification
,
6
,
ChargerCont1939Addr_B
);
}
void
verificationAck
(
StructTCUSend
*
pPgnRecv
)
{
if
(
pPgnRecv
->
D
ata
[
0
]
==
0x01
)
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr
)
{
VerificaInfo
.
result
=
pPgnRecv
->
Data
[
1
];
VerificaInfo
.
FailReason
=
pPgnRecv
->
Data
[
2
];
}
else
if
(
pPgnRecv
->
D
ata
[
0
]
==
0x02
)
else
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr_B
)
{
VerificaInfo_B
.
result
=
pPgnRecv
->
Data
[
1
];
VerificaInfo_B
.
FailReason
=
pPgnRecv
->
Data
[
2
];
...
...
@@ -2248,9 +2357,9 @@ void TcuEMMsg(u8 data)
{
u8
Data
[
8
];
Data
[
0
]
=
0x0
1
;
Data
[
0
]
=
0x0
0
;
Data
[
1
]
=
data
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_ConErroComm
,
4
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_ConErroComm
,
4
,
ChargerCont1939Addr
);
}
...
...
@@ -2258,34 +2367,30 @@ void TcuEMMsg_B(u8 data)
{
u8
Data
[
8
];
Data
[
0
]
=
0x0
2
;
Data
[
0
]
=
0x0
0
;
Data
[
1
]
=
data
;
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_ConErroComm
,
4
);
TCUSinglePackSendMsg
(
Data
,
8
,
eCmd_ConErroComm
,
4
,
ChargerCont1939Addr_B
);
}
void
TCUErroCommAnalysis
(
StructTCUSend
*
pPgnRecv
)
{
if
(
pPgnRecv
->
D
ata
[
0
]
==
1
)
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr
)
memcpy
(
&
TCUChgContralTCUEM_A
.
tcuem
,
&
pPgnRecv
->
Data
[
1
],
2
);
else
if
(
pPgnRecv
->
D
ata
[
0
]
==
2
)
else
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr_B
)
memcpy
(
&
TCUChgContralTCUEM_B
.
tcuem
,
&
pPgnRecv
->
Data
[
1
],
2
);
}
void
TCUMeasuRecv
(
StructTCUSend
*
pPgnRecv
)
{
if
(
pPgnRecv
->
D
ata
[
0
]
==
0
)
if
(
pPgnRecv
->
D
A
==
ChargerCont1939Addr
)
{
TCUCommuStatus
.
DCMeasuRecvTime
=
GetSystemTick
();
TCUCommuStatus
.
DCMeasuRecvTime_B
=
GetSystemTick
();
}
else
if
(
pPgnRecv
->
Data
[
0
]
==
1
)
{
TCUCommuStatus
.
DCMeasuRecvTime
=
GetSystemTick
();
}
else
if
(
pPgnRecv
->
Data
[
0
]
==
2
)
else
if
(
pPgnRecv
->
DA
==
ChargerCont1939Addr_B
)
{
TCUCommuStatus
.
DCMeasuRecvTime_B
=
GetSystemTick
();
}
}
DcPillar/Src/Drivers/Drv_TCUComm.h
浏览文件 @
12f46dd1
...
...
@@ -219,6 +219,8 @@ typedef struct
#define TCU1939Addr (0x8A)
#define ChargerCont1939Addr (0xE0)
#define ChargerCont1939Addr_B (0xE1)
typedef
enum
{
eCmd_start
=
0x000100
,
// 充电启动帧
...
...
DcPillar/Src/Thread/Thd_TCU.c
浏览文件 @
12f46dd1
...
...
@@ -77,7 +77,15 @@ void TCURecvProcess(void)
break
;
case
eCmd_Query
:
// 充电桩配置信息查询帧
TCUCommuStatus
.
ChgNum
=
pPgnRecv
.
Data
[
0
];
//TCUCommuStatus.ChgNum = pPgnRecv.Data[0];
if
(
pPgnRecv
.
DA
==
ChargerCont1939Addr
)
{
TCUCommuStatus
.
ChgNum
=
1
;
}
else
if
(
pPgnRecv
.
DA
==
ChargerCont1939Addr_B
)
{
TCUCommuStatus
.
ChgNum
=
2
;
}
TCUCommuStatus
.
CommStage
=
ChgInfornQueryStage
;
TCUCommuStatus
.
ChgInfornQueryRecvTime
=
GetSystemTick
();
TCUCommuStatus
.
ChgInfornQuerySentTime
=
0
;
...
...
@@ -159,7 +167,7 @@ void DCMeasuring_A(void)
if
(
TCUCommuStatus
.
DCMeasuErrCnt
>
5
)
{
memset
(
&
TCUCommuStatus
,
0x00
,
sizeof
(
TCUCommuStatus
));
//通讯初始化
TCUCommuStatus
.
ConnectFlag
=
0
;
TCUCommuStatus
.
ConnectFlag
=
CONNECT_TIMEOUT
;
TCUCommuStatus
.
HeartBeatErrCnt
=
0
;
TCUCommuStatus
.
HeartBeatVaild
=
0
;
//心跳失效
TCUCanInit
();
//can通讯接口初始化
...
...
@@ -195,7 +203,7 @@ void DCMeasuring_B(void)
if
(
TCUCommuStatus
.
DCMeasuErrCnt_B
>
5
)
{
memset
(
&
TCUCommuStatus
,
0x00
,
sizeof
(
TCUCommuStatus
));
//通讯初始化
TCUCommuStatus
.
ConnectFlag
=
0
;
TCUCommuStatus
.
ConnectFlag
=
CONNECT_TIMEOUT
;
TCUCommuStatus
.
HeartBeatErrCnt
=
0
;
TCUCommuStatus
.
HeartBeatVaild
=
0
;
//心跳失效
TCUCanInit
();
...
...
@@ -340,8 +348,8 @@ void TCUPillarHeartBeat(void)
{
u32
SendTick
;
if
(
TCUCommuStatus
.
HeartBeatVaild
!=
CONNECT_NORMAL
)
return
;
//
if (TCUCommuStatus.HeartBeatVaild != CONNECT_NORMAL)
//
return;
if
(
0
==
TCUCommuStatus
.
HeartBeatRecvTime
)
//初始12s一次
{
...
...
@@ -352,7 +360,7 @@ void TCUPillarHeartBeat(void)
if
(
TCUCommuStatus
.
HeartBeatErrCnt
>
TCUCommuParam
.
HeartErrCntMax
)
{
memset
(
&
TCUCommuStatus
,
0x00
,
sizeof
(
TCUCommuStatus
));
//通讯初始化
TCUCommuStatus
.
ConnectFlag
=
0
;
TCUCommuStatus
.
ConnectFlag
=
CONNECT_TIMEOUT
;
TCUCommuStatus
.
HeartBeatErrCnt
=
0
;
TCUCommuStatus
.
HeartBeatVaild
=
0
;
//心跳失效
TCUCanInit
();
...
...
@@ -383,10 +391,10 @@ void TCUPillarHeartBeat_B(void)
{
u32
SendTick
;
if
(
TCUCommuStatus
.
HeartBeatVaild
!=
CONNECT_NORMAL
)
return
;
//
if (TCUCommuStatus.HeartBeatVaild != CONNECT_NORMAL)
//
return;
if
(
0
==
TCUCommuStatus
.
HeartBeatRecvTime_B
)
//初始12s一次
/*
if (0 == TCUCommuStatus.HeartBeatRecvTime_B) //初始12s一次
{
if ((GetSystemTick() -TCUCommuStatus.HeartBeatSendTime_B) > ((u32) TCUCommuParam.HeartTimeout * 1000))
{
...
...
@@ -394,7 +402,7 @@ void TCUPillarHeartBeat_B(void)
if (TCUCommuStatus.HeartBeatErrCnt_B > TCUCommuParam.HeartErrCntMax)
{
TCUCommuStatus
.
ConnectFlag
=
0
;
TCUCommuStatus.ConnectFlag =
CONNECT_TIMEOUT
;
TCUCommuStatus.HeartBeatErrCnt_B = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit();
...
...
@@ -407,7 +415,7 @@ void TCUPillarHeartBeat_B(void)
}
}
}
else
else
*/
{
//心跳周期
SendTick
=
((
u32
)
TCUCommuParam
.
HeartPeriod
*
1000
);
...
...
@@ -838,15 +846,25 @@ void TCULinkProcess(void) //心跳帧处理
}
osMessageQId
TcuSendMsgId
=
0
;
void
TCUComm
(
void
const
*
argument
)
{
osDelay
(
6000
);
TCUCommInit
();
TcuSendMsgId
=
NULL
;
osMessageQDef
(
TcuSendMsgId
,
128
,
StructChargeSend
);
TcuSendMsgId
=
osMessageCreate
(
osMessageQ
(
TcuSendMsgId
),
NULL
);
for
(;
;
)
{
StructChargeSend
DataSend
;
if
(
pdTRUE
==
xQueueReceive
(
TcuSendMsgId
,
&
DataSend
,
0
))
{
TCUSendMsg
(
&
DataSend
);
}
TCURecvProcess
();
//帧接收
TCUWorkProcess
();
//遥测遥信息处理
...
...
@@ -855,7 +873,7 @@ void TCUComm(void const * argument)
// TCUCodeDone();//告警故障处理
// TCUSaveEventDone();
osDelay
(
10
0
);
osDelay
(
10
);
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论