📄 mmi.c
字号:
if (bittst(&p[3],7)) set_data[28]=1; //单相接地功能投退 PAGE14
else set_data[28]=0;
set_data[29]=p[32]+(p[33]<<8); //零序电压
set_data[31]=p[34]+(p[35]<<8); //零序电压时限PAGE15
if (bittst(&p[3],6)) set_data[33]=1; //PT断线功能投退 PAGE16
else set_data[33]=0;
if (bittst(&p[3],5)) set_data[34]=1; //过负荷投退 PAGE17
else set_data[34]=0;
set_data[35]=p[36]+(p[37]<<8); //过负荷电流
set_data[37]=p[38]+(p[39]<<8); //过负荷时间PAGE18
set_data[38]=p[6]+(p[7]<<8); //突变量 PAGE19
set_data[39]=p[0]+(p[1]<<8); //主机地址
set_data[40]=ct_val; //电流变比 PAGE20
set_data[41]=pt_val; //电压变比
if (bittst(&p[2],5)) set_data[42]=1 ; //五防功能投退 PAGE21
else set_data[42]=0;
#endif
#if DEVICE_TYPE==35 // 差动保护
if (bittst(&p[2],0)) set_data[0]=1; //差速断投退 PAGE0
else set_data[0]=0;
set_data[1]=p[8]+(p[9]<<8); //差速断电流
if (bittst(&p[2],1)) set_data[2]=1; //比率差动投退 PAGE1
else set_data[2]=0;
set_data[3]=p[10]+(p[11]<<8); //比率差动电流
set_data[5]=p[12]+(p[13]<<8); //比率差动制动电流PAGE2
set_data[7]=p[14]+(p[15]<<8); //比率差动制动系数PAGE3
set_data[9]=p[16]+(p[17]<<8); //比率差动谐波系数PAGE4
set_data[11]=p[18]+(p[19]<<8); //差流过大告警电流PAGE5
set_data[13]=p[20]+(p[21]<<8); //差流过大告警时限PAGE6
if (bittst(&p[2],2)) set_data[15]=1; //差流过大告警投退 PAGE7
else set_data[15]=0;
set_data[17]=p[22]+(p[23]<<8); //高压侧过负荷告警电流PAGE8
set_data[19]=p[24]+(p[25]<<8); //高压侧过负荷告警时限PAGE9
if (bittst(&p[2],3)) set_data[21]=1; //高压侧过负荷告警投退 PAGE10
else set_data[21]=0;
set_data[23]=p[34]+(p[35]<<8); //过负荷启动通风电流PAGE11
set_data[25]=p[36]+(p[37]<<8); //过负荷启动通风时限PAGE12
if (bittst(&p[2],6)) set_data[27]=1; //过负荷启动通风投退 PAGE13
else set_data[27]=0;
set_data[29]=p[38]+(p[39]<<8); //过负荷闭锁调压电流PAGE14
set_data[31]=p[40]+(p[41]<<8); //过负荷闭锁调压时限PAGE15
if (bittst(&p[2],7)) set_data[33]=1; //过负荷闭锁调压投退 PAGE16
else set_data[33]=0;
set_data[35]=p[44]+(p[45]<<8); //低压侧平衡系数PAGE17
if (bittst(&p[3],1)) set_data[36]=1; //CT断线检测投退 PAGE18
else set_data[36]=0;
if (bittst(&p[3],2)) set_data[37]=1; //CT断线闭锁差动投退 PAGE18
else set_data[37]=0;
set_data[38]=p[6]+(p[7]<<8); //突变量 PAGE19
set_data[39]=p[0]+(p[1]<<8); //主机地址
if (bittst(&p[2],5)) set_data[40]=1 ; //五防功能投退 PAGE20
else set_data[40]=0 ;
#endif
}
void dis_to_set()
{
INT8U vv[4];
INT16U cc0,cc1;
cc0=0; cc1=0;
#if DEVICE_TYPE==11
my_set.id=set_data[49];
my_set.i_inc=set_data[48];
my_set.i_sd=set_data[0];
my_set.t_sd=set_data[1];
my_set.i_gl=set_data[4];
my_set.t_gl=set_data[5];
my_set.i_gfh=set_data[13];
my_set.t_gfh=set_data[15];
my_set.i_lx=set_data[18];
my_set.t_lx=set_data[19];
my_set.u_dy_sd=set_data[9];
my_set.f_frq=set_data[25];
my_set.t_frq=set_data[27];
my_set.f_inc=set_data[30];
my_set.t_inc=set_data[31];
my_set.u_frq=set_data[33];
my_set.i_frq=set_data[35];
my_set.t_rec=set_data[37];
my_set.u_rec=set_data[43];
my_set.a_rec=set_data[45];
my_set.t_hjs=set_data[39];
my_set.u_xx=set_data[20];
my_set.t_xx=set_data[21];
my_set.u_dy_gl=set_data[11];
my_set.PSP=set_data[50];
my_set.QSP=set_data[51];
if (set_data[2]==1) bitset(&cc0,1); //速断投退
if (set_data[8]==1) bitset(&cc0,0); //低压闭锁速断
if (set_data[3]==1) bitset(&cc0,2); //速断方向功能投退
if (set_data[6]==1) bitset(&cc0,3); //过流功能投退
if (set_data[7]==1) bitset(&cc0,4); //过流方向投退
if (set_data[16]>=1) bitset(&cc0,5); //过负荷功能投退
if (set_data[16]==2)bitset(&cc0,10); //过负荷出口选择
if (set_data[17]==1)bitset(&cc0,6); //过负荷方向投退
if (set_data[22]>=1)bitset(&cc0,7); //零序投退
if (set_data[22]==2)bitset(&cc0,9); //零序出口选择
if (set_data[23]>=1)bitset(&cc0,8); //选线投退
if (set_data[23]==2)bitset(&cc1,5); //选线谐波选择
if (set_data[36]==1)bitset(&cc0,11); //重合闸投退
if (set_data[44]==1)bitset(&cc0,12); //重合闸检同期
if (set_data[42]==1)bitset(&cc0,13);//重合闸检无压
if (set_data[40]==1)bitset(&cc0,14);//后加速
if (set_data[41]==1)bitset(&cc1,8);//手合后加速
if (set_data[28]==1)bitset(&cc1,0); //低频减载
if (set_data[29]==1)bitset(&cc1,1); //滑差闭锁
if (set_data[32]==1)bitset(&cc1,2); //低压闭锁低频
if (set_data[34]==1)bitset(&cc1,3); //低流闭锁低频
if (set_data[10]==1)bitset(&cc1,4); //低压闭锁过流
if (set_data[46]==1)bitset(&cc1,6); //PT断线
if (set_data[47]==1)bitset(&cc1,7); //PT断线闭锁方向
if (set_data[54]==1)bitset(&cc0,15); //五防投退
ct_val=set_data[52];
pt_val=set_data[53];
#endif
#if DEVICE_TYPE==21
my_set.id=set_data[25];
my_set.i_inc=set_data[24];
my_set.i_sd=set_data[0];
my_set.t_sd=set_data[1];
my_set.i_gl=set_data[2];
my_set.t_gl=set_data[3];
my_set.i_lx=set_data[6];
my_set.t_i_lx=set_data[7];
my_set.u_lx=set_data[8];
my_set.t_u_lx=set_data[9];
my_set.u_gy=set_data[12];
my_set.t_u_gy=set_data[13];
my_set.u_qy=set_data[14];
my_set.t_u_qy=set_data[15];
my_set.i_bs_qy=set_data[19];
my_set.PSP=set_data[27];
my_set.QSP=set_data[26];
if(set_data[4]==1) bitset(&cc0,0); //速断投退
if(set_data[5]==1) bitset(&cc0,1); //过流投退
if(set_data[10]==1) bitset(&cc0,2); //零序电流投退
if(set_data[11]==1) bitset(&cc0,5); //零序电压投退
if(set_data[16]==1) bitset(&cc0,3); //过压投退
if(set_data[17]==1) bitset(&cc0,4); //欠压投退
if(set_data[21]==1) bitset(&cc0,6); //有流闭锁投退
if(set_data[23]==1) bitset(&cc0,7); //PT断线投退
if (set_data[27]==1)bitset(&cc0,8); //五防投退
ct_val=set_data[28];
pt_val=set_data[29];
#endif
#if DEVICE_TYPE==35 //差动保护
my_set.id=set_data[39]; // 主机地址
my_set.i_inc=set_data[38]; // 突变量启动电流
my_set.i_csd=set_data[1]; // 4 差速断电流
my_set.i_cd=set_data[3]; // 5 差动电流
my_set.i_zd=set_data[5]; // 6 制动电流
my_set.k_zd=set_data[7]; // 7 制动系数
my_set.k_k2=set_data[9]; // 8 二次谐波系数
my_set.i_gj=set_data[11]; // 9 差流过大告警电流
my_set.t_gj=set_data[13]; // 10 差流过大时间
my_set.i_ggfh=set_data[17]; // 11高过负荷电流
my_set.t_ggfh=set_data[19]; // 12 高过负荷时间
my_set.i_tf=set_data[23]; // 17 启动通风电流
my_set.t_tf=set_data[25]; // 18 启动通风时间
my_set.i_ty=set_data[29]; // 19 调压电流
my_set.t_ty=set_data[31]; // 20 调压时间
my_set.k_kl=set_data[35]; // 22平衡系数
if(set_data[0]==1) bitset(&cc0,0); //速断投退
if(set_data[2]==1) bitset(&cc0,1); //差动投退
if(set_data[15]==1) bitset(&cc0,2); //差流过大投退
if(set_data[21]==1) bitset(&cc0,3); //高压侧过负荷投退
if(set_data[27]==1) bitset(&cc0,6); //过负荷启动通风投退
if(set_data[33]==1) bitset(&cc0,7); //过负荷闭锁调压投退
if(set_data[36]==1) bitset(&cc0,9); //CT断线投退
if(set_data[37]==1) bitset(&cc0,10); //CT断线闭锁差动投退
if (set_data[40]==1)bitset(&cc0,5); //五防投退
#endif
#if DEVICE_TYPE==11 || DEVICE_TYPE==21 || DEVICE_TYPE==35 || DEVICE_TYPE==45 || DEVICE_TYPE==46
vv[0]=ct_val & 0xff;
vv[1]=ct_val >> 8;
vv[2]=pt_val & 0xff;
vv[3]=pt_val >> 8;
#endif
write_430_mem(PTCT_ADDR,4,&vv[0]);
}
void com_rx_handle()
{
INT8U i,n;
INT8U cmd,r_len,f_len,type;
INT16U sum;
INT16U vv;
com_no_rx_time=0;
if (lcd_off_flag==0) com_tx_time=0;//液晶得电时连续问数据,否则2S问一次
if (com_erro_flag==0x55 && current_page==ERRO_PAGE && erro_point==3)
{
current_page=MAIN_PAGE;
page_point=0;
arrow_state=0;
arrow_point=0;
lcd_display_handle(current_page);
}
com_erro_flag=0;
com_rx_flag=0;
cmd=com_rx_buf[0];
r_len=com_rx_count;
com_rx_count=0;
f_len=com_rx_buf[1];
if ((f_len+4)!=r_len) return;
sum=(com_rx_buf[r_len-2] & 0xff)+(com_rx_buf[r_len-1] << 8);
if (sum_check(&com_rx_buf[0],r_len-2) != sum) return;
type=com_rx_buf[2];
run_status=com_rx_buf[3];
if (bittst(&run_status,SYS_ERRO)) asp_flag=0x55;
if (bittst(&run_status,ADC_ERRO) )
{
if (ad_erro_flag==0)
{
ad_erro_flag=0x55;
if (lcd_off_flag==0x55)
{
no_key_time=0;
lcd_off_flag=0;
LCD_on();
}
current_page=ERRO_PAGE;
erro_point=0;
lcd_display_handle(current_page);
}
P1OUT &= ~0x08; //P1.3点亮AD故障灯
}
else
{
if (current_page==ERRO_PAGE && erro_point==0)
{
current_page=MAIN_PAGE;
page_point=0;
arrow_state=0;
arrow_point=0;
lcd_display_handle(current_page);
}
ad_erro_flag=0;
P1OUT |= 0x08; //P1.3 清AD故障灯
}
if (bittst(&run_status,SET_ERRO) )
{
if (set_erro_flag==0)
{
if (lcd_off_flag==0x55)
{
no_key_time=0;
lcd_off_flag=0;
LCD_on();
}
set_erro_flag=0x55;
current_page=ERRO_PAGE;
erro_point=2;
lcd_display_handle(current_page);
}
}
else set_erro_flag=0;
if (bittst(&run_status,KCH_ERRO) )
{
if (kch_erro_flag==0)
{
if (lcd_off_flag==0x55)
{
no_key_time=0;
lcd_off_flag=0;
LCD_on();
}
kch_erro_flag=0x55;
current_page=ERRO_PAGE;
erro_point=1;
lcd_display_handle(current_page);
}
}
else kch_erro_flag=0;
if (bittst(&run_status,ZXQ_ERRO))
{
if (zxq_erro_flag==0)
{
zxq_erro_flag=0x55;
if (lcd_off_flag==0x55)
{
no_key_time=0;
lcd_off_flag=0;
LCD_on();
}
current_page=ERRO_PAGE;
erro_point=4;
lcd_display_handle(current_page);
}
}
else
{
if (current_page==ERRO_PAGE && erro_point==4 )//液晶显示执行器故障页
{
current_page=MAIN_PAGE;
page_point=0;
arrow_state=0;
lcd_display_handle(current_page);
}
zxq_erro_flag=0;
}
if (cmd==MMI_DEV) //装置类型
{
main_version=com_rx_buf[6]+(com_rx_buf[7]<<8);
if (type!=DEVICE_TYPE)
{
if (sys_lock!=0x55)
{
sys_lock=0x55;
current_page=LOCK_PAGE;
main_type=type;
lcd_display_handle(current_page);
}
}
else sys_lock=0;
}
else if(cmd==MMI_DRF) //全数据
{
for(i=0;i<YC_NUM;i++)
yc_data[i]=com_rx_buf[4+i*2] +(com_rx_buf[5+i*2]<<8);
for(i=0;i<6;i++)
yx_data[i]=com_rx_buf[4+YC_NUM*2+i];
#if DEVICE_TYPE!=61
oct_status=yx_data[4];
if (bittst(&yx_data[0],FLG_HWK) )
{
P1OUT &= ~0x02; //置合位灯
P1OUT |= 0x01; //清分位灯
}
else
{
P1OUT |= 0x02; //清合位灯
P1OUT &= ~0x01; //置分位灯
}
if (bittst(&yx_data[0],FLG_YK) )
{
P6OUT &= ~0x80; //置远方灯
P6OUT |= 0x40; //清就地灯
}
else
{
P6OUT |= 0x80; //清远方灯
P6OUT &= ~0x40; //置就地灯
}
#endif
}
else if(cmd==MMI_RDK) //读系数
{
for(i=0;i<KCH_LEN;i++)
{
vv=com_rx_buf[4+i*2] +(com_rx_buf[5+i*2]<<8);
kch_data[i]=((INT32U)vv *(INT32U)1000+8192) >>14;
}
current_page=KCH_PAGE;
page_point=0;
cursor_state=0;
cursor_line=0;
lcd_display_handle(current_page);
}
else if(cmd==MMI_WRK) //写系数
{
if (com_rx_buf[4]==0x55) // 写成功
write_eep_ok=0x55;
else
write_eep_ok=0;
kch_erro_flag=0;
if(current_page==KCH_PAGE)
{
current_page=MODIFY_RETUREN_PAGE;
lcd_display_handle(current_page);
}
}
else if(cmd==MMI_RDS) //读定值
{
set_to_dis(&com_rx_buf[6]);
current_page=SET_PAGE;
page_point=0;
lcd_display_handle(current_page);
}
else if(cmd==MMI_LDS) //下载定值
{
wrs_flag=0x55;
}
else if(cmd==MMI_WRS) //写定值
{
if (com_rx_buf[5]==0x55) // 写成功
write_eep_ok=0x55;
else
write_eep_ok=0;
set_erro_flag=0;
if(current_page==SET_PAGE)
{
current_page=MODIFY_RETUREN_PAGE;
lcd_display_handle(current_page);
}
}
else if(cmd==MMI_COE) //YK执行
{
current_page=COE_RETURN_PAGE;
coe_return_data=com_rx_buf[4];
lcd_display_handle(current_page);
}
else if(cmd==MMI_ASP) //ASP
{
if (((f_len-2) % 8 )==0)
{
if (lcd_off_flag==0x55) //若液晶关断电源
{
lcd_off_flag=0;
no_key_time=0;
LCD_on();
LCD_clear();
}
n=(f_len-2)/8;
for(i=0;i<n;i++)
{
if (asp_wtp>=ASP_PAGE_NUM) asp_wtp=0;
asp_data[asp_wtp].year=mytime.year;
asp_data[asp_wtp].month=mytime.month;
asp_data[asp_wtp].day=mytime.day;
asp_data[asp_wtp].hour=com_rx_buf[i*8+4];
asp_data[asp_wtp].minute=com_rx_buf[i*8+5];
vv=com_rx_buf[i*8+6]+(com_rx_buf[i*8+7]<<8);
asp_data[asp_wtp].second=vv / 1000;
asp_data[asp_wtp].type=com_rx_buf[i*8+8];
asp_data[asp_wtp].phase=com_rx_buf[i*8+9];
vv=com_rx_buf[i*8+10]+(com_rx_buf[i*8+11]<<8);
asp_data[asp_wtp].data=vv;
current_page=ASP_PAGE;
page_point=asp_wtp;
asp_line_point=0;
lcd_display_handle(current_page);
write_430_mem(ASP_ADDR+asp_wtp*10,10,&asp_data[asp_wtp].year);
asp_wtp=(asp_wtp+1) % ASP_PAGE_NUM;
}
asp_erro_flag=0x55;
}
}
else if(cmd==MMI_RDR)
{
for(i=0;i<3;i++)
rdr_data[i]=com_rx_buf[6+i*2]+(com_rx_buf[7+i*2]<<8);
}
else if(cmd==MMI_AJT) //时间
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -