Bläddra i källkod

3相转单相,继电器控制。

liyi 1 år sedan
förälder
incheckning
a8cf49a33d
1 ändrade filer med 149 tillägg och 22 borttagningar
  1. 149 22
      truing_control/PDU-Triphasic_IO/USER/main.c

+ 149 - 22
truing_control/PDU-Triphasic_IO/USER/main.c

@@ -551,14 +551,19 @@ static void RL_Over_Func()
 			}
 		}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 1)
 		{
-			RL_Func_statu[i+1] = 0;
-			AC3PPDU_RL_time[i + CH1_out].LT_state = AC3PPDU_RL_time[i + CH1_out].LT_state &0xffffff3e;
-			orderFlag[i]=true;
+			if(RL_Func_statu[i+1]){
+				RL_Func_statu[i+1] = 0;
+				AC3PPDU_RL_time[i + CH1_out].LT_state = AC3PPDU_RL_time[i + CH1_out].LT_state &0xffffff3e;
+				orderFlag[i]=true;
+			}
 		}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 2)
 		{
-			RL_Func_statu[i+1+PH_STEP] = 0;
-			AC3PPDU_RL_time[i + CH1_out+PH_STEP].LT_state = AC3PPDU_RL_time[i + CH1_out+PH_STEP].LT_state &0xffffff3e;
-			orderFlag[i+PH_STEP]=true;			
+			if(RL_Func_statu[i+1+PH_STEP])
+			{
+				RL_Func_statu[i+1+PH_STEP] = 0;
+				AC3PPDU_RL_time[i + CH1_out+PH_STEP].LT_state = AC3PPDU_RL_time[i + CH1_out+PH_STEP].LT_state &0xffffff3e;
+				orderFlag[i+PH_STEP]=true;		
+			}				
 		}
 	}
 #else
@@ -987,11 +992,37 @@ int main(void)
 	{
 		if(handle_detection[0] == 1)
 		{
-			for(int i = 0;i < Output_ChN_default;i++)
+			
+			for(int i = 0; i < Output_ChN_default;i+=3)
 			{
-				handle_status[i] = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] & 0x1);
-				AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] &= 0xfffffffe;
+				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 0)
+				{
+					handle_status[i  ] = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] & 0x1);
+					handle_status[i+1] = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i + 1] & 0x1);
+					handle_status[i+2] = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i + 2] & 0x1);
+				}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 1)
+				{
+					handle_status[i  ] = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] & 0x1);
+					AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i + 1] &= 0xfffffffe;
+					AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i + 2] &= 0xfffffffe;	
+				}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 2)
+				{
+					handle_status[i+1] = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i + 1] & 0x1);
+					AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] &= 0xfffffffe;
+					AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i + 2] &= 0xfffffffe;
+				}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 3)
+				{
+					AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] &= 0xfffffffe;
+					AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i + 1] &= 0xfffffffe;		
+					handle_status[i+2] = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i+2] & 0x1);					
+				}
 			}
+			
+//			for(int i = 0;i < Output_ChN_default;i++)
+//			{
+//				handle_status[i] = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] & 0x1);
+//				AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] &= 0xfffffffe;
+//			}
 	#if SUPPORT_ZERO_LINE
 			handle_status_N = (AC3PPDU_Modbus_Reg[Mb_Dbuff_CHNLT_ST_Addr] & 0x1);
 			AC3PPDU_Modbus_Reg[Mb_Dbuff_CHNLT_ST_Addr] &= 0xfffffffe;
@@ -1330,13 +1361,72 @@ static void MODbus_CMD_New(void)
 				if(detection_value == 1)
 				{
 					RL_Allon_flag = true;
-					for(i = 0;i < Output_ChN_default;i++)
+					for(int i = 0; i < Output_ChN_default;i+=3)
 					{
-						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(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 0)
+						{
+							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;
+							temp_addr = (i+1) << 1; 
+							Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x41;
+							AC3PPDU_RL_time[i + CH1_out + 1].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
+							orderFlag[i+1]=true;
+							temp_addr = (i+2) << 1; 
+							Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x41;
+							AC3PPDU_RL_time[i + CH1_out + 2].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
+							orderFlag[i+2]=true;
+						}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 1)
+						{							
+							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;
+							
+							temp_addr = (i+1) << 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;
+
+							temp_addr = (i+2) << 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;							
+							
+						}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 2)
+						{
+							temp_addr = (i+1) << 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+1]=true;
+
+							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;
+
+							temp_addr = (i+2) << 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;									
+						}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 3)
+						{
+							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;
+							temp_addr = (i+1) << 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;		
+							temp_addr = (i+2) << 1; 
+							Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x41;
+							AC3PPDU_RL_time[i + CH1_out + 2].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
+							orderFlag[i+2]=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;
@@ -1513,13 +1603,50 @@ static void MODbus_CMD_New(void)
 	#else 
 					if(detection_value == 1)
 					{
-						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]);
+						for(int i = 0; i < Output_ChN_default;i+=3)
+						{
+							if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 0 || AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 1)
+							{
+								if(temp_addr == i)
+								{
+									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;
+								}
+							}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 2)
+							{
+								if(temp_addr == (i+1))
+								{
+									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;									
+								}
+							}else if(AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_SET_SINGLE_OUT_CH1+i] == 3)
+							{
+								if(temp_addr == (i+2))
+								{
+									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;
+								}
+							}
+						}
+
 					}
 	#endif	
 #endif