Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
DC360_1drap3_xiaoju_V1
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
丁雨邯
DC360_1drap3_xiaoju_V1
Commits
17e9ce90
提交
17e9ce90
authored
5月 29, 2020
作者:
wysheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善TCU定值设置与查询
上级
72b47ca6
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
339 行增加
和
27 行删除
+339
-27
Drv_TCUComm.c
DcPillar/Src/Drivers/Drv_TCUComm.c
+304
-8
Drv_TCUComm.h
DcPillar/Src/Drivers/Drv_TCUComm.h
+26
-19
Thd_TCU.c
DcPillar/Src/Thread/Thd_TCU.c
+9
-0
没有找到文件。
DcPillar/Src/Drivers/Drv_TCUComm.c
浏览文件 @
17e9ce90
...
...
@@ -101,6 +101,10 @@ void TCURxIrqHandle(void)
case
eCmd_Gun
:
// 电子锁可控制帧
case
eCmd_power
:
// 功率调节控制帧
case
eCmd_Query
:
// 充电桩配置信息查询帧
case
eCmd_reset
:
//立即复位命令帧
case
eCmd_valueSet
:
//定值设置命令帧
case
eCmd_valueQuery
:
//定值查询命令帧
case
eCmd_debugInfo
:
//调试信息
case
eCmd_verificationAck
:
//车辆验证应答帧
////////////状态帧/////////////////
case
eCmd_startCompAck
:
// 充电启动完成应答帧
...
...
@@ -195,6 +199,10 @@ void TCURxIrqHandle(void)
case
eCmd_Gun
:
// 电子锁可控制帧
case
eCmd_power
:
// 功率调节控制帧
case
eCmd_Query
:
// 充电桩配置信息查询帧
case
eCmd_reset
:
//立即复位命令帧
case
eCmd_valueSet
:
//定值设置命令帧
case
eCmd_valueQuery
:
//定值查询命令帧
case
eCmd_debugInfo
:
//调试信息
case
eCmd_verificationAck
:
//车辆验证应答帧
////////////状态帧/////////////////
case
eCmd_startCompAck
:
// 充电启动完成应答帧
...
...
@@ -2239,7 +2247,7 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
TCUCommuStatus
.
PowerControlVaildValue
=
0
;
//数据合法性校验成功
TCUControlInfo
.
PowerControl_A
.
ControlType
=
pPgnRecv
->
Data
[
1
];
memset
(
&
TCUControlInfo
.
PowerControl_A
,
0
sizeof
(
StructPowerControl
));
memset
(
&
TCUControlInfo
.
PowerControl_A
,
0
,
sizeof
(
StructPowerControl
));
if
(
pPgnRecv
->
Data
[
1
]
==
01
)
{
TCUControlInfo
.
PowerControl_A
.
Kwh
=
((
u16
)
pPgnRecv
->
Data
[
3
]
<<
8
)
+
pPgnRecv
->
Data
[
2
]
-
1000
;
...
...
@@ -2264,7 +2272,7 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
else
{
TCUCommuStatus_B
.
PowerControlVaildValue
=
0
;
//数据合法性校验成功
memset
(
&
TCUControlInfo
.
PowerControl_B
,
0
sizeof
(
StructPowerControl
));
memset
(
&
TCUControlInfo
.
PowerControl_B
,
0
,
sizeof
(
StructPowerControl
));
TCUControlInfo
.
PowerControl_B
.
ControlType
=
pPgnRecv
->
Data
[
1
];
if
(
pPgnRecv
->
Data
[
1
]
==
01
)
...
...
@@ -2293,8 +2301,7 @@ void PowerControlAck(u8 ChgNum)
{
Data
[
0
]
=
0
;
Data
[
1
]
=
TCUCommuStatus
.
PowerControltype
;
Data
[
2
]
=
(
u8
)
TCUCommuStatus
.
PowerControlParam
;
Data
[
2
]
=
(
u8
)
(
TCUCommuStatus
.
PowerControlParam
);
Data
[
3
]
=
(
u8
)
(
TCUCommuStatus
.
PowerControlParam
>>
8
);
if
(
TCUCommuStatus
.
PowerControlVaildValue
==
0
)
...
...
@@ -2821,11 +2828,9 @@ void ChgInfornQueryAck(u8 ChgNum)
len
+=
4
;
data
[
len
++
]
=
TCUControlInfo
.
BmsVersion
;
data
[
len
++
]
=
(
u8
)
TCUControlInfo
.
DcMaxVolt
;
data
[
len
++
]
=
(
u8
)
(
TCUControlInfo
.
DcMaxVolt
);
data
[
len
++
]
=
(
u8
)
(
TCUControlInfo
.
DcMaxVolt
>>
8
);
data
[
len
++
]
=
(
u8
)
TCUControlInfo
.
DcMinVolt
;
data
[
len
++
]
=
(
u8
)
(
TCUControlInfo
.
DcMinVolt
);
data
[
len
++
]
=
(
u8
)
(
TCUControlInfo
.
DcMinVolt
>>
8
);
data
[
len
++
]
=
(
u8
)
(
4000
-
TCUControlInfo
.
DcMaxCurrt
);
...
...
@@ -3122,3 +3127,294 @@ void VehicleVerificationHandle(void)
}
u8
TCUValueSetAddr
=
0
;
void
TCUValueSetHandle
(
StructTCUSend
*
pPgnRecv
)
{
static
u8
index
=
0
;
static
u8
step
=
0
;
static
u16
len
=
0
;
static
u8
count
=
0
;
static
u8
date
[
64
]
=
{
0
};
TCUValueSetAddr
=
pPgnRecv
->
DA
;
if
(
pPgnRecv
->
Data
[
0
]
!=
0
)
{
if
(
step
==
0
)
{
if
(
pPgnRecv
->
Data
[
0
]
==
1
)
{
//报文总帧数
count
=
pPgnRecv
->
Data
[
1
];
//报文有效数据长度
len
=
pPgnRecv
->
Data
[
3
];
len
=
len
<<
8
+
pPgnRecv
->
Data
[
2
];
memcpy
(
date
,
&
(
pPgnRecv
->
Data
[
4
]),
4
);
index
=
4
;
}
}
else
if
(
step
==
count
)
{
memcpy
(
date
,
&
(
pPgnRecv
->
Data
[
1
]),
len
+
2
-
index
);
index
=
len
+
2
;
TCUValueSetMsg
(
date
,
index
);
step
=
0
;
index
=
0
;
}
else
{
memcpy
(
date
,
&
(
pPgnRecv
->
Data
[
1
]),
7
);
index
+=
7
;
}
}
else
{
index
=
0
;
step
=
0
;
memcpy
(
date
,
&
(
pPgnRecv
->
Data
[
0
]),
8
);
TCUValueSetMsg
(
date
,
8
);
}
}
u8
setValue
(
u16
index
,
u8
*
pdate
)
{
/*
0x00 --- 成功
0x01 --- 无该定值
0x02 --- 禁止写入
0x03 --- 写入失败
0x04 --- 给定越限
*/
u8
reason
=
0
;
return
reason
;
}
u8
getValue
(
u16
index
,
u8
*
pdate
)
{
/*
0x00 --- 成功
0x01 --- 无该定值
0x02 --- 禁止读出
0x03 --- 读出失败
*/
u8
reason
=
0
;
return
reason
;
}
u8
getValueLen
(
u16
index
)
{
u8
len
=
0
;
return
len
;
}
typedef
union
{
u8
data
;
struct
{
/*Bit7: 成功标识
0x00 --- 失败 0x01 --- 成功
Bit6 ~ Bit4:预留
Bit3 ~ Bit0:失败原因
0x00 --- 成功
0x01 --- 无该定值
0x02 --- 禁止写入
0x03 --- 写入失败
0x04 --- 给定越限*/
u8
reason
:
4
;
u8
reserve
:
3
;
u8
flag
:
1
;
}
resultInfo
;
}
UnionTCUValueSetResult
;
typedef
struct
{
u8
device_type
;
//2 设备类型
u8
device_addr
;
//3 设备通信地址
u16
value_index
;
//4 定值序号 2byte
u8
data
[
32
];
//7 定值信息
UnionTCUValueSetResult
result
;
}
StructTCUValueSet
;
StructTCUValueSet
TCUValueSetDate
;
void
TCUValueSetMsg
(
u8
*
date
,
u8
len
)
{
u8
ret
=
0
;
if
(
len
>
8
)
{
u16
checksum
=
0
;
u16
checksumCount
=
0
;
for
(
u8
i
=
0
;
i
<
len
-
2
;
i
++
)
{
checksumCount
+=
date
[
i
];
}
checksum
=
date
[
len
-
1
];
checksum
=
(
checksum
<<
8
)
+
date
[
len
-
2
];
if
(
checksum
!=
checksumCount
)
{
//校验失败
return
;
}
}
memset
(
&
TCUValueSetDate
,
0
,
sizeof
(
StructTCUValueSet
));
//1 充电接口标识
//2 设备类型
TCUValueSetDate
.
device_type
=
date
[
1
];
//3 设备通信地址
TCUValueSetDate
.
device_addr
=
date
[
2
];
//4 定值序号 2byte
TCUValueSetDate
.
value_index
=
date
[
4
];
TCUValueSetDate
.
value_index
=
(
TCUValueSetDate
.
value_index
<<
8
)
+
date
[
3
];
//6 预留
//7 定值信息
memcpy
(
TCUValueSetDate
.
data
,
&
date
[
6
],
len
-
6
);
ret
=
setValue
(
TCUValueSetDate
.
value_index
,
TCUValueSetDate
.
data
);
if
(
ret
==
0
)
{
TCUValueSetDate
.
result
.
resultInfo
.
flag
=
1
;
}
else
{
TCUValueSetDate
.
result
.
resultInfo
.
reason
=
ret
;
}
}
void
TCUValueSetAck
(
void
)
{
u8
date
[
40
];
u8
len
=
0
;
u8
value_len
=
0
;
//1 充电接口标识
date
[
len
++
]
=
0
;
//2 设备类型
date
[
len
++
]
=
TCUValueSetDate
.
device_type
;
//3 设备通信地址
date
[
len
++
]
=
TCUValueSetDate
.
device_addr
;
//4 定值序号
date
[
len
++
]
=
(
u8
)(
TCUValueSetDate
.
value_index
);
date
[
len
++
]
=
(
u8
)(
TCUValueSetDate
.
value_index
>>
8
);
//6 操作返回
date
[
len
++
]
=
TCUValueSetDate
.
result
.
data
;
//7 定值信息
value_len
=
getValueLen
(
TCUValueSetDate
.
value_index
);
memcpy
(
&
date
[
len
],
TCUValueSetDate
.
data
,
value_len
);
len
+=
value_len
;
if
(
len
>
8
)
{
TCUMultiPackSendMsg
(
date
,
len
,
eCmd_valueSetAck
,
6
,
TCUValueSetAddr
);
}
else
{
TCUSinglePackSendMsg
(
date
,
8
,
eCmd_valueSetAck
,
6
,
TCUValueSetAddr
);
}
}
typedef
union
{
u8
data
;
struct
{
/*
Bit7: 成功标识
0x00 --- 失败 0x01 --- 成功
Bit6 ~ Bit4:预留
Bit3 ~ Bit0:失败原因
0x00 --- 成功
0x01 --- 无该定值
0x02 --- 禁止读出
0x03 --- 读出失败
*/
u8
reason
:
4
;
u8
reserve
:
3
;
u8
flag
:
1
;
}
resultInfo
;
}
UnionTCUValueQueryResult
;
typedef
struct
{
u8
device_type
;
//2 设备类型
u8
device_addr
;
//3 设备通信地址
u16
value_index
;
//4 定值序号 2byte
UnionTCUValueQueryResult
result
;
}
StructTCUValueQuery
;
StructTCUValueQuery
TCUValueQueryMsg
=
{
0
};
u8
TCUValueQueryAddr
=
0
;
void
TCUValueQueryHandle
(
StructTCUSend
*
pPgnRecv
)
{
memset
(
&
TCUValueSetDate
,
0
,
sizeof
(
StructTCUValueSet
));
TCUValueQueryAddr
=
pPgnRecv
->
DA
;
//1 充电接口标识
//2 设备类型
TCUValueQueryMsg
.
device_type
=
pPgnRecv
->
Data
[
1
];
//3 设备通信地址
TCUValueQueryMsg
.
device_addr
=
pPgnRecv
->
Data
[
2
];
//4 定值序号 2byte
TCUValueQueryMsg
.
value_index
=
pPgnRecv
->
Data
[
4
];
TCUValueQueryMsg
.
value_index
=
(
TCUValueQueryMsg
.
value_index
<<
8
)
+
pPgnRecv
->
Data
[
3
];
}
void
TCUValueQueryAck
(
void
)
{
u8
date
[
40
]
=
{
0
};
u8
len
=
0
;
u8
ret
=
0
;
//1 充电接口标识
date
[
len
++
]
=
0
;
//2 设备类型
date
[
len
++
]
=
TCUValueQueryMsg
.
device_type
;
//3 设备通信地址
date
[
len
++
]
=
TCUValueQueryMsg
.
device_addr
;
//4 定值序号
date
[
len
++
]
=
(
u8
)(
TCUValueQueryMsg
.
value_index
);
date
[
len
++
]
=
(
u8
)(
TCUValueQueryMsg
.
value_index
>>
8
);
//6 操作返回
//7 定值信息
ret
=
getValue
(
TCUValueQueryMsg
.
value_index
,
&
date
[
6
]);
if
(
ret
==
0
)
{
TCUValueQueryMsg
.
result
.
resultInfo
.
flag
=
1
;
}
else
{
TCUValueQueryMsg
.
result
.
resultInfo
.
reason
=
ret
;
}
date
[
len
++
]
=
TCUValueQueryMsg
.
result
.
data
;
len
+=
getValueLen
(
TCUValueQueryMsg
.
value_index
);
if
(
len
>
8
)
{
TCUMultiPackSendMsg
(
date
,
len
,
eCmd_valueQueryAck
,
6
,
TCUValueQueryAddr
);
}
else
{
TCUSinglePackSendMsg
(
date
,
8
,
eCmd_valueQueryAck
,
6
,
TCUValueQueryAddr
);
}
}
void
TCUDebugInfoHandle
(
StructTCUSend
*
pPgnRecv
)
{
//1 充电接口标识
//2 设备类型
//3 设备通信地址
//4 厂商自定义内容
}
void
TCUDebugInfoAck
(
void
)
{
}
DcPillar/Src/Drivers/Drv_TCUComm.h
浏览文件 @
17e9ce90
...
...
@@ -351,8 +351,8 @@ typedef enum
//完成组包应答帧 007B00H
//程序校验数据帧 007C00H
//程序校验应答帧 007D00H
//
eCmd_reset = 0x007E00,//立即复位命令帧 007E00H
//
eCmd_resetAck = 0x007F00,//立即复位应答帧 007F00H
eCmd_reset
=
0x007E00
,
//立即复位命令帧 007E00H
eCmd_resetAck
=
0x007F00
,
//立即复位应答帧 007F00H
/*****************在线升级命令 end*******************/
eCmd_valueSet
=
0x008000
,
//定值设置命令帧 008000H
...
...
@@ -360,34 +360,37 @@ typedef enum
eCmd_valueQuery
=
0x008200
,
//定值查询命令帧 008200H
eCmd_valueQueryAck
=
0x008300
,
//定值查询命令应答帧 008300H
eCmd_debugInfo
=
0x008E00
,
//调试信息下行命令帧 0x8E
eCmd_debugInfoAck
=
0x008F00
,
//调试信息上行帧 0x8F
eCmd_verification
=
0x002D00
,
//车辆验证数据帧
eCmd_verificationAck
=
0x002E00
,
//车辆验证应答帧
////////////状态帧/////////////////
eCmd_startComp
=
0x001100
,
// 充电启动完成帧
eCmd_startCompAck
=
0x001200
,
// 充电启动完成应答帧
eCmd_startComp
=
0x001100
,
// 充电启动完成帧
eCmd_startCompAck
=
0x001200
,
// 充电启动完成应答帧
eCmd_stopComp
=
0x001300
,
// 充电停止完成帧
eCmd_stopCompAck
=
0x001400
,
// 充电停止完成应答帧
eCmd_stopComp
=
0x001300
,
// 充电停止完成帧
eCmd_stopCompAck
=
0x001400
,
// 充电停止完成应答帧
eCmd_status
=
0x001500
,
//充电桩状态帧
eCmd_status
=
0x001500
,
//充电桩状态帧
///////////数据帧/直流////////////
eCmd_DCConMeasu
=
0x002000
,
// 充电控制器遥测帧
eCmd_DCTCUMeasu
=
0x002100
,
// 计费单元遥测帧
eCmd_DCConInfor1
=
0x002200
,
// 充电控制器遥信帧
eCmd_DCConInfor2
=
0x002300
,
// 充电控制器遥信帧
eCmd_DCConMeasu
=
0x002000
,
// 充电控制器遥测帧
eCmd_DCTCUMeasu
=
0x002100
,
// 计费单元遥测帧
eCmd_DCConInfor1
=
0x002200
,
// 充电控制器遥信帧
eCmd_DCConInfor2
=
0x002300
,
// 充电控制器遥信帧
///////////数据帧/交流////////////
eCmd_ACConMeasu
=
0x003000
,
// 充电控制器遥测帧
eCmd_ACTCUMeasu
=
0x003100
,
// 计费单元遥测 帧
eCmd_ACConInfor
=
0x003200
,
// 充电控制器遥信帧
eCmd_ACTCUInfor
=
0x003300
,
// 计费单元遥信帧
eCmd_ACConMeasu
=
0x003000
,
// 充电控制器遥测帧
eCmd_ACTCUMeasu
=
0x003100
,
// 计费单元遥测 帧
eCmd_ACConInfor
=
0x003200
,
// 充电控制器遥信帧
eCmd_ACTCUInfor
=
0x003300
,
// 计费单元遥信帧
///////////心跳帧///////////
eCmd_TcuHeart
=
0x004000
,
// 计费单元心跳
eCmd_ContHeart
=
0x004100
,
// 充电控制器心跳帧
eCmd_TcuHeart
=
0x004000
,
// 计费单元心跳
eCmd_ContHeart
=
0x004100
,
// 充电控制器心跳帧
eCmd_TCUErroComm
=
0x005100
,
// 计费单元错误帧
eCmd_ConErroComm
=
0x005200
,
//充电控制器错误帧
eCmd_TCUErroComm
=
0x005100
,
// 计费单元错误帧
eCmd_ConErroComm
=
0x005200
,
//充电控制器错误帧
}
EnumTCUCommPgn
;
extern
u8
TCUCommInit
(
void
);
...
...
@@ -457,6 +460,10 @@ extern StructTCUEM TCUChgContralTCUEM_B;
void
TCUStartDownloadHandle
(
StructTCUSend
*
pPgnRecv
);
void
StartDownloadAck
(
u8
ChgNum
);
void
TCUValueSetHandle
(
StructTCUSend
*
pPgnRecv
);
void
TCUValueSetMsg
(
u8
*
date
,
u8
len
);
void
TCUValueQueryHandle
(
StructTCUSend
*
pPgnRecv
);
void
TCUDebugInfoHandle
(
StructTCUSend
*
pPgnRecv
);
#endif
...
...
DcPillar/Src/Thread/Thd_TCU.c
浏览文件 @
17e9ce90
...
...
@@ -124,6 +124,15 @@ void TCURecvProcess(void)
case
eCmd_startDownload
:
TCUStartDownloadHandle
(
&
pPgnRecv
);
break
;
case
eCmd_valueSet
:
TCUValueSetHandle
(
&
pPgnRecv
);
break
;
case
eCmd_valueQuery
:
TCUValueQueryHandle
(
&
pPgnRecv
);
break
;
case
eCmd_debugInfo
:
TCUDebugInfoHandle
(
&
pPgnRecv
);
break
;
default:
break
;
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论