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

📄 sanlin.c

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

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

extern SysDef       *pSysDef;

MCD_PL1_Proc(addr)
unsigned char addr;
{

alarm_msg Alarm_Msg;
unsigned char i,j,typeid,funtype,infno,dot,width,*p;
char mstr[32],str[128],pStr[128];
int audio,ms,x,grp,set_num;
unsigned short *pp,tmp;
float *f,tmpdata;

      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);

         if (pIECDEF[addr]->IODef.CONNECTTYPE == mMCD)
              strcpy(pStr,MCDEvent[infno].text);
         else return;
         if(infno>(sizeof(MCDEvent)/sizeof(EVTALM))) return;
         if (MCDEvent[infno].dpi==0) {
            if (RcvDef.Buf[12]==1) strcpy(str,"");
            else if (RcvDef.Buf[12]==0) strcpy(str,"复归");
            else strcpy(str,"无效");
         }
         else if (MCDEvent[infno].dpi==1) {
            if (RcvDef.Buf[12]==2) strcpy(str,"跳闸");
            else if (RcvDef.Buf[12]==1) strcpy(str,"合闸");
            else strcpy(str,"无效");
         }
         else if (MCDEvent[infno].dpi==2) {
            if (RcvDef.Buf[12]==2) strcpy(str,"动作");
            else if (RcvDef.Buf[12]==1) strcpy(str,"复归");
            else strcpy(str,"无效");
         }
         sprintf(Alarm_Msg.msg,"%s %s%s",
            ((char *)pSysDef+(int)pIECDEF[addr]->FB.pDescript),pStr,str);
         build_alarm(&Alarm_Msg,0);
         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);

         if (pIECDEF[addr]->IODef.CONNECTTYPE == mMCD)
             strcpy(pStr,MCDEvent[infno].text);
         else return;
         if(infno>(sizeof(MCDEvent)/sizeof(EVTALM))) return;

         if (MCDEvent[infno].dpi==0) {
            if (RcvDef.Buf[12]==1) strcpy(str,"");
            else if (RcvDef.Buf[12]==0) strcpy(str,"复归");
            else strcpy(str,"无效");
         }
         else if (MCDEvent[infno].dpi==1) {
            if (RcvDef.Buf[12]==2) strcpy(str,"跳闸");
            else if (RcvDef.Buf[12]==1) strcpy(str,"合闸");
            else strcpy(str,"无效");
         }
         else if (MCDEvent[infno].dpi==2) {
            if (RcvDef.Buf[12]==2) strcpy(str,"动作");
            else if (RcvDef.Buf[12]==1) strcpy(str,"复归");
            else strcpy(str,"无效");
         }
         ms = (RcvDef.Buf[14]*256+RcvDef.Buf[13])/1000;

         sprintf(Alarm_Msg.msg,"%s %s%s",
            ((char *)pSysDef+(int)pIECDEF[addr]->FB.pDescript),pStr,str);
         build_alarm(&Alarm_Msg,0);
         break;
      case M_GD_NTA:
         if(RcvDef.Buf[8] == COT_GRD){
            grp = RcvDef.Buf[14];
            set_num = RcvDef.Buf[13]&0x3f;

            p=(unsigned char *)&RcvDef.Buf[15];
            for (i=0; i<set_num; i++) {
                dot=*p;
                p += 3;
                width=*p;
                p += 2;
                if (width==4){
/*
                   rReverse(p,4);
*/
                   pIECDEF[addr]->SET[dot] = *((float *)p);
                }
                else if (width==2) {
                   x = *p;
                   x = ((*(p+1))*256 + x);
                   pIECDEF[addr]->SET[dot] = (float) x;
                }
                /*
                printf("SET[%d]=%f ",dot,pIECDEF[addr]->SET[dot]);
                if((i+1)%4 == 0) printf("\n");
                */
                p = p+width+1;
            }
         }
         break;
      default:
         break;
      }

}

MCD_PL2_Proc(addr)
unsigned char addr;
{
alarm_msg Alarm_Msg;
unsigned char i,j,typeid,funtype,infno,dot,width,vsqnum;
char mstr[32],str[128],pStr[128];
int audio,ms,x,grp;
unsigned short  *p,tmp;

   if (RcvDef.Buf[0]==LPCI_STX) {

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

      switch (typeid)
      {
      case M_TME_TA:
         p = (unsigned short*)&RcvDef.Buf[12];
         for(i=0;i<vsqnum;i++){
           pIECDEF[addr]->VAL[i] = (float)(*p/10);
           p = p+1;
         }
         break;
      default:
         break;
      }

   }
}

⌨️ 快捷键说明

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