⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp.c

📁 在Unix平台下完成的电力系统广发使用的IEC103规约的程序
💻 C
字号:
#include "iec103.h"
#include "bp.h"

extern  SENDDEF       SendDef;
extern  RCVDEF        RcvDef;
extern  IECDEF        *pIECDEF[MaxIECNum],*pIEC;
extern  int           Enqflag;

extern SysDef       *pSysDef;

BP_PL1_Proc(addr)
unsigned char addr;
{

  alarm_msg Alarm_Msg;
  audio_msg Audio;
  unsigned char i,typeid,funtype,infno,dot,width,*p;
  char mstr[32],str[128],pStr[128];
  int audio,ms,x,grp;

  Alarm_Msg.alarm  = 1;
  Alarm_Msg.log    = 1;
  Alarm_Msg.n      = 0;
  Alarm_Msg.state  = 0x80;
  Alarm_Msg.data1  = 0;
  Alarm_Msg.data2  = 0;
  Alarm_Msg.data3  = 0;

  typeid  = RcvDef.Buf[6];
  funtype = RcvDef.Buf[10];
  infno   = RcvDef.Buf[11];

  switch (typeid)
  {
  case M_TTM_TA:
     if( RcvDef.Buf[8] != COT_SPN ) break;
     Alarm_Msg.hour   = RcvDef.Buf[16] & 0x3f;
     Alarm_Msg.minute = RcvDef.Buf[15] & 0x3f;
     Alarm_Msg.second =  (RcvDef.Buf[14]*256+RcvDef.Buf[13])/1000;
     Alarm_Msg.ms     = ((RcvDef.Buf[14]*256+RcvDef.Buf[13])%1000)*10;
     strcpy(Alarm_Msg.alarm_tag,((char *)pSysDef+(int)pIECDEF[addr]->alarmtag));

     switch( pIECDEF[addr]->IODef.CONNECTTYPE )
     {
       case mBP2A:
             for( i=0;i<sizeof(Bp2a_Event)/sizeof(EVTALM);i++ )
                  if( Bp2a_Event[i].index == infno ) break;
             strcpy(pStr,Bp2a_Event[i].text);
             audio=Bp2a_Event[infno].audio;
             if (Bp2a_Event[infno].dpi==0) {
                if (RcvDef.Buf[12]==2) strcpy(str," ");
                else if (RcvDef.Buf[12]==1) strcpy(str,"恢复");
                else strcpy(str,"无效");
             }
             else if (Bp2a_Event[infno].dpi==1) {
                if (RcvDef.Buf[12]==2) strcpy(str,"跳闸");
                else if (RcvDef.Buf[12]==1) strcpy(str,"合闸");
                else strcpy(str,"无效");
             }
             else if (Bp2a_Event[infno].dpi==2) {
                if (RcvDef.Buf[12]==2) strcpy(str,"动作");
                else if (RcvDef.Buf[12]==1) strcpy(str,"复归");
                else strcpy(str,"无效");
             }
             break;
       case mBP2B:
             printf("size=%d\n",sizeof(Bp2b_Event)/sizeof(EVTALM));
             for( i=0;i<sizeof(Bp2b_Event)/sizeof(EVTALM);i++ )
                  if( Bp2b_Event[i].index == infno ) break;
             strcpy(pStr,Bp2b_Event[i].text);
             audio=Bp2b_Event[infno].audio;
             if (Bp2b_Event[infno].dpi==0) {
                if (RcvDef.Buf[12]==2) strcpy(str," ");
                else if (RcvDef.Buf[12]==1) strcpy(str,"恢复");
                else strcpy(str,"无效");
             }
             else if (Bp2b_Event[infno].dpi==1) {
                if (RcvDef.Buf[12]==2) strcpy(str,"跳闸");
                else if (RcvDef.Buf[12]==1) strcpy(str,"合闸");
                else strcpy(str,"无效");
             }
             else if (Bp2b_Event[infno].dpi==2) {
                if (RcvDef.Buf[12]==2) strcpy(str,"动作");
                else if (RcvDef.Buf[12]==1) strcpy(str,"复归");
                else strcpy(str,"无效");
             }
             break;
       default:
             break;
     }
     sprintf(Alarm_Msg.msg,"%s%s%s",
        ((char *)pSysDef+(int)pIECDEF[addr]->FB.pDescript),pStr,str);
     build_alarm(&Alarm_Msg,0);
     Audio.audio_no =audio;
     audio_alarm(&Audio);
     break;
  case M_TMR_TA:
     if( RcvDef.Buf[8] != COT_SPN ) break;
     Alarm_Msg.hour   = RcvDef.Buf[20] & 0x3f;
     Alarm_Msg.minute = RcvDef.Buf[19] & 0x3f;
     Alarm_Msg.second =  (RcvDef.Buf[18]*256+RcvDef.Buf[17])/1000;
     Alarm_Msg.ms     = ((RcvDef.Buf[18]*256+RcvDef.Buf[17])%1000)*10;
     strcpy(Alarm_Msg.alarm_tag,(char *)pSysDef+(int)pIECDEF[addr]->alarmtag);

     switch( pIECDEF[addr]->IODef.CONNECTTYPE )
     {
       case mBP2A:
             for( i=0;i<sizeof(Bp2a_Event)/sizeof(EVTALM);i++ )
                  if( Bp2a_Event[i].index == infno ) break;
             strcpy(pStr,Bp2a_Event[i].text);
             audio=Bp2a_Event[infno].audio;
             if (Bp2a_Event[infno].dpi==0) {
                if (RcvDef.Buf[12]==2) strcpy(str," ");
                else if (RcvDef.Buf[12]==1) strcpy(str,"恢复");
                else strcpy(str,"无效");
             }
             else if (Bp2a_Event[infno].dpi==1) {
                if (RcvDef.Buf[12]==2) strcpy(str,"跳闸");
                else if (RcvDef.Buf[12]==1) strcpy(str,"合闸");
                else strcpy(str,"无效");
             }
             else if (Bp2a_Event[infno].dpi==2) {
                if (RcvDef.Buf[12]==2) strcpy(str,"动作");
                else if (RcvDef.Buf[12]==1) strcpy(str,"复归");
                else strcpy(str,"无效");
             }
             break;
       case mBP2B:
             for( i=0;i<sizeof(Bp2b_Event)/sizeof(EVTALM);i++ )
                  if( Bp2b_Event[i].index == infno ) break;
             strcpy(pStr,Bp2b_Event[i].text);
             audio=Bp2b_Event[infno].audio;
             if (Bp2b_Event[infno].dpi==0) {
                if (RcvDef.Buf[12]==2) strcpy(str," ");
                else if (RcvDef.Buf[12]==1) strcpy(str,"恢复");
                else strcpy(str,"无效");
             }
             else if (Bp2b_Event[infno].dpi==1) {
                if (RcvDef.Buf[12]==2) strcpy(str,"跳闸");
                else if (RcvDef.Buf[12]==1) strcpy(str,"合闸");
                else strcpy(str,"无效");
             }
             else if (Bp2b_Event[infno].dpi==2) {
                if (RcvDef.Buf[12]==2) strcpy(str,"动作");
                else if (RcvDef.Buf[12]==1) strcpy(str,"复归");
                else strcpy(str,"无效");
             }
             break;
       default:
             break;
     }

     ms = (RcvDef.Buf[14]*256+RcvDef.Buf[13])/1000;

     sprintf(Alarm_Msg.msg,"%s%s%s(相对时间%dms)",
        ((char *)pSysDef+(int)pIECDEF[addr]->FB.pDescript),pStr,str,ms);
     build_alarm(&Alarm_Msg,0);
     Audio.audio_no =audio;
     audio_alarm(&Audio);
     break;
  case M_GD_NTA:
     grp = RcvDef.Buf[14];
     p=(unsigned char *)&RcvDef.Buf[14];
     for (i=0; i<RcvDef.Buf[13]; i++) {
         dot=*(++p);
         p += 3;
         width=*p;
         p += 2;
         if( (RcvDef.Buf[13]&0x80) == 0 ) pIECDEF[addr]->PAD1 = 1;
         if (width==1) {
            switch( grp ){
               case 0:
                  pIECDEF[addr]->SET[dot] = (float)(*p);
                  break;
               case 1:
                  pIECDEF[addr]->SET1[dot] = (float)(*p);
                  break;
               case 2:
                  pIECDEF[addr]->SET2[dot] = (float)(*p);
                  break;
               case 3:
                  pIECDEF[addr]->SET3[dot] = (float)(*p);
                  break;
               case 4:
                  pIECDEF[addr]->SET4[dot] = (float)(*p);
                  break;
               case 5:
                  pIECDEF[addr]->SET5[dot] = (float)(*p);
                  break;
               case 6:
                  pIECDEF[addr]->SET6[dot] = (float)(*p);
                  break;
               case 7:
                  pIECDEF[addr]->SET7[dot] = (float)(*p);
                  break;
               default:
                  break;
            }
         }
         else if (width==2) {
            x = *p;
            x = ((*(p+1))*256 + x);
            switch( grp ){
               case 0:
                  pIECDEF[addr]->SET[dot] = ((float) x)/100.0;
                  break;
               case 1:
                  pIECDEF[addr]->SET1[dot] = ((float) x)/100.0;
                  break;
               case 2:
                  pIECDEF[addr]->SET2[dot] = (float) x;
                  break;
               case 3:
                  pIECDEF[addr]->SET3[dot] = ((float) x)/100.0;
                  break;
               case 4:
                  pIECDEF[addr]->SET4[dot] = ((float) x)/100.0;
                  break;
               case 5:
                  pIECDEF[addr]->SET5[dot] = ((float) x)/100.0;
                  break;
               case 6:
                  pIECDEF[addr]->SET6[dot] = ((float) x)/100.0;
                  break;
               case 7:
                  pIECDEF[addr]->SET7[dot] = ((float) x)/100.0;
                  break;
               default:
                  break;
            }
         }
         else if (width==4) {
            switch( grp ){
               case 0:
                  pIECDEF[addr]->SET[dot] = *((float*) p);
                  break;
               case 1:
                  pIECDEF[addr]->SET1[dot] = *((float*) p);
                  break;
               case 2:
                  pIECDEF[addr]->SET2[dot] = *((float*) p);
                  break;
               case 3:
                  pIECDEF[addr]->SET3[dot] = *((float*) p);
                  break;
               case 4:
                  pIECDEF[addr]->SET4[dot] = *((float*) p);
                  break;
               case 5:
                  pIECDEF[addr]->SET5[dot] = *((float*) p);
                  break;
               case 6:
                  pIECDEF[addr]->SET6[dot] = *((float*) p);
                  break;
               case 7:
                  pIECDEF[addr]->SET7[dot] = *((float*) p);
                  break;
               default:
                  break;
            }
         }
         p += width;
     }
     break;
  default:
     break;
  }
}

BP_PL2_Proc(addr)
unsigned char addr;
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -