📄 101.c
字号:
//the reset manipulation to the data block of substation is here......//
nFuction=0;
nCause=7;
break;
case P_ME_NA_1: //parameter configuer (set dian du biao di and ttu param ) !!!!!!!修改 12/11
nVarQualifier.SQ=0;
if((pRecData[10]>=0x81)&&(pRecData[10]<=0xA0)) //9E
{
CommState.DoWrParm=1;
if(pRecData[10]>=0x81 &&pRecData[10]<=0x83)//参数 UHighV;CTRate; YKSelectTime ;
{
Write1024(0,PUHIGHV+((pRecData[10]-0x81)<<1),&pRecData[12],2,TRUE);
Write1024(505,PUHIGHV+((pRecData[10]-0x81)<<1),&pRecData[12],2,TRUE);//写到备份区
}
if(pRecData[10]>=0x84 &&pRecData[10]<=0x8C)//参数 ULowV;...CheckBit1;
{
Write1024(0,PULOWV+(pRecData[10]-0x84), &pRecData[12],1,TRUE);
Write1024(505,PULOWV+(pRecData[10]-0x84), &pRecData[12],1,TRUE); //写到备份区
if(pRecData[10]==0x89 )CommState.DoIniCom0=1;
if(pRecData[10]==0x8b )CommState.DoIniCom1=1;
}
if(pRecData[10]>=0x8D &&pRecData[10]<=0x92)//参数 KV_A...KI_C0;
{
Write1024(0,PKV_A+((pRecData[10]-0x8D)<<1), &pRecData[12],2,TRUE);
Write1024(505,PKV_A+((pRecData[10]-0x8D)<<1), &pRecData[12],2,TRUE);//写到备份区
}
if(pRecData[10]>=0x93 && pRecData[10]<0x96)//参数 不包括版本号
{
Write1024(0,PYKE_TIME+(pRecData[10]-0x93), &pRecData[12],1,TRUE);
Write1024(505,PYKE_TIME+(pRecData[10]-0x93), &pRecData[12],1,TRUE);//写到备份区
}
if(pRecData[10]==0x95) // TTU控制 TTU_Control_Param
{
if(pRecData[12]& BIT7) DeviceState.DoClearDay=1;
if(pRecData[12]& BIT6 ) DeviceState.DoClearAll=1;
}
if(pRecData[10]>=0x97 && pRecData[10]<=0x99)//参数 int KI_A1 int KI_C1
{
Write1024(0,PKI_A1+((pRecData[10]-0x97)<<1),&pRecData[12],2,TRUE);
Write1024(505,PKI_A1+((pRecData[10]-0x97)<<1),&pRecData[12],2,TRUE);//写到备份区
}
if(pRecData[10]>=0x9B && pRecData[10]<=0x9E )//电度量 正反有功、无功电度
{
Write1024(0,PVPOWERB+((pRecData[10]-0x9B)<<2),&pRecData[12],4,TRUE);
Write1024(505,PVPOWERB+((pRecData[10]-0x9B)<<2),&pRecData[12],4,TRUE);//写到备份区
AddedPQ[pRecData[10]-0x9B]=0; //twq
}
if(pRecData[10]>=0x9F && pRecData[10]<=0xA0 )//电度量 YM电度
{
Write1024(0,PVPOWERB+((pRecData[10]-0x9B)<<2),&pRecData[12],4,FALSE);
Write1024(505,PVPOWERB+((pRecData[10]-0x9B)<<2),&pRecData[12],4,FALSE);//写到备份区
AddedYM[pRecData[10]-0x9F]=0;
}
WriteCheckParam(0,PUHIGHV,sizeof(TTU_RunParam)); //写校验符到1024
WriteCheckParam(505,PUHIGHV,sizeof(TTU_RunParam));//写校验符到备份区
CommState.DoWrParm=0;
nFuction=0;
nCause=7;
nGroup=pRecData[10]; //information addr look as group num
}
else
{
return FALSE;
}
break;
case P_AC_NA_1: //参数激活
if((pRecData[10]>=0x81)&&(pRecData[10]<=0x9E)) //information addr arrange ---new---( + PassWord )
{
SpecialFlag.TTUParamChangeFlag=1;
nCause=7;
}
else
{
return FALSE;
}
break;
case F_AF_NA_1: //文件确认或节确认的响应帧
if(pRecData[15]==1) //文件传输肯定确认
{
//子站不响应
return FALSE ;
}
if(pRecData[15]==2) //文件传输否定确认
{
}
if(pRecData[15]==3) //节传输的正确认可
{
nFuction=0;
nCause=13;
nTypeIdentity=123;
SpecialFlag.LSQ =2;
}
if(pRecData[15]==3) //节传输的否定认可
{
}
break;
case F_SC_NA_1: //file transfer(read ttu runing param ,hour records,maxmin records,daily records,hisevent,var event)
if( ((pRecData[13]&0xC0)>>6 )==0)
{
nFuction=0;
nCause=13;
nTypeIdentity=125;
nGroup=pRecData[14]; //set sectionname as group name 14
stFileName.month= BCDtoHex(pRecData[13]); //pRecData[12];
stFileName.week_date=BCDtoHex(pRecData[12]);//pRecData[13];
break;
}
if(pRecData[8]==5) //召唤目录
{
nFuction=0;
nCause=5;
nTypeIdentity=126; //F_DR_TA_1
}
if(pRecData[8]==13) //召唤其他
{
if(pRecData[15]==1) //选择文件
{
nFuction=0;
nCause=13;
nTypeIdentity=120;
}
if(pRecData[15]==2) //召唤文件
{
nFuction=0;
nCause=13;
nTypeIdentity=121;
}
if(pRecData[15]==6) //召唤节
{
nFuction=8;
nCause=13;
nTypeIdentity=F_SG_NA_1; //125
SpecialFlag.nSGCount=0;
stFileName.week_date=BCDtoHex(pRecData[12]);//pRecData[12];
stFileName.month= BCDtoHex(pRecData[13]&0x3F);//pRecData[13];
SpecialFlag.DataType =( pRecData[13]&0xc0 )>>6;
if((SpecialFlag.DataType==1) || (SpecialFlag.DataType==2) ||
(SpecialFlag.DataType==3) ) SpecialFlag.FileTxFlag=1; //05-11-5
}
}
break;
}
EncodeVariableLenFrame(nTypeIdentity,nCause,nFuction,nGroup);
return TRUE ;
}
return FALSE;
}
//历史数据打包
void EncodeHistData()
{
BYTE temp=15,i,j;
i=(SpecialFlag.nSGCount<<1)+SpecialFlag.nSGCount;
TCommCode[temp++] =184;
TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
if(SpecialFlag.nSGCount==0)
{
SpecialFlag.CHS=0;
}
for(j=i;j<i+3;j++)
{
stFileName.hour = (j*HisCate)>>2;
stFileName.minute = (j&(4/HisCate-1))*(15*HisCate);
TCommCode[temp++] =stFileName.month;
TCommCode[temp++] =stFileName.week_date;
TCommCode[temp++] =(1<<7)+j*HisCate;
ReadHisData(&TCommCode[temp],&nFileDataLen,&stFileName,0,MAXLENGTH);
if(nFileDataLen==0)
{
memset(&TCommCode[temp-3],0,59);nFileDataLen=56;
}
temp += nFileDataLen;
memset(&TCommCode[temp],0,2);
temp += 2;
}
SpecialFlag.CHS += CheckSum(&TCommCode[16],TCommCode[15]);
// SpecialFlag.nSGCount++; //05-11-5
}
//统计数据打包
BYTE EncodeStaticData()
{
BYTE temp=15,len;
switch(SpecialFlag.nSGCount)
{
case 0: //极值记录组(0段)
SpecialFlag.CHS=0;
TCommCode[temp++] =67;
TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
TCommCode[temp++] =stFileName.month;
TCommCode[temp++] =stFileName.week_date;
if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
memcpy(&TCommCode[temp], (BYTE*)value_time, 64); //极值时间
else
FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
len =68;
break;
case 1: //越限记录组(1段)
TCommCode[temp++] =67;
TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
TCommCode[temp++] =stFileName.month;
TCommCode[temp++] =stFileName.week_date;
if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
memcpy(&TCommCode[temp], (BYTE*)over_limit, 64); //遥测越限纪录
else
FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
len =68;
break;
case 2: //供电情况组(2段)
TCommCode[temp++] =sizeof(RTSTATE)+3;
TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
TCommCode[temp++] =stFileName.month;
TCommCode[temp++] =stFileName.week_date;
if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
memcpy(&TCommCode[temp], (BYTE*)&RunState, sizeof(RTSTATE)); //供电情况
else
FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
len =sizeof(RTSTATE)+4;
break;
case 3: //停电记录组(3段)
TCommCode[temp++] =57;
TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
TCommCode[temp++] =stFileName.month;
TCommCode[temp++] =stFileName.week_date;
if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
memcpy(&TCommCode[temp], (BYTE*)off_time, 54); //日停电纪录
else
FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
len =58;
break;
case 4: //电度记录组(4段)
TCommCode[temp++] =19;
TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
TCommCode[temp++] =stFileName.month;
TCommCode[temp++] =stFileName.week_date;
if((stFileName.month==stDateTime.month) && ((stFileName.week_date & 0x1f) == (stDateTime.week_date & 0x1f ) ) )
Read1024(0,PVPOWERB,&TCommCode[temp],MAXDD*sizeof(long));
else
FileReadStaticData(SpecialFlag.nSGCount,&TCommCode[temp]);
len =4+MAXDD*sizeof(long);
break;
}
SpecialFlag.CHS += CheckSum(&TCommCode[16],TCommCode[15]);
// SpecialFlag.nSGCount++; //05-11-5
return len;
}
//录波数据打包]
BYTE EncodeLuboData()
{
BYTE temp=15,len;
switch(SpecialFlag.nSGCount)
{
case 0: // 电压(0段)
SpecialFlag.CHS =0;
TCommCode[temp++] =193;
TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
while(DeviceState.DoGetData);
CommState.DoSendLubo=1;
memcpy(&TCommCode[temp], Ua_Data,64);
temp+=64;
memcpy(&TCommCode[temp], Ub_Data,64);
temp+=64;
memcpy(&TCommCode[temp], Uc_Data,64);
len =194;
break;
case 1: // 电流(1段)
TCommCode[temp++] =193;
TCommCode[temp++] = SpecialFlag.nSGCount; //第几段
memcpy(&TCommCode[temp], Ia_Data,64);
temp+=64;
memcpy(&TCommCode[temp], Ib_Data,64);
temp+=64;
memcpy(&TCommCode[temp], Ic_Data,64);
CommState.DoSendLubo=0;
len =194;
break;
}
SpecialFlag.CHS += CheckSum(&TCommCode[16],TCommCode[15]);
// SpecialFlag.nSGCount++; //05-11-5
return len;
}
void WriteCheckParam(UINT ParamPageAdd,UINT ParamAddrInPage,int nLength)//写校验符到1024
{
BYTE Check_Param;
ReadParam(ParamPageAdd);
Check_Param=GetCheckParam();
Write1024(ParamPageAdd,CHECK_PARAM,&Check_Param,1,TRUE);
}
BYTE GetCheckParam()
{
BYTE * pd= (BYTE *) &TTU_RunParam;
BYTE chk=0;
int i;
for(i=0;i<sizeof(TTU_RunParam);i++)
{
chk +=*pd;
pd++;
}
return chk;
}
void ReadParam(UINT ParamPageAdd)
{
Read1024(ParamPageAdd,PUHIGHV,(BYTE*)&(TTU_RunParam.UHighV),6);
clr_watchdog();
Read1024(ParamPageAdd,PULOWV,(BYTE*)&(TTU_RunParam.ULowV),9); //参数 ULowV;...CheckBit1;
clr_watchdog();
Read1024(ParamPageAdd,PKV_A,(BYTE*)&(TTU_RunParam.KV_A),12); //参数 KV_A...KI_C0;
clr_watchdog();
Read1024(ParamPageAdd,PYKE_TIME,(BYTE*)&(TTU_RunParam.YKExcecuteTime),4);
clr_watchdog();
Read1024(ParamPageAdd,PKI_A1,(BYTE*)&(TTU_RunParam.KI_A1),6);
clr_watchdog();
Read1024(ParamPageAdd,PASS_WORD,(BYTE*)&(TTU_RunParam.PassWord),2);
TTU_RunParam.VersionOfSoft=SOFTVERSION ;
}
void CopyParam(UINT ParamPageAdd)
{
CommState.DoWrParm=1;
Write1024(ParamPageAdd,PUHIGHV,(BYTE*)&(TTU_RunParam.UHighV),6,TRUE);
clr_watchdog();
Write1024(ParamPageAdd,PULOWV,(BYTE*)&(TTU_RunParam.ULowV),9,TRUE);
clr_watchdog();
Write1024(ParamPageAdd,PKV_A,(BYTE*)&(TTU_RunParam.KV_A),12,TRUE);
clr_watchdog();
Write1024(ParamPageAdd,PYKE_TIME,(BYTE*)&(TTU_RunParam.YKExcecuteTime),4,TRUE);
clr_watchdog();
Write1024(ParamPageAdd,PKI_A1,(BYTE*)&(TTU_RunParam.KI_A1),6,TRUE);
clr_watchdog();
Write1024(ParamPageAdd,PASS_WORD,(BYTE*)&(TTU_RunParam.PassWord),2,TRUE);
clr_watchdog();
WriteCheckParam(ParamPageAdd,PUHIGHV,sizeof(TTU_RunParam)); //写校验符
CommState.DoWrParm=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -