Преглед изворни кода

01. 修改: 通过GW_AREA_MAIN_2021宏关闭部分gpio的使用。
02. 合并: 合并DTUv4开关定值和保护逻辑,小电流接地部分还待移植。
03. 修改: 通过GW_AREA_MAIN_2021宏关闭部分原本应用于南网的逻辑功能。

EWen пре 1 година
родитељ
комит
f34a7124df

+ 6 - 1
README.md

@@ -5,4 +5,9 @@
 03. 修复: rt_err_set 加密芯片错误时程序崩溃问题。
 04. 修改: 波特率修改增加115200。
 05. 合并: DTUv4公共定值和逻辑合并。
-06. 修改: 通过GW_AREA_MAIN_2021宏关闭部分南网专用定值和逻辑。 
+06. 修改: 通过GW_AREA_MAIN_2021宏关闭部分南网专用定值和逻辑。 
+
+# 20250930
+01. 修改: 通过GW_AREA_MAIN_2021宏关闭部分gpio的使用。
+02. 合并: 合并DTUv4开关定值和保护逻辑,小电流接地部分还待移植。
+03. 修改: 通过GW_AREA_MAIN_2021宏关闭部分原本应用于南网的逻辑功能。

+ 11 - 9
app_public/fuxi_public/fuxi_bsp/source/gpio.c

@@ -153,7 +153,7 @@ int gpio_init(void)
         printf("Cannot open GPIO to export it\n");
         return -1;
     }
-#if 0 //集中式不用此方式开出
+#ifndef GW_AREA_MAIN_2021
     for (i = 0; i < DO_NUM; i ++)
     {
         sprintf(num, "%d", gpio_val[i]);
@@ -169,7 +169,7 @@ int gpio_init(void)
     }
 
     close(exportfd);
-#if 0	// TODO:需根据实际硬件重新对应匹配
+#ifndef GW_AREA_MAIN_2021
     for (i = 0; i < DO_NUM; i ++)
     {
         sprintf(path, "/sys/class/gpio/gpio%d/value", gpio_val[i]);
@@ -219,11 +219,13 @@ int gpio_init(void)
             	close(gpio_val_fd_other[j]);
             	gpio_val_fd_other[j] = -1;
             }
-            // for(j = 0; j < DO_NUM; j ++)
-            // {
-            // 	close(gpio_val_fd[j]);
-            // 	gpio_val_fd[j] = -1;
-            // }
+		#ifndef GW_AREA_MAIN_2021
+            for(j = 0; j < DO_NUM; j ++)
+            {
+            	close(gpio_val_fd[j]);
+            	gpio_val_fd[j] = -1;
+            }
+		#endif
             return -5;
         }
     }
@@ -262,7 +264,7 @@ int gpio_init(void)
 
 	//开启esam供电
 	write(gpio_val_fd_other[ESAM_PWR], "0", 2);
-#if 0	// TODO:需根据实际硬件重新对应匹配
+#ifndef GW_AREA_MAIN_2021
     for (i = 0; i < DO_NUM; i ++)
     {
 		write(gpio_val_fd[i], "1", 2);
@@ -283,7 +285,7 @@ int gpio_exit(void)
         printf("Cannot open GPIO to unexport it\n");
         return -1;
     }
-#if 0
+#ifndef GW_AREA_MAIN_2021
     for (i = 0; i < DO_NUM; i ++)
     {
     	if(gpio_val_fd[i] >= 0)

+ 43 - 17
dtu/dtu_main_t536/app/Appconfig.c

@@ -203,7 +203,16 @@ const SOE_DEF tAllSOE[]=
   	    {0x14,		{EV_PARA_Ib,	0,					0},				"过流Ⅲ段B相短路故障"},
  	    {0x14,		{EV_PARA_Ic,	0,					0},				"过流Ⅲ段C相短路故障"},
     #endif	
-	
+	#ifdef GW_AREA_MAIN_2021
+		{0x84,		{EV_PARA_Ia,	EV_PARA_Ib,	EV_PARA_Ic},	"短路故障跳闸"},
+		{0x0,		{EV_PARA_Ia,	0,			0},				"A相短路跳闸"},
+		{0x0,		{EV_PARA_Ib,	0,			0},				"B相短路跳闸"},
+		{0x0,		{EV_PARA_Ic,	0,			0},				"C相短路跳闸"},
+		{0x84,		{EV_PARA_Ia,	EV_PARA_Ib,	EV_PARA_Ic},	"短路故障告警"},
+		{0x0,		{EV_PARA_Ia,	0,			0},				"A相短路告警"},
+		{0x0,		{EV_PARA_Ib,	0,			0},				"B相短路告警"},
+		{0x0,		{EV_PARA_Ic,	0,			0},				"C相短路告警"},
+	#endif
 	{0xD4|SOE_TYPE_DELAY_FHZ,		{EV_PARA_I0,	EV_PARA_U0,	0},				"零流I段动作"},
 	{0xD4,		{EV_PARA_I0,	EV_PARA_U0,	0},				"零流I段告警"},
 	#ifdef EV_GL_STATR
@@ -223,6 +232,10 @@ const SOE_DEF tAllSOE[]=
 			{0x04,		{EV_PARA_U0,EV_PARA_I0,	 0}, 			"零流III段启动"},
 		#endif
 	#endif	
+	#ifdef GW_AREA_MAIN_2021
+		{0x84,		{EV_PARA_I0,	0,			0},				"零流跳闸"},
+		{0x84,		{EV_PARA_I0,	0,			0},				"零流告警"},
+	#endif
 #endif
 
 #ifdef FUN_JDXX
@@ -236,6 +249,7 @@ const SOE_DEF tAllSOE[]=
 	
 	{0xD4|SOE_TYPE_DELAY_FHZ,		{EV_PARA_Ia,EV_PARA_Ib,	EV_PARA_Ic},		"过流加速动作"},	
 	{0xD4|SOE_TYPE_DELAY_FHZ,		{EV_PARA_I0,	EV_PARA_U0,	0},				"零序加速动作"},
+	{0xD4|SOE_TYPE_DELAY_FHZ,		{EV_PARA_I0,	EV_PARA_U0,	0},				"零压加速动作"},
 
 	{0xD4,		{EV_PARA_Ia,EV_PARA_Ib,	EV_PARA_Ic},		"反时限过流动作"},
 #if defined GD_AREA_CHAOZHOU || defined GD_AREA_SHANTOU  || defined GD_AREA_ECZD_2020   //潮州局要求合后电流两段处理		
@@ -565,27 +579,21 @@ const SOE_DEF tAllSOE[]=
 	
 	{0x44,		{EV_PARA_Ia,	EV_PARA_Ib,	EV_PARA_Ic},		"遮断电流闭锁"},
 
-#ifdef DISP_SET_DLYX
 	{0x84,		{EV_PARA_Ia,EV_PARA_Ib, EV_PARA_Ic},		"电流重载告警"},
-//	{0x04,		{EV_PARA_Ia,	0,			0}, 			"Ia重载告警"}, 
-//	{0x04,		{EV_PARA_Ib,	0,			0}, 			"Ib重载告警"}, 
-//	{0x04,		{EV_PARA_Ic,	0,			0}, 			"Ic重载告警"}, 
+	{0x04,		{EV_PARA_Ia,	0,			0}, 			"Ia重载告警"}, 
+	{0x04,		{EV_PARA_Ib,	0,			0}, 			"Ib重载告警"}, 
+	{0x04,		{EV_PARA_Ic,	0,			0}, 			"Ic重载告警"}, 
 
 	{0x84,		{EV_PARA_Ia,EV_PARA_Ib, EV_PARA_Ic},		"电流过载告警"},
-//	{0x04,		{EV_PARA_Ia,	0,			0}, 			"Ia过载告警"}, 
-//	{0x04,		{EV_PARA_Ib,	0,			0}, 			"Ib过载告警"}, 
-//	{0x04,		{EV_PARA_Ic,	0,			0}, 			"Ic过载告警"}, 
+	{0x04,		{EV_PARA_Ia,	0,			0}, 			"Ia过载告警"}, 
+	{0x04,		{EV_PARA_Ib,	0,			0}, 			"Ib过载告警"}, 
+	{0x04,		{EV_PARA_Ic,	0,			0}, 			"Ic过载告警"}, 
 
 	{0x84,		{EV_PARA_Ia,EV_PARA_Ib, EV_PARA_Ic},		"负荷越限告警"},
-//	{0x04,		{EV_PARA_Ia,	0,			0}, 			"Ia越限告警"}, 
-//	{0x04,		{EV_PARA_Ib,	0,			0}, 			"Ib越限告警"}, 
-//	{0x04,		{EV_PARA_Ic,	0,			0}, 			"Ic越限告警"}, 
-#else
-	{0x84,		{EV_PARA_Ia,EV_PARA_Ib,	EV_PARA_Ic},		"电流越限告警"},
-	{0x04,		{EV_PARA_Ia,	0,			0},				"Ia越限告警"}, 
-	{0x04,		{EV_PARA_Ib,	0,			0},				"Ib越限告警"}, 
-	{0x04,		{EV_PARA_Ic,	0,			0},				"Ic越限告警"}, 
-#endif
+	{0x04,		{EV_PARA_Ia,	0,			0}, 			"Ia越限告警"}, 
+	{0x04,		{EV_PARA_Ib,	0,			0}, 			"Ib越限告警"}, 
+	{0x04,		{EV_PARA_Ic,	0,			0}, 			"Ic越限告警"}, 
+
 	{0x84,		{EV_PARA_I0,0,	0},						"零序电流越限告警"},
 
 #ifdef GD_AREA_JIEYANG
@@ -800,6 +808,24 @@ const SOE_DEF tAllSOE[]=
 #ifdef GW_AREA_MAIN_2021
 	{0x04,		{EV_PARA_Uab,EV_PARA_Ubc,EV_PARA_Uca},		"PT断线告警"},
 	{0x04,		{EV_PARA_Uab,EV_PARA_Ubc,EV_PARA_Uca},		"PT断线跳闸"},
+
+	{0x84,		{EV_PARA_I0,	EV_PARA_U0,	0},				"接地故障总"},
+	{0x0,		{EV_PARA_Ia,	0,			0},				"A相接地故障"}, 
+	{0x0,		{EV_PARA_Ib,	0,			0},				"B相接地故障"},
+	{0x0,		{EV_PARA_Ic,	0,			0},				"C相接地故障"},
+
+	{0x00,		{0,				0,			0},				"故障停电"},
+	{0x00,		{0,				0,			0},				"计划停电"},
+	{0x00,		{0,				0,			0},				"恢复供电"},
+
+	{0x00,		{0,				0,			0},				"二次谐波闭锁"},
+
+	{0x84,		{EV_PARA_Ia,EV_PARA_Ib,	EV_PARA_Ic},		"CT断线告警"},
+	{0x07,		{PARA_TYPE_YB|EV_PARA_YK,	0,	0},			"遥控开出软压板"},
+	{0x00,		{0,				0,			0},				"故障指示"},
+	{0x00,		{0,				0,			0},				"间隔事故总"},
+	{0x04,		{0,				0,			0},				"合环检测"},
+	{0x04,		{0,				0,			0},				"合环闭锁"},	
 #endif
 	// 公共事件
 

+ 46 - 16
dtu/dtu_main_t536/app/Appconfig.h

@@ -180,8 +180,17 @@ enum
 	EV_GL3_IB,					//过流3 B相故障
 	EV_GL3_IC,					//过流3 C相故障
 #endif
+#ifdef GW_AREA_MAIN_2021
+	EV_DL_TZ,			// 短路故障跳闸		
+	EV_ADL_TZ,			// A相短路跳闸
+	EV_BDL_TZ,			// B相短路跳闸
+	EV_CDL_TZ,			// C相短路跳闸
 
-
+	EV_DL_GZ,			// 短路故障
+	EV_ADL_GZ,			// A相短路告警
+	EV_BDL_GZ,			// B相短路告警
+	EV_CDL_GZ,			// C相短路告警
+#endif
     EV_LX1TZ,
     EV_LX1GJ,
 #ifdef EV_GL_STATR
@@ -200,7 +209,10 @@ enum
 	EV_LX3_START,
   #endif
 #endif
-
+#ifdef GW_AREA_MAIN_2021
+	EV_LLTZ,			
+	EV_LLGJ,
+#endif
 #ifdef FUN_JDXX
 		EV_JDXX_U01GJ,			// 小电流零压告警1
 		EV_JDXX_U02GJ,			// 小电流零压告警2
@@ -212,6 +224,7 @@ enum
 
 	EV_GLJS,					// IA过流加速
 	EV_LXJS,					// 零序加速
+	EV_U0JS,
 	EV_FSXGL,
 	EV_FA_GL_TZ,
 //#if defined GD_AREA_CHAOZHOU || defined GD_AREA_SHANTOU  || defined GD_AREA_ECZD_2020   //潮州局要求合后电流两段处理		
@@ -366,25 +379,22 @@ enum
 #endif
 	
 	EV_BSTZ,					// 大电流闭锁分闸
-#ifdef DISP_SET_DLYX
-	EV_DLZZ,				// 电流重载
-//	EV_IAZZ,					// IA电流重载
-//	EV_IBZZ,					// IB电流重载
-//	EV_ICZZ,					// IC电流重载
+
+
+	EV_DLZZ,					// 电流重载
+	EV_IAZZ,					// IA电流重载
+	EV_IBZZ,					// IB电流重载
+	EV_ICZZ,					// IC电流重载
 	EV_DLGZ,					// 电流过载
-//	EV_IAGZ,					// IA电流过载
-//	EV_IBGZ,					// IB电流过载
-//	EV_ICGZ,					// IC电流过载
-	EV_DLYX,					// 电流越限
-//	EV_IAYX,					// IA电流越限
-//	EV_IBYX,					// IB电流越限
-//	EV_ICYX,					// IC电流越限
-#else
+	EV_IAGZ,					// IA电流过载
+	EV_IBGZ,					// IB电流过载
+	EV_ICGZ,					// IC电流过载
 	EV_DLYX,					// 电流越限
 	EV_IAYX,					// IA电流越限
 	EV_IBYX,					// IB电流越限
 	EV_ICYX,					// IC电流越限
-#endif
+
+
 	EV_I0YX,					// 零序电流越限	
 	EV_TZFAIL,					// 跳闸失败
 	EV_HZFAIL,					// 合闸失败
@@ -484,8 +494,28 @@ enum
 	EV_YL_FZ,		//联络Y闭锁
 #endif
 #ifdef GW_AREA_MAIN_2021
+
+
 	EV_PTDX_GJ,					// PT断线告警
 	EV_PTDX_TZ,					// PT断线跳闸
+
+	EV_ABC_JDTZ,				// 接地故障总
+	EV_A_JDTZ,					// A项接地
+	EV_B_JDTZ,					// B项接地
+	EV_C_JDTZ,					// C项接地p
+
+	EV_POWRE_FAILURE,			//故障停电
+	EV_PLAN_OUTAGE,				//计划停电
+	EV_RESTORE_POWER,			//恢复供电
+
+	EV_SW_I2_LOCK,				// 二次谐波闭锁
+
+	EV_CTDX_GJ,					// CT断线告警
+	EV_YKYB_TT,					// 压板状态
+	EV_SW_FAULT_LED,			// 故障指示灯
+	EV_SW_FAULT_ALL,			// 间隔事故总
+	EV_TQJC,					// 合环检测
+	EV_BSTQHZ,					// 合环闭锁
 #endif
 	EV_SW_NUM,					//
 };  

+ 2 - 2
dtu/dtu_main_t536/app/FA.c

@@ -11,7 +11,7 @@
 /*------------------------------- Í·Îļþ --------------------------------------
 */
 
-
+#ifndef GW_AREA_MAIN_2021
 #include  "head.h"
 
 const char *fa_s_status[]={"S_0",
@@ -6250,6 +6250,6 @@ bool get_power_on_dir(int sw)
 	return false;	
 }
 #endif
-
+#endif	/* GW_AREA_MAIN_2021 */
 // = ========================= ±¾Îļþ½áÊø =============================
 

+ 1 - 0
dtu/dtu_main_t536/app/FA.h

@@ -112,6 +112,7 @@ typedef struct TTQHZ_T
 	UVOT_U		uTQHz;		//同期合闸
 	TIMERELAY 	tTQTime; 	//同期合闸时间继电器
 	TIMERELAY 	tTQQDTime; 	//同期合闸时间继电器	
+	TIMERELAY	tBSTQTime;	//闭锁合环
 	bool		bBSTQLed;
 }TTQHZ_T;
 

+ 2 - 2
dtu/dtu_main_t536/app/FA_g.c

@@ -103,7 +103,7 @@ const struct gse_tbl g_goose_recv_tbl[GOOSE_RECV_TBL_NUMBER]=
 
 FA_GOOSE tFAg;
 bool bFAgInit=false;
-
+#ifndef GW_AREA_MAIN_2021
 void fa_g_init(void)
 {
 	int i;
@@ -2027,6 +2027,6 @@ void XBCalc_goc(int sw)
 	}
 	
 }
-
+#endif /* GW_AREA_MAIN_2021 */
 /***************************************endfile**********************************************************/
 

+ 8 - 1
dtu/dtu_main_t536/app/MmiData.c

@@ -379,6 +379,7 @@ static bool mmd_ChangeList(const TSETTABLE *pSetTable,int key,SET_VALUE *setbuf)
 ***************************************************************************/
 bool mmd_checkset_yb(u8 index)  //判断定值分类对应的压板是否有效
 {
+#ifndef GW_AREA_MAIN_2021
 	u8 yb,group_sub;
 	int sw=0;
 	//if(index==0)return true;
@@ -469,6 +470,7 @@ bool mmd_checkset_yb(u8 index)  //
 		return g_tRelay[sw].run_stu.fa_g_tt;
 #endif
 	}
+#endif
 	return true;
 }
 
@@ -2512,7 +2514,8 @@ int mmd_InitAzSet(int value)
 	int i;
 	m_AllSection=0;
 	g_set_disp.num=0;
-	num=mmd_GetshowAzSetNum(&tSwSetTable[0],SET_LABLE_TQ,SET_LABLE_FATT-1,set_show_group[value]);	
+	// TODO EWen
+	num=mmd_GetshowAzSetNum(&tSwSetTable[0],SET_LABLE_TQ,SET_LABLE_OVI-1/*SET_LABLE_FATT-1*/,set_show_group[value]);	
 	SetGroupIndex=value;	
 	screennum=mmi_GetScreenNum(63,1);	 // 取当前屏幕最大显示数目
 	bSetChange=true;
@@ -2607,6 +2610,9 @@ int mmd_SaveAzSet(int value)
 
 int mmd_ChangeYBSet(const TSETTABLE *pSet,int num,SET_VALUE *setbuf) //ext为不需显示的定值组
 {
+#ifdef GW_AREA_MAIN_2021
+	return 0;
+#else
 	int i;
 	int sw=0;
 	for(i=0;i<num;i++)
@@ -2627,6 +2633,7 @@ int mmd_ChangeYBSet(const TSETTABLE *pSet,int num,SET_VALUE *setbuf) //ext为
 		}		
 	}
 	return g_set_disp.num;
+#endif
 }
 
 

+ 210 - 3
dtu/dtu_main_t536/app/Sys.c

@@ -261,10 +261,14 @@ void SystemInit(void)
 #endif	
 	filelist_createfile();
 	//esam_init();
+  #ifndef GW_AREA_MAIN_2021
 	FA_Init();	
+#endif
 	lcdcomm_init(); 
 	ReadUqua();
+#ifndef GW_AREA_MAIN_2021
 	fa_g_init();
+#endif
 #ifdef METERING_ENERGY
 	DLInit();
 	get_eep_dd_data();
@@ -493,7 +497,9 @@ void AppPolling(void)
 	if((app_step%5)==2)_yk_polling();	
 	if((app_step%5)==3)bat_proc();
 	if((app_step%5)==4)system_check_proc();
+	#ifndef GW_AREA_MAIN_2021
 	if((app_step%10)==0)fa_g_app_time(0);
+	#endif
 
 }
 
@@ -582,6 +588,8 @@ void ResetHzLed(int rstsw)
 {
 	int i,sw;
 	rt_printf("复归动作灯\r\n");
+//TODO 
+#ifndef GW_AREA_MAIN_2021
 	for(sw=0;sw<g_sw_num;sw++)
 	{
 		TRELAY_T *pR=&g_tRelay[sw];
@@ -629,7 +637,7 @@ void ResetHzLed(int rstsw)
 	led_set_sw(sw,SW_LED_TZ, LED_OFF);  
 #endif
 	}
-		
+#endif	
 }
 
 
@@ -665,6 +673,139 @@ void SignalReset(int rstsw,bool blnk)
 	}
 
 	//收保护动作灯
+#ifdef GW_AREA_MAIN_2021
+	for(sw=0;sw<g_sw_num;sw++)
+	{
+		TRELAY_T *pR=&g_tRelay[sw];
+
+		bRst=true;
+		bBSRst = true;
+		bGLRst = true;
+		bJDRst = true;
+		bCHRst = true;
+		if(rstsw>0&&((sw+1)!=rstsw))continue;
+		for(i=0;i<=OC_GLBS;i++)
+		{
+			TOC_T *poc = &g_tRelay[sw].tOC[i];
+			if(poc->sta.bFlag.bGj||poc->sta.bFlag.bTz)
+			{
+				bRst=false;
+				if(i==OC_GL1||i==OC_GL2||i==OC_GL3||i==OC_DL||i==OC_GLJS||i==OC_GLBS)
+				{
+					bGLRst = false;
+				}
+				// if(i==OC_LX1||i==OC_LX2||i==OC_LX3||i==OC_GLJS)
+				if(i==OC_LX1||i==OC_LX2||i==OC_LX3||i==OC_LL||i==OC_LXJS)
+				{
+					bJDRst = false;
+				}
+			}
+			else
+			{
+				poc->sta.bFlag.bDzLed=false;
+				poc->sta.bFlag.bTzsbLed=false;
+			}
+
+		}
+		
+		if (pR->tU0TZ.uZOV.bFlag.bTz||pR->tXXTZ.uZOV.bFlag.bTz)	// 零序过压跳闸
+		{
+			bRst = false;
+			bJDRst = false;
+		}
+		else
+		{
+			pR->tU0TZ.bU0Led = false;
+		}
+
+			
+		if (pR->tLostVot.uLostVot.bFlag.bTz)	//失压跳闸
+		{
+			bRst = false;
+		}
+		else
+		{
+			pR->tLostVot.bLostVotLed = false;
+		}
+
+		// TODO 小电流重合闸标志合并 EWen
+		if (pR->tCHZ.sta.bFlag.bHz/* || pR->tXDLCHZ.sta.bFlag.bHz*/)	// 重合闸
+		{
+			bRst = false;
+			bCHRst = false;
+		}
+		else
+		{
+			pR->tCHZ.sta.bFlag.bCHZLed = false;
+		}
+		
+		if (pR->tSDHZ.bL_BSLed)				// 联络闭锁
+		{
+			bRst = false;
+			bBSRst = false;
+		}
+		
+		if (pR->tSDHZ.bS_BSLed)				// 分段闭锁
+		{
+			bRst = false;
+			bBSRst = false;
+		}
+
+		// 灭过流灯
+		if (bGLRst)
+		{
+			int  soeno;
+
+			led_set_sw(sw,SW_LED_GL, LED_OFF);  
+			led_set_sw(sw,SW_LED_XLGZ, LED_OFF); 
+
+			soeno = EV_SW_FAULT_LED + sw*EV_SW_NUM;
+			if(soe_check(soeno)==true)
+			{
+				soe_record_ev(soeno, 0, 0,0,0);
+			}
+		}
+		// 灭接地灯
+		if (bJDRst)
+		{
+			led_set_sw(sw,SW_LED_JD, LED_OFF);  	
+		}
+		// 灭重合灯
+		if (bCHRst)
+		{
+			led_set_sw(sw,SW_LED_CHZ, LED_OFF); 	
+		}	
+		// 灭闭锁灯
+		if (bBSRst)
+		{
+			//led_set_sw(sw,SW_LED_LOCK, LED_OFF);  //  闭锁灯程序自动处理,不需要人工干预
+		}
+
+		// 灭动作灯
+		if(bRst)
+		{
+			led_set_sw(sw,SW_LED_DZ, LED_OFF);  
+			pR->run_stu.dz = 0;
+			if(rstsw>0)soe_record_opt(EV_SIG_RESET, 0);
+		}
+		// 置位短路电流
+		// TODO 故障电流处理 EWen
+		// g_sw[sw].ac_in[SW_AC_IN_IAS] = 0;
+		// g_sw[sw].ac_in[SW_AC_IN_IBS] = 0;
+		// g_sw[sw].ac_in[SW_AC_IN_ICS] = 0;
+
+		// 复位多次分闸闭锁合闸标志
+		pR->FRES_FZ = 0;
+		pR->uFREFZ.bFlag.BS_HZ = 0;
+		pR->uFREFZ.bFlag.HW_JY = 0;
+		pR->uFREFZ.bFlag.JS_QD = 0;
+		pR->RUN_BSHZ = 0;
+		
+		//间歇性接地
+		//TODO 待对接 EWen
+		// jxjd_sw_reset(sw);
+	}
+#else
 	for(sw=0;sw<g_sw_num;sw++)
 	{
 		TRELAY_T *pR=&g_tRelay[sw];
@@ -946,6 +1087,7 @@ void SignalReset(int rstsw,bool blnk)
 
 		pR->run_stu.fgbs=0;
 	}
+#endif
 	// 灭公共动作灯
 	if(rstsw==0)g_run_stu.pubdz = 0;
 	
@@ -1011,6 +1153,9 @@ g_RmtCtrl_ErrCode[err_code];
 //遥控修改软压板判断
 bool ykEditYb(BYTE ykTypeNo)
 {
+#ifdef GW_AREA_MAIN_2021
+	return false;
+#else
 	switch(ykTypeNo-1)
 	{
 		case PUB_CHYB_HZ:
@@ -1069,6 +1214,7 @@ bool ykEditYb(BYTE ykTypeNo)
 		default:
 			return FALSE;
 	}
+#endif
 }
 
 static bool yk_pub_yb(int no)
@@ -1309,15 +1455,21 @@ int _RemoteCtrl(BYTE yktype,BYTE index,BYTE ykval,WORD wID)
 					return -26;
 				}
 			#endif
+			#ifndef GW_AREA_MAIN_2021
 				else if((fa_bs_fz( owner-1)||pR->bBSTZ) && ykval==YK_VAL_TZ && (no ==SW_DO_YKT+1||no ==SW_DO_FZ+1))
+			#else
+				else if(pR->bBSTZ && ykval==YK_VAL_TZ && (no ==SW_DO_YKT+1||no ==SW_DO_FZ+1))
+			#endif
 				{
 					//rt_printf("遮断闭锁,禁止分闸操作\r\n");
 					return -24;
 				}
+			#ifndef GW_AREA_MAIN_2021
 				else if(fa_bs_hz( owner-1)&& ykval==YK_VAL_HZ && (no ==SW_DO_YKH+1||no ==SW_DO_HZ+1))
 				{
 					return -25;
 				}
+			#endif
 				else if(pR->run_stu.wcn && pRunSet->tSwSet[owner-1].bTT_WCN && ykval==YK_VAL_HZ && (no ==SW_DO_YKH+1||no ==SW_DO_HZ+1))
 				{
 					return -27;
@@ -1680,7 +1832,7 @@ int _RemoteCtrl(BYTE yktype,BYTE index,BYTE ykval,WORD wID)
 				{
 					return -27;
 				}
-
+			#ifndef GW_AREA_MAIN_2021
                 if(no==PUB_BHYB_HZ+1)
                 {
                     setno=SET_BH_YB;
@@ -1711,6 +1863,7 @@ int _RemoteCtrl(BYTE yktype,BYTE index,BYTE ykval,WORD wID)
                     setno=SET_KZ_OUT_YB;
                     val=1;
                 }
+			#endif
 #if (defined BHFA_YB_YK || defined BHFAGS_YB_YK) && !defined BH_FA_INONE_SW
                 else if(no==PUB_BHYBTT_FZ+1)
                 {
@@ -1968,7 +2121,11 @@ int _RemoteCtrl(BYTE yktype,BYTE index,BYTE ykval,WORD wID)
 						return -26;
 					}
 				#endif
+				#ifndef GW_AREA_MAIN_2021
 					if((fa_bs_fz( owner-1)||pR->bBSTZ)&&ykval==YK_VAL_TZ)
+				#else
+					if(pR->bBSTZ&&ykval==YK_VAL_TZ)
+				#endif
 					{
 						//rt_printf("遮断闭锁,禁止分闸操作\r\n");
 						return -24;
@@ -2371,6 +2528,56 @@ int send_rmt_yk(u8 *buf)
 */
 bool check_fault(void)
 {
+#ifdef GW_AREA_MAIN_2021
+	int sw;
+	int  soeno;
+
+	for(sw=0;sw<g_sw_num;sw++)		//保护动作
+	{
+		int i;
+		bool bY1=false;
+		TRELAY_T *pR=&g_tRelay[sw];
+		soeno = EV_SW_FAULT_ALL + sw*EV_SW_NUM;
+		for(i=0;i<=OC_GLBS;i++)
+		{
+			bY1|=(pR->tOC[i].sta.bFlag.bTz||pR->tOC[i].sta.bFlag.bGj);
+
+			// TODO 过流关失压录波,跑台体 EWen
+			// if(i<=OC_LL)	
+			// 	g_ban_waverec.bban_losevolt_waverec |=bY1;
+		}
+
+		bY1|= (pR->tCHZ.sta.bFlag.bHz
+			// || pR->tXDLCHZ.sta.bFlag.bHz		// TODO EWen
+			|| pR->tU0TZ.uZOV.bFlag.bTz
+			|| pR->tXXTZ.uZOV.bFlag.bTz
+			|| pR->tLostVot.uLostVot.bFlag.bTz
+			// || pR->tJXJD.uJxjdFlag.bFlag.bTz	// TODO EWen
+			);
+
+		// 增加小电流接地
+		if (pRunSet->tSwSet[sw].bTT_xdlsg)
+		{
+			bY1|= xdl_is_dz(sw) ;
+		}
+		
+		if(bY1)		
+		{
+			if(soe_check(soeno)==false)
+			{
+				soe_record_ev(soeno, 1, 0,0,0);
+			}
+			return true;
+		}
+		else
+		{
+			if(soe_check(soeno)==true)
+			{
+				soe_record_ev(soeno, 0, 0,0,0);
+			}
+		}
+	}
+#else
 	int sw;
 	bool bY=false;
 	for(sw=0;sw<g_sw_num;sw++)		//保护动作
@@ -2414,7 +2621,7 @@ bool check_fault(void)
 		g_protect.bARSTFLT=true;
 		return true;
 	}
-	
+#endif
 	return false;	
 }
 

+ 218 - 23
dtu/dtu_main_t536/app/UnitsLib.c

@@ -38,6 +38,82 @@ void ProtectRelayInit(void)
 #ifdef	CUSTOMIZE_BZT //备自投
 		BztTimerInit(sw);
 #endif
+#ifdef GW_AREA_MAIN_2021
+		for(i=0;i<OC_NUMBER;i++)
+		{
+			TOC_T *poc=&pR->tOC[i];
+
+			InitTR(&poc->tQDTime,    pSet->tOcSet[i].dTgl,  PRO_RET_TIME); 
+
+			if(pRunSet->dT_ZZFG>tRunPara.dTEventRst)
+			{
+				InitTR(&poc->tTzEvRstTime, pRunSet->dT_ZZFG,  0);   // 故障遥信复归时间
+				InitTR(&poc->tGjEvRstTime, pRunSet->dT_ZZFG,  0);   // 故障遥信复归时间
+			}
+			else
+			{
+				InitTR(&poc->tTzEvRstTime, (tRunPara.dTEventRst-pRunSet->dT_ZZFG),  0);   // 故障遥信复归时间
+				InitTR(&poc->tGjEvRstTime, (tRunPara.dTEventRst-pRunSet->dT_ZZFG),  0);   // 故障遥信复归时间
+			}
+			InitTR(&poc->tFz25ms,    T_25ms,  0); 
+			InitTR(&poc->tTzsbTime,  T_1s*2,  0); 
+			InitTR(&poc->tTzhold3s,  0,  T_1s*3); 			
+			InitTR(&poc->tCYLTime,  T_1s,  0); 
+			if(i==OC_GLJS)
+			{
+				InitTR(&poc->tDefer25_100ms,    T_10ms*3,  0);  //30毫秒延时,加速出口的最短时间
+			}
+			else if(i==OC_LXJS)
+			{
+				InitTR(&poc->tDefer25_100ms,    T_100ms,  0);  //120毫秒延时,加速出口的最短时间
+			}
+			else if(i==OC_LYJS)
+			{
+				InitTR(&poc->tDefer25_100ms,    T_100ms,  0);  //120毫秒延时,加速出口的最短时间
+			}
+			else
+			{
+				InitTR(&poc->tDefer25_100ms,    T_25ms,  0); 
+			}
+			if(i==OC_GLBS)
+			{
+				InitTR(&poc->tQDTime, 0, T_200ms);   // 过流闭锁时间定值
+			}
+
+			if(i>=OC_OVLOAD)
+			{
+				InitTR(&poc->tQDTime,    pSet->tOcSet[i].dTgl,  WRN_RET_TIME);  // 过载及重载,返回时间为1秒
+			}			
+			
+		}
+
+		//重合闸
+		InitTR(&pR->tCHZ.tTCHCD15s0s,		pSet->dTCHOK,0   );           //充电15秒
+		InitTR(&pR->tCHZ.tTCHQDHW0ms50ms,	0,T_10ms*5);           //合闸位置下降沿展宽50ms
+		InitTR(&pR->tCHZ.tTCHQD0ms50ms,	0,T_10ms*5  );           //跳闸开出下降沿展宽50ms
+		InitTR(&pR->tCHZ.tTCHJD_0ms30ms,	0,T_10ms*3  );           //弹簧未储能下降沿展宽30ms
+		InitTR(&pR->tCHZ.tTCHJD_200ms0ms,	T_200ms,0   );           //重合开出宽度
+		InitTR(&pR->tCHZ.tTCHJD_ARDelay,	pSet->dTCH[0],0   );           //重合闸延时
+		InitTR(&pR->tCHZ.tTCHFAIL_TW,		pSet->dTCH[0]+T_1s, 0   );           //三相跳位延时: 重合失败返回时间
+		InitTR(&pR->tCHZ.tTCHBSDelay,		pSet->dTCHBS,0   );           //重合闭锁延时
+		InitTR(&pR->tCHZ.tTCHOKTime,		pSet->dTCHOK,0   );           //重合确认延时	
+		InitTR(&pR->tCHZ.tTCHJD_HJS,		0,			pSet->dTCHZK);		// zhy 20210823,后加速有效展宽,从1s改为3s,适应标准
+		InitTR(&pR->tTrip_BHT100MS, 0,			T_100ms);  		//跳闸脉冲最短时间1000ms // TODO 对接 EWen
+
+		// 小电流重合闸
+		// TODO EWen
+		// InitTR(&pR->tXDLCHZ.tTXDLCHCD15s0s,		T_1s*15,0   );           //充电15秒
+		// InitTR(&pR->tXDLCHZ.tTXDLCHQDHW0ms50ms,	0,T_10ms*5);           //合闸位置下降沿展宽50ms
+		// InitTR(&pR->tXDLCHZ.tTXDLCHQD0ms50ms,	0,T_10ms*5  );           //跳闸开出下降沿展宽50ms
+		// InitTR(&pR->tXDLCHZ.tTXDLCHJD_ARDelay,	T_1s*10,0   );           //小电流重合闸延时
+		// InitTR(&pR->tXDLCHZ.tTXDLCHFAIL_TW,		T_1s*11, 0   ); 
+		// InitTR(&pR->tXDLCHZ.tTXDLCHBSDelay,		0,0   );           		 //小电流重合闭锁延时
+		// InitTR(&pR->tXDLCHZ.tTXDLCHOKTime,		10*T_1s,0   );           //重合成功确认时间
+		// InitTR(&pR->tXDLCHZ.tTXDLCHJD_0ms30ms,	0,T_10ms*3  );           //弹簧未储能下降沿展宽30ms
+		// InitTR(&pR->tXDLCHZ.tTXDLCHJD_200ms0ms,	T_200ms,0   );           //小电流重合开出宽度
+		// InitTR(&pR->tXDLCHZ.tTXDLCHJD_HJS,		0,			T_1s*3);
+		// InitTR(&pR->tXDLCHZ.tTXDLCHJLY_HJS,		pSet->dT_xdl_hjs, 0);	 //小电流检零压跳闸
+#else
 		for(i=0;i<BHOC_NUMBER;i++)
 		{
 			TOC_T *poc=&pR->tOC[i];
@@ -168,7 +244,7 @@ void ProtectRelayInit(void)
 		InitTR(&pR->tCHZ.tTCHJD_HJS, 0, T_300ms ); // 2020-07-23 分位持续检测时间改为1s,按照广东标准2020 手合开放检测时间,将3s时间改为0.3s,即分闸持续1S以上,手合0.3秒内可启动后加速
 		InitTR(&pR->tCHZ.tTCHJBSTime,		0,pSet->dT_chz_ok );           //重合闭锁时间
 		InitTR(&pR->tCHZ.tTCHJBSHw,			T_100ms,	0);           // 开关合位100ms确认
-
+#endif
 	#ifdef  GD_AREA_YUNFU
 		InitTR(&pR->tCHZ.tTCH_UO_BS,		T_100ms, 0   );           //;零序电压重合闭锁延时
 	#endif
@@ -183,6 +259,7 @@ void ProtectRelayInit(void)
 		InitTR(&pR->tTrip_BHT40MS, 0,			T_40ms);  		//跳闸脉冲最短时间40ms ,以前为100ms,在做多次重合闸是,若时间整定为100ms左右,会有异常
 		
 		 //配网功能定值
+#ifndef GW_AREA_MAIN_2021
 		InitTR(&pR->tSDHZ.tOnXSTime, pSet->dT_X,0);
 		InitTR(&pR->tSDHZ.tOnYSTime, pSet->dT_Y,0);
 		InitTR(&pR->tSDHZ.tOnZSTime, T_100ms*35,0);  //  3.5秒
@@ -316,16 +393,17 @@ void ProtectRelayInit(void)
 		InitTR(&pR->tSDHZ.tHz0ms2s,pRunSet->dT_HZSB,0);
 		InitTR(&pR->tSDHZ.tTz0ms2s,pRunSet->dT_TZSB,0);	
 		InitTR(&pR->tSDHZ.tTSDHzHJS, 0, pSet->dT_Y); //上电合闸加速判断 
-		
-		InitTR(&pR->tU0TZ.tZOVTime,  		pSet->dT_OverU0, T_20ms); 
-		InitTR(&pR->tOVER_U0TZ.tZOVTime,  	pSet->dBHTOverU0, T_20ms); 
+#endif		
+		// TODO pSet对接,但国网目前没有用到FA逻辑,晚点再合 EWen
+		// InitTR(&pR->tU0TZ.tZOVTime,  		pSet->dT_OverU0, T_20ms); 
+		// InitTR(&pR->tOVER_U0TZ.tZOVTime,  	pSet->dBHTOverU0, T_20ms); 
 
-		//InitTR(&pR->tGdy.tQDTime,  pSet->dT_gy, T_20ms); 	
+		// //InitTR(&pR->tGdy.tQDTime,  pSet->dT_gy, T_20ms); 	
 
-		InitTR(&pR->tLostVot.tCYY25ms0ms,  T_25ms, 0);    	
-		InitTR(&pR->tLostVot.tLostVotTime,  pSet->dT_Z, T_20ms);    	
-		InitTR(&pR->tLostVot.tLostVLockTime,0,pSet->dT_fa_bsTz);
-		InitTR(&pR->tTQHz.tTQTime,pSet->dT_tq,0); //同期
+		// InitTR(&pR->tLostVot.tCYY25ms0ms,  T_25ms, 0);    	
+		// InitTR(&pR->tLostVot.tLostVotTime,  pSet->dT_Z, T_20ms);    	
+		// InitTR(&pR->tLostVot.tLostVLockTime,0,pSet->dT_fa_bsTz);
+		// InitTR(&pR->tTQHz.tTQTime,pSet->dT_tq,0); //同期
 #ifdef ADD_TQ_FH_TIME_SET
 		InitTR(&pR->tTQHz.tTQQDTime,0, pRunSet->dT_tq_fh);
 #else
@@ -333,7 +411,7 @@ void ProtectRelayInit(void)
 #endif
 
 		//解列
-
+#ifndef GW_AREA_MAIN_2021
 		InitTR(&pR->tDYJL.tDdyTime,  pSet->dT_jl_ddy, T_20ms);   //CorrectTR(&pR->tDYJL.tDdyTime);  CorrectTR(&pR->tDYJL.tDdyTime);   	
 		InitTR(&pR->tDYJL.tGdyTime,  pSet->dT_jl_gdy, T_20ms);   //CorrectTR(&pR->tDYJL.tGdyTime);  CorrectTR(&pR->tDYJL.tGdyTime);     	
 		InitTR(&pR->tDYJL.tHighTime,  pSet->dT_jl_ggdy, T_20ms); //CorrectTR(&pR->tDYJL.tHighTime); CorrectTR(&pR->tDYJL.tHighTime);
@@ -347,7 +425,7 @@ void ProtectRelayInit(void)
 		InitTR(&pR->tDYJL.thcbs2_0ms_100ms,  0, T_100ms); 
 		InitTR(&pR->tPLJL.thcbs1_0ms_100ms,  0, T_100ms);  
 		InitTR(&pR->tPLJL.thcbs2_0ms_100ms,  0, T_100ms);  		
-		
+#endif		
 		//手合加速
 //#if defined GD_AREA_MAIN_2020 || defined GD_AREA_ECZD_2020  
         InitTR(&pR->tSWST.tTRunST_20s1s, T_1s, T_300ms ); // 2020-07-23 分位持续检测时间改为1s,按照广东标准2020 手合开放检测时间,将3s时间改为0.3s,即分闸持续1S以上,手合0.3秒内可启动后加速
@@ -376,7 +454,7 @@ void ProtectRelayInit(void)
 		InitTR(&pR->tSWST.tBatOver, T_1s*3,	WRN_RET_TIME);
 		InitTR(&pR->tMb_yuk_time,  T_1s*5, 0); 
 		InitTR(&pR->tTZZFG_5S0ms,  pRunSet->dT_ZZFG, 0);     	//无故障延时5s
-		InitTR(&pR->thzbs.tBSHZTime, 	pSet->dT_hzbs,	T_20ms);  		// 分闸次数过多,闭锁合闸
+		// InitTR(&pR->thzbs.tBSHZTime, 	pSet->dT_hzbs,	T_20ms);  		// 分闸次数过多,闭锁合闸 // TODO EWen
 		InitTR(&pR->thzbs.tTw100ms100ms,T_100ms,T_100ms);	
 	#ifndef GW_AREA_MAIN_2021
 		for(i=0;i<8;i++)
@@ -456,9 +534,9 @@ void ProtectRelayInit(void)
 	#endif
 
 		// PT断线
-		#ifdef GW_AREA_MAIN_2021
+	#ifdef GW_AREA_MAIN_2021
 		InitTR(&pR->tPTDX.tQDTime,  pRunSet->tPTSet.dTVol,  0);
-		#endif
+	#endif
 	}
 
 	for(i=0;i<VOL_NUMBER;i++)
@@ -511,6 +589,53 @@ void ProtectRelayInit1(void)
 #ifdef	CUSTOMIZE_BZT //备自投
 		BztTimerChange(sw);
 #endif
+#ifdef GW_AREA_MAIN_2021
+
+		for(i=0;i<OC_NUMBER;i++)
+		{
+			TOC_T *poc=&pR->tOC[i];
+
+			InitTR(&poc->tQDTime,    pSet->tOcSet[i].dTgl,  PRO_RET_TIME); 
+		
+			
+			if(pRunSet->dT_ZZFG>tRunPara.dTEventRst)
+			{
+				InitTR_Time(&poc->tTzEvRstTime, pRunSet->dT_ZZFG,  0);   // 故障遥信复归时间
+				InitTR_Time(&poc->tGjEvRstTime, pRunSet->dT_ZZFG,  0);   // 故障遥信复归时间
+			}
+			else
+			{
+				InitTR_Time(&poc->tTzEvRstTime, (tRunPara.dTEventRst-pRunSet->dT_ZZFG),  0);   // 故障遥信复归时间
+				InitTR_Time(&poc->tGjEvRstTime, (tRunPara.dTEventRst-pRunSet->dT_ZZFG),  0);   // 故障遥信复归时间
+			}
+			if(i==OC_GLBS)
+			{
+				InitTR_Time(&poc->tQDTime, 0, T_200ms);   // 过流闭锁时间定值
+			}
+			if(i>=OC_OVLOAD)
+			{
+				InitTR(&poc->tQDTime,    pSet->tOcSet[i].dTgl,  WRN_RET_TIME);  // 过载及重载,返回时间为1秒
+			}			
+
+		}
+
+		//重合闸
+		InitTR_Time(&pR->tCHZ.tTCHCD15s0s,		pSet->dTCHOK,0   );            // 重合充电
+		InitTR_Time(&pR->tCHZ.tTCHJD_ARDelay,	pSet->dTCH[0],0   );           // 重合闸延时
+		InitTR_Time(&pR->tCHZ.tTCHFAIL_TW,		pSet->dTCH[0]+T_1s, 0   );     // 三相跳位延时: 重合失败返回时间
+		InitTR_Time(&pR->tCHZ.tTCHBSDelay,		pSet->dTCHBS,0   );            // 重合闭锁延时
+		InitTR_Time(&pR->tCHZ.tTCHOKTime,		pSet->dTCHOK,0   );            // 重合确认延时
+		InitTR_Time(&pR->tCHZ.tTCHJD_HJS,	0,	pSet->dTCHZK);				   // zhy20210918,后加速有效展宽,从1s改为3s,适应标准
+		InitTR_Time(&pR->tSWST.tTRunST_20s1s, 0, pSet->dTCHZK );               // 手合加速判断 zwg,考虑到方便测试,将200ms改为1s	
+
+		//小电流重合闸
+		//TODO 小电流重合定值对接 EWen
+		// InitTR_Time(&pR->tXDLCHZ.tTXDLCHJD_ARDelay,	T_1s*10,0   );
+		// InitTR_Time(&pR->tXDLCHZ.tTXDLCHFAIL_TW,		T_1s*11, 0   );
+		// InitTR_Time(&pR->tXDLCHZ.tTXDLCHBSDelay,		0,0   );           	   // 小电流重合闭锁延时
+		// InitTR_Time(&pR->tXDLCHZ.tTXDLCHOKTime,		T_1s*10,0   );             // 小电流重合成功确认时间
+
+#else
 		for(i=0;i<BHOC_NUMBER;i++)
 		{
 			TOC_T *poc=&pR->tOC[i];
@@ -621,6 +746,7 @@ void ProtectRelayInit1(void)
 		InitTR_Time(&pR->tCHZ.tTCHBSDelay,		pSet->dT_chz_bs,0   );           //重合闭锁延时
 		InitTR_Time(&pR->tCHZ.tTCHOKTime,			pSet->dT_chz_ok,0   );           //重合闭锁延时	
 		 InitTR_Time(&pR->tCHZ.tTCHJBSTime,		 0,pSet->dT_chz_ok );			//重合闭锁时间
+#endif
 	#ifdef	GD_AREA_YUNFU
 		InitTR(&pR->tCHZ.tTCH_UO_BS,		 T_100ms, 0   );			//;零序电压重合闭锁延时
 	#endif
@@ -629,6 +755,8 @@ void ProtectRelayInit1(void)
 	#endif
 		
 		 //配网功能定值
+		 // TODO 国网暂时没有应用FA 此部分定值后面再理  EWen
+#ifndef GW_AREA_MAIN_2021
 		InitTR_Time(&pR->tSDHZ.tOnXSTime, pSet->dT_X,0);
 		InitTR_Time(&pR->tSDHZ.tOnYSTime, pSet->dT_Y,0);
 		InitTR_Time(&pR->tSDHZ.tOnXLTime, pSet->dT_XL,0);
@@ -763,12 +891,13 @@ void ProtectRelayInit1(void)
 		InitTR_Time(&pR->tSDHZ.tTz0ms2s,pRunSet->dT_TZSB,0);	
 		
 		InitTR_Time(&pR->tSDHZ.tTSDHzHJS, 0, pSet->dT_Y); //上电合闸加速判断 
-		
-		InitTR_Time(&pR->tU0TZ.tZOVTime,  pSet->dT_OverU0, T_20ms); 
-		InitTR_Time(&pR->tOVER_U0TZ.tZOVTime,  	pSet->dBHTOverU0, T_20ms); 
+#endif	
+		// TODO pSet对接,但国网目前没有用到FA逻辑,晚点再合 EWen
+		// InitTR_Time(&pR->tU0TZ.tZOVTime,  pSet->dT_OverU0, T_20ms); 
+		// InitTR_Time(&pR->tOVER_U0TZ.tZOVTime,  	pSet->dBHTOverU0, T_20ms); 
 
 		//解列
-
+	#ifndef GW_AREA_MAIN_2021
 		InitTR_Time(&pR->tDYJL.tDdyTime,  pSet->dT_jl_ddy, T_20ms);    	
 		InitTR_Time(&pR->tDYJL.tGdyTime,  pSet->dT_jl_gdy, T_20ms);    	
 		InitTR_Time(&pR->tDYJL.tHighTime,  pSet->dT_jl_ggdy, T_20ms);    	
@@ -777,11 +906,12 @@ void ProtectRelayInit1(void)
 		InitTR_Time(&pR->tPLJL.tDhzTime,  pSet->dT_jl_dhz, T_40ms);    	
 		InitTR_Time(&pR->tPLJL.tHighTime,  pSet->dT_jl_ghz, T_40ms);    	
 		InitTR_Time(&pR->tPLJL.tLowTime,  pSet->dT_jl_lowhz, T_40ms);    
-
-		InitTR_Time(&pR->tLostVot.tLostVotTime,  pSet->dT_Z, T_20ms);    	
-		InitTR_Time(&pR->tLostVot.tLostVLockTime,0,pSet->dT_fa_bsTz);
-		InitTR_Time(&pR->tTQHz.tTQTime,pSet->dT_tq,0); //同期
-
+	#endif
+		// TODO pSet对接,晚点再合 EWen
+		// InitTR_Time(&pR->tLostVot.tLostVotTime,  pSet->dT_Z, T_20ms);    	
+		// InitTR_Time(&pR->tLostVot.tLostVLockTime,0,pSet->dT_fa_bsTz);
+		// InitTR_Time(&pR->tTQHz.tTQTime,pSet->dT_tq,0); //同期
+		InitTR(&pR->tTQHz.tBSTQTime,T_25ms, PRO_RET_TIME);
 
 
 		InitTR_Time(&pR->tSWST.tTWCNGJ1s,  pRunSet->dWCN_T,   WRN_RET_TIME);	
@@ -1071,7 +1201,72 @@ bool PowerDirectionalRelay(long Ur,long Ui,DWORD U, long Ir,long Ii,DWORD I, DWO
 }
 
 
+/**************************************************************************
+函数名称:SynAngle
+函数版本:1.00 
+作者:    赵海洋
+创建日期:2020.05.20     
+函数功能说明:角差判别
 
+输入参数:
+输出参数:
+返回值:  TRUE---角差满足,
+          FALSE--角差不满足
+**************************************************************************/
+ bool SynAngle(qs16 lANG1,qs16 lANG2,qs16 dANGSET)//角差判别
+{
+    bool bStatus;
+    qs16 lTemp;
+    
+    lTemp = lANG1 - lANG2;
+	if(lTemp<0)
+	{
+		lTemp=-lTemp;
+	}
+    
+    if(dANGSET > lTemp)
+    {
+        bStatus = 1;
+    }
+    else
+    {
+        bStatus = 0;
+    }
+    return( bStatus );
+}
+/**************************************************************************
+函数名称:SynFrequency
+函数版本:1.00 
+作者:    赵海洋
+创建日期:2020.05.20     
+函数功能说明:频差判别
+
+输入参数:
+输出参数:
+返回值:  TRUE---频差满足,
+          FALSE--频差不满足
+**************************************************************************/
+ bool SynFrequency(qs16 lFEQ1,qs16 lFEQ2,qs16 dFEQSET)//频差判别
+{
+    bool bStatus;
+    qs16 lTemp;
+    
+    lTemp = lFEQ1 - lFEQ2;
+	if(lTemp<0)
+	{
+		lTemp=-lTemp;
+	}
+    
+    if(dFEQSET > lTemp)
+    {
+        bStatus = 1;
+    }
+    else
+    {
+        bStatus = 0;
+    }
+    return( bStatus );
+}
 
 
 

+ 2 - 0
dtu/dtu_main_t536/app/UnitsLib.h

@@ -54,5 +54,7 @@ void ProtectRelayInit1(void);                           //
  bool SynJudge(long lANG1,long lANG2,DWORD dANGSET);//ͬÆÚÅбð
 long CalcAngSub(long Real1, long Imag1, long Real2, long Imag2);
 bool PowerDirectionalRelay(long Ur,long Ui,DWORD U, long Ir,long Ii,DWORD I, DWORD Umk,DWORD Imk,long sina1,long cosa1,long sina2,long cosa2);
+bool SynAngle(qs16 lANG1,qs16 lANG2,qs16 dANGSET);//½Ç²îÅбð
+bool SynFrequency(qs16 lFEQ1,qs16 lFEQ2,qs16 dFEQSET);//Ƶ²îÅбð
 #endif
 /*******************************end***************************************/

+ 2 - 0
dtu/dtu_main_t536/app/app.c

@@ -71,7 +71,9 @@ INIT_FUNC g_app_exit_func[]=
 	pit_exit,
 	adc_exit,
 	equ_exit,
+#ifndef GW_AREA_MAIN_2021
 	FA_exit,
+#endif
 	led_exit,
 	mainimage_exit,
 	auth_exit, // sunxi 20191204 added

+ 8 - 3
dtu/dtu_main_t536/app/defineSys.h

@@ -12,6 +12,10 @@
 #ifndef _DEFINE_SYS_H
 #define _DEFINE_SYS_H
 
+#define GW_AREA_MAIN_2021	// 调试用,推送屏蔽
+#define CPU_FUXI
+#define MACHINE_NULL
+
 #ifdef ___defineSys____//!!!此宏定义不开启,以下宏不直接开启,只用于注释显示
 //内核类型定义
 #define KERNEL_TYPE_OLD_DEVICE		0x4B540000	// 对应老设备的内核
@@ -1026,7 +1030,8 @@
 	#define NET4_IP5            						//4Mac5IP
 	#define DEV_GPS_ATGM332D
 	#define DISP_SET_YYJB
-	#define XDL_ZT
+	#define YX_RESET_TIME
+	#define DISP_SET_LX3 
 #else
 	#ifndef AREA_MAIN
 		#error 未定义地区宏 export _AREA=-D******* 
@@ -1052,7 +1057,7 @@
 	#define QDS_TT
 #endif
 
-#if (VER_NUM>=28101)
+#if (VER_NUM>=28101 && VER_NUM<50101)
 	#if (VER_NUM<29101)
 		#define ADD_FD_GL_FX_BH_FUN          //分段过流段内分相保护功能
 		#undef  JX_YB_SEND_SOE				 //不发送带检修压板SOE
@@ -1118,7 +1123,7 @@
 		#define FA_PL_PJ			//FA频率判据:频率在49~50.8Hz的频率才认为有效,可参与判得电
 		#define PICK_3U_MIXMIN		//电压判据:取三相电压最小值or取三相电压最大值
 	#endif
-	#if(VER_NUM > 31115)
+	#if(VER_NUM > 31115 && VER_NUM < 50101) //TODO EWen 临时加判断VER_NUM < 50101,待 oc.c里的逻辑适配好后开放增加
 		#define FUNC_SEND_FAULT_CURRENT 	//遥测上送故障电流
 	#endif
 #endif

+ 2 - 1
dtu/dtu_main_t536/app/fsx.c

@@ -10,6 +10,7 @@
 * 修改原因:  
 * 更新日志2:
 **************************************************************************/
+#ifndef GW_AREA_MAIN_2021
 #define __FSX_C
 
 #include "head.h"
@@ -367,6 +368,6 @@ void FSXCalc(int sw,FSXCS *pFsxcs, DWORD dIfz, bool bOCStart, DWORD dTStep)
     	}   
     	return;
 }
-
+#endif
 // = ========================= 本文件结束 =============================
 

+ 2 - 1
dtu/dtu_main_t536/app/led.c

@@ -592,7 +592,7 @@ void _led_update_status(void)
 			led_set_sw(i,SW_LED_DZ, LED_OFF);
 		}
 		#endif
-
+#ifndef GW_AREA_MAIN_2021
 		if(BH_GOOSE_EN(i))  //智能FA逻辑,联络开关自动查找
 		{
 			if(g_tRelay[i].tgoc.tllcd.sta.bFlag.bCD) //本开关为联络开关
@@ -890,6 +890,7 @@ void _led_update_status(void)
 				strcpy(m_Mode_chr,"----");
 			}
 		}
+#endif
 #ifdef GD_AREA_ZHONGSHAN_2020
 		if(soe_check(EV_GOOSE_QC_OK+i*EV_SW_NUM)==true		//切除OK
 			||soe_check(EV_GOOSE_GL_OK+i*EV_SW_NUM)==true	//隔离OK

+ 2 - 0
dtu/dtu_main_t536/app/main.c

@@ -233,7 +233,9 @@ int app_main (void *unused)
 		Maintain_Applay();
 		net_debug_app(); 
 		IEC104_Ether_App();
+	#ifndef GW_AREA_MAIN_2021
 		FA_status_write();
+	#endif
 		sec_app();
 		clk_app();
 		AppPolling();		// 设备状态处理,如点灯等

Разлика између датотеке није приказан због своје велике величине
+ 1541 - 3
dtu/dtu_main_t536/app/oc.c


+ 89 - 1
dtu/dtu_main_t536/app/oc.h

@@ -21,6 +21,94 @@
 /*------------------------------ 类型结构 -------------------------------------
 */
 //电流保护标志
+#ifdef GW_AREA_MAIN_2021
+
+typedef union UOCFLAG
+{
+	DWORD  wfFlag;
+	struct
+	{
+		DWORD    bQD:1;     	// 启动      
+		DWORD    bGj:1;   	// 告警     
+		DWORD    bTz:1;       	// 跳闸    
+		DWORD    bXBbs:1;	// 谐波闭锁
+		DWORD    bBSCH:1;	// 闭锁重合
+		DWORD    bCYL:1;		// 曾有流
+		DWORD    bTripBak:1; // 跳闸动作备份    
+		DWORD    bTzhold:1;
+		DWORD    bJSBC:1;       // 加速保持
+		DWORD    bDzLed:1; 	// 动作灯
+		DWORD    bTzsbLed:1; // 跳闸失败灯
+		DWORD    bGjEvent:1;
+		DWORD    bTzEvent:1;
+		DWORD    bQDWave:1; // 幅值启动时,启动录波标志
+		DWORD    bGZBS:1; // 大电流闭锁重合
+	}bFlag;
+}UOCFLAG;
+
+/*------------------------------ 变量声明 -------------------------------------
+*/
+
+enum
+{
+	OC_GL1=0, 	// 过流1段
+	OC_GL2,		// 过流2段
+	OC_GL3,		// 过流3段
+	OC_DL,		// 短路故障
+	OC_LX1,		// 零序1段
+	OC_LX2,		// 零序2段
+	OC_LX3,		// 零序3段
+	OC_LL,		// 零流告警
+	OC_GLJS,	// 过流加速段
+	OC_LXJS,	// 零序加速段
+	OC_LYJS,	// 零压加速段
+	OC_GLBS,	// 过流闭锁段
+	OC_OVLOAD,	// 重载
+	OC_DLGZ,	// 过载
+	OC_DLYX,	// 越限
+	OC_NUMBER
+};
+
+typedef struct  TOC_T
+{
+	UOCFLAG        sta;			// 动作标志字
+	TIMERELAY	tFz25ms;  		// 幅值启动25ms
+	TIMERELAY 	tQDTime; 		// 时间继电器
+	TIMERELAY 	tDefer25_100ms; // 启动25ms,防干扰时间继电器,用于速断和零序加速,防止误出口
+	TIMERELAY 	tTzsbTime; 		// 跳闸失败
+	TIMERELAY 	tTzhold3s; 		// 跳闸信号保持时间
+	TIMERELAY	tGjEvRstTime;  	// 故障遥信保持时间
+	TIMERELAY	tTzEvRstTime;  	// 告警遥信保持时间
+	TIMERELAY 	tCYLTime; 		// 电流越下线 判断曾有流时间继电器
+
+}TOC_T;
+
+#if 1 //#if(EN_REC_MORE_WAVES==1)
+extern u16 g_record_GL_waves[];
+extern u16 g_record_LX_waves[];
+#endif
+
+/*------------------------------ 函数声明 -------------------------------------
+*/
+
+void Pro_OC(u32  dStep,int oc,int soe_no);
+void Pro_OC_SG(u32  dStep,int oc,int soe_no);
+void Pro_LX(u32  dStep,int oc,int soe_no);
+void Pro_LX_SG(u32  dStep,int oc,int soe_no);
+void Pro_Accheck(u32  dStep,int oc,int soe_no);
+void Pro_Accheck_SG(u32  dStep,int oc,int soe_no);
+void Pro_BSTZ(u32  dStep,int oc,int soe_no);
+void Pro_over_i(u32  dStep,int oc,int soe_no);
+void Pro_TFD(u32  dStep, int sw);	// 停复电巡检
+
+void Record_KGBW(u32  dStep, int sw);	// 开关变位启动录波
+void MultFz_BSHZ(u32  dStep, int sw);	// 多次分闸闭锁合闸巡检
+// void Inspection_KHDX(u32  dStep, int sw);	// 控回断线巡检
+void XBCalc(int sw);
+void Pro_CT_DX(u32  dStep, int sw);								// CT断线巡检
+int gl_soe_set_clr(u8 set_clr, int sw, u16 soe_no, u32 i_set,bool bfault);
+#else
+
 typedef union UOCFLAG
 {
 	DWORD  wfFlag;
@@ -148,7 +236,7 @@ bool CalDir_C(int sw,bool bQD,bool bInv);
 extern void xb_bs_soe(int sw,u32  dStep);
 
 #endif //_OC_H
-
+#endif //GW_AREA_MAIN_2021
 /*------------------------------ 文件结束 -------------------------------------
 */
 

+ 220 - 14
dtu/dtu_main_t536/app/protect.c

@@ -28,6 +28,8 @@ u16	wIQdCnt[SWITCH_NUM_MAX][SW_I_NUM];			// 突
 
 static DWORD dTAfterFault=0;
 
+u32 g_protect_restore;							// 手动遥控复归保护整组
+
 /*------------------------------ 函数声明 -------------------------------------
 */
 static int _protect_amp_qd(u32  dStep);
@@ -98,14 +100,14 @@ int _protect_sg_all(void)
 	{		
 		if(soe_check(FAULT_ALL)==false)
 		{
-			//soe_record_ev(FAULT_ALL, 1, 0,0,0);
+			soe_record_ev(FAULT_ALL, 1, 0,0,0);
 		}		
 	}
 	else
 	{
 		if(soe_check(FAULT_ALL)==true)
 		{
-			//soe_record_ev(FAULT_ALL, 0, 0,0,0);
+			soe_record_ev(FAULT_ALL, 0, 0,0,0);
 		}
 	}
 	
@@ -367,7 +369,8 @@ int protect_polling(void)
 	{
 		Pro_vol(dTDelta);		// 电压告警逻辑
 	#ifdef	XDL_ZT //小电流接地
-		xdl_protect(dTDelta);	// 小电流接地保护
+		// TODO 待适配  EWen
+		// xdl_protect(dTDelta);	// 小电流接地保护
 	#endif
 		PT_Check(dTDelta);	
 	#ifndef GW_AREA_MAIN_2021
@@ -385,14 +388,22 @@ int protect_polling(void)
 
 		TRELAY_T *pR=&g_tRelay[g_protect.sw];	
 		_protect_rmt_sw(dTDelta);		// 遥控器,其手分或手合标志在其他保护逻辑中有使用,故放在最开始
-		XBCalc_goc(g_protect.sw);               // goose 谐波计算:处理标志:谐波闭锁动作		
+	#ifndef GW_AREA_MAIN_2021
+		XBCalc_goc(g_protect.sw);               // goose 谐波计算:处理标志:谐波闭锁动作		 //TODO 后续用到再开放
+	#endif
 		// 电流轮巡类
 		#ifdef DISP_SET_DLYX
 		Pro_over_i(g_protect.sw,dTDelta,BH_OVI_ZZ,EV_DLZZ);	// 电流重载
 		Pro_over_i(g_protect.sw,dTDelta,BH_OVI_GZ,EV_DLGZ);		// 电流过载
 		#endif
-		Pro_over_i(g_protect.sw,dTDelta,BH_OVI,EV_DLYX);		// 电流越限
+		#ifndef GW_AREA_MAIN_2021
+		Pro_over_i(g_protect.sw,dTDelta,BH_OVI,EV_DLYX);		// 电流越限    	
 		Pro_over_i0(g_protect.sw,dTDelta,BH_OVI0,EV_I0YX);		// 零序电流越限
+		#endif
+
+		Pro_over_i(dTDelta,OC_OVLOAD,EV_DLZZ);	// 电流重载
+		Pro_over_i(dTDelta,OC_DLGZ,EV_DLGZ);		// 电流过载
+		Pro_over_i(dTDelta,OC_DLYX,EV_DLYX);		// 电流越限
 
 	#ifdef FUN_JDXX
 		jdxx_pro(g_protect.sw,dTDelta);
@@ -404,16 +415,24 @@ int protect_polling(void)
 		Pro_TQHz(g_protect.sw,dTDelta);				// 合环
 		Pro_TQBS(g_protect.sw,dTDelta);				//	手动闭锁
 		Pro_3U0(g_protect.sw,dTDelta);
+	#ifndef GW_AREA_MAIN_2021
 		vol_DYJL(g_protect.sw,dTDelta);	
 		vol_PLJL(g_protect.sw,dTDelta);	
 		fag_bh(g_protect.sw,dTDelta);
 		Pro_hzbs(g_protect.sw,dTDelta);
+	#endif
 		Pro_PTDxTz(g_protect.sw,dTDelta);
 		// 其他轮巡类
+	#ifdef GW_AREA_MAIN_2021
+		AutoReclose(dTDelta);			// 重合闸保护逻辑
+	#else
 		AutoReclose(g_protect.sw,dTDelta);			// 重合闸保护逻辑	
+	#endif
 
 		// 分段、联络就地馈线自动化逻辑,完成独立存在,不需要进入故障处理过程
+	#ifndef GW_AREA_MAIN_2021
 		FA_Run(dTDelta);		
+	#endif
 #ifdef	CUSTOMIZE_BZT //备自投
 		bzt_process(g_protect.sw,dTDelta);
 #endif	
@@ -473,8 +492,37 @@ int protect_polling(void)
 		yc_refresh_en(g_protect.sw);
 	#endif
 
+	#ifdef GW_AREA_MAIN_2021
+		Pro_OC_SG(dTDelta,OC_GL1,EV_GL1TZ);
+		Pro_OC_SG(dTDelta,OC_GL2,EV_GL2TZ);
+		Pro_OC_SG(dTDelta,OC_GL3,EV_GL3TZ);
+		Pro_OC_SG(dTDelta,OC_DL,EV_DL_TZ);
+		Pro_LX_SG(dTDelta,OC_LX1,EV_LX1TZ);
+		Pro_LX_SG(dTDelta,OC_LX2,EV_LX2TZ);
+		Pro_LX_SG(dTDelta,OC_LX3,EV_LX3TZ);
+		Pro_LX_SG(dTDelta,OC_LL,EV_LLTZ);
+		Pro_Accheck_SG(dTDelta,OC_GLJS,EV_GLJS);
+		Pro_Accheck_SG(dTDelta,OC_LXJS,EV_LXJS);
+		Pro_Accheck_SG(dTDelta,OC_LYJS,EV_U0JS);
+	#endif
+
 		_protect_alarm();						// 异常告警类逻辑
 		_protect_sfsh_clr();					// 清除手分、手合标志
+	#ifdef GW_AREA_MAIN_2021
+		// Inspection_KHDX(dTDelta, g_protect.sw); // 控回断线检测//TODO 待增加 EWen
+
+		// 多次分闸闭锁合闸巡检
+		MultFz_BSHZ(dTDelta, g_protect.sw);	
+
+		// 停复电巡检类	(优先级较低)
+		Pro_TFD(dTDelta, g_protect.sw);	
+		
+		// 突变录波
+		// mutation_wave_record(RECORD_TYPE_LLTB, g_protect.sw);//TODO 待增加 EWen
+		// mutation_wave_record(RECORD_TYPE_LYTB, g_protect.sw);//TODO 待增加 EWen
+		// 开关变位巡检类	(优先级最低)
+		Record_KGBW(dTDelta, g_protect.sw);	
+	#endif
 	}
 	
 	// 保护巡检完毕,检查事故总
@@ -751,6 +799,58 @@ static int _protect_amp_qd(u32  dStep)
 
 	bQD = 0;
 	//过流类启动
+#ifdef GW_AREA_MAIN_2021
+	for(i=OC_GL1;i<=OC_LYJS;i++)
+	{
+
+		TOC_T *pSW = &g_tRelay[sw].tOC[i];
+		OC_SET *pSet = &pRunSet->tSwSet[sw].tOcSet[i];
+		bool bY1;
+ 		// 幅值启动 		
+
+		if (BH_ALL_EN(sw) && (pSet->bTT_Tz || pSet->bTT_Gj))
+		{
+			if(i==OC_LX1||i==OC_LX2||i==OC_LX3||i==OC_LL||i==OC_LXJS)
+			{
+				bY1 = OverRelay(g_ui[UI_SW_INDEX(sw,SW_AC_I0)].m2[0], pSet->dIgl, pSet->dIgl, false); 
+			}
+			else if(i==OC_LYJS)		// 零压启动幅值加速
+			{
+				if (pSet->dIgl < pRunSet->dOverU0)
+				{
+					// pSet->dIgl = pRunSet->dOverU0;
+					if(pRunSet->tSwSet[sw].bTT_Power_v2)
+					{
+						bY1 = OverRelay(g_ui[PUB_AC_U02].m2[0],pRunSet->dOverU0, pRunSet->dOverU0, false);
+					}
+					else
+					{
+						bY1 = OverRelay(g_ui[PUB_AC_U01].m2[0],pRunSet->dOverU0, pRunSet->dOverU0, false);
+					}
+				}
+				else
+				{
+					if(pRunSet->tSwSet[sw].bTT_Power_v2)
+					{
+						bY1 = OverRelay(g_ui[PUB_AC_U02].m2[0],pSet->dIgl, pSet->dIgl, false);
+					}
+					else
+					{
+						bY1 = OverRelay(g_ui[PUB_AC_U01].m2[0],pSet->dIgl, pSet->dIgl, false);
+					}
+				}
+			}
+			else
+			{
+				bY1 = OverRelay(g_sw[sw].m2_max, pSet->dIgl, pSet->dIgl, false); 
+			}
+		}
+		//幅值启动25ms延时
+		RunTR(&pSW->tFz25ms, bY1,  dStep);
+		bQD|=bY1;
+		bFZQD|=pSW->tFz25ms.boolTrip;		
+	}
+#else
 	for(i=BH_GL1;i<=FA_DLBS;i++)  
 	{
 		TOC_T *pSW = &g_tRelay[sw].tOC[i];
@@ -825,6 +925,7 @@ static int _protect_amp_qd(u32  dStep)
 #endif
 		
 	}	
+#endif
 	if (bQD)
 	{
 		if (!pR->fzqd)
@@ -875,9 +976,11 @@ static int _protect_amp_qd(u32  dStep)
 								|| pR->tXXTZ.uZOV.bFlag.bQD			// 选线跳闸
 								|| pR->tLostVot.uLostVot.bFlag.bQD	// 失压分闸
 								|| pR->tOVER_U0TZ.uZOV.bFlag.bTz   //过零序电压跳闸
+							#ifndef GW_AREA_MAIN_2021
 								|| pR->tOC[FA_GL].sta.bFlag.bQD
 								|| pR->tOC[FA_GL_II].sta.bFlag.bQD
-								|| pR->tOC[FA_LX].sta.bFlag.bQD		//零序电流启动		
+								|| pR->tOC[FA_LX].sta.bFlag.bQD		//零序电流启动	
+							#endif	
 							#ifdef FUN_JDXX
 								|| pR->tJD.sta.bFlag.bTz			// 接地选线跳
 							#endif
@@ -959,6 +1062,58 @@ static int _protect_gzcl_init(void)
 	}   	
    
 	// 初始化标志字与时间继电器
+#ifdef GW_AREA_MAIN_2021
+	for(oc=0;oc<OC_GLBS;oc++)
+	{
+
+		TOC_T *poc = &g_tRelay[sw].tOC[oc];
+		OC_SET *pSet = &pRunSet->tSwSet[sw].tOcSet[oc];
+
+		poc->sta.wfFlag=0;
+
+		InitTR(&poc->tQDTime,    pSet->dTgl,  PRO_RET_TIME); 
+
+		
+ 		if(oc==OC_LXJS) // 零序加速
+ 		{
+	   		InitTR(&poc->tDefer25_100ms, T_100ms, 0);
+
+		}
+		else if (oc==OC_LYJS) // 零压加速
+		{
+			InitTR(&poc->tDefer25_100ms, T_100ms, 0);
+		}
+		else if (oc==OC_GLJS)
+		{
+	   		InitTR(&poc->tDefer25_100ms, T_10ms*3, 0);
+
+		}
+		else
+		{
+	   		InitTR(&poc->tDefer25_100ms, T_25ms, 0);
+
+		}
+
+	    // 突变量启动时预置定时器,因为突变量启动会死等35个采样点的延时,但实际置的延时只是20ms附近,没有过于精准
+		if(pR->uBHQD.bFlag.bTBQD)
+		{
+			PreSetTime(&poc->tQDTime, T_20ms);  
+			PreSetTime(&poc->tDefer25_100ms, T_20ms);  
+		}
+
+		// if(pRunSet->dT_ZZFG>tRunPara.dTEventRst)
+		{
+			InitTR_Time(&pR->tTZZFG_5S0ms,  pRunSet->dT_ZZFG, 0);     	//无故障延时5s		整组复归
+			InitTR_Time(&pR->tTTFDFG_5S0ms,  pRunSet->dT_ZZFG, 0);
+		}
+		// else
+		// {
+		// 	InitTR_Time(&pR->tTZZFG_5S0ms,  tRunPara.dTEventRst, 0);     	//无故障延时5s		故障遥信复归
+		// 	InitTR_Time(&pR->tTTFDFG_5S0ms,  tRunPara.dTEventRst, 0);
+		// }
+	
+	}
+#else
 	for(oc=0;oc<=FA_DLBS;oc++)
 	{
 
@@ -1000,7 +1155,7 @@ static int _protect_gzcl_init(void)
 		InitTR_Time(&pR->tTZZFG_5S0ms,  pRunSet->dT_ZZFG, 0);     	//无故障延时5s
 	#endif
 	}
-
+#endif
 	// 取得故障启动时刻,以便故障处理流程中,第一次计算的时间片是从故障启动时刻开始
 	pR->t_rcd_gz = pR->t_rcd_qd;
 
@@ -1087,6 +1242,21 @@ static int _protect_gzcl_process(void)
 	// 保护逻辑
 	if(pR->uBHQD.bFlag.bQD25ms)
 	{    
+#ifdef GW_AREA_MAIN_2021
+		XBCalc(g_protect.sw);  		// 谐波计算:处理标志:谐波闭锁动作
+		Pro_BSTZ(dTGZDelta,OC_GLBS,EV_BSTZ);
+		Pro_OC(dTGZDelta,OC_GL1,EV_GL1TZ);
+		Pro_OC(dTGZDelta,OC_GL2,EV_GL2TZ);
+		Pro_OC(dTGZDelta,OC_GL3,EV_GL3TZ);
+		Pro_OC(dTGZDelta,OC_DL,EV_DL_TZ);
+		Pro_LX(dTGZDelta,OC_LX1,EV_LX1TZ);
+		Pro_LX(dTGZDelta,OC_LX2,EV_LX2TZ);
+		Pro_LX(dTGZDelta,OC_LX3,EV_LX3TZ);
+		Pro_LX(dTGZDelta,OC_LL,EV_LLTZ);
+		Pro_Accheck(dTGZDelta,OC_GLJS,EV_GLJS);
+		Pro_Accheck(dTGZDelta,OC_LXJS,EV_LXJS);
+		Pro_Accheck(dTGZDelta,OC_LYJS,EV_U0JS);
+#else 
 	#ifdef BH_BSDL_ENBLE
 		Pro_BSTZ(sw,dTGZDelta,BH_DLBS,EV_BSTZ);
 	#endif
@@ -1105,6 +1275,7 @@ static int _protect_gzcl_process(void)
 		fag_oc_gl(sw,dTGZDelta);
 		fag_oc_lx(sw,dTGZDelta);
 		fsxGL(sw,dTGZDelta);   					//反时限过流
+#endif
 	}
 
 	// 保护跳合闸处理
@@ -1150,8 +1321,11 @@ static int _protect_zzfg_check(u32 dStep)
 	TRELAY_T *pR=&g_tRelay[sw];	
 	bool bY1=false;
 	int i;
-
+#ifdef GW_AREA_MAIN_2021
+	for(i=0;i<=OC_GLBS;i++)
+#else
 	for(i=0;i<=FA_DLBS;i++)
+#endif
 	{
 		bY1|=(pR->tOC[i].sta.bFlag.bQD||pR->tOC[i].sta.bFlag.bXBbs|| pR->tOC[i].sta.bFlag.bTz||pR->tOC[i].sta.bFlag.bGj);
 	}
@@ -1227,7 +1401,19 @@ static int _protect_zzfg(void)
 	TRELAY_T *pR=&g_tRelay[sw];	
 	int oc;
 
-
+#ifdef GW_AREA_MAIN_2021
+	for(oc=0;oc<=OC_GLBS;oc++)
+	{
+		TOC_T 	*poc=&pR->tOC[oc];// 过流保护相关
+		
+		poc->sta.wfFlag=0;
+	   	ResetTR(&poc->tQDTime);					
+	   	ResetTR(&poc->tDefer25_100ms);					
+	   	ResetTR(&poc->tTzsbTime);					
+	   	// ResetTR(&poc->tGjEvRstTime);					
+	   	// ResetTR(&poc->tTzEvRstTime);	
+	}
+#else
 	for(oc=0;oc<=FA_DLBS;oc++)
 	{
 		TOC_T 	*poc=&pR->tOC[oc];// 过流保护相关
@@ -1241,10 +1427,14 @@ static int _protect_zzfg(void)
 	   	ResetTR(&poc->tTzEvRstTime);
 	#endif
 	}
+#endif
+
 	 ResetTR(&pR->tgoc.tglFz25ms);	
 	 ResetTR(&pR->tgoc.tlxFz25ms);		
 	// 重合闸标志复归,定时器复归
-
+	pR->tCHZ.sta.wfFlag=0;
+	pR->tCHZ.wAR_ActTimes=0;	
+   	ResetTR(&pR->tCHZ.tTCHJD_HJS);
 
 	if(soe_check(EV_GOOSE_QC_QD+sw*EV_SW_NUM)==true)   // 故障隔离启动
 	{				
@@ -1299,7 +1489,7 @@ static int _protect_zzfg(void)
 
 	// 合环标志复归,定时器复归
    	pR->tTQHz.uTQHz.wfFlag = 0;
-
+	ResetTR(&pR->tTQHz.tBSTQTime);
 	// 跳闸失败标志复归,定时器复归
    	ResetTR(&pR->tTripfail_2s);
 	pR->uBHDZ.bFlag.bTZSB = 0;
@@ -1370,11 +1560,17 @@ static int _protect_sw_tz(u32 dStep)
 	}
 
 	// 保护动作跳闸情况检测
+#ifdef GW_AREA_MAIN_2021
+	for(i=OC_GL1;i<OC_GLBS;i++)
+	{
+		bTz|=pR->tOC[i].sta.bFlag.bTz;
+	}
+#else
 	for(i=BH_GL1;i<=FA_LX;i++)
 	{
 		bTz|=pR->tOC[i].sta.bFlag.bTz;
 	}
-
+#endif
 #ifdef GD_AREA_ZHONGSHAN_2020
 	for(i=FAG_GL1;i<=FAG_LX;i++)
 	{
@@ -1421,6 +1617,7 @@ static int _protect_sw_tz(u32 dStep)
 #endif
 	
 	// 跳闸脉冲最短保持40ms
+	// DTUv4此处为100ms need to confirm
 	RunTR(&pR->tTrip_BHT40MS, pR->uBHDZ.bFlag.bBHTrip, dStep);
 	pR->uBHDZ.bFlag.bBHT = pR->tTrip_BHT40MS.boolTrip || pR->uBHDZ.bFlag.bBHTrip;
 #ifdef SELF_OPEN_RELEASE
@@ -2019,9 +2216,13 @@ static int _protect_rmt_sw(u32 dStep)
 	RunTR(&pR->tMb_yuk_time, g_run_stu.mb_yuk, dStep);//预置按键取消
 	if(pR->tMb_yuk_time.boolTrip)
 		g_run_stu.mb_yuk=0;
-
+	#ifndef GW_AREA_MAIN_2021
 	if (((((g_rmt_op.cmd == CMD_HZ)||pRunstu->sw_sh||g_run_stu.mb_hz) && (!g_run_stu.yf) && Ycn)
 		 || g_tPDA.bPDAHz || g_tPDA.bMsgHz)&&(!fa_bs_hz(sw))) //有手合信号
+	#else
+	if (((((g_rmt_op.cmd == CMD_HZ)||pRunstu->sw_sh||g_run_stu.mb_hz) && (!g_run_stu.yf) && Ycn)
+		|| g_tPDA.bPDAHz || g_tPDA.bMsgHz))
+	#endif
 	{
 		#ifdef TQ_SOFT_YB
 		if(pRunSet->tSwSet[sw].bTT_TQ && pRunstu->bTQ && pRunstu->safe_auto && !pRunstu->tytq &&pRunSet->bTT_TQ_YB )
@@ -2181,11 +2382,16 @@ static bool _protect_check_fault(int sw)
 	int i;
 	TRELAY_T *pR=&g_tRelay[sw];
 	bool bY1=false;
+#ifdef GW_AREA_MAIN_2021
+	for(i=0;i<=OC_GLBS;i++)
+	{
+		bY1|=(pR->tOC[i].sta.bFlag.bTz||pR->tOC[i].sta.bFlag.bGj);
+	}
+#else
 	for(i=BH_GL1;i<=FA_LX;i++)
 	{
 		bY1|=(pR->tOC[i].sta.bFlag.bTz||pR->tOC[i].sta.bFlag.bGj);
 	}
-#ifndef GW_AREA_MAIN_2021
 	for(i=0;i<8;i++)
 	{
 		bY1|=pR->tFdl[i].sta.bFlag.bTz;

+ 146 - 5
dtu/dtu_main_t536/app/protect.h

@@ -15,6 +15,26 @@
 
 /*------------------------------- 宏定义 --------------------------------------
 */
+
+#ifdef GW_AREA_MAIN_2021
+
+// 保护总投退
+#define 	BH_ALL_EN(sw)		(pRunSet->tSwSet[sw].bTT_BH&&pRunSet->bTT_PUB_BH&&g_tRelay[sw].run_stu.bhtt)
+
+//重合闸压板
+#define     CHZ_ALL_EN(sw)  	(0)
+#define 	FUN_ALL_EN(sw)		(0)	
+//同期压板
+#define 	TQ_ALL_EN(sw)   	(0)
+
+#define 	KZ_OUT_ALL_EN(sw) 	(1)
+
+#define 	FA_ALL_EN(sw)		(0)
+
+#define 	BH_GOOSE_EN(sw)		(0)
+
+#else
+
 //控制出口总压板
 #ifdef JZS_FUNCTION
 	#define JZS_ALL_EN(sw)     (g_tRelay[sw].run_stu.jzs_tt && pRunSet->bTT_SOFT_JZS_YB)
@@ -149,6 +169,7 @@
 	#endif
 #endif
 
+#endif
 //定值时间判断
 #define 	BH_WAVETIME_EN(dSetTime)	((dSetTime>=(T_10ms*10))?1:0)
 
@@ -271,9 +292,99 @@ typedef struct URMTSW
 #endif
 }URMTSW;  
 
+// 过流故障信号量
+// 变量都是在一个WORD长度里变量按位(Bit)单元来分的
+typedef union UOCSG
+{
+    struct
+    {   
+		WORD    OC_GJ:1;    	
+		WORD    OC_TZ:1;    	
+		WORD    OC_GJ_EVENT:1;    	
+		WORD    OC_TZ_EVENT:1;    	
+    }bFlag;
+}UOCSG;
+
+// 零序故障信号量
+// 变量都是在一个WORD长度里变量按位(Bit)单元来分的
+typedef union ULXSG
+{
+    struct
+    {   
+		WORD    LX_GJ:1;    	
+		WORD    LX_TZ:1;    	
+		WORD    LX_GJ_EVENT:1;    	
+		WORD    LX_TZ_EVENT:1;    	
+    }bFlag;
+}ULXSG;
+
+// 加速故障信号量
+// 变量都是在一个WORD长度里变量按位(Bit)单元来分的
+typedef union UACSG
+{
+    struct
+    {   
+		WORD    AC_GJ:1;    	
+		WORD    AC_TZ:1;    	
+		WORD    AC_GJ_EVENT:1;    	
+		WORD    AC_TZ_EVENT:1;    	
+    }bFlag;
+}UACSG;
+
+// 停复电动作标志
+// 变量都是在一个WORD长度里变量按位(Bit)单元来分的
+typedef union UTFDDZ
+{
+    struct
+    {   
+		WORD    WL_CDWC:1;    	// 无流停复电充电标志
+		WORD    YL_CDWC:1;    	// 有流停复电充电标志
+		WORD    GZ_PowerCut:1;	// 故障停电标志
+		WORD    JH_PowerCut:1;  // 计划停电标志
+		WORD	RE_Power:1;		// 恢复供电标志
+		WORD	JY_Fault:1;		// 故障记忆标志
+		WORD	IS_Run:1;		// 正常运行标志
+    }bFlag;
+}UTFDDZ;
 
+// 多次分闸闭锁合闸
+// 变量都是在一个WORD长度里变量按位(Bit)单元来分的
+typedef union UFREFZ
+{
+    struct
+    {   
+		WORD    BS_HZ:1;    	// 闭锁合闸
+		WORD    JC_QD:1;    	// 检测启动
+		WORD    HW_JY:1;    	// 合位记忆
+		WORD    JS_QD:1;    	// 计时启动
+    }bFlag;
+}UFREFZ;
 
+// 控回断线信号量
+// 变量都是在一个WORD长度里变量按位(Bit)单元来分的
+typedef union UKHDX
+{
+    struct
+    {   
+		WORD    JCHZ_QD:1;    	
+		WORD    JCFZ_QD:1;    	
+		WORD    HZ_DX:1;    	
+		WORD    FZ_DX:1;    	
+		WORD    HZ_DX_EVENT:1;    	
+		WORD    FZ_DX_EVENT:1;    	
+    }bFlag;
+}UKHDX;
 
+// CT断线检测
+// 变量都是在一个WORD长度里变量按位(Bit)单元来分的
+typedef union UCTDX
+{
+    struct
+    {     	
+		WORD    bQD:1;    		// 
+		WORD    bGj:1;  		// 
+    }bFlag;
+}UCTDX;
 
 typedef struct TRELAY_T  // 开关逻辑结构体定义
 {
@@ -296,8 +407,41 @@ typedef struct TRELAY_T  // 
 	bool  bARSTFLT; //开关自动复归事故总202004
 #ifndef GW_AREA_MAIN_2021
 	TFDL_T tFdl[8];
-#endif	
 	TOC_T 		tOC[BHOC_NUMBER];		// 过流保护相关
+#else
+	TOC_T 		tOC[OC_NUMBER];		// 过流保护相关
+
+	UOCSG		uOCSG[OC_NUMBER];	// 过流故障信号巡检
+	ULXSG		uLXSG[OC_NUMBER];	// 零序故障信号巡检
+	UACSG		uACSG[OC_NUMBER];	// 加速故障信号巡检
+
+	TVOL_T		tPTDX;				// PT断线
+
+	UTFDDZ		uTFDDZ;	// 停复电动作标志
+	TIMERELAY  	tFDU_Charge_30s;  		// 复电逻辑检压充电计时器	add by zhy
+	TIMERELAY  	tFDI_Charge_30s;  		// 复电逻辑检流充电计时器	add by zhy
+	TIMERELAY  	tCharge_30s;  			// 停电逻辑充电计时器		add by zhy
+	TIMERELAY  	tGZ_Powercut_30s;  		// 故障停电信号计时器	    add by zhy
+	TIMERELAY  	tJH_Powercut_30s;  		// 计划停电信号计时器	    add by zhy
+	TIMERELAY  	tFDU_Powerrestore_30s;  // 检压复电信号计时器	    add by zhy
+	TIMERELAY  	tFDI_Powerrestore_30s;  // 检流复电信号计时器	    add by zhy
+	TIMERELAY  	tTTFDFG_5S0ms; 			// 停复电信号复归计时器	    add by zhy
+
+	UFREFZ		uFREFZ;					// 多次分闸闭锁合闸
+	DWORD FRES_FZ;						// 多次分闸闭锁合闸分闸次数
+	u32 RUN_BSHZ;						// 多次分闸闭锁合闸闭锁状态
+	TIMERELAY  	tFRES_HZBS; 					// 多次分闸闭锁合闸计数器	    add by zhy
+
+	UKHDX		uKHDX;							// 控回断线检测
+	TIMERELAY  	tKHDX_HZ_5s; 					// 合闸控回断线检测计数器	    add by zhy
+	TIMERELAY  	tKHDX_FZ_5s; 					// 分闸控回断线检测计数器	    add by zhy
+	TIMERELAY  	tKHFG_HZ_5s; 					// 合闸控回断线复归计数器	    add by zhy
+	TIMERELAY  	tKHFG_FZ_5s; 					// 分闸控回断线复归计数器	    add by zhy
+
+	UCTDX		uCTDX;	// CT断线告警检测
+	TIMERELAY  	tCT_DX_5s; 					// CT断线延时计数器
+	TIMERELAY  	tTrip_BHT100MS;  		// 跳闸脉冲计时器,跳闸开出最短时间100MS
+#endif	
 	TCH_T 		tCHZ;				// 重合闸
 
 	UGLFSX	uGLFSX;										//过流反时限标志字
@@ -307,9 +451,6 @@ typedef struct TRELAY_T  // 
 	TBZT_T		tBzt;
 #endif	
 
-#ifdef GW_AREA_MAIN_2021
-	TVOL_T		tPTDX;				// PT断线
-#endif
 	TLOSTVOT_T	tLostVot;   		//失压标志
 	TU0_T		tU0TZ;			//合后零压跳闸
 	TU0_T		tXXTZ;			//选线跳闸
@@ -359,7 +500,7 @@ extern TRELAY_T g_tRelay[];
 /*------------------------------ 变量声明 -------------------------------------
 */
 extern struct protect_stu g_protect;					// 保护整组处理过程	
-
+extern u32 g_protect_restore;							// 手动遥控复归保护整组
 /*------------------------------ 函数声明 -------------------------------------
 */
 int protect_init(void);

+ 619 - 2
dtu/dtu_main_t536/app/reclose.c

@@ -16,7 +16,624 @@
 **************************************************************************/
 #define __RECLOSE_C
 #include  "head.h"
-    
+
+#ifdef GW_AREA_MAIN_2021
+/**********************************************************************
+定义全局变量
+***********************************************************************/
+
+static bool g_print_charge_cdn = false;
+
+/*------------------------------ 函数声明 -------------------------------------
+*/
+static void AR_DataSet(void);
+static void AR_Recharge(DWORD  dStep);
+static void AR_Disable(void);
+static void AR_Start(DWORD  dStep);
+static void AR_Logic(DWORD  dStep);
+static void AR_Reset(DWORD  dStep);
+static int AR_Check(DWORD mode);			// 检同期		
+
+/**************************************************************************
+函数名称: AutoReclose
+函数版本:1.00 
+作者:    硬件部
+创建日期:2010.4.28    
+
+函数功能说明:重合闸功能块
+
+输入参数:
+输出参数:
+返回值: 
+***************************************************************************/
+void AutoReclose(DWORD  dStep)
+{
+	AR_DataSet();               	// 重合闸数据准备
+	AR_Recharge(dStep);             // 重合闸充电
+	AR_Disable();                   // 重合闸闭锁
+	AR_Start(dStep);                // 重合闸启动
+	AR_Logic(dStep);                // 重合闸逻辑
+	AR_Reset(dStep);                // 重合闸复归
+	return;
+}
+
+/**************************************************************************
+函数名称:AR_DataSet
+函数版本:1.00 
+函数版本:1.00 
+作者:    硬件部
+创建日期:2010.4.28    
+
+函数功能说明:重合闸数据准备
+
+输入参数:无
+
+输出参数:
+
+返回值: 无
+***************************************************************************/
+static void AR_DataSet(void)
+{
+	u16 wNo;
+	u32 sw = g_protect.sw;	
+	TRELAY_T *pR=&g_tRelay[sw];
+	TCH_T *pSW =&pR->tCHZ;
+	TSETSW *pSet = &pRunSet->tSwSet[sw];
+
+	wNo=0;
+	if(pSW->wAR_ActTimes < MAX_AR_TIMES) // 根据重合次数,设置时间继电器
+	{
+		wNo = pSW->wAR_ActTimes;
+	}
+	InitTR_Time(&pSW->tTCHJD_ARDelay,	pSet->dTCH[wNo],		0   );         //重合闸延时
+	InitTR_Time(&pSW->tTCHFAIL_TW,		pSet->dTCH[wNo]+T_1s,	0   );         //重合闸延时
+}
+
+/**************************************************************************
+函数名称: AR_Disable
+函数版本:1.00 
+作者:    保护产品部 
+创建日期:2007.10.11    
+
+函数功能说明:重合闸闭锁判别,刷新"闭锁重合闸"标
+
+输入参数:
+输出参数:
+返回值: 
+***************************************************************************/
+static void AR_Disable(void)
+{
+	u32 sw = g_protect.sw;	
+	TRELAY_T *pR=&g_tRelay[sw];
+	TCH_T *pSW =& pR->tCHZ;
+
+	pSW->sta.bFlag.bBSCH = pR->tOC[OC_GL1].sta.bFlag.bBSCH		// 过流1闭锁重合闸
+						|| pR->tOC[OC_GL2].sta.bFlag.bBSCH 		// 过流2闭锁重合闸
+						|| pR->tOC[OC_GL3].sta.bFlag.bBSCH 		// 过流3闭锁重合闸
+						|| pR->tOC[OC_LX1].sta.bFlag.bBSCH 		// 零序1闭锁重合闸
+					    || pR->tOC[OC_LX2].sta.bFlag.bBSCH 		// 零序2闭锁重合闸
+						|| pR->tOC[OC_LX3].sta.bFlag.bBSCH 		// 零序3闭锁重合闸
+						|| pR->tOC[OC_GLJS].sta.bFlag.bBSCH 	// 过流加速闭锁重合闸
+						|| pR->tOC[OC_LXJS].sta.bFlag.bBSCH 	// 零序加速闭锁重合闸
+						|| pR->tOC[OC_LYJS].sta.bFlag.bBSCH 	// 零压加速闭锁重合闸
+			            || pR->tLostVot.uLostVot.bFlag.bTz		// 失压跳闸闭锁重合
+			            || pR->tXXTZ.uZOV.bFlag.bTz
+			            || pR->tU0TZ.uZOV.bFlag.bTz ;			// 零压分闸闭锁重合
+}	
+
+
+/**************************************************************************
+函数名称: AR_Recharge
+函数版本:1.00 
+函数版本:1.00 
+作者:    硬件部
+创建日期:2010.4.28    
+
+函数功能说明:重合闸充电,刷新"重合闸充电完成"标
+
+输入参数:
+输出参数:
+返回值: 
+***************************************************************************/
+static void AR_Recharge(DWORD  dStep)
+{                                                                      
+	u32 sw = g_protect.sw;	
+	TRELAY_T *pR=&g_tRelay[sw];
+	TCH_T *pSW =&pR->tCHZ;
+	TSETSW *pSet = &pRunSet->tSwSet[sw];	
+	bool bHCD1,bHCD2,bHCD3,bHCD4;
+
+	// 放电条件
+	RunTR(&pSW->tTCHFAIL_TW, pR->tSWST.uSWST.bFlag.bTZWZ, dStep);    	// 三相跳位延时
+	bHCD1 = pSW->tTCHFAIL_TW.boolTrip;					// 放电标志1:三相跳位时间到
+
+	bHCD2 =  (pR->tSWST.uSWST.bFlag.bTZWZ || pR->uBHDZ.bFlag.bBHT) //此处保护跳标志,是有100ms保持的信号   
+							&& (!pSW->sta.bFlag.bCDWC);               // 放电标志2:充电未完成,跳位或保护动作
+	
+	bHCD3 = pR->uRmtSW.bHandTz							// 手动跳闸
+							|| pR->uRmtSW.bYTExecute                   	// 遥控跳闸
+							|| pR->uBHDZ.bFlag.bTZSB					// 跳闸失败
+							|| pR->tSWST.uSWST.bFlag.bTWYL				// 跳位有流
+							|| pR->tSWST.uSWST.bFlag.bWCN               // 弹簧未储能告警							
+							|| pSW->sta.bFlag.bBSCH					// 重合闸闭锁条件
+							|| pSW->sta.bFlag.bCHFD;                  // 重合闸动作放电
+	
+	pSW->sta.bFlag.bFDBZ = (!BH_ALL_EN(sw))							// 总保护未投入
+							|| (!pSet->bTT_CHZ)                         // 软压板: 重合闸未投入
+							|| (!pR->run_stu.chz)							// 重合闸硬压板未投入
+							|| bHCD1 
+							|| bHCD2
+							|| bHCD3;
+						
+	// 充电条件
+	bHCD4 = !pSW->sta.bFlag.bFDBZ                             // 重合放电标
+			&& (((!pR->uBHQD.bFlag.bZQD) && pR->tSWST.uSWST.bFlag.bHZWZ )    // 非保护启动 && 合闸位置
+			|| pSW->sta.bFlag.bCDWC);                          // 充电完成自保持
+
+	RunTR(&pSW->tTCHCD15s0s, bHCD4, dStep);                // 充电15秒
+	pSW->sta.bFlag.bCDWC = pSW->tTCHCD15s0s.boolTrip;
+
+	if(pSW->sta.bFlag.bCDWC)
+	{
+	#if 1
+		if(soe_check(EV_ARCD+sw*EV_SW_NUM)==false)
+		{
+			soe_record_ev(EV_ARCD+sw*EV_SW_NUM, 1, 0,0,0);
+		}
+	#else
+		//TODO 充电标志显示 EWen
+		if((g_disp_flag.chz_cd & (1<<sw)) == 0)
+		{
+			g_disp_flag.chz_cd |= 1<<sw;
+			rt_printf_time("开关%02d充电完成!\r\n",sw+1);
+
+			if(soe_check(EV_SW_AR_CHARGE_DONE+sw*EV_SW_NUM)==false)
+			{
+				soe_record_ev(EV_SW_AR_CHARGE_DONE+sw*EV_SW_NUM, 1, 0,0,0);
+			}
+		}
+	#endif
+	}
+	else
+	{
+	#if 1
+		if(soe_check(EV_ARCD+sw*EV_SW_NUM)==false)
+		{
+			soe_record_ev(EV_ARCD+sw*EV_SW_NUM, 0, 0,0,0);
+		}
+	#else
+		if((g_disp_flag.chz_cd & (1<<sw)))
+		{
+			g_disp_flag.chz_cd &= ~(1<<sw);
+			rt_printf_time("开关%02d放电完成!\r\n",sw+1);
+
+			if(soe_check(EV_SW_AR_CHARGE_DONE+sw*EV_SW_NUM)==true)
+			{
+				soe_record_ev(EV_SW_AR_CHARGE_DONE+sw*EV_SW_NUM, 0, 0,0,0);
+			}
+		}
+	#endif
+	}
+
+	{
+		//打印充电条件
+		if(g_print_charge_cdn)
+		{
+			if(sw == g_sw_num - 1) g_print_charge_cdn = false;
+
+			rt_printf("开关%d充电启动条件:bHCD1=%d,bHCD2=%d,bHCD3=%d,bHCD4=%d\r\n",sw+1,bHCD1,bHCD2,bHCD3,bHCD4);
+			if(bHCD2) 
+			{
+				rt_printf("sw%d bTZWZ=%d,bBHT=%d\r\n",sw+1,pR->tSWST.uSWST.bFlag.bTZWZ,pR->uBHDZ.bFlag.bBHT);
+			}
+			if(bHCD3) 
+			{
+				rt_printf("sw%d bHandTz=%d,bYTExecute=%d,bTZSB=%d,bTWYL=%d,bWCN=%d,bBSCH=%d,bCHFD=%d",\
+								sw+1,pR->uRmtSW.bHandTz,pR->uRmtSW.bYTExecute,pR->uBHDZ.bFlag.bTZSB,\
+								pR->tSWST.uSWST.bFlag.bTWYL,pR->tSWST.uSWST.bFlag.bWCN,pSW->sta.bFlag.bBSCH,pSW->sta.bFlag.bCHFD);
+			}
+			
+			rt_printf("sw%d bFDBZ=%d,bZQD=%d,bHZWZ=%d\r\n",sw+1,pSW->sta.bFlag.bFDBZ,pR->uBHQD.bFlag.bZQD,pR->tSWST.uSWST.bFlag.bHZWZ);
+
+			if(pSW->sta.bFlag.bFDBZ) rt_printf("sw%d BH_ALL_EN=%d,bTT_CHZ=%d,stu.chz=%d\r\n",sw+1,BH_ALL_EN(sw),pSet->bTT_CHZ,pR->run_stu.chz);
+
+		}
+	}
+}
+
+/**************************************************************************
+函数名称: AR_Start
+函数版本:1.00 
+函数版本:1.00 
+作者:    硬件部
+创建日期:2010.4.28    
+
+函数功能说明:重合闸启动,刷新"三相偷跳启动重合闸"和"三跳启动重合闸"标
+
+输入参数:
+输出参数:
+返回值:
+***************************************************************************/
+static void AR_Start(DWORD  dStep)
+{
+	bool bCHQD_CHQD;    // 三相启动重合闸
+	u32 sw = g_protect.sw;	
+	TRELAY_T *pR=&g_tRelay[sw];
+	TCH_T *pSW =&pR->tCHZ;
+	TSETSW *pSet = &pRunSet->tSwSet[sw];
+	bool bCQD1,bCQD2,bCQD3,bCQD4,bCQD5,bCQD6;
+
+    // 不对应启动
+    // 开关位置从合闸位置切换至分闸位置完成后,保留50ms展宽
+	RunTR(&pSW->tTCHQDHW0ms50ms, pR->tSWST.uSWST.bFlag.bHZWZ, dStep); 
+	bCQD1 = pSW->tTCHQDHW0ms50ms.boolTrip;                              
+
+	// 偷跳条件准备                                                                    
+	bCQD2 =   pSet->bTT_TTCH
+			                   && bCQD1                                         
+			                   && (!pR->tSWST.uSWST.bFlag.bHZWZ);                                     
+
+	// 保护启动	                           
+	// 保护动作后至保护动作返回,保留50ms展宽
+	RunTR(&pSW->tTCHQD0ms50ms, pR->uBHDZ.bFlag.bBHT, dStep); 
+	bCQD3 = pSW->tTCHQD0ms50ms.boolTrip;                              
+
+	// 重合已启动或保护启动,用于闭锁不对应启动                                                                    
+	bCQD4 = pSW->sta.bFlag.bCHQD ||bCQD3;
+	                                                                   
+	// 此处保护跳信号,是实时信号,即保护已返回
+	bCQD5 = bCQD3 && (!pR->uBHDZ.bFlag.bBHTrip);      
+
+	// 重合启动自保持
+	// 重合闸出口条件,用于防止重合闸合闸过程中,TWJ没有返回时,再次误发启动重合闸报文。
+	bCQD6 = pSW->sta.bFlag.bCDWC             				  // 重合充电完成
+		                   && pSW->sta.bFlag.bCHQD            // 三相启动重合闸
+		                   && (!pSW->sta.bFlag.bCHCK);        // 重合闸出口,取反
+	                                                                   
+	// 偷跳启动重合闸                                                   
+	pSW->sta.bFlag.bTTQD =  pSW->sta.bFlag.bCDWC         	  // 重合闸充电完成
+		                   && bCQD2            				  // 偷跳判断完成                
+		                   && (!bCQD4);        				  // 重合未启动,无保护跳过程
+
+
+	// 三跳启动重合闸                                                  
+	pSW->sta.bFlag.bTLQD =  pSW->sta.bFlag.bCDWC              // 重合闸充电完成
+							&& bCQD5
+							// TODO bXDLCH 对接 EWen
+		                //    &&(bCQD5 || pR->tXDLCHZ.sta.bFlag.bXDLCH)            // 有保护跳过程,而且保护已经返回,即故障已经解除
+		                   && (!pSW->sta.bFlag.bCHQD);        // 三相启动重合闸未启动
+
+	// 三相启动重合闸
+	bCHQD_CHQD =  pSW->sta.bFlag.bTTQD                        // 偷跳启动重合闸
+	           || pSW->sta.bFlag.bTLQD                        // 三跳启动重合闸
+	           || bCQD6;                       				  // 三相启动重合闸
+
+	if( bCHQD_CHQD )
+	{
+		if( !pSW->sta.bFlag.bCHQD )                           // 重合开出标尚未置位
+		{
+			pSW->sta.bFlag.bCHQD = true;					  // 此标志会一直维持到重合闸出口或充电标志放电
+			pSW->sta.bFlag.bQDFG=true;						  // 整组复归时有效
+			soe_record_ev(EV_AR_START+sw*EV_SW_NUM, 1, 0,0,0);// 重合启动SOE         
+			//rcd_start(sw,RECORD_TYPE_CHZ, RECORD_LEN_TZQD); 	//录波类型:跳闸类
+		}        
+	}
+	else
+	{
+		if( pSW->sta.bFlag.bCHQD )
+		{
+			pSW->sta.bFlag.bCHQD = false;
+			soe_record_ev(EV_AR_START+sw*EV_SW_NUM,0 ,0,0,0);   
+		}
+	}
+}
+
+/**************************************************************************
+函数名称: AR_Logic
+函数版本:1.00 
+函数版本:1.00 
+作者:    硬件部
+创建日期:2010.4.28    
+
+函数功能说明:重合闸逻辑判断
+
+输入参数:
+输出参数:
+返回值: 
+***************************************************************************/
+static void AR_Logic(DWORD  dStep)
+{
+	bool bWCN;
+	u32 sw = g_protect.sw;	
+	TRELAY_T *pR=&g_tRelay[sw];
+	TCH_T *pSW =&pR->tCHZ;
+	TSETSW *pSet = &pRunSet->tSwSet[sw];
+
+	bool bHZL1,bHZL2,bHZL3,bHZL4,bHZL5,bHZL6,bHZL8,bHZL9;
+
+	// 重合闸条件准备
+	bHZL1 = BH_ALL_EN(sw)				// 总投退
+							&& pSet->bTT_CHZ         	// 软压板: 重合闸投
+							&& pR->run_stu.chz			// 重合闸硬压板投入
+							&& pSW->sta.bFlag.bCHQD   // 三相启动重合闸
+							&& pSW->sta.bFlag.bCDWC;  // 重合闸充电完成
+	                          
+	RunTR(&pSW->tTCHJD_ARDelay, bHZL1, dStep);    //重合延时
+	bHZL2 = pSW->tTCHJD_ARDelay.boolTrip;
+
+	// 弹簧未储能下降沿展宽30ms
+	bWCN = pR->run_stu.wcn && pSet->bTT_WCN;
+	RunTR(&pSW->tTCHJD_0ms30ms, bWCN, dStep);
+	bHZL3 = pSW->tTCHJD_0ms30ms.boolTrip;
+
+	// 重合闸检同期
+	bHZL9 =AR_Check(pSet->dCKModes);
+
+	// 重合闸条件准备好,弹簧储能OK,重合闸出口
+	pSW->sta.bFlag.bCHCK = (!bHZL3) && bHZL2 && bHZL9;
+	
+	// 重合闸开出自保持
+	bHZL4 = pSW->sta.bFlag.bHz || pSW->sta.bFlag.bCHCK;
+
+	// 重合开出持续200ms
+	RunTR(&pSW->tTCHJD_200ms0ms, bHZL4, dStep);    
+	bHZL5 = pSW->tTCHJD_200ms0ms.boolTrip;                        
+
+	// 重合闸开出,经过200ms后开出解除
+	pSW->sta.bFlag.bHz =bHZL4 && (!bHZL5);                   
+
+	// 重合闸指令发出后,且开关已经跳闸完成
+	bHZL6 = pSW->sta.bFlag.bHz || pSW->sta.bFlag.bHZL7;
+	pSW->sta.bFlag.bHZL7 = pR->tSWST.uSWST.bFlag.bTZWZ && bHZL6;
+
+	// 开放后加速允许有效延时200ms展宽
+	RunTR(&pSW->tTCHJD_HJS, pSW->sta.bFlag.bHZL7, dStep);                
+	bHZL8 = pSW->tTCHJD_HJS.boolTrip;	
+       pSW->sta.bFlag.bCHJS = pSW->tTCHJD_HJS.boolTrip
+                   			&& (!pR->tSWST.uSWST.bFlag.bTZWZ);
+
+	//出口及发信
+	if(pSW->sta.bFlag.bHz)
+	{
+		if(!pSW->sta.bFlag.bEvent)    //重合开出标尚未置位
+		{   				
+			//亮重合动作灯
+			pSW->sta.bFlag.bCHZLed = true;
+			
+			pSW->wAR_ActTimes++;    //重合动作次数
+			pSW->sta.bFlag.bEvent = true;
+			//pSW->uCHFG.wfFlag=0;			//每次重合出口后,清重合复归标志  修改时注意,此处需对标志字特殊处理
+
+			pSW->sta.bFlag.bCHDZ=false;    	//重合闸动作   
+			pSW->sta.bFlag.bBYSD=false;    	//重合闸闭锁时间到 
+			pSW->sta.bFlag.bCHFD=false;    	//重合闸动作放电   
+			pSW->sta.bFlag.bCHBS=false;    	//重合闸闭锁   
+			pSW->sta.bFlag.bCK=false;		//放电条件1			
+
+			// pR->tXDLCHZ.sta.bFlag.bXDLCH = false;								//清小电流动作标志
+
+			if(pSW->wAR_ActTimes==1)
+			{
+				soe_record_ev(EV_AR1+sw*EV_SW_NUM, 1, 0,0,0);                   //一次重合动作SOE
+			}
+			else if(pSW->wAR_ActTimes==2)
+			{
+				soe_record_ev(EV_AR2+sw*EV_SW_NUM, 1, 0,0,0);                   //二次重合动作SOE
+			}
+			else
+			{
+				soe_record_ev(EV_AR3+sw*EV_SW_NUM, 1, 0,0,0);                   //三次重合动作SOE
+			}
+			rcd_start(sw,RECORD_TYPE_CHZ,RECORD_LEN_TZQD);  
+			ResetTR(&pSW->tTCHFAIL_TW); 										// 重合出口后,重新复归时间继电器
+			ResetTR(&pSW->tTCHOKTime);											// 重合成功时间继电器,在重合出口后重新计数
+			ResetTR(&pSW->tTCHBSDelay);											// 闭锁重合延时继电器重新计数
+			
+		}
+	}
+	else
+	{
+		if( pSW->sta.bFlag.bEvent )                                    //重合开出标尚未置位
+		{   
+			pSW->sta.bFlag.bEvent = false;
+			
+			if(soe_check(EV_AR1+sw*EV_SW_NUM))
+			{
+				soe_record_ev(EV_AR1+sw*EV_SW_NUM, 0, 0,0,0  );        //重合1动作SOE返回
+			}
+			if(soe_check(EV_AR2+sw*EV_SW_NUM))
+			{
+				soe_record_ev(EV_AR2+sw*EV_SW_NUM, 0, 0,0,0  );        //重合2动作SOE返回
+			}
+			if(soe_check(EV_AR3+sw*EV_SW_NUM))
+			{
+				soe_record_ev(EV_AR3+sw*EV_SW_NUM, 0, 0,0,0  );        //重合3动作SOE返回
+			}	
+		}
+	}
+}
+
+/**************************************************************************
+函数名称: AR_Reset
+函数版本:1.00 
+函数版本:1.00 
+作者:    硬件部
+创建日期:2010.4.28    
+
+函数功能说明:重合闸复归逻辑
+
+输入参数:
+输出参数:
+返回值: 
+***************************************************************************/
+static void AR_Reset(DWORD  dStep)
+{  
+	u32 sw = g_protect.sw;	
+	TRELAY_T *pR=&g_tRelay[sw];
+	TCH_T *pSW =&pR->tCHZ;
+	TSETSW *pSet = &pRunSet->tSwSet[sw];
+	bool bFD1;
+
+	// 重合闸动作后,即启动重合闸闭锁时间,在此时间内,有保护动作即闭锁重合闸
+	// 重合闸出口且重合闸动作次数<整定动作次数,重合闸闭锁
+	pSW->sta.bFlag.bCHDZ = (pSW->sta.bFlag.bCHCK && (pSW->wAR_ActTimes<pSet->dARTimes))       
+	                  		|| pSW->sta.bFlag.bCHBS;                              	
+
+	// 重合闸闭锁延时,从重合闸动作开始统计                                                                    
+	RunTR(&pSW->tTCHBSDelay, pSW->sta.bFlag.bCHDZ, dStep);
+	pSW->sta.bFlag.bBYSD = pSW->tTCHBSDelay.boolTrip;
+	                                                                     
+	pSW->sta.bFlag.bCHBS = (pSW->wAR_ActTimes<pSet->dARTimes) // 未到最后一次重合
+	                   		&& pSW->sta.bFlag.bCHDZ           // 一次重合闸动作
+	                   		&& (!pSW->sta.bFlag.bBYSD);       // 重合闸闭锁时间未到
+
+	// 重合闸出口后,经过重合闸确认时间,无保护动作,即放电,完成该次重合过程
+	// 如果在确认时间内,重合闭锁时间外,有保护动作,即进入下一计数重合
+	pSW->sta.bFlag.bCK = ((!pR->uBHDZ.bFlag.bBHT)
+						&& (pSW->sta.bFlag.bCHCK || pSW->sta.bFlag.bCK));	//重合出口及自保持
+	RunTR(&pSW->tTCHOKTime, pSW->sta.bFlag.bCK, dStep);
+	bFD1 = pSW->tTCHOKTime.boolTrip;	
+
+	// 重合闸闭锁时间内,有保护动作,放电
+	// 重合闸次数已到最大,放电
+	// 重合成功,重合闸确认时间内无保护动作,放电
+	pSW->sta.bFlag.bCHFD = (pR->uBHDZ.bFlag.bBHT && pSW->sta.bFlag.bCHBS)
+                   			|| (pSW->sta.bFlag.bCHCK && (pSW->wAR_ActTimes>=pSet->dARTimes))
+                   			|| bFD1;
+
+#if 0	
+	// 重合闸出口后,经过重合闸确认时间,无保护动作,不再放电,仅清除动作次数进行新一轮重合计数
+	// 此处处理有问题,重合闸动作次数清零后,重合闸成功后,不放电的话pSW->sta.bFlag.bQDFG一直为true
+	// 导致保护逻辑不能整组复归,遥控超时时间到了之后预置继电器分了,因没有整组复归所以触发保护动作时预置继电器控合不了导致不能控制开关动作
+	// if (bFD1)
+	// {
+	// 	pSW->wAR_ActTimes = 0;
+	// 	ResetTR(&pR->tCHZ.tTCHJD_HJS);
+	// }
+#endif
+	// 整组复归条件:(1)重合闸放电(2)重合已启动,但充电标志已清零
+	if(pSW->sta.bFlag.bCHFD					
+	 	|| (!pSW->sta.bFlag.bCDWC && pSW->sta.bFlag.bQDFG))
+	{
+	 	pSW->sta.bFlag.bQDFG = false;	
+	}
+}
+
+/**************************************************************************
+函数名称: AR_Check
+函数版本:1.00 
+函数版本:1.00 
+作者:    赵海洋
+创建日期:2021.06.10    
+
+函数功能说明:重合闸检同期
+			0:无检定;1:检一侧有压一侧无压;2:检同期;3:检一侧有压一侧无压+检同期		
+输入参数:
+输出参数:
+返回值: 
+***************************************************************************/
+static int AR_Check(DWORD mode)
+{
+	// 0:无检定;1:检一侧有压一侧无压;2:检同期;3:检一侧有压一侧无压+检同期
+	u32 sw = g_protect.sw;
+	TSETSW *pSet = &pRunSet->tSwSet[sw];
+	TRELAY_T *pR=&g_tRelay[sw];
+	DWORD deltaU1=0,deltaU2=0,deltaU3=0;
+	bool Volt,Volt1,Volt2,Volt3,angle1,bFEQ=false;
+	bool bY1 ,bY2 , sp , bLock = false;
+	int ret = 0;
+
+	// bY1 = OverRelay(g_ui[PUB_AC_US1].m2[0], pRunSet->dUPower, pRunSet->dUPower_fh, false);
+	// bY2 = OverRelay(g_ui[PUB_AC_US2].m2[0], pRunSet->dUPower, pRunSet->dUPower_fh, false);
+	// bY1 = g_run_stu.pt1yy;
+	// bY2 = g_run_stu.pt2yy;
+
+	bY1= ((!g_run_stu.pt1yy) && g_run_stu.pt2yy); 
+	bY2= (g_run_stu.pt1yy && (!g_run_stu.pt2yy));
+	bLock = bY1 || bY2;
+
+	switch (mode)
+	{
+		case 0: 
+			ret =  1 ;
+			break;		
+		case 1: 
+			/* 检一侧有压一侧无压 */
+			ret = bLock;
+			break;
+		case 2:
+			/* 检同期 */
+			// 分别取出两侧各线电压压差
+			deltaU1 = _AbsL(g_ui[PUB_AC_UAB1].fz - g_ui[PUB_AC_UAB2].fz);
+			deltaU2 = _AbsL(g_ui[PUB_AC_UBC1].fz - g_ui[PUB_AC_UBC2].fz);
+			deltaU3 = _AbsL(g_ui[PUB_AC_UCA1].fz - g_ui[PUB_AC_UCA2].fz);
+
+			// 角差与定值比对
+			angle1 = SynAngle(g_ui[PUB_AC_UAB1].p, g_ui[PUB_AC_UAB2].p,pSet->dTQ_ANGLE_FZ);
+
+			// 频差与定值比对
+			bFEQ = SynFrequency(g_sw_pub.ac_in[PUB_AC_IN_F1],g_sw_pub.ac_in[PUB_AC_IN_F2],pSet->dTQ_FREQ_FZ);
+
+			// 压差与定值比对
+			Volt1 = LowRelay(deltaU1, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+			Volt2 = LowRelay(deltaU2, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+			Volt3 = LowRelay(deltaU3, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+
+			Volt = Volt1&&Volt2&&Volt3;
+
+			sp = Volt&&angle1&&bFEQ&&(!pR->tSWST.uSWST.bFlag.bDIHW);
+			ret = sp;
+			break;	
+		case 3: 
+			/* 检一侧有压一侧无压+检同期	 */
+			// 分别取出两侧各线电压压差
+			deltaU1 = _AbsL(g_ui[PUB_AC_UAB1].fz - g_ui[PUB_AC_UAB2].fz);
+			deltaU2 = _AbsL(g_ui[PUB_AC_UBC1].fz - g_ui[PUB_AC_UBC2].fz);
+			deltaU3 = _AbsL(g_ui[PUB_AC_UCA1].fz - g_ui[PUB_AC_UCA2].fz);
+
+			// 角差与定值比对
+			angle1 = SynAngle(g_ui[PUB_AC_UAB1].p, g_ui[PUB_AC_UAB2].p,pSet->dTQ_ANGLE_FZ);
+
+			// 频差与定值比对
+			bFEQ = SynFrequency(g_sw_pub.ac_in[PUB_AC_IN_F1],g_sw_pub.ac_in[PUB_AC_IN_F2],pSet->dTQ_FREQ_FZ);
+
+			// 压差与定值比对
+			Volt1 = LowRelay(deltaU1, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+			Volt2 = LowRelay(deltaU2, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+			Volt3 = LowRelay(deltaU3, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+
+			Volt = Volt1&&Volt2&&Volt3;
+
+			sp = Volt&&angle1&&bFEQ&&(!pR->tSWST.uSWST.bFlag.bDIHW);
+
+			if (bLock)
+			{
+				ret =1;
+			}
+			else if ((!bLock) && sp)
+			{
+				ret =1;
+			}
+			else
+			{
+				ret = 0;
+			}
+			// ret = (!bLock) && sp;
+			break;		
+		default:
+			ret = 0 ;
+			break;
+	}
+	return ret;
+}
+
+int enable_printf_charge_cdn(void)
+{
+	g_print_charge_cdn = true;
+	rt_printf("重合闸充电条件打印,dmesg查看!\r\n");
+	return 0;
+}
+#else
 /**********************************************************************
 定义全局变量
 ***********************************************************************/
@@ -776,7 +1393,7 @@ static void AR_Reset(int sw,DWORD  dStep)
 	 	pSW->sta.bFlag.bQDFG = false;	
 	}
 }
-
+#endif /* GW_AREA_MAIN_2021 */
 /***************************************endfile**********************************************************/
 
 

+ 95 - 1
dtu/dtu_main_t536/app/reclose.h

@@ -8,7 +8,100 @@
 ****************************************************************************/
 #ifndef __RECLOSE_H
 #define __RECLOSE_H
+#ifdef GW_AREA_MAIN_2021
+typedef union UCHFLAG
+{
+    DWORD  wfFlag;
+    struct
+    {
+       DWORD    bTTQD:1;    //偷跳启动重合闸
+       DWORD    bTLQD:1;    //三跳启动重合闸
+       DWORD    bCHQD:1;    //三相启动重合闸
+       DWORD    bQDFG:1;	  //重合复归标志
+       DWORD    bBSCH:1;    //闭锁重合闸    
+	DWORD    bFDBZ:1;    //重合闸放电标   
+	DWORD    bCDWC:1;    //重合闸充电完成 
+	DWORD    bCHCK:1;    //重合闸出口       
+	DWORD    bCHJS:1;    //重合加速标     
+	DWORD    bHz:1;       // 重合合闸
+	DWORD    bHZL7:1;    //CHZLJ_07      // 逻辑7需自保持   
+	DWORD    bCHDZ:1;    	//重合闸动作   
+	DWORD    bBYSD:1;    	//重合闸闭锁时间到 
+	DWORD    bCHFD:1;    	//重合闸动作放电   
+	DWORD    bCHBS:1;    	//重合闸闭锁   
+	DWORD    bCK:1;		//放电条件1
+	DWORD    bCHZLed:1;  //动作灯
+	DWORD    bEvent:1;
+    }bFlag;
+}UCHFLAG;
+
+typedef struct TCH_T
+{
+	UCHFLAG    sta;                              // 重合闸启动标志字的位定义
+	WORD   	    wAR_ActTimes;                        // 重合闸动作次数
+	DWORD  	    dAR_DelayTime;                        // 三重延时
+	TIMERELAY tTCHFAIL_TW;                       // 三相跳位延时: 重合失败返回时间
+	TIMERELAY tTCHCD15s0s;                       // 充电15秒
+	TIMERELAY tTCHQDHW0ms50ms;                     // 合闸位置下降沿展宽50ms
+	TIMERELAY tTCHQD0ms50ms;                     // 跳闸开出下降沿展宽50ms
+	TIMERELAY tTCHJD_ARDelay;                    // 重合闸延时
+	TIMERELAY tTCHJD_0ms30ms;                    // 弹簧未储能下降沿展宽30ms
+	TIMERELAY tTCHJD_200ms0ms;                   // 重合开出宽度
+	TIMERELAY tTCHBSDelay;                       // 重合闭锁延时
+	TIMERELAY tTCHOKTime;                       // 重合成功时间
+	TIMERELAY tTCHJD_HJS;                        // 重合后加速延时
+}TCH_T;
 
+typedef union UXDLCHFLAG
+{
+    DWORD  wfFlag;
+    struct
+    {
+        DWORD    bTTQD:1;    //偷跳启动重合闸
+        DWORD    bTLQD:1;    //三跳启动重合闸
+        DWORD    bCHQD:1;    //三相启动重合闸
+        DWORD    bQDFG:1;	  //重合复归标志
+        DWORD    bBSCH:1;    //闭锁重合闸    
+        DWORD    bFDBZ:1;    //重合闸放电标   
+        DWORD    bCDWC:1;    //重合闸充电完成 
+        DWORD    bCHCK:1;    //重合闸出口       
+        DWORD    bCHJS:1;    //重合加速标     
+        DWORD    bHz:1;       // 重合合闸
+        DWORD    bHZL7:1;    //CHZLJ_07      // 逻辑7需自保持   
+        DWORD    bCHDZ:1;    	//重合闸动作   
+        DWORD    bBYSD:1;    	//重合闸闭锁时间到 
+        DWORD    bCHFD:1;    	//重合闸动作放电   
+        DWORD    bCHBS:1;    	//重合闸闭锁   
+        DWORD    bCK:1;		//放电条件1
+        DWORD    bCHZLed:1;  //动作灯
+        DWORD    bEvent:1;
+		DWORD    bXDLDZ:1;
+		DWORD    bXDLCHZWC:1;	// 小电流重合闸完成
+		DWORD    bXDLCH:1;		// 小电流启动常规重合闸
+    }bFlag;
+}UXDLCHFLAG;
+
+typedef struct TXDLCH_T
+{
+	UXDLCHFLAG    sta;                              // 重合闸启动标志字的位定义
+	WORD   	    wAR_ActTimes;                        // 重合闸动作次数
+	DWORD  	    dAR_DelayTime;                        // 三重延时
+	TIMERELAY tTXDLCHFAIL_TW;                       // 三相跳位延时: 重合失败返回时间
+	TIMERELAY tTXDLCHCD15s0s;                       // 充电15秒
+	TIMERELAY tTXDLCHQDHW0ms50ms;                     // 合闸位置下降沿展宽50ms
+	TIMERELAY tTXDLCHQD0ms50ms;                     // 跳闸开出下降沿展宽50ms
+	TIMERELAY tTXDLCHJD_ARDelay;                    // 重合闸延时
+	TIMERELAY tTXDLCHJD_0ms30ms;                    // 弹簧未储能下降沿展宽30ms
+	TIMERELAY tTXDLCHJD_200ms0ms;                   // 重合开出宽度
+	TIMERELAY tTXDLCHBSDelay;                       // 重合闭锁延时
+	TIMERELAY tTXDLCHOKTime;                       // 重合成功时间
+	TIMERELAY tTXDLCHJD_HJS;                        // 重合后加速延时
+	TIMERELAY tTXDLCHJLY_HJS;                        // 小电流重合检零压后加速延时
+}TXDLCH_T;
+
+void AutoReclose(DWORD  dStep);                             // 重合闸功能块
+int enable_printf_charge_cdn(void);
+#else
 typedef union UCHFLAG
 {
     DWORD  wfFlag;
@@ -90,5 +183,6 @@ typedef struct TCH_T
 
 void AutoReclose(int sw,DWORD  dStep);                             // 重合闸功能块
 
-    #endif
+#endif
+#endif /* GW_AREA_MAIN_2021 */
     //========================== 本文件结束 ===============================

+ 7 - 4
dtu/dtu_main_t536/app/record.c

@@ -1424,8 +1424,10 @@ int rcd_start(u32 sw, u32 type,u32 waves)
 			return -4;
 		}
 
-		if((type == RECORD_TYPE_LLTB && pSet->bTT_xdlqd == XDL_QD_I0)
-		|| (type == RECORD_TYPE_LXDY && pSet->bTT_xdlqd == XDL_QD_U0))
+		// if((type == RECORD_TYPE_LLTB && pSet->bTT_xdlqd == XDL_QD_I0)
+		// || (type == RECORD_TYPE_LXDY && pSet->bTT_xdlqd == XDL_QD_U0))
+		// TODO 小电流录波类型判断 EWen
+		if(1)
 		{
 		}
 		else
@@ -2570,8 +2572,9 @@ int _rcd_save(struct rcd *prcd)
 		{
 			TSETSW *pSet = &pRunSet->tSwSet[sw];
 			// 如果录波类型和启动类型一起,调用小电流接地判断函数
-			if((prcd->type == RECORD_TYPE_LLTB && pSet->bTT_xdlqd == XDL_QD_I0)
-			|| (prcd->type == RECORD_TYPE_LXDY && pSet->bTT_xdlqd == XDL_QD_U0))
+			// if((prcd->type == RECORD_TYPE_LLTB && pSet->bTT_xdlqd == XDL_QD_I0)
+			// || (prcd->type == RECORD_TYPE_LXDY && pSet->bTT_xdlqd == XDL_QD_U0))
+			// TODO 小电流录波类型判断 EWen
 			{
 				xdl_proc_adc(sw,prcd->dt_begin*ADC_REC_SAMPLE_RATE,&prcd->ts_begin);
 			}

+ 2 - 0
dtu/dtu_main_t536/app/record.h

@@ -32,6 +32,8 @@ enum
 	RECORD_TYPE_LXGL,		// 录波类型为零序过流
 	RECORD_TYPE_LLTB,   	// 录波类型为零流突变
 	RECORD_TYPE_CHZ,   		// 录波类型为重合闸
+	RECORD_TYPE_DLGZ,   	// 录波类型为短路故障
+	RECORD_TYPE_KGBW,   	// 录波类型为开关变位
 #ifdef FUN_JDXX
 	RECORD_TYPE_XDLJD,		// 录波类型为小电流接地
 #endif

+ 117 - 2
dtu/dtu_main_t536/app/run_status.c

@@ -338,8 +338,10 @@ int run_status_init(void)
 		}
 		//  联络分段配置
 		if ((short)g_sw[sw].di_cfg_index[SW_DI_FA_LS] == INDEX_INVALLID)
-		{					
+		{				
+			#ifndef GW_AREA_MAIN_2021	
 			prun->fa_ls = pRunSet->tSwSet[sw].bTT_fa_LL;
+			#endif
 		}	
 
 		if ((short)g_sw[sw].di_cfg_index[SW_DI_BSCH] == INDEX_INVALLID)
@@ -854,7 +856,9 @@ int  run_status_check(u32 dStep)
 		}	
 		else
 		{
+			#ifndef GW_AREA_MAIN_2021
 			prun->fa_ls = pRunSet->tSwSet[sw].bTT_fa_LL;
+			#endif
 		}
 
 		if ((short)g_sw[sw].di_cfg_index[SW_DI_BSCH] != INDEX_INVALLID)
@@ -917,10 +921,11 @@ int  run_status_check(u32 dStep)
 
 	
 		// 曾有压判断,用于失压分闸
-
+		#ifndef GW_AREA_MAIN_2021
 		pt1cyy = OverRelay(g_sw_pub.m2_max[2], pRunSet->tSwSet[sw].dU_fa_YY,pRunSet->tSwSet[sw].dU_fa_YY_fh, prun->pt1yy);
 		//pt2cyy = OverRelay(g_sw_pub.m2_max[3], pRunSet->tSwSet[sw].dU_fa_YY, pRunSet->tSwSet[sw].dU_fa_YY_fh, prun->pt2yy);
 		pt2cyy = OverRelay(g_sw_pub.m2_max[3], pRunSet->tSwSet[sw].dU_fa_YY2, pRunSet->tSwSet[sw].dU_fa_YY2_fh, prun->pt2yy);
+		#endif
 		prun->pt1yy = pt1cyy;
 		prun->pt2yy = pt2cyy;
 		if(g_equ_config_ac[0].type-1==PUB_AC_UAB2 || g_equ_config_ac[0].type-1==PUB_AC_UA2)
@@ -947,6 +952,7 @@ int  run_status_check(u32 dStep)
 
 		bY1=pR->run_stu.kzdx&& pRunSet->tSwSet[sw].bTT_KZHL;
 	#else//控制回路断线 1、控制回路断线遥信输入 2、HQ&TQ错误态&未知态 3、开关位置错误态&未知态
+		#if 0 //控回断线 逻辑定值处理 EWen
 		if( ((short)g_sw[sw].di_cfg_index[SW_DI_HZWZ] != INDEX_INVALLID)&& ((short)g_sw[sw].di_cfg_index[SW_DI_TZWZ] != INDEX_INVALLID))//配置了HQ&TQ
 			bY = (((prun->tzw==0&&prun->hzw==0)||(prun->tzw==1&&prun->hzw==1))&& pRunSet->tSwSet[sw].bTT_KZHL);	//HQ&TQ错误
 		else if( ((short)g_sw[sw].di_cfg_index[SW_DI_KRHW] != INDEX_INVALLID)&& ((short)g_sw[sw].di_cfg_index[SW_DI_KRTW] != INDEX_INVALLID))//必须配置开关双位置状态
@@ -954,6 +960,7 @@ int  run_status_check(u32 dStep)
 		else
 			bY = false;
 		bY1=pR->run_stu.kzdx && pRunSet->tSwSet[sw].bTT_KZHL;
+		#endif
 	#endif
 		RunTR(&pSW->tTKZHLGJ1s, (bY||bY1), dStep);
 		pSW->uSWST.bFlag.bKZHL = pSW->tTKZHLGJ1s.boolTrip;		
@@ -1273,6 +1280,113 @@ int app_action_result(void)
 		{
 			exerr = 1;
 		}
+#ifdef GW_AREA_MAIN_2021
+				// 保护过流
+		if (pR->tOC[OC_GL1].sta.bFlag.bDzLed
+			|| pR->tOC[OC_GL2].sta.bFlag.bDzLed
+			|| pR->tOC[OC_GL3].sta.bFlag.bDzLed
+			|| pR->tOC[OC_DL].sta.bFlag.bDzLed
+			|| pR->tOC[OC_GLJS].sta.bFlag.bDzLed
+			|| pR->tOC[OC_GLBS].sta.bFlag.bDzLed)  // 过流闭锁,点过流灯
+		{
+			gl = 1;
+			//TODO 状态记录 EWen
+			// g_file_led_write[sw].led_gl = gl;		   // 记录过流LED状态 1
+			// g_file_led_sign = 1;					   // 故障LED状态置位
+		}
+
+		// 保护过流跳闸失败
+		if (pR->tOC[OC_GL1].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_GL2].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_GL3].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_DL].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_GLJS].sta.bFlag.bTzsbLed)
+		{
+			gl = 2;
+			//TODO 状态记录 EWen
+			// g_file_led_write[sw].led_gl = gl;		   // 记录过流LED状态 2
+			// g_file_led_sign = 1;					   // 故障LED状态置位
+		}
+
+		// 保护接地
+		if (pR->tOC[OC_LX1].sta.bFlag.bDzLed
+			|| pR->tOC[OC_LX2].sta.bFlag.bDzLed
+			|| pR->tOC[OC_LX3].sta.bFlag.bDzLed
+			|| pR->tOC[OC_LL].sta.bFlag.bDzLed
+			|| pR->tOC[OC_LXJS].sta.bFlag.bDzLed
+			|| pR->tOC[OC_LYJS].sta.bFlag.bDzLed
+			|| xdl_is_dz(sw) // 增加小电流接地
+			|| pR->tXXTZ.bU0Led			//零序选线跳闸
+			|| pR->tU0TZ.bU0Led)
+		{
+			jd = 1;
+			//TODO 状态记录 EWen
+			// g_file_led_write[sw].led_jd = jd;		   // 记录接地LED状态 1
+			// g_file_led_sign = 1;					   // 故障LED状态置位
+		}
+
+		//失压跳闸
+		if (pR->tLostVot.bLostVotLed)
+		{
+			sy = 1;
+		}
+
+
+		// 保护零序过流跳闸失败
+		if (pR->tOC[OC_LX1].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_LX2].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_LX3].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_LL].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_LXJS].sta.bFlag.bTzsbLed
+			|| pR->tOC[OC_LYJS].sta.bFlag.bTzsbLed)
+		{
+			jd = 2;
+			//TODO 状态记录 EWen
+			// g_file_led_write[sw].led_jd = jd;		   // 记录接地LED状态 2
+			// g_file_led_sign = 1;					   // 故障LED状态置位
+		}
+		
+		// 重合闸动作
+		if (pR->tCHZ.sta.bFlag.bCHZLed)
+		{
+			chzdz = 1;
+		}
+
+		// 闭锁
+		if (	 pR->tSDHZ.bL_BSLed
+			|| pR->tSDHZ.bS_BSLed)
+		{
+			bs = 1;
+		}
+		
+		//电流越限
+		if (pR->tOC[OC_OVLOAD].sta.bFlag.bDzLed
+			|| pR->tOC[OC_DLGZ].sta.bFlag.bDzLed
+			|| pR->tOC[OC_DLYX].sta.bFlag.bDzLed)
+		{
+			gz = 1;  // 过载不点动作灯
+		}
+		prun->exerr = exerr;
+		prun->gl = gl;
+		prun->jd = jd;
+		prun->chzdz = chzdz;
+		prun->bs = bs;
+		if (gl || jd || chzdz ||sy) // 故障状态,动作灯常亮 (过流、接地、重合闸、过载,失压)
+		{
+			prun->dz = 1;
+		}
+		else if ( bs) //  X Y闭锁,动作灯闪烁
+		{
+			prun->dz = 2;  // 闪烁
+		}
+		bvol=false;
+		for(i=0;i<=VOL_DDY_Uca2;i++)
+		{
+			bvol|=g_tVol[i].sta.bFlag.bGj;
+		}
+		//g_run_stu.pubdz = bvol; // 电压越限不点动作灯,
+	}
+#else
 		prun->gj_led =0;
 		//告警的时候不亮动作灯
 		if(pR->tOC[BH_GL1].sta.bFlag.bGjLed	
@@ -1461,6 +1575,7 @@ int app_action_result(void)
 
 	// 动作总
 	g_run_stu.pubdz= run_status_dz_all();
+#endif
 	return 0;
 }
 

+ 4 - 0
dtu/dtu_main_t536/app/run_status.h

@@ -152,6 +152,10 @@ typedef struct run_stu_sw
 
 #ifdef JZS_FUNCTION
 	u8 jzs_tt;		//集中式投退
+#endif
+#ifdef GW_AREA_MAIN_2021
+	// TODO 赋值 EWen
+	u8 chz;		// 重合闸
 #endif
 	u8 bhtt;	// 常规保护投退
 	u8 fatt;  // fa功能跟投退

+ 625 - 8
dtu/dtu_main_t536/app/set.c

@@ -76,8 +76,22 @@ const char *SetUints[]=  //
 
 BH_SET_GROUP SetGroups[]=  //单位符号定义,对应定值
 {
-			
-	{SETGROUP_TYPE_BY			,0 ,		0,				GROUP_SET_BY,		"备用定值", 		"备用",				},				
+	{SETGROUP_TYPE_BY			,0 ,		0,				GROUP_SET_BY,		"备用定值", 		"备用",				},	
+#ifdef GW_AREA_MAIN_2021	
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_GL,		"保护定值", 		"过流",				},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_LX,		"保护定值", 		"零流",				},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_LY,		"保护定值", 		"零压",				},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_HJS,		"保护定值", 		"后加速",			},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_DTB,		"保护定值", 		"分布式",			},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_FA,		"保护定值", 		"馈线自动化",		},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_CHZ,		"保护定值", 		"重合闸",			},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_TQHZ,		"保护定值", 		"同期合闸",			},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_OVI,		"保护定值", 		"电流越限",			},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_CT,		"保护定值", 		"CT变比",			},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_JD,		"保护定值", 		"间歇接地",			},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_RCD_WAVE,	"保护定值", 		"故障录波",			},
+	{SETGROUP_TYPE_BH			,1 ,		0, 				GROUP_SET_OTHERS,	"保护定值", 		"其它定值",			},
+#else			
 	{SETGROUP_TYPE_BH			,1 ,		SET_HYB_BH, 	GROUP_SET_BHTT,		"保护定值", 		"保护控制字",		},			
 	{SETGROUP_TYPE_BH			,1 ,		SET_HYB_BH, 	GROUP_SET_BHDZ,		"保护定值", 		"保护定值", 			},
 
@@ -147,6 +161,7 @@ BH_SET_GROUP SetGroups[]=  //
 #ifdef FUNC_DRIVE_JY
 	{SETGROUP_TYPE_BH			,1 ,		0,				GROUP_SET_DRIVE,	"保护定值", 		"传动功能", 	},
 #endif
+#endif
 #ifdef GW_AREA_MAIN_2021 
 	{SETGROUP_TYPE_PUB			, 1,		0,				GROUP_SET_SCT,			"公共定值", 		"定值区", 			},
 	{SETGROUP_TYPE_PUB			, 1,		0,				GROUP_SET_VOL,			"公共定值", 		"电压参数", 		},
@@ -947,6 +962,7 @@ const  SET_LIST SelFAList[]=
 #define SelFAListNum	sizeof(SelFAList)/sizeof(SET_LIST)
 #endif
 
+#ifdef GW_AREA_MAIN_2021
 //FA 电源选择列表 (目前仅支持单板)
 const  SET_LIST PowerList[]=
 {
@@ -994,6 +1010,15 @@ const  SET_LIST WaveletTYPE[]=
 };
 #define WaveletTYPENum	sizeof(WaveletTYPE)/sizeof(SET_LIST)
 
+//过流方向
+const  SET_LIST DIRList[]=
+{
+	{"指向母线(电源)", 0 ,},		// 为保证液晶一行显示完全做出调整
+	{"指向线路(负荷)", 1 ,},	
+};
+#define DIRListNum	sizeof(DIRList)/sizeof(SET_LIST)
+
+#endif
 int g_goose_net_type=0;
 
 /**********************************************************************
@@ -1432,7 +1457,221 @@ const int PUB_SET_NUMBER  = sizeof( tPubSetTable ) / sizeof(tPubSetTable[0]);  /
 ***********************************************************************/
 const  TSETTABLE tSwSetTable[]=                                               		 // min 	 max 		     default
 {
+#ifdef GW_AREA_MAIN_2021
+	{SETTYPE_LIST,	SET_NULL,	"保护总投退", 		0 , 		TTListNum-1,		1,		TTList,	TTListNum,			0		},
+	
+	{SETTYPE_LABEL,	SET_NULL,	"过流", 	0 , 	0,				0 ,		0,			0,			GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流停电跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅰ段告警", 	0 , 		TTListNum-1,		1,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅰ段跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_F,		SET_A,		"过流Ⅰ段电流",		0.0 , 	100.0,				100.0 ,	0,			0,			GROUP_SET_GL},	
+	{SETTYPE_F,		SET_S,		"过流Ⅰ段时间",		0.0 , 	100.0,				0.0 ,	0,		0,			GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅰ段方向投退", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅰ段方向指向", 	0 , 		DIRListNum-1,		0,		DIRList,	DIRListNum,		GROUP_SET_GL},
+
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅱ段告警", 	0 , 		TTListNum-1,		1,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅱ段跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_F,		SET_A,		"过流Ⅱ段电流",	0.0 , 	100.0,			100.0 ,	0,			0,			GROUP_SET_GL},	
+	{SETTYPE_F,		SET_S,		"过流Ⅱ段时间",	0.0 , 	100.0,			0.0 ,	0,			0,			GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅱ段方向投退", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅱ段方向指向", 	0 , 		DIRListNum-1,		0,		DIRList,	DIRListNum,		GROUP_SET_GL},
+
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅲ段告警", 	0 , 		TTListNum-1,		1,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅲ段跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_F,		SET_A,		"过流Ⅲ段电流",	0.0 , 	100.0,			100.0 ,	0,			0,			GROUP_SET_GL},	
+	{SETTYPE_F,		SET_S,		"过流Ⅲ段时间",	0.0 , 	100.0,			3.0 ,	0,			0,			GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅲ段方向投退", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"过流Ⅲ段方向指向", 	0 , 		DIRListNum-1,		0,		DIRList,	DIRListNum,		GROUP_SET_GL},
+
+	{SETTYPE_LIST,	SET_NULL,	"短路故障告警", 	0 , 		TTListNum-1,	0,		TTList, 	TTListNum,	GROUP_SET_GL},
+	{SETTYPE_LIST,	SET_NULL,	"短路故障跳闸", 	0 , 		TTListNum-1,	0,		TTList, 	TTListNum,	GROUP_SET_GL},
+	{SETTYPE_F,		SET_A,		"短路故障电流", 	0.0 , 	100.0,			100.0 ,		0,			0,		GROUP_SET_GL},
+	{SETTYPE_F,		SET_S,		"短路故障时间", 	0.0 , 	100.0,			10.0 ,		0,			0,		GROUP_SET_GL},
+
+	{SETTYPE_LIST,	SET_NULL,	"遮断闭锁投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_GL},
+	{SETTYPE_F,		SET_A,		"开关遮断电流", 	0.0 , 	100.0,			100 ,	0,			0,			GROUP_SET_GL},
+
+
+	{SETTYPE_LABEL,	SET_NULL,	"零序", 			0 , 	0,				0 ,		0,			0,			GROUP_SET_LX},
+	{SETTYPE_LIST,	SET_NULL,	"小电流接地告警", 	0 , 	TTListNum-1,	1,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_LIST,	SET_NULL,	"小电流接地出口", 	0 , 	TTListNum-1,	0,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_LIST,	SET_NULL,	"小电流接地事故总", 	0 , 	TTListNum-1,	0,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_F,		SET_A,		"小电流暂态电流",	0.0 , 	100.0,			0.2 ,	0,			0,			GROUP_SET_LX},	
+	{SETTYPE_F,		SET_S,		"小电流跳闸时间",	0.0 , 	100.0,			0,		0,			0,			GROUP_SET_LX},	
+	{SETTYPE_F,		SET_S,		"小电流告警时间",	0.0 , 	100.0,			0,		0,			0,			GROUP_SET_LX},
+	{SETTYPE_LIST,	SET_NULL,	"零序反极性投退", 	0 , 	TTListNum-1,	0,		TTList,	TTListNum,		GROUP_SET_LX},			// 针对液晶做出修改
+
+	{SETTYPE_LIST,	SET_NULL,	"零序Ⅰ段告警", 	0 , 		TTListNum-1,		1,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_LIST,	SET_NULL,	"零序Ⅰ段跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_F,		SET_A,		"零序Ⅰ段电流",	0.0 , 	100.0,			100.0 ,	0,			0,			GROUP_SET_LX},	
+	{SETTYPE_F,		SET_S,		"零序Ⅰ段时间",	0.0 , 	100.0,			10.0 ,	0,			0,			GROUP_SET_LX},
 	
+
+	{SETTYPE_LIST,	SET_NULL,	"零序Ⅱ段告警", 	0 , 		TTListNum-1,		1,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_LIST,	SET_NULL,	"零序Ⅱ段跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_F,		SET_A,		"零序Ⅱ段电流",	0.0 , 	100.0,			100.0 ,	0,			0,			GROUP_SET_LX},	
+	{SETTYPE_F,		SET_S,		"零序Ⅱ段时间",	0.0 , 	100.0,			20.0 ,	0,			0,			GROUP_SET_LX},
+
+	{SETTYPE_LIST,	SET_NULL,	"零序Ⅲ段告警", 	0 , 		TTListNum-1,		1,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_LIST,	SET_NULL,	"零序Ⅲ段跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_F,		SET_A,		"零序Ⅲ段电流",	0.0 , 	100.0,			100.0 ,	0,			0,			GROUP_SET_LX},	
+	{SETTYPE_F,		SET_S,		"零序Ⅲ段时间",	0.0 , 	100.0,			20.0 ,	0,			0,			GROUP_SET_LX},
+
+	{SETTYPE_LIST,	SET_NULL,	"零流告警", 	0 , 		TTListNum-1,		1,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_LIST,	SET_NULL,	"零流跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_LX},
+	{SETTYPE_F,		SET_A,		"零流告警定值",	0.0 , 	100.0,			100.0 ,	0,			0,			GROUP_SET_LX},	
+	{SETTYPE_F,		SET_S,		"零流告警时间",	0.0 , 	100.0,			20.0 ,	0,			0,			GROUP_SET_LX},
+
+	{SETTYPE_LABEL,	SET_NULL,	"零压", 			0 , 		0,				0 ,		0,			0,			GROUP_SET_LY},
+	{SETTYPE_LIST,	SET_NULL,	"零压告警", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_LY},
+	{SETTYPE_LIST,	SET_NULL,	"零压跳闸", 	0 , 		TTListNum-1,		0,		TTList,	TTListNum,		GROUP_SET_LY},
+	{SETTYPE_F,		SET_S,		"零压告警时间",	0.1 , 	100.0,			5.0 ,	0,			0,			GROUP_SET_LY},
+
+	{SETTYPE_LABEL,	SET_NULL,	"后加速", 			0 , 		0,				0 ,		0,			0,			GROUP_SET_HJS},
+	{SETTYPE_LIST,	SET_NULL,	"过流加速投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_HJS},
+	{SETTYPE_F,		SET_A,		"过流加速电流", 	0.0 , 	150.0,			100.0 ,	0,			0,			GROUP_SET_HJS},
+	{SETTYPE_F,		SET_S,		"过流加速时间",	0.0 , 	100.0,			10.0 ,	0,			0,			GROUP_SET_HJS},
+	{SETTYPE_LIST,	SET_NULL,	"零流加速投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_HJS},
+	{SETTYPE_F,		SET_A,		"零流加速定值", 	0.0, 		150.0,			10.0 ,	0,			0,			GROUP_SET_HJS},
+	{SETTYPE_F,		SET_S,		"零流加速时间",	0.0 , 	100.0,			10.0 ,	0,			0,			GROUP_SET_HJS},
+	{SETTYPE_LIST,	SET_NULL,	"零压加速投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_HJS},
+	{SETTYPE_F,		SET_U,		"零压加速定值", 	0.0, 		220.0,			30.0 ,	0,			0,			GROUP_SET_HJS},
+	{SETTYPE_F,		SET_S,		"零压加速时间",	0.0 , 	100.0,			10.0 ,	0,			0,			GROUP_SET_HJS},
+	{SETTYPE_F,		SET_S,		"加速段开放时间",	0.0 , 	10.0,			10.0 ,	0,			0,			GROUP_SET_HJS},
+
+	{SETTYPE_LABEL,	SET_NULL,	"重合闸", 			0 , 		0,				0 ,		0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_LIST,	SET_NULL,	"重合闸投退", 		0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_CHZ},
+	{SETTYPE_LIST,	SET_NULL,	"多次重合闸投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_CHZ},
+	{SETTYPE_F,		SET_S,		"非一次重合时间",	0.0 , 		100.0,		3.0 ,	0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_F,		SET_S,		"一次重合时间",		0.0 , 		600.0,		5.0 ,	0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_F,		SET_S,		"二次重合时间",		0.0 , 		100.0,		3.0 ,	0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_F,		SET_S,		"三次重合时间",		0.0 , 		100.0,		3.0 ,	0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_F,		SET_S,		"重合闭锁时间",		0.0 , 		300.0,		0.0   ,	0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_F,		SET_S,		"重合复归时间",		0.3 , 		999.0,		30.0 ,	0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_UINT,	SET_NULL,	"重合闸次数", 		1 , 		3,				1,		0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_LIST,	SET_NULL,	"偷跳启动重合", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_CHZ},
+	{SETTYPE_LIST,	SET_NULL,	"大电流闭锁重投", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_CHZ},
+	{SETTYPE_F,		SET_A,		"大电流闭重定值", 	0.0, 		100.0,			100.0 ,	0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_UINT,	SET_NULL,	"重合闸出口方式", 	0 , 		3,				0,		0,			0,			GROUP_SET_CHZ},
+	{SETTYPE_LIST,	SET_NULL,	"重合检有压投退", 	0 , 		TTListNum-1,	0,		TTList,		TTListNum,	GROUP_SET_CHZ},
+	{SETTYPE_F,		SET_S,		"重合检有压时间",		1.0 , 		100.0,			3.0 ,	0,			0,			GROUP_SET_CHZ},
+
+	{SETTYPE_LABEL,	SET_NULL,	"分布式", 			0 , 		0,				0 ,		0,			0,			GROUP_SET_DTB},
+	{SETTYPE_LIST,	SET_NULL,	"分布式FA压板", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_DTB},
+	{SETTYPE_LIST,	SET_NULL,	"分布式FA隔离", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_DTB},
+	{SETTYPE_F,		SET_S,		"分布式FA隔离时间",	0.0 , 		100.0,		1.0 ,	0,			0,			GROUP_SET_DTB},
+	{SETTYPE_F,		SET_A,		"分布式FA过流定值",	0.0 , 		100.0,		5.0 ,	0,			0,			GROUP_SET_DTB},
+	{SETTYPE_F,		SET_S,		"分布式FA过流时间",	0.0 , 		500.0,		3.0 ,	0,			0,			GROUP_SET_DTB},
+	{SETTYPE_F,		SET_A,		"FA零序过流定值",	0.0 , 		100.0,		3.0 ,	0,			0,			GROUP_SET_DTB},
+	{SETTYPE_F,		SET_S,		"FA零序过流时间",	0.0 , 		300.0,		0.0   ,	0,			0,			GROUP_SET_DTB},
+	{SETTYPE_LIST,	SET_NULL,	"FA恢复功能", 		0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_DTB},
+	{SETTYPE_F,		SET_S,		"联络自投充电延时",	0.0 , 		300.0,		3.0 ,	0,			0,			GROUP_SET_DTB},
+	{SETTYPE_F,		SET_S,		"联络自投合闸延时",	0.0 , 		300.0,		3.0   ,	0,			0,			GROUP_SET_DTB},
+	{SETTYPE_LIST,	SET_NULL,	"过载预判", 		0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_DTB},
+	{SETTYPE_F,		SET_A,		"过载负荷限值",		0.0 , 		300.0,		3.0   ,	0,			0,			GROUP_SET_DTB},
+	{SETTYPE_LIST,	SET_NULL,	"FA检有压", 		0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_DTB},
+	{SETTYPE_F,		SET_PER,	"FA有压定值",		0.0 , 		1.0,		0.6   ,0,			0,			GROUP_SET_DTB},
+	{SETTYPE_F,		SET_PER,	"FA无压定值",		0.0 , 		1.0,		0.1   ,0,			0,			GROUP_SET_DTB},
+	{SETTYPE_LIST,	SET_NULL,	"首开关失压保护", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_DTB},
+	{SETTYPE_F,		SET_S,		"首开关失压跳延时",		0.0 , 		200.0,		10.0   ,0,			0,			GROUP_SET_DTB},
+	{SETTYPE_LIST,	SET_NULL,	"失压经过流闭锁", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_DTB},
+	{SETTYPE_F,		SET_S,		"过流闭锁记忆时间",		0.0 , 		500.0,		5.0   ,0,			0,			GROUP_SET_DTB},
+	{SETTYPE_LIST,	SET_NULL,	"失灵保护", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_DTB},
+	{SETTYPE_F,		SET_S,		"失灵判断延时",		0.0 , 		500.0,		5.0   ,0,			0,			GROUP_SET_DTB},
+	{SETTYPE_F,		SET_A,		"FA无流定值",		0.0 , 		100.0,		2.0   ,0,			0,			GROUP_SET_DTB},
+	
+
+	{SETTYPE_LABEL,	SET_NULL,	"就地馈线自动化", 	0 , 		0,				0 ,		0,			0,			GROUP_SET_FA},
+	{SETTYPE_LIST,	SET_NULL,	"就地FA功能", 		0 , 		TTListNum-1,	0,		TTList,		TTListNum,	GROUP_SET_FA},
+	{SETTYPE_LIST,	SET_NULL,	"FA类型", 		0 , 		FA_ListNum-1,	0,		FA_List,		FA_ListNum,	GROUP_SET_FA},
+	{SETTYPE_LIST,	SET_NULL,	"分段分界选择", 	0 , 		KGFun1ListNum-1,	0,		KGFun1List,	KGFun1ListNum,GROUP_SET_FA},
+	{SETTYPE_LIST,	SET_NULL,	"联络分段模式", 	0 , 		KGFunListNum-1,	0,		KGFunList,	KGFunListNum,GROUP_SET_FA},
+	{SETTYPE_LIST,	SET_NULL,	"首端FTU", 		0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_FA},
+	{SETTYPE_LIST,	SET_NULL,	"自适应短路处理", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_FA},
+	{SETTYPE_LIST,	SET_NULL,	"自适应接地处理", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_FA},
+	{SETTYPE_F,		SET_S,		"X 时间",			0 , 		1000,				7 ,		0,			0,			GROUP_SET_FA},
+	{SETTYPE_F,		SET_S,		"Y 时间",			0 , 		1000,				5 ,		0,			0,			GROUP_SET_FA},
+	{SETTYPE_F,		SET_S,		"C 时间",			0 , 		1000,				30 ,		0,			0,			GROUP_SET_FA},
+	{SETTYPE_F,		SET_S,		"S 时间",			0 , 		1000,				50 ,		0,			0,			GROUP_SET_FA},
+	{SETTYPE_F,		SET_S,		"选线跳闸时间",	0 , 		100,				5 ,		0,			0,			GROUP_SET_FA},
+	{SETTYPE_F,		SET_S,		"选线重合时间",	0 , 		100,				3 ,		0,			0,			GROUP_SET_FA},
+
+	{SETTYPE_LIST,	SET_NULL,	"失压分闸投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_FA},
+	{SETTYPE_F,		SET_S,		"失压分闸时间",	0.1 , 	10.0,			10.0 ,	0,			0,			GROUP_SET_FA},
+	{SETTYPE_UINT,	SET_NULL,	"失压次数", 		1 , 		3,				1,		0,			0,			GROUP_SET_FA},
+	{SETTYPE_LIST,	SET_NULL,	"合后零压分闸投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_FA},
+
+	{SETTYPE_LABEL,	SET_NULL,	"合环", 			0 , 		0,				0 ,		0,			0,			GROUP_SET_TQHZ},
+	{SETTYPE_LIST,	SET_NULL,	"合环投退", 		0 , 		HHFunListNum-1,	0,		HHFunList,	HHFunListNum,GROUP_SET_TQHZ},
+	{SETTYPE_F,		SET_S,		"合环时间",		0.1 , 	100.0,			3.0 ,		0,			0,			GROUP_SET_TQHZ},
+	{SETTYPE_F,		SET_U,		"合环压差", 		0.0 , 	100.0,			10.0 ,	0,			0,			GROUP_SET_TQHZ},
+	{SETTYPE_F,		SET_ANG,	"合环角差",		0.0 , 	100.0,			5.0 ,		0,			0,			GROUP_SET_TQHZ},
+	{SETTYPE_F,		SET_HZ,		"合环频差", 		0.0 , 	100.0,			0.0 ,	0,			0,			GROUP_SET_TQHZ},
+
+	{SETTYPE_LABEL,	SET_NULL,	"电流越限", 		0 , 		0,				0 ,		0,			0,			GROUP_SET_OVI},
+	{SETTYPE_LIST,	SET_NULL,	"电流重载投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_OVI},
+	{SETTYPE_F,		SET_A,		"电流重载定值", 	0.1 , 	10.0,			0.7 ,		0,			0,			GROUP_SET_OVI},
+	{SETTYPE_F,		SET_S,		"电流重载时间",	0.0 , 	10000.0,			6 ,	0,			0,			GROUP_SET_OVI},
+	{SETTYPE_LIST,	SET_NULL,	"电流过载投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_OVI},
+	{SETTYPE_F,		SET_A,		"电流过载定值", 	0.1 , 	10.0,			1.0 ,		0,			0,			GROUP_SET_OVI},
+	{SETTYPE_F,		SET_S,		"电流过载时间",	0.0 , 	10000.0,			3 ,	0,			0,			GROUP_SET_OVI},
+
+	{SETTYPE_LIST,	SET_NULL,	"电流越限投退", 	0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_OVI},
+	{SETTYPE_F,		SET_A,		"电流越限定值", 	0.1 , 	10.0,			0.75 ,		0,			0,			GROUP_SET_OVI},
+	{SETTYPE_F,		SET_S,		"电流越限时间",	0.0 , 	10000.0,			10 ,	0,			0,			GROUP_SET_OVI},
+
+	{SETTYPE_LABEL,	SET_NULL,	"CT变比", 		0 , 		0,				0 ,		0,			0,			GROUP_SET_CT},
+	{SETTYPE_F,		SET_A,		"相CT一次额定", 	1.0 , 	2000.0,			600.0 ,	0,			0,			GROUP_SET_CT},
+	{SETTYPE_F,		SET_A,		"相CT二次额定", 	1.0 , 	10.0,			5.0 ,		0,			0,			GROUP_SET_CT},
+	{SETTYPE_F,		SET_A,		"零序CT一次额定", 	1.0 , 	500.0,			50.0 ,	0,			0,			GROUP_SET_CT},
+	{SETTYPE_F,		SET_A,		"零序CT二次额定", 	1.0 , 	10.0,			5.0 ,		0,			0,			GROUP_SET_CT},
+
+	{SETTYPE_LABEL,	SET_NULL,	"接地", 			0 , 	0,				0 ,		0,			0,			GROUP_SET_JD},
+	{SETTYPE_LIST,	SET_NULL,	"间歇性单相接地检测", 	0 , 	TTListNum-1,	0,		TTList, 	TTListNum,	GROUP_SET_JD},
+	{SETTYPE_F,		SET_S,		"单相接地短延时", 	1.0 , 	100.0,			10.0 ,	0,			0,			GROUP_SET_JD},
+	{SETTYPE_UINT,	SET_NULL,	"短延时接地故障次数", 	1.0 , 	10.0,			3.0 ,	0,			0,			GROUP_SET_JD},
+	{SETTYPE_F,		SET_S,		"单相接地长延时", 	1.0 , 	100.0,			10.0 ,	0,			0,			GROUP_SET_JD},
+	{SETTYPE_UINT,	SET_NULL,	"长延时接地故障次数", 	1.0 , 	10.0,			3.0 ,	0,			0,			GROUP_SET_JD},
+	{SETTYPE_LIST,	SET_NULL,	"接地方式选择", 		0 , 	JDTYPENum-1,	1,		JDTYPE,		JDTYPENum,	GROUP_SET_JD},
+
+	{SETTYPE_LABEL,	SET_NULL,	"录波",		0 , 	0,				0 ,		0,		0,			GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"过流故障启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"线路失压启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"零序电压启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"零序过流启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"接地故障启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE}, 
+	{SETTYPE_LIST,	SET_NULL,	"零压突变启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"零流突变启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"重合闸启动",		0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"开关变位启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_LIST,	SET_NULL,	"短路故障启动", 	0 , 	TTListNum-1,	0 ,		TTList,	TTListNum,	GROUP_SET_RCD_WAVE},
+	{SETTYPE_F,		SET_U,		"零压突变定值", 	0.01, 	220.0,			6.5 ,	0,		0,			GROUP_SET_RCD_WAVE},
+	{SETTYPE_F,		SET_A,		"零流突变定值", 	0.01, 	100.0,			5.0 ,	0,		0,			GROUP_SET_RCD_WAVE},
+
+	{SETTYPE_LABEL,	SET_NULL,	"其它", 			0 , 		0,				0 ,		0,			0,			GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"开关极性", 		0 , 		DIRListNum-1,		0,		DIRList, 	DIRListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"方向自适应判断", 	0 , 		TTListNum-1,		0,		TTList, 	TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"电压组2投退", 		0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"未储能告警", 		0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"气压低闭锁分合闸", 	0 , 		TTListNum-1,		0,		TTList, 	TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"开出软压板", 		0 , 		TTListNum-1,		1,		TTList,		TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"多次分闸闭锁合闸", 		0 , 		TTListNum-1,		0,		TTList,		TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_UINT,	SET_NULL,	"多次分闸次数", 		1 , 		5,				1,		0,			0,			GROUP_SET_OTHERS},
+	{SETTYPE_F,		SET_S,		"多次分闸时间",			0.1 , 	  600.0,			30.0 ,	0,			0,			GROUP_SET_OTHERS},
+#if defined (SET_PROFE_2XB_PERCENT) //专业检测  百分比表示
+	{SETTYPE_UINT,	SET_PER,	"谐波制动系数", 		1 , 	100,			10 ,	0,			0,			GROUP_SET_OTHERS},
+#else
+	{SETTYPE_F,		SET_NULL,	"谐波制动系数", 		0.1 , 	1.0,			0.15 ,	0,			0,			GROUP_SET_OTHERS},
+#endif
+	{SETTYPE_LIST,	SET_NULL,	"二次谐波制动", 		0 , 	TTListNum-1,	0,		TTList,		TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"控回断线检测", 		0 , 	TTListNum-1,	0,		TTList,		TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_F,		SET_S,		"控回检测时间",		0.1 , 	600.0,			5.0 ,	0,			0,			GROUP_SET_OTHERS},
+	{SETTYPE_LIST,	SET_NULL,	"湖南停复电逻辑", 	0 , 	TTListNum-1,	0,		TTList,		TTListNum,	GROUP_SET_OTHERS},
+
+	{SETTYPE_LIST,	SET_NULL,	"CT断线投退", 	0 , 	TTListNum-1,		0 ,		TTList,		TTListNum,	GROUP_SET_OTHERS},
+	{SETTYPE_F,		SET_S,		"CT断线时间", 	1.0 , 	100.0,			5.0 ,		0,			0,			GROUP_SET_OTHERS},
+#else
+
 	{SETTYPE_LABEL,	SET_NULL,	"保护控制字", 				0 , 		0,				0 ,		0,			0,				GROUP_SET_BHTT,0X0000, NULL_R},
 #if !defined GD_AREA_ZHONGSHAN && !defined GD_AREA_ECZD_2020 && !defined FUNC_LINE_SEL_TY_SEL	//中山局/河源局将此定值放至公共定值 &&非二次指导意见
 		{SETTYPE_LIST,	SET_NULL,	"负荷侧PT接线方式", 		1 , 		TPT_TypeNum-1,	1,		TPT_Type,	TPT_TypeNum,	GROUP_SET_BHTT,0X500A, UINT_R},
@@ -2608,6 +2847,7 @@ const  TSETTABLE tSwSetTable[]=
 	{SETTYPE_F, 	SET_S,		"再次传动时间",			  0.0,	100.0,			10.0,	0,		0,			GROUP_SET_DRIVE,0X0000, FLOAT_R},
 #endif
 
+#endif
 };
 const int SW_SET_NUMBER  = sizeof( tSwSetTable ) / sizeof(tSwSetTable[0]);  // 定值数目
 const int SET_NUMBER  = ((sizeof(tSwSetTable) / sizeof(tSwSetTable[0]))*SWITCH_NUM_MAX+sizeof(tPubSetTable) / sizeof(tPubSetTable[0]));
@@ -3540,7 +3780,7 @@ void fresh_set_soe(WORD soe_no,bool bY,bool bFirst,int sw)
 	}
 }
 
-
+#ifndef GW_AREA_MAIN_2021
 #define SW_AC_SET_NUM  (SW_AC_IN_SET_END-SW_AC_IN_SET_BEGIN+1)
 const short sw_ac_set_index[SW_AC_SET_NUM]=
 {
@@ -3590,7 +3830,7 @@ void fresh_sw_ac_set(	SET_VALUE *psetbuf,int sw)
 		//}
 	}
 }
-
+#endif
 /**************************************************************************
 函数名称:get_yx_ac
 创建日期:2021.11
@@ -3623,6 +3863,12 @@ bool  MakeRunSet(bool bFirst)
 	float fKI,fKI0,fKU[PUB_AC_NUM],fIn,fUn,fU0;  // 电流电压系数及额定电流值
 	int sw,i;
 	bool bRet;
+
+#ifdef GW_AREA_MAIN_2021
+	float i2xs;
+	static bool bTT_BH_Init[SWITCH_NUM_MAX] = {false};
+#endif
+
 #ifdef CPU_FUXI
 	SHM_FREQ_TR_T freq_tr;
 #endif	
@@ -3694,10 +3940,11 @@ bool  MakeRunSet(bool bFirst)
 		fKI0= (float)(g_ui[ui_begin + SW_AC_I0].m2_factor_k)/256.0;	
 		ptSet->dTBLValue[sw]	=GetSetNormal(psetbuf[CSTSET_TBLQD].ff,fIn); 		// 突变量
 		ptSet->dIWL_SQR[sw]	=GetSetSQR(psetbuf[CSTSET_IWL].ff,fIn); 
-		
+	#ifndef GW_AREA_MAIN_2021
 		#ifndef DISP_CHZOKCHR_2_SW		
 			ptSet->tSwSet[sw].dT_chz_ok = GetSetTIME(psetbuf[CSTSET_CHZ_OK].ff);//GetSetTIME(180); //重合闸确认时间,默认180秒
 		#endif
+	#endif
 		#ifdef FUN_CHZ_TOPEN 
 		ptSet->tSwSet[sw].dT_chz_Topen = GetSetTIME(psetbuf[CSTSET_CHZ_OPEN].ff);//GetSetTIME(180); //重合闸开放时间,默认300秒
 		#endif
@@ -3980,7 +4227,7 @@ bool  MakeRunSet(bool bFirst)
 	ptSet->bTT_HILEBERT =  (((WORD)psetbuf[SET_HILBERT].ff==1 )?true:false); 
 	ptSet->bTT_PUB_BH	=  (((WORD)psetbuf[SET_PUB_BH_TT].ff==1 )?true:false); 
 	// U0 TODO 对接逻辑
-	ptSet->dOverU0	= GetSetSQR(psetbuf[SET_U0_U].ff,fKU[PUB_AC_U01]);	
+	ptSet->dOverU0	= GetSetSQR(psetbuf[SET_PUB_U0_U].ff,fKU[PUB_AC_U01]);	
 	ptSet->dOverU0_fh = _Mul_Div_U(ptSet->dOverU0,		96, 100);		//0.96=0.98*0.98
 
 	// 默认TV互感器使用线电压额定值100v
@@ -4499,6 +4746,374 @@ bool  MakeRunSet(bool bFirst)
 
 	
 	//开关定值
+#ifdef GW_AREA_MAIN_2021
+	for(sw=0;sw<SWITCH_NUM_MAX;sw++)
+	{
+		int buf_offset=0;
+		int ui_begin;
+		ui_begin = UI_SW_INDEX_BEGIN(sw);
+		fKI  = (float)(g_ui[ui_begin + SW_AC_IA].m2_factor_k)/256.0; 	
+		fKI0= (float)(g_ui[ui_begin + SW_AC_I0].m2_factor_k)/256.0;	
+		
+		for(i=0;i<OC_NUMBER;i++) // 过流类定值
+		{
+			OC_SET *poc = &ptSet->tSwSet[sw].tOcSet[i];
+			int index=0;
+			if(i==OC_GL1||i==OC_GL2||i==OC_GL3)
+			{
+				if(i==OC_GL1)index=SET_GL1_GJ;
+				if(i==OC_GL2)index=SET_GL2_GJ;
+				if(i==OC_GL3)index=SET_GL3_GJ;
+				poc->bTT_Gj=(((WORD)psetbuf[index+0+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);   			// 告警
+				poc->bTT_Tz=(((WORD)psetbuf[index+1+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);    
+				poc->dIgl=GetSetSQR(psetbuf[index+2+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI);		     				// 过流定值
+				poc->dTgl=GetSetTIME(psetbuf[index+3+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+				poc->bTT_Path=(((WORD)psetbuf[index+4+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);   			// 方向
+				poc->bTT_Dir=(((WORD)psetbuf[index+5+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);  
+
+			}
+			
+			if (i==OC_DL||i==OC_LX1||i==OC_LX2||i==OC_LX3||i==OC_LL)
+			{
+				if(i==OC_DL)index=SET_DL_GJ_TT;
+				if(i==OC_LX1)index=SET_LX1_GJ;
+				if(i==OC_LX2)index=SET_LX2_GJ;
+				if(i==OC_LX3)index=SET_LX3_GJ;
+				if(i==OC_LL)index=SET_LX_GJ_TT;
+				poc->bTT_Gj=(((WORD)psetbuf[index+0+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);   			// 告警
+				poc->bTT_Tz=(((WORD)psetbuf[index+1+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);   
+				if(i == OC_DL) 
+				{
+					poc->dIgl=GetSetSQR(psetbuf[index+2+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI);		     			// 过流定值
+				}
+				else
+				{
+					// 零序与相电流转换系数不一样,要区分
+					poc->dIgl=GetSetSQR(psetbuf[index+2+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI0);		     			//
+				}
+				poc->dTgl=GetSetTIME(psetbuf[index+3+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+
+			}
+
+			if(i==OC_GLJS||i==OC_LXJS||i==OC_LYJS)
+			{
+				if(i==OC_GLJS)index=SET_GLJS_TT;
+				if(i==OC_LXJS)index=SET_LXJS_TT;
+				if(i==OC_LYJS)index=SET_LYJS_TT;	
+				
+				poc->bTT_Tz=(((WORD)psetbuf[index+0+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);   			// 跳闸投退
+				poc->bTT_Gj=poc->bTT_Tz;   
+				if (index==SET_LYJS_TT)
+				{
+					poc->dIgl=GetSetSQR(psetbuf[index+1+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKU[PUB_AC_U01]);		     // 零压单独处理
+					poc->dTgl=GetSetTIME(psetbuf[index+2+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+					ptSet->tSwSet[sw].dT_xdl_hjs = poc->dTgl;
+				}
+				else
+				{
+					if(i == OC_LXJS)
+					{
+						poc->dIgl=GetSetSQR(psetbuf[index+1+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI0);		     			//
+					}
+					else
+					{
+						poc->dIgl=GetSetSQR(psetbuf[index+1+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI);		     			// 过流定值
+					}
+					poc->dTgl=GetSetTIME(psetbuf[index+2+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+				}
+			}
+
+			if(i==OC_OVLOAD||i==OC_DLGZ||i==OC_DLYX)
+			{
+				if(ptSet->bTT_PUB_SET_TO_SW)
+				{
+					// 此处这样处理是为了满足,部分地区遥调这几个定值放在开关定值
+					// 有些地区遥调这几个定值放在公共定值
+					// 为了此版程序都兼容这两个情况增加此处赋值处理。
+					if(i==OC_OVLOAD)index=SET_PUB_OVLOAD_TT;
+					if(i==OC_DLGZ)index=SET_PUB_DLGZ_TT;	
+					if(i==OC_DLYX)index=SET_PUB_DLYX_TT;
+					poc->bTT_Tz=(((WORD)psetbuf[index].ff==1 )?true:false);   			// 跳闸投退
+					poc->bTT_Gj=poc->bTT_Tz;  
+					poc->dIgl=GetSetSQR(psetbuf[index+1].ff,fKI);		     			// 过流定值
+					poc->dTgl=GetSetTIME(psetbuf[index+2].ff);
+				}
+				else
+				{
+					if(i==OC_OVLOAD)index=SET_OVLOAD_TT;
+					if(i==OC_DLGZ)index=SET_DLGZ_TT;	
+					if(i==OC_DLYX)index=SET_DLYX_TT;
+					poc->bTT_Tz=(((WORD)psetbuf[index+0+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);   			// 跳闸投退
+					poc->bTT_Gj=poc->bTT_Tz;  
+					poc->dIgl=GetSetSQR(psetbuf[index+1+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI);		     			// 过流定值
+					poc->dTgl=GetSetTIME(psetbuf[index+2+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+				}
+			}
+
+			if(i==OC_GLBS)
+			{
+				poc->bTT_Tz=(((WORD)psetbuf[SET_BSTZ_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);   		// 跳闸投退
+				poc->bTT_Gj=poc->bTT_Tz;   
+				poc->dIgl=GetSetSQR(psetbuf[SET_BSTZ_I+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI);		     			// 过流定值
+				poc->dTgl=0;
+			}
+			
+			poc->dIgl_fh= _Mul_Div_U(poc->dIgl,	96, 100);		//0.96=0.98*0.98;        		//过流定值返回值
+
+		}
+
+		// 零压保护
+		{
+			VOL_SET *pu0 = &ptSet->tSwSet[sw].tU0Set;
+			buf_offset = sw*SW_SET_NUMBER+PUB_SET_NUMBER;
+			// buf_offset = 0*SW_SET_NUMBER + PUB_SET_NUMBER;  //由0开关来代替此项公共参数, 2022-03-07
+			pu0->bTT = (((WORD)psetbuf[SET_LY_GJ_TT + buf_offset].ff==1 )?true:false); // 零压告警
+			pu0->bTz = (((WORD)psetbuf[SET_LY_TZ_TT + buf_offset].ff==1 )?true:false); // 零压跳闸
+			pu0->dTVol=GetSetTIME(psetbuf[SET_LY_T  + buf_offset].ff);
+			pu0->dUVol	= ptSet->dOverU0;	
+			pu0->dUVol_fh = ptSet->dOverU0_fh;		//0.96=0.98*0.98
+		}
+		
+		//录波长度
+		{
+		#if(EN_REC_MORE_WAVES==1)
+			bool  bTT1, bTT2, bTT3;
+			DWORD dT1,  dT2,  dT3;
+			TSETSW *pSwSet = &ptSet->tSwSet[sw];
+
+			//过流
+			bTT1 = pSwSet->tOcSet[OC_GL1].bTT_Gj || pSwSet->tOcSet[OC_GL1].bTT_Tz;
+			bTT2 = pSwSet->tOcSet[OC_GL2].bTT_Gj || pSwSet->tOcSet[OC_GL2].bTT_Tz;
+			bTT3 = pSwSet->tOcSet[OC_GL3].bTT_Gj || pSwSet->tOcSet[OC_GL3].bTT_Tz;
+
+			dT1 = 0; dT2 = 0; dT3 = 0;
+			if(bTT1)
+				dT1 = (DWORD)(psetbuf[SET_GL1_T + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff *1000);
+
+			if(bTT2)
+				dT2 = (DWORD)(psetbuf[SET_GL2_T + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff *1000);
+
+			if(bTT3)
+				dT3 = (DWORD)(psetbuf[SET_GL3_T + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff *1000);
+
+			g_record_GL_waves[sw] = rcd_get_max_waves(dT1, dT2, dT3);
+
+			//零序
+			bTT1 = pSwSet->tOcSet[OC_LX1].bTT_Gj || pSwSet->tOcSet[OC_LX1].bTT_Tz;
+			bTT2 = pSwSet->tOcSet[OC_LX2].bTT_Gj || pSwSet->tOcSet[OC_LX2].bTT_Tz;
+			bTT3 = pSwSet->tOcSet[OC_LX3].bTT_Gj || pSwSet->tOcSet[OC_LX3].bTT_Tz;
+
+			dT1 = 0; dT2 = 0; dT3 = 0;
+			if(bTT1)
+				dT1 = (DWORD)(psetbuf[SET_LX1_T + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff *1000);
+
+			if(bTT2)
+				dT2 = (DWORD)(psetbuf[SET_LX2_T + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff *1000);
+
+			if(bTT3)
+				dT3 = (DWORD)(psetbuf[SET_LX3_T + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff *1000);
+
+			g_record_LX_waves[sw] = rcd_get_max_waves(dT1, dT2, dT3);
+		#endif
+		}
+
+		// 重合闸
+		{
+			bool bch1,bch2;
+			bch1	=(((WORD)psetbuf[SET_CH_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false); // 一次重合闸
+			bch2	=(((WORD)psetbuf[SET_CH2_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);// 多次重合闸
+			ptSet->tSwSet[sw].bTT_CHZ=bch1||bch2;														// 设置多次重合闸和非一次重合时间,完全是应付电科院测试,若多次不投,和以前一样			
+			ptSet->tSwSet[sw].dTCH[0]	= GetSetTIME(psetbuf[SET_CH_T1+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+			if(bch2)
+			{
+				ptSet->tSwSet[sw].dTCH[1]	= GetSetTIME(psetbuf[SET_CH_TN+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+				ptSet->tSwSet[sw].dTCH[2]	= GetSetTIME(psetbuf[SET_CH_TN+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+			}
+			else
+			{
+				ptSet->tSwSet[sw].dTCH[1]	= GetSetTIME(psetbuf[SET_CH_T2+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+				ptSet->tSwSet[sw].dTCH[2]	= GetSetTIME(psetbuf[SET_CH_T3+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+			}
+			ptSet->tSwSet[sw].dTCHBS	= GetSetTIME(psetbuf[SET_CHBS_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+			ptSet->tSwSet[sw].dTCHOK	= GetSetTIME(psetbuf[SET_CHOK_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+			ptSet->tSwSet[sw].dARTimes=(WORD)psetbuf[SET_AR_TIMES+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;	//重合次数
+			ptSet->tSwSet[sw].bTT_TTCH	=(((WORD)psetbuf[SET_TTCH_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);		//偷跳启动重合
+			ptSet->tSwSet[sw].bTT_GZBSCH =(((WORD)psetbuf[SET_CH_DLBS_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);		//大电流闭锁重合
+			ptSet->tSwSet[sw].dICH = GetSetSQR(psetbuf[SET_CH_DLBS_I+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI);		     			//大电流闭锁定值
+			ptSet->tSwSet[sw].dICH_fh = _Mul_Div_U(ptSet->tSwSet[sw].dICH,	96, 100);		     									//大电流闭锁定值返回值
+			ptSet->tSwSet[sw].dCKModes=(WORD)psetbuf[SET_CH_CKFS+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;	//重合闸出口方式
+			ptSet->tSwSet[sw].dTCHZK	= GetSetTIME(psetbuf[SET_JS_BH_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		}
+
+		//小电流接地
+		ptSet->tSwSet[sw].bTT_xdlgj =(((WORD)psetbuf[SET_XDLGJ_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);  
+		ptSet->tSwSet[sw].bTT_xdltz =(((WORD)psetbuf[SET_XDLTZ_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false); 
+		ptSet->tSwSet[sw].bTT_xdlsg =(((WORD)psetbuf[SET_XDLSG_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);  
+
+		if(g_ui[UI_SW_INDEX(sw,SW_AC_I0)].chn_index == CFG_ADC_CHANNEL_ZERO)
+		{
+			ptSet->tSwSet[sw].dI_xdl_zt = -1;
+		}
+		else
+		{
+			// 定值由峰值改为有效值
+			// ptSet->tSwSet[sw].dI_xdl_zt = GetSetNormal(psetbuf[SET_XDL_I+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,1/(g_ui[UI_SW_INDEX(sw,SW_AC_I0)].e_factor0*1.4142));
+			ptSet->tSwSet[sw].dI_xdl_zt = GetSetNormal(psetbuf[SET_XDL_I+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,1/(g_ui[UI_SW_INDEX(sw,SW_AC_I0)].e_factor0));
+		}
+		ptSet->tSwSet[sw].dI_xdl 	= GetSetSQR(psetbuf[SET_XDL_I+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKI0);		     			//过流定值
+		ptSet->tSwSet[sw].dI_xdl_fh = _Mul_Div_U(ptSet->tSwSet[sw].dI_xdl,	96, 100);
+		ptSet->tSwSet[sw].dT_xdl_T  = psetbuf[SET_XDL_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;			// 由于未使用系统TICK 故采用实际时间 add by zhy 20210517
+		ptSet->tSwSet[sw].dT_xdl_GT  = psetbuf[SET_XDL_GT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;
+#if (defined RECORD_SW_U0TB)
+		ptSet->tSwSet[sw].dU_xdl_u0TB    = GetSetSQR(psetbuf[SET_U0_TB + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff, fKU[PUB_AC_U01]);
+		ptSet->tSwSet[sw].dU_xdl_u0TB_fh = _Mul_Div_U(ptSet->tSwSet[sw].dU_xdl_u0TB, 96, 100);	//0.96=0.98*0.98
+#endif
+
+		// 零序电流反极性
+		ptSet->tSwSet[sw].bTT_lxpolar =(((WORD)psetbuf[SET_LXPOLAR_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);  
+
+		ptSet->tSwSet[sw].bTT_BH	=((WORD)psetbuf[SET_BH_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff>=1 )?true:false;     //保护总投退
+
+		if (!bTT_BH_Init[sw])
+		{
+			bTT_BH_Init[sw] = true;
+			//TODO 增加遥信 EWen 
+			// soe_ev_set(EV_SW_BH_TT + sw*EV_SW_NUM, ptSet->tSwSet[sw].bTT_BH&&ptSet->bTT_PUB_BH);
+			// soe_ev_set(EV_CENTER_FA_TT + sw*EV_SW_NUM, ptSet->tSwSet[sw].bTT_BH&&ptSet->bTT_PUB_BH);
+		}
+		// 配网自动化功能
+
+#if  0 //#if defined(SET_PROFE_ISPECTION)  //暂先各自投退, 2022-03-18
+		ptSet->tSwSet[sw].bTT_FA	= ptSet->tSwSet[sw].bTT_BH;
+#else
+		ptSet->tSwSet[sw].bTT_FA	= ((DWORD)psetbuf[SET_FA_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1)?true:false; // FA功能
+#endif
+
+		ptSet->tSwSet[sw].bSW_F		= ((DWORD)psetbuf[SET_SL_F+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1)?true:false; // 0=分段联络  1=分界选择
+		ptSet->tSwSet[sw].bSW_L		= ((DWORD)psetbuf[SET_S_L+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1)?true:false; // 分段联络选择
+		ptSet->tSwSet[sw].bFA_auto	= ((DWORD)psetbuf[SET_FA_TYPE+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==0)?true:false ; // 自适应
+		ptSet->tSwSet[sw].bFA_VI		= ((DWORD)psetbuf[SET_FA_TYPE+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1)?true:false;	//  电压型
+		ptSet->tSwSet[sw].bFA_VIT		= ((DWORD)psetbuf[SET_FA_TYPE+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==2)?true:false ; //  电压电流型
+		ptSet->tSwSet[sw].FA_type 		= (DWORD)psetbuf[SET_FA_TYPE+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;
+		ptSet->tSwSet[sw].bFTU		= ((DWORD)psetbuf[SET_FTU_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1)?true:false ; // 
+		ptSet->tSwSet[sw].bauto_gl		=((DWORD)psetbuf[SET_AUTOGL_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1)?true:false ; // 
+		ptSet->tSwSet[sw].bauto_lx		= ((DWORD)psetbuf[SET_AUTOLX_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1)?true:false ; // 
+
+		ptSet->tSwSet[sw].dT_X		= GetSetTIME(psetbuf[SET_X_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		ptSet->tSwSet[sw].dT_Y		= GetSetTIME(psetbuf[SET_Y_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		ptSet->tSwSet[sw].dT_C		= GetSetTIME(psetbuf[SET_C_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		ptSet->tSwSet[sw].dT_S		= GetSetTIME(psetbuf[SET_S_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+
+		//ptSet->tSwSet[sw].dT_Z		= GetSetTIME(psetbuf[SET_Y_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		ptSet->tSwSet[sw].CTDX_type = (DWORD)psetbuf[SET_CT_DX_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;				// CT断线类型
+		ptSet->tSwSet[sw].dCTDX_T	= GetSetTIME(psetbuf[SET_CT_DX_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);			// CT断线时间
+		
+	
+		ptSet->tSwSet[sw].dIHH_GL = MIN_3(ptSet->tSwSet[sw].tOcSet[OC_GL1].dIgl,ptSet->tSwSet[sw].tOcSet[OC_GL2].dIgl,ptSet->tSwSet[sw].tOcSet[OC_GL3].dIgl);
+		ptSet->tSwSet[sw].dIHH_GLfh= MIN_3(ptSet->tSwSet[sw].tOcSet[OC_GL1].dIgl_fh,ptSet->tSwSet[sw].tOcSet[OC_GL2].dIgl_fh,ptSet->tSwSet[sw].tOcSet[OC_GL3].dIgl_fh);
+				
+		ptSet->tSwSet[sw].dT_xxtz		= GetSetTIME(psetbuf[SET_XXTZ_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		ptSet->tSwSet[sw].dT_xxch		= GetSetTIME(psetbuf[SET_XXCH_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+
+		ptSet->tSwSet[sw].bTT_LostVot =(((WORD)psetbuf[SET_LOST_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);
+		ptSet->tSwSet[sw].bTT_LostVot &= ptSet->tSwSet[sw].bTT_FA;  //当就地FA退出时,失压分闸功能须退出
+		ptSet->tSwSet[sw].dlvTimes = (WORD)psetbuf[SET_LOST_TIMES+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;
+		ptSet->tSwSet[sw].dTlostvot	= GetSetTIME(psetbuf[SET_LOST_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+
+		ptSet->tSwSet[sw].bTT_InterJd =(((WORD)psetbuf[SET_JDGZ_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);
+		ptSet->tSwSet[sw].dNJDSNum    = (WORD)psetbuf[SET_JDGZ_SNUM+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;
+		ptSet->tSwSet[sw].dTJDSTimes  = GetSetTIME(psetbuf[SET_JDGZ_ST+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		ptSet->tSwSet[sw].dNJDLNum    = (WORD)psetbuf[SET_JDGZ_LNUM+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;
+		ptSet->tSwSet[sw].dTJDLTimes  = GetSetTIME(psetbuf[SET_JDGZ_LT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		ptSet->tSwSet[sw].dJDTYPE     = (WORD)(psetbuf[SET_JDTYPE+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+
+		ptSet->tSwSet[sw].bTT_OverU0=(((WORD)psetbuf[SET_TT_OVERU0+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);
+
+		ptSet->tSwSet[sw].bTT_BSHH=(((WORD)psetbuf[SET_TT_TQ+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);	// 同期投退
+		ptSet->tSwSet[sw].bTT_TQ	=(((WORD)psetbuf[SET_TT_TQ+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==2 )?true:false);	// 同期投退
+		ptSet->tSwSet[sw].dTQ_U_FZ	= GetSetNormal(psetbuf[SET_TQ_U+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff,fKU[PUB_AC_US1]);	
+		ptSet->tSwSet[sw].dT_TQ		= GetSetTIME(psetbuf[SET_TQ_T+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+		ptSet->tSwSet[sw].dTQ_U_FZ_fh= _Mul_Div_U(ptSet->tSwSet[sw].dTQ_U_FZ,	104,100);	
+		ptSet->tSwSet[sw].dTQ_ANGLE_FZ	= (qs16)(psetbuf[SET_TQ_ANGLE+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff*65536);	// 合环角差
+		ptSet->tSwSet[sw].dTQ_FREQ_FZ	= (qs16)(psetbuf[SET_TQ_FREQ+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff*65536);	// 合环频差
+
+
+		ptSet->tSwSet[sw].bTT_TzZero=(((WORD)psetbuf[SET_GLZERO_TZ+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);  
+		ptSet->tSwSet[sw].bTT_WCN	=(((WORD)psetbuf[SET_TT_TWCN+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false);//&ptSet->bFUN_TWCN;	//弹簧未储能
+		ptSet->tSwSet[sw].bTT_Current_Inv =((WORD)psetbuf[SET_CURRENT_INV_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;   
+		ptSet->tSwSet[sw].bTT_Dir_Auto =((WORD)psetbuf[SET_DIR_AUTO_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;
+		ptSet->tSwSet[sw].bTT_Power_v2 =((WORD)psetbuf[SET_POWER_V2_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;   
+		ptSet->tSwSet[sw].bTT_QYD_BS =((WORD)psetbuf[SET_QYD_BS_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;   
+
+		//录波
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_SD] = 1;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_QD] = 1;
+		buf_offset = sw*SW_SET_NUMBER+PUB_SET_NUMBER;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_GLGZ] = ((WORD)psetbuf[SET_WAVE_GLGZ_TT + buf_offset].ff==1 )?true:false;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_XLSY] = ((WORD)psetbuf[SET_WAVE_XLSY_TT + buf_offset].ff==1 )?true:false;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_LXDY] = ((WORD)psetbuf[SET_WAVE_LXDY_TT + buf_offset].ff==1 )?true:false;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_LXGL] = ((WORD)psetbuf[SET_WAVE_LXGL_TT + buf_offset].ff==1 )?true:false;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_LLTB] = ((WORD)psetbuf[SET_WAVE_LLTB_TT + buf_offset].ff==1 )?true:false;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_CHZ]  = ((WORD)psetbuf[SET_WAVE_CHZ_TT  + buf_offset].ff==1 )?true:false;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_KGBW] = ((WORD)psetbuf[SET_WAVE_KGBW_TT + buf_offset].ff==1 )?true:false;
+		ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_DLGZ] = ((WORD)psetbuf[SET_WAVE_DLGZ_TT + buf_offset].ff==1 )?true:false;
+		//TODO 增加定值对接 EWen
+		// ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_JDGZ] = ((WORD)psetbuf[SET_WAVE_JDGZ_TT + buf_offset].ff==1 )?true:false;
+		// ptSet->tSwSet[sw].bTT_rcd_type[RECORD_TYPE_LYTB] = ((WORD)psetbuf[SET_WAVE_LYTB_TT + buf_offset].ff==1 )?true:false;
+
+		ptSet->tSwSet[sw].dU_u0TB = (DWORD)(psetbuf[SET_U0_TB + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff*65536);
+		ptSet->tSwSet[sw].dI_i0TB = (DWORD)(psetbuf[SET_I0_TB + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff*65536);
+		// ptSet->tSwSet[sw].dU_u0TB    = GetSetSQR(psetbuf[SET_U0_TB + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff, fKU[PUB_AC_U01]);
+		// ptSet->tSwSet[sw].dU_u0TB_fh = _Mul_Div_U(ptSet->tSwSet[sw].dU_u0TB, 96, 100);	//0.96=0.98*0.98
+		// ptSet->tSwSet[sw].dI_i0TB    = GetSetSQR(psetbuf[SET_I0_TB + sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff, fKI0);
+		// ptSet->tSwSet[sw].dI_i0TB_fh = _Mul_Div_U(ptSet->tSwSet[sw].dI_i0TB, 96, 100);	//0.96=0.98*0.98
+
+		{ //软压板状态处理
+			bool bYB;
+			WORD code=EV_YKYB_TT+EV_SW_NUM*sw;			
+			bYB=((WORD)psetbuf[SET_YB_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;   
+			ptSet->tSwSet[sw].bTT_YB=bYB;
+			if(bFirst)
+			{
+				soe_ev_set(code,bYB);	
+
+			}
+			else
+			{
+				if(bYB)  // 开出压板状态更新到事件记录中
+				{
+					if(!soe_check(code))
+					{
+						soe_record_ev(code,1,0,0,0);
+					}
+				}
+				else
+				{
+					if(soe_check(code))
+					{
+						soe_record_ev(code,0,0,0,0);
+					}
+				}
+			}
+		}
+		
+		ptSet->tSwSet[sw].bTT_HZ_BS=((WORD)psetbuf[SET_HZ_BS_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;  // 多次分闸闭锁合闸	modify by zhy 2021年6月22日
+		ptSet->tSwSet[sw].dFZNum = (WORD)psetbuf[SET_FZ_FRE+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff;
+		ptSet->tSwSet[sw].dFZTimes	= GetSetTIME(psetbuf[SET_FZ_TIME+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+
+	#if defined (SET_PROFE_2XB_PERCENT)
+		ptSet->tSwSet[sw].dXBCOE 	= GetSetSQR(psetbuf[SET_2XBCOE +sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff/100, 256);  // 二次谐波制动系数
+	#else
+	  	ptSet->tSwSet[sw].dXBCOE 	= GetSetSQR(psetbuf[SET_2XBCOE +sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff, 256);  	// 二次谐波制动系数
+	#endif
+		ptSet->tSwSet[sw].bTT_2XBBS=((WORD)psetbuf[SET_TT_2XB+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;  	// 二次谐波制动
+
+		ptSet->tSwSet[sw].bTT_KH_JC=((WORD)psetbuf[SET_KHJC_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;  // 控回断线检测投退	modify by zhy 2021年7月1日
+		ptSet->tSwSet[sw].dKHJCTimes = GetSetTIME(psetbuf[SET_KH_TIME+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff);
+
+		ptSet->tSwSet[sw].bTT_TFD=((WORD)psetbuf[SET_TFD_TT+sw*SW_SET_NUMBER+PUB_SET_NUMBER].ff==1 )?true:false;  // 湖南停复电投退	add by zhy 2021年12月9日
+	}
+#else
 	for(sw=0;sw<SWITCH_NUM_MAX;sw++)
 	{
 		int ui_begin;
@@ -5684,6 +6299,7 @@ bool  MakeRunSet(bool bFirst)
 	#endif
 
     }
+#endif
     // 无压定值为0.3倍的电压值
     ptSet->dU02V_SQR    =(DWORD)rt_round((0.8*fKU[PUB_AC_U01])*(0.8*fKU[PUB_AC_U01]));  // 16电压
 #if 0
@@ -5700,8 +6316,6 @@ bool  MakeRunSet(bool bFirst)
     ptSet->dVOL70V_SQR  =(DWORD)rt_round((0.7*fUn*fKU[PUB_AC_UAB1])*(0.7*fUn*fKU[PUB_AC_UAB1]));    // 64电压
 
 #endif
-
-	
 	//转换当前运行定值的镜象,做定值有效性检查时用
 	{
 		BYTE *pBak = (BYTE *)&tBakSet;
@@ -7110,10 +7724,13 @@ struct _list_item g_list_all[] =
 #ifdef FUNC_SEL_MODE_FA
 	{SelFAList,sizeof(SelFAList)/sizeof(SET_LIST),},
 #endif
+#ifdef GW_AREA_MAIN_2021
 	{PowerList,sizeof(PowerList)/sizeof(SET_LIST),},
 	{FilterTYPE,sizeof(FilterTYPE)/sizeof(SET_LIST),},
 	{TBLTYPE,sizeof(TBLTYPE)/sizeof(SET_LIST),},
 	{WaveletTYPE,sizeof(WaveletTYPE)/sizeof(SET_LIST),},
+	{DIRList,sizeof(DIRList)/sizeof(SET_LIST),},
+#endif
 };
 
 #define LIST_ALL_NUM 	(sizeof(g_list_all)/sizeof(struct _list_item))

+ 386 - 12
dtu/dtu_main_t536/app/set.h

@@ -18,7 +18,7 @@
 /*------------------------------- 头文件 --------------------------------------
 */
 #include "switch.h"
-
+#include "record.h"
 //#define GD_AREA_FOS				//佛山局显示
 //#define GD_AREA_MIAN		//广东版标准显示功能(其他的在此基础上有显示及功能上的细微差别,一般在番禺送检的时候会用到)
 //#define GD_AREA_ZHONGSHAN
@@ -138,6 +138,23 @@ enum
 enum
 {
 	GROUP_SET_BY=0,			// 备用组号,默认为0 ,维护工具判断组号为0 ,默认是展开的,和现在的处理模式不太匹配,定义一个为0的组号,不使用
+#ifdef GW_AREA_MAIN_2021
+	GROUP_SET_GL=1,   	// 过流
+	GROUP_SET_LX,		// 零序
+	GROUP_SET_LY,		// 零压
+	GROUP_SET_HJS,		//后加速
+	
+	GROUP_SET_DTB,		// 分布式
+	GROUP_SET_FA,			// 馈线自动化
+	GROUP_SET_CHZ,		// 重合闸
+	GROUP_SET_TQHZ,		// 合环功能
+	GROUP_SET_OVI,			// 电流越限
+	GROUP_SET_CT,			// ct变比
+	GROUP_SET_JD,			// 接地故障
+	GROUP_SET_RCD_WAVE,		// 录波
+	// GROUP_SET_U0GJ,			// U0告警
+	GROUP_SET_OTHERS,			// 其它
+#else
 
 //线路定值
 	GROUP_SET_BHTT,   			// 保护控制字
@@ -176,7 +193,7 @@ enum
 #ifdef FUNC_DRIVE_JY
 	GROUP_SET_DRIVE,	// 传动功能
 #endif
-
+#endif
 //公共定值
 #ifdef GW_AREA_MAIN_2021
 	GROUP_SET_SCT,
@@ -379,6 +396,228 @@ enum
 // 线路定值
 enum
 {
+#ifdef GW_AREA_MAIN_2021
+	SET_BH_TT=0,			// 保护投退
+	//过流保护
+	SET_LABLE_GL,
+	SET_GLZERO_TZ,			// 过流停电跳闸投退
+	SET_GL1_GJ,				// 过流1告警
+	SET_GL1_TZ,				// 过流1跳闸
+	SET_GL1_I,				// 过流1定值
+	SET_GL1_T,				// 过流1时间
+	SET_GL1_PATH,			// 过流1方向
+	SET_GL1_DIR,			// 过流1指向
+
+	SET_GL2_GJ,				// 过流2告警
+	SET_GL2_TZ,				// 过流2跳闸
+	SET_GL2_I,				// 过电流2定值
+	SET_GL2_T,				// 过电流2时间
+	SET_GL2_PATH,			// 过流2方向
+	SET_GL2_DIR,			// 过流2指向
+	
+	SET_GL3_GJ,				// 过流3告警
+	SET_GL3_TZ,				// 过流3跳闸
+	SET_GL3_I,				// 过电流3定值
+	SET_GL3_T,				// 过电流3时间
+	SET_GL3_PATH,			// 过流3方向
+	SET_GL3_DIR,			// 过流3指向
+
+	SET_DL_GJ_TT,			// 短路故障告警投退
+	SET_DL_TZ_TT,			// 短路故障跳闸投退
+	SET_DL_I,				// 短路电流定值
+	SET_DL_T,				// 短路电流时间
+	
+	SET_BSTZ_TT,			// 闭锁分闸电流,在负荷开关情况下使用(遮断电流闭锁)
+	SET_BSTZ_I,				// 闭锁分闸电流,在负荷开关情况下使用
+
+	//零序保护
+	SET_LABLE_LX,
+	SET_XDLGJ_TT,			// 小电流接地告警
+	SET_XDLTZ_TT,			// 小电流接地跳闸
+	SET_XDLSG_TT,			// 小电流接地事故总
+	SET_XDL_I,				// 小电流暂态电流
+	SET_XDL_T,				// 小电流跳闸时间
+	SET_XDL_GT,				// 小电流告警时间
+	SET_LXPOLAR_TT,			// 零序电流反极性投退
+
+	SET_LX1_GJ,				// 零序I段告警
+	SET_LX1_TZ,				// 零序I段跳闸
+	SET_LX1_I,				// 零序I段电流
+	SET_LX1_T,
+	
+	SET_LX2_GJ,				// 零序2段告警
+	SET_LX2_TZ,				// 零序2段跳闸
+	SET_LX2_I,				// 零序II段电流
+	SET_LX2_T,
+
+	SET_LX3_GJ,				// 零序3段告警
+	SET_LX3_TZ,				// 零序3段跳闸
+	SET_LX3_I,				// 零序III段电流
+	SET_LX3_T,
+
+	SET_LX_GJ_TT,			// 零流告警投退
+	SET_LX_TZ_TT,			// 零流跳闸投退
+	SET_LX_I,				// 零流告警定值
+	SET_LX_T,				// 零流告警时间
+
+	//零压保护
+	SET_LABLE_LY,
+	SET_LY_GJ_TT,			// 零压告警投退
+	SET_LY_TZ_TT,			// 零压跳闸投退
+	SET_LY_T,				// 零压告警时间
+
+	//后加速
+	SET_LABLE_HJS,
+	SET_GLJS_TT,			// 过流加速投退
+	SET_GLJS_I,				// 过电流加速定值
+	SET_GLJS_T,				// 过电流加速时间
+	
+	SET_LXJS_TT,			// 零序电流加速投退
+	SET_LXJS_I,				// 零序电流加速定值
+	SET_LXJS_T,				// 零序电流加速时间
+
+	SET_LYJS_TT,			// 零压加速投退
+	SET_LYJS_U,				// 零序电压加速定值
+	SET_LYJS_T,				// 零序电压加速时间
+	SET_JS_BH_T,			// 加速段保护开放时间
+
+	//重合闸
+	SET_LABLE_CHZ,
+	SET_CH_TT,				// 重合闸投退
+	SET_CH2_TT,				// 多次重合闸投退
+	SET_CH_TN,              // 非一次重合闸时间
+	SET_CH_T1,              // 一次重合闸时间
+	SET_CH_T2,              // 二次重合闸时间
+	SET_CH_T3,              // 三次重合闸时间
+	SET_CHBS_T,				// 重合闸闭锁时间
+	SET_CHOK_T,				// 重合闸确认时间
+	SET_AR_TIMES,			// 重合闸次数
+	SET_TTCH_TT,			// 偷跳启动重合闸
+	SET_CH_DLBS_TT,			// 大电流闭锁重投
+	SET_CH_DLBS_I,		    // 大电流闭锁重投定值
+	SET_CH_CKFS,		    // 重合闸出口方式 0:无检定 1:检一侧有压一侧无压 2:检同期 3:检一侧有压一侧无压+检同期
+	SET_CH_JYY_TT,			// 重合闸检有压投退
+	SET_CH_JYY_T,			// 重合闸检有压等待时间
+
+	//分布式
+	SET_LABLE_DTB,
+	SET_DTB_FAYB_TT,		// 分布式FA压板
+	SET_DTB_FASE_TT,		// 分布式FA隔离功能
+	SET_DTB_FASE_T,			// 分布式FA隔离跳闸延时
+	SET_DTB_FAGL_I,			// 分布式FA过流定值
+	SET_DTB_FAGL_T,			// 分布式FA过流时间
+	SET_DTB_FALX_I,			// 分布式FA零序过流定值
+	SET_DTB_FALX_T,			// 分布式FA零序过流时间
+	SET_DTB_FARE_TT,		// 分布式FA恢复功能
+	SET_AI_SLCD_T,			// 联络自投充电延时
+	SET_AI_SLHZ_T,			// 联络自投合闸延时
+	SET_DTB_OV_TT,			// 过载预判
+	SET_DTB_OV_I,			// 过载负荷限值
+	SET_DTB_FAPU_TT,		// 检线路有压投退(FA)
+	SET_DTB_POWER_U,		// 有压定值(FA)
+	SET_DTB_DOWN_U,			// 无压定值(FA)
+	SET_FA_LOSTU_TT,		// 首开关失压保护
+	SET_FA_LOSTU_T,			// 首开关失压跳闸延时
+	SET_LOSTU_GL_TT,		// 失压经过流闭锁投退
+	SET_LOSTU_GL_T,			// 过流闭锁记忆时间
+	SET_DTB_FAIL_TT,		// 失灵保护投退
+	SET_DTB_FAIL_T,			// 失灵判断延时
+	SET_DTB_NOCU_I,			// 无流定值
+
+
+	//就地馈线自动化
+	SET_LABLE_FA,
+	SET_FA_TT,				// 就地馈线自动化投退	
+	SET_FA_TYPE,			// 就地馈线自动化选型
+	SET_SL_F,				// 分段分界选择 : 0=分段联络 1=分界
+	SET_S_L,				// 联络分段模式 : 0=分段 1=联络
+	SET_FTU_TT,
+	SET_AUTOGL_TT,
+	SET_AUTOLX_TT,
+	SET_X_T,				// X时限
+	SET_Y_T,				// Y时限
+	SET_C_T,
+	SET_S_T,
+	SET_XXTZ_T,
+	SET_XXCH_T,
+	SET_LOST_TT,			// 失压投退
+	SET_LOST_T,				// 失压时间
+	SET_LOST_TIMES,			// 失压次数
+	SET_TT_OVERU0,			// 零压分闸投退
+	//合环功能
+	SET_LABLE_TQ,
+	SET_TT_TQ,				// 合环投退
+	SET_TQ_T,				// 合环时间
+	SET_TQ_U,				// 合环压差
+	SET_TQ_ANGLE,			// 合环角差
+	SET_TQ_FREQ,			// 合环频差
+
+	//电流越限
+	SET_LABLE_OVI,
+	SET_OVLOAD_TT,			// 电流重载
+	SET_OV_I,				// 
+	SET_OV_T,				// 
+	SET_DLGZ_TT,			// 电流过载
+	SET_GZ_I,				// 
+	SET_GZ_T,				// 
+
+	SET_DLYX_TT,			// 电流越限
+	SET_DLYX_I,				// 
+	SET_DLYX_T,				// 
+	
+	//CT变比
+	SET_LABLE_CT,
+	SET_CT_ONE,				// 相CT一次值
+	SET_CT_TWO,				// 相CT二次值
+	SET_I0CT_ONE,			// 零序CT一次值
+	SET_I0CT_TWO,			// 零序CT二次值
+	
+	// 接地故障
+	SET_LABLE_JD,
+	SET_JDGZ_TT,			// 间歇性单相接地故障检测
+	SET_JDGZ_ST,			// 间歇性单相接地短延时
+	SET_JDGZ_SNUM,			// 短延时接地故障次数
+	SET_JDGZ_LT,			// 间歇性单相接地长延时
+	SET_JDGZ_LNUM,			// 长延时接地故障次数
+	SET_JDTYPE,				// 系统接地方式
+
+	//录波
+	SET_LABLE_WAVE_RCD,
+	SET_WAVE_GLGZ_TT,		// 过流故障启动录波投退
+	SET_WAVE_XLSY_TT,		// 线路失压启动录波投退
+	SET_WAVE_LXDY_TT,		// 零序电压启动录波投退
+	SET_WAVE_LXGL_TT,		// 零序过流启动录波投退 
+	SET_WAVE_JDGZ_TT,		// 接地故障启动录波投退
+	SET_WAVE_LYTB_TT,		// 零压突变启动录波投退
+	SET_WAVE_LLTB_TT,		// 零流突变启动录波投退
+	SET_WAVE_CHZ_TT,		// 重合闸启动录波投退
+	SET_WAVE_KGBW_TT,		// 开关变位启动录波投退
+	SET_WAVE_DLGZ_TT,		// 短路故障启动录波投退
+	SET_U0_TB,				// 零序电压突变定值
+	SET_I0_TB,				// 零序电流突变定值
+
+	// 其他
+	SET_LABLE_OTHER,
+	SET_CURRENT_INV_TT ,	// 电流取反投退,涉及功率计算和小电流接地判断
+	SET_DIR_AUTO_TT ,		// 方向自适应判断选择投退
+	SET_POWER_V2_TT	,		// 功率计算是否选择第二路电压
+	SET_TT_TWCN,			// 弹簧未储能投退
+	SET_QYD_BS_TT,			// 低气压闭锁投退	
+	SET_YB_TT,				// 软压板投退	
+	SET_HZ_BS_TT,			// 多次分闸闭锁合闸投退
+	SET_FZ_FRE,				// 多次分闸次数
+	SET_FZ_TIME,			// 多次分闸时间
+	SET_2XBCOE,          	// 谐波闭锁制动系数
+	SET_TT_2XB,				// 二次谐波闭锁
+
+	SET_KHJC_TT,			// 控回断线检测
+	SET_KH_TIME,			// 控回检测时间
+
+	SET_TFD_TT,				// 湖南停复电逻辑
+
+	SET_CT_DX_TT,			// CT断线投退
+	SET_CT_DX_T,			// CT断线时间
+#else
 	//过流保护
 	SET_LABLE_BHTT,		//列表名
 #if !defined GD_AREA_ZHONGSHAN && !defined GD_AREA_ECZD_2020 && !defined FUNC_LINE_SEL_TY_SEL	//中山局/河源局将此定值放至公共定值 &&非二次指导意见
@@ -1070,7 +1309,7 @@ enum
 	SET_DRIVE_I0_T, 	//传动零流时间
 	SET_DRIVE_AGAIN_T,	//再次传动时间
 #endif
-
+#endif
 	SET_NUM                 
 };
 
@@ -1804,6 +2043,15 @@ typedef struct NET_PARA
 
 typedef struct OC_SET
 {
+#ifdef GW_AREA_MAIN_2021
+	DWORD   dIgl;        			// 过流定值
+	DWORD   dIgl_fh;        		// 过流定值返回值
+	DWORD   dTgl;         			// 过流时间
+	bool	bTT_Tz;					// 跳闸
+	bool 	bTT_Gj;					// 告警
+	bool	bTT_Path;				// 方向
+	bool 	bTT_Dir;				// 指向
+#else
 	DWORD   dI;        			//越限定值
 	DWORD   dI_fh;        		//越限定值返回值
 //#ifdef GD_AREA_ECZD_2020
@@ -1817,6 +2065,7 @@ typedef struct OC_SET
 	bool	bTz;			// 跳闸
 	bool 	bGj;				// 告警
 	bool    bDir;		//方向投入
+#endif
 }OC_SET;
 
 
@@ -1853,11 +2102,136 @@ typedef struct GOC_SET                //
 #endif
 }GOC_SET;
 
-
+typedef struct VOL_SET
+{
+	DWORD   dUVol;				// 电压定值
+	DWORD   dUVol_fh;			// 电压定值返回
+	DWORD	dTVol;			
+	bool    bTT;
+	bool    bTz;
+}VOL_SET;
 
 
 typedef struct TSETSW
 {
+#ifdef GW_AREA_MAIN_2021
+
+	OC_SET	tOcSet[OC_NUMBER];
+	VOL_SET tU0Set;						//零压定值
+
+	DWORD	dTCH[MAX_AR_TIMES];     	//重合1时间
+	DWORD   dTCHBS;              		//重合闸闭锁时间
+	DWORD   dTCHOK;              		//重合闸确认时间
+	DWORD   dTCHZK;              		//重合闸加速展宽时间
+	DWORD   dARTimes;				//重合闸次数
+	DWORD   dCKModes;				//重合闸出口方式
+	bool    bTT_GZBSCH;				// 大电流闭锁重合
+	DWORD   dICH;        			// 大电流闭锁重合定值
+	DWORD   dICH_fh;        		// 大电流闭锁重合返回值
+
+	bool    bTT_xdlgj;				// 小电流接地告警
+	bool    bTT_xdltz;				// 小电流接地跳闸
+	bool    bTT_xdlsg;				// 小电流接地事故总
+	DWORD	dI_xdl;					// 小电流接地电流
+	float 	dT_xdl_T;				// 小电流跳闸时间			modify by zhy 20220322
+	float 	dT_xdl_GT;				// 小电流告警时间			add by zhy 20220322
+	DWORD	dI_xdl_fh;				// 小电流接地返回电流
+	DWORD	dI_xdl_zt;				// 小电流接地暂态电流
+	DWORD	dT_xdl_hjs;     		// 小电流零压后加速时间
+#if (defined RECORD_SW_U0TB)
+	DWORD 	dU_xdl_u0TB;      		// 小电流零压突变定值
+	DWORD 	dU_xdl_u0TB_fh;			// 小电流零压突变返回定值
+#endif
+
+	bool    bTT_lxpolar;				// 零序电流反极性投退
+
+	bool 	bTT_FA;					// 就地FA功能投退
+	bool 	bSW_F;					// 分界功能
+	bool 	bSW_L;					// 开关分段、联络选择 ==0为分段,默认
+	bool 	bFA_VI;				//电压时间
+	bool 	bFA_VIT;				//电压电流型
+	bool 	bFA_auto;				//自适应型	
+	u8		FA_type;	
+	
+	bool		bFTU;					//首端FTU
+	bool        bauto_gl;
+	bool        bauto_lx;
+
+	DWORD	dT_X;					// X时间	
+	DWORD	dT_Y;					// Y时间                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+	DWORD	dT_C;					// C时间                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+	DWORD	dT_S;					// S时间                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+	//DWORD	dT_Z;				// W时间,用于合后故障确认
+	DWORD   dT_xxtz;
+	DWORD   dT_xxch;
+	DWORD dIHH_GL;	//合后故障电流
+	DWORD dIHH_GLfh;
+	
+	
+
+	bool		bTT_LostVot;			// 失压分闸投退
+	DWORD	dlvTimes;				//失压次数
+	DWORD	dTlostvot;      			// 失压时间
+
+
+	bool		bTT_OverU0;				// 合后接地故障  零序过压投退
+	bool		bTT_BSHH;				// 合环闭锁功能	
+	bool		bTT_TQ;					// 合环
+	DWORD	dT_TQ;					// 合环时间
+	DWORD	dTQ_U_FZ;				// 合环压差
+	DWORD	dTQ_U_FZ_fh;			// 合环压差返回值
+	qs16	dTQ_ANGLE_FZ;			// 合环角差
+	qs16	dTQ_FREQ_FZ;			// 合环频差		
+
+
+	DWORD   dCT1;					//CT一次值
+	DWORD	dCT2;					//CT二次值
+	DWORD   dI0CT1;					//零序CT一次值
+	DWORD	dI0CT2;					//零序CT二次值
+
+	u8		CTDX_type;				// CT断线类型
+	DWORD	dCTDX_T;				// CT断线时间  
+
+	bool	bTT_InterJd;			// 间歇性单相接地故障投退
+	DWORD	dTJDSTimes;				// 间歇性单相接地故障短延时
+	DWORD	dNJDSNum;      			// 短延时单相接地故障次数
+	DWORD	dTJDLTimes;				// 间歇性单相接地故障长延时
+	DWORD	dNJDLNum;      			// 长延时单相接地故障次数
+	
+	WORD	dJDTYPE;				// 系统接地方式
+
+	bool 	bTT_BH;					// 保护总投退
+	bool 	bTT_TzZero;				//无压无流跳闸	
+	bool		bTT_CHZ;				// 重合闸
+	bool		bTT_TTCH;				// 偷跳启动重合
+	bool    	bTT_WCN;				// 弹簧未储能告警投退	
+
+	
+	bool    	bTT_Current_Inv;		// 电流取反投退,涉及功率计算和小电流接地判断
+	bool    	bTT_Dir_Auto;			// 方向自适应判断 投退
+	bool    	bTT_Power_v2;			// 功率计算是否选择第二路电压
+	bool		bTT_QYD_BS;				// 气压低闭锁
+	bool		bTT_YB;					// 遥控软压板
+	bool		bTT_HZ_BS;				// 多次分闸闭锁合闸投退
+	DWORD   	dFZNum;					// 多次分闸次数
+	DWORD   	dFZTimes;				// 多次分闸时间
+
+	bool		bTT_KH_JC;				// 控回断线检测投退
+	DWORD   	dKHJCTimes;				// 控回检测时间
+
+	DWORD   dXBCOE;					// 谐波系数
+	bool	bTT_2XBBS;				// 二次谐波制动
+
+	bool	bTT_TFD;				// 湖南停复电逻辑投退
+	
+	bool	bTT_rcd_type[RECORD_TYPE_NUM];	//录波投退项
+
+	DWORD 	dU_u0TB;      			// 零压突变录波定值
+	DWORD 	dU_u0TB_fh;				// 零压突变录波返回定值
+	DWORD 	dI_i0TB;      			// 零流突变录波定值
+	DWORD 	dI_i0TB_fh;				// 零流突变录波返回定值
+
+#else
 
 	OC_SET   toc[BHOC_NUMBER];
 	GOC_SET tGocSet;			// goose 过流
@@ -2144,16 +2518,10 @@ typedef struct TSETSW
 	DWORD dT_fz_end;	//结束传动时间
 	DWORD dT_hz_end;	//合闸结束传动时间
 #endif
+
+#endif
 }TSETSW;
 
-typedef struct VOL_SET
-{
-	DWORD   dUVol;				// 电压定值
-	DWORD   dUVol_fh;			// 电压定值返回
-	DWORD	dTVol;			
-	bool    bTT;
-	bool    bTz;
-}VOL_SET;
 
 //保护定值结构
 typedef struct TSET
@@ -2239,6 +2607,12 @@ typedef struct TSET
 #ifdef	CUSTOMIZE_BZT //备自投	
 	VOL_SET tVolLostSet;
 #endif	
+#ifdef GW_AREA_MAIN_2021
+	bool	bTT_GLBSCH;			// 过负荷闭锁重合
+	bool    bTT_LXBSCH;				// 零序闭锁重合	
+	bool    bTT_LYBSCH;				// 零压闭锁重合
+#endif
+
  	float		fFZLBXS;			// 幅值滤波系数
  	DWORD  	dTBLValue[SWITCH_NUM_MAX];// 突变量定值
 	DWORD 	dIWL_SQR[SWITCH_NUM_MAX];// 无流定值

+ 11 - 1
dtu/dtu_main_t536/app/switch.c

@@ -41,6 +41,7 @@ int 		g_ui_angle0;	// 
 int  		g_prot_index;	// 保护计算时,采样通道中采样点的索引
 
 struct sw g_sw[SWITCH_NUM_EXT];	// 开关综合结构
+struct sw_t g_sw_temp[SWITCH_NUM_EXT];	// 临时数据结构
 struct sw_public g_sw_pub;		// 开关公共部分综合结构
 
 int g_mea_cnt = 0;	// 测量计数
@@ -287,6 +288,10 @@ const s8 * g_sw_led_name[SW_LED_NUM]=
 #ifdef FUNC_DRIVE
 	"开关传动灯",
 #endif
+
+#ifdef GW_AREA_MAIN_2021
+	"线路故障灯",
+#endif
 };
 
 // 开关模拟量名称
@@ -348,6 +353,7 @@ const struct mea_desc g_sw_ac_desc[SW_AC_NUM_ALL] =
 	{"CI_UNB",UNIT_Per,UNIT_NULL},
 	{"脉冲计数1",UNIT_GE,UNIT_NULL},
 	{"脉冲计数2",UNIT_GE,UNIT_NULL},
+#ifndef GW_AREA_MAIN_2021
 	{"速断电流定值",UNIT_NULL,UNIT_NULL}, 
 	{"速断保护时间",UNIT_NULL,UNIT_NULL}, 
 	{"过流电流定值",UNIT_NULL,UNIT_NULL}, 
@@ -360,7 +366,7 @@ const struct mea_desc g_sw_ac_desc[SW_AC_NUM_ALL] =
 	{"得电闭合时间",UNIT_NULL,UNIT_NULL}, 
 	{"无压分闸闭锁时间",UNIT_NULL,UNIT_NULL}, 
 	{"工作模式",UNIT_NULL,UNIT_NULL}, 	
-
+#endif
 #ifdef METERING_ENERGY
 	{"计量UAB",UNIT_V220,UNIT_NULL},	// yc 17
 	{"计量UBC",UNIT_V220,UNIT_NULL},
@@ -533,8 +539,10 @@ const s8 * g_pub_do_name[PUB_DO_NUM] =
 #ifdef YK_FG_FAJS
 	"远方复归&FA解锁",	// 远方复归+FA解锁
 #endif
+#ifndef GW_AREA_MAIN_2021
 	"重合软压板合",
 	"重合软压板分",
+#endif
 #if defined BHFA_YB_YK || defined BHFAGS_YB_YK
 	//#ifdef GD_AREA_ECZD_2020
 	#if defined GD_AREA_ECZD_2020 || defined GD_AREA_MAIN_2020
@@ -557,6 +565,7 @@ const s8 * g_pub_do_name[PUB_DO_NUM] =
 		#endif
 	#endif
 #else
+	#ifndef GW_AREA_MAIN_2021
     //#ifdef GD_AREA_ECZD_2020
     #if defined GD_AREA_ECZD_2020 || defined GD_AREA_MAIN_2020
 	"停用保护总软压板合",
@@ -567,6 +576,7 @@ const s8 * g_pub_do_name[PUB_DO_NUM] =
 	#endif
 	"保护投入软压板合",
 	"保护投入软压板分",
+	#endif
 #endif
 #ifdef TQ_SOFT_YB
     #if defined GD_AREA_ECZD_2020 || defined GD_AREA_MAIN_2020

+ 22 - 2
dtu/dtu_main_t536/app/switch.h

@@ -247,6 +247,9 @@ enum
 	SW_LED_DRIVE,	//开关传动灯
 #endif
 
+#ifdef GW_AREA_MAIN_2021
+	SW_LED_XLGZ,
+#endif
 	SW_LED_NUM
 };
 
@@ -285,7 +288,7 @@ enum
 	SW_AC_IN_CI_UNBALANCE,// 电流不平衡度
 	SW_AC_IN_IMP1,
 	SW_AC_IN_IMP2,
-
+#ifndef GW_AREA_MAIN_2021
 	SW_AC_IN_SET_BEGIN,
 	SW_AC_IN_SET2,
 	SW_AC_IN_SET3,
@@ -298,7 +301,7 @@ enum
 	SW_AC_IN_SET10,
 	SW_AC_IN_SET11,
 	SW_AC_IN_SET_END,
-
+#endif
 #ifdef METERING_ENERGY	
 	SW_AC_IN_XS_UAB,
 	SW_AC_IN_XS_UBC,
@@ -474,8 +477,10 @@ enum
 #ifdef YK_FG_FAJS
 	PUB_DO_RST_FAJS, 	// 远方复归+FA解锁
 #endif
+#ifndef GW_AREA_MAIN_2021
 	PUB_CHYB_HZ,		// 虚遥控,重合闸压板
 	PUB_CHYB_FZ,		// 虚遥控,分闸压板	
+#endif
 #if defined BHFA_YB_YK || defined BHFAGS_YB_YK
 	PUB_BHYB_HZ,		// 虚遥控,分闸压板
 	PUB_BHYB_FZ,		// 虚遥控,分闸压板
@@ -492,11 +497,13 @@ enum
 		#endif
 	#endif
 #else
+#ifndef GW_AREA_MAIN_2021
 	PUB_BHYB_HZ,		// 虚遥控,分闸压板
 	PUB_BHYB_FZ,		// 虚遥控,分闸压板
 	PUB_KZYB_HZ,		// 虚遥控,控制出口合闸压板(线路保护投停&&保护投入软压板)
 	PUB_KZYB_FZ,		// 虚遥控,控制出口分闸压板(线路保护投停&&保护投入软压板)
 #endif
+#endif
 
 #ifdef TQ_SOFT_YB
 	PUB_TQ_YB_HZ,	//虚遥控,检同期软压板
@@ -755,6 +762,18 @@ struct sw
 	u16	 led_cfg_index[SW_LED_NUM];
 };
 
+struct sw_t
+{
+	// 过流标识
+	u32		overI_flags[3];
+
+	// 方向
+	u32		dir_flags[3];
+
+	// 测量值
+	qs16  	ac_in[3];
+	float 	ac_in_acc[3];
+};
 
 struct sw_public
 {
@@ -871,6 +890,7 @@ extern struct ui_p0 g_ui_p0[SWITCH_NUM_MAX]; //
 
 extern struct sw_public g_sw_pub;
 extern struct sw g_sw[];
+extern struct sw_t g_sw_temp[];
 extern struct ui120 Us1_120,Us2_120;
 
 extern const s8 * g_sw_di_name[];

+ 180 - 3
dtu/dtu_main_t536/app/vol.c

@@ -465,6 +465,176 @@ void Pro_vol(DWORD  dStep)
 ***************************************************************************/
 void Pro_TQHz(int sw,DWORD  dStep)
 {
+#ifdef GW_AREA_MAIN_2021
+	bool Volt1,Volt2,Volt3,bQD,bLock,bTQ=false,bAQ=false,bFEQ=false;
+	bool bY1, bY2;
+	DWORD deltaU1=0,deltaU2=0,deltaU3=0;
+	TRELAY_T *pR=&g_tRelay[sw];
+	TTQHZ_T *pSW = &pR->tTQHz;
+	TSETSW *pSet = &pRunSet->tSwSet[sw];
+
+	if(pR->uRmtSW.bTQHz)
+	{
+		pR->uRmtSW.bTQHz = false;
+		bTQ = true;
+	}
+
+ 	if (!BH_ALL_EN(sw) || !(pSet->bTT_BSHH || pSet->bTT_TQ))
+ 	{
+		if (!pSW->uTQHz.bFlag.bDISENDZ || !pSW->uTQHz.bFlag.bDISENBS)
+		{
+			pSW->uTQHz.wfFlag = 0;
+			if(soe_check(EV_BSTQHZ+sw*EV_SW_NUM)==true)
+			{
+				soe_record_ev(EV_BSTQHZ+sw*EV_SW_NUM, 0, 0,0,0 ); 
+			}
+			if(soe_check(EV_TQHZ+sw*EV_SW_NUM)==true)
+			{
+				soe_record_ev(EV_TQHZ+sw*EV_SW_NUM, 0, 0,0,0 ); 
+			}
+			if(soe_check(EV_TQJC+sw*EV_SW_NUM)==true)
+			{
+				soe_record_ev(EV_TQJC+sw*EV_SW_NUM, 0, 0,0,0);
+			}
+			pSW->uTQHz.bFlag.bDISENDZ = 1;
+			pSW->uTQHz.bFlag.bDISENBS = 1;
+		}
+		
+		return; 		
+ 	}
+	else
+	{
+		pSW->uTQHz.bFlag.bDISENDZ = 0;
+		pSW->uTQHz.bFlag.bDISENBS = 0;
+	}
+
+	bY1 = OverRelay(g_ui[PUB_AC_US1].m2[0], pRunSet->dUPower, pRunSet->dUPower_fh, pSW->uTQHz.bFlag.bLock);
+	bY2 = OverRelay(g_ui[PUB_AC_US2].m2[0], pRunSet->dUPower, pRunSet->dUPower_fh, pSW->uTQHz.bFlag.bLock);
+	bLock = bY1 && bY2;
+	
+	RunTR(&pSW->tTQQDTime, bTQ, dStep);
+
+	// 闭锁合环
+	if (pSet->bTT_BSHH)
+	{
+		pSW->uTQHz.bFlag.bQD = (BH_ALL_EN(sw)
+								&& pSet->bTT_BSHH						// 合环闭锁投入
+								&& (!bLock)							// 两侧均有电压条件不具备
+								&& pSW->tTQQDTime.boolTrip);		// 有启动标志
+		// 无闭锁,启动合闸
+		pSW->uTQHz.bFlag.bHz = pSW->uTQHz.bFlag.bQD;	
+
+		if (pSW->uTQHz.bFlag.bHz)
+		{
+			ResetTR(&pSW->tTQQDTime);
+		}
+
+		pSW->uTQHz.bFlag.bLock = (BH_ALL_EN(sw)
+								&& pSet->bTT_BSHH					// 合环闭锁投入
+								&& bLock							// 两侧均有电压,
+								&& pSW->tTQQDTime.boolTrip);		// 有启动标志
+
+		// 有闭锁,取消合闸,并弹闭锁事件
+		RunTR(&pSW->tBSTQTime, pSW->uTQHz.bFlag.bLock, dStep);			
+		
+		if (pSW->tBSTQTime.boolTrip)
+		{
+			if (!pSW->uTQHz.bFlag.bEvent)
+			{
+				soe_record_ev(EV_BSTQHZ+sw*EV_SW_NUM, 1, 0,0,0 );
+				pSW->bBSTQLed = true;
+				pSW->uTQHz.bFlag.bEvent = true;
+				ResetTR(&pSW->tTQQDTime);
+			}
+		}
+		else
+		{
+			if (pSW->uTQHz.bFlag.bEvent)
+			{
+				soe_record_ev(EV_BSTQHZ+sw*EV_SW_NUM, 0, 0,0,0 );
+				pSW->uTQHz.bFlag.bEvent = false;
+			}
+		}
+	}
+	// 合环合闸
+	if (pSet->bTT_TQ)
+	{		
+		// 分别取出两侧各线电压压差
+		deltaU1 = _AbsL(g_ui[PUB_AC_UAB1].fz - g_ui[PUB_AC_UAB2].fz);
+		deltaU2 = _AbsL(g_ui[PUB_AC_UBC1].fz - g_ui[PUB_AC_UBC2].fz);
+		deltaU3 = _AbsL(g_ui[PUB_AC_UCA1].fz - g_ui[PUB_AC_UCA2].fz);
+
+		// 角差与定值比对
+		bAQ = SynAngle(g_ui[PUB_AC_UAB1].p, g_ui[PUB_AC_UAB2].p,pSet->dTQ_ANGLE_FZ);
+
+		// 频差与定值比对
+		bFEQ = SynFrequency(g_sw_pub.ac_in[PUB_AC_IN_F1],g_sw_pub.ac_in[PUB_AC_IN_F2],pSet->dTQ_FREQ_FZ);
+
+		// 压差与定值比对
+		Volt1 = LowRelay(deltaU1, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+		Volt2 = LowRelay(deltaU2, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+		Volt3 = LowRelay(deltaU3, pSet->dTQ_U_FZ, pSet->dTQ_U_FZ_fh, false); 
+
+		bQD = Volt1&&Volt2&&Volt3; 
+		
+		pSW->uTQHz.bFlag.bQD = (BH_ALL_EN(sw)
+								&& pSet->bTT_TQ						// 合环合闸投入
+								&& bQD								// 压差小于定值
+								&& bAQ								// 角差小于定值
+								&& bFEQ								// 频差小于定值
+								&& (!bLock)							// 两侧电压不同时有压
+								&& pSW->tTQQDTime.boolTrip);		// 有外部同期需求
+		// 内部同期检测
+		pSW->uTQHz.bFlag.bQD1 = (BH_ALL_EN(sw)
+								&& pSet->bTT_TQ						// 合环合闸投入
+								&& bQD								// 压差小于定值
+								&& bAQ								// 角差小于定值
+								&& bFEQ								// 频差小于定值
+								&& (!bLock)							// 两侧电压不同时有压
+								&& (!pR->tSWST.uSWST.bFlag.bDIHW));	// 开关状态不在合位
+
+		if (pSW->uTQHz.bFlag.bQD1)
+		{
+			if(soe_check(EV_TQJC+sw*EV_SW_NUM)==false)		// 条件满足置合环检测信号
+			{
+				soe_record_ev(EV_TQJC+sw*EV_SW_NUM, 1, 0,0,0);
+			}
+		}
+		else
+		{
+			if(soe_check(EV_TQJC+sw*EV_SW_NUM)==true)
+			{
+				soe_record_ev(EV_TQJC+sw*EV_SW_NUM, 0, 0,0,0);
+			}
+		}
+		
+		RunTR(&pSW->tTQTime, pSW->uTQHz.bFlag.bQD, dStep);
+
+		pSW->uTQHz.bFlag.bHz = pSW->tTQTime.boolTrip;
+	
+		if(pSW->uTQHz.bFlag.bHz)
+		{
+			if (!pSW->uTQHz.bFlag.bEvent)
+			{
+				if(!pR->uRmtSW.bHandHz)
+				{
+			       	pR->uRmtSW.bHandHz = true;
+			    }
+				soe_record_ev(EV_TQHZ+sw*EV_SW_NUM, 1, 0,0,0 );
+				pSW->uTQHz.bFlag.bEvent = true;
+			}
+		}
+		else
+		{
+			if (pSW->uTQHz.bFlag.bEvent)
+			{
+				soe_record_ev(EV_TQHZ+sw*EV_SW_NUM, 0, 0,0,0 );
+				pSW->uTQHz.bFlag.bEvent = false;
+				ResetTR(&pSW->tTQTime);
+			}
+		}
+	}
+#else
 	bool bQD,bTQ=false;
 	TRELAY_T *pR=&g_tRelay[sw];
 	TTQHZ_T *pSW = &pR->tTQHz;
@@ -607,10 +777,12 @@ void Pro_TQHz(int sw,DWORD  dStep)
 			}
 		}
 	}
+#endif
 }
 //手动操作同期合闸检测
 void Pro_TQBS(int sw,DWORD  dStep)
 {
+#ifndef GW_AREA_MAIN_2021//TODO 看需求开放 ? EWen
 	bool bQD,bTQ=false;
 	TRELAY_T *pR=&g_tRelay[sw];
 	//TTQHZ_T *pSW = &pR->tTQHz;
@@ -663,6 +835,7 @@ void Pro_TQBS(int sw,DWORD  dStep)
 	else
 		sw_do(sw,SW_DI_TQBS_CLOSE,SW_DO_TYPE_OFF);//同期
 #endif	
+#endif
 }
 
 #ifdef FUN_HCBS
@@ -790,7 +963,7 @@ bool hcbs_freq(int sw) //频
 
 #endif
 
-
+#ifndef GW_AREA_MAIN_2021 // 解列的相关逻辑国网暂时没有用到,后续根据需求开放 EWen 
 //获取电压通道信息
 static int get_vol_index(int ac_index)
 {
@@ -1111,13 +1284,14 @@ void vol_PLJL(int sw,DWORD  dStep)   // 频
 	pJL->sta.bFlag.bQD=pJL->sta.bFlag.bQD_H||pJL->sta.bFlag.bQD_L||pJL->sta.bFlag.bQD_D;
 
 }
-
+#endif
 
 
  TPTCHECK_T	tPT;
 #define ANG_PHASEYC  (15*65536)
 void PT_Check(DWORD  dStep)
 {
+#ifndef GW_AREA_MAIN_2021
 	bool bsxyl=false;
 #ifdef GD_AREA_ECZD_CHAOZHOU_2022
 	DWORD Umin_tmp=0;
@@ -1383,6 +1557,8 @@ void PT_Check(DWORD  dStep)
 		tPT.uPT2DX.bFlag.bPTYC=false;
 	}
 #endif
+
+#endif
 }
 
 
@@ -1443,6 +1619,7 @@ void FDL_Check(DWORD    dStep)
 #endif
 void Pro_3U0(int sw,DWORD  dStep)
 {
+#ifndef GW_AREA_MAIN_2021
 	bool  bQDD; 			
 	TRELAY_T *pR=&g_tRelay[sw];
 	TU0_T *pSW=&pR->tOVER_U0TZ;
@@ -1514,7 +1691,7 @@ void Pro_3U0(int sw,DWORD  dStep)
 			pSW->uZOV.bFlag.bU0Ov = false;
 		}
 	} 
-
+#endif
 }
 
 

+ 10 - 1
dtu/dtu_main_t536/app/xdljd.c

@@ -10,6 +10,15 @@
 */
 /*------------------------------- 头文件 --------------------------------------
 */
+#ifdef GW_AREA_MAIN_2021
+// 用回DTU4算法待移植
+// 临时定义
+int xdl_is_dz(int sw)
+{
+	return 0;
+}
+
+#else
 #include "head.h"
 #ifdef XDL_ZT
 /*------------------------------- 宏定义 --------------------------------------
@@ -1883,7 +1892,7 @@ int xdl_proc_highz(int sw)  // 
 
 
 
-
+#endif
 /*------------------------------ 文件结束 -------------------------------------
 */
 

Неке датотеке нису приказане због велике количине промена