⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alm.c

📁 STC12C5410AD模拟串口再现多串口通讯
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -