|
|
@@ -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;
|
|
|
}
|
|
|
- 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);
|
|
|
}
|
|
|
+ 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)
|
|
|
{
|
|
|
- if(slot >= EQU_SLOT_NUM_MAX || index >= 64)
|
|
|
+ // DTUv5 开入扩展板采集66个遥信
|
|
|
+ if(slot >= EQU_SLOT_NUM_MAX || index >= 66)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -106,7 +111,7 @@ int dido_di_is_on(u8 slot,u8 index)
|
|
|
return 1;
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
+ else if(index < 64)
|
|
|
{
|
|
|
index -= 32;
|
|
|
if(g_di[slot].value[1]&(1<<index))
|
|
|
@@ -114,6 +119,14 @@ int dido_di_is_on(u8 slot,u8 index)
|
|
|
return 1;
|
|
|
}
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ index -= 64;
|
|
|
+ if(g_di[slot].value[2]&(1<<index))
|
|
|
+ {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -123,8 +136,8 @@ int dido_di_is_on_ts(u8 slot,u8 index,u32 ts)
|
|
|
{
|
|
|
int i,r;
|
|
|
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;
|
|
|
}
|
|
|
@@ -149,9 +162,28 @@ int dido_di_is_on_ts(u8 slot,u8 index,u32 ts)
|
|
|
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;
|
|
|
@@ -191,6 +223,11 @@ int dido_di_update(u8 * buf)
|
|
|
case CAN_FRAME_TYPE_DI_OFF1:
|
|
|
j = 1;
|
|
|
break;
|
|
|
+ case CAN_FRAME_TYPE_DI_INIT2:
|
|
|
+ case CAN_FRAME_TYPE_DI_ON2:
|
|
|
+ case CAN_FRAME_TYPE_DI_OFF2:
|
|
|
+ j = 2;
|
|
|
+ break;
|
|
|
default:
|
|
|
return -3;
|
|
|
}
|
|
|
@@ -201,6 +238,7 @@ int dido_di_update(u8 * buf)
|
|
|
{
|
|
|
case CAN_FRAME_TYPE_DI_INIT:
|
|
|
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];
|
|
|
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);
|
|
|
|
|
|
- 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++)
|
|
|
@@ -229,7 +267,7 @@ int dido_di_update(u8 * buf)
|
|
|
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;
|
|
|
|
|
|
return 0;
|
|
|
@@ -240,12 +278,14 @@ int dido_di_update(u8 * buf)
|
|
|
break;
|
|
|
case CAN_FRAME_TYPE_DI_ON:
|
|
|
case CAN_FRAME_TYPE_DI_ON1:
|
|
|
+ case CAN_FRAME_TYPE_DI_ON2:
|
|
|
value_old = g_di[cfh->src].value[j] & (~di);
|
|
|
value_new = (di^g_di[cfh->src].inv[j]) & di;
|
|
|
g_di[cfh->src].value[j] = value_old | value_new;
|
|
|
break;
|
|
|
case CAN_FRAME_TYPE_DI_OFF:
|
|
|
case CAN_FRAME_TYPE_DI_OFF1:
|
|
|
+ case CAN_FRAME_TYPE_DI_OFF2:
|
|
|
value_old = g_di[cfh->src].value[j] & (~di);
|
|
|
value_new = ((~di)^g_di[cfh->src].inv[j]) & di;
|
|
|
g_di[cfh->src].value[j] = value_old | value_new;
|