Explorar el Código

Merge branch 'master' of http://jiecheng2024.tpddns.cn:3000/liyuezong/SmartPDCode

chenyuanjie hace 1 año
padre
commit
63135fc938

+ 5 - 5
truing_control/PDU-Triphasic_IO/HARDWARE/Timer/Timer.c

@@ -148,21 +148,21 @@ void TIMER14_IRQHandler(void)
 	}
 #endif
 	detection_count ++;
-	if(detection_count > 1000)
+	if(detection_count > 100)
 	{
 		key_detection = 0;
 		detection_count = 0;
 	}
 #if SUPPORT_DOUBLE_FIRE
 	detection_count_2 ++;
-	if(detection_count_2 >1000)
+	if(detection_count_2 >100)
 	{
 		detection_count_2 = 0;
 		key_detection_2 = 0;
 	}
 #endif
 	read_ele_count ++;
-	if(read_ele_count >=600)
+	if(read_ele_count >=60)
 	{
 		read_ele_count = 0;
 		read_ele_flag = 1;
@@ -219,8 +219,8 @@ void TIMER16_IRQHandler(void)
 *********************************************************************************************************/
 void InitTimer(void)
 {
-	ConfigTimer14(999, 71);  //72MHz/(71+1)=1MHzㄛ蚕0數杅善999峈1ms 
-	ConfigTimer16(1999, 7199);					// data  ????
+	ConfigTimer14(9999, 71);  //72MHz/(71+1)=1MHzㄛ蚕0數杅善999峈1ms 
+	ConfigTimer16(2999, 7199);					// data  ????
 }
 uint8_t Get1SecFlag(void)
 {

+ 173 - 96
truing_control/PDU-Triphasic_IO/USER/main.c

@@ -73,7 +73,7 @@ uint8_t RL_ON_flag[Output_ChN_default] 						= {0x00};
 uint8_t RL_OFF_flag[Output_ChN_default] 					= {0x00};
 uint8_t RL_last_state[Output_ChN_default] 				= {0x00};
 uint8_t RL_now_state[Output_ChN_default] 					= {0x00};
-uint8_t RL_Func_statu[Output_ChN_default] 			= {0x00};
+uint8_t RL_Func_statu[Output_ChN_default+1] 			= {0x00};
 uint8_t RL_All_Func 																= 0x0;
 uint32_t normal_running_time = 0;
 
@@ -291,7 +291,7 @@ static void  check_jlink()
 					{
 						RL_N_begin_delay_flag = 1;
 						RL_N_end_delay_flag = 0;
-						RL_N_delay_Limit = AC3PPDU_RL_N_time.RL_ontime * 1000;
+						RL_N_delay_Limit = AC3PPDU_RL_N_time.RL_ontime * 100;
 					} else {						
 						RL_N_begin_delay_flag = 0;
 						RL_N_end_delay_flag = 1;
@@ -305,7 +305,7 @@ static void  check_jlink()
 					{
 							RL_N_begin_delay_flag = 1;
 							RL_N_end_delay_flag = 0;
-							RL_N_delay_Limit = AC3PPDU_RL_N_time.RL_offtime * 1000;				
+							RL_N_delay_Limit = AC3PPDU_RL_N_time.RL_offtime * 100;				
 					}else
 					{
 							RL_N_begin_delay_flag = 0;
@@ -339,10 +339,10 @@ static void  check_jlink()
 							RL_OFF_flag[k] 	= 0;
 							if((AC3PPDU_RL_time[k + CH1_out].LT_state & 0x40) > 0)//有延时
 							{
-								RL_delay_Limit[k] = AC3PPDU_RL_time[k + CH1_out].RL_ontime * 1000;//秒转成毫秒
+								RL_delay_Limit[k] = AC3PPDU_RL_time[k + CH1_out].RL_ontime * 100;//秒转成毫秒
 								RL_begin_delay_flag[k] = 1;
 								RL_end_delay_flag[k] = 0;
-								RL_delay_Limit[k] = AC3PPDU_RL_time[k + CH1_out].RL_ontime * 1000;//秒转成毫秒
+								RL_delay_Limit[k] = AC3PPDU_RL_time[k + CH1_out].RL_ontime * 100;//秒转成毫秒
 							}else//无延时
 							{
 								RL_begin_delay_flag[k] = 0;
@@ -357,7 +357,7 @@ static void  check_jlink()
 							{
 								RL_begin_delay_flag[k] 	= 1;
 								RL_end_delay_flag[k] 		= 0;
-								RL_delay_Limit[k] 			= AC3PPDU_RL_time[k + CH1_out].RL_offtime * 1000;//秒转成毫秒
+								RL_delay_Limit[k] 			= AC3PPDU_RL_time[k + CH1_out].RL_offtime * 100;//秒转成毫秒
 							}else//无延时
 							{
 								RL_begin_delay_flag[k] = 0;
@@ -527,6 +527,20 @@ static void RL_Over_Func()
 		RL_All_Func = 0;
 		return;
 	}
+#if SUPPORT_DOUBLE_FIRE
+	for(int i = 0; i < Output_ChN_default / 2;i++)
+	{
+		if(RL_Func_statu[i+1] || RL_Func_statu[i+1+4])
+		{
+			RL_Func_statu[i+1] = 0;
+			RL_Func_statu[i+1+4] = 0;
+			AC3PPDU_RL_time[i + CH1_out].LT_state = AC3PPDU_RL_time[i + CH1_out].LT_state &0xffffff3e;
+			AC3PPDU_RL_time[i + CH1_out+4].LT_state = AC3PPDU_RL_time[i + CH1_out+4].LT_state &0xffffff3e;
+			orderFlag[i]=true;
+			orderFlag[i+4]=true;
+		}
+	}
+#else
 	for(int i = 0; i < Output_ChN_default;i++)
 	{
 		if(RL_Func_statu[i+1])
@@ -536,6 +550,7 @@ static void RL_Over_Func()
 			RL_Func_statu[i+1] = 0;
 		}
 	}
+#endif
 }
 
 static void key_io_control()
@@ -821,6 +836,7 @@ int main(void)
 			}
 			AT24CxxWrite(ERom_TotalWh1_Addr,(Eeprom_Rbuf + ERom_TotalWh1_Addr),4*Output_ChN_default);
 		}
+		key_io_control();
 		RL_Over_Func();
 		MODbus_CMD_New();
 	}
@@ -950,44 +966,57 @@ static void MODbus_CMD_New(void)
 				break;
 			case Mb_Dbuff_RL_Allon_Addr:																					//relay all on
 			{
-				RL_Allon_flag = true;
-				for(i = 0;i < Output_ChN_default;i++)
-				{
-					temp_addr = i << 1; 
-					Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x41;
-					AC3PPDU_RL_time[i + CH1_out].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
-					orderFlag[i]=true;
-				}		
-#if SUPPORT_ZERO_LINE
-				orderFlag_N = true;
+#if SUPPORT_DOUBLE_FIRE
+				if(detection_value == 0x3)
+#else
+				if(detection_value == 1)
 #endif
-				AT24CxxWrite(ERom_CH1LT_ST_Addr,(Eeprom_Rbuf + ERom_CH1LT_ST_Addr),(2*Output_ChN_default));
-				Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] | 0x41;
-				AC3PPDU_RL_N_time.LT_state = Eeprom_Rbuf[ERom_CHNLT_ST_Addr];
-				
-				AT24CxxWrite(ERom_CHNLT_ST_Addr,(Eeprom_Rbuf + ERom_CHNLT_ST_Addr),2);
+				{
+					RL_Allon_flag = true;
+					for(i = 0;i < Output_ChN_default;i++)
+					{
+						temp_addr = i << 1; 
+						Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x41;
+						AC3PPDU_RL_time[i + CH1_out].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
+						orderFlag[i]=true;
+					}		
+					AT24CxxWrite(ERom_CH1LT_ST_Addr,(Eeprom_Rbuf + ERom_CH1LT_ST_Addr),(2*Output_ChN_default));
+	#if SUPPORT_ZERO_LINE
+					orderFlag_N = true;
+					Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] | 0x41;
+					AC3PPDU_RL_N_time.LT_state = Eeprom_Rbuf[ERom_CHNLT_ST_Addr];
+					AT24CxxWrite(ERom_CHNLT_ST_Addr,(Eeprom_Rbuf + ERom_CHNLT_ST_Addr),2);
+	#endif
+				}
 			}
 				break;
 			case Mb_Dbuff_RL_Alloff_Addr:																					//relay all off
 			{
-				RL_Alloff_flag = true;
-				for(i = 0;i < Output_ChN_default;i++)
-				{
-					temp_addr = i << 1;
-					Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x80;
-					Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] & 0xfe;
-					AC3PPDU_RL_time[i + CH1_out].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
-					orderFlag[i]=true;
-				}
-#if SUPPORT_ZERO_LINE
-				orderFlag_N = true;
+#if SUPPORT_DOUBLE_FIRE
+				if(detection_value == 0x3)
+#else
+				if(detection_value == 1)
 #endif
-				AT24CxxWrite(ERom_CH1LT_ST_Addr,(Eeprom_Rbuf + ERom_CH1LT_ST_Addr),(2*Output_ChN_default));
-				Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] | 0x80;
-				Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] & 0xfe;
-				AC3PPDU_RL_N_time.LT_state = Eeprom_Rbuf[ERom_CHNLT_ST_Addr];
-				AT24CxxWrite(ERom_CHNLT_ST_Addr,(Eeprom_Rbuf + ERom_CHNLT_ST_Addr),2);
-			}
+				{	
+					RL_Alloff_flag = true;
+					for(i = 0;i < Output_ChN_default;i++)
+					{
+						temp_addr = i << 1;
+						Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x80;
+						Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] & 0xfe;
+						AC3PPDU_RL_time[i + CH1_out].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
+						orderFlag[i]=true;
+					}
+					AT24CxxWrite(ERom_CH1LT_ST_Addr,(Eeprom_Rbuf + ERom_CH1LT_ST_Addr),(2*Output_ChN_default));
+		#if SUPPORT_ZERO_LINE
+					orderFlag_N = true;
+					Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] | 0x80;
+					Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] & 0xfe;
+					AC3PPDU_RL_N_time.LT_state = Eeprom_Rbuf[ERom_CHNLT_ST_Addr];
+					AT24CxxWrite(ERom_CHNLT_ST_Addr,(Eeprom_Rbuf + ERom_CHNLT_ST_Addr),2);
+		#endif
+				}
+		 }
 				break;
 			case Mb_Dbuff_LT_ST_Addr:																							//set input status
 			{
@@ -1003,12 +1032,96 @@ static void MODbus_CMD_New(void)
 				temp_addr = base_addr - Mb_Dbuff_CH1LT_ST_Addr;
 
 				if(temp_addr == 9) {					//Ch N
-					AC3PPDU_RL_N_time.LT_state = data;
 #if SUPPORT_ZERO_LINE
+					AC3PPDU_RL_N_time.LT_state = data;
 					orderFlag_N = true;
+					temp_addr = temp_addr << 1;
+					temp_addr +=ERom_CHNLT_ST_Addr;
+					Eeprom_Rbuf[temp_addr] = data;
+					AT24CxxWriteOneByte(temp_addr,Eeprom_Rbuf[temp_addr]);
 #endif
 				}else{
-
+	#if SUPPORT_DOUBLE_FIRE
+					if(detection_value == 0x3)
+	#else
+					if(detection_value == 1)
+	#endif					
+					{
+						if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
+						{
+							data &= (Shield_Vmax_Threshould_Disable);
+						}
+						if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
+						{
+							data &= (Shield_Vmin_Threshould_Disable);
+						}
+						if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
+						{
+							data &= (Shield_Imax_Threshould_Disable);
+						}
+						if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
+						{
+							data &= (Shield_Wmax_Threshould_Disable);
+						}
+						if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
+						{
+							data &= (Shield_Kwhmax_Threshould_Disable);
+						}
+						
+						AC3PPDU_RL_time[temp_addr + CH1_out].LT_state = data;
+						orderFlag[temp_addr]=true;
+						LimiT_enable_check((temp_addr + CH1_out),AC3PPDU_RL_time[temp_addr + CH1_out].LT_state);
+						temp_addr = temp_addr << 1;
+						temp_addr += ERom_CH1LT_ST_Addr;
+						Eeprom_Rbuf[temp_addr] = data;
+						AT24CxxWriteOneByte(temp_addr,Eeprom_Rbuf[temp_addr]);
+					}
+				}
+			}
+				break;
+			case Mb_Dbuff_OUTCH1_ST_Addr ... Mb_Dbuff_OUTCH4_ST_Addr:							//set output channel relay's status
+			{
+#if SUPPORT_DOUBLE_FIRE
+					if(detection_value == 0x3)
+					{
+						temp_addr = base_addr - Mb_Dbuff_OUTCH1_ST_Addr;
+						for(int i = temp_addr; i < Output_ChN_default; i += 4)
+						{
+							uint32_t value = 0;
+							if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] <= THRESHOULD_JUDGMENT)
+							{
+								value = data & Shield_Vmax_Threshould_Disable;
+							}		
+							if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] <= THRESHOULD_JUDGMENT)
+							{
+								value = data & (Shield_Vmin_Threshould_Disable);
+							}		
+							if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] <= THRESHOULD_JUDGMENT)
+							{
+								value = data &(Shield_Imax_Threshould_Disable);
+							}
+							if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] <= THRESHOULD_JUDGMENT)
+							{
+								value = data & (Shield_Wmax_Threshould_Disable);
+							}
+							if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] <= THRESHOULD_JUDGMENT)
+							{
+								value = data & (Shield_Kwhmax_Threshould_Disable);
+							}	
+							AC3PPDU_RL_time[i + CH1_out].LT_state = value;
+							orderFlag[i]=true;
+							LimiT_enable_check((i + CH1_out),AC3PPDU_RL_time[i + CH1_out].LT_state);
+							Eeprom_Rbuf[i + ERom_CH1LT_ST_Addr] = value;
+							AT24CxxWriteOneByte(i + ERom_CH1LT_ST_Addr,Eeprom_Rbuf[i + ERom_CH1LT_ST_Addr]);
+						}
+					}
+#else
+				if(detection_value == 1)
+	
+				{
+					temp_addr = base_addr - Mb_Dbuff_OUTCH1_ST_Addr;
+					//OutUnit_control_flag[temp_addr] = 1;
+					temp_addr *= 3;
 					if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
 					{
 						data &= (Shield_Vmax_Threshould_Disable);
@@ -1031,64 +1144,28 @@ static void MODbus_CMD_New(void)
 					}
 					
 					AC3PPDU_RL_time[temp_addr + CH1_out].LT_state = data;
-					orderFlag[temp_addr]=true;
+					AC3PPDU_RL_time[temp_addr + CH2_out].LT_state = data;
+					AC3PPDU_RL_time[temp_addr + CH3_out].LT_state = data;
+					for(int i=0;i<Output_ChN_default;i++)
+					{
+						orderFlag[i]=true;
+					}
+					//orderFlag_N = true;
 					LimiT_enable_check((temp_addr + CH1_out),AC3PPDU_RL_time[temp_addr + CH1_out].LT_state);
-
-				}
-
-				temp_addr = temp_addr << 1;
-				temp_addr += ERom_CH1LT_ST_Addr;
-				Eeprom_Rbuf[temp_addr] = data;
-				AT24CxxWriteOneByte(temp_addr,Eeprom_Rbuf[temp_addr]);
-			}
-				break;
-			case Mb_Dbuff_OUTCH1_ST_Addr ... Mb_Dbuff_OUTCH3_ST_Addr:							//set output channel relay's status
-			{
-				temp_addr = base_addr - Mb_Dbuff_OUTCH1_ST_Addr;
-				//OutUnit_control_flag[temp_addr] = 1;
-				temp_addr *= 3;
-				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
-				{
-					data &= (Shield_Vmax_Threshould_Disable);
-				}
-				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
-				{
-					data &= (Shield_Vmin_Threshould_Disable);
-				}
-				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
-				{
-					data &= (Shield_Imax_Threshould_Disable);
-				}
-				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
-				{
-					data &= (Shield_Wmax_Threshould_Disable);
-				}
-				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + temp_addr] <= THRESHOULD_JUDGMENT)
-				{
-					data &= (Shield_Kwhmax_Threshould_Disable);
-				}
-				
-				AC3PPDU_RL_time[temp_addr + CH1_out].LT_state = data;
-				AC3PPDU_RL_time[temp_addr + CH2_out].LT_state = data;
-				AC3PPDU_RL_time[temp_addr + CH3_out].LT_state = data;
-				for(int i=0;i<Output_ChN_default;i++)
-				{
-					orderFlag[i]=true;
+					LimiT_enable_check((temp_addr + CH2_out),AC3PPDU_RL_time[temp_addr + CH2_out].LT_state);
+					LimiT_enable_check((temp_addr + CH3_out),AC3PPDU_RL_time[temp_addr + CH3_out].LT_state);
+					
+					temp_addr = temp_addr << 1;
+					Eeprom_Rbuf[temp_addr + ERom_CH1LT_ST_Addr] = data;
+					Eeprom_Rbuf[temp_addr + ERom_CH2LT_ST_Addr] = data;
+					Eeprom_Rbuf[temp_addr + ERom_CH3LT_ST_Addr] = data;
+					
+					AT24CxxWriteOneByte(temp_addr + ERom_CH1LT_ST_Addr,Eeprom_Rbuf[temp_addr + ERom_CH1LT_ST_Addr]);
+					AT24CxxWriteOneByte(temp_addr + ERom_CH2LT_ST_Addr,Eeprom_Rbuf[temp_addr + ERom_CH2LT_ST_Addr]);
+					AT24CxxWriteOneByte(temp_addr + ERom_CH3LT_ST_Addr,Eeprom_Rbuf[temp_addr + ERom_CH3LT_ST_Addr]);
+					
 				}
-				//orderFlag_N = true;
-				LimiT_enable_check((temp_addr + CH1_out),AC3PPDU_RL_time[temp_addr + CH1_out].LT_state);
-				LimiT_enable_check((temp_addr + CH2_out),AC3PPDU_RL_time[temp_addr + CH2_out].LT_state);
-				LimiT_enable_check((temp_addr + CH3_out),AC3PPDU_RL_time[temp_addr + CH3_out].LT_state);
-				
-				temp_addr = temp_addr << 1;
-				Eeprom_Rbuf[temp_addr + ERom_CH1LT_ST_Addr] = data;
-				Eeprom_Rbuf[temp_addr + ERom_CH2LT_ST_Addr] = data;
-				Eeprom_Rbuf[temp_addr + ERom_CH3LT_ST_Addr] = data;
-				
-				AT24CxxWriteOneByte(temp_addr + ERom_CH1LT_ST_Addr,Eeprom_Rbuf[temp_addr + ERom_CH1LT_ST_Addr]);
-				AT24CxxWriteOneByte(temp_addr + ERom_CH2LT_ST_Addr,Eeprom_Rbuf[temp_addr + ERom_CH2LT_ST_Addr]);
-				AT24CxxWriteOneByte(temp_addr + ERom_CH3LT_ST_Addr,Eeprom_Rbuf[temp_addr + ERom_CH3LT_ST_Addr]);
-				
+#endif	
 			}
 				break;
 			case Mb_Dbuff_RL_Ton1_Addr ... Mb_Dbuff_RL_TonN_Addr:									//set on status delay for 1,2,3,4,5,6,7,8,9,N channels

+ 9 - 2
truing_control/PDU-Triphasic_IO/USER/main.h

@@ -1075,13 +1075,20 @@
 
 //////////////////////////////////////
 #define Phase_N                 3
-
+#if SUPPORT_DOUBLE_FIRE
+#define Output_ChN_default      8
+#else
 #define Output_ChN_default      3
+#endif
 #define RELAY_ontime_default    1
 #define RELAY_ontime_max        99
 #define RELAY_offtime_default   1
 #define RELAY_offtime_max       99
-#define AC3PPDU_Device_ID       0x0008
+#if SUPPORT_DOUBLE_FIRE
+	#define AC3PPDU_Device_ID       0x0009
+#else
+	#define AC3PPDU_Device_ID       0x0008
+#endif
 #define Uart0_Baud              115200
 #define Mb_Wcmd_Width           16
 #define Mb_Wcmd_len             8