提交 c6419389 作者: wysheng

完善模块管理

上级 3fce6c2f
......@@ -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 = 125kHz
// = 1/(4TQ) = 1/4uS = 250kHz
//设置分频控制器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) );
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度1TQ
MCP2515_WriteReg( CNF2, (1<<BTLMODE)|(0<<PHSEG10) );
// 设置 相位缓冲段 Phase Seg2为 1TQ , 禁用唤醒滤波器
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的长度3TQ
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度1TQ
MCP2515_B_WriteReg(CNF2, (1 << BTLMODE) | (0 << PHSEG11));
// 设置 相位缓冲段 Phase Seg2为 3TQ , 禁用唤醒滤波器
// 设置 相位缓冲段 Phase Seg2为 1TQ , 禁用唤醒滤波器
MCP2515_B_WriteReg(CNF3, (0 << PHSEG21));
// 设置MCP2515中断使能寄存器,使能接收缓冲器中断
......
......@@ -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_ALL.ActualCurrt = Currt_A;
DcModuleCtrl_ALL.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_All.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);
}
}
}
......
......@@ -40,5 +40,5 @@ typedef struct
}StructDcModuleGroupCtrl;
extern StructDcModuleGroup DcModuleGroup[];
extern StructDcModuleManage DcModuleManage_A;
#endif /*__DRV_SMARTALLOCATION_H__*/
/******************************************************************************
文件 : 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;
......
......@@ -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;
......
......@@ -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;
......
......@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论