Переглянути джерело

STS 温读ADC采集,以及阈值。。

liyi 1 рік тому
батько
коміт
f28b2c8ad5

+ 4 - 0
control/STS/HARDWARE/Adc/Adc.c

@@ -28,8 +28,12 @@ void adc_init(void)
 	adc_channel_length_config(ADC_REGULAR_CHANNEL, 1U);
 	adc_regular_channel_config(0U, ADC_CHANNEL_8, ADC_SAMPLETIME_55POINT5);
 	adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
+	adc_resolution_config(ADC_RESOLUTION_12B);
+	
+	
 	adc_enable();
 	DelayNms(1);
+
 	adc_calibration_enable();
 	
 }

+ 18 - 4
control/STS/HARDWARE/At24xx/At24xx.c

@@ -62,7 +62,9 @@ void at24xx_read(unsigned short read_addr, unsigned char *buff,unsigned short re
 {
 	while(read_num)
 	{
-		*buff++ = at24xx_read_one_byte(read_addr++);
+		*buff = at24xx_read_one_byte(read_addr);
+		read_addr++;
+		buff++;
 		read_num --;
 	}
 }
@@ -71,7 +73,9 @@ void at24xx_write(unsigned short write_addr, unsigned char *buff,unsigned short
 {
 	while(write_num)
 	{
-		at24xx_write_one_byte(write_addr++,*buff++);
+		at24xx_write_one_byte(write_addr,*buff);
+		write_addr++;
+		buff++;
 		write_num --;
 	}
 }
@@ -129,9 +133,10 @@ void at24xx_write_one_byte(unsigned short write_addr,unsigned char data)
                             
   GenI2CStopSig();     
 	
-  DelayNms(7);                                                                              
+  DelayNms(10);                                                                              
 }
 
+
 static void read_iic_data(void)
 {
 	sts_data_t *sts_d = get_sts();
@@ -221,7 +226,16 @@ static void read_iic_data(void)
 			sts_d->m_data.over_func = 0;
 		}
 		r_addr = &sts_d->iic_consumer;
-		at24xx_read(IIC_CONSUMER_START,r_addr,sizeof(float));
+		uint32_t buff = 0;
+		at24xx_read(IIC_CONSUMER_START,&buff,4);
+		if((uint32_t)buff == 0)
+		{
+			sts_d->iic_consumer = 0;
+		}else
+		{
+			at24xx_read(IIC_CONSUMER_START,r_addr,sizeof(float));
+		}
+		
 		
 		r_addr = &sts_d->m_data.out_status;
 		at24xx_read(IIC_OUT_CHANNEL,r_addr,sizeof(uint16_t));

+ 5 - 0
control/STS/HARDWARE/Beep/Beep.c

@@ -16,6 +16,10 @@ static void beep(void)
 {
 	gpio_bit_toggle(GPIOB, GPIO_PIN_1);
 }
+static void clear_beep(void)
+{
+	gpio_bit_reset(GPIOB, GPIO_PIN_1);
+}
 
 void beep_init(void)
 {
@@ -27,6 +31,7 @@ void beep_init(void)
 	
 	sts_data_t *data = get_sts();
 	data->beep = beep;
+	data->clear_beep = clear_beep;
 }
 
 

+ 29 - 6
control/STS/HARDWARE/Electricity/Electricity.c

@@ -34,12 +34,14 @@ void electricity_init()
 }
 
 
-extern float   F_AC_V;													// ¦Ì??1¨®DD¡ì?¦Ì
-extern float   F_AC_I;													// A¨ª¡§¦Ì¨¤¦Ì?¨¢¡Â
-extern float   F_AC_P;													// A¨ª¡§¦Ì¨¤¨®D1|1|?¨º
-extern float   F_AC_LINE_Freq;     							// ¨ºD¦Ì???D??¦Ì?¨º
-extern float   F_AC_E;													// A¨ª¡§¦Ì¨¤¨®D1|¦Ì??¨¹(¨¢?)
-extern float   F_AC_PF;													// 1|?¨º¨°¨°??¡ê?A¨ª¡§¦Ì¨¤o¨ªB¨ª¡§¦Ì¨¤???¨¹????¨°? 
+extern float   F_AC_V;												
+extern float   F_AC_I;													
+extern float   F_AC_P;													
+extern float   F_AC_LINE_Freq;     							
+extern float   F_AC_E;													
+extern float   F_AC_PF;													
+extern float   F_Angle;
+
 
 void electricity_read(uint8_t channel)
 {
@@ -66,6 +68,7 @@ void electricity_read(uint8_t channel)
 		data->m_data.out_power.factor = F_AC_PF * 1000;
 		data->iic_consumer += F_AC_E;
 		data->m_data.out_power.consumer = data->iic_consumer * 1000;
+		data->m_data.out_power.angle = F_Angle *1000;
 	}else
 	{
 		data->m_data.input[channel-1].voltage = F_AC_V * 1000;
@@ -82,6 +85,10 @@ static void check_voltage_max(uint8_t channel)
 			if(data->m_data.out_power.voltage > data->m_data.output_th.voltage_max)
 			{
 				SET_WANNING_VOLTAGE_MAX(data->m_data.output_waning.waning);
+				if(IS_OVERFUNC_VOLTAGE_MAX(data->m_data.over_func))
+				{
+					data->close_output();
+				}
 			}else
 			{
 				UNSET_WANNING_VOLTAGE_MAX(data->m_data.output_waning.waning);
@@ -111,6 +118,10 @@ static void check_voltage_min(uint8_t channel)
 			if(data->m_data.out_power.voltage < data->m_data.output_th.voltage_min)
 			{
 				SET_WANNING_VOLTAGE_MIN(data->m_data.output_waning.waning);
+				if(IS_OVERFUNC_VOLTAGE_MIN(data->m_data.over_func))
+				{
+					data->close_output();
+				}
 			}else
 			{
 				UNSET_WANNING_VOLTAGE_MIN(data->m_data.output_waning.waning);
@@ -141,6 +152,10 @@ static void check_current_max(uint8_t channel)
 			if(data->m_data.out_power.current > data->m_data.output_th.current_max)
 			{
 				SET_WANNING_CURRENT_MAX(data->m_data.output_waning.waning);
+				if(IS_OVERFUNC_CURRENT_MAX(data->m_data.over_func))
+				{
+					data->close_output();
+				}
 			}else
 			{
 				UNSET_WANNING_CURRENT_MAX(data->m_data.output_waning.waning);
@@ -158,6 +173,10 @@ static void check_power_max(uint8_t channel)
 			if(data->m_data.out_power.power > data->m_data.output_th.power_max)
 			{
 				SET_WANNING_POWER_MAX(data->m_data.output_waning.waning);
+				if(IS_OVERFUNC_POWER_MAX(data->m_data.over_func))
+				{
+					data->close_output();
+				}
 			}else
 			{
 				UNSET_WANNING_POWER_MAX(data->m_data.output_waning.waning);
@@ -175,6 +194,10 @@ static void check_consumer_max(uint8_t channel)
 			if(data->m_data.out_power.consumer > data->m_data.output_th.consumer_max)
 			{
 				SET_WANNING_CONSUMER_MAX(data->m_data.output_waning.waning);
+				if(IS_OVERFUNC_CONSUMER_MAX(data->m_data.over_func))
+				{
+					data->close_output();
+				}
 			}else
 			{
 				UNSET_WANNING_CONSUMER_MAX(data->m_data.output_waning.waning);

+ 9 - 9
control/STS/HARDWARE/Hlw8110/Hlw8110.c

@@ -463,23 +463,23 @@ unsigned char Judge_CheckSum_HLW8110_Calfactor(void)
 void Init_HLW8110(void)
 {
 	Uart_HLW8110_WriteREG_EN();
-	DelayNms(10);
+	DelayNms(20);
 	
 //电流通道A设置命令,指定当前用于计算视在功率、功率因数、相角、瞬时有功功率、瞬时视在功率和有功功率过载的信号指示 的通道为通道A	
 	Uart_HLW8110_Set_Channel_A();			
-	DelayNms(10);
+	DelayNms(20);
 	Uart_Write_HLW8110_Reg(REG_SYSCON_ADDR,2,0x0a04);	//开启A通道,关闭B通道,电压通道PGA = 1,电流通道PGA = 16
-	DelayNms(10);
+	DelayNms(20);
 	
 	Uart_Write_HLW8110_Reg(REG_EMUCON_ADDR,2,0x0001);	//1,使能PFA 脉冲输出和有功电能寄存器累加;
-	DelayNms(10);
-	Uart_Write_HLW8110_Reg(REG_EMUCON_ADDR,2,0x0001);
-	DelayNms(10);
+	DelayNms(20);
+//	Uart_Write_HLW8110_Reg(REG_EMUCON_ADDR,2,0x0001);
+//	DelayNms(20);
 //	Uart_Write_HLW8110_Reg(REG_EMUCON_ADDR,2,0x0018);	//正向和负向过零点均发生变化,ZXD0 = 1,ZXD1 = 1
-	Uart_Write_HLW8110_Reg(REG_EMUCON2_ADDR,2,0x0065);	//0x0001是EMUCON2的默认值,waveEn = 1,zxEn = 1,A通道电量寄存器,读后不清0,EPA_CB = 1;打开功率因素检测
-	DelayNms(10);
+//	Uart_Write_HLW8110_Reg(REG_EMUCON2_ADDR,2,0x0065);	//0x0001是EMUCON2的默认值,waveEn = 1,zxEn = 1,A通道电量寄存器,读后不清0,EPA_CB = 1;打开功率因素检测
+//	DelayNms(20);
 	Uart_Write_HLW8110_Reg(REG_EMUCON2_ADDR,2,0x0065);
-	DelayNms(10);
+	DelayNms(20);
 	
 	Uart_HLW8110_WriteREG_DIS();
 //	DelayNms(3);	

+ 1 - 1
control/STS/HARDWARE/I2c/I2c.c

@@ -104,7 +104,7 @@ static  void  SetI2CSDAAsOutput(void)
 {
   gpio_mode_set(GPIOF, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);           //设置PF0为输出模式
   gpio_output_options_set(GPIOF, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0); //设置输出模式及速度
-  //gpio_bit_set(GPIOF, GPIO_PIN_7);                                              //状态默认设置为高电平
+  gpio_bit_set(GPIOF, GPIO_PIN_0);                                              //状态默认设置为高电平
 }
 
 /*********************************************************************************************************

+ 25 - 28
control/STS/HARDWARE/Temprature/Temprature.c

@@ -21,55 +21,52 @@
 *****************************************************************/
 static float get_temp(void);
 
-#define GATHER_MAX  200
+#define GATHER_MAX  2000
 #define VREF        33
 
 #define V_HOT(ad) (((ad * 1000)>>12) * VREF / 10.0 /1000.0) 
 
 #define R_HOT(ad) ((V_HOT(ad)*10000.0) / ((VREF/10.0)-(2.0*V_HOT(ad))))
 
-#define T_TEMP(res) ((662.666 - (45.389 * log10(res)) + (0.069 * log10(res)*log10(res)*log10(res))) - 273.15)
+#define T_TEMP(res) ((662.666 - (45.389 * log(res)) + (0.069 * log(res)*log(res)*log(res))) - 273.15)
+
+//static uint32_t gather_count = 0;
+
+//static uint32_t all_get_ad = 0;
 
-static uint32_t gather_count = 0;
 
-static uint32_t all_get_ad = 0;
 
 static float get_temp(void)
 {
 	sts_data_t *data = get_sts();
 	uint32_t all_get_ad = 0;	
 	float temprature = 0.0;
-	if(gather_count < GATHER_MAX)
+	
+	for(uint32_t i = 0; i < GATHER_MAX ;i++)
 	{
-		
 		all_get_ad += get_adc();
-		gather_count++;
-	}else
-	{
-		all_get_ad /= GATHER_MAX;
-		
-		float v_hot = V_HOT(all_get_ad);
-		if((uint32_t)((v_hot)*100) < 165)
+	}
+	all_get_ad /= GATHER_MAX;
+	float v_hot = V_HOT(all_get_ad);
+	if(v_hot < 3.3)
+	{	
+		float i_current = (3.3 - v_hot) / (10000);
+		float res = v_hot / i_current;
+		temprature = T_TEMP(res);
+		if(((uint32_t)res)>=598 && ((uint32_t)res) <= 197000)
 		{
-			float res = ((v_hot)*10000) / (3.3 - 2 * v_hot);
-			if(res>=598 && res <= 197000)
-			{
-				temprature = T_TEMP(res);
-				data->temp_online_flag = TEMP_ONLINE;
-			}else
-			{
-				data->temp_online_flag = TEMP_INLINE;
-			}
+					data->m_data.temprature_flag  = TEMP_ONLINE;
+					data->m_data.temprature = temprature * 100;
 		}else
 		{
-			temprature = 0.0;
-			data->temp_online_flag = TEMP_INLINE;
+					data->m_data.temprature_flag = TEMP_INLINE;
+			data->m_data.temprature =(-88.88 *100);
 		}
-		
-		gather_count = 0;
-		all_get_ad = 0;
+	}else
+	{
+		data->m_data.temprature_flag = TEMP_INLINE;
+		data->m_data.temprature =(-88.88 *100);
 	}
-	data->temprature = temprature;
 	return temprature;
 }
 

+ 65 - 3
control/STS/MODBUS/BARE/port/port.c

@@ -186,12 +186,12 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
 								if(recive == 1)
 								{
-									t_data->write_at24(IIC_OUT_CHANNEL,recive,sizeof(recive));
+									t_data->write_at24(IIC_OUT_CHANNEL,&recive,sizeof(recive));
 									t_data->open_output();
 								}else if(recive == 0)
 								{
 									t_data->close_output();
-									t_data->write_at24(IIC_OUT_CHANNEL,recive,sizeof(recive));
+									t_data->write_at24(IIC_OUT_CHANNEL,&recive,sizeof(recive));
 								}else
 								{
 									eStatus = MB_ENOREG;
@@ -214,13 +214,75 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								uint16_t *p_start = &(data->input_th[0].voltage_max);
 								memcpy(p_start+WeeiRegIndex,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
 								t_data->write_at24(IIC_INPUT_THRESHOLD_START+(WeeiRegIndex*2),&usRegHoldBuf[WiRegIndex],WusNRegs*2);
-								
+								for(int i =0 ; i < 2; i++) {
+									if(data->input_th[i].voltage_max <= SMALL_VALUE)
+										UNSET_VOLTAGE_MAX_EN(t_data->input_wanning_en[i]);
+									else
+										SET_VOLTAGE_MAX_EN(t_data->input_wanning_en[i]);
+									
+									if(data->input_th[i].voltage_min <= SMALL_VALUE)
+										UNSET_VOLTAGE_MIN_EN(t_data->input_wanning_en[i]);
+									else
+										SET_VOLTAGE_MIN_EN(t_data->input_wanning_en[i]);		
+									
+									if(data->input_th[i].freq_max <= SMALL_VALUE)
+										UNSET_FREQ_MAX_EN(t_data->input_wanning_en[i]);
+									else
+										SET_FREQ_MAX_EN(t_data->input_wanning_en[i]);	
+
+									if(data->input_th[i].freq_min <= SMALL_VALUE)
+										UNSET_FREQ_MIN_EN(t_data->input_wanning_en[i]);
+									else
+										SET_FREQ_MIN_EN(t_data->input_wanning_en[i]);
+								}
 							}else if(usAddress >= STS_OUTPUT_THRESHOLD  && usAddress < STS_TEMP_THRESHOLD)
 							{
+								WeeiRegIndex = (uint16_t)(usAddress - STS_OUTPUT_THRESHOLD);
+								uint16_t *p_start = &data->output_th;
+								memcpy(p_start+WeeiRegIndex,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
+								t_data->write_at24(IIC_OUTPUT_THRESHOLD_START+(WeeiRegIndex*2),&usRegHoldBuf[WiRegIndex],WusNRegs*2);
+								if(data->output_th.voltage_max <= SMALL_VALUE)
+									UNSET_VOLTAGE_MAX_EN(t_data ->output_wanning_en);
+								else
+									SET_VOLTAGE_MAX_EN(t_data ->output_wanning_en);
+								
+								if(data->output_th.voltage_min <= SMALL_VALUE)
+									UNSET_VOLTAGE_MIN_EN(t_data ->output_wanning_en);
+								else
+									SET_VOLTAGE_MIN_EN(t_data ->output_wanning_en);
+
+								if(data->output_th.current_max <= SMALL_VALUE)
+									UNSET_CURRENT_MAX_EN(t_data ->output_wanning_en);
+								else
+									SET_CURRENT_MAX_EN(t_data ->output_wanning_en);
+
+								if(data->output_th.power_max <= SMALL_VALUE)
+									UNSET_POWER_MAX_EN(t_data ->output_wanning_en);
+								else
+									SET_POWER_MAX_EN(t_data ->output_wanning_en);
+
+								if(data->output_th.consumer_max <= SMALL_VALUE)
+									UNSET_CONSUMER_MAX_EN(t_data ->output_wanning_en);
+								else
+									SET_CONSUMER_MAX_EN(t_data ->output_wanning_en);	
+								
 							}else if(usAddress >= STS_TEMP_THRESHOLD && usAddress < STS_OVER_FUNC)
 							{
+								WeeiRegIndex = (uint16_t)(usAddress - STS_TEMP_THRESHOLD);
+								uint16_t *p_start = &data->temprature_th;
+								memcpy(p_start+WeeiRegIndex,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
+								t_data->write_at24(IIC_TEMPRATURE_THRESHOLD_START+(WeeiRegIndex*2),&usRegHoldBuf[WiRegIndex],WusNRegs*2);
 							}else if(usAddress == STS_OVER_FUNC)
 							{
+								uint16_t recive = 0;
+								if(recive > 0x003F)
+								{
+									eStatus = MB_ENOREG;
+								}else{
+									memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
+									t_data->m_data.over_func = recive;
+									t_data->write_at24(IIC_OVER_FUNC_START,&recive,sizeof(recive));
+								}
 							}else
 							{
 								eStatus = MB_ENOREG;

Різницю між файлами не показано, бо вона завелика
+ 45 - 279
control/STS/PRJ/sts.uvguix.Gowon


+ 20 - 4
control/STS/PRJ/sts.uvoptx

@@ -130,11 +130,12 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGUARM</Key>
+          <Name>?</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U69545328 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BF11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD20000000 -FC1000 -FN1 -FF0GD32E23x.FLM -FS08000000 -FL010000 -FP0($$Device:GD32E230C8$Flash\GD32E23x.FLM)</Name>
+          <Name>-U69545260 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BF11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32E23x.FLM -FS08000000 -FL010000 -FP0($$Device:GD32E230C8$Flash\GD32E23x.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -147,17 +148,32 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>sts_data</ItemText>
+          <ItemText>retry</ItemText>
         </Ww>
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>retry</ItemText>
+          <ItemText>ADC_RDATA</ItemText>
         </Ww>
         <Ww>
           <count>2</count>
           <WinNumber>1</WinNumber>
-          <ItemText>ADC_RDATA</ItemText>
+          <ItemText>temprature</ItemText>
+        </Ww>
+        <Ww>
+          <count>3</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>data-&gt;temprature</ItemText>
+        </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>sts_data_t</ItemText>
+        </Ww>
+        <Ww>
+          <count>5</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>sts_data</ItemText>
         </Ww>
       </WatchWindow1>
       <Tracepoint>

+ 28 - 8
control/STS/USER/main.c

@@ -15,6 +15,12 @@
 #include "Mb.h"
 
 
+#define VERSION  "V1.0.0.0"
+
+#define UNIQU_1                       			0x1FFFF7AC
+#define UNIQU_2                       			0x1FFFF7B0
+#define UNIQU_3                       			0x1FFFF7B4
+
 sts_data_t  sts_data;
 
 
@@ -46,14 +52,23 @@ int main()
 	uint8_t md_addr = ReadKeyValue();
 	eMBInit(MB_RTU,md_addr,0,115200,MB_PAR_NONE);
 	eMBEnable();
+	strcpy(sts_data.m_data.info.date,__DATE__);
+	strcat(sts_data.m_data.info.date," ");
+	strcat(sts_data.m_data.info.date,__TIME__);
+	strcpy(sts_data.m_data.info.ver,VERSION);
+	sts_data.m_data.dev |= (STS_TYPE << 8);
 	
+	sts_data.m_data.info.uniq_ID_64_95 						= *(uint32_t*)(UNIQU_3);
+	sts_data.m_data.info.uniq_ID_32_63 						= *(uint32_t*)(UNIQU_2);
+	sts_data.m_data.info.uniq_ID_00_31 						= *(uint32_t*)(UNIQU_1);
 //	Fwdgt_Init();
 	
 	sts_data.read_input_level(INPUT_CHANNEL_1);
 	sts_data.read_input_level(INPUT_CHANNEL_2);
 	sts_data.read_switch_level();
-	
-	
+	sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1] = 1;						//test
+	sts_data.m_data.input_status.input_status[INPUT_CHANNEL_2] = 1;						//test
+	sts_data.read_eeprom();
 	if(sts_data.switch_status == INPUT_CHANNEL_1 && 
 			sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1])
 	{
@@ -70,6 +85,7 @@ int main()
 		sts_data.close_output();
 	}
 	uint8_t channel = CH448_CHANNEL_1;
+	uint8_t write_errp_count = 0;
 	while(1){
 	//	Fwdgt_reload();
 		eMBPoll();
@@ -79,19 +95,24 @@ int main()
 		{
 			sts_data.flag_1000ms = 0;
 			sts_data.led_flash();
+			write_errp_count++;
 			if(sts_data.beep_flag)
 			{
 				sts_data.beep();
 			}else
 			{
-				
+				sts_data.clear_beep();
 			}
 		}
+		if(write_errp_count >= 10)
+		{
+			write_errp_count = 0;
+			sts_data.write_at24(IIC_CONSUMER_START,&sts_data.iic_consumer,sizeof(sts_data.iic_consumer));
+		}
 		if(sts_data.flag_100ms)
 		{
 			sts_data.flag_100ms = 0;
 			sts_data.read_ele(channel);
-			//
 			sts_data.check_wanning(channel);
 			channel ++;
 		}
@@ -150,20 +171,19 @@ int main()
 			}
 			channel = CH448_CHANNEL_1;
 		}
-		if(sts_data.temp_online_flag == TEMP_ONLINE)
+		if(sts_data.m_data.temprature_flag == TEMP_ONLINE)
 		{
-			sts_data.m_data.temprature = sts_data.temprature * 100;
 			if(sts_data.m_data.temprature_th.fans_max_temp != 0 && sts_data.m_data.temprature_th.fans_min_temp != 0)
 			{
 				if(sts_data.m_data.temprature_th.fans_max_temp > sts_data.m_data.temprature_th.fans_min_temp)
 				{
-					if((uint16_t)(sts_data.temprature*100) >= sts_data.m_data.temprature_th.fans_max_temp)
+					if((int16_t)(sts_data.m_data.temprature) >= sts_data.m_data.temprature_th.fans_max_temp)
 					{
 						if(sts_data.m_data.fans_status != FANS_ON)
 						{
 							sts_data.fans(FANS_ON);
 						}
-					}else if((uint16_t)(sts_data.temprature*100) <= sts_data.m_data.temprature_th.fans_min_temp)
+					}else if((int16_t)(sts_data.m_data.temprature) <= sts_data.m_data.temprature_th.fans_min_temp)
 					{
 						if(sts_data.m_data.fans_status != FANS_OFF)
 						{

+ 14 - 8
control/STS/USER/main.h

@@ -23,11 +23,11 @@
 
 #define STS_INPUT_THRESHOLD   		(STS_CHOISE_INPUT + 1)
 
-#define STS_OUTPUT_THRESHOLD     	(STS_INPUT_THRESHOLD + 10)
+#define STS_OUTPUT_THRESHOLD     	(STS_INPUT_THRESHOLD + 16)
 
-#define STS_TEMP_THRESHOLD        (STS_OUTPUT_THRESHOLD + 2)
+#define STS_TEMP_THRESHOLD        (STS_OUTPUT_THRESHOLD + 10)
 
-#define STS_OVER_FUNC             (STS_TEMP_THRESHOLD +1)
+#define STS_OVER_FUNC             (STS_TEMP_THRESHOLD +2)
 
 
 
@@ -50,7 +50,7 @@
 #define IIC_OUT_CHANNEL                   (210)
 
 
-#define INVALID_VALUE                      (10000000)
+#define INVALID_VALUE                      (40000000000)
 #define SMALL_VALUE                        (500) 
 
 
@@ -145,6 +145,15 @@ enum {
 																			|| (IS_WANNING_FREQ_MAX(reg)) || (IS_WANNING_FREQ_MIN(reg)) )
 
 
+
+
+#define IS_OVERFUNC_VOLTAGE_MAX(reg)          IS_VOLTAGE_MAX_EN(reg)
+#define IS_OVERFUNC_VOLTAGE_MIN(reg)					IS_VOLTAGE_MIN_EN(reg)
+#define IS_OVERFUNC_CURRENT_MAX(reg)					IS_CURRENT_MAX_EN(reg)
+#define IS_OVERFUNC_POWER_MAX(reg)						IS_POWER_MAX_EN(reg) 
+#define IS_OVERFUNC_CONSUMER_MAX(reg)         IS_CONSUMER_MAX_EN(reg)
+
+
 #pragma pack (2)
 
 typedef struct {
@@ -251,10 +260,6 @@ typedef struct sts_data sts_data_t;
 typedef struct sts_data{
 	uint8_t     flag_1000ms;
 	uint8_t     flag_100ms;
-	uint8_t     temp_online_flag;
-	uint8_t     count_start_flag;
-	uint8_t     switch_flag;
-	uint8_t     over_func_flag;
 	uint8_t     beep_flag;
 	uint8_t       switch_status;
 	md_data_t 						m_data;
@@ -270,6 +275,7 @@ typedef struct sts_data{
 	void (*read_switch_level)();
 	void (*fans)(uint8_t on_off);
 	void (*beep)();
+	void (*clear_beep)();
 	void (*led_flash)();
 	void (*read_eeprom)();
 	void (*read_at24)(uint16_t start,uint8_t *buff,uint16_t lenth);