Explorar o código

01. 修改:sc1161y加密初始化读写驱动修改。
02. 增加:gpio export 增加esam电源和线损维护期换io。
03. 修复: rt_err_set 加密芯片错误时程序崩溃问题。
04. 修改: 波特率修改增加115200。
05. 合并: DTUv4公共定值和逻辑合并。
06. 修改: 通过GW_AREA_MAIN_2021宏关闭部分南网专用定值和逻辑。

EWen hai 1 ano
pai
achega
59e0ef46b1

+ 8 - 0
README.md

@@ -0,0 +1,8 @@
+## 修改记录 ##
+# 20250923 
+01. 修改:sc1161y加密初始化读写驱动修改。
+02. 增加:gpio export 增加esam电源和线损维护期换io。
+03. 修复: rt_err_set 加密芯片错误时程序崩溃问题。
+04. 修改: 波特率修改增加115200。
+05. 合并: DTUv4公共定值和逻辑合并。
+06. 修改: 通过GW_AREA_MAIN_2021宏关闭部分南网专用定值和逻辑。 

+ 2 - 2
app_public/fuxi_public/fuxi_bsp/include/dspi.h

@@ -40,8 +40,8 @@ int dspi_dummy_byte(int h_dspi,uint32_t length);
 
 
 //esam½Ó¿Ú
 //esam½Ó¿Ú
 void dspi_esam_cs(int cs);
 void dspi_esam_cs(int cs);
-u8 	 dspi_esam_send(u8 c);
-u8 	 dspi_esam_recv(void);
+u16 dspi_esam_send(const u8 *pdat, u16 len);
+int dspi_esam_recv(u8 *pdat, u16 len);
 
 
 
 
 #endif
 #endif

+ 2 - 2
app_public/fuxi_public/fuxi_bsp/include/gpio.h

@@ -37,9 +37,9 @@ enum
 	// KOUT_EN1, //辅助板上的单片机控
 	// KOUT_EN1, //辅助板上的单片机控
 	RUN_LED,
 	RUN_LED,
 	ERR_LED,
 	ERR_LED,
-	ESAM_PWR,
+	ESAM_PWR,		// 加密芯片电源
 	// WATCHDOG,
 	// WATCHDOG,
-	LINE_LOSS_SET,
+	LINE_LOSS_SET,  // 线损维护口切换
 	GPIO_NUM_OTHER,
 	GPIO_NUM_OTHER,
 };
 };
 
 

+ 111 - 35
app_public/fuxi_public/fuxi_bsp/source/dspi.c

@@ -12,7 +12,12 @@
 /*------------------------------- 头文件 --------------------------------------
 /*------------------------------- 头文件 --------------------------------------
 */
 */
 #include "head.h"
 #include "head.h"
-
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/types.h>
+#include <linux/spi/spidev.h>
 /*------------------------------- 宏定义 --------------------------------------
 /*------------------------------- 宏定义 --------------------------------------
 */
 */
 
 
@@ -37,6 +42,8 @@
 //总线占用状态
 //总线占用状态
 int gh_dspi = 0; 
 int gh_dspi = 0; 
 
 
+// ESAM spi 句柄
+int g_spi_fd = -1;
 
 
 /*------------------------------ 函数声明 -------------------------------------
 /*------------------------------ 函数声明 -------------------------------------
 */
 */
@@ -64,7 +71,90 @@ int gh_dspi = 0;
 
 
 int dspi_init(void)
 int dspi_init(void)
 {
 {
+	#define ESAM_DEV_NAME "/dev/spidev5.0"
+	#define MAX_SPEED_HZ 5000000
+    int ret = 0;
+    __u32 mode = SPI_MODE_3;			// 模式3
+    __u8 bits_per_word = 8; 			// 每字8位
+    __u32 max_speed_hz = MAX_SPEED_HZ; 	// 5MHz
+	
+	
+    // 1. 打开SPI设备文件
+    g_spi_fd = open(ESAM_DEV_NAME, O_RDWR);
+    if (g_spi_fd < 0) {
+        printf("%s open %s failed !!!\n", __FUNCTION__, ESAM_DEV_NAME);
+        return -1;
+    }
+
+    // 2. 设置SPI模式
+    ret = ioctl(g_spi_fd, SPI_IOC_WR_MODE, &mode);
+    if (ret == -1) {
+		printf("%s set %s mode failed !!!\n", __FUNCTION__, ESAM_DEV_NAME);
+        close(g_spi_fd);
+		g_spi_fd = -1;
+        return -2;
+    }
+
+    ret = ioctl(g_spi_fd, SPI_IOC_RD_MODE, &mode);
+    if (ret == -1) {
+		printf("%s read %s mode failed !!!\n", __FUNCTION__, ESAM_DEV_NAME);
+        close(g_spi_fd);
+		g_spi_fd = -1;
+        return -3;
+    }
+
+	if(SPI_MODE_3 != mode){
+    	printf("%s mode set err! set 0x%x,read 0x%x!!!\n", ESAM_DEV_NAME, SPI_MODE_3, mode);
+        close(g_spi_fd);
+		g_spi_fd = -1;
+		return -4;
+	}
+
+    // 3. 设置每字的位数
+    ret = ioctl(g_spi_fd, SPI_IOC_WR_BITS_PER_WORD, &bits_per_word);
+    if (ret == -1) {
+		printf("%s set %s bits_per_word failed !!!\n", __FUNCTION__, ESAM_DEV_NAME);
+        close(g_spi_fd);
+		g_spi_fd = -1;
+        return -5;
+    }
+    ret = ioctl(g_spi_fd, SPI_IOC_RD_BITS_PER_WORD, &bits_per_word);
+    if (ret == -1) {
+		printf("%s read %s bits_per_word failed !!!\n", __FUNCTION__, ESAM_DEV_NAME);
+        close(g_spi_fd);
+		g_spi_fd = -1;
+        return -6;
+    }
+
+	if(8 != bits_per_word){
+    	printf("%s set bits_per_word err! set: 8, read: %d!!!\n", ESAM_DEV_NAME, bits_per_word);
+		close(g_spi_fd);
+		g_spi_fd = -1;
+		return -7;
+	}
 
 
+    // 4. 设置最大时钟频率 (Hz)
+    ret = ioctl(g_spi_fd, SPI_IOC_WR_MAX_SPEED_HZ, &max_speed_hz);
+    if (ret == -1) {
+		printf("%s set %s max_speed_hz failed !!!\n", __FUNCTION__, ESAM_DEV_NAME);
+		close(g_spi_fd);
+		g_spi_fd = -1;
+        return -8;
+    }
+    ret = ioctl(g_spi_fd, SPI_IOC_RD_MAX_SPEED_HZ, &max_speed_hz);
+    if (ret == -1) {
+		printf("%s read %s max_speed_hz failed !!!\n", __FUNCTION__, ESAM_DEV_NAME);
+        close(g_spi_fd);
+		g_spi_fd = -1;
+        return -9;
+    }
+
+	if(MAX_SPEED_HZ != max_speed_hz){
+		printf("%s set max_speed_hz err! set: %d, read: %d!!!\n", ESAM_DEV_NAME, MAX_SPEED_HZ, max_speed_hz);
+		close(g_spi_fd);
+		g_spi_fd = -1;
+        return -10;
+	}
 #if 0
 #if 0
 // SPI总线初始化前,先打开ESAM模块的电源,解决esam模块有时工作不正常的问题。
 // SPI总线初始化前,先打开ESAM模块的电源,解决esam模块有时工作不正常的问题。
 	// 上电并延时1ms
 	// 上电并延时1ms
@@ -366,48 +456,34 @@ void dspi_esam_cs(int cs)
 #endif
 #endif
 }
 }
 
 
-u8 dspi_esam_send(u8 c)
+u16 dspi_esam_send(const u8 *pdat, u16 len)
 {
 {
-#if 0
-	u32 flag;
-	// 发送数据、接收数据字节间延时至少设为 1μs。
-	ustimer_delay(USTIMER_US);
-	
-	_MCF_DSPI_PUSHR(CFG_DSPI_INDEX) = MCF_DSPI_PUSHR_CTAS(1) | (unsigned char)(c);
-	flag = (MCF_DSPI_SR_TCF | MCF_DSPI_SR_RFDF);
-	while ((_MCF_DSPI_SR(CFG_DSPI_INDEX) & flag) != flag) ; 	// 等待结束
-	_MCF_DSPI_SR(CFG_DSPI_INDEX) = MCF_DSPI_SR_TCF;
+	if(g_spi_fd < 0) {
+		rt_printf("%s 设备未打开!\n",__func__);
+		return 0;
+	}
+
+	return write(g_spi_fd,pdat,len);
 
 
-	c = (unsigned char)_MCF_DSPI_POPR(CFG_DSPI_INDEX);
-#endif
-	return c;
 }
 }
 
 
 
 
-u8 dspi_esam_recv(void)
+int dspi_esam_recv(u8 *pdat, u16 len)
 {
 {
-#if 0
-	u8 c;
-	u32 flag;
-
-	// 发送数据、接收数据字节间延时至少设为 1μs。
-	ustimer_delay(USTIMER_US);
+	u16 ret = 0;
+	if(g_spi_fd < 0) {
+		rt_printf("%s 设备未打开!\n",__func__);
+		return -1;
+	}
+	ret = read(g_spi_fd,pdat,len);
 
 
-	// 清空接收buffer
-	// 以下语句必须屏蔽。在接收FIFO打开的情况下,如果在此处清BUF,在非常罕见的情况下会出错,具体原因未知。
-	// _MCF_DSPI_MCR(CFG_DSPI_INDEX) |=  MCF_DSPI_MCR_CLR_RXF;
-
-	//执行命令
-	_MCF_DSPI_PUSHR(CFG_DSPI_INDEX) = MCF_DSPI_PUSHR_CTAS(1);	// 开始执行	
-	flag = (MCF_DSPI_SR_TCF | MCF_DSPI_SR_RFDF);
-	while ((_MCF_DSPI_SR(CFG_DSPI_INDEX) & flag) != flag) ; 	// 等待结束
-	_MCF_DSPI_SR(CFG_DSPI_INDEX) = MCF_DSPI_SR_TCF;				// 清除标志
-	
-	c = (unsigned char)_MCF_DSPI_POPR(CFG_DSPI_INDEX);
+	if(ret != len) {
+		rt_printf("%s read data error!\n", __func__);
+		return -1;
+	} else {
+		return 0;
+	}
 
 
-	return c;
-#endif
-	return 0;
 }
 }
 
 
 
 

+ 13 - 5
app_public/fuxi_public/fuxi_bsp/source/gpio.c

@@ -79,7 +79,12 @@ ERR led		--> GPIO3_20	-->  gpio116
 // zhaoyang 20231214 esam_pwr    --> GPIO0_10	-->	 gpio10
 // zhaoyang 20231214 esam_pwr    --> GPIO0_10	-->	 gpio10
 esam_pwr    --> GPIO2_21	-->	 gpio85
 esam_pwr    --> GPIO2_21	-->	 gpio85
 WTD			--> GPIO0_31	-->  gpio31
 WTD			--> GPIO0_31	-->  gpio31
-
+T536 start ↓↓↓↓↓↓
+RUN_LED			-->  PB7
+ERR_LED			-->  PF4
+ESAM_PWR		-->  PL7
+LINE_LOSS_SET	-->  PG5
+T536 end   ↑↑↑↑↑↑
 */
 */
 
 
 /*------------------------------- 头文件 --------------------------------------
 /*------------------------------- 头文件 --------------------------------------
@@ -148,14 +153,14 @@ int gpio_init(void)
         printf("Cannot open GPIO to export it\n");
         printf("Cannot open GPIO to export it\n");
         return -1;
         return -1;
     }
     }
-
+#if 0 //集中式不用此方式开出
     for (i = 0; i < DO_NUM; i ++)
     for (i = 0; i < DO_NUM; i ++)
     {
     {
         sprintf(num, "%d", gpio_val[i]);
         sprintf(num, "%d", gpio_val[i]);
         write(exportfd, num, 4);
         write(exportfd, num, 4);
         gpio_val_fd[i] = -1;
         gpio_val_fd[i] = -1;
     }
     }
-
+#endif
     for (i = 0; i < GPIO_NUM_OTHER; i ++)
     for (i = 0; i < GPIO_NUM_OTHER; i ++)
     {
     {
         sprintf(num, "%d", gpio_val_other[i]);
         sprintf(num, "%d", gpio_val_other[i]);
@@ -254,6 +259,9 @@ int gpio_init(void)
 	
 	
     //首次上电,开出合闸,会导致第六路也开出,需要初始化关闭
     //首次上电,开出合闸,会导致第六路也开出,需要初始化关闭
 //    write(gpio_val_fd[DO_OUT1], "1", 2);
 //    write(gpio_val_fd[DO_OUT1], "1", 2);
+
+	//开启esam供电
+	write(gpio_val_fd_other[ESAM_PWR], "0", 2);
 #if 0	// TODO:需根据实际硬件重新对应匹配
 #if 0	// TODO:需根据实际硬件重新对应匹配
     for (i = 0; i < DO_NUM; i ++)
     for (i = 0; i < DO_NUM; i ++)
     {
     {
@@ -275,7 +283,7 @@ int gpio_exit(void)
         printf("Cannot open GPIO to unexport it\n");
         printf("Cannot open GPIO to unexport it\n");
         return -1;
         return -1;
     }
     }
-
+#if 0
     for (i = 0; i < DO_NUM; i ++)
     for (i = 0; i < DO_NUM; i ++)
     {
     {
     	if(gpio_val_fd[i] >= 0)
     	if(gpio_val_fd[i] >= 0)
@@ -286,7 +294,7 @@ int gpio_exit(void)
         sprintf(num, "%d", gpio_val[i]);
         sprintf(num, "%d", gpio_val[i]);
         write(unexportfd, num, 4);
         write(unexportfd, num, 4);
     }
     }
-
+#endif
     for (i = 0; i < GPIO_NUM_OTHER; i ++)
     for (i = 0; i < GPIO_NUM_OTHER; i ++)
     {
     {
     	if(gpio_val_fd_other[i] >= 0)
     	if(gpio_val_fd_other[i] >= 0)

+ 1 - 0
app_public/fuxi_public/rt_lite/source/rt_error.c

@@ -171,6 +171,7 @@ struct err_t g_err_entxt[] =
 	
 	
 	{ERR_FLAGS_SW ,"The set fixed value is invalid"},
 	{ERR_FLAGS_SW ,"The set fixed value is invalid"},
 	{ERR_FLAGS_SW ,"The internal fixed value is invalid"},
 	{ERR_FLAGS_SW ,"The internal fixed value is invalid"},
+	{ERR_FLAGS_SW ,"The public fixed value is invalid"},
 	{ERR_FLAGS_SW ,"The file of setting value describes error"},
 	{ERR_FLAGS_SW ,"The file of setting value describes error"},
 	{ERR_FLAGS_SW ,"The file of setting value data  error"},
 	{ERR_FLAGS_SW ,"The file of setting value data  error"},
 	{ERR_FLAGS_SW ,"Error of state board fixed value"},
 	{ERR_FLAGS_SW ,"Error of state board fixed value"},

+ 2 - 2
app_public/gps/gps_uart.c

@@ -805,7 +805,7 @@ void GpsModuleFunInit(GPS_COMM* data)
             case GPS_MODULE_BAUD_SET_STEP:
             case GPS_MODULE_BAUD_SET_STEP:
                 for(count=0; count<sizeof(GpsCommBuadrateTbl)/4; count++)
                 for(count=0; count<sizeof(GpsCommBuadrateTbl)/4; count++)
                 {
                 {
-                    if(tRunPara.tUartPara[data->chnl].wBaud==GpsCommBuadrateTbl[count])
+                    if(tRunPara.tUartPara[data->chnl].dBaud==GpsCommBuadrateTbl[count])
                         break;
                         break;
                 }
                 }
                 if(count==sizeof(GpsCommBuadrateTbl)/4)
                 if(count==sizeof(GpsCommBuadrateTbl)/4)
@@ -822,7 +822,7 @@ void GpsModuleFunInit(GPS_COMM* data)
                 g_tRsComm[chnl].ptBuf=(BYTE*)&g_tRsIEC[chnl];
                 g_tRsComm[chnl].ptBuf=(BYTE*)&g_tRsIEC[chnl];
                 GPSCommInit((GPS_COMM *)g_tRsComm[chnl].ptBuf,chnl);   //ÔËÐв½Öè»Ö¸´³õʼ״̬
                 GPSCommInit((GPS_COMM *)g_tRsComm[chnl].ptBuf,chnl);   //ÔËÐв½Öè»Ö¸´³õʼ״̬
                 
                 
-                ret = uart_open(UART_CHANNEL[chnl],tRunPara.tUartPara[chnl].wBaud,tRunPara.tUartPara[chnl].wParity);
+                ret = uart_open(UART_CHANNEL[chnl],tRunPara.tUartPara[chnl].dBaud,tRunPara.tUartPara[chnl].wParity);
                 if (ret < 0)
                 if (ret < 0)
                 {
                 {
                     printf("%s: outside uart %d open failed!\n", __FUNCTION__, UART_CHANNEL[chnl]);
                     printf("%s: outside uart %d open failed!\n", __FUNCTION__, UART_CHANNEL[chnl]);

+ 16 - 1
dtu/dtu_main_t536/app/Appconfig.c

@@ -796,6 +796,10 @@ const SOE_DEF tAllSOE[]=
 #endif
 #endif
 #ifdef FUNC_YL_FZ_SOE
 #ifdef FUNC_YL_FZ_SOE
 	{0x44,		{0, 			0,			0}, 			"联络Y闭锁"},
 	{0x44,		{0, 			0,			0}, 			"联络Y闭锁"},
+#endif
+#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断线跳闸"},
 #endif
 #endif
 	// 公共事件
 	// 公共事件
 
 
@@ -811,6 +815,12 @@ const SOE_DEF tAllSOE[]=
 	{0x04,		{EV_PARA_Uab,	0,			0},				"Uab2低电压告警"},
 	{0x04,		{EV_PARA_Uab,	0,			0},				"Uab2低电压告警"},
 	{0x04,		{EV_PARA_Ubc,	0,			0},				"Ubc2低电压告警"},
 	{0x04,		{EV_PARA_Ubc,	0,			0},				"Ubc2低电压告警"},
 	{0x04,		{EV_PARA_Uca,	0,			0},				"Uca2低电压告警"},
 	{0x04,		{EV_PARA_Uca,	0,			0},				"Uca2低电压告警"},
+	{0x04,		{EV_PARA_Uab,	0,			0},				"Uab1失压告警"},
+	{0x04,		{EV_PARA_Ubc,	0,			0},				"Ubc1失压告警"},
+	{0x04,		{EV_PARA_Uca,	0,			0},				"Uca1失压告警"},
+	{0x04,		{EV_PARA_Uab,	0,			0},				"Uab2失压告警"},
+	{0x04,		{EV_PARA_Ubc,	0,			0},				"Ubc2失压告警"},
+	{0x04,		{EV_PARA_Uca,	0,			0},				"Uca2失压告警"},
 #ifdef DISP_SET_YYJB
 #ifdef DISP_SET_YYJB
 	#ifdef GD_TEST_2021
 	#ifdef GD_TEST_2021
 		{0x04,		{EV_PARA_Us1,	0,			0}, 			"A侧有压"},
 		{0x04,		{EV_PARA_Us1,	0,			0}, 			"A侧有压"},
@@ -824,7 +834,12 @@ const SOE_DEF tAllSOE[]=
 		{0x04,		{EV_PARA_Us2,	0,			0}, 			"线路侧无压"},
 		{0x04,		{EV_PARA_Us2,	0,			0}, 			"线路侧无压"},
 	#endif
 	#endif
 #endif
 #endif
-	{0x85,		{0,			0,			0},					"电源模块状态"},	
+	{0x85,		{0,			0,			0},					"电源模块状态"},
+#ifdef GW_AREA_MAIN_2021	
+	{0x07,		{PARA_TYPE_YB|EV_PARA_YK,	0,	0},			"总遥控开出软压板"},
+	{0x07,		{PARA_TYPE_YB|EV_PARA_YK,	0,	0},			"总保护出口软压板"},
+	{0x07,		{PARA_TYPE_YB|EV_PARA_YK,	0,	0},			"总遥控出口软压板"},
+#endif
 #ifdef BATTERY_WITH_COMM
 #ifdef BATTERY_WITH_COMM
 	#ifdef FUNC_SEL_BAT_MODULE	
 	#ifdef FUNC_SEL_BAT_MODULE	
 		{0x04,		{0, 		0,			0}, 				"电池过压告警"},	
 		{0x04,		{0, 		0,			0}, 				"电池过压告警"},	

+ 17 - 0
dtu/dtu_main_t536/app/Appconfig.h

@@ -482,6 +482,10 @@ enum
 #endif
 #endif
 #ifdef FUNC_YL_FZ_SOE
 #ifdef FUNC_YL_FZ_SOE
 	EV_YL_FZ,		//联络Y闭锁
 	EV_YL_FZ,		//联络Y闭锁
+#endif
+#ifdef GW_AREA_MAIN_2021
+	EV_PTDX_GJ,					// PT断线告警
+	EV_PTDX_TZ,					// PT断线跳闸
 #endif
 #endif
 	EV_SW_NUM,					//
 	EV_SW_NUM,					//
 };  
 };  
@@ -500,6 +504,12 @@ enum
 	EV_UAB2DDY,				// UAB2越下限
 	EV_UAB2DDY,				// UAB2越下限
 	EV_UBC2DDY,				// UBC2越下限
 	EV_UBC2DDY,				// UBC2越下限
 	EV_UCA2DDY,				// UCA2越下限
 	EV_UCA2DDY,				// UCA2越下限
+	EV_UAB1SYGJ,			// UAB1失压告警
+	EV_UBC1SYGJ,			// UBC1失压告警
+	EV_UCA1SYGJ,			// UCA1失压告警
+	EV_UAB2SYGJ,			// UAB2失压告警
+	EV_UBC2SYGJ,			// UBC2失压告警
+	EV_UCA2SYGJ,			// UCA2失压告警
 #ifdef DISP_SET_YYJB
 #ifdef DISP_SET_YYJB
 	EV_POW1YY,				// PT1有压
 	EV_POW1YY,				// PT1有压
 	EV_POW2YY,				// PT2有压
 	EV_POW2YY,				// PT2有压
@@ -507,6 +517,11 @@ enum
 	EV_POW2WY,			    // PT2无压
 	EV_POW2WY,			    // PT2无压
 #endif
 #endif
 	EV_DYSTATUS,				//电源模块状态
 	EV_DYSTATUS,				//电源模块状态
+#ifdef GW_AREA_MAIN_2021
+	EV_YK_ZYB_TT,			// 总遥控开出软压板  退出后遥控预置和执行出口回否定
+	EV_ZBHYB_TT,			// 总保护出口软压板  退出后通道配置处配置为保护合分闸的通道无法出口
+	EV_ZYKYB_TT,			// 总遥控出口软压板  退出后通道配置处配置为遥控合分闸的通道无法出口
+#endif
 #ifdef BATTERY_WITH_COMM
 #ifdef BATTERY_WITH_COMM
 	#ifdef FUNC_SEL_BAT_MODULE	
 	#ifdef FUNC_SEL_BAT_MODULE	
 		EV_BAT_OVER_GJ,				// 电池过压告警	
 		EV_BAT_OVER_GJ,				// 电池过压告警	
@@ -565,6 +580,7 @@ enum
 	FAULT_ALL,					//事故总
 	FAULT_ALL,					//事故总
 	EV_TT_BAT,				//电池自动活化
 	EV_TT_BAT,				//电池自动活化
 	EV_BAT_ON,				//电池投入
 	EV_BAT_ON,				//电池投入
+#ifndef GW_AREA_MAIN_2021
 	EV_FDL1_TZ,
 	EV_FDL1_TZ,
 	EV_FDL2_TZ,
 	EV_FDL2_TZ,
 	EV_FDL3_TZ,
 	EV_FDL3_TZ,
@@ -581,6 +597,7 @@ enum
 	EV_FDL6_GJ,
 	EV_FDL6_GJ,
 	EV_FDL7_GJ,
 	EV_FDL7_GJ,
 	EV_FDL8_GJ,
 	EV_FDL8_GJ,
+#endif
 	EV_COMM1_ERR,			//通信端口1异常
 	EV_COMM1_ERR,			//通信端口1异常
 	EV_COMM2_ERR,
 	EV_COMM2_ERR,
 	EV_COMM3_ERR,
 	EV_COMM3_ERR,

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

@@ -498,9 +498,9 @@ void IEC_CommInit(void)                     // 
 			}
 			}
 		#ifdef IECCOM_DEBUG
 		#ifdef IECCOM_DEBUG
 			rt_printf("UART_CHANNEL[%d]=%d,tRunPara.tUartPara[%d].wProtocol=%d,tRunPara.tUartPara[%d].wBaud=%d tUartPara[%d].wParity=%d\r\n",\
 			rt_printf("UART_CHANNEL[%d]=%d,tRunPara.tUartPara[%d].wProtocol=%d,tRunPara.tUartPara[%d].wBaud=%d tUartPara[%d].wParity=%d\r\n",\
-					i,UART_CHANNEL[i],i,tRunPara.tUartPara[i].wProtocol,i,tRunPara.tUartPara[i].wBaud,i,tRunPara.tUartPara[i].wParity);
+					i,UART_CHANNEL[i],i,tRunPara.tUartPara[i].wProtocol,i,tRunPara.tUartPara[i].dBaud,i,tRunPara.tUartPara[i].wParity);
 		#endif
 		#endif
-			ret = uart_open(UART_CHANNEL[i],tRunPara.tUartPara[i].wBaud,tRunPara.tUartPara[i].wParity);
+			ret = uart_open(UART_CHANNEL[i],tRunPara.tUartPara[i].dBaud,tRunPara.tUartPara[i].wParity);
 			if (ret < 0)
 			if (ret < 0)
 			{
 			{
 				printf("%s: outside uart %d open failed!\n", __FUNCTION__, UART_CHANNEL[i]);
 				printf("%s: outside uart %d open failed!\n", __FUNCTION__, UART_CHANNEL[i]);

+ 1 - 1
dtu/dtu_main_t536/app/LcdComm.c

@@ -393,7 +393,7 @@ void HMI_Comm_App(void)  /*10
 					if(tRunPara.tUartPara[i].wProtocol == PROTOCOL_HMI)  // Ãæ°å¹æÔ¼
 					if(tRunPara.tUartPara[i].wProtocol == PROTOCOL_HMI)  // Ãæ°å¹æÔ¼
 					{
 					{
 						int ret;
 						int ret;
-						ret = uart_open(UART_CHANNEL[i],tRunPara.tUartPara[i].wBaud,tRunPara.tUartPara[i].wParity);
+						ret = uart_open(UART_CHANNEL[i],tRunPara.tUartPara[i].dBaud,tRunPara.tUartPara[i].wParity);
 						if (ret < 0) {
 						if (ret < 0) {
 							printf("%s: outside uart %d open failed!\n", __FUNCTION__, UART_CHANNEL[i]);
 							printf("%s: outside uart %d open failed!\n", __FUNCTION__, UART_CHANNEL[i]);
 						} else {
 						} else {

+ 1 - 1
dtu/dtu_main_t536/app/Sys.c

@@ -262,7 +262,7 @@ void SystemInit(void)
 	filelist_createfile();
 	filelist_createfile();
 	//esam_init();
 	//esam_init();
 	FA_Init();	
 	FA_Init();	
-	lcdcomm_init();
+	lcdcomm_init(); 
 	ReadUqua();
 	ReadUqua();
 	fa_g_init();
 	fa_g_init();
 #ifdef METERING_ENERGY
 #ifdef METERING_ENERGY

+ 14 - 2
dtu/dtu_main_t536/app/UnitsLib.c

@@ -378,6 +378,7 @@ void ProtectRelayInit(void)
 		InitTR(&pR->tTZZFG_5S0ms,  pRunSet->dT_ZZFG, 0);     	//无故障延时5s
 		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);  		// 分闸次数过多,闭锁合闸
 		InitTR(&pR->thzbs.tTw100ms100ms,T_100ms,T_100ms);	
 		InitTR(&pR->thzbs.tTw100ms100ms,T_100ms,T_100ms);	
+	#ifndef GW_AREA_MAIN_2021
 		for(i=0;i<8;i++)
 		for(i=0;i<8;i++)
 		{
 		{
 			if(pRunSet->bTT_FDLTz[i])
 			if(pRunSet->bTT_FDLTz[i])
@@ -390,6 +391,7 @@ void ProtectRelayInit(void)
 				InitTR(&pR->tFdl[i].tFdlTime,pRunSet->dTFDL[i], WRN_RET_TIME);  
 				InitTR(&pR->tFdl[i].tFdlTime,pRunSet->dTFDL[i], WRN_RET_TIME);  
 			}
 			}
 		}
 		}
+	#endif
 		fresh_set_soe(EV_TYPE_S, !g_tRelay[sw].run_stu.fa_ls,true,sw);
 		fresh_set_soe(EV_TYPE_S, !g_tRelay[sw].run_stu.fa_ls,true,sw);
 		fresh_set_soe(EV_TYPE_L, g_tRelay[sw].run_stu.fa_ls,true,sw);
 		fresh_set_soe(EV_TYPE_L, g_tRelay[sw].run_stu.fa_ls,true,sw);
 
 
@@ -452,6 +454,11 @@ void ProtectRelayInit(void)
 	#ifdef FUNC_REBOOT_BS_HA_JS_3S
 	#ifdef FUNC_REBOOT_BS_HA_JS_3S
 		InitTR(&pR->tSDHZ.tHW_JS_HA_3STime, T_1s*3, 0);
 		InitTR(&pR->tSDHZ.tHW_JS_HA_3STime, T_1s*3, 0);
 	#endif
 	#endif
+
+		// PT断线
+		#ifdef GW_AREA_MAIN_2021
+		InitTR(&pR->tPTDX.tQDTime,  pRunSet->tPTSet.dTVol,  0);
+		#endif
 	}
 	}
 
 
 	for(i=0;i<VOL_NUMBER;i++)
 	for(i=0;i<VOL_NUMBER;i++)
@@ -785,7 +792,7 @@ void ProtectRelayInit1(void)
 		InitTR_Time(&pR->tSWST.tCTXXYC, 	T_1s*3,	WRN_RET_TIME);  		// CT相序异常
 		InitTR_Time(&pR->tSWST.tCTXXYC, 	T_1s*3,	WRN_RET_TIME);  		// CT相序异常
 		InitTR_Time(&pR->tSWST.tCTYC, 	T_1s*10,	WRN_RET_TIME);  		// CT断线 
 		InitTR_Time(&pR->tSWST.tCTYC, 	T_1s*10,	WRN_RET_TIME);  		// CT断线 
 		InitTR_Time(&pR->tTZZFG_5S0ms,  pRunSet->dT_ZZFG, 0);     	//无故障延时5s
 		InitTR_Time(&pR->tTZZFG_5S0ms,  pRunSet->dT_ZZFG, 0);     	//无故障延时5s
-
+	#ifndef GW_AREA_MAIN_2021
 		for(i=0;i<8;i++)
 		for(i=0;i<8;i++)
 		{
 		{
 			if(pRunSet->bTT_FDLTz[i])
 			if(pRunSet->bTT_FDLTz[i])
@@ -798,7 +805,7 @@ void ProtectRelayInit1(void)
 				InitTR_Time(&pR->tFdl[i].tFdlTime,pRunSet->dTFDL[i], WRN_RET_TIME);  
 				InitTR_Time(&pR->tFdl[i].tFdlTime,pRunSet->dTFDL[i], WRN_RET_TIME);  
 			}
 			}
 		}
 		}
-
+	#endif
 	#ifdef FUNC_DRIVE_JY
 	#ifdef FUNC_DRIVE_JY
 		InitTR(&gb_drive.tDriveUa1Time,pSet->dT_drive_ua1, 0);
 		InitTR(&gb_drive.tDriveUa1Time,pSet->dT_drive_ua1, 0);
 		InitTR(&gb_drive.tDriveUa2Time,pSet->dT_drive_ua2, 0);
 		InitTR(&gb_drive.tDriveUa2Time,pSet->dT_drive_ua2, 0);
@@ -814,6 +821,11 @@ void ProtectRelayInit1(void)
 		InitTR(&gb_drive.tQDTime_fz_end,pRunSet->tSwSet[sw].dT_fz_end, 0);
 		InitTR(&gb_drive.tQDTime_fz_end,pRunSet->tSwSet[sw].dT_fz_end, 0);
 		InitTR(&gb_drive.tQDTime_hz_end,pRunSet->tSwSet[sw].dT_hz_end, 0);
 		InitTR(&gb_drive.tQDTime_hz_end,pRunSet->tSwSet[sw].dT_hz_end, 0);
 	#endif
 	#endif
+
+		// PT断线
+	#ifdef GW_AREA_MAIN_2021
+		InitTR_Time(&pR->tPTDX.tQDTime,  pRunSet->tPTSet.dTVol,  0);
+	#endif
 	}
 	}
 
 
 	for(i=0;i<VOL_NUMBER;i++)
 	for(i=0;i<VOL_NUMBER;i++)

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

@@ -1022,9 +1022,11 @@
 	#define VER_NUM 					50201			// 경굶뵀50.201	
 	#define VER_NUM 					50201			// 경굶뵀50.201	
 	#else
 	#else
 	#define VER_NUM 					50101			// 경굶뵀50.101	
 	#define VER_NUM 					50101			// 경굶뵀50.101	
+	#endif
 	#define NET4_IP5            						//4Mac5IP
 	#define NET4_IP5            						//4Mac5IP
 	#define DEV_GPS_ATGM332D
 	#define DEV_GPS_ATGM332D
-	#endif
+	#define DISP_SET_YYJB
+	#define XDL_ZT
 #else
 #else
 	#ifndef AREA_MAIN
 	#ifndef AREA_MAIN
 		#error 灌땍屢뒈혐브 export _AREA=-D******* 
 		#error 灌땍屢뒈혐브 export _AREA=-D******* 

+ 30 - 0
dtu/dtu_main_t536/app/led.c

@@ -185,7 +185,37 @@ void _led_update_status(void)
 	{
 	{
 		led_set_pub(PUB_LED_RUN, LED_SLOW);
 		led_set_pub(PUB_LED_RUN, LED_SLOW);
 	}
 	}
+#ifdef GW_AREA_MAIN_2021
+		// A相指示灯
+	if (g_run_stu.phayy)
+	{
+		led_set_pub(PUB_LED_PHA,LED_OFF);
+	}
+	else
+	{
+		led_set_pub(PUB_LED_PHA,LED_ON);
+	}
 
 
+	// B相指示灯
+	if (g_run_stu.phbyy)
+	{
+		led_set_pub(PUB_LED_PHB,LED_OFF);
+	}
+	else
+	{
+		led_set_pub(PUB_LED_PHB,LED_ON);
+	}
+
+	// C相指示灯
+	if (g_run_stu.phcyy)
+	{
+		led_set_pub(PUB_LED_PHC,LED_OFF);
+	}
+	else
+	{
+		led_set_pub(PUB_LED_PHC,LED_ON);
+	}
+#endif
 	//异常灯,以内部异常优先级高
 	//异常灯,以内部异常优先级高
 	exerr=0;
 	exerr=0;
 #ifndef GD_AREA_ZHUHAI_V2	//未储能异常	
 #ifndef GD_AREA_ZHUHAI_V2	//未储能异常	

+ 11 - 5
dtu/dtu_main_t536/app/protect.c

@@ -370,7 +370,9 @@ int protect_polling(void)
 		xdl_protect(dTDelta);	// 小电流接地保护
 		xdl_protect(dTDelta);	// 小电流接地保护
 	#endif
 	#endif
 		PT_Check(dTDelta);	
 		PT_Check(dTDelta);	
+	#ifndef GW_AREA_MAIN_2021
 		FDL_Check(dTDelta);	
 		FDL_Check(dTDelta);	
+	#endif
 #ifdef FUN_HCBS
 #ifdef FUN_HCBS
 		hcbs_dataset();
 		hcbs_dataset();
 #endif
 #endif
@@ -406,6 +408,7 @@ int protect_polling(void)
 		vol_PLJL(g_protect.sw,dTDelta);	
 		vol_PLJL(g_protect.sw,dTDelta);	
 		fag_bh(g_protect.sw,dTDelta);
 		fag_bh(g_protect.sw,dTDelta);
 		Pro_hzbs(g_protect.sw,dTDelta);
 		Pro_hzbs(g_protect.sw,dTDelta);
+		Pro_PTDxTz(g_protect.sw,dTDelta);
 		// 其他轮巡类
 		// 其他轮巡类
 		AutoReclose(g_protect.sw,dTDelta);			// 重合闸保护逻辑	
 		AutoReclose(g_protect.sw,dTDelta);			// 重合闸保护逻辑	
 
 
@@ -854,12 +857,12 @@ static int _protect_amp_qd(u32  dStep)
 			||pR->tgoc.sta.bFlag.berrQD
 			||pR->tgoc.sta.bFlag.berrQD
 			||pR->tgoc.sta.bFlag.bextQD
 			||pR->tgoc.sta.bFlag.bextQD
 			||pR->tgoc.sta.bFlag.bllQD;
 			||pR->tgoc.sta.bFlag.bllQD;
-			
+#ifndef GW_AREA_MAIN_2021
 		for(i=0;i<8;i++)
 		for(i=0;i<8;i++)
 		{
 		{
 			bY1|=pR->tFdl[i].sta.bFlag.bTz;
 			bY1|=pR->tFdl[i].sta.bFlag.bTz;
 		}	
 		}	
-
+#endif
 #ifdef GD_AREA_ZHONGSHAN_2020
 #ifdef GD_AREA_ZHONGSHAN_2020
 		bY1|=pR->tgoc.tOc[FAG_GL1].sta.bFlag.bQD  // 启动
 		bY1|=pR->tgoc.tOc[FAG_GL1].sta.bFlag.bQD  // 启动
 			||pR->tgoc.tOc[FAG_GL2].sta.bFlag.bQD
 			||pR->tgoc.tOc[FAG_GL2].sta.bFlag.bQD
@@ -1152,12 +1155,12 @@ static int _protect_zzfg_check(u32 dStep)
 	{
 	{
 		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);
 		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);
 	}
 	}
-
+#ifndef GW_AREA_MAIN_2021
 	for(i=0;i<8;i++)
 	for(i=0;i<8;i++)
 	{
 	{
 		bY1|=pR->tFdl[i].sta.bFlag.bTz;
 		bY1|=pR->tFdl[i].sta.bFlag.bTz;
 	}	
 	}	
-
+#endif
 #ifdef GD_AREA_ZHONGSHAN_2020
 #ifdef GD_AREA_ZHONGSHAN_2020
 	bY1|=pR->tgoc.tOc[FAG_GL1].sta.bFlag.bQD  // 复归
 	bY1|=pR->tgoc.tOc[FAG_GL1].sta.bFlag.bQD  // 复归
 		||pR->tgoc.tOc[FAG_GL2].sta.bFlag.bQD
 		||pR->tgoc.tOc[FAG_GL2].sta.bFlag.bQD
@@ -1378,12 +1381,14 @@ static int _protect_sw_tz(u32 dStep)
 		bTz|=pR->tgoc.tOc[i].sta.bFlag.bTz;  //跳闸
 		bTz|=pR->tgoc.tOc[i].sta.bFlag.bTz;  //跳闸
 	}
 	}
 #endif	
 #endif	
+#ifndef GW_AREA_MAIN_2021
 	for(i=0;i<8;i++)
 	for(i=0;i<8;i++)
 	{
 	{
 		bTz|=pR->tFdl[i].sta.bFlag.bTz;
 		bTz|=pR->tFdl[i].sta.bFlag.bTz;
 		if(pR->tFdl[i].sta.bFlag.bTz)
 		if(pR->tFdl[i].sta.bFlag.bTz)
 			pR->tCHZ.sta.bFlag.bCDWC = false;	//重合闸放电
 			pR->tCHZ.sta.bFlag.bCDWC = false;	//重合闸放电
 	}	
 	}	
+#endif
 	bTz|=pR->uGLFSX.bFlag.bFXDZ;
 	bTz|=pR->uGLFSX.bFlag.bFXDZ;
 	bTz|= (pR->tU0TZ.uZOV.bFlag.bTz		// 合后接地保护动作
 	bTz|= (pR->tU0TZ.uZOV.bFlag.bTz		// 合后接地保护动作
 			||pR->tDYJL.sta.bFlag.bTz
 			||pR->tDYJL.sta.bFlag.bTz
@@ -2180,11 +2185,12 @@ static bool _protect_check_fault(int sw)
 	{
 	{
 		bY1|=(pR->tOC[i].sta.bFlag.bTz||pR->tOC[i].sta.bFlag.bGj);
 		bY1|=(pR->tOC[i].sta.bFlag.bTz||pR->tOC[i].sta.bFlag.bGj);
 	}
 	}
+#ifndef GW_AREA_MAIN_2021
 	for(i=0;i<8;i++)
 	for(i=0;i<8;i++)
 	{
 	{
 		bY1|=pR->tFdl[i].sta.bFlag.bTz;
 		bY1|=pR->tFdl[i].sta.bFlag.bTz;
 	}	
 	}	
-
+#endif
 	bY1|=pR->tgoc.sta.bFlag.bglTz
 	bY1|=pR->tgoc.sta.bFlag.bglTz
 	#if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_MAIN_2020
 	#if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_MAIN_2020
 		||pR->tgoc.sta.bFlag.bgl2Tz
 		||pR->tgoc.sta.bFlag.bgl2Tz

+ 7 - 2
dtu/dtu_main_t536/app/protect.h

@@ -294,8 +294,9 @@ typedef struct TRELAY_T  // 
 	bool  bBSTZ;	// 闭锁跳闸
 	bool  bBSTZ;	// 闭锁跳闸
 
 
 	bool  bARSTFLT; //开关自动复归事故总202004
 	bool  bARSTFLT; //开关自动复归事故总202004
-
-	TFDL_T tFdl[8];	
+#ifndef GW_AREA_MAIN_2021
+	TFDL_T tFdl[8];
+#endif	
 	TOC_T 		tOC[BHOC_NUMBER];		// 过流保护相关
 	TOC_T 		tOC[BHOC_NUMBER];		// 过流保护相关
 	TCH_T 		tCHZ;				// 重合闸
 	TCH_T 		tCHZ;				// 重合闸
 
 
@@ -305,6 +306,10 @@ typedef struct TRELAY_T  // 
 #ifdef	CUSTOMIZE_BZT //备自投
 #ifdef	CUSTOMIZE_BZT //备自投
 	TBZT_T		tBzt;
 	TBZT_T		tBzt;
 #endif	
 #endif	
+
+#ifdef GW_AREA_MAIN_2021
+	TVOL_T		tPTDX;				// PT断线
+#endif
 	TLOSTVOT_T	tLostVot;   		//失压标志
 	TLOSTVOT_T	tLostVot;   		//失压标志
 	TU0_T		tU0TZ;			//合后零压跳闸
 	TU0_T		tU0TZ;			//合后零压跳闸
 	TU0_T		tXXTZ;			//选线跳闸
 	TU0_T		tXXTZ;			//选线跳闸

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

@@ -622,6 +622,10 @@ int  run_status_check(u32 dStep)
 	g_run_stu.rmt_B = (g_rmt_op.key == (1<<RMT_B));
 	g_run_stu.rmt_B = (g_rmt_op.key == (1<<RMT_B));
 	g_run_stu.rmt_C = (g_rmt_op.key == (1<<RMT_C));
 	g_run_stu.rmt_C = (g_rmt_op.key == (1<<RMT_C));
 	g_run_stu.rmt_D = (g_rmt_op.key == (1<<RMT_D));
 	g_run_stu.rmt_D = (g_rmt_op.key == (1<<RMT_D));
+
+	g_run_stu.phayy = OverRelay(g_ui[PUB_AC_UA1].fz, pRunSet->dUPowerFz, pRunSet->dUPowerFz_fh, g_run_stu.phayy);
+	g_run_stu.phbyy = OverRelay(g_ui[PUB_AC_UB1].fz, pRunSet->dUPowerFz, pRunSet->dUPowerFz_fh, g_run_stu.phbyy);
+	g_run_stu.phcyy = OverRelay(g_ui[PUB_AC_UC1].fz, pRunSet->dUPowerFz, pRunSet->dUPowerFz_fh, g_run_stu.phcyy);
 	
 	
 	for(sw=0;sw<g_sw_num;sw++)
 	for(sw=0;sw<g_sw_num;sw++)
 	{
 	{
@@ -1371,12 +1375,12 @@ int app_action_result(void)
 			prun->dz=RY_DZ_BHT;
 			prun->dz=RY_DZ_BHT;
 			prun->gj_led = 1;
 			prun->gj_led = 1;
 		}
 		}
-
+#ifndef GW_AREA_MAIN_2021
 		for(i=0;i<8;i++)
 		for(i=0;i<8;i++)
 		{
 		{
 			fdl|=pR->tFdl[i].sta.bFlag.bTz;
 			fdl|=pR->tFdl[i].sta.bFlag.bTz;
 		}	
 		}	
-
+#endif
 		//失压跳闸+智能分布式越级跳,首端失压跳,故障隔离跳,通信异常跳,都亮动作灯
 		//失压跳闸+智能分布式越级跳,首端失压跳,故障隔离跳,通信异常跳,都亮动作灯
 		if (pR->tLostVot.bLostVotLed
 		if (pR->tLostVot.bLostVotLed
 			|| pR->tgoc.bextTzLed
 			|| pR->tgoc.bextTzLed

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

@@ -118,6 +118,12 @@ struct run_stu
 #endif
 #endif
 	u32 cd;
 	u32 cd;
 	u8 led[CFG_UART_NUM_MAX*2+CFG_ETH_NUM_MAX];	
 	u8 led[CFG_UART_NUM_MAX*2+CFG_ETH_NUM_MAX];	
+
+	u8 phayy;		// A相有压
+	u8 phbyy;		// B相有压
+	u8 phcyy;		// C相有压
+	int us1;	//TODO 定值对接 Ewen
+	int us2;
 };
 };
 
 
 
 

+ 69 - 67
dtu/dtu_main_t536/app/sc1161y.c

@@ -48,7 +48,15 @@
 #include "head.h"
 #include "head.h"
 
 
 u16 g_esam_errno;
 u16 g_esam_errno;
-
+u8 esam_buf[2048];
+
+int OrderSearch(unsigned char *a,int n, unsigned char des) {
+    int i;
+    for (i = 0; i < n; i++)
+        if (des == a[i])
+            return i + 1;
+    return 0;
+}
 
 
 u8 _esam_lrc(u8* buf0, u16 len0,u8* buf1,u16 len1)
 u8 _esam_lrc(u8* buf0, u16 len0,u8* buf1,u16 len1)
 {
 {
@@ -73,77 +81,77 @@ int _esam_cmd(u8* cmd,u16 cmd_len,u8 *in,u16 in_len,u8 *out,u16 out_len)
 {
 {
 	u8 lrc,c,buf[5];
 	u8 lrc,c,buf[5];
 	int i,ret,len=0;
 	int i,ret,len=0;
-	uint32_t us0;
+	uint64_t us0;
+	u8 *pd = NULL;
+	u16 index = 0;
 
 
-	// 计算发送LRC
-	lrc = _esam_lrc(cmd,cmd_len,in,in_len);
+	pd = esam_buf;
 
 
-	// 片选有效
-	dspi_esam_cs(IOCTL_SPI_CS_LOW);
+	//前导字节0X55
+	*pd++ = 0x55;
 
 
-	// 发送前导字节0X55
-	dspi_esam_send(0x55);
+	// 命令
+	memcpy(pd,cmd,cmd_len);
+	pd += cmd_len;
 
 
-	// 发送命令
-	for(i=0;i<cmd_len;i++)
-	{
-		dspi_esam_send(cmd[i]);
-	}
+	// 数据
+	memcpy(pd,in,in_len);
+	pd += in_len;
 	
 	
-	// 发送数据
-	for(i=0;i<in_len;i++)
-	{
-		dspi_esam_send(in[i]);
-	}
-
-	// 发送校验LRC
-	dspi_esam_send(lrc);
-
-	// 片选无效
-//	ustimer_delay(11*USTIMER_US);
-	dspi_esam_cs(IOCTL_SPI_CS_HIGH);
-
-	// 片选再次有效
-	dspi_esam_cs(IOCTL_SPI_CS_LOW);
+	// 计算发送LRC
+	lrc = _esam_lrc(cmd,cmd_len,in,in_len);
+	*pd = lrc;
 
 
+	len = (cmd_len + in_len + 2); // +2 -> 0x55 lrc
+	dspi_esam_send(esam_buf,len);
+	
 	// 接收BUSY状态字,超时3S
 	// 接收BUSY状态字,超时3S
 	c = 0;
 	c = 0;
-	i = 0;
-	us0 = ustimer_get_origin();
-	while(ustimer_get_duration(us0) < 3*USTIMER_SEC)
+	len = 0;
+	us0 = bsp_ustimer_get_origin(); //TODO
+	memset(esam_buf, 0, sizeof(esam_buf));
+	while(bsp_ustimer_get_duration(us0) < 3*USTIMER_SEC)
 	{
 	{
-		i++;
-		c = dspi_esam_recv();
-		if(c == 0x55)
+		dspi_esam_recv(esam_buf, sizeof(esam_buf));
+		index = OrderSearch(esam_buf,sizeof(esam_buf),0x55);
+
+		if(index != 0)
 		{
 		{
+			c = 0x55;
 			break;
 			break;
 		}
 		}
-		else if( c != 0)
-		{
-			rt_printf("c=0x%02x,i=%d.\r\n",c,i);
-		}
 	}
 	}
 
 
 	//如果不成功,直接返回错误
 	//如果不成功,直接返回错误
 	if(c != 0x55)
 	if(c != 0x55)
 	{
 	{
-		rt_printf("%s:接收BUSY状态字超时(c=0x%02x).\r\n",__FUNCTION__,c);
+		rt_printf("%s:接收BUSY状态字超时!\r\n",__FUNCTION__);
 		ret = -11;
 		ret = -11;
 		goto LABEL_RET;
 		goto LABEL_RET;
 	}
 	}
-
+	pd = &esam_buf[index];
 	// 接收固定的4个字节,并检查状态字和长度
 	// 接收固定的4个字节,并检查状态字和长度
-	for(i=0; i<4; i++)
-	{
-		buf[i] = dspi_esam_recv();
-	}
-	if((buf[0] != 0x90) || (buf[1] != 0x00))
+	if((pd[0] != 0x90) || (pd[1] != 0x00))
 	{
 	{
-		buf[i] = dspi_esam_recv();
 		ret = -12;
 		ret = -12;
 		goto LABEL_RET;
 		goto LABEL_RET;
 	}
 	}
-	len = (buf[2]<<8) + buf[3];
+	len = (pd[2]<<8) + pd[3];
+	// 索引位置到buf结束,长度少于应接收报文长度( +4+1 -> CLA INS P1 P2 ... LRC)
+	// 测试未出现这种情况,考虑到有概率还是增加此情况处理。
+	if(index + len +4+1 > sizeof(esam_buf))
+	{
+		u16 cp_len = (sizeof(esam_buf) - index);
+
+		rt_printf("%s 数据接收不完整,再次接收剩余报文,总长度:%d,剩余应接收长度:%d\n",__FUNCTION__,index + len +4+1,cp_len);
+
+		memmove(esam_buf,&esam_buf[index],cp_len);
+		dspi_esam_recv(&esam_buf[cp_len], sizeof(esam_buf)-cp_len);
+
+		index = 0;
+		pd = &esam_buf[index];
+	}
+	
 	if(len > out_len)
 	if(len > out_len)
 	{
 	{
 		rt_printf("%s:输出缓冲空间不足,缓冲长度=%d,数据长度=%d.\r\n",__FUNCTION__,out_len,len);
 		rt_printf("%s:输出缓冲空间不足,缓冲长度=%d,数据长度=%d.\r\n",__FUNCTION__,out_len,len);
@@ -152,15 +160,13 @@ int _esam_cmd(u8* cmd,u16 cmd_len,u8 *in,u16 in_len,u8 *out,u16 out_len)
 		goto LABEL_RET;
 		goto LABEL_RET;
 	}
 	}
 
 
-	// 根据长度接收数据
-	for(i=0; i<len; i++)
-	{
-		out[i] = dspi_esam_recv();
-	}
+	pd +=4;
+	memcpy(out,pd,len);
+	pd += len;
 
 
-	// 接收并检查LRC2
-	c = dspi_esam_recv();
-	lrc = _esam_lrc(buf,4,out,len);
+	// LRC2
+	c = *pd;
+	lrc = _esam_lrc(&esam_buf[index],4,out,len);
 	if(c != lrc)
 	if(c != lrc)
 	{
 	{
 		rt_printf("%s:接收=0x%02x,计算=0x%02x.\r\n",__FUNCTION__,c,lrc);
 		rt_printf("%s:接收=0x%02x,计算=0x%02x.\r\n",__FUNCTION__,c,lrc);
@@ -173,32 +179,28 @@ int _esam_cmd(u8* cmd,u16 cmd_len,u8 *in,u16 in_len,u8 *out,u16 out_len)
 
 
 LABEL_RET:	
 LABEL_RET:	
 
 
-	// 片选无效
-	dspi_esam_cs(IOCTL_SPI_CS_HIGH);
-
 	if(g_print_sys || ret < 0)
 	if(g_print_sys || ret < 0)
 	{
 	{
 		print_mem("esam_cmd:",cmd,cmd_len);
 		print_mem("esam_cmd:",cmd,cmd_len);
 		print_mem("esam_in :",in, in_len);
 		print_mem("esam_in :",in, in_len);
 		print_mem("esam_out:",out,len);
 		print_mem("esam_out:",out,len);
 	}
 	}
-
+	
 	if(ret >= 0)
 	if(ret >= 0)
 	{
 	{
 		g_esam_errno = 0x9000;
 		g_esam_errno = 0x9000;
 	}
 	}
 	else if(ret == -12)
 	else if(ret == -12)
 	{
 	{
-		rt_printf("%s:返回状态字错误(0x%02x,0x%02x,0x%02x,0x%02x,0x%02x)c=%02x.\r\n",__FUNCTION__,buf[0],buf[1],buf[2],buf[3],buf[4],c);
-		g_esam_errno = (buf[0]<<8) | buf[1];
+		rt_printf("%s:返回状态字错误(0x%02x,0x%02x,0x%02x,0x%02x,0x%02x)c=%02x.\r\n",__FUNCTION__,pd[0],pd[1],pd[2],pd[3],pd[4],pd[5]);
+		g_esam_errno = (pd[0]<<8) | pd[1];
 	}
 	}
 	else
 	else
 	{
 	{
 		g_esam_errno = ret;
 		g_esam_errno = ret;
 	}
 	}
-	return ret;
 
 
-	return 0;
+	return ret;
 }
 }
 
 
 
 
@@ -628,14 +630,14 @@ int esam_init(void)
 	ret = esam_get_version(&out,1);
 	ret = esam_get_version(&out,1);
 	if(ret < 0)
 	if(ret < 0)
 	{
 	{
-		rt_printf("加密芯片检查失败!");
+		rt_printf("加密芯片检查失败!\n");
 
 
 		rt_err_set(ERR_CODE_ESAM,0);
 		rt_err_set(ERR_CODE_ESAM,0);
 		
 		
 		return ret;
 		return ret;
 	}
 	}
 	
 	
-	rt_printf("加密芯片检查通过!");
+	rt_printf("加密芯片检查通过!\n");
 	return 0;
 	return 0;
 	
 	
 }
 }
@@ -952,8 +954,8 @@ int esam_info_printf(void)
 
 
 //	esam_test();
 //	esam_test();
 
 
-	ret = esam_cer_zd_update(g_test_buf,cer_len);
-	rt_printf("更新终端正式证书[%d].\r\n",ret);
+	// ret = esam_cer_zd_update(g_test_buf,cer_len);
+	// rt_printf("更新终端正式证书[%d].\r\n",ret);
 
 
 	g_print_sys = g_print_sys_old;
 	g_print_sys = g_print_sys_old;
 	return 0; 
 	return 0; 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 719 - 361
dtu/dtu_main_t536/app/set.c


+ 141 - 23
dtu/dtu_main_t536/app/set.h

@@ -178,28 +178,36 @@ enum
 #endif
 #endif
 
 
 //公共定值
 //公共定值
-#if defined GD_AREA_ECZD_2020 && !defined GD_AREA_ECZD_SHAOGUAN_2021 //2020二次指导意见 2020-9-9
-	GROUP_SET_SCT,		//定值区
-#endif
-	GROUP_SET_EQPPARA,		//设备参数
-#if defined GD_AREA_ECZD_2020 || defined FUNC_LINE_SEL_TY_SEL
-	GROUP_SET_PUBTT,		//控制字
-	GROUP_SET_PUBYB,		//软压板
-#endif
-#ifdef BH_FA_INONE_PUBLIC
-	GROUP_SET_FUNC, 		//功能选择部分
-#endif
-	GROUP_SET_PUBSET,			//电压参数
-	GROUP_SET_FDL,			//非电量
-#ifdef FUNC_XDLJD_PUB
-	#ifdef FUN_JDXX
-		GROUP_SET_JDXX, 		// 接地选线 
+#ifdef GW_AREA_MAIN_2021
+	GROUP_SET_SCT,
+	GROUP_SET_VOL,			// 电压参数
+	GROUP_SET_OVU,			// 电压越限
+	GROUP_SET_DY,			// 电源有压无压
+	GROUP_SET_PUB_DLYX,		//
+	GROUP_SET_OTHERS_PUB,	// 其它
+#else
+	#if defined GD_AREA_ECZD_2020 && !defined GD_AREA_ECZD_SHAOGUAN_2021 //2020二次指导意见 2020-9-9
+		GROUP_SET_SCT,		//定值区
+	#endif
+		GROUP_SET_EQPPARA,		//设备参数
+	#if defined GD_AREA_ECZD_2020 || defined FUNC_LINE_SEL_TY_SEL
+		GROUP_SET_PUBTT,		//控制字
+		GROUP_SET_PUBYB,		//软压板
+	#endif
+	#ifdef BH_FA_INONE_PUBLIC
+		GROUP_SET_FUNC, 		//功能选择部分
+	#endif
+		GROUP_SET_PUBSET,			//电压参数
+		GROUP_SET_FDL,			//非电量
+	#ifdef FUNC_XDLJD_PUB
+		#ifdef FUN_JDXX
+			GROUP_SET_JDXX, 		// 接地选线 
+		#endif
+	#endif
+	#ifdef DZ_STANDBY
+		GROUP_SET_STANDBY,	//备用定值
 	#endif
 	#endif
 #endif
 #endif
-#ifdef DZ_STANDBY
-	GROUP_SET_STANDBY,	//备用定值
-#endif
-
 //装置参数
 //装置参数
 	GROUP_PARA_PROTOCAL,	// 规约
 	GROUP_PARA_PROTOCAL,	// 规约
 	GROUP_PARA_LINK,		// 级联
 	GROUP_PARA_LINK,		// 级联
@@ -295,6 +303,7 @@ enum
 	PROTOCOL_SXYB, //数显仪表
 	PROTOCOL_SXYB, //数显仪表
 	PROTOCOL_MAINTAIN,
 	PROTOCOL_MAINTAIN,
 	PROTOCOL_GPS,
 	PROTOCOL_GPS,
+	PROTOCOL_AUTHOR_BL,
 	PROTOCOL_IDLE,	// 空闲,通过通讯子站级联时使用
 	PROTOCOL_IDLE,	// 空闲,通过通讯子站级联时使用
 #ifdef BATTERY_WITH_COMM
 #ifdef BATTERY_WITH_COMM
 	PROTOCOL_POWER_MOD,  // 兴通力电源模块通讯
 	PROTOCOL_POWER_MOD,  // 兴通力电源模块通讯
@@ -1069,7 +1078,79 @@ enum
 // 通用定值
 // 通用定值
 enum 
 enum 
 {
 {
-	//电压参数	
+#ifdef GW_AREA_MAIN_2021
+	SET_LABLE_EQUSET=0,		//列表名
+	SET_SECTION,			//定值区
+
+	//电压参数
+	SET_LABLE_VOL=0,
+	SET_POWER_U,			// 线路有压定值, 电源有压无压、上电合闸、失压分闸定值均使用此定值
+	SET_DOWN_U,				// 线路无压定值	   电源无压、失压分闸定值均使用此定值		  // add by zhy 20211209
+	SET_PHLED_U,			// 带电指示定值	   		  								   // add by zhy 20211209
+	SET_PUB_U0_U,			// 零序过压定值    零压闭锁零流及合后零压判断均采用本电压
+	SET_PT1_U,				// PT1断线定值
+	SET_PT2_U,				// PT2断线定值
+	SET_PTDX_GJ_TT,			// PT断线告警投退
+	SET_PTDX_TZ_TT,			// PT断线跳闸投退
+	SET_PTDX_T,				// PT断线检测时间
+
+	//电压越限
+	SET_LABLE_OVU,
+	SET_GDY_TT,				//过电压判断
+	SET_GDY_U,
+	SET_GDY_T,
+	SET_DDY_TT,				// 低电压判断
+	SET_DDY_U,
+	SET_DDY_T,
+	SET_SYGJ_TT,			// 失压告警判断
+	SET_SYGJ_U,
+	SET_SYGJ_T,
+
+	//电源判断
+	SET_LABLE_DY,
+	SET_YY_TT,				// 有压鉴别投退
+	SET_YY_T,				// PT有压延时
+	SET_WY_TT,				// 无压鉴别投退
+	SET_WY_T,				// PT无压延时
+	// SET_PTDX1_TT,			// PT1断线鉴别投退
+	// SET_PTDX1_T,			// PT1断线延时
+	// SET_PTDX2_TT,			// PT2断线鉴别投退
+	// SET_PTDX2_T,			// PT2断线延时
+	SET_FA_POW1,			// FA电源1选择
+	SET_FA_POW2,			// FA电源2选择
+
+	//零压定值
+	// SET_LABLE_U0GJ,
+	// SET_U0GJ_TT,			// 零序过压告警投退
+	// SET_U0GJ_T,				// 零序过压时间
+
+	//电流越限
+	SET_LABLE_PUB_OVI,
+	SET_PUB_TO_SW_TT,			// 同步定值到开关
+	SET_PUB_OVLOAD_TT,			// 电流重载
+	SET_PUB_OV_I,				// 
+	SET_PUB_OV_T,				// 
+	SET_PUB_DLGZ_TT,			// 电流过载
+	SET_PUB_GZ_I,				// 
+	SET_PUB_GZ_T,				// 
+	SET_PUB_DLYX_TT,			// 电流越限
+	SET_PUB_DLYX_I,				// 
+	SET_PUB_DLYX_T,				// 
+
+	// 其他
+	SET_TT_OTHER_PUB,		
+	SET_ZYB_TT,				// 软压板投退 
+	SET_ZBHYB_TT,			// 总保护软压板投退	
+	SET_ZYKYB_TT,			// 总遥控软压板投退
+	SET_TT_GZJD,			// 经高阻接地投退
+	SET_TBLTYPE,			// 小电流突变方式
+	SET_FILTER,				// 小电流信号滤波方式
+	SET_WAVETYPE,			// 小波类型
+	SET_WAVE_ORDER,			// 小波分解阶数
+	SET_HILBERT,			// H 变换
+	SET_PUB_BH_TT,			// 常规保护投退
+#else
+/* 以下为南网相关定值 */
 #if defined GD_AREA_ECZD_2020 && !defined GD_AREA_ECZD_SHAOGUAN_2021//2020二次指导意见 2020-9-8
 #if defined GD_AREA_ECZD_2020 && !defined GD_AREA_ECZD_SHAOGUAN_2021//2020二次指导意见 2020-9-8
 	SET_LABLE_SEC_SET=0,		//列表名
 	SET_LABLE_SEC_SET=0,		//列表名
 	SET_SECTION,			//定值区
 	SET_SECTION,			//定值区
@@ -1302,6 +1383,7 @@ enum
 		CSSET_BY59, 	//备用定值59
 		CSSET_BY59, 	//备用定值59
 		CSSET_BY60, 	//备用定值60
 		CSSET_BY60, 	//备用定值60
 	#endif
 	#endif
+	#endif
 #endif
 #endif
 	SET_PUB_NUM 
 	SET_PUB_NUM 
 };
 };
@@ -1694,7 +1776,7 @@ enum
 // 串口参数结构体
 // 串口参数结构体
 typedef struct SERIAL_PARA
 typedef struct SERIAL_PARA
 {
 {
-	WORD	wBaud;   					//485 波特	
+	DWORD	dBaud;   					//485 波特	
 	WORD     wParity;      				// 串口校验方式无奇偶校验等
 	WORD     wParity;      				// 串口校验方式无奇偶校验等
 	WORD	wProtocol;  				//规约类型
 	WORD	wProtocol;  				//规约类型
 	bool		bInit;
 	bool		bInit;
@@ -2069,13 +2151,47 @@ typedef struct VOL_SET
 	DWORD   dUVol;				// 电压定值
 	DWORD   dUVol;				// 电压定值
 	DWORD   dUVol_fh;			// 电压定值返回
 	DWORD   dUVol_fh;			// 电压定值返回
 	DWORD	dTVol;			
 	DWORD	dTVol;			
-	bool        bTT;
+	bool    bTT;
+	bool    bTz;
 }VOL_SET;
 }VOL_SET;
 
 
 //保护定值结构
 //保护定值结构
 typedef struct TSET
 typedef struct TSET
 {	
 {	
+#ifdef GW_AREA_MAIN_2021
+	// VOL_SET tVolSet[VOL_NUMBER];		//电压定值 含 过电压、低电压、电源有压,电源无压 U0告警
+	VOL_SET tPTSet;						//PT断线
+	
+	WORD  	wPwr1Sel;				//Power1 选择
+	WORD  	wPwr2Sel;				//Power2 选择
+	DWORD	dOverU0;
+	DWORD	dOverU0_fh;
+
+	DWORD	dUPower;				// 上电合闸电压定值
+	DWORD	dUPower_fh;				// 上电合闸返回值为定值的0.9倍
+	DWORD	dUPowerLost;			// 失压分闸返回值为定值的1.1倍		
+	DWORD	dUPowerLost_fh;			// 失压分闸返回值为定值的1.1倍	
+	DWORD	dUPowerFz;				// 有压定值幅值
+	DWORD	dUPowerFz_fh;			// 有压定值幅值返回值为定值的0.9倍	
+	
+	DWORD	dU0Jxjd;				//间歇接地 电压定值
+	DWORD	dU0Jxjd_fh;				//间歇接地 返回值为定值的0.9倍
 
 
+
+	bool	bTT_ZYB;				// 总软压板
+	bool	bTT_ZBHYB;				// 保护总软压板
+	bool	bTT_ZYKYB;				// 遥控总软压板
+
+	bool	bTT_GZJD;				// 经高阻接地投退
+	WORD	bTT_TBLTYPE;			// 小电流突变方式
+	WORD	bTT_FILTER;				// 小电流信号滤波方式
+	BYTE	bTT_WAVE[8];			// 小波类型
+	WORD	bTT_WAVE_ORDER;			// 小波分解阶数
+	bool	bTT_HILEBERT;			// H 变换
+	bool	bTT_PUB_BH;				// 常规保护
+
+	bool 	bTT_PUB_SET_TO_SW;		// 同步公共定值到开关
+#endif
 	u8  section;  //定值区
 	u8  section;  //定值区
 	float  ct_one; //保护ct一次值
 	float  ct_one; //保护ct一次值
 	float  ct_two;//保护ct二次值
 	float  ct_two;//保护ct二次值
@@ -2257,9 +2373,11 @@ typedef struct TSET
 	bool bKG2_DP_DELTAF;	//低频滑差闭锁投 =1投入 =0 退出
 	bool bKG2_DP_DELTAF;	//低频滑差闭锁投 =1投入 =0 退出
 	DWORD dU_U0BS;
 	DWORD dU_U0BS;
 	DWORD dU_DDYBS;
 	DWORD dU_DDYBS;
+#ifndef GW_AREA_MAIN_2021
 	bool bTT_FDLTz[8];		//非电量保护
 	bool bTT_FDLTz[8];		//非电量保护
 	bool bTT_FDLGj[8];		//非电量保护
 	bool bTT_FDLGj[8];		//非电量保护
 	DWORD dTFDL[8];		//非电量保护
 	DWORD dTFDL[8];		//非电量保护
+#endif
 #ifdef XDL_ZT
 #ifdef XDL_ZT
 	bool    bTT_xdl;				// 小电流接地投入,只要任一线路小电流接地投入就投入
 	bool    bTT_xdl;				// 小电流接地投入,只要任一线路小电流接地投入就投入
 	DWORD 	dU_xdl_u0[2];      		// 小电流零压定值
 	DWORD 	dU_xdl_u0[2];      		// 小电流零压定值

+ 7 - 0
dtu/dtu_main_t536/app/switch.c

@@ -479,6 +479,7 @@ const s8 * g_pub_di_name[PUB_DI_NUM] =
 #else
 #else
 	"遥信屏蔽压板",   		//  13
 	"遥信屏蔽压板",   		//  13
 #endif	
 #endif	
+#ifndef GW_AREA_MAIN_2021
 	"非电量1开入",    		//  14
 	"非电量1开入",    		//  14
 	"非电量2开入",   		// 15 
 	"非电量2开入",   		// 15 
 	"非电量3开入",   		 // 16 
 	"非电量3开入",   		 // 16 
@@ -487,6 +488,7 @@ const s8 * g_pub_di_name[PUB_DI_NUM] =
 	"非电量6开入",    		// 19 
 	"非电量6开入",    		// 19 
 	"非电量7开入",    		// 20
 	"非电量7开入",    		// 20
 	"非电量8开入",			//  21
 	"非电量8开入",			//  21
+#endif
 	"开入1",          				//  22
 	"开入1",          				//  22
 	"开入2",          				//  23
 	"开入2",          				//  23
 	"开入3",          //  24
 	"开入3",          //  24
@@ -671,6 +673,11 @@ const s8 * g_pub_led_name[PUB_LED_NUM]=
 #ifdef	LINK_ERR_LED
 #ifdef	LINK_ERR_LED
 	"级联异常灯",
 	"级联异常灯",
 #endif
 #endif
+#ifdef GW_AREA_MAIN_2021
+	"A相指示灯",
+	"B相指示灯",
+	"C相指示灯",
+#endif
 };
 };
 
 
 // 开关公共模拟量名称
 // 开关公共模拟量名称

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

@@ -417,6 +417,7 @@ enum
 	PUB_DI_REBOOT,
 	PUB_DI_REBOOT,
 	PUB_DI_BHALL,
 	PUB_DI_BHALL,
 	PUB_DI_JX,
 	PUB_DI_JX,
+#ifndef GW_AREA_MAIN_2021
 	PUB_DI_FDL1,
 	PUB_DI_FDL1,
 	PUB_DI_FDL2,
 	PUB_DI_FDL2,
 	PUB_DI_FDL3,
 	PUB_DI_FDL3,
@@ -424,7 +425,8 @@ enum
 	PUB_DI_FDL5,
 	PUB_DI_FDL5,
 	PUB_DI_FDL6,
 	PUB_DI_FDL6,
 	PUB_DI_FDL7,
 	PUB_DI_FDL7,
-	PUB_DI_FDL8,	
+	PUB_DI_FDL8,
+#endif	
 	PUB_DI_1,
 	PUB_DI_1,
 	PUB_DI_2,
 	PUB_DI_2,
 	PUB_DI_3,
 	PUB_DI_3,
@@ -593,7 +595,11 @@ enum
 #ifdef	LINK_ERR_LED
 #ifdef	LINK_ERR_LED
 	PUB_LED_LINK_ERR,	//"¼¶ÁªÒì³£µÆ",
 	PUB_LED_LINK_ERR,	//"¼¶ÁªÒì³£µÆ",
 #endif
 #endif
-
+#ifdef GW_AREA_MAIN_2021
+	PUB_LED_PHA,
+	PUB_LED_PHB,
+	PUB_LED_PHC,
+#endif
 	PUB_LED_NUM,
 	PUB_LED_NUM,
 };
 };
 
 

+ 201 - 22
dtu/dtu_main_t536/app/vol.c

@@ -37,14 +37,17 @@ void vol_over(DWORD  dStep,int vno,int index,int soeno)
 	bool  bQDD=false; 	
 	bool  bQDD=false; 	
 	TVOL_T *pvol = &g_tVol[vno];
 	TVOL_T *pvol = &g_tVol[vno];
 	VOL_SET *pSet = &pRunSet->tVolSet[vno];
 	VOL_SET *pSet = &pRunSet->tVolSet[vno];
-
-#ifdef DISP_SET_YYJB
-	if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2)&&(vno!=VOL_WY_POW1)&&(vno!=VOL_WY_POW2))
+#ifndef GW_AREA_MAIN_2021
+	#ifdef DISP_SET_YYJB
+		if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2)&&(vno!=VOL_WY_POW1)&&(vno!=VOL_WY_POW2))
+	#else
+		if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2))
+	#endif
 #else
 #else
-	if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2))
+	if((vno!=VOL_WY_POW1)&&(vno!=VOL_WY_POW2))
 #endif
 #endif
 	{
 	{
-		#ifdef DISP_SET_YYJB
+		#if defined DISP_SET_YYJB && !defined GW_AREA_MAIN_2021
            if(vno==VOL_YY_POW1)
            if(vno==VOL_YY_POW1)
 	       {
 	       {
 		       bQDD = OverRelay(g_sw_pub.m2_max[2], pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD);
 		       bQDD = OverRelay(g_sw_pub.m2_max[2], pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD);
@@ -75,7 +78,7 @@ void vol_over(DWORD  dStep,int vno,int index,int soeno)
 		if(soe_check(soeno)==false)	
 		if(soe_check(soeno)==false)	
 		{
 		{
 			DWORD Uab;
 			DWORD Uab;
-			#ifdef DISP_SET_YYJB
+			#if defined DISP_SET_YYJB && !defined GW_AREA_MAIN_2021
 	           if(vno==VOL_YY_POW1)
 	           if(vno==VOL_YY_POW1)
 		       {			      
 		       {			      
 				   Uab = _Mul_Div_U(sqrt_32fix(g_sw_pub.m2_max[2]), 256, g_ui[index].m2_factor_k);
 				   Uab = _Mul_Div_U(sqrt_32fix(g_sw_pub.m2_max[2]), 256, g_ui[index].m2_factor_k);
@@ -109,10 +112,11 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 	TVOL_T *pvol = &g_tVol[vno];
 	TVOL_T *pvol = &g_tVol[vno];
 	VOL_SET *pSet = &pRunSet->tVolSet[vno];
 	VOL_SET *pSet = &pRunSet->tVolSet[vno];
 	static bool bCYY_bk[VOL_NUMBER]={false},bQD_bk[VOL_NUMBER]={false},bGj_bk[VOL_NUMBER]={false},bQDD_H_bk[VOL_NUMBER]={false};
 	static bool bCYY_bk[VOL_NUMBER]={false},bQD_bk[VOL_NUMBER]={false},bGj_bk[VOL_NUMBER]={false},bQDD_H_bk[VOL_NUMBER]={false};
-	
+#ifndef GW_AREA_MAIN_2021
 	if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2))
 	if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2))
+#endif
 	{
 	{
-		#ifdef DISP_SET_YYJB
+		#if defined DISP_SET_YYJB && !defined GW_AREA_MAIN_2021
            if(vno==VOL_WY_POW1)
            if(vno==VOL_WY_POW1)
 	       {
 	       {
 		       bQDD_H = OverRelay(g_sw_pub.m2_max[2], pSet->dUVol,pSet->dUVol,false);
 		       bQDD_H = OverRelay(g_sw_pub.m2_max[2], pSet->dUVol,pSet->dUVol,false);
@@ -129,11 +133,12 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 		   bQDD_H = OverRelay(g_ui[index].m2[0], pSet->dUVol,pSet->dUVol,false); 
 		   bQDD_H = OverRelay(g_ui[index].m2[0], pSet->dUVol,pSet->dUVol,false); 
 		#endif
 		#endif
 	}
 	}
+#ifndef GW_AREA_MAIN_2021
 	else if((vno==VOL_DDY_DC1)||(vno==VOL_DDY_DC2))
 	else if((vno==VOL_DDY_DC1)||(vno==VOL_DDY_DC2))
 	{
 	{
 		bQDD_H = OverRelay(_AbsL(g_sw_pub.ac_in[index]), pSet->dUVol,pSet->dUVol,false); 
 		bQDD_H = OverRelay(_AbsL(g_sw_pub.ac_in[index]), pSet->dUVol,pSet->dUVol,false); 
 	}
 	}
-
+#endif
 	//有压充电
 	//有压充电
 	RunTR(&pvol->tCYYTime, (bQDD_H|pvol->sta.bFlag.bCYY), dStep);		
 	RunTR(&pvol->tCYYTime, (bQDD_H|pvol->sta.bFlag.bCYY), dStep);		
 	pvol->sta.bFlag.bCYY = pvol->tCYYTime.boolTrip&&pSet->bTT;
 	pvol->sta.bFlag.bCYY = pvol->tCYYTime.boolTrip&&pSet->bTT;
@@ -143,10 +148,11 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 	{
 	{
 		pvol->sta.bFlag.bQDWave=false;
 		pvol->sta.bFlag.bQDWave=false;
 	}	
 	}	
-
+#ifndef GW_AREA_MAIN_2021
 	if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2))
 	if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2))
+#endif
 	{
 	{
-		#ifdef DISP_SET_YYJB
+		#if defined DISP_SET_YYJB && !defined GW_AREA_MAIN_2021
            if(vno==VOL_WY_POW1)
            if(vno==VOL_WY_POW1)
 	       {
 	       {
 		       bQDD = LowRelay(g_sw_pub.m2_max[2], pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD);
 		       bQDD = LowRelay(g_sw_pub.m2_max[2], pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD);
@@ -163,17 +169,19 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 		   bQDD = LowRelay(g_ui[index].m2[0], pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD);  
 		   bQDD = LowRelay(g_ui[index].m2[0], pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD);  
 		#endif
 		#endif
 	}
 	}
+#ifndef GW_AREA_MAIN_2021
 	else if((vno==VOL_DDY_DC1)||(vno==VOL_DDY_DC2))
 	else if((vno==VOL_DDY_DC1)||(vno==VOL_DDY_DC2))
 	{
 	{
 		bQDD = LowRelay(_AbsL(g_sw_pub.ac_in[index]), pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD); 
 		bQDD = LowRelay(_AbsL(g_sw_pub.ac_in[index]), pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD); 
 	}
 	}
-
+#endif
 	pvol->sta.bFlag.bQD = (pSet->bTT&&bQDD&&pvol->sta.bFlag.bCYY);
 	pvol->sta.bFlag.bQD = (pSet->bTT&&bQDD&&pvol->sta.bFlag.bCYY);
 	if(pvol->sta.bFlag.bQD)
 	if(pvol->sta.bFlag.bQD)
 	{
 	{
 		if(!pvol->sta.bFlag.bQDWave)
 		if(!pvol->sta.bFlag.bQDWave)
 		{
 		{
 			int sw;
 			int sw;
+		#ifndef GW_AREA_MAIN_2021
 			if(vno==VOL_DDY_Uab1||vno==VOL_DDY_Ubc1||vno==VOL_DDY_Uca1)
 			if(vno==VOL_DDY_Uab1||vno==VOL_DDY_Ubc1||vno==VOL_DDY_Uca1)
 			{
 			{
 
 
@@ -198,7 +206,33 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 						rcd_start(sw,RECORD_TYPE_XLSY, RECORD_LEN_TZQD); 	// 线路低电压,启动开关录波
 						rcd_start(sw,RECORD_TYPE_XLSY, RECORD_LEN_TZQD); 	// 线路低电压,启动开关录波
 					}
 					}
 				}
 				}
-			}		
+			}	
+		#else	
+			if(vno==VOL_SYGJ_Uab1||vno==VOL_SYGJ_Ubc1||vno==VOL_SYGJ_Uca1)
+			{
+				bool bY1;
+				bY1 = g_tVol[VOL_SYGJ_Uab1].sta.bFlag.bQDWave
+					||g_tVol[VOL_SYGJ_Ubc1].sta.bFlag.bQDWave
+					||g_tVol[VOL_SYGJ_Uca1].sta.bFlag.bQDWave;  // 判断是否启动失压告警
+				for(sw=0;sw<g_sw_num;sw++)
+				{
+					if(!pRunSet->tSwSet[sw].bTT_Power_v2&&!bY1)
+						rcd_start(sw,RECORD_TYPE_XLSY, RECORD_LEN_TZQD); 	// 线路失压告警,启动开关录波
+				}
+			}
+			if(vno==VOL_SYGJ_Uab2||vno==VOL_SYGJ_Ubc2||vno==VOL_SYGJ_Uca2)
+			{
+				bool bY1;
+				bY1 = g_tVol[VOL_SYGJ_Uab2].sta.bFlag.bQDWave
+					||g_tVol[VOL_SYGJ_Ubc2].sta.bFlag.bQDWave
+					||g_tVol[VOL_SYGJ_Uca2].sta.bFlag.bQDWave;  // 判断是否启动失压告警
+				for(sw=0;sw<g_sw_num;sw++)
+				{
+					if(pRunSet->tSwSet[sw].bTT_Power_v2&&!bY1)
+						rcd_start(sw,RECORD_TYPE_XLSY, RECORD_LEN_TZQD); 	// 线路失压告警,启动开关录波
+				}
+			}
+		#endif
 			pvol->sta.bFlag.bQDWave=true;
 			pvol->sta.bFlag.bQDWave=true;
 		}
 		}
 	}
 	}
@@ -206,7 +240,7 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 	/***********动作*********************************/
 	/***********动作*********************************/
 	RunTR(&pvol->tQDTime, pvol->sta.bFlag.bQD, dStep);		
 	RunTR(&pvol->tQDTime, pvol->sta.bFlag.bQD, dStep);		
 	pvol->sta.bFlag.bGj = pvol->tQDTime.boolTrip;
 	pvol->sta.bFlag.bGj = pvol->tQDTime.boolTrip;
-
+#ifndef GW_AREA_MAIN_2021
 	if(vno==VOL_DDY_DC1)
 	if(vno==VOL_DDY_DC1)
 	{
 	{
 		if((bCYY_bk[VOL_DDY_DC1]!=pvol->sta.bFlag.bCYY)
 		if((bCYY_bk[VOL_DDY_DC1]!=pvol->sta.bFlag.bCYY)
@@ -253,7 +287,7 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 			bQDD_H_bk[VOL_DDY_DC2]=bQDD_H;
 			bQDD_H_bk[VOL_DDY_DC2]=bQDD_H;
 		}		
 		}		
 	}
 	}
-
+#endif
 	
 	
 	/************事件记录及出口****************************/
 	/************事件记录及出口****************************/
 	if(pvol->sta.bFlag.bGj) 
 	if(pvol->sta.bFlag.bGj) 
@@ -263,10 +297,11 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 		if(soe_check(soeno)==false)	
 		if(soe_check(soeno)==false)	
 		{
 		{
 			DWORD Uab;
 			DWORD Uab;
-
+		#ifndef GW_AREA_MAIN_2021
 			if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2))
 			if((vno!=VOL_DDY_DC1)&&(vno!=VOL_DDY_DC2))
+		#endif
 			{
 			{
-				#ifdef DISP_SET_YYJB
+				#if defined DISP_SET_YYJB && !defined GW_AREA_MAIN_2021
 		           if(vno==VOL_WY_POW1)
 		           if(vno==VOL_WY_POW1)
 			       {			      
 			       {			      
 					   Uab = _Mul_Div_U(sqrt_32fix(g_sw_pub.m2_max[2]), 256, g_ui[index].m2_factor_k);
 					   Uab = _Mul_Div_U(sqrt_32fix(g_sw_pub.m2_max[2]), 256, g_ui[index].m2_factor_k);
@@ -283,12 +318,13 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 				   Uab = _Mul_Div_U(sqrt_32fix(g_ui[index].m2[0]), 256, g_ui[index].m2_factor_k);
 				   Uab = _Mul_Div_U(sqrt_32fix(g_ui[index].m2[0]), 256, g_ui[index].m2_factor_k);
 				#endif
 				#endif
 			}
 			}
+		#ifndef GW_AREA_MAIN_2021
 			else if((vno==VOL_DDY_DC1)||(vno==VOL_DDY_DC2))
 			else if((vno==VOL_DDY_DC1)||(vno==VOL_DDY_DC2))
 			{
 			{
 				Uab = g_sw_pub.ac_in[index];
 				Uab = g_sw_pub.ac_in[index];
 			}
 			}
-			
-
+		#endif
+		#ifndef GW_AREA_MAIN_2021
 			if(vno==VOL_DDY_Uab1||vno==VOL_DDY_Ubc1||vno==VOL_DDY_Uca1)
 			if(vno==VOL_DDY_Uab1||vno==VOL_DDY_Ubc1||vno==VOL_DDY_Uca1)
 			{
 			{
 				bool bY1;
 				bool bY1;
@@ -315,7 +351,46 @@ void vol_low(DWORD  dStep,int vno,int index,int soeno)
 					}
 					}
 				}
 				}
 			}	
 			}	
-
+		#else
+			if(vno==VOL_SYGJ_Uab1||vno==VOL_SYGJ_Ubc1||vno==VOL_SYGJ_Uca1)
+			{
+				bool bY1;
+				bY1 = soe_check(EV_UAB1SYGJ) ||soe_check(EV_UBC1SYGJ) ||soe_check(EV_UCA1SYGJ);  // 判断是否启动失压告警
+				for(sw=0;sw<g_sw_num;sw++)
+				{
+					if(!pRunSet->tSwSet[sw].bTT_Power_v2)
+					{
+						if(!bY1 && BH_WAVETIME_EN(pSet->dTVol))
+						{
+						#if(EN_REC_MORE_WAVES==1)
+							rcd_start(sw,RECORD_TYPE_XLSY, g_record_XLSY_waves);
+						#else
+							rcd_start(sw,RECORD_TYPE_XLSY, RECORD_LEN_TZQD); 	// 线路低电压,启动开关录波
+						#endif
+						}
+					}
+				}
+			}
+			if(vno==VOL_SYGJ_Uab2||vno==VOL_SYGJ_Ubc2||vno==VOL_SYGJ_Uca2)
+			{
+				bool bY1;
+				bY1 = soe_check(EV_UAB2SYGJ)||soe_check(EV_UBC2SYGJ) ||soe_check(EV_UCA2SYGJ);  // 判断是否启动失压告警
+				for(sw=0;sw<g_sw_num;sw++)
+				{
+					if(pRunSet->tSwSet[sw].bTT_Power_v2)
+					{
+						if(!bY1 && BH_WAVETIME_EN(pSet->dTVol))
+						{
+						#if(EN_REC_MORE_WAVES==1)
+							rcd_start(sw,RECORD_TYPE_XLSY, g_record_XLSY_waves);
+						#else
+							rcd_start(sw,RECORD_TYPE_XLSY, RECORD_LEN_TZQD); 	// 线路低电压,启动开关录波
+						#endif
+						}
+					}
+				}
+			}
+		#endif
 			soe_record_ev(soeno,1, Uab,0,0); 
 			soe_record_ev(soeno,1, Uab,0,0); 
 			
 			
 		}
 		}
@@ -345,8 +420,13 @@ void Pro_vol(DWORD  dStep)
 	vol_over(dStep,VOL_GDY_Ubc2,	PUB_AC_UBC2,	EV_UBC2GDY);
 	vol_over(dStep,VOL_GDY_Ubc2,	PUB_AC_UBC2,	EV_UBC2GDY);
 	vol_over(dStep,VOL_GDY_Uca2,	PUB_AC_UCA2,	EV_UCA2GDY);
 	vol_over(dStep,VOL_GDY_Uca2,	PUB_AC_UCA2,	EV_UCA2GDY);
 #ifdef DISP_SET_YYJB
 #ifdef DISP_SET_YYJB
+	#ifdef GW_AREA_MAIN_2021
+	vol_over(dStep,VOL_YY_POW1,		g_run_stu.us1,	EV_POW1YY);
+	vol_over(dStep,VOL_YY_POW2,		g_run_stu.us2,  EV_POW2YY);
+	#else
 	vol_over(dStep,VOL_YY_POW1,		PUB_AC_US1,	    EV_POW1YY);
 	vol_over(dStep,VOL_YY_POW1,		PUB_AC_US1,	    EV_POW1YY);
 	vol_over(dStep,VOL_YY_POW2,		PUB_AC_US2,  	EV_POW2YY);
 	vol_over(dStep,VOL_YY_POW2,		PUB_AC_US2,  	EV_POW2YY);
+	#endif
 #endif
 #endif
 	vol_low(dStep,VOL_DDY_Uab1,		PUB_AC_UAB1,	EV_UAB1DDY);
 	vol_low(dStep,VOL_DDY_Uab1,		PUB_AC_UAB1,	EV_UAB1DDY);
 	vol_low(dStep,VOL_DDY_Ubc1,		PUB_AC_UBC1,	EV_UBC1DDY);
 	vol_low(dStep,VOL_DDY_Ubc1,		PUB_AC_UBC1,	EV_UBC1DDY);
@@ -355,13 +435,20 @@ void Pro_vol(DWORD  dStep)
 	vol_low(dStep,VOL_DDY_Ubc2,		PUB_AC_UBC2,	EV_UBC2DDY);
 	vol_low(dStep,VOL_DDY_Ubc2,		PUB_AC_UBC2,	EV_UBC2DDY);
 	vol_low(dStep,VOL_DDY_Uca2,		PUB_AC_UCA2,	EV_UCA2DDY);
 	vol_low(dStep,VOL_DDY_Uca2,		PUB_AC_UCA2,	EV_UCA2DDY);
 #ifdef DISP_SET_YYJB
 #ifdef DISP_SET_YYJB
+	#ifdef GW_AREA_MAIN_2021
+	vol_low(dStep,VOL_WY_POW1,		g_run_stu.us1,	EV_POW1WY);
+	vol_low(dStep,VOL_WY_POW2,		g_run_stu.us1,	EV_POW2WY);
+	#else
 	vol_low(dStep,VOL_WY_POW1,		PUB_AC_US1,	    EV_POW1WY);
 	vol_low(dStep,VOL_WY_POW1,		PUB_AC_US1,	    EV_POW1WY);
 	vol_low(dStep,VOL_WY_POW2,		PUB_AC_US2,	    EV_POW2WY);
 	vol_low(dStep,VOL_WY_POW2,		PUB_AC_US2,	    EV_POW2WY);
+	#endif
 #endif
 #endif
+#ifndef GW_AREA_MAIN_2021
 	vol_low(dStep,VOL_DDY_DC1,		PUB_AC_IN_UZ1,	EV_DC1DDY);
 	vol_low(dStep,VOL_DDY_DC1,		PUB_AC_IN_UZ1,	EV_DC1DDY);
 #ifndef DC_TEST_ONE
 #ifndef DC_TEST_ONE
 	vol_low(dStep,VOL_DDY_DC2,		PUB_AC_IN_UZ2,	EV_DC2DDY);
 	vol_low(dStep,VOL_DDY_DC2,		PUB_AC_IN_UZ2,	EV_DC2DDY);
 #endif
 #endif
+#endif
 }
 }
 
 
 /**************************************************************************
 /**************************************************************************
@@ -1299,7 +1386,7 @@ void PT_Check(DWORD  dStep)
 }
 }
 
 
 
 
-
+#ifndef GW_AREA_MAIN_2021
 void FDL_Check(DWORD    dStep)
 void FDL_Check(DWORD    dStep)
 {
 {
 	int i;
 	int i;
@@ -1353,7 +1440,7 @@ void FDL_Check(DWORD    dStep)
 	}
 	}
 
 
 }
 }
-
+#endif
 void Pro_3U0(int sw,DWORD  dStep)
 void Pro_3U0(int sw,DWORD  dStep)
 {
 {
 	bool  bQDD; 			
 	bool  bQDD; 			
@@ -1508,6 +1595,98 @@ void vol_lost_tz(int sw, DWORD      dStep)  // 失压
 	} 
 	} 
 }
 }
 #endif
 #endif
+
+/**************************************************************************
+函数名称:Pro_PTDxTz
+函数版本:1.00 
+作者:    赵海洋
+创建日期:2022.2.28   
+函数功能说明:PT断线跳闸默认检测一段线电压UAB
+输入参数:
+其他输入:
+输出参数:
+返回值: 
+***************************************************************************/
+#ifdef GW_AREA_MAIN_2021
+void Pro_PTDxTz(int sw,DWORD  dStep)
+{
+	bool Volt,Volt1=false,Volt2=false,Volt3=false,bQDD,bQDD1=false,bQDD2=false,
+	bQDD3=false,bQDD4=false; 
+	TRELAY_T *pR=&g_tRelay[sw];
+	TSWST *pSW =&pR->tSWST;
+	TVOL_T *pvol = &pR->tPTDX;
+	VOL_SET *pSet = &pRunSet->tPTSet;
+	DWORD deltaU1=0,deltaU2=0,deltaU3=0;
+	
+	
+	bQDD1 = LowRelay(g_ui[PUB_AC_UAB1].fz, pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD); 
+	bQDD2 = LowRelay(g_ui[PUB_AC_UBC1].fz, pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD); 
+	bQDD3 = LowRelay(g_ui[PUB_AC_UCA1].fz, pSet->dUVol,pSet->dUVol_fh,pvol->sta.bFlag.bQD); 
+
+	// 压差
+	deltaU1 = _AbsL(g_ui[PUB_AC_UAB1].fz - g_ui[PUB_AC_UBC1].fz);
+	deltaU2 = _AbsL(g_ui[PUB_AC_UAB1].fz - g_ui[PUB_AC_UCA1].fz);
+	deltaU3 = _AbsL(g_ui[PUB_AC_UBC1].fz - g_ui[PUB_AC_UCA1].fz);
+
+	// 压差与定值比对
+	Volt1 = OverRelay(deltaU1, pSet->dUVol, pSet->dUVol_fh, pvol->sta.bFlag.bQD); 
+	Volt2 = OverRelay(deltaU2, pSet->dUVol, pSet->dUVol_fh, pvol->sta.bFlag.bQD); 
+	Volt3 = OverRelay(deltaU3, pSet->dUVol, pSet->dUVol_fh, pvol->sta.bFlag.bQD); 
+	
+	// 三相有流
+	bQDD4 |= (!pSW->uSWST.bFlag.bSXWL);
+	
+	Volt = Volt1||Volt2||Volt3;
+	bQDD = (bQDD1&&bQDD2&&bQDD3&&bQDD4)||Volt;
+	pvol->sta.bFlag.bQD = ((pSet->bTT||pSet->bTz)&& bQDD);
+
+	/***********动作*********************************/
+	RunTR(&pvol->tQDTime, pvol->sta.bFlag.bQD, dStep);		
+	pvol->sta.bFlag.bGj = pvol->tQDTime.boolTrip&&pSet->bTT;
+	pvol->sta.bFlag.bTz = pvol->tQDTime.boolTrip&&pSet->bTz;
+	
+	/************事件记录及出口****************************/
+	if(pvol->sta.bFlag.bGj) 
+	{
+		if(soe_check(EV_PTDX_GJ+sw*EV_SW_NUM)==false)	
+		{
+			DWORD Uab=0,Ubc=0,Uca=0;
+			
+			Uab = _Mul_Div_U(sqrt_32fix(g_ui[PUB_AC_UAB1].m2[0]), 256, g_ui[PUB_AC_UAB1].m2_factor_k);
+			Ubc = _Mul_Div_U(sqrt_32fix(g_ui[PUB_AC_UBC1].m2[0]), 256, g_ui[PUB_AC_UBC1].m2_factor_k);
+			Uca = _Mul_Div_U(sqrt_32fix(g_ui[PUB_AC_UCA1].m2[0]), 256, g_ui[PUB_AC_UCA1].m2_factor_k);
+			soe_record_ev(EV_PTDX_GJ+sw*EV_SW_NUM,1, Uab,Ubc,Uca);                                          
+		}
+	}
+	else
+	{
+		if(soe_check(EV_PTDX_GJ+sw*EV_SW_NUM)==true)			
+		{
+			soe_record_ev(EV_PTDX_GJ+sw*EV_SW_NUM,0, 0,0,0 );                                          
+		}			
+	} 
+
+	if(pvol->sta.bFlag.bTz) 
+	{
+		if(soe_check(EV_PTDX_TZ+sw*EV_SW_NUM)==false)	
+		{
+			DWORD Uab=0,Ubc=0,Uca=0;
+			
+			Uab = _Mul_Div_U(sqrt_32fix(g_ui[PUB_AC_UAB1].m2[0]), 256, g_ui[PUB_AC_UAB1].m2_factor_k);
+			Ubc = _Mul_Div_U(sqrt_32fix(g_ui[PUB_AC_UBC1].m2[0]), 256, g_ui[PUB_AC_UBC1].m2_factor_k);
+			Uca = _Mul_Div_U(sqrt_32fix(g_ui[PUB_AC_UCA1].m2[0]), 256, g_ui[PUB_AC_UCA1].m2_factor_k);
+			soe_record_ev(EV_PTDX_TZ+sw*EV_SW_NUM,1, Uab,Ubc,Uca);                                          
+		}
+	}
+	else
+	{
+		if(soe_check(EV_PTDX_TZ+sw*EV_SW_NUM)==true)			
+		{
+			soe_record_ev(EV_PTDX_TZ+sw*EV_SW_NUM,0, 0,0,0 );                                          
+		}			
+	} 
+}
+#endif
 // = ========================= 本文件结束 =============================
 // = ========================= 本文件结束 =============================
 
 
 
 

+ 11 - 1
dtu/dtu_main_t536/app/vol.h

@@ -31,8 +31,16 @@ enum
 	VOL_DDY_Uab2, 		// Uab2低电压
 	VOL_DDY_Uab2, 		// Uab2低电压
 	VOL_DDY_Ubc2, 		// Ubc2低电压
 	VOL_DDY_Ubc2, 		// Ubc2低电压
 	VOL_DDY_Uca2, 		// Uca2低电压
 	VOL_DDY_Uca2, 		// Uca2低电压
+	VOL_SYGJ_Uab1, 		// Uab1失压告警
+	VOL_SYGJ_Ubc1, 		// Ubc1失压告警
+	VOL_SYGJ_Uca1, 		// Uca1失压告警
+	VOL_SYGJ_Uab2, 		// Uab2失压告警
+	VOL_SYGJ_Ubc2, 		// Ubc2失压告警
+	VOL_SYGJ_Uca2, 		// Uca2失压告警
+#ifndef GW_AREA_MAIN_2021
 	VOL_DDY_DC1,		// 直流电源1低电压
 	VOL_DDY_DC1,		// 直流电源1低电压
 	VOL_DDY_DC2,		// 直流电源2低电压
 	VOL_DDY_DC2,		// 直流电源2低电压
+#endif
 #ifdef DISP_SET_YYJB
 #ifdef DISP_SET_YYJB
 	VOL_YY_POW1,		// 电源1上电
 	VOL_YY_POW1,		// 电源1上电
 	VOL_YY_POW2,		// 电源2上电
 	VOL_YY_POW2,		// 电源2上电
@@ -167,7 +175,9 @@ void Pro_TQBS(int sw,DWORD  dStep);
 void vol_DYJL(int sw,DWORD  dStep);   // 电压解列
 void vol_DYJL(int sw,DWORD  dStep);   // 电压解列
 void vol_PLJL(int sw,DWORD  dStep);   // 电压解列
 void vol_PLJL(int sw,DWORD  dStep);   // 电压解列
 void PT_Check(DWORD  dStep);
 void PT_Check(DWORD  dStep);
+#ifndef GW_AREA_MAIN_2021
 void FDL_Check(DWORD  dStep);
 void FDL_Check(DWORD  dStep);
+#endif
 void Pro_3U0(int sw,DWORD  dStep);
 void Pro_3U0(int sw,DWORD  dStep);
 #ifdef	CUSTOMIZE_BZT //备自投
 #ifdef	CUSTOMIZE_BZT //备自投
 void vol_lost_tz(int sw, DWORD      dStep);  // 失压跳闸
 void vol_lost_tz(int sw, DWORD      dStep);  // 失压跳闸
@@ -178,6 +188,6 @@ void hcbs_init(void);
 void hcbs_dataset(void);
 void hcbs_dataset(void);
 #endif
 #endif
 
 
-
+void Pro_PTDxTz(int sw,DWORD  dStep);
 #endif
 #endif
 //========================== 本文件结束 ===============================
 //========================== 本文件结束 ===============================

BIN=BIN
dtu/dtu_main_t536/dtu_t536


BIN=BIN
dtu/dtu_main_t536/main_mod.o


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio