📄 ddj.c
字号:
temp1=(DingZhi[0]&0x0040)>>6;/* 欠压压板 */
temp2=(DingZhi[1]&0x0040)>>6;
if (temp1==temp2)
{
DingZhiError_flag=1;
}
else
{
QY_YaBan=temp1;
}
temp1=(DingZhi[0]&0x0080)>>7;
temp2=(DingZhi[1]&0x0080)>>7;
if (temp1==temp2)
{
DingZhiError_flag=1; /*保护定值出错标志*/
}
else
{
GY_YaBan=temp1; /* 过压压板 */
}
temp1=(DingZhi[0]&0x0100)>>8;
temp2=(DingZhi[1]&0x0100)>>8;
if (temp1==temp2)
{
DingZhiError_flag=1; /*保护定值出错标志*/
}
else
{
SXDLB_YaBan=temp1; /* 三相电流不平衡压板 */
}
temp1=(DingZhi[0]&0x0200)>>9;
temp2=(DingZhi[1]&0x0200)>>9;
if (temp1==temp2)
{
DingZhiError_flag=1; /*保护定值出错标志*/
}
else
{
SXDYB_YaBan=temp1; /* 三相电压不平衡压板 */
}
/* 电流电压和时间定值都是乘以100后由后台发给装置的,
又因为有效值计算中计算的是电流和电压平方,故电压电流定值要平方
时间定值乘以10后就化为毫秒,除6后即为6毫秒中断的累加数 */
XDLYXQDDingZhi2=DingZhi[2]*DingZhi[2]; // 相电流有效值启动定值
DLSDHDingZhi2=DingZhi[3]*DingZhi[3]; // 过流I段电流定值
DLSDTDingZhi2=(5*DingZhi[4])/3; // 过流I段时间定值
DLYSDHDingZhi2=DingZhi[5]*DingZhi[5]; // 延时速断电流定值
DLYSDTDingZhi2=(5*DingZhi[6])/3; // 延时速断时间定值
DLDSDHDingZhi2=DingZhi[7]*DingZhi[7]; // 定时限过流保护电流定值
DLSDHFanHuiZhi=ex_feedbk(DLSDHDingZhi2); // 速断保护电流返回值
DLYSDHFanHuiZhi=ex_feedbk(DLYSDHDingZhi2); // 延时速断保护电流返回值
GLFSXJZDingZhi2=DingZhi[8]*DingZhi[8]; // 反时限过流基准电流值
QYDYHDingZhi2=DingZhi[9]*DingZhi[9]; //欠压电压定值
QYDYTDingZhi2=(5*DingZhi[10])/3; //欠压时间定值
GYDYHDingZhi2=DingZhi[11]*DingZhi[11]; //过压电压定值
GYDYTDingZhi2=(5*DingZhi[12])/3; //过压时间定值
SXDLBHDingZhi2=DingZhi[13]*DingZhi[13]; //三相电流不平衡度
SXDLBTDingZhi2=(5*DingZhi[14])/3; //三相电流不平衡时间
SXDYBHDingZhi2=DingZhi[15]*DingZhi[15]; //三相电压不平衡度
SXDYBTDingZhi2=(5*DingZhi[16])/3; //三相电压不平衡时间
}
unsigned long ex_feedbk(unsigned long int dingzhi)
{
unsigned long int fbvalue;
// fbvalue=dingzhi*243;/*计算过量返回值=0.95*dingzhi*/
fbvalue=dingzhi*218;/*计算过量返回值=0.85*dingzhi*/
fbvalue=fbvalue>>8;
return(fbvalue);
}
unsigned int Calculate_InversTime(unsigned long int multiple,unsigned int value)
{
unsigned long timetemp=0;
unsigned int xxx = 0xffff,inverstime = 0,yyy,tempnum_value;
yyy=multiple/100;
if(yyy == 0)
{
yyy = multiple/10;
if(yyy < 2)
{
xxx = 0;
}
else if(yyy > 5)
{
xxx = (multiple - 50)/5 +15;
}
else
{
xxx = (multiple - 20)/2;
}
}
else if(yyy >= 3)
{
xxx = 35;
}
else
{
xxx = (multiple - 100)/20 + 25;
}
if(xxx <= 35)
{
if (value==0) tempnum_value=GLFSXCSDingZhi;
// else if (value==1) tempnum_value=LXFSXCSDingZhi;
switch (tempnum_value)
{
case 1:
timetemp = (unsigned long)(Invers_Coef1[xxx]);
break;
case 2:
timetemp = (unsigned long)(Invers_Coef2[xxx]);
break;
case 3:
timetemp = (unsigned long)(Invers_Coef3[xxx]);
break;
case 4:
timetemp = (unsigned long)(Invers_Coef4[xxx]);
break;
default:break;
}
if(timetemp >= 60000) timetemp = 60000;
if(timetemp <= 2) timetemp = 2;
inverstime=timetemp;
}
return inverstime;
}
void FSXBaoHu(unsigned int value)
{
int i;
long int Imax,kk;
if (value==0)
{
if (IamVal>=IbmVal)
{
Imax=IamVal;
}
else
{
Imax=IbmVal;
}
if (Imax<=IcmVal)
{
Imax=IcmVal;
}
kk=(unsigned long int)(Imax/GLFSXJZDingZhi2)*10;
}
FSdYanShi_time=Calculate_InversTime(kk,0)*5/3;
if (fsx_flag==0)
{
fsx_flag=1;
FSdYanShi_oldtime=FSdYanShi_time;
}
}
void GZJCSuanFaLJ(void)/*故障检测算法逻辑*/
{
if (GLSD_YaBan==0x01) // 速断保护
{
if ((IamVal>=DLSDHDingZhi2)||(IbmVal>=DLSDHDingZhi2)||(IcmVal>=DLSDHDingZhi2))
{
GZJCQiDong_flag=1;
}
else if ((IamVal<DLSDHFanHuiZhi)&&(IbmVal<DLSDHFanHuiZhi)&&(IcmVal<DLSDHFanHuiZhi))
{
GZJCQiDong_flag=0;
}
}
if (GLYSD_YaBan==0x01) // 延时速断保护
{
if ((IamVal>=DLYSDHDingZhi2)||(IbmVal>=DLYSDHDingZhi2)||(IcmVal>=DLYSDHDingZhi2))
{
if (GZJCQiDong_flag==0)
{
GZJCQiDong_flag=1;
}
}
else if ((IamVal<DLYSDHFanHuiZhi)&&(IbmVal<DLYSDHFanHuiZhi)&&(IcmVal<DLYSDHFanHuiZhi))
{
GZJCQiDong_flag=0;
}
}
if (GLYSD_YaBan==0x01) //过流三段压板
{
if (DLIIDFYS_YaBan==1) //选择定时限
{
if ((IamVal>=DLDSDHDingZhi2)||(IbmVal>=DLDSDHDingZhi2)||(IcmVal>=DLDSDHDingZhi2))
{
if (GZJCQiDong_flag==0)
{
GZJCQiDong_flag=1;
}
}
else if ((IamVal<DLDSDHFanHuiZhi)&&(IbmVal<DLDSDHFanHuiZhi)&&(IcmVal<DLDSDHFanHuiZhi))
{
GZJCQiDong_flag=0;
}
}
}
/*
if (LXSD_YaBan==0x01) // 零序速断保护
{
if (I0mVal>=LXSDHDingZhi2)
{
GZJCQiDong_flag=1;
}
else if (I0mVal<LXSDHFanHuiZhi)
{
GZJCQiDong_flag=0;
}
}
if (LXYSD_YaBan==0x01) // 零序延时速断保护
{
if (I0mVal>=LXYSDHDingZhi2)
{
if (GZJCQiDong_flag==0)
{
GZJCQiDong_flag=1;
}
}
else if (I0mVal<LXYSDHFanHuiZhi)
{
GZJCQiDong_flag=0;
}
}
if (LXIIIDFYS_YaBan==0x01)
{
if (I0mVal>=LXGSDHDingZhi2)
{
if (GZJCQiDong_flag==0)
{
GZJCQiDong_flag=1;
}
}
else if (I0mVal<LXGSDHFanHuiZhi)
{
GZJCQiDong_flag=0;
}
}
*/
}
// 101规约-----------------------------------------------------------------------------
void dealdata()
{ /* 处理数据 */
unsigned int num;
if(isrepeat()) /* =1重发报文 */
{
FuncTab[1].status=0xaaaa; /* 重发数据;*/
}
else
{
dealcommand() ;
}
FuncTab[6].status=0x5555;
}
unsigned int isrepeat()
{/* 是否要求重复发送报文flag=1重发;flag=0不重发 */
int flag=0;
if (CSDian_flag==0)
{
CSDian_flag=1;//初次上电标记
if(receive_data[0]==0x10) FCB=receive_data[1]&0x20;
else if (receive_data[0]==0x68) FCB=receive_data[4]&0x20;
flag=0;
}
else
{
if(receive_data[0]==0x10)
{
if(((receive_data[1]&0x20)^(FCB&0x20))!=0) /*与FCB位比较,相同时值为0,不同时值为1*/
{
flag=0;
}
else
{
flag=1;
}
FCB=receive_data[1]&0x20;
}
else if(receive_data[0]==0x68)
{
if(((receive_data[4]&0x20)^(FCB&0x20))!=0)
{
flag=0;
}
else
{
flag=1;
}
FCB=receive_data[4]&0x20;
}
}
return flag;
}
unsigned int dealcommand()
{/* 命令解析 */
unsigned int ch,temp_time;
unsigned int i,temp;
if(receive_data[0]==0x10)
{
ch=receive_data[1]&0x0f;
switch(ch)
{
case 0://复位远方链路发送帧
CSDian_flag=0;
FuncTab[8].status=0xaaaa;
break;
case 8:break;/* 快速-校验-过程收集1级用户数据帧 */
case 9://请求链路的请求帧
FuncTab[10].status=0xaaaa;
break;
case 10://召唤1级用户数据请求帧
if((GUreset_flag==0)&&(BS==0)&&(ADC!=1))
{
FuncTab[20].status=0xaaaa;
break;
}
else if(ADC==1)
{
ADC=0;
FuncTab[22].status=0xaaaa;
break;
}
else if ((GUreset_flag!=0)||(BS!=0))
{
GUreset_flag=0;//0-当地电源开关合上;1-当地手动复位;2-远方复位
BS=0;//1-改变当地参数的初始化
FuncTab[26].status=0xaaaa;
}
break;
case 11://召唤2级用户数据请求帧
{
if (ADC==1)
{
FuncTab[20].status=0xaaaa; //有1级数据,发送无所请求帧
break;
}
else
{
cImVala[0]= sqrt(IamVal);
cImVala[1]= sqrt(IbmVal);
cImVala[2]= sqrt(IcmVal);
cImVala[3]= sqrt(UamVal)*100;
cImVala[4]= sqrt(UbmVal)*100;
cImVala[5]= sqrt(UcmVal)*100;
YCNum=0;
for (i=0;i<6;i++)
{
if (abs(cImVala[i]-cImValp[i])>500)
{
temp=cImVala[i];
senddata[10+2*YCNum]=0x01+i;
senddata[11+2*YCNum]=0x07;
senddata[12+2*YCNum]=temp&0x00ff;
senddata[13+2*YCNum]=(temp>>8)&0x00ff;
YCNum++;
cImValb[i]=i;
TwoData_flag=1;
}
}
if ((TwoData_flag==0)&&(soe_no==0))
{
senddata_length=1;
senddata[0]=0xe5;
//lengthbak=1;
//send_length=1;
//SCITXBUF=0xe5;
send_data(senddata_length);
break;
}
else
{
if (fstwo_flag==0xaa)
{
fstwo_flag=0x55;
if (TwoData_flag==1)
{
FuncTab[21].status=0xaaaa;
TwoData_flag=0;
}
else
{
if (soe_no!=0) FuncTab[23].status=0xaaaa;
}
}
else if (fstwo_flag==0x55)
{
fstwo_flag=0xaa;
if (soe_no!=0)
{
FuncTab[23].status=0xaaaa;
}
else
{
if (TwoData_flag==1)
{
FuncTab[21].status=0xaaaa;
TwoData_flag=0;
}
}
}
}
cImValp[0]= sqrt(IamVal);
cImValp[1]= sqrt(IbmVal);
cImValp[2]= sqrt(IcmVal);
cImValp[3]= sqrt(UamVal)*100;
cImValp[4]= sqrt(UbmVal)*100;
cImValp[5]= sqrt(UcmVal)*100;
break;
}
break;
}
default: break;
}
}
else if(receive_data[0]==0x68)
{
ch=receive_data[4]&0xf;
switch(ch)//功能码
{
case 0x1: GUreset_flag=2;
FuncTab[9].status=0xaaaa;
break; //复位终端
case 0x2: break; //链路测试
case 0x3:{
switch(receive_data[6]&0xff)//类型标识
{
case 0x64://总召
{
ZongZhao_flag=0xaaaa;
switch (ZongZhao_frame)
{
case 14:FuncTab[14].status=0xaaaa;ZongZhao_frame=15;break;
case 15:FuncTab[15].status=0xaaaa;ZongZhao_frame=16;break;
case 16:FuncTab[16].status=0xaaaa;ZongZhao_frame=17;break;
case 17:FuncTab[17].status=0xaaaa;ZongZhao_frame=18;break;
case 18:FuncTab[18].status=0xaaaa;ZongZhao_frame=23;break;
case 19:FuncTab[19].status=0xaaaa;ZongZhao_frame=14;ZongZhao_flag=0x5555;break;
case 23:FuncTab[23].status=0xaaaa;ZongZhao_frame=27;break;
case 27:FuncTab[27].status=0xaaaa;ZongZhao_frame=19;break;
default:ZongZhao_frame=14;break;
}
break;
}
case 0x66:break;//读数据
case 0x67://对时
{
temp_time=(receive_data[13]<<8)|receive_data[12];
millisecond_set=temp_time%1000;
millisecond_gewei=millisecond_set%10;
//millisecond_shiwei=(millisecond%100)-millisecond_gewei;
second_set=temp_time/1000;
minute_set=receive_data[14]&0x3f;
hour_set=receive_data[15]&0x1f;
week_set=receive_data[16]&0xe0;
day_set=receive_data[16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -