📄 alm.c
字号:
else EnviTemSensorBr = 0; //环境温度传感器正常
}
/*********************************************************************************************************
** 函数名称: void SignalCellV(uint8 *Buf,uint8 width,uint8 WorkMode)
** 功能描述:
** 输 入: 无
** 输 出: 无
** 全局变量:
** 调用模块:
**
** 作 者: 李伟
** 日 期: 2008年12月15日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SignalCellV(uint16 *Buf,uint8 width,uint8 WorkMode)
{
uint8 i;
uint16 *buf;
uint16 TV;
buf = Buf;
for(i = 0;i < width;i++)
{
if(WorkMode == ChargeStep) //充电只考虑过压
{
if(buf[i] > ModeSysConfig[1]) //CellVhigh上限过压预设值4200mV
{
if(i == 0)C_01_OV_Alarm = 1; //产生充电过压告警
if(i == 1)C_02_OV_Alarm = 1;
if(i == 2)C_03_OV_Alarm = 1;
if(i == 3)C_04_OV_Alarm = 1;
if(i == 4)C_05_OV_Alarm = 1;
if(i == 5)C_06_OV_Alarm = 1;
if(i == 6)C_07_OV_Alarm = 1;
if(i == 7)C_08_OV_Alarm = 1;
if(i == 8)C_09_OV_Alarm = 1;
if(i == 9)C_10_OV_Alarm = 1;
if(i == 10)C_11_OV_Alarm = 1;
if(i == 11)C_12_OV_Alarm = 1;
if(i == 12)C_13_OV_Alarm = 1;
if(i == 13)C_14_OV_Alarm = 1;
if(i == 14)C_15_OV_Alarm = 1;
}
else if(buf[i] < ModeSysConfig[7]) //ReCellVhigh上限过压恢复预设值4000mV
{
if(i == 0)C_01_OV_Alarm = 0; //消除充电过压告警
if(i == 1)C_02_OV_Alarm = 0;
if(i == 2)C_03_OV_Alarm = 0;
if(i == 3)C_04_OV_Alarm = 0;
if(i == 4)C_05_OV_Alarm = 0;
if(i == 5)C_06_OV_Alarm = 0;
if(i == 6)C_07_OV_Alarm = 0;
if(i == 7)C_08_OV_Alarm = 0;
if(i == 8)C_09_OV_Alarm = 0;
if(i == 9)C_10_OV_Alarm = 0;
if(i == 10)C_11_OV_Alarm = 0;
if(i == 11)C_12_OV_Alarm = 0;
if(i == 12)C_13_OV_Alarm = 0;
if(i == 13)C_14_OV_Alarm = 0;
if(i == 14)C_15_OV_Alarm = 0;
}
}
if(WorkMode == DisChargeStep) //放电只考虑欠压
{
if(buf[i] < ModeSysConfig[0]) //CellVlow下限欠压预设值2600mV
{
if(i == 0)C_01_UV_Alarm = 1; //产生放电欠压告警
if(i == 1)C_02_UV_Alarm = 1;
if(i == 2)C_03_UV_Alarm = 1;
if(i == 3)C_04_UV_Alarm = 1;
if(i == 4)C_05_UV_Alarm = 1;
if(i == 5)C_06_UV_Alarm = 1;
if(i == 6)C_07_UV_Alarm = 1;
if(i == 7)C_08_UV_Alarm = 1;
if(i == 8)C_09_UV_Alarm = 1;
if(i == 9)C_10_UV_Alarm = 1;
if(i == 10)C_11_UV_Alarm = 1;
if(i == 11)C_12_UV_Alarm = 1;
if(i == 12)C_13_UV_Alarm = 1;
if(i == 13)C_14_UV_Alarm = 1;
if(i == 14)C_15_UV_Alarm = 1;
}
else if(buf[i] > ModeSysConfig[6]) //ReCellVlow下限欠压恢复预设值3000mV
{
if(i == 0)C_01_UV_Alarm = 0; //消除放电欠压告警
if(i == 1)C_02_UV_Alarm = 0;
if(i == 2)C_03_UV_Alarm = 0;
if(i == 3)C_04_UV_Alarm = 0;
if(i == 4)C_05_UV_Alarm = 0;
if(i == 5)C_06_UV_Alarm = 0;
if(i == 6)C_07_UV_Alarm = 0;
if(i == 7)C_08_UV_Alarm = 0;
if(i == 8)C_09_UV_Alarm = 0;
if(i == 9)C_10_UV_Alarm = 0;
if(i == 10)C_11_UV_Alarm = 0;
if(i == 11)C_12_UV_Alarm = 0;
if(i == 12)C_13_UV_Alarm = 0;
if(i == 13)C_14_UV_Alarm = 0;
if(i == 14)C_15_UV_Alarm = 0;
}
}
TV += buf[i]; //计算总电压
}
if(WorkMode == ChargeStep)
{
C_TV_UV_Alarm = 0; //消除电池组欠压告警
Pack_D_OC_Alarm = 0; //消除放电过流告警
if(TV > ModeSysConfig[2])C_TV_OV_Alarm = 1; //PackOV产生电池组过压告警
if(ChargeCurrent > ModeSysConfig[4])Pack_C_OC_Alarm = 0; //ChargeOC产生充电过流告警
}
else if(WorkMode == DisChargeStep)
{
C_TV_OV_Alarm = 0; //消除电池组过压告警
Pack_C_OC_Alarm = 0; //消除充电过流告警
if(TV < ModeSysConfig[3])C_TV_UV_Alarm = 1; //PackUV放电欠压告警
if(DisChargeCurrent > ModeSysConfig[5])Pack_D_OC_Alarm = 0; //DisChargeOC产生放电过流告警
}
if(TV > 50000) //100%电量指示灯全亮
{
SocLed0 = 0; SocLed2 = 0;
SocLed1 = 0; SocLed3 = 0;
}
else if(TV > 48000) //75%
{
SocLed0 = 0; SocLed2 = 0;
SocLed1 = 0; SocLed3 = 1;
}
else if(TV > 46000) //50%
{
SocLed0 = 0; SocLed2 = 1;
SocLed1 = 0; SocLed3 = 1;
}
else if(TV > 45000) //25%
{
SocLed0 = 0; SocLed2 = 1;
SocLed1 = 1; SocLed3 = 1;
}
if(TV == NoVoltage) //判断电压传感器失效
{
VSensorBroken = 1;
}
else
{
VSensorBroken = 0;
}
}
/*********************************************************************************************************
** 函数名称: void ChargeAndDisChargeEnable(uint8 WorkMode)
** 功能描述:
** 输 入: 无
** 输 出: 无
** 全局变量:
** 调用模块:
**
** 作 者: 李伟
** 日 期: 2008年12月15日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ChargeAndDisChargeEnable(uint8 WorkMode)
{
if(WorkMode == ChargeStep)
{
if(((AlarmVh0 & 0xFF) != 0x00) //1~ 8单只充电过压告警存在
|| ((AlarmVh1 & 0xFF) != 0x00) //9~15单只充电过压、16(为组)充电过压告警存在
|| ((AlarmScCTh & 0xFF) != 0x00) //1~15单只充电过温告警存在
|| ((AlarmScCTl & 0xFF) != 0x00) //1~15单只充电欠温告警存在
|| ((AlarmET & 0x1D) != 0x00)) //组充电过流、环境欠温、环境过温、组充电过温
{
ChargeEn = ChargeDisable; //禁止充电
ArmLed = AlarmLedON; //点亮告警灯
}
else
{
ChargeEn = ChargeEnable; //使能充电
DisChargeEn = DisChargeEnable;//使能放电
ArmLed = AlarmLedOFF; //熄灭告警灯
}
}
else if(WorkMode == DisChargeStep)
{
if(((AlarmVl0 & 0xFF) != 0x00) //1~ 8单只放电欠压告警存在
|| ((AlarmVl1 & 0xFF) != 0x00) //9~15单只放电欠压、16(为组)放电欠压告警存在
|| ((AlarmSDcTh & 0xFF) != 0x00) //1~15单只放电过温告警存在
|| ((AlarmSDcTl & 0xFF) != 0x00) //1~15单只放电欠温告警存在
|| ((AlarmET & 0x2D) != 0x00)) //组放电过流、环境欠温、环境过温、组放电过温
{
DisChargeEn = DisChargeDisable;//禁止放电
ArmLed = AlarmLedON; //点亮告警灯
}
else
{
DisChargeEn = DisChargeEnable; //使能放电
ChargeEn = ChargeEnable; //使能充电
ArmLed = AlarmLedOFF; //熄灭告警灯
}
}
ComAlarmET = AlarmET; //综合告警
ComAlarmVh0 = AlarmVh0; //1~ 8只电池过压告警
ComAlarmVh1 = AlarmVh1; //9~15只电池过压告警
ComAlarmVl0 = AlarmVl0; //1~ 8只电池欠压告警
ComAlarmVl1 = AlarmVl1; //9~15只电池欠压告警
ComAlarmScCTh = AlarmScCTh; //1~15只电池充电过温
ComAlarmScCTl = AlarmScCTl; //1~15只电池充电欠温
ComAlarmSDcTh = AlarmSDcTh; //1~15只电池放电过温
ComAlarmSDcTl = AlarmSDcTl; //1~15只电池放电欠温
}
/*********************************************************************************************************
** 函数名称: uint8 WorkModeJudge(void)
** 功能描述: 工作模式判断
** 输 入: 无
** 输 出: 无
** 全局变量:
** 调用模块:
**
** 作 者: 李伟
** 日 期: 2008年12月09日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 WorkModeJudge(void)
{
uint8 workmode;
if(ChargeCurrent > 0 && DisChargeCurrent == 0)
{
workmode = ChargeStep;
}
if(ChargeCurrent == 0 && DisChargeCurrent > 0)
{
workmode = DisChargeStep;
}
if((ChargeCurrent > 0) && (DisChargeCurrent > 0))//电流传感器失效告警
{
CurrentSensorBr = 1;
}
else CurrentSensorBr= 0;
return workmode;
}
/********************************************************************************************************
End of file
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -