提交 620b36ac 作者: wysheng

恢复AB枪电子锁端口

上级 17e9ce90
...@@ -28,13 +28,13 @@ ...@@ -28,13 +28,13 @@
#define DcOutChkPos_Port GPIOE #define DcOutChkPos_Port GPIOE
#define DcOutChkPos_RCC RCC_AHB1Periph_GPIOE #define DcOutChkPos_RCC RCC_AHB1Periph_GPIOE
#define Lock_Pin GPIO_Pin_12 #define Lock_B_Pin GPIO_Pin_12
#define Lock_Port GPIOD #define Lock_B_Port GPIOD
#define Lock_RCC RCC_AHB1Periph_GPIOD #define Lock_B_RCC RCC_AHB1Periph_GPIOD
#define LockChk_Pin GPIO_Pin_14 #define LockChk_B_Pin GPIO_Pin_14
#define LockChk_Port GPIOD #define LockChk_B_Port GPIOD
#define LockChk_RCC RCC_AHB1Periph_GPIOD #define LockChk_B_RCC RCC_AHB1Periph_GPIOD
#define ChgLed_Pin GPIO_Pin_10 #define ChgLed_Pin GPIO_Pin_10
#define ChgLed_Port GPIOE #define ChgLed_Port GPIOE
...@@ -87,13 +87,13 @@ ...@@ -87,13 +87,13 @@
#define DcOutChkNeg_B_RCC RCC_AHB1Periph_GPIOE #define DcOutChkNeg_B_RCC RCC_AHB1Periph_GPIOE
#define Lock_B_Pin GPIO_Pin_13 #define Lock_Pin GPIO_Pin_13
#define Lock_B_Port GPIOD #define Lock_Port GPIOD
#define Lock_B_RCC RCC_AHB1Periph_GPIOD #define Lock_RCC RCC_AHB1Periph_GPIOD
#define LockChk_B_Pin GPIO_Pin_15 #define LockChk_Pin GPIO_Pin_15
#define LockChk_B_Port GPIOD #define LockChk_Port GPIOD
#define LockChk_B_RCC RCC_AHB1Periph_GPIOD #define LockChk_RCC RCC_AHB1Periph_GPIOD
#define ChgLed_B_Pin GPIO_Pin_13 #define ChgLed_B_Pin GPIO_Pin_13
#define ChgLed_B_Port GPIOE #define ChgLed_B_Port GPIOE
......
...@@ -291,16 +291,11 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -291,16 +291,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
static u32 Tick = 0; // static u32 Tick = 0; //
if (Tick == 0)
Tick = GetSystemTick();
if ((GetSystemTick() -Tick) < 100) if ((GetSystemTick() -Tick) < 100)
{ {
return; return;
} }
Tick = GetSystemTick();
Tick = GetSystemTick();
static StructDcModuleUsedStatus status[4] = static StructDcModuleUsedStatus status[4] =
{ {
...@@ -311,7 +306,6 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -311,7 +306,6 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Invalid, Invalid, Invalid, Invalid Invalid, Invalid, Invalid, Invalid
}; };
//StructDcModuleSend DataSend;
u32 Temp; u32 Temp;
u8 addr; u8 addr;
u32 Volt = 0; u32 Volt = 0;
...@@ -420,7 +414,6 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -420,7 +414,6 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
if (DcModuleGroup[i].status == Hold_A && i != 0) if (DcModuleGroup[i].status == Hold_A && i != 0)
{ {
if (abs((s16) (DcModuleGroup[i].Voltage) - (s16) (DcModuleManage.SetVolt / 100)) > 100) //差距在10V以内,升压完成 if (abs((s16) (DcModuleGroup[i].Voltage) - (s16) (DcModuleManage.SetVolt / 100)) > 100) //差距在10V以内,升压完成
{ {
Temp++; Temp++;
...@@ -451,7 +444,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -451,7 +444,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
for (u8 j = 0; j < DcModuleGroup[i].num; j++) for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{ {
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机 DcModuleManage_B.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55; DcModuleGroup[i].modules[j].cmd = 0x55;
...@@ -471,7 +464,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -471,7 +464,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Temp++; Temp++;
for (u8 j = 0; j < DcModuleGroup[i].num; j++) for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{ {
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DcModuleGroup[i].modules[j].cmd = 0xAA; DcModuleGroup[i].modules[j].cmd = 0xAA;
SendCmdToDcModule(addr, 0xAA); //关机 SendCmdToDcModule(addr, 0xAA); //关机
} }
...@@ -583,7 +576,6 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -583,7 +576,6 @@ void DcModuleCtrlProcess_SmartAllocation(void)
} }
if (Temp) if (Temp)
return; return;
...@@ -599,9 +591,9 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -599,9 +591,9 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Temp++; Temp++;
} }
if ((GetSystemTick() -CtrlTick) > 100) //if ((GetSystemTick() -CtrlTick) > 100)
{ {
CtrlTick = GetSystemTick(); //CtrlTick = GetSystemTick();
Temp++; Temp++;
} }
...@@ -712,7 +704,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -712,7 +704,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
for (u8 j = 0; j < DcModuleGroup[i].num; j++) for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{ {
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机 DcModuleManage_B.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55; DcModuleGroup[i].modules[j].cmd = 0x55;
......
...@@ -17,11 +17,11 @@ void DcModleVoltDetect(u16 Voltage); ...@@ -17,11 +17,11 @@ void DcModleVoltDetect(u16 Voltage);
StructDcModuleAbility DcModuleAbility = StructDcModuleAbility DcModuleAbility =
{ {
.MaxVolt = DcModuleMaxVolt, .MaxVolt = DcModuleMaxVolt,
.MinVolt = DcModuleMinVolt, .MinVolt = DcModuleMinVolt,
.MaxCurrt = DcModuleMaxCurrt, .MaxCurrt = DcModuleMaxCurrt,
.MinCurrt = DcModuleMinCurrt, .MinCurrt = DcModuleMinCurrt,
.SingleMaxCurrt = DcModuleSinMaxCurrt, .SingleMaxCurrt = DcModuleSinMaxCurrt,
}; };
...@@ -36,9 +36,12 @@ StructDcModuleCtrl DcModuleCtrl_B; ...@@ -36,9 +36,12 @@ StructDcModuleCtrl DcModuleCtrl_B;
StructDcModuleCtrl DcModuleCtrl_ALL; StructDcModuleCtrl DcModuleCtrl_ALL;
void DcModeleRelayInit(void); void DcModeleRelayInit(void);
extern void GetNXRAcVolt(CanRxMsg* RxMsg); extern void GetNXRAcVolt(CanRxMsg * RxMsg);
extern void GetNXRAcVoltMsg(u32 addr); extern void GetNXRAcVoltMsg(u32 addr);
static s8 DcModleVoltChkCnt = 0;
void DcModuleRxIrqHandle(void) void DcModuleRxIrqHandle(void)
{ {
CanRxMsg RxMsg; CanRxMsg RxMsg;
...@@ -69,6 +72,7 @@ void DcModuleRxIrqHandle(void) ...@@ -69,6 +72,7 @@ void DcModuleRxIrqHandle(void)
Data.RecvTime = GetSystemTick(); Data.RecvTime = GetSystemTick();
DcModuleStatus_ALL[Data.Id] = Data; DcModuleStatus_ALL[Data.Id] = Data;
} }
GetNXRAcVolt(&RxMsg); GetNXRAcVolt(&RxMsg);
} }
} }
...@@ -93,6 +97,7 @@ void DcModuleRxIrqHandle(void) ...@@ -93,6 +97,7 @@ void DcModuleRxIrqHandle(void)
Data.RecvTime = GetSystemTick(); Data.RecvTime = GetSystemTick();
DcModuleStatus_ALL[Data.Id] = Data; DcModuleStatus_ALL[Data.Id] = Data;
} }
GetNXRAcVolt(&RxMsg); GetNXRAcVolt(&RxMsg);
} }
} }
...@@ -103,6 +108,8 @@ void DcModuleRxIrqHandle(void) ...@@ -103,6 +108,8 @@ void DcModuleRxIrqHandle(void)
/*125K*/ /*125K*/
void DcModuleCanInit(void) void DcModuleCanInit(void)
{ {
DcModleVoltChkCnt = 0;
MCP2515_EnterCritical(); MCP2515_EnterCritical();
MCP2515_SetInt(DcModuleRxIrqHandle, DISABLE); MCP2515_SetInt(DcModuleRxIrqHandle, DISABLE);
...@@ -198,6 +205,7 @@ void DcModuleCanInit(void) ...@@ -198,6 +205,7 @@ void DcModuleCanInit(void)
** 函数名: CAN1_SendMessage ** 函数名: CAN1_SendMessage
** 输 入: ulCanId----发送ID, ulCanDataA----发送数据的底4字节, ulCanDataB----发送数据的高4字� ** 输 入: ulCanId----发送ID, ulCanDataA----发送数据的底4字节, ulCanDataB----发送数据的高4字�
�� ��
��
** 输 出: 参数读取状态 ** 输 出: 参数读取状态
** 描 述: 通过CAN通道发送数据 ** 描 述: 通过CAN通道发送数据
** 日 期: 2010/08/19 ** 日 期: 2010/08/19
...@@ -245,20 +253,20 @@ void DcModuleSet(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -245,20 +253,20 @@ void DcModuleSet(EnumSwitchStatus Set, u16 Volt, u16 Currt)
}*/ }*/
release_DcModule(1); release_DcModule(1);
} }
else else
{ {
DcModuleCtrl.CtrlFlag = 1; DcModuleCtrl.CtrlFlag = 1;
DcModuleCtrl.NeedVolt = Volt; DcModuleCtrl.NeedVolt = Volt;
DcModuleCtrl.NeedCurrt = Currt; DcModuleCtrl.NeedCurrt = Currt;
if(DcModuleGroup[0].status == Hold_B) if (DcModuleGroup[0].status == Hold_B)
{ {
DcModuleGroup[0].status = Hold_A; DcModuleGroup[0].status = Hold_A;
DcModuleManage_B.ValidNum -= DcModuleGroup[0].ValidNum; DcModuleManage_B.ValidNum -= DcModuleGroup[0].ValidNum;
DcModuleManage.ValidNum += DcModuleGroup[0].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[0].ValidNum;
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin); GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
} }
else if(DcModuleGroup[0].status == Valid) else if (DcModuleGroup[0].status == Valid)
{ {
DcModuleGroup[0].status = Hold_A; DcModuleGroup[0].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[0].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[0].ValidNum;
...@@ -301,9 +309,8 @@ void DcModule(void const * parameter) ...@@ -301,9 +309,8 @@ void DcModule(void const * parameter)
osDelay(6000); osDelay(6000);
DcModeleRelayInit(); DcModeleRelayInit();
DcModuleCanInit(); DcModuleCanInit();
//ACContactorSet(eSwSta_On); //ACContactorSet(eSwSta_On);
DcModuleAbility.MaxVolt = UserParam.DcMaxVolt; DcModuleAbility.MaxVolt = UserParam.DcMaxVolt;
DcModuleAbility.MinVolt = UserParam.DcMinVolt; DcModuleAbility.MinVolt = UserParam.DcMinVolt;
DcModuleAbility.MaxCurrt = UserParam.DcMaxCurrt; DcModuleAbility.MaxCurrt = UserParam.DcMaxCurrt;
...@@ -313,22 +320,20 @@ void DcModule(void const * parameter) ...@@ -313,22 +320,20 @@ void DcModule(void const * parameter)
DcModeMsg = NULL; DcModeMsg = NULL;
osMessageQDef(DcModeMsg, 128, StructDcModuleSend); osMessageQDef(DcModeMsg, 128, StructDcModuleSend);
DcModeMsg = osMessageCreate(osMessageQ(DcModeMsg), NULL); DcModeMsg = osMessageCreate(osMessageQ(DcModeMsg), NULL);
u32 SendTick = GetSystemTick(); u32 SendTick = GetSystemTick();
while (1) while (1)
{ {
if ((GetSystemTick() -SendTick) > 10) if ((GetSystemTick() -SendTick) > 10)
{
SendTick = GetSystemTick();
StructDcModuleSend DataSend;
if (pdTRUE == xQueueReceive(DcModeMsg, &DataSend, 0))
{ {
DcModuleSendMsg(&DataSend); SendTick = GetSystemTick();
} StructDcModuleSend DataSend;
}
if (pdTRUE == xQueueReceive(DcModeMsg, &DataSend, 0))
{
DcModuleSendMsg(&DataSend);
}
}
DcModuleManageProcess_SmartAllocation(); DcModuleManageProcess_SmartAllocation();
...@@ -369,19 +374,20 @@ void DcModuleSet_B(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -369,19 +374,20 @@ void DcModuleSet_B(EnumSwitchStatus Set, u16 Volt, u16 Currt)
}*/ }*/
release_DcModule(2); release_DcModule(2);
} }
else else
{ {
DcModuleCtrl_B.CtrlFlag = 1; DcModuleCtrl_B.CtrlFlag = 1;
DcModuleCtrl_B.NeedVolt = Volt; DcModuleCtrl_B.NeedVolt = Volt;
DcModuleCtrl_B.NeedCurrt = Currt; DcModuleCtrl_B.NeedCurrt = Currt;
if(DcModuleGroup[2].status == Hold_A)
if (DcModuleGroup[2].status == Hold_A)
{ {
DcModuleGroup[2].status = Hold_B; DcModuleGroup[2].status = Hold_B;
DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum; DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum;
DcModuleManage_B.ValidNum += DcModuleGroup[2].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[2].ValidNum;
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin); GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
} }
else if(DcModuleGroup[2].status == Valid) else if (DcModuleGroup[2].status == Valid)
{ {
DcModuleGroup[2].status = Hold_B; DcModuleGroup[2].status = Hold_B;
DcModuleManage_B.ValidNum += DcModuleGroup[2].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[2].ValidNum;
...@@ -431,7 +437,7 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -431,7 +437,7 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt)
DcModuleCtrl_B.CtrlFlag = 0; DcModuleCtrl_B.CtrlFlag = 0;
} }
else else
{ {
if (ChargeEnable_AB == 0) //单枪连冲 if (ChargeEnable_AB == 0) //单枪连冲
{ {
...@@ -447,7 +453,7 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -447,7 +453,7 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt)
DcModuleCtrl.NeedCurrt = DcModuleAbility.MinCurrt * DcModuleManage.ValidNum; DcModuleCtrl.NeedCurrt = DcModuleAbility.MinCurrt * DcModuleManage.ValidNum;
DcModuleCtrl.CtrlFlag = 0; DcModuleCtrl.CtrlFlag = 0;
} }
else else
{ {
DcModuleCtrl.NeedVolt = Volt; DcModuleCtrl.NeedVolt = Volt;
DcModuleCtrl.NeedCurrt = Currt; //* (DcModuleManage.ValidNum / (DcModuleManage.ValidNum + DcModuleManage_B.ValidNum)); DcModuleCtrl.NeedCurrt = Currt; //* (DcModuleManage.ValidNum / (DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
...@@ -468,7 +474,7 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -468,7 +474,7 @@ void DcModuleSet_AB(EnumSwitchStatus Set, u16 Volt, u16 Currt)
DcModuleCtrl.NeedCurrt = DcModuleAbility.MinCurrt * DcModuleManage.ValidNum; DcModuleCtrl.NeedCurrt = DcModuleAbility.MinCurrt * DcModuleManage.ValidNum;
DcModuleCtrl.CtrlFlag = 0; DcModuleCtrl.CtrlFlag = 0;
} }
else else
{ {
DcModuleCtrl.NeedVolt = Volt; DcModuleCtrl.NeedVolt = Volt;
DcModuleCtrl_B.NeedVolt = Volt; DcModuleCtrl_B.NeedVolt = Volt;
...@@ -524,6 +530,7 @@ u16 GetDcModuleCurrtSet_AB(void) ...@@ -524,6 +530,7 @@ u16 GetDcModuleCurrtSet_AB(void)
return (DcModuleCtrl.NeedCurrt + DcModuleCtrl_B.NeedCurrt); return (DcModuleCtrl.NeedCurrt + DcModuleCtrl_B.NeedCurrt);
} }
void DcModeleRelayInit() void DcModeleRelayInit()
{ {
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
...@@ -538,51 +545,57 @@ void DcModeleRelayInit() ...@@ -538,51 +545,57 @@ void DcModeleRelayInit()
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Pin = RELAY_K1K2_Pin; GPIO_InitStructure.GPIO_Pin = RELAY_K1K2_Pin;
GPIO_Init(RELAY_K1K2_Port, &GPIO_InitStructure); GPIO_Init(RELAY_K1K2_Port, &GPIO_InitStructure);
GPIO_ResetBits(RELAY_K1K2_Port,RELAY_K1K2_Pin); GPIO_ResetBits(RELAY_K1K2_Port, RELAY_K1K2_Pin);
GPIO_InitStructure.GPIO_Pin = RELAY_K3K4_Pin; GPIO_InitStructure.GPIO_Pin = RELAY_K3K4_Pin;
GPIO_Init(RELAY_K3K4_Port, &GPIO_InitStructure); GPIO_Init(RELAY_K3K4_Port, &GPIO_InitStructure);
GPIO_ResetBits(RELAY_K3K4_Port,RELAY_K3K4_Pin); GPIO_ResetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin);
GPIO_InitStructure.GPIO_Pin = RELAY_K5K6_Pin; GPIO_InitStructure.GPIO_Pin = RELAY_K5K6_Pin;
GPIO_Init(RELAY_K5K6_Port, &GPIO_InitStructure); GPIO_Init(RELAY_K5K6_Port, &GPIO_InitStructure);
GPIO_ResetBits(RELAY_K5K6_Port,RELAY_K5K6_Pin); GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
GPIO_InitStructure.GPIO_Pin = RELAY_K7K8_Pin; GPIO_InitStructure.GPIO_Pin = RELAY_K7K8_Pin;
GPIO_Init(RELAY_K7K8_Port, &GPIO_InitStructure); GPIO_Init(RELAY_K7K8_Port, &GPIO_InitStructure);
GPIO_ResetBits(RELAY_K7K8_Port,RELAY_K7K8_Pin); GPIO_ResetBits(RELAY_K7K8_Port, RELAY_K7K8_Pin);
GPIO_InitStructure.GPIO_Pin = RELAY_K9K10_Pin; GPIO_InitStructure.GPIO_Pin = RELAY_K9K10_Pin;
GPIO_Init(RELAY_K9K10_Port, &GPIO_InitStructure); GPIO_Init(RELAY_K9K10_Port, &GPIO_InitStructure);
GPIO_ResetBits(RELAY_K9K10_Port,RELAY_K9K10_Pin); GPIO_ResetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);
} }
void GetNXRAcVoltMsg(u32 addr) void GetNXRAcVoltMsg(u32 addr)
{ {
StructDcModuleSend DataSend = {0}; StructDcModuleSend DataSend =
u16 reg = 0; {
DataSend.Id = (0x00000060<<20) |(1<<19)| (addr<<11) |(0x000000f0 <<3);//0x6080780 + (addr<<11);//0x06080f80 0
DataSend.Len = 8; };
DataSend.Data[0] = 0x10; u16 reg = 0;
DataSend.Data[1] = 0x00;
DataSend.Data[2] = 0x00; DataSend.Id = (0x00000060 << 20) | (1 << 19) | (addr << 11) | (0x000000f0 << 3); //0x6080780 + (addr<<11);//0x06080f80
DataSend.Data[3] = 0x00; DataSend.Len = 8;
DataSend.Data[4] = 0x00; DataSend.Data[0] = 0x10;
DataSend.Data[5] = 0x00; DataSend.Data[1] = 0x00;
DataSend.Data[6] = 0x00; DataSend.Data[2] = 0x00;
DataSend.Data[7] = 0x00; DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00;
reg = 0x000C; //A相 DataSend.Data[5] = 0x00;
DataSend.Data[2] = reg>>8; DataSend.Data[6] = 0x00;
DataSend.Data[3] = reg; DataSend.Data[7] = 0x00;
reg = 0x000C; //A相
DataSend.Data[2] = reg >> 8;
DataSend.Data[3] = reg;
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }
/* /*
reg = 0x000D; //B相 reg = 0x000D; //B相
DataSend.Data[2] = reg>>8; DataSend.Data[2] = reg>>8;
...@@ -591,7 +604,7 @@ void GetNXRAcVoltMsg(u32 addr) ...@@ -591,7 +604,7 @@ void GetNXRAcVoltMsg(u32 addr)
{ {
//osDelay(10); //osDelay(10);
} }
reg = 0x000E; //C相 reg = 0x000E; //C相
DataSend.Data[2] = reg>>8; DataSend.Data[2] = reg>>8;
DataSend.Data[3] = reg; DataSend.Data[3] = reg;
...@@ -601,32 +614,37 @@ void GetNXRAcVoltMsg(u32 addr) ...@@ -601,32 +614,37 @@ void GetNXRAcVoltMsg(u32 addr)
}*/ }*/
} }
#include<math.h> #include<math.h>
u16 DcVoltIn = 0; u16 DcVoltIn = 0;
void GetNXRAcVolt(CanRxMsg* RxMsg)
void GetNXRAcVolt(CanRxMsg * RxMsg)
{ {
if ((0x060f8000 == (RxMsg->ExtId & 0xFFFF8000)) \ if ((0x060f8000 == (RxMsg->ExtId & 0xFFFF8000)) /*&& (0x41 == RxMsg->Data[0] || 0x42 == RxMsg->Data[0]) \*/
/*&& (0x41 == RxMsg->Data[0] || 0x42 == RxMsg->Data[0]) \*/ && (0xf0 == RxMsg->Data[1]))
&& (0xf0 == RxMsg->Data[1]))
{ {
if(0x0C == RxMsg->Data[3]) if (0x0C == RxMsg->Data[3])
{ {
//A //A
u32 val = RxMsg->Data[4]; u32 val = RxMsg->Data[4];
val = val << 8;
val |= RxMsg->Data[5]; val = val << 8;
val = val << 8; val |= RxMsg->Data[5];
val |= RxMsg->Data[6]; val = val << 8;
val = val << 8; val |= RxMsg->Data[6];
val |= RxMsg->Data[7]; val = val << 8;
val |= RxMsg->Data[7];
u8 S = (u8)(val>>31) & 0x01;
u32 M = val&0x007fffff; u8 S = (u8) (val >> 31) & 0x01;
u16 E = (u8)(val>>23); u32 M = val & 0x007fffff;
float f = (1+ M * pow(2,-23)) * pow(2, (E-127)); u16 E = (u8) (val >> 23);
DcVoltIn = (u16)(f/sqrt(3)*10); float f = (1 + M * pow(2, -23)) *pow(2, (E - 127));
DcVoltIn = (u16) (f / sqrt(3) * 10);
DcModleVoltDetect(DcVoltIn); DcModleVoltDetect(DcVoltIn);
} }
/*else if(0x0D == RxMsg->Data[3]) /*else if(0x0D == RxMsg->Data[3])
{ {
//B //B
...@@ -666,36 +684,70 @@ void GetNXRAcVolt(CanRxMsg* RxMsg) ...@@ -666,36 +684,70 @@ void GetNXRAcVolt(CanRxMsg* RxMsg)
} }
} }
static s8 DcModleVoltChkCnt = 0;
void DcModleVoltDetect(u16 Voltage) void DcModleVoltDetect(u16 Voltage)
{ {
if(UserParam.VoltHigh < (u16)(Voltage)) if (UserParam.VoltHigh < (u16) (Voltage))
{ {
if(DcModleVoltChkCnt < 5) if (DcModleVoltChkCnt < 5)
DcModleVoltChkCnt++; DcModleVoltChkCnt++;
else else
DcModleVoltChkCnt = 5; DcModleVoltChkCnt = 5;
} }
else if(UserParam.VoltLow > (u16)(Voltage)) else if (UserParam.VoltLow > (u16) (Voltage))
{ {
if(DcModleVoltChkCnt > -5) if (DcModleVoltChkCnt > -5)
DcModleVoltChkCnt--; DcModleVoltChkCnt--;
else else
DcModleVoltChkCnt = -5; DcModleVoltChkCnt = -5;
} }
else else
{ {
if(DcModleVoltChkCnt > 0) if (DcModleVoltChkCnt > 0)
DcModleVoltChkCnt--; DcModleVoltChkCnt--;
else if(DcModleVoltChkCnt < 0) else if (DcModleVoltChkCnt < 0)
DcModleVoltChkCnt ++; DcModleVoltChkCnt++;
else else
DcModleVoltChkCnt = 0; DcModleVoltChkCnt = 0;
} }
} }
s8 getDcMoudleVoltChkCnt(void) s8 getDcMoudleVoltChkCnt(void)
{ {
return DcModleVoltChkCnt; return DcModleVoltChkCnt;
} }
void setDcMoudleVoltChkCnt(s8 val)
{
DcModleVoltChkCnt = 0;
}
void DcModule_ZhongXing(void)
{
u32 addr_src = 0x6f;
u32 addr_dst = 0xa0;
u32 cmd = 0;
StructDcModuleSend DataSend =
{
0
};
DataSend.Id = (6 << 26) | (cmd << 16) | (addr_dst << 8) | (addr_src);
DataSend.Len = 8;
DataSend.Data[0] = 0x10;
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(10);
}
}
...@@ -23,8 +23,8 @@ s32 GetChgVoltChgRun_B(void) ...@@ -23,8 +23,8 @@ s32 GetChgVoltChgRun_B(void)
s32 GetChgCurrtChgRun_B(void) s32 GetChgCurrtChgRun_B(void)
{ {
if(eMeterSta_Unavail != MeterComm.Status_B) //if(eMeterSta_Unavail != MeterComm.Status_B)
return MeterValue_B.Current/100; // return MeterValue_B.Current/100;
if(BcsMsg_B.Valid) if(BcsMsg_B.Valid)
return abs((s32)BcsMsg_B.ChgCurrt - 4000); return abs((s32)BcsMsg_B.ChgCurrt - 4000);
return -1; return -1;
...@@ -97,7 +97,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -97,7 +97,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
{ {
if((GetSystemTick() - CCS_SendTick) > 50) if((GetSystemTick() - CCS_SendTick) > 50)
{ {
CCS_Send_B( MeterValue_B.Voltage, (4000- MeterValue_B.Current/100), GetChgMin(), CcsChgEnable); CCS_Send_B( GetDcModuleVolt_B(), (4000-GetDcModuleCurrt_B()), GetChgMin_B(), CcsChgEnable);
CCS_SendTick = GetSystemTick(); CCS_SendTick = GetSystemTick();
} }
...@@ -227,7 +227,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -227,7 +227,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer_B)) if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer_B))
{ {
Temp = GetChgCurrtChgRun_B(); Temp = GetChgCurrtChgRun_B();
if((0 != CcsChgEnable) && (Temp > (DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum)) && (Temp > GetDcModuleCurrtSet_B())) if((Temp>0)&&(0 != CcsChgEnable) && (Temp > (DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum)) && (Temp > GetDcModuleCurrtSet_B()))
{ {
if((Temp - GetDcModuleCurrtSet_B()) > (GetDcModuleCurrtSet_B()*10/100)) if((Temp - GetDcModuleCurrtSet_B()) > (GetDcModuleCurrtSet_B()*10/100))
{ {
......
...@@ -104,7 +104,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -104,7 +104,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
{ {
if ((GetSystemTick() -CCS_SendTick) > 50) if ((GetSystemTick() -CCS_SendTick) > 50)
{ {
CCS_Send(MeterValue.Voltage, (4000 - MeterValue.Current / 100), GetChgMin(), CcsChgEnable); CCS_Send(GetDcModuleVolt(), (4000 - GetDcModuleCurrt()), GetChgMin(), CcsChgEnable);
CCS_SendTick = GetSystemTick(); CCS_SendTick = GetSystemTick();
} }
...@@ -244,7 +244,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -244,7 +244,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
{ {
Temp = GetChgCurrtChgRun(); Temp = GetChgCurrtChgRun();
if ((0 != CcsChgEnable) && (Temp > (DcModuleAbility.MinCurrt * DcModuleManage.ValidNum)) && if ((Temp > 0)&&(0 != CcsChgEnable) && (Temp > (DcModuleAbility.MinCurrt * DcModuleManage.ValidNum)) &&
(Temp > GetDcModuleCurrtSet ())) (Temp > GetDcModuleCurrtSet ()))
{ {
if ((Temp - GetDcModuleCurrtSet()) > (GetDcModuleCurrtSet() * 10 / 100)) if ((Temp - GetDcModuleCurrtSet()) > (GetDcModuleCurrtSet() * 10 / 100))
......
...@@ -33,6 +33,8 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -33,6 +33,8 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
BmsCanInit(); BmsCanInit();
osDelay(20); osDelay(20);
//TCUCurChgRecd.TCUChargeEnable = 1;
while(1) while(1)
{ {
ChgPgnRecv(&PgnRecv); ChgPgnRecv(&PgnRecv);
......
...@@ -239,10 +239,10 @@ void LcdProFactoryTestTwo(StructLcdCtrl *pLcdCtrl) ...@@ -239,10 +239,10 @@ void LcdProFactoryTestTwo(StructLcdCtrl *pLcdCtrl)
//DcOutNegSet(eSwSta_On); //DcOutNegSet(eSwSta_On);
break; break;
case BtnFactoryTestTwo_DehOff: case BtnFactoryTestTwo_DehOff:
//DehumidifierSet(eSwSta_Off); ACContactorSet(eSwSta_Off);
break; break;
case BtnFactoryTestTwo_DehOn: case BtnFactoryTestTwo_DehOn:
//DehumidifierSet(eSwSta_On); ACContactorSet(eSwSta_On);
break; break;
case BtnFactoryTestTwo_eLockOff: case BtnFactoryTestTwo_eLockOff:
LockSet(eSwSta_Off); LockSet(eSwSta_Off);
......
...@@ -748,12 +748,17 @@ void Thd_Mult(void const *parameter) ...@@ -748,12 +748,17 @@ void Thd_Mult(void const *parameter)
} }
/*输入电压异常检测*/ /*输入电压异常检测*/
extern s8 getDcMoudleVoltChkCnt(void); extern s8 getDcMoudleVoltChkCnt(void);
if((5 == getDcMoudleVoltChkCnt()) || (-5 == getDcMoudleVoltChkCnt())) if(5 == getDcMoudleVoltChkCnt())
{ {
PillarError.Value.InVolt = 1; PillarError.Value.InVolt = 1;
PillarError_B.Value.InVolt = 1; PillarError_B.Value.InVolt = 1;
} }
else if(0 == VoltChkCnt) else if(-5 == getDcMoudleVoltChkCnt())
{
PillarError.Value.InVolt = 1;
PillarError_B.Value.InVolt = 1;
}
else if(0 == getDcMoudleVoltChkCnt())
{ {
PillarError.Value.InVolt = 0; PillarError.Value.InVolt = 0;
PillarError_B.Value.InVolt = 0; PillarError_B.Value.InVolt = 0;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论