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

01. 增加: dido增加电源板新增加的6个遥信的处理。

EWen пре 3 месеци
родитељ
комит
26f7bf0acc

+ 4 - 1
README.md

@@ -68,4 +68,7 @@
 02. 修改: 频率更新处理,共享内存读回第二组频率对应的是第一组电压的,所以F1与F2读取索引调换。
 02. 修改: 频率更新处理,共享内存读回第二组频率对应的是第一组电压的,所以F1与F2读取索引调换。
 03. 修改: 级联线损电度更新去除投退判断。
 03. 修改: 级联线损电度更新去除投退判断。
 04. 修改: 去除保护逻辑判断错误返回条件。
 04. 修改: 去除保护逻辑判断错误返回条件。
-05. 增加:增加can接收线程打印报文互斥锁,避免打印CAN接收报文时混乱的情况。
+05. 增加:增加can接收线程打印报文互斥锁,避免打印CAN接收报文时混乱的情况。
+
+# 20251217
+01. 增加: dido增加电源板新增加的6个遥信的处理。

+ 3 - 0
app_public/fuxi_public/fuxi_bsp/include/can_app.h

@@ -28,6 +28,9 @@
 #define CAN_FRAME_TYPE_DI_INIT1			0x24 // 遥信板后32个遥信	接收:can中断
 #define CAN_FRAME_TYPE_DI_INIT1			0x24 // 遥信板后32个遥信	接收:can中断
 #define CAN_FRAME_TYPE_DI_ON1			0x25 // 遥信板后32个遥信	接收:can中断
 #define CAN_FRAME_TYPE_DI_ON1			0x25 // 遥信板后32个遥信	接收:can中断
 #define CAN_FRAME_TYPE_DI_OFF1			0x26 // 遥信板后32个遥信	接收:can中断
 #define CAN_FRAME_TYPE_DI_OFF1			0x26 // 遥信板后32个遥信	接收:can中断
+#define CAN_FRAME_TYPE_DI_INIT2			0x27 // 遥信板后32个遥信	接收:can中断 // 电源板增加了6个遥信总数为66,两组遥信只能支持64个还剩余2个,所以要再增加一组 add by EWen
+#define CAN_FRAME_TYPE_DI_ON2			0x28 // 遥信板后32个遥信	接收:can中断
+#define CAN_FRAME_TYPE_DI_OFF2			0x29 // 遥信板后32个遥信	接收:can中断
 
 
 // 对时类
 // 对时类
 #define CAN_FRAME_TYPE_TIMING			0x40 // 对时/召子板信息,发送:5ms中断
 #define CAN_FRAME_TYPE_TIMING			0x40 // 对时/召子板信息,发送:5ms中断

+ 4 - 4
app_public/fuxi_public/fuxi_bsp/include/dido.h

@@ -16,7 +16,7 @@
 
 
 /*------------------------------- 宏定义 --------------------------------------
 /*------------------------------- 宏定义 --------------------------------------
 */
 */
-#define DIDO_MAX_DI_PER_SLOT		61				  // DTUv4-DI
+#define DIDO_MAX_DI_PER_SLOT		67				  // DTUv5-DI
 #define DIDO_MAX_DO_PER_SLOT		16
 #define DIDO_MAX_DO_PER_SLOT		16
 
 
 #define DIDO_TS_BITS 				4
 #define DIDO_TS_BITS 				4
@@ -33,9 +33,9 @@ struct ts_index
 
 
 struct di
 struct di
 {
 {
-	int bInited;	// 是否初始化
-	u32 value[2];	// 开入值
-	u32 inv[2];		// 是否反转
+	int bInited[3];	// 是否初始化
+	u32 value[3];	// 开入值
+	u32 inv[3];		// 是否反转
 
 
 	struct ts_index ts_i[DIDO_MAX_DI_PER_SLOT];				// 索引
 	struct ts_index ts_i[DIDO_MAX_DI_PER_SLOT];				// 索引
 	u32 			ts_t[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 时间戳
 	u32 			ts_t[DIDO_MAX_DI_PER_SLOT][DIDO_TS_NUM];// 时间戳

+ 3 - 0
app_public/fuxi_public/fuxi_bsp/source/can_app.c

@@ -74,6 +74,9 @@ int can_app_callback(u32 can_bus,u8 * buf)
 	case CAN_FRAME_TYPE_DI_INIT1:
 	case CAN_FRAME_TYPE_DI_INIT1:
 	case CAN_FRAME_TYPE_DI_ON1:
 	case CAN_FRAME_TYPE_DI_ON1:
 	case CAN_FRAME_TYPE_DI_OFF1:
 	case CAN_FRAME_TYPE_DI_OFF1:
+	case CAN_FRAME_TYPE_DI_INIT2:
+	case CAN_FRAME_TYPE_DI_ON2:
+	case CAN_FRAME_TYPE_DI_OFF2:
 #if defined(BSP_DTU3) || defined(BSP_DTU2) || defined(BSP_DTU5)
 #if defined(BSP_DTU3) || defined(BSP_DTU2) || defined(BSP_DTU5)
 		dido_di_update(buf);
 		dido_di_update(buf);
 #endif
 #endif

+ 49 - 9
app_public/fuxi_public/fuxi_bsp/source/dido.c

@@ -80,10 +80,14 @@ int dido_init(void)
 			{
 			{
 				g_di[g_equ_config_di[i].slot].inv[0] |= 1<<g_equ_config_di[i].index;
 				g_di[g_equ_config_di[i].slot].inv[0] |= 1<<g_equ_config_di[i].index;
 			}
 			}
-			else
+			else if(g_equ_config_di[i].index < 64)
 			{
 			{
 				g_di[g_equ_config_di[i].slot].inv[1] |= 1<<(g_equ_config_di[i].index - 32);
 				g_di[g_equ_config_di[i].slot].inv[1] |= 1<<(g_equ_config_di[i].index - 32);
 			}
 			}
+			else
+			{
+				g_di[g_equ_config_di[i].slot].inv[2] |= 1<<(g_equ_config_di[i].index - 64);
+			}
 		}
 		}
 	}
 	}
 	
 	
@@ -94,7 +98,8 @@ int dido_init(void)
 
 
 int dido_di_is_on(u8 slot,u8 index)
 int dido_di_is_on(u8 slot,u8 index)
 {
 {
-	if(slot >= EQU_SLOT_NUM_MAX || index >= 64)
+	// DTUv5 开入扩展板采集66个遥信
+	if(slot >= EQU_SLOT_NUM_MAX || index >= 66)
 	{
 	{
 		return 0;
 		return 0;
 	}
 	}
@@ -106,7 +111,7 @@ int dido_di_is_on(u8 slot,u8 index)
 			return 1;
 			return 1;
 		}
 		}
 	}
 	}
-	else
+	else if(index < 64)
 	{
 	{
 		index -= 32;
 		index -= 32;
 		if(g_di[slot].value[1]&(1<<index))
 		if(g_di[slot].value[1]&(1<<index))
@@ -114,6 +119,14 @@ int dido_di_is_on(u8 slot,u8 index)
 			return 1;
 			return 1;
 		}
 		}
 	}
 	}
+	else
+	{
+		index -= 64;
+		if(g_di[slot].value[2]&(1<<index))
+		{
+			return 1;
+		}	
+	}
 
 
 	return 0;
 	return 0;
 }
 }
@@ -123,8 +136,8 @@ int dido_di_is_on_ts(u8 slot,u8 index,u32 ts)
 {
 {
 	int i,r;
 	int i,r;
 	struct ts_index ts_i;
 	struct ts_index ts_i;
-	
-	if(slot >= EQU_SLOT_NUM_MAX || index >= 32)
+	// DTUv5 开入扩展板采集66个遥信
+	if(slot >= EQU_SLOT_NUM_MAX || index >= 66)
 	{
 	{
 		return 0;
 		return 0;
 	}
 	}
@@ -149,9 +162,28 @@ int dido_di_is_on_ts(u8 slot,u8 index,u32 ts)
 		ts_i.n--;
 		ts_i.n--;
 	}
 	}
 
 
-	if(g_di[slot].value[0]&(1<<index))
+	if(index < 32)
 	{
 	{
-		return 1;
+		if(g_di[slot].value[0]&(1<<index))
+		{
+			return 1;
+		}
+	}
+	else if (index < 64)
+	{
+		index -= 32;
+		if(g_di[slot].value[1]&(1<<index))
+		{
+			return 1;
+		}
+	}
+	else
+	{
+		index -= 64;
+		if(g_di[slot].value[2]&(1<<index))
+		{
+			return 1;
+		}	
 	}
 	}
 
 
 	return 0;
 	return 0;
@@ -191,6 +223,11 @@ int dido_di_update(u8 * buf)
 	case CAN_FRAME_TYPE_DI_OFF1:
 	case CAN_FRAME_TYPE_DI_OFF1:
 		j = 1;
 		j = 1;
 		break;
 		break;
+	case CAN_FRAME_TYPE_DI_INIT2:
+	case CAN_FRAME_TYPE_DI_ON2:
+	case CAN_FRAME_TYPE_DI_OFF2:
+		j = 2;
+		break;
 	default:
 	default:
 		return -3;
 		return -3;
 	}
 	}
@@ -201,6 +238,7 @@ int dido_di_update(u8 * buf)
 	{
 	{
 	case CAN_FRAME_TYPE_DI_INIT:
 	case CAN_FRAME_TYPE_DI_INIT:
 	case CAN_FRAME_TYPE_DI_INIT1:
 	case CAN_FRAME_TYPE_DI_INIT1:
+	case CAN_FRAME_TYPE_DI_INIT2:
 	{
 	{
 		//g_di[cfh->src].value[j] = di^g_di[cfh->src].inv[j];
 		//g_di[cfh->src].value[j] = di^g_di[cfh->src].inv[j];
 		value_old = g_di[cfh->src].value[j];
 		value_old = g_di[cfh->src].value[j];
@@ -210,7 +248,7 @@ int dido_di_update(u8 * buf)
 
 
 		// rt_printf("DI_INIT:src=%d,j=%d,di=%08x,oldv=%08x,newv=%08x.\r\n",cfh->src,j,di,value_old,value_new);
 		// rt_printf("DI_INIT:src=%d,j=%d,di=%08x,oldv=%08x,newv=%08x.\r\n",cfh->src,j,di,value_old,value_new);
 
 
-		if(g_di[cfh->src].bInited == 0)
+		if(g_di[cfh->src].bInited[j] == 0)
 		{
 		{
 			// 更新逻辑模型中的值
 			// 更新逻辑模型中的值
 			for(i=0;i<DIDO_MAX_DI_PER_SLOT;i++)
 			for(i=0;i<DIDO_MAX_DI_PER_SLOT;i++)
@@ -229,7 +267,7 @@ int dido_di_update(u8 * buf)
 				g_di[cfh->src].ts_i[i].n++;
 				g_di[cfh->src].ts_i[i].n++;
 			}
 			}
 
 
-			g_di[cfh->src].bInited = true;
+			g_di[cfh->src].bInited[j] = true;
 			// bDI_Init[cfh->src] = true;
 			// bDI_Init[cfh->src] = true;
 
 
 			return 0;
 			return 0;
@@ -240,12 +278,14 @@ int dido_di_update(u8 * buf)
 		break;
 		break;
 	case CAN_FRAME_TYPE_DI_ON:
 	case CAN_FRAME_TYPE_DI_ON:
 	case CAN_FRAME_TYPE_DI_ON1:
 	case CAN_FRAME_TYPE_DI_ON1:
+	case CAN_FRAME_TYPE_DI_ON2:
 		value_old = g_di[cfh->src].value[j] 	& (~di);
 		value_old = g_di[cfh->src].value[j] 	& (~di);
 		value_new = (di^g_di[cfh->src].inv[j]) & di;
 		value_new = (di^g_di[cfh->src].inv[j]) & di;
 		g_di[cfh->src].value[j] = value_old | value_new;
 		g_di[cfh->src].value[j] = value_old | value_new;
 		break;
 		break;
 	case CAN_FRAME_TYPE_DI_OFF:
 	case CAN_FRAME_TYPE_DI_OFF:
 	case CAN_FRAME_TYPE_DI_OFF1:
 	case CAN_FRAME_TYPE_DI_OFF1:
+	case CAN_FRAME_TYPE_DI_OFF2:
 		value_old = g_di[cfh->src].value[j] 	& (~di);
 		value_old = g_di[cfh->src].value[j] 	& (~di);
 		value_new = ((~di)^g_di[cfh->src].inv[j]) & di;
 		value_new = ((~di)^g_di[cfh->src].inv[j]) & di;
 		g_di[cfh->src].value[j] = value_old | value_new;
 		g_di[cfh->src].value[j] = value_old | value_new;