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

📄 alm.c

📁 STC12C5410AD模拟串口再现多串口通讯
💻 C
📖 第 1 页 / 共 2 页
字号:
#include"include.h"

uint8 bdata AlarmET;
uint8 bdata AlarmVh0;	     //1~ 8只电池过压告警
uint8 bdata AlarmVh1;		 //9~15只电池过压告警
uint8 bdata AlarmVl0;		 //1~ 8只电池欠压告警
uint8 bdata AlarmVl1;		 //9~15只电池欠压告警
uint8 bdata AlarmScCTh;      //1~15只电池充电过温
uint8 bdata AlarmScCTl;	     //1~15只电池充电欠温
uint8 bdata AlarmSDcTh;      //1~15只电池放电过温
uint8 bdata AlarmSDcTl;	     //1~15只电池放电欠温
uint8 bdata TemperaSensor;   //1~ 8路温度传感器失效
uint8 bdata VoltageSensor0;  //电压传感器失效


sbit C_01_OV_Alarm = AlarmVh0^0;   sbit C_09_OV_Alarm = AlarmVh1^0; //电池过压告警量
sbit C_02_OV_Alarm = AlarmVh0^1;   sbit C_10_OV_Alarm = AlarmVh1^1;
sbit C_03_OV_Alarm = AlarmVh0^2;   sbit C_11_OV_Alarm = AlarmVh1^2;
sbit C_04_OV_Alarm = AlarmVh0^3;   sbit C_12_OV_Alarm = AlarmVh1^3;
sbit C_05_OV_Alarm = AlarmVh0^4;   sbit C_13_OV_Alarm = AlarmVh1^4;
sbit C_06_OV_Alarm = AlarmVh0^5;   sbit C_14_OV_Alarm = AlarmVh1^5;
sbit C_07_OV_Alarm = AlarmVh0^6;   sbit C_15_OV_Alarm = AlarmVh1^6;
sbit C_08_OV_Alarm = AlarmVh0^7;   sbit C_TV_OV_Alarm = AlarmVh1^7; //总电压过压

sbit C_01_UV_Alarm = AlarmVl0^0;   sbit C_09_UV_Alarm = AlarmVl1^0;	//电池欠压告警量
sbit C_02_UV_Alarm = AlarmVl0^1;   sbit C_10_UV_Alarm = AlarmVl1^1;
sbit C_03_UV_Alarm = AlarmVl0^2;   sbit C_11_UV_Alarm = AlarmVl1^2;
sbit C_04_UV_Alarm = AlarmVl0^3;   sbit C_12_UV_Alarm = AlarmVl1^3;
sbit C_05_UV_Alarm = AlarmVl0^4;   sbit C_13_UV_Alarm = AlarmVl1^4;
sbit C_06_UV_Alarm = AlarmVl0^5;   sbit C_14_UV_Alarm = AlarmVl1^5;
sbit C_07_UV_Alarm = AlarmVl0^6;   sbit C_15_UV_Alarm = AlarmVl1^6;
sbit C_08_UV_Alarm = AlarmVl0^7;   sbit C_TV_UV_Alarm = AlarmVl1^7;  //总电压欠压

sbit C_01_02_C_OT  = AlarmScCTh^0; sbit C_01_02_C_UT  = AlarmScCTl^0;//充电过欠温告警量
sbit C_03_04_C_OT  = AlarmScCTh^1; sbit C_03_04_C_UT  = AlarmScCTl^1;
sbit C_05_06_C_OT  = AlarmScCTh^2; sbit C_05_06_C_UT  = AlarmScCTl^2;
sbit C_07_08_C_OT  = AlarmScCTh^3; sbit C_07_08_C_UT  = AlarmScCTl^3;
sbit C_09_10_C_OT  = AlarmScCTh^4; sbit C_09_10_C_UT  = AlarmScCTl^4;
sbit C_11_12_C_OT  = AlarmScCTh^5; sbit C_11_12_C_UT  = AlarmScCTl^5;
sbit C_13_14_C_OT  = AlarmScCTh^6; sbit C_13_14_C_UT  = AlarmScCTl^6;
sbit C_15_15_C_OT  = AlarmScCTh^7; sbit C_15_15_C_UT  = AlarmScCTl^7;

sbit C_01_02_Dc_OT = AlarmSDcTh^0; sbit C_01_02_Dc_UT = AlarmSDcTl^0;//放电过欠温告警
sbit C_03_04_Dc_OT = AlarmSDcTh^1; sbit C_03_04_Dc_UT = AlarmSDcTl^1;
sbit C_05_06_Dc_OT = AlarmSDcTh^2; sbit C_05_06_Dc_UT = AlarmSDcTl^2;
sbit C_07_08_Dc_OT = AlarmSDcTh^3; sbit C_07_08_Dc_UT = AlarmSDcTl^3;
sbit C_09_10_Dc_OT = AlarmSDcTh^4; sbit C_09_10_Dc_UT = AlarmSDcTl^4;
sbit C_11_12_Dc_OT = AlarmSDcTh^5; sbit C_11_12_Dc_UT = AlarmSDcTl^5;
sbit C_13_14_Dc_OT = AlarmSDcTh^6; sbit C_13_14_Dc_UT = AlarmSDcTl^6;
sbit C_15_15_Dc_OT = AlarmSDcTh^7; sbit C_15_15_Dc_UT = AlarmSDcTl^7;

sbit TSensor_01_Bro = TemperaSensor^0;  sbit TSensor_05_Bro = TemperaSensor^4; //温度感器失效
sbit TSensor_02_Bro = TemperaSensor^1;  sbit TSensor_06_Bro = TemperaSensor^5;
sbit TSensor_03_Bro = TemperaSensor^2;  sbit TSensor_07_Bro = TemperaSensor^6;
sbit TSensor_04_Bro = TemperaSensor^3;  sbit TSensor_08_Bro = TemperaSensor^7;
									  
sbit VSensorBroken  = VoltageSensor0^0;  //电压传感器失效

/*******************************************************************
				        AlarmET告警位说明
*******************************************************************/
/* --------------------------------------------------------------
  |	bit7 | bit6	| bit5 | bit4 |	bit3 | bit2	| bit1 | bit0 |		 |
   --------------------------------------------------------------
  | ETSB | CSB	| PDOC | PCOC |	ENUT| EVOT	| PDOT | PCOT | 	 |
   --------------------------------------------------------------*/
sbit Pack_C_OT_Alarm = AlarmET^0;   //电池组充电过温
sbit Pack_D_OT_Alarm = AlarmET^1;	//电池组放电过温
sbit Envi_OT_Alarm   = AlarmET^2;	//环境温度过温
sbit Envi_UT_Alarm   = AlarmET^3;	//环境温度欠温
sbit Pack_C_OC_Alarm = AlarmET^4;	//电池组充电过流
sbit Pack_D_OC_Alarm = AlarmET^5;	//电池组放电过流
sbit CurrentSensorBr = AlarmET^6;	//电流传感器失效
sbit EnviTemSensorBr = AlarmET^7;	//环境温度传感器失效

/*********************************************************************************************************
** 函数名称: void AlarmInitiate(void)
** 功能描述: 告警初始化
** 输   入: 无
** 输   出: 无
** 全局变量: 
** 调用模块: 
**
** 作   者: 李伟
** 日   期: 2008年12月15日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日   期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void AlarmInitiate(void)
{
	AlarmET  = 0;
	AlarmVh0 = 0;	     //1~ 8只电池过压告警
	AlarmVh1 = 0;		 //9~15只电池过压告警
	AlarmVl0 = 0;		 //1~ 8只电池欠压告警
	AlarmVl1 = 0;		 //9~15只电池欠压告警
	AlarmScCTh = 0;      //1~15只电池充电过温
	AlarmScCTl = 0;	     //1~15只电池充电欠温
	AlarmSDcTh = 0;      //1~15只电池放电过温
	AlarmSDcTl = 0;	     //1~15只电池放电欠温
}
/*********************************************************************************************************
** 函数名称: void SignalCellT(uint8 *Buf,uint8 width,uint8 WorkMode)
** 功能描述: 
** 输   入: 无
** 输   出: 无
** 全局变量: 
** 调用模块: 
**
** 作   者: 李伟
** 日   期: 2008年12月15日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日   期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SignalCellT(uint8 *Buf,uint8 width,uint8 WorkMode)
{
	uint8 i;
	uint8 *buf;
	buf = Buf;
	for(i = 0;i < width;i++)
	{
	    if(WorkMode == ChargeStep)
		{
			if(buf[i] > ModeTempCofing[1])		 //45摄氏度ChargeThigh
			{									 
				if(i == 0)C_01_02_C_OT = 1;	     //产生充电过温告警
				if(i == 1)C_03_04_C_OT = 1;
				if(i == 2)C_05_06_C_OT = 1;
				if(i == 3)C_07_08_C_OT = 1;
				if(i == 4)C_09_10_C_OT = 1;
				if(i == 5)C_11_12_C_OT = 1;
				if(i == 6)C_13_14_C_OT = 1; 
				if(i == 7)C_15_15_C_OT = 1; 
			}
			else if(buf[i] < ModeTempCofing[9])	 //43摄氏度ReChargeThigh
				 {
				 	 if(i == 0)C_01_02_C_OT = 0; //消除充电过温告警
					 if(i == 1)C_03_04_C_OT = 0;
					 if(i == 2)C_05_06_C_OT = 0;
					 if(i == 3)C_07_08_C_OT = 0;
					 if(i == 4)C_09_10_C_OT = 0;
					 if(i == 5)C_11_12_C_OT = 0;
					 if(i == 6)C_13_14_C_OT = 0;
					 if(i == 7)C_15_15_C_OT = 0;
				 }
			if(buf[i] < ModeTempCofing[0])		 //5摄氏度ChargeTlow
			{
				if(i == 0)C_01_02_C_UT = 1; 	 //产生充电欠温告警
				if(i == 1)C_03_04_C_UT = 1; 
				if(i == 2)C_05_06_C_UT = 1; 
				if(i == 3)C_07_08_C_UT = 1; 
				if(i == 4)C_09_10_C_UT = 1; 
				if(i == 5)C_11_12_C_UT = 1; 
				if(i == 6)C_13_14_C_UT = 1; 
				if(i == 7)C_15_15_C_UT = 1; 			
			}
			else if(buf[i] > ModeTempCofing[8])	//7摄氏度ReChargeTlow
				 {
					 if(i == 0)C_01_02_C_UT = 0;//消除充电欠温告警
					 if(i == 1)C_03_04_C_UT = 0;
					 if(i == 2)C_05_06_C_UT = 0;
				 	 if(i == 3)C_07_08_C_UT = 0;
					 if(i == 4)C_09_10_C_UT = 0;
					 if(i == 5)C_11_12_C_UT = 0;
					 if(i == 6)C_13_14_C_UT = 0;
					 if(i == 7)C_15_15_C_UT = 0;			
				 }
			if((AlarmScCTh & 0xFF) == 0xFF)Pack_C_OT_Alarm = 1; else Pack_C_OT_Alarm = 0; //充电电池组过温
		}
		if(WorkMode == DisChargeStep)
		{
			if(buf[i] > ModeTempCofing[3])		//55摄氏度DisChargeThigh
			{
				if(i == 0)C_01_02_Dc_OT = 1;    //产生放电过温告警
				if(i == 1)C_03_04_Dc_OT = 1; 
				if(i == 2)C_05_06_Dc_OT = 1; 
				if(i == 3)C_07_08_Dc_OT = 1; 
				if(i == 4)C_09_10_Dc_OT = 1; 
				if(i == 5)C_11_12_Dc_OT = 1; 
				if(i == 6)C_13_14_Dc_OT = 1; 
				if(i == 7)C_15_15_Dc_OT = 1; 		
			}
			else if(buf[i] < ModeTempCofing[11]) //53摄氏度ReDisChargeThigh
				 {
					 if(i == 0)C_01_02_Dc_OT = 0;//消除放电过温告警
					 if(i == 1)C_03_04_Dc_OT = 0;
					 if(i == 2)C_05_06_Dc_OT = 0;
					 if(i == 3)C_07_08_Dc_OT = 0;
					 if(i == 4)C_09_10_Dc_OT = 0;
					 if(i == 5)C_11_12_Dc_OT = 0;
					 if(i == 6)C_13_14_Dc_OT = 0;
					 if(i == 7)C_15_15_Dc_OT = 0;		
				 }
			if(buf[i] < ModeTempCofing[2])		 //-10摄氏度DisChargeTlow
			{
				if(i == 0)C_01_02_Dc_UT = 1;     //产生放电欠温告警
				if(i == 1)C_03_04_Dc_UT = 1;    
				if(i == 2)C_05_06_Dc_UT = 1; 
				if(i == 3)C_07_08_Dc_UT = 1; 
				if(i == 4)C_09_10_Dc_UT = 1; 
				if(i == 5)C_11_12_Dc_UT = 1; 
				if(i == 6)C_13_14_Dc_UT = 1; 
				if(i == 7)C_15_15_Dc_UT = 1;		
			}
			else if(buf[i] > ModeTempCofing[10]) //-8摄氏度ReDisChargeTlow
				 {
					 if(i == 0)C_01_02_Dc_UT = 0;//消除放电欠温告警
					 if(i == 1)C_03_04_Dc_UT = 0;
					 if(i == 2)C_05_06_Dc_UT = 0;
					 if(i == 3)C_07_08_Dc_UT = 0;
					 if(i == 4)C_09_10_Dc_UT = 0;
					 if(i == 5)C_11_12_Dc_UT = 0;
					 if(i == 6)C_13_14_Dc_UT = 0;
					 if(i == 7)C_15_15_Dc_UT = 0;		
				 }
			if(buf[i] == -30)
			{
				if(i == 0)TSensor_01_Bro = 1;     //温度传感器失效告警
				if(i == 1)TSensor_02_Bro = 1;    
				if(i == 2)TSensor_03_Bro = 1; 
				if(i == 3)TSensor_04_Bro = 1; 
				if(i == 4)TSensor_05_Bro = 1; 
				if(i == 5)TSensor_06_Bro = 1; 
				if(i == 6)TSensor_07_Bro = 1; 
				if(i == 7)TSensor_08_Bro = 1;			
			}
			else
			{
				if(i == 0)TSensor_01_Bro = 0;     
				if(i == 1)TSensor_02_Bro = 0;    
				if(i == 2)TSensor_03_Bro = 0; 
				if(i == 3)TSensor_04_Bro = 0; 
				if(i == 4)TSensor_05_Bro = 0; 
				if(i == 5)TSensor_06_Bro = 0; 
				if(i == 6)TSensor_07_Bro = 0; 
				if(i == 7)TSensor_08_Bro = 0;			
			}
			if((AlarmSDcTh & 0xFF) == 0xFF)Pack_D_OT_Alarm = 1; else Pack_D_OT_Alarm = 0; //放电电池组过温		
		}
	}
	if(buf[width-1] > ModeTempCofing[4])     Envi_OT_Alarm   = 1;  //产生环境温度过温告警 EnvironmentOT
	else if(buf[width-1] < ModeTempCofing[6])Envi_OT_Alarm   = 0;  //消除温度欠温告警     ReEnvironmentOT
	if(buf[width-1] < ModeTempCofing[5])     Envi_UT_Alarm   = 1;  //产生环境温度欠温告警 EnvironmentUT
	else if(buf[width-1] > ModeTempCofing[7])Envi_UT_Alarm   = 0;  //消除环境温度欠温告警 ReEnvironmentUT
	if(buf[width-1] == -30)                  EnviTemSensorBr = 1;  //环境温度传感器失效

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -