Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
DC360_1drap3_xiaoju_V1
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
丁雨邯
DC360_1drap3_xiaoju_V1
Commits
c6419389
提交
c6419389
authored
4月 25, 2020
作者:
wysheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善模块管理
上级
3fce6c2f
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
322 行增加
和
512 行删除
+322
-512
Drv_TCUComm.c
DcPillar/Src/Drivers/Drv_TCUComm.c
+10
-10
Drv_SmartAllocation.c
DcPillar/Src/SmartAllocation/Drv_SmartAllocation.c
+128
-56
Drv_SmartAllocation.h
DcPillar/Src/SmartAllocation/Drv_SmartAllocation.h
+1
-1
Drv_SmartAllocation_DcModule.c
DcPillar/Src/SmartAllocation/Drv_SmartAllocation_DcModule.c
+147
-382
SmartAllocation_B_ChgRun.c
DcPillar/Src/SmartAllocation/SmartAllocation_B_ChgRun.c
+0
-6
SmartAllocation_ChgRun.c
DcPillar/Src/SmartAllocation/SmartAllocation_ChgRun.c
+35
-41
Thd_TCU.c
DcPillar/Src/Thread/Thd_TCU.c
+1
-16
没有找到文件。
DcPillar/Src/Drivers/Drv_TCUComm.c
浏览文件 @
c6419389
...
...
@@ -247,26 +247,26 @@ void TCUCanInit(void)
// 最小时间份额 TQ = 2 * ( BRP + 1 ) / Fosc = 2*(7+1)/16M = 1uS
// 同步段 Sync Seg = 1TQ
// 传播段 Prop Seg = ( PRSEG + 1 ) * TQ = 1 TQ
// 相位缓冲段 Phase Seg1 = ( PHSEG1 + 1 ) * TQ =
3
TQ
// 相位缓冲段 Phase Seg2 = ( PHSEG2 + 1 ) * TQ =
3
TQ
// 相位缓冲段 Phase Seg1 = ( PHSEG1 + 1 ) * TQ =
1
TQ
// 相位缓冲段 Phase Seg2 = ( PHSEG2 + 1 ) * TQ =
1
TQ
// 同步跳转长度设置为 CNF1.SJW[1:0] = 00, 即 1TQ
// 总线波特率 NBR = Fbit = 1/(sync seg + Prop seg + PS1 + PS2 )
// = 1/(
8TQ) = 1/8uS = 125
kHz
// = 1/(
4TQ) = 1/4uS = 250
kHz
//设置分频控制器CNF1.BRP[5:0] = 7,同步跳转长度设置为 CNF1.SJW[1:0] = 00
MCP2515_WriteReg( CNF1, (1<<BRP0)|(1<<BRP1)|(1<<BRP2) );
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度
3
TQ
MCP2515_WriteReg( CNF2, (1<<BTLMODE)|(
1<<PHSEG11
) );
// 设置 相位缓冲段 Phase Seg2为
3
TQ , 禁用唤醒滤波器
MCP2515_WriteReg( CNF3, (
1<<PHSEG21
) );
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度
1
TQ
MCP2515_WriteReg( CNF2, (1<<BTLMODE)|(
0<<PHSEG10
) );
// 设置 相位缓冲段 Phase Seg2为
1
TQ , 禁用唤醒滤波器
MCP2515_WriteReg( CNF3, (
0<<PHSEG20
) );
*/
MCP2515_B_WriteReg
(
CNF1
,
(
1
<<
BRP0
)
|
(
1
<<
BRP1
)
|
(
1
<<
BRP2
));
//125K
MCP2515_B_WriteReg
(
CNF1
,
(
1
<<
BRP0
)
|
(
1
<<
BRP1
)
|
(
1
<<
BRP2
));
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度
3
TQ
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度
1
TQ
MCP2515_B_WriteReg
(
CNF2
,
(
1
<<
BTLMODE
)
|
(
0
<<
PHSEG11
));
// 设置 相位缓冲段 Phase Seg2为
3
TQ , 禁用唤醒滤波器
// 设置 相位缓冲段 Phase Seg2为
1
TQ , 禁用唤醒滤波器
MCP2515_B_WriteReg
(
CNF3
,
(
0
<<
PHSEG21
));
// 设置MCP2515中断使能寄存器,使能接收缓冲器中断
...
...
DcPillar/Src/SmartAllocation/Drv_SmartAllocation.c
浏览文件 @
c6419389
...
...
@@ -43,23 +43,21 @@ static u8 DcModuleGroupSize = sizeof(DcModuleGroup) / sizeof(DcModuleGroup[0]);
extern
StructDcModuleManage
DcModuleManage
;
StructDcModuleManage
DcModuleManage_A
;
extern
StructDcModuleManage
DcModuleManage_B
;
StructDcModuleManage
DcModuleManage_All
;
extern
StructDcModuleManage
DcModuleManage_All
;
extern
StructDcModuleCtrl
DcModuleCtrl
;
StructDcModuleCtrl
DcModuleCtrl_A
;
extern
StructDcModuleCtrl
DcModuleCtrl_B
;
extern
StructDcModuleCtrl
DcModuleCtrl_ALL
;
extern
u8
DcModuleSendMsg
(
StructDcModuleSend
*
pMsg
);
extern
StructDcModuleStatus
DcModuleStatus
[
64
];
extern
StructDcModuleStatus
DcModuleStatus_B
[
64
];
extern
StructDcModuleStatus
DcModuleStatus_ALL
[
64
];
extern
void
DcModuleCanInit
(
void
);
extern
osMessageQId
DcModeMsg
;
void
DcModuleManageProcess_SmartAllocation
(
void
)
{
static
u32
CheckTick
=
0
;
...
...
@@ -73,17 +71,21 @@ void DcModuleManageProcess_SmartAllocation(void)
u8
status
;
static
u8
StatusGetCnt
=
0
;
StructDcModuleSend
DataSend
;
static
u32
StaticTick
=
0
;
if
(
StaticTick
==
0
)
if
(
StaticTick
==
0
)
StaticTick
=
GetSystemTick
();
if
((
GetSystemTick
()
-
StaticTick
)
>
1000
){
if
((
GetSystemTick
()
-
StaticTick
)
>
1000
)
{
StaticTick
=
GetSystemTick
();
for
(
i
=
0
;
i
<
DcModuleGroupSize
;
i
++
){
for
(
j
=
0
;
j
<
DcModuleGroup
[
i
].
num
;
j
++
){
for
(
i
=
0
;
i
<
DcModuleGroupSize
;
i
++
)
{
for
(
j
=
0
;
j
<
DcModuleGroup
[
i
].
num
;
j
++
)
{
addr
=
DcModuleGroup
[
i
].
modules
[
j
].
addr
;
DataSend
.
Id
=
0x1307C080
+
addr
;
...
...
@@ -96,12 +98,12 @@ void DcModuleManageProcess_SmartAllocation(void)
DataSend
.
Data
[
5
]
=
0x00
;
DataSend
.
Data
[
6
]
=
0x00
;
DataSend
.
Data
[
7
]
=
0x00
;
//DcModuleSendMsg(&DataSend);
//放入队列
if
(
pdTRUE
!=
xQueueSend
(
DcModeMsg
,
&
DataSend
,
0
))
{
osDelay
(
10
);
}
}
...
...
@@ -121,14 +123,14 @@ void DcModuleManageProcess_SmartAllocation(void)
{
if
(
Flag
&
DcModuleManage_All
.
OnlineFlag
)
{
if
((
GetSystemTick
()
-
DcModuleStatus
[
i
].
RecvTime
)
>
8000
)
if
((
GetSystemTick
()
-
DcModuleStatus
_ALL
[
i
].
RecvTime
)
>
8000
)
{
DcModuleManage_All
.
OnlineFlag
&=
~
Flag
;
DcModuleManage_All
.
ValidFlag
&=
~
Flag
;
}
else
{
if
(
0x0002
!=
(
DcModuleStatus
[
i
].
State
&
0x0002
))
if
(
0x0002
!=
(
DcModuleStatus
_ALL
[
i
].
State
&
0x0002
))
{
DcModuleManage_All
.
ValidFlag
|=
Flag
;
Count
++
;
...
...
@@ -154,13 +156,13 @@ void DcModuleManageProcess_SmartAllocation(void)
if
(
Flag
&
DcModuleManage_All
.
ValidFlag
)
{
Currt
+=
DcModuleStatus
[
addr
].
Currt
;
Volt
+=
DcModuleStatus
[
addr
].
Volt
;
Currt
+=
DcModuleStatus
_ALL
[
addr
].
Currt
;
Volt
+=
DcModuleStatus
_ALL
[
addr
].
Volt
;
Count
++
;
DcModuleGroup
[
i
].
modules
[
j
].
status
=
Valid
;
DcModuleGroup
[
i
].
modules
[
j
].
Voltage
=
DcModuleStatus
[
addr
].
Volt
;
DcModuleGroup
[
i
].
modules
[
j
].
Current
=
DcModuleStatus
[
addr
].
Currt
;
DcModuleGroup
[
i
].
modules
[
j
].
Voltage
=
DcModuleStatus
_ALL
[
addr
].
Volt
;
DcModuleGroup
[
i
].
modules
[
j
].
Current
=
DcModuleStatus
_ALL
[
addr
].
Currt
;
}
else
{
...
...
@@ -236,19 +238,19 @@ void DcModuleManageProcess_SmartAllocation(void)
}
}
DcModuleCtrl
.
ActualCurrt
=
Currt
;
DcModuleCtrl
.
ActualVolt
=
Volt
;
DcModuleCtrl_A
.
ActualCurrt
=
Currt_A
;
DcModuleCtrl_A
.
ActualVolt
=
Volt_A
;
DcModuleCtrl
.
ActualCurrt
=
Currt
_A
;
DcModuleCtrl
.
ActualVolt
=
Volt
_A
;
DcModuleCtrl_A
LL
.
ActualCurrt
=
Currt_A
;
DcModuleCtrl_A
LL
.
ActualVolt
=
Volt_A
;
DcModuleCtrl_B
.
ActualCurrt
=
Currt_B
;
DcModuleCtrl_B
.
ActualVolt
=
Volt_B
;
DcModuleManage
.
ValidNum
=
Count
;
DcModuleManage_A
.
ValidNum
=
Count_A
;
DcModuleManage
.
ValidNum
=
Count
_A
;
DcModuleManage_A
ll
.
ValidNum
=
Count
;
DcModuleManage_B
.
ValidNum
=
Count_B
;
//
if (0 == DcModuleManage_All.OnlineFlag)
//
DcModuleCanInit();
if
(
0
==
DcModuleManage_All
.
OnlineFlag
)
DcModuleCanInit
();
}
...
...
@@ -274,16 +276,16 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{
if
(
status
[
i
]
!=
DcModuleGroup
[
i
].
status
)
{
Temp
=
1
;
if
(
DcModuleGroup
[
i
].
status
==
Valid
)
{
//切换继电器
//关机
if
(
status
[
i
]
==
Hold_A
)
{
DcModuleManage
_A
.
SetVolt
=
DcModuleAbility
.
MinVolt
*
100
;
DcModuleManage
_A
.
SetCurrt
=
DcModuleAbility
.
MinCurrt
*
100
;
DcModuleManage
_A
.
Cmd
=
0xAA
;
//关机
DcModuleManage
.
SetVolt
=
DcModuleAbility
.
MinVolt
*
100
;
DcModuleManage
.
SetCurrt
=
DcModuleAbility
.
MinCurrt
*
100
;
DcModuleManage
.
Cmd
=
0xAA
;
//关机
}
else
if
(
status
[
i
]
==
Hold_B
)
{
...
...
@@ -292,7 +294,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DcModuleManage_B
.
Cmd
=
0xAA
;
//关机
}
for
(
u8
j
=
0
;
j
<
DcModuleGroup
[
i
].
num
;
j
++
)
/*
for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
addr = DcModuleGroup[i].modules[j].addr;
...
...
@@ -310,6 +312,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DataSend.Data[7] = (u8) (Temp >> 0);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x02;
...
...
@@ -322,11 +329,16 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DataSend.Data[7] = 0xAA; //关机
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
}*/
}
else
if
(
DcModuleGroup
[
i
].
status
==
Hold_A
)
{
//切换继电器
}
else
if
(
DcModuleGroup
[
i
].
status
==
Hold_B
)
{
...
...
@@ -337,14 +349,56 @@ void DcModuleCtrlProcess_SmartAllocation(void)
//切换继电器
}
for
(
u8
j
=
0
;
j
<
DcModuleGroup
[
i
].
num
;
j
++
)
{
addr
=
DcModuleGroup
[
i
].
modules
[
j
].
addr
;
DataSend
.
Id
=
0x1307C080
+
addr
;
DataSend
.
Len
=
8
;
DataSend
.
Data
[
0
]
=
0x00
;
DataSend
.
Data
[
1
]
=
0x00
;
Temp
=
DcModuleAbility
.
MinCurrt
*
100
;
DataSend
.
Data
[
2
]
=
(
u8
)
(
Temp
>>
8
);
DataSend
.
Data
[
3
]
=
(
u8
)
(
Temp
>>
0
);
Temp
=
DcModuleAbility
.
MinVolt
*
100
;
DataSend
.
Data
[
4
]
=
(
u8
)
(
Temp
>>
24
);
DataSend
.
Data
[
5
]
=
(
u8
)
(
Temp
>>
16
);
DataSend
.
Data
[
6
]
=
(
u8
)
(
Temp
>>
8
);
DataSend
.
Data
[
7
]
=
(
u8
)
(
Temp
>>
0
);
//放入队列
if
(
pdTRUE
!=
xQueueSend
(
DcModeMsg
,
&
DataSend
,
0
))
{
//osDelay(10);
}
DataSend
.
Id
=
0x1307C080
+
addr
;
DataSend
.
Len
=
8
;
DataSend
.
Data
[
0
]
=
0x02
;
DataSend
.
Data
[
1
]
=
0x00
;
DataSend
.
Data
[
2
]
=
0x00
;
DataSend
.
Data
[
3
]
=
0x00
;
DataSend
.
Data
[
4
]
=
0x00
;
DataSend
.
Data
[
5
]
=
0x00
;
DataSend
.
Data
[
6
]
=
0x00
;
DataSend
.
Data
[
7
]
=
0xAA
;
//关机
//放入队列
if
(
pdTRUE
!=
xQueueSend
(
DcModeMsg
,
&
DataSend
,
0
))
{
//osDelay(10);
}
}
status
[
i
]
=
DcModuleGroup
[
i
].
status
;
}
}
if
(
LastFlag_A
!=
DcModuleCtrl_A
.
CtrlFlag
)
if
(
Temp
)
return
;
if
(
LastFlag_A
!=
DcModuleCtrl
.
CtrlFlag
)
{
LastFlag_A
=
DcModuleCtrl
_A
.
CtrlFlag
;
LastFlag_A
=
DcModuleCtrl
.
CtrlFlag
;
Temp
++
;
}
...
...
@@ -363,44 +417,44 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if
(
0
==
Temp
)
return
;
if
(
DcModuleCtrl
_A
.
CtrlFlag
)
if
(
DcModuleCtrl
.
CtrlFlag
)
{
if
(
DcModuleCtrl
_A
.
NeedVolt
>
DcModuleAbility
.
MaxVolt
)
DcModuleManage
_A
.
SetVolt
=
(
DcModuleAbility
.
MaxVolt
*
100
);
else
if
(
DcModuleCtrl
_A
.
NeedVolt
>
DcModuleAbility
.
MinVolt
)
DcModuleManage
_A
.
SetVolt
=
(
DcModuleCtrl_A
.
NeedVolt
*
100
);
if
(
DcModuleCtrl
.
NeedVolt
>
DcModuleAbility
.
MaxVolt
)
DcModuleManage
.
SetVolt
=
(
DcModuleAbility
.
MaxVolt
*
100
);
else
if
(
DcModuleCtrl
.
NeedVolt
>
DcModuleAbility
.
MinVolt
)
DcModuleManage
.
SetVolt
=
(
DcModuleCtrl
.
NeedVolt
*
100
);
else
DcModuleManage
_A
.
SetVolt
=
(
DcModuleAbility
.
MinVolt
*
100
);
DcModuleManage
.
SetVolt
=
(
DcModuleAbility
.
MinVolt
*
100
);
if
(
DcModuleManage
_A
.
ValidNum
)
if
(
DcModuleManage
.
ValidNum
)
{
Temp
=
(
DcModuleCtrl
_A
.
NeedCurrt
*
100
)
/
DcModuleManage_A
.
ValidNum
;
Temp
=
(
DcModuleCtrl
.
NeedCurrt
*
100
)
/
DcModuleManage
.
ValidNum
;
if
((
DcModuleCtrl
_A
.
NeedCurrt
*
100
)
%
DcModuleManage_A
.
ValidNum
)
if
((
DcModuleCtrl
.
NeedCurrt
*
100
)
%
DcModuleManage
.
ValidNum
)
Temp
++
;
}
else
Temp
=
DcModuleManage
_A
.
SetCurrt
;
Temp
=
DcModuleManage
.
SetCurrt
;
if
(
Temp
>
(
DcModuleAbility
.
MaxCurrt
*
100
))
Temp
=
(
DcModuleAbility
.
MaxCurrt
*
100
);
else
if
(
Temp
<
(
DcModuleAbility
.
MinCurrt
*
100
))
Temp
=
(
DcModuleAbility
.
MinCurrt
*
100
);
if
(
Temp
<=
DcModuleManage
_A
.
SetCurrt
)
DcModuleManage
_A
.
SetCurrt
=
Temp
;
if
(
Temp
<=
DcModuleManage
.
SetCurrt
)
DcModuleManage
.
SetCurrt
=
Temp
;
else
{
DcModuleManage
_A
.
SetCurrt
+=
500
;
DcModuleManage
.
SetCurrt
+=
500
;
if
(
DcModuleManage
_A
.
SetCurrt
>=
Temp
)
DcModuleManage
_A
.
SetCurrt
=
Temp
;
if
(
DcModuleManage
.
SetCurrt
>=
Temp
)
DcModuleManage
.
SetCurrt
=
Temp
;
}
if
(
DcModuleManage
_A
.
SetCurrt
>
(
DcModuleAbility
.
MaxCurrt
*
100
))
DcModuleManage
_A
.
SetCurrt
=
(
DcModuleAbility
.
MaxCurrt
*
100
);
else
if
(
DcModuleManage
_A
.
SetCurrt
<
(
DcModuleAbility
.
MinCurrt
*
100
))
DcModuleManage
_A
.
SetCurrt
=
(
DcModuleAbility
.
MinCurrt
*
100
);
if
(
DcModuleManage
.
SetCurrt
>
(
DcModuleAbility
.
MaxCurrt
*
100
))
DcModuleManage
.
SetCurrt
=
(
DcModuleAbility
.
MaxCurrt
*
100
);
else
if
(
DcModuleManage
.
SetCurrt
<
(
DcModuleAbility
.
MinCurrt
*
100
))
DcModuleManage
.
SetCurrt
=
(
DcModuleAbility
.
MinCurrt
*
100
);
for
(
u8
i
=
0
;
i
<
DcModuleGroupSize
;
i
++
)
{
...
...
@@ -416,17 +470,22 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DataSend
.
Data
[
0
]
=
0x00
;
DataSend
.
Data
[
1
]
=
0x00
;
Temp
=
DcModuleManage
_A
.
SetCurrt
;
Temp
=
DcModuleManage
.
SetCurrt
;
DataSend
.
Data
[
2
]
=
(
u8
)
(
Temp
>>
8
);
DataSend
.
Data
[
3
]
=
(
u8
)
(
Temp
>>
0
);
Temp
=
DcModuleManage
_A
.
SetVolt
;
Temp
=
DcModuleManage
.
SetVolt
;
DataSend
.
Data
[
4
]
=
(
u8
)
(
Temp
>>
24
);
DataSend
.
Data
[
5
]
=
(
u8
)
(
Temp
>>
16
);
DataSend
.
Data
[
6
]
=
(
u8
)
(
Temp
>>
8
);
DataSend
.
Data
[
7
]
=
(
u8
)
(
Temp
>>
0
);
//放入队列
DcModuleManage_A
.
Cmd
=
0x55
;
//开机
if
(
pdTRUE
!=
xQueueSend
(
DcModeMsg
,
&
DataSend
,
0
))
{
//osDelay(10);
}
DcModuleManage
.
Cmd
=
0x55
;
//开机
DataSend
.
Id
=
0x1307C080
+
addr
;
DataSend
.
Len
=
8
;
DataSend
.
Data
[
0
]
=
0x02
;
...
...
@@ -436,9 +495,13 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DataSend
.
Data
[
4
]
=
0x00
;
DataSend
.
Data
[
5
]
=
0x00
;
DataSend
.
Data
[
6
]
=
0x00
;
DataSend
.
Data
[
7
]
=
DcModuleManage
_A
.
Cmd
;
DataSend
.
Data
[
7
]
=
DcModuleManage
.
Cmd
;
//放入队列
if
(
pdTRUE
!=
xQueueSend
(
DcModeMsg
,
&
DataSend
,
0
))
{
//osDelay(10);
}
}
}
}
...
...
@@ -510,6 +573,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DataSend
.
Data
[
7
]
=
(
u8
)
(
Temp
>>
0
);
//放入队列
if
(
pdTRUE
!=
xQueueSend
(
DcModeMsg
,
&
DataSend
,
0
))
{
//osDelay(10);
}
DcModuleManage_B
.
Cmd
=
0x55
;
//开机
DataSend
.
Id
=
0x1307C080
+
addr
;
DataSend
.
Len
=
8
;
...
...
@@ -523,6 +591,10 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DataSend
.
Data
[
7
]
=
DcModuleManage_B
.
Cmd
;
//放入队列
if
(
pdTRUE
!=
xQueueSend
(
DcModeMsg
,
&
DataSend
,
0
))
{
//osDelay(10);
}
}
}
...
...
DcPillar/Src/SmartAllocation/Drv_SmartAllocation.h
浏览文件 @
c6419389
...
...
@@ -40,5 +40,5 @@ typedef struct
}
StructDcModuleGroupCtrl
;
extern
StructDcModuleGroup
DcModuleGroup
[];
extern
StructDcModuleManage
DcModuleManage_A
;
#endif
/*__DRV_SMARTALLOCATION_H__*/
DcPillar/Src/SmartAllocation/Drv_SmartAllocation_DcModule.c
浏览文件 @
c6419389
/******************************************************************************
文件 : Drv_RunLedIncre.c
描述 : 英可瑞模块驱动
...
...
@@ -6,11 +7,10 @@
修改 : 2015-04-02 郭涛 建立
******************************************************************************/
#include "Drv_DcModule.h"
#include "Drv_MCP2515.h"
#include "Memory.h"
#include "Drv_SmartAllocation.h"
...
...
@@ -23,70 +23,83 @@ StructDcModuleAbility DcModuleAbility =
.
SingleMaxCurrt
=
DcModuleSinMaxCurrt
,
};
StructDcModuleManage
DcModuleManage
;
StructDcModuleManage
DcModuleManage_B
;
StructDcModuleManage
DcModuleManage_All
;
StructDcModuleStatus
DcModuleStatus
[
64
];
StructDcModuleStatus
DcModuleStatus_B
[
64
];
StructDcModuleStatus
DcModuleStatus_ALL
[
64
];
StructDcModuleCtrl
DcModuleCtrl
;
StructDcModuleCtrl
DcModuleCtrl_B
;
StructDcModuleCtrl
DcModuleCtrl_ALL
;
void
DcModuleRxIrqHandle
(
void
)
{
CanRxMsg
RxMsg
;
u8
IrSta
=
0
;
StructDcModuleStatus
Data
;
u8
RecvFlag
;
Union1939Id
Id1939
=
{.
Mult
=
0
,};
UnionYouExtId
CommId
=
{.
Mult
=
0
,};
Union1939Id
Id1939
=
{
.
Mult
=
0
,
};
UnionYouExtId
CommId
=
{
.
Mult
=
0
,
};
IrSta
=
MCP2515_ReadStatus
();
if
(
IrSta
&
0x01
)
if
(
IrSta
&
0x01
)
{
RecvFlag
=
MCP2515_Receive
(
0
,
&
RxMsg
);
MCP2515_BitModify
(
CANINTF
,
0x01
,
0x00
);
Id1939
.
Mult
=
RxMsg
.
ExtId
;
CommId
.
Mult
=
RxMsg
.
ExtId
;
if
(
TRUE
==
RecvFlag
)
if
(
TRUE
==
RecvFlag
)
{
if
((
CAN_ID_EXT
==
RxMsg
.
IDE
)
&&
(
CAN_RTR_DATA
==
RxMsg
.
RTR
))
if
((
CAN_ID_EXT
==
RxMsg
.
IDE
)
&&
(
CAN_RTR_DATA
==
RxMsg
.
RTR
))
{
if
((
0x1207C080
==
(
RxMsg
.
ExtId
&
0xFFFFFFC0
))
&&
(
0x01
==
RxMsg
.
Data
[
0
]))
//模块状态回复
if
((
0x1207C080
==
(
RxMsg
.
ExtId
&
0xFFFFFFC0
))
&&
(
0x01
==
RxMsg
.
Data
[
0
]))
//模块状态回复
{
Data
.
Id
=
RxMsg
.
ExtId
&
0x0000003F
;
DcModuleManage
.
OnlineFlag
|=
((
long
long
)
1
<<
Data
.
Id
);
Data
.
Currt
=
((
u32
)
RxMsg
.
Data
[
2
]
<<
8
)
+
RxMsg
.
Data
[
3
];
Data
.
Volt
=
((
u32
)
RxMsg
.
Data
[
4
]
<<
8
)
+
RxMsg
.
Data
[
5
];
Data
.
State
=
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
RxMsg
.
Data
[
7
];
DcModuleManage_All
.
OnlineFlag
|=
((
long
long
)
1
<<
Data
.
Id
);
Data
.
Currt
=
((
u32
)
RxMsg
.
Data
[
2
]
<<
8
)
+
RxMsg
.
Data
[
3
];
Data
.
Volt
=
((
u32
)
RxMsg
.
Data
[
4
]
<<
8
)
+
RxMsg
.
Data
[
5
];
Data
.
State
=
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
RxMsg
.
Data
[
7
];
Data
.
RecvTime
=
GetSystemTick
();
DcModuleStatus
[
Data
.
Id
]
=
Data
;
DcModuleStatus_ALL
[
Data
.
Id
]
=
Data
;
}
}
}
}
else
if
(
IrSta
&
0x02
)
else
if
(
IrSta
&
0x02
)
{
RecvFlag
=
MCP2515_Receive
(
1
,
&
RxMsg
);
MCP2515_BitModify
(
CANINTF
,
0x02
,
0x00
);
Id1939
.
Mult
=
RxMsg
.
ExtId
;
CommId
.
Mult
=
RxMsg
.
ExtId
;
if
(
TRUE
==
RecvFlag
)
if
(
TRUE
==
RecvFlag
)
{
if
((
CAN_ID_EXT
==
RxMsg
.
IDE
)
&&
(
CAN_RTR_DATA
==
RxMsg
.
RTR
))
if
((
CAN_ID_EXT
==
RxMsg
.
IDE
)
&&
(
CAN_RTR_DATA
==
RxMsg
.
RTR
))
{
if
((
0x1207C080
==
(
RxMsg
.
ExtId
&
0xFFFFFFC0
))
&&
(
0x01
==
RxMsg
.
Data
[
0
]))
//模块状态回复
if
((
0x1207C080
==
(
RxMsg
.
ExtId
&
0xFFFFFFC0
))
&&
(
0x01
==
RxMsg
.
Data
[
0
]))
//模块状态回复
{
Data
.
Id
=
RxMsg
.
ExtId
&
0x0000003F
;
DcModuleManage
.
OnlineFlag
|=
((
long
long
)
1
<<
Data
.
Id
);
Data
.
Currt
=
((
u32
)
RxMsg
.
Data
[
2
]
<<
8
)
+
RxMsg
.
Data
[
3
];
Data
.
Volt
=
((
u32
)
RxMsg
.
Data
[
4
]
<<
8
)
+
RxMsg
.
Data
[
5
];
Data
.
State
=
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
RxMsg
.
Data
[
7
];
DcModuleManage_All
.
OnlineFlag
|=
((
long
long
)
1
<<
Data
.
Id
);
Data
.
Currt
=
((
u32
)
RxMsg
.
Data
[
2
]
<<
8
)
+
RxMsg
.
Data
[
3
];
Data
.
Volt
=
((
u32
)
RxMsg
.
Data
[
4
]
<<
8
)
+
RxMsg
.
Data
[
5
];
Data
.
State
=
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
RxMsg
.
Data
[
7
];
Data
.
RecvTime
=
GetSystemTick
();
DcModuleStatus
[
Data
.
Id
]
=
Data
;
DcModuleStatus_ALL
[
Data
.
Id
]
=
Data
;
}
}
...
...
@@ -94,6 +107,7 @@ void DcModuleRxIrqHandle(void)
}
}
/*125K*/
void
DcModuleCanInit
(
void
)
{
...
...
@@ -101,13 +115,13 @@ void DcModuleCanInit(void)
MCP2515_SetInt
(
DcModuleRxIrqHandle
,
DISABLE
);
MCP2515_SpiInit
();
//初始化MCU的SPI总线
MCP2515_SpiInit
();
//初始化MCU的SPI总线
MCP2515_Reset
();
// MCP2515 启动前进行软件复位
MCP2515_Reset
();
// MCP2515 启动前进行软件复位
//使用位修改指令将MCP2515设置为配置模式
//也就是将CANCTRL寄存器的REQOP[2:0]设置为100
MCP2515_BitModify
(
CANCTRL
,
0xE0
,
(
1
<<
REQOP2
));
MCP2515_BitModify
(
CANCTRL
,
0xE0
,
(
1
<<
REQOP2
));
/*
//计算并设置MCP2515的位时间
...
...
@@ -131,24 +145,28 @@ void DcModuleCanInit(void)
MCP2515_WriteReg( CNF3, (1<<PHSEG21) );
*/
MCP2515_WriteReg
(
CNF1
,
(
1
<<
BRP0
)
|
(
1
<<
BRP1
)
|
(
1
<<
BRP2
));
//125K
MCP2515_WriteReg
(
CNF1
,
(
1
<<
BRP0
)
|
(
1
<<
BRP1
)
|
(
1
<<
BRP2
));
//125K
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度3TQ
MCP2515_WriteReg
(
CNF2
,
(
1
<<
BTLMODE
)
|
(
1
<<
PHSEG11
));
MCP2515_WriteReg
(
CNF2
,
(
1
<<
BTLMODE
)
|
(
1
<<
PHSEG11
));
// 设置 相位缓冲段 Phase Seg2为 3TQ , 禁用唤醒滤波器
MCP2515_WriteReg
(
CNF3
,
(
1
<<
PHSEG21
)
);
MCP2515_WriteReg
(
CNF3
,
(
1
<<
PHSEG21
)
);
// 设置MCP2515中断使能寄存器,使能接收缓冲器中断
MCP2515_WriteReg
(
CANINTE
,
(
1
<<
RX1IE
)
|
(
1
<<
RX0IE
));
MCP2515_WriteReg
(
CANINTE
,
(
1
<<
RX1IE
)
|
(
1
<<
RX0IE
));
//设置数据接收相关寄存器
// 设置RXM[1:0]=11,关闭接收缓冲器0屏蔽/滤波功能,接收所有报文;禁止滚存功能
//MCP2515_WriteReg(RXB0CTRL, (1<<RXM1)|(1<<RXM0));
MCP2515_WriteReg
(
RXB0CTRL
,
(
1
<<
RXM1
)
|
(
1
<<
RXM0
)
|
(
1
<<
BUKT
));
MCP2515_WriteReg
(
RXB0CTRL
,
(
1
<<
RXM1
)
|
(
1
<<
RXM0
)
|
(
1
<<
BUKT
));
// 设置RXM[1:0]=11,关闭接收缓冲器1屏蔽/滤波功能,接收所有报文;
MCP2515_WriteReg
(
RXB1CTRL
,
(
1
<<
RXM1
)
|
(
1
<<
RXM0
));
u8
Temp
[
4
]
=
{
0
,
0
,
0
,
0
};
MCP2515_WriteReg
(
RXB1CTRL
,
(
1
<<
RXM1
)
|
(
1
<<
RXM0
));
u8
Temp
[
4
]
=
{
0
,
0
,
0
,
0
};
//设置6个验收滤波寄存器为0,
MCP2515_WriteBuffer
(
RXF0SIDH
,
Temp
,
4
);
...
...
@@ -168,14 +186,11 @@ void DcModuleCanInit(void)
//调试使用,设置BFPCTRL使RX0BF,RX1BF设置为数字输出。
//MCP2515_BitModify( BFPCTRL, (1<<B1BFE)|(1<<B0BFE)|(1<<B1BFM)|(1<<B0BFM), (1<<B1BFE)|(1<<B0BFE) );
//设置发送相关引脚控制寄存器,配置它们禁用第二功能
MCP2515_WriteReg
(
TXRTSCTRL
,
0
);
//MCP2515进入环回模式,进行功能测试
//MCP2515_BitModify(CANCTRL, 0XE0, (1<<REQOP1));
//MCP2515进入正常模式
MCP2515_BitModify
(
CANCTRL
,
0xE0
,
0
);
...
...
@@ -186,14 +201,16 @@ void DcModuleCanInit(void)
MCP2515_SpiHightSpeedInit
();
}
/**************************************************************************************************
** 函数名: CAN1_SendMessage
** 输 入: ulCanId----发送ID, ulCanDataA----发送数据的底4字节, ulCanDataB----发送数据的高4字节
** 输 入: ulCanId----发送ID, ulCanDataA----发送数据的底4字节, ulCanDataB----发送数据的高4字�
��
** 输 出: 参数读取状态
** 描 述: 通过CAN通道发送数据
** 日 期: 2010/08/19
**************************************************************************************************/
u8
DcModuleSendMsg
(
StructDcModuleSend
*
pMsg
)
u8
DcModuleSendMsg
(
StructDcModuleSend
*
pMsg
)
{
CanTxMsg
TxMsg
;
...
...
@@ -210,7 +227,7 @@ u8 DcModuleSendMsg(StructDcModuleSend *pMsg)
TxMsg
.
Data
[
6
]
=
pMsg
->
Data
[
6
];
TxMsg
.
Data
[
7
]
=
pMsg
->
Data
[
7
];
if
(
CAN_TxStatus_NoMailBox
!=
MCP2515_Transmit
(
&
TxMsg
))
if
(
CAN_TxStatus_NoMailBox
!=
MCP2515_Transmit
(
&
TxMsg
))
return
TRUE
;
return
FALSE
;
//未发送成功,返回FALSE
...
...
@@ -220,50 +237,71 @@ u8 DcModuleSendMsg(StructDcModuleSend *pMsg)
void
DcModuleSet
(
EnumSwitchStatus
Set
,
u16
Volt
,
u16
Currt
)
{
if
(
Currt
>
DcModuleAbility
.
SingleMaxCurrt
)
if
(
Currt
>
DcModuleAbility
.
SingleMaxCurrt
)
Currt
=
DcModuleAbility
.
SingleMaxCurrt
;
if
(
eSwSta_Off
==
Set
)
if
(
eSwSta_Off
==
Set
)
{
DcModuleCtrl
.
CtrlFlag
=
0
;
DcModuleCtrl
.
NeedVolt
=
Volt
;
DcModuleCtrl
.
NeedCurrt
=
Currt
;
if
(
DcModuleGroup
[
0
].
status
==
Hold_A
)
{
DcModuleGroup
[
0
].
status
=
Valid
;
DcModuleManage
.
ValidNum
-=
DcModuleGroup
[
0
].
ValidNum
;
}
}
else
{
DcModuleCtrl
.
CtrlFlag
=
1
;
DcModuleCtrl
.
NeedVolt
=
Volt
;
DcModuleCtrl
.
NeedCurrt
=
Currt
;
if
(
DcModuleGroup
[
0
].
status
==
Hold_B
)
{
DcModuleGroup
[
0
].
status
=
Hold_A
;
DcModuleManage_B
.
ValidNum
-=
DcModuleGroup
[
0
].
ValidNum
;
}
else
if
(
DcModuleGroup
[
0
].
status
==
Valid
)
{
DcModuleGroup
[
0
].
status
=
Hold_A
;
DcModuleManage
.
ValidNum
+=
DcModuleGroup
[
0
].
ValidNum
;
}
}
}
u16
GetDcModuleVolt
(
void
)
{
//return DcModuleCtrl.ActualVolt*201/200;
return
(
u16
)((
u32
)
DcModuleCtrl
.
ActualVolt
*
UserParam
.
VoltRatio
/
1000
);
return
(
u16
)
((
u32
)
DcModuleCtrl
.
ActualVolt
*
UserParam
.
VoltRatio
/
1000
);
}
u16
GetDcModuleCurrt
(
void
)
{
//return DcModuleCtrl.ActualCurrt*202/200;
return
(
u16
)((
u32
)
DcModuleCtrl
.
ActualCurrt
*
UserParam
.
CurrtRatio
/
1000
);
return
(
u16
)
((
u32
)
DcModuleCtrl
.
ActualCurrt
*
UserParam
.
CurrtRatio
/
1000
);
}
u16
GetDcModuleVoltSet
(
void
)
{
//return DcModuleManage.SetVolt/100;
return
DcModuleCtrl
.
NeedVolt
;
}
u16
GetDcModuleCurrtSet
(
void
)
{
//return DcModuleManage.SetVolt*DcModuleManage.ValidNum/100;
return
DcModuleCtrl
.
NeedCurrt
;
}
osMessageQId
DcModeMsg
=
0
;
extern
void
DcModuleManageProcess_SmartAllocation
(
void
);
extern
void
DcModuleCtrlProcess_SmartAllocation
(
void
);
/* the system main thread */
void
DcModule
(
void
const
*
parameter
)
void
DcModule
(
void
const
*
parameter
)
{
osDelay
(
6000
);
...
...
@@ -273,13 +311,13 @@ void DcModule(void const *parameter)
DcModuleAbility
.
MinVolt
=
UserParam
.
DcMinVolt
;
DcModuleAbility
.
MaxCurrt
=
UserParam
.
DcMaxCurrt
;
DcModuleAbility
.
MinCurrt
=
UserParam
.
DcMinCurrt
;
DcModuleAbility
.
SingleMaxCurrt
=
UserParam
.
SingleMaxCurrt
;
DcModuleAbility
.
SingleMaxCurrt
=
UserParam
.
SingleMaxCurrt
;
DcModeMsg
=
NULL
;
osMessageQDef
(
DcModeMsg
,
64
,
StructDcModuleSend
);
DcModeMsg
=
osMessageCreate
(
osMessageQ
(
DcModeMsg
),
NULL
);
while
(
1
)
while
(
1
)
{
...
...
@@ -292,378 +330,93 @@ void DcModule(void const *parameter)
}
DcModuleManageProcess_SmartAllocation
();
#if 0
static u8 StatusGetCnt = 0;
StatusGetCnt++;
if(StatusGetCnt > 64)
StatusGetCnt = 0;
DataSend.Id = 0x1307C080 + StatusGetCnt;
DataSend.Len = 8;
DataSend.Data[0] = 0x01;
DataSend.Data[1] = 0x00;
DataSend.Data[2] = 0x00;
DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00;
DataSend.Data[7] = 0x00;
if(pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
osDelay(1000);
}
#endif
osDelay
(
30
);
osDelay
(
15
);
DcModuleCtrlProcess_SmartAllocation
();
osDelay
(
15
);
}
}
u8
DcModuleInit
(
void
)
{
osThreadDef
(
DcModule
,
DcModule
,
osPriorityAboveNormal
,
0
,
configMINIMAL_STACK_SIZE
);
if
(
NULL
==
osThreadCreate
(
osThread
(
DcModule
),
NULL
))
if
(
NULL
==
osThreadCreate
(
osThread
(
DcModule
),
NULL
))
return
FALSE
;
return
TRUE
;
}
void
DcModuleRxIrqHandle_B
(
void
)
{
CanRxMsg
RxMsg
;
u8
IrSta
=
0
;
StructDcModuleStatus
Data
;
u8
RecvFlag
;
Union1939Id
Id1939
=
{.
Mult
=
0
,};
UnionYouExtId
CommId
=
{.
Mult
=
0
,};
//IrSta = MCP2515_ReadReg(CANINTF);
IrSta
=
MCP2515_B_ReadStatus
();
if
(
IrSta
&
0x01
)
{
RecvFlag
=
MCP2515_B_Receive
(
0
,
&
RxMsg
);
MCP2515_B_BitModify
(
CANINTF
,
0x01
,
0x00
);
Id1939
.
Mult
=
RxMsg
.
ExtId
;
CommId
.
Mult
=
RxMsg
.
ExtId
;
if
(
TRUE
==
RecvFlag
)
{
if
((
CAN_ID_EXT
==
RxMsg
.
IDE
)
&&
(
CAN_RTR_DATA
==
RxMsg
.
RTR
))
{
if
(
UserParam
.
Module
.
DCModType
==
eDCModType_ZhongXin
)
{
if
((
0x80
==
(
Id1939
.
Disp
.
DA_PS
))
&&
(
0x01
==
(
Id1939
.
Disp
.
PF
))
&&
(
0x06
==
(
Id1939
.
Disp
.
Prio
)))
//模块状态回复
{
Data
.
Id
=
Id1939
.
Disp
.
SA
;
DcModuleManage_B
.
OnlineFlag
|=
((
long
long
)
1
<<
Data
.
Id
);
Data
.
Currt
=
(((
u32
)
RxMsg
.
Data
[
4
]
<<
8
)
+
RxMsg
.
Data
[
3
])
/
10
;
Data
.
Volt
=
(((
u32
)
RxMsg
.
Data
[
2
]
<<
8
)
+
RxMsg
.
Data
[
1
]);
Data
.
State
=
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
RxMsg
.
Data
[
5
]
+
((
u32
)
RxMsg
.
Data
[
7
]
<<
16
);
Data
.
RecvTime
=
GetSystemTick
();
DcModuleStatus_B
[
Data
.
Id
]
=
Data
;
}
}
else
if
((
UserParam
.
Module
.
DCModType
==
eDCModType_YouYou
)
||
(
UserParam
.
Module
.
DCModType
==
eDCModType_YouYouNormal
)
)
{
Data
.
Id
=
CommId
.
Disp
.
ModAd
;
if
((
Data
.
Id
<
0x0D
)
&&
(
RxMsg
.
Data
[
0
]
==
0x13
))
{
DcModuleManage_B
.
OnlineFlag
|=
((
long
long
)
1
<<
Data
.
Id
);
DcModuleStatus_B
[
Data
.
Id
].
RecvTime
=
GetSystemTick
();
if
(
0x00
==
RxMsg
.
Data
[
1
])
//模块输出电压
{
DcModuleStatus_B
[
Data
.
Id
].
Volt
=
(((
u32
)
RxMsg
.
Data
[
4
]
<<
24
)
+
((
u32
)
RxMsg
.
Data
[
5
]
<<
16
)
+
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
(
u32
)
RxMsg
.
Data
[
7
]
)
/
100
;
}
else
if
(
0x01
==
RxMsg
.
Data
[
1
])
//模块输出电流
{
DcModuleStatus_B
[
Data
.
Id
].
Currt
=
(((
u32
)
RxMsg
.
Data
[
4
]
<<
24
)
+
((
u32
)
RxMsg
.
Data
[
5
]
<<
16
)
+
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
(
u32
)
RxMsg
.
Data
[
7
]
)
/
100
;
}
else
if
(
0x08
==
RxMsg
.
Data
[
1
])
//模块状态标志位
{
DcModuleStatus_B
[
Data
.
Id
].
State
=
(((
u32
)
RxMsg
.
Data
[
4
]
<<
24
)
+
((
u32
)
RxMsg
.
Data
[
5
]
<<
16
)
+
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
(
u32
)
RxMsg
.
Data
[
7
]
);
}
else
if
(
0x60
==
RxMsg
.
Data
[
1
])
//模块状态标志位
{
if
(
RxMsg
.
Data
[
7
]
==
0x02
)
DcModuleStatus_B
[
Data
.
Id
].
ModStatus
=
eSwSta_Low
;
else
if
(
RxMsg
.
Data
[
7
]
==
0x01
)
DcModuleStatus_B
[
Data
.
Id
].
ModStatus
=
eSwSta_High
;
}
}
}
else
{
if
((
0x1207C080
==
(
RxMsg
.
ExtId
&
0xFFFFFFC0
))
&&
(
0x01
==
RxMsg
.
Data
[
0
]))
//模块状态回复
{
Data
.
Id
=
RxMsg
.
ExtId
&
0x0000003F
;
DcModuleManage_B
.
OnlineFlag
|=
((
long
long
)
1
<<
Data
.
Id
);
Data
.
Currt
=
((
u32
)
RxMsg
.
Data
[
2
]
<<
8
)
+
RxMsg
.
Data
[
3
];
Data
.
Volt
=
((
u32
)
RxMsg
.
Data
[
4
]
<<
8
)
+
RxMsg
.
Data
[
5
];
Data
.
State
=
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
RxMsg
.
Data
[
7
];
Data
.
RecvTime
=
GetSystemTick
();
DcModuleStatus_B
[
Data
.
Id
]
=
Data
;
}
}
}
}
}
else
if
(
IrSta
&
0x02
)
{
RecvFlag
=
MCP2515_B_Receive
(
1
,
&
RxMsg
);
MCP2515_B_BitModify
(
CANINTF
,
0x02
,
0x00
);
Id1939
.
Mult
=
RxMsg
.
ExtId
;
CommId
.
Mult
=
RxMsg
.
ExtId
;
if
(
TRUE
==
RecvFlag
)
{
if
((
CAN_ID_EXT
==
RxMsg
.
IDE
)
&&
(
CAN_RTR_DATA
==
RxMsg
.
RTR
))
{
if
((
0x1207C080
==
(
RxMsg
.
ExtId
&
0xFFFFFFC0
))
&&
(
0x01
==
RxMsg
.
Data
[
0
]))
//模块状态回复
{
Data
.
Id
=
RxMsg
.
ExtId
&
0x0000003F
;
DcModuleManage_B
.
OnlineFlag
|=
((
long
long
)
1
<<
Data
.
Id
);
Data
.
Currt
=
((
u32
)
RxMsg
.
Data
[
2
]
<<
8
)
+
RxMsg
.
Data
[
3
];
Data
.
Volt
=
((
u32
)
RxMsg
.
Data
[
4
]
<<
8
)
+
RxMsg
.
Data
[
5
];
Data
.
State
=
((
u32
)
RxMsg
.
Data
[
6
]
<<
8
)
+
RxMsg
.
Data
[
7
];
Data
.
RecvTime
=
GetSystemTick
();
DcModuleStatus_B
[
Data
.
Id
]
=
Data
;
}
}
}
}
}
/*125K*/
void
DcModuleCanInit_B
(
void
)
{
MCP2515_B_EnterCritical
();
MCP2515_B_SetInt
(
DcModuleRxIrqHandle_B
,
DISABLE
);
MCP2515_B_SpiInit
();
//初始化MCU的SPI总线
MCP2515_B_Reset
();
// MCP2515 启动前进行软件复位
//使用位修改指令将MCP2515设置为配置模式
//也就是将CANCTRL寄存器的REQOP[2:0]设置为100
MCP2515_B_BitModify
(
CANCTRL
,
0xE0
,
(
1
<<
REQOP2
));
/*
//计算并设置MCP2515的位时间
// 时钟频率:Fosc = 16MHz
// 分频控制器 CNF1.BRP[5:0] = 7
// 最小时间份额 TQ = 2 * ( BRP + 1 ) / Fosc = 2*(7+1)/16M = 1uS
// 同步段 Sync Seg = 1TQ
// 传播段 Prop Seg = ( PRSEG + 1 ) * TQ = 1 TQ
// 相位缓冲段 Phase Seg1 = ( PHSEG1 + 1 ) * TQ = 3 TQ
// 相位缓冲段 Phase Seg2 = ( PHSEG2 + 1 ) * TQ = 3 TQ
// 同步跳转长度设置为 CNF1.SJW[1:0] = 00, 即 1TQ
// 总线波特率 NBR = Fbit = 1/(sync seg + Prop seg + PS1 + PS2 )
// = 1/(8TQ) = 1/8uS = 125kHz
//设置分频控制器CNF1.BRP[5:0] = 7,同步跳转长度设置为 CNF1.SJW[1:0] = 00
MCP2515_WriteReg( CNF1, (1<<BRP0)|(1<<BRP1)|(1<<BRP2) );
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度3TQ
MCP2515_WriteReg( CNF2, (1<<BTLMODE)|(1<<PHSEG11) );
// 设置 相位缓冲段 Phase Seg2为 3TQ , 禁用唤醒滤波器
MCP2515_WriteReg( CNF3, (1<<PHSEG21) );
*/
MCP2515_B_WriteReg
(
CNF1
,
(
1
<<
BRP0
)
|
(
1
<<
BRP1
)
|
(
1
<<
BRP2
));
//125K
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度3TQ
MCP2515_B_WriteReg
(
CNF2
,
(
1
<<
BTLMODE
)
|
(
0
<<
PHSEG11
));
// 设置 相位缓冲段 Phase Seg2为 3TQ , 禁用唤醒滤波器
MCP2515_B_WriteReg
(
CNF3
,
(
0
<<
PHSEG21
)
);
// 设置MCP2515中断使能寄存器,使能接收缓冲器中断
MCP2515_B_WriteReg
(
CANINTE
,
(
1
<<
RX1IE
)
|
(
1
<<
RX0IE
));
//设置数据接收相关寄存器
// 设置RXM[1:0]=11,关闭接收缓冲器0屏蔽/滤波功能,接收所有报文;禁止滚存功能
//MCP2515_WriteReg(RXB0CTRL, (1<<RXM1)|(1<<RXM0));
MCP2515_B_WriteReg
(
RXB0CTRL
,
(
1
<<
RXM1
)
|
(
1
<<
RXM0
)
|
(
1
<<
BUKT
));
// 设置RXM[1:0]=11,关闭接收缓冲器1屏蔽/滤波功能,接收所有报文;
MCP2515_B_WriteReg
(
RXB1CTRL
,
(
1
<<
RXM1
)
|
(
1
<<
RXM0
));
u8
Temp
[
4
]
=
{
0
,
0
,
0
,
0
};
//设置6个验收滤波寄存器为0,
MCP2515_B_WriteBuffer
(
RXF0SIDH
,
Temp
,
4
);
MCP2515_B_WriteBuffer
(
RXF1SIDH
,
Temp
,
4
);
MCP2515_B_WriteBuffer
(
RXF2SIDH
,
Temp
,
4
);
MCP2515_B_WriteBuffer
(
RXF3SIDH
,
Temp
,
4
);
MCP2515_B_WriteBuffer
(
RXF4SIDH
,
Temp
,
4
);
MCP2515_B_WriteBuffer
(
RXF5SIDH
,
Temp
,
4
);
//设置2个验收滤波寄存器为0,
MCP2515_B_WriteBuffer
(
RXM0SIDH
,
Temp
,
4
);
MCP2515_B_WriteBuffer
(
RXM1SIDH
,
Temp
,
4
);
//配置引脚
//设置接收相关引脚控制寄存器,配置它们禁用第二功能
MCP2515_B_WriteReg
(
BFPCTRL
,
0
);
//调试使用,设置BFPCTRL使RX0BF,RX1BF设置为数字输出。
//MCP2515_BitModify( BFPCTRL, (1<<B1BFE)|(1<<B0BFE)|(1<<B1BFM)|(1<<B0BFM), (1<<B1BFE)|(1<<B0BFE) );
//设置发送相关引脚控制寄存器,配置它们禁用第二功能
MCP2515_B_WriteReg
(
TXRTSCTRL
,
0
);
//MCP2515进入环回模式,进行功能测试
//MCP2515_BitModify(CANCTRL, 0XE0, (1<<REQOP1));
//MCP2515进入正常模式
MCP2515_B_BitModify
(
CANCTRL
,
0xE0
,
0
);
MCP2515_B_SetInt
(
DcModuleRxIrqHandle_B
,
ENABLE
);
MCP2515_B_ExitCritical
();
MCP2515_B_SpiHightSpeedInit
();
}
u8
DcModuleSendMsg_B
(
StructDcModuleSend
*
pMsg
)
{
CanTxMsg
TxMsg
;
TxMsg
.
ExtId
=
pMsg
->
Id
;
TxMsg
.
IDE
=
CAN_ID_EXT
;
TxMsg
.
RTR
=
CAN_RTR_DATA
;
TxMsg
.
DLC
=
pMsg
->
Len
;
TxMsg
.
Data
[
0
]
=
pMsg
->
Data
[
0
];
TxMsg
.
Data
[
1
]
=
pMsg
->
Data
[
1
];
TxMsg
.
Data
[
2
]
=
pMsg
->
Data
[
2
];
TxMsg
.
Data
[
3
]
=
pMsg
->
Data
[
3
];
TxMsg
.
Data
[
4
]
=
pMsg
->
Data
[
4
];
TxMsg
.
Data
[
5
]
=
pMsg
->
Data
[
5
];
TxMsg
.
Data
[
6
]
=
pMsg
->
Data
[
6
];
TxMsg
.
Data
[
7
]
=
pMsg
->
Data
[
7
];
if
(
CAN_TxStatus_NoMailBox
!=
MCP2515_B_Transmit
(
&
TxMsg
))
return
TRUE
;
return
FALSE
;
//未发送成功,返回FALSE
}
void
DcModuleSet_B
(
EnumSwitchStatus
Set
,
u16
Volt
,
u16
Currt
)
{
if
(
Currt
>
DcModuleAbility
.
SingleMaxCurrt
)
if
(
Currt
>
DcModuleAbility
.
SingleMaxCurrt
)
Currt
=
DcModuleAbility
.
SingleMaxCurrt
;
if
(
eSwSta_Off
==
Set
)
if
(
eSwSta_Off
==
Set
)
{
DcModuleCtrl_B
.
CtrlFlag
=
0
;
DcModuleCtrl_B
.
NeedVolt
=
Volt
;
DcModuleCtrl_B
.
NeedCurrt
=
Currt
;
if
(
DcModuleGroup
[
2
].
status
==
Hold_B
)
{
DcModuleGroup
[
2
].
status
=
Valid
;
DcModuleManage_B
.
ValidNum
-=
DcModuleGroup
[
2
].
ValidNum
;
}
}
else
{
DcModuleCtrl_B
.
CtrlFlag
=
1
;
DcModuleCtrl_B
.
NeedVolt
=
Volt
;
DcModuleCtrl_B
.
NeedCurrt
=
Currt
;
if
(
DcModuleGroup
[
2
].
status
==
Hold_A
)
{
DcModuleGroup
[
2
].
status
=
Hold_B
;
DcModuleManage
.
ValidNum
-=
DcModuleGroup
[
2
].
ValidNum
;
}
else
if
(
DcModuleGroup
[
2
].
status
==
Valid
)
{
DcModuleGroup
[
2
].
status
=
Hold_B
;
DcModuleManage_B
.
ValidNum
+=
DcModuleGroup
[
2
].
ValidNum
;
}
}
}
u16
GetDcModuleVolt_B
(
void
)
{
//return DcModuleCtrl_B.ActualVolt;
return
(
u16
)((
u32
)
DcModuleCtrl_B
.
ActualVolt
*
UserParam
.
VoltRatio
/
1000
);
return
(
u16
)
((
u32
)
DcModuleCtrl_B
.
ActualVolt
*
UserParam
.
VoltRatio
/
1000
);
}
u16
GetDcModuleCurrt_B
(
void
)
{
//return DcModuleCtrl_B.ActualCurrt;
return
(
u16
)((
u32
)
DcModuleCtrl_B
.
ActualCurrt
*
UserParam
.
CurrtRatio
/
1000
);
return
(
u16
)
((
u32
)
DcModuleCtrl_B
.
ActualCurrt
*
UserParam
.
CurrtRatio
/
1000
);
}
u16
GetDcModuleVoltSet_B
(
void
)
{
//return DcModuleManage_B.SetVolt/100;
return
DcModuleCtrl_B
.
NeedVolt
;
}
u16
GetDcModuleCurrtSet_B
(
void
)
{
//return DcModuleManage_B.SetVolt*DcModuleManage_B.ValidNum/100;
return
DcModuleCtrl_B
.
NeedCurrt
;
}
/* the system main thread */
void
DcModule_B
(
void
const
*
parameter
)
{
osDelay
(
6000
);
DcModuleCanInit_B
();
while
(
1
)
{
{
//DcModuleManageProcess_BIncre();
osDelay
(
30
);
#if 1
static
u8
StatusGetCnt
=
0
;
StructDcModuleSend
DataSend
;
StatusGetCnt
++
;
if
(
StatusGetCnt
>
64
)
StatusGetCnt
=
0
;
DataSend
.
Id
=
0x1307C080
+
StatusGetCnt
;
DataSend
.
Len
=
8
;
DataSend
.
Data
[
0
]
=
0x01
;
DataSend
.
Data
[
1
]
=
0x00
;
DataSend
.
Data
[
2
]
=
0x00
;
DataSend
.
Data
[
3
]
=
0x00
;
DataSend
.
Data
[
4
]
=
0x00
;
DataSend
.
Data
[
5
]
=
0x00
;
DataSend
.
Data
[
6
]
=
0x00
;
DataSend
.
Data
[
7
]
=
0x00
;
DcModuleSendMsg_B
(
&
DataSend
);
#endif
}
}
}
u8
DcModuleInit_B
(
void
)
{
osThreadDef
(
DcModule_B
,
DcModule_B
,
osPriorityAboveNormal
,
0
,
configMINIMAL_STACK_SIZE
);
if
(
NULL
==
osThreadCreate
(
osThread
(
DcModule_B
),
NULL
))
return
FALSE
;
return
TRUE
;
}
void
DcModuleSet_AB
(
EnumSwitchStatus
Set
,
u16
Volt
,
u16
Currt
)
{
if
(
eSwSta_Off
==
Set
)
if
(
eSwSta_Off
==
Set
)
{
DcModuleCtrl
.
NeedVolt
=
DcModuleAbility
.
MinVolt
;
DcModuleCtrl
.
NeedCurrt
=
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
;
...
...
@@ -676,14 +429,15 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt)
}
else
{
if
(
ChargeEnable_AB
==
0
)
//单枪连冲
if
(
ChargeEnable_AB
==
0
)
//单枪连冲
{
if
(
Currt
>
DcModuleAbility
.
SingleMaxCurrt
)
if
(
Currt
>
DcModuleAbility
.
SingleMaxCurrt
)
Currt
=
DcModuleAbility
.
SingleMaxCurrt
;
}
if
(
0
==
DcModuleManage_B
.
ValidNum
)
if
(
0
==
DcModuleManage_B
.
ValidNum
)
{
if
(
0
==
DcModuleManage
.
ValidNum
)
if
(
0
==
DcModuleManage
.
ValidNum
)
{
DcModuleCtrl
.
NeedVolt
=
DcModuleAbility
.
MinVolt
;
DcModuleCtrl
.
NeedCurrt
=
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
;
...
...
@@ -695,11 +449,12 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt)
DcModuleCtrl
.
NeedCurrt
=
Currt
;
//* (DcModuleManage.ValidNum / (DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcModuleCtrl
.
CtrlFlag
=
1
;
}
DcModuleCtrl_B
.
NeedVolt
=
DcModuleAbility
.
MinVolt
;
DcModuleCtrl_B
.
NeedCurrt
=
DcModuleAbility
.
MinCurrt
*
DcModuleManage_B
.
ValidNum
;
DcModuleCtrl_B
.
CtrlFlag
=
0
;
}
else
if
(
0
==
DcModuleManage
.
ValidNum
)
else
if
(
0
==
DcModuleManage
.
ValidNum
)
{
DcModuleCtrl_B
.
NeedVolt
=
Volt
;
DcModuleCtrl_B
.
NeedCurrt
=
Currt
;
...
...
@@ -713,42 +468,52 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt)
{
DcModuleCtrl
.
NeedVolt
=
Volt
;
DcModuleCtrl_B
.
NeedVolt
=
Volt
;
DcModuleCtrl
.
NeedCurrt
=
(
u16
)(
Currt
*
((
float
)(
DcModuleManage
.
ValidNum
)
/
(
DcModuleManage
.
ValidNum
+
DcModuleManage_B
.
ValidNum
)));
DcModuleCtrl_B
.
NeedCurrt
=
(
u16
)(
Currt
*
((
float
)(
DcModuleManage_B
.
ValidNum
)
/
(
DcModuleManage
.
ValidNum
+
DcModuleManage_B
.
ValidNum
)));
DcModuleCtrl
.
NeedCurrt
=
(
u16
)
(
Currt
*
((
float
)
(
DcModuleManage
.
ValidNum
)
/
(
DcModuleManage
.
ValidNum
+
DcModuleManage_B
.
ValidNum
)));
DcModuleCtrl_B
.
NeedCurrt
=
(
u16
)
(
Currt
*
((
float
)
(
DcModuleManage_B
.
ValidNum
)
/
(
DcModuleManage
.
ValidNum
+
DcModuleManage_B
.
ValidNum
)));
DcModuleCtrl
.
CtrlFlag
=
1
;
DcModuleCtrl_B
.
CtrlFlag
=
1
;
}
}
if
(
ChargeEnable_AB
==
1
)
//双枪连充
if
(
ChargeEnable_AB
==
1
)
//双枪连充
{
if
(
DcModuleCtrl
.
NeedCurrt
>
DcModuleAbility
.
SingleMaxCurrt
)
if
(
DcModuleCtrl
.
NeedCurrt
>
DcModuleAbility
.
SingleMaxCurrt
)
DcModuleCtrl
.
NeedCurrt
=
DcModuleAbility
.
SingleMaxCurrt
;
if
(
DcModuleCtrl_B
.
NeedCurrt
>
DcModuleAbility
.
SingleMaxCurrt
)
if
(
DcModuleCtrl_B
.
NeedCurrt
>
DcModuleAbility
.
SingleMaxCurrt
)
DcModuleCtrl_B
.
NeedCurrt
=
DcModuleAbility
.
SingleMaxCurrt
;
}
}
u16
GetDcModuleVolt_AB
(
void
)
{
if
(
0
==
DcModuleCtrl
.
CtrlFlag
)
if
(
0
==
DcModuleCtrl
.
CtrlFlag
)
return
GetDcModuleVolt_B
();
if
(
0
==
DcModuleCtrl_B
.
CtrlFlag
)
if
(
0
==
DcModuleCtrl_B
.
CtrlFlag
)
return
GetDcModuleVolt
();
return
(
GetDcModuleVolt
()
+
GetDcModuleVolt_B
())
/
2
;
return
(
GetDcModuleVolt
()
+
GetDcModuleVolt_B
())
/
2
;
}
u16
GetDcModuleCurrt_AB
(
void
)
{
return
(
GetDcModuleCurrt
()
+
GetDcModuleCurrt_B
());
return
(
GetDcModuleCurrt
()
+
GetDcModuleCurrt_B
());
}
u16
GetDcModuleVoltSet_AB
(
void
)
{
//return DcModuleManage.SetVolt/100;
return
(
DcModuleCtrl
.
NeedVolt
+
DcModuleCtrl_B
.
NeedVolt
)
/
2
;
return
(
DcModuleCtrl
.
NeedVolt
+
DcModuleCtrl_B
.
NeedVolt
)
/
2
;
}
u16
GetDcModuleCurrtSet_AB
(
void
)
{
//return DcModuleManage.SetVolt*DcModuleManage.ValidNum/100;
...
...
DcPillar/Src/SmartAllocation/SmartAllocation_B_ChgRun.c
浏览文件 @
c6419389
...
...
@@ -123,19 +123,16 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
{
DcModuleGroup
[
3
].
status
=
Hold_B
;
DcModuleManage_B
.
ValidNum
+=
DcModuleGroup
[
3
].
ValidNum
;
//切换继电器
}
else
if
(
DcModuleGroup
[
2
].
status
==
Valid
)
{
DcModuleGroup
[
2
].
status
=
Hold_B
;
DcModuleManage
.
ValidNum
+=
DcModuleGroup
[
2
].
ValidNum
;
//切换继电器
}
else
if
(
DcModuleGroup
[
1
].
status
==
Valid
)
{
DcModuleGroup
[
1
].
status
=
Hold_B
;
DcModuleManage
.
ValidNum
+=
DcModuleGroup
[
1
].
ValidNum
;
//切换继电器
}
}
else
...
...
@@ -144,19 +141,16 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
{
DcModuleGroup
[
1
].
status
=
Valid
;
DcModuleManage
.
ValidNum
-=
DcModuleGroup
[
1
].
ValidNum
;
//切换继电器
}
else
if
(
DcModuleGroup
[
2
].
status
==
Hold_B
)
{
DcModuleGroup
[
2
].
status
=
Valid
;
DcModuleManage
.
ValidNum
-=
DcModuleGroup
[
2
].
ValidNum
;
//切换继电器
}
else
if
(
DcModuleGroup
[
3
].
status
==
Hold_B
)
{
DcModuleGroup
[
3
].
status
=
Valid
;
DcModuleManage
.
ValidNum
-=
DcModuleGroup
[
3
].
ValidNum
;
//切换继电器
}
}
UniChgTick
=
0
;
...
...
DcPillar/Src/SmartAllocation/SmartAllocation_ChgRun.c
浏览文件 @
c6419389
...
...
@@ -99,7 +99,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
if
((
0
!=
ChargePauseFlag
)
||
(
0
!=
BmsPauseTick
))
{
CcsChgEnable
=
0
;
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
}
else
if
(
0
!=
BclMsg
.
Valid
)
...
...
@@ -126,20 +126,17 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
if
(
DcModuleGroup
[
1
].
status
==
Valid
)
{
DcModuleGroup
[
1
].
status
=
Hold_A
;
DcModuleManage_A
.
ValidNum
+=
DcModuleGroup
[
1
].
ValidNum
;
//切换继电器
DcModuleManage
.
ValidNum
+=
DcModuleGroup
[
1
].
ValidNum
;
}
else
if
(
DcModuleGroup
[
3
].
status
==
Valid
)
{
DcModuleGroup
[
3
].
status
=
Hold_A
;
DcModuleManage_A
.
ValidNum
+=
DcModuleGroup
[
3
].
ValidNum
;
//切换继电器
DcModuleManage
.
ValidNum
+=
DcModuleGroup
[
3
].
ValidNum
;
}
else
if
(
DcModuleGroup
[
2
].
status
==
Valid
)
{
DcModuleGroup
[
2
].
status
=
Hold_A
;
DcModuleManage_A
.
ValidNum
+=
DcModuleGroup
[
2
].
ValidNum
;
//切换继电器
DcModuleManage
.
ValidNum
+=
DcModuleGroup
[
2
].
ValidNum
;
}
}
else
...
...
@@ -147,20 +144,17 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
if
(
DcModuleGroup
[
2
].
status
==
Hold_A
)
{
DcModuleGroup
[
2
].
status
=
Valid
;
DcModuleManage_A
.
ValidNum
-=
DcModuleGroup
[
2
].
ValidNum
;
//切换继电器
DcModuleManage
.
ValidNum
-=
DcModuleGroup
[
2
].
ValidNum
;
}
else
if
(
DcModuleGroup
[
3
].
status
==
Hold_A
)
{
DcModuleGroup
[
3
].
status
=
Valid
;
DcModuleManage_A
.
ValidNum
-=
DcModuleGroup
[
3
].
ValidNum
;
//切换继电器
DcModuleManage
.
ValidNum
-=
DcModuleGroup
[
3
].
ValidNum
;
}
else
if
(
DcModuleGroup
[
1
].
status
==
Hold_A
)
{
DcModuleGroup
[
1
].
status
=
Valid
;
DcModuleManage_A
.
ValidNum
-=
DcModuleGroup
[
1
].
ValidNum
;
//切换继电器
DcModuleManage
.
ValidNum
-=
DcModuleGroup
[
1
].
ValidNum
;
}
}
UniChgTick
=
0
;
...
...
@@ -175,8 +169,8 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
}
if
(
NeedCurrt
>
MaxCurrt
)
NeedCurrt
=
MaxCurrt
;
if
(
NeedCurrt
>
(
DcModuleAbility
.
MaxCurrt
*
DcModuleManage
_A
.
ValidNum
))
NeedCurrt
=
DcModuleAbility
.
MaxCurrt
*
DcModuleManage
_A
.
ValidNum
;
if
(
NeedCurrt
>
(
DcModuleAbility
.
MaxCurrt
*
DcModuleManage
.
ValidNum
))
NeedCurrt
=
DcModuleAbility
.
MaxCurrt
*
DcModuleManage
.
ValidNum
;
MaxVolt
=
BcpMsg
.
ChgMaxVolt
;
NeedVolt
=
BclMsg
.
NeedVolt
;
...
...
@@ -202,7 +196,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CstMsg
.
StopFault
.
Value
.
Volt
=
1
;
ChargeError
.
Value
.
VoltOutError
=
1
;
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_VoltOutHighErr
;
...
...
@@ -215,7 +209,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
if
((
eChgVer_2011
!=
UserParam
.
ChgVer
)
&&
(
eChgVer_2011
!=
ChgVer
))
{
Temp
=
GetChgCurrtChgRun
();
if
((
0
!=
CcsChgEnable
)
&&
(
Temp
>
(
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
))
&&
(
Temp
>
GetDcModuleCurrtSet
()))
if
((
0
!=
CcsChgEnable
)
&&
(
Temp
>
(
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
))
&&
(
Temp
>
GetDcModuleCurrtSet
()))
{
if
((
Temp
-
GetDcModuleCurrtSet
())
>
(
GetDcModuleCurrtSet
()
*
10
/
100
))
{
...
...
@@ -234,7 +228,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CstMsg
.
StopFault
.
Value
.
Currt
=
1
;
ChargeError
.
Value
.
CurrtOutError
=
1
;
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_CurrtOutHighErr
;
pChargeCtrl
->
CurProcess
=
eChgPro_ChgStop
;
...
...
@@ -251,7 +245,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopFault
.
Value
.
Volt
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_SinglBatVolt
;
...
...
@@ -264,7 +258,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_SocOver
;
...
...
@@ -276,7 +270,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopFault
.
Value
.
Currt
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_CurrtOver
;
...
...
@@ -288,7 +282,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_BatTempOver
;
...
...
@@ -300,7 +294,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_BatIsolate
;
...
...
@@ -312,7 +306,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_Cc2Error
;
...
...
@@ -321,7 +315,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
}
else
if
(
0x00
==
BsmMsg
.
ChgSta
.
Value
.
ChgEnable
)
{
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
if
(
0
==
BmsPauseTick
)
...
...
@@ -331,7 +325,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_BmsPause
;
...
...
@@ -346,7 +340,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
if
((
GetSystemTick
()
-
BclMsg
.
RecvTick
)
>
MsgTimeout_1S
)
{
CemMsg
.
Cem
.
Value
.
Bcl
=
1
;
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
pChargeCtrl
->
CurProcess
=
eChgPro_CommBreak
;
...
...
@@ -358,7 +352,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
if
((
GetSystemTick
()
-
BcsMsg
.
RecvTick
)
>
MsgTimeout_5S
)
{
CemMsg
.
Cem
.
Value
.
Bcs
=
1
;
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
pChargeCtrl
->
CurProcess
=
eChgPro_CommBreak
;
...
...
@@ -369,7 +363,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
if
(
0
!=
BemMsg
.
Valid
)
{
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
pChargeCtrl
->
CurProcess
=
eChgPro_CommBreak
;
...
...
@@ -379,7 +373,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
if
(
0
!=
BstMsg
.
Valid
)
{
CstMsg
.
StopReason
.
Value
.
BmsStop
=
1
;
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_BmsStop
;
...
...
@@ -390,7 +384,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
{
//ⲿƽ
CstMsg
.
StopReason
.
Value
.
Manual
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_UserCancel
;
...
...
@@ -409,7 +403,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
{
//ⲿƽ
CstMsg
.
StopReason
.
Value
.
AutoSet
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_Soc98
;
...
...
@@ -422,7 +416,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopFault
.
Value
.
Volt
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
ChargeTimerSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_SinglBatVoltOverPermitMax
;
...
...
@@ -442,7 +436,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Manual
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
...
...
@@ -456,7 +450,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Emergency
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_EmerClose
;
pChargeCtrl
->
CurProcess
=
eChgPro_ChgBreak
;
...
...
@@ -467,7 +461,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_DoorOpen
;
pChargeCtrl
->
CurProcess
=
eChgPro_ChgBreak
;
...
...
@@ -478,7 +472,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_Contactor
;
pChargeCtrl
->
CurProcess
=
eChgPro_ChgBreak
;
...
...
@@ -489,7 +483,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_Contactor
;
pChargeCtrl
->
CurProcess
=
eChgPro_ChgBreak
;
...
...
@@ -500,7 +494,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_InVolt
;
pChargeCtrl
->
CurProcess
=
eChgPro_ChgBreak
;
...
...
@@ -511,7 +505,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_NoDcmod
;
pChargeCtrl
->
CurProcess
=
eChgPro_ChgBreak
;
...
...
@@ -522,7 +516,7 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
CstMsg
.
StopReason
.
Value
.
Truble
=
1
;
CstMsg
.
StopTruble
.
Value
.
Other
=
1
;
CST_Send
(
&
CstMsg
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
_A
.
ValidNum
);
DcModuleSet
(
eSwSta_Off
,
DcModuleAbility
.
MinVolt
,
DcModuleAbility
.
MinCurrt
*
DcModuleManage
.
ValidNum
);
DcOutSet
(
eSwSta_Off
);
ChargeStopType
=
eChgStop_Run_Meter
;
pChargeCtrl
->
CurProcess
=
eChgPro_ChgBreak
;
...
...
DcPillar/Src/Thread/Thd_TCU.c
浏览文件 @
c6419389
...
...
@@ -845,7 +845,7 @@ void TCUComm(void const * argument)
for
(;
;
)
{
#if 1
TCURecvProcess
();
//帧接收
TCUWorkProcess
();
//遥测遥信息处理
TCULinkProcess
();
//心跳包处理配置信息
...
...
@@ -853,21 +853,6 @@ void TCUComm(void const * argument)
// TCUCodeDone();//告警故障处理
// TCUSaveEventDone();
#endif
#if 0
static u8 StatusGetCnt = 0;
StatusGetCnt++;
if(StatusGetCnt > 255)
StatusGetCnt = 0;
u8 Data[8] ={0};
Data[0] = StatusGetCnt;
TCUSinglePackSendMsg(Data, 8, eCmd_stopAck, 4);
#endif
osDelay
(
100
);
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论