drv103.c

来自「在Unix平台下完成的电力系统广发使用的IEC103规约的程序」· C语言 代码 · 共 1,190 行 · 第 1/3 页

C
1,190
字号

C_SYN_NA_Proc()
{
}

C_RLK_NA_Proc()
{
}

IECSetupCmdProc()
{
  printf("recv msg from node=%s  proc=%s\n",
         RcvMsg.orig_node_name,RcvMsg.orig_proc_name);
}

C_PL1_NA_Proc(addr)
unsigned char addr;
{

int rptr,wptr,length;


   if( RcvDef.Buf[0]==LPCI_SYN )  return;

   switch (pIECDEF[addr]->IODef.CONNECTTYPE)
   {
      case mLFP901A:
      case mLFP902A:
      case mLFP951A:
      case mLFP921A:
      case mLFP922:
      case mRCS915C:
      case mRCS915D:
      case mRCS915E:
      case mRCS974A:
      case mRCS978C:
      case mRCS9612A:
      case mRCS900:
           RCS_PL1_Proc(addr);
           break;
      case mBP2A:
      case mBP2B:
           BP_PL1_Proc(addr);
           break;
      case mMCD:
           MCD_PL1_Proc(addr);
           break;
      case mPSL602:
           PSL_PL1_Proc(addr);
           break;
      case mWMZ41A:
           WMZ_PL1_Proc(addr);
           break;
      default:
          printf("LINKADDR = %d type not defined! \n",pIECDEF[addr]->IODef.OCCNO);
          break;
   }


   if( (Enqflag == 1 && RcvDef.Buf[6] == M_GD_NTA) ||
       (RcvDef.Buf[6] == M_IDI_NA) ) return;

   if( pIECDEF[addr]->IODef.ICNNO == 1 && pshm_bh_buf_w != (SHM_BH_DEF *)-1 ){
       wptr = pshm_bh_buf_w->wptr;
       length = RcvDef.Buf[1] + 6;
       pshm_bh_buf_w->data[wptr].len = length;
       pshm_bh_buf_w->data[wptr].addr = RcvDef.Buf[9];
       pshm_bh_buf_w->data[wptr].type = 0;
       RcvDef.Buf[4] = RcvDef.Buf[4] & 0x1f;
       if( length > BH_BUF_LEN ) return;
       memcpy(pshm_bh_buf_w->data[wptr].buf,RcvDef.Buf,length);
       pshm_bh_buf_w->wptr = ( wptr + 1 ) % (BH_BUF_NUM * 4);
       if( pshm_bh_buf_w->wptr == pshm_bh_buf_w->rptr )
           pshm_bh_buf_w->oflag = 1;

       if( pIECDEF[addr]->Display == 1 )
           printf("BH write: addr=%d---rptr=%d---wptr=%d---oflag=%d--\n",addr,pshm_bh_buf_w->rptr,pshm_bh_buf_w->wptr,pshm_bh_buf_w->oflag);
       /*
       printf("pshm_bh_buf_w---addr=%d----wptr=%d---rptr=%d\n",addr,pshm_bh_buf_w->wptr,pshm_bh_buf_w->rptr);
       printf("pshm_bh_buf_r---addr=%d----wptr=%d---rptr=%d\n",addr,pshm_bh_buf_r->wptr,pshm_bh_buf_r->rptr);
       */
   }

}

C_PL2_NA_Proc(addr)
unsigned char addr;
{
   switch (pIECDEF[addr]->IODef.CONNECTTYPE)
   {
      case mBP2A:
      case mBP2B:
           BP_PL2_Proc(addr);
           break;
      case mMCD:
           MCD_PL2_Proc(addr);
           break;
      case mPSL602:
           PSL_PL2_Proc(addr);
           break;
      case mWMZ41A:
           WMZ_PL2_Proc(addr);
           break;
      default:
          break;
   }
}

AlarmProc(str,tab)
char str[],tab[];
{
alarm_msg Alarm_Msg;
audio_msg Audio;
struct tm *time_ptr;
time_t Sclock;

     Sclock=time((time_t *) NULL);
     time_ptr=localtime(&Sclock);
     Alarm_Msg.alarm  = 1;
     Alarm_Msg.log    = 1;
     Alarm_Msg.hour   = time_ptr->tm_hour;
     Alarm_Msg.minute = time_ptr->tm_min;
     Alarm_Msg.second = time_ptr->tm_sec;
     Alarm_Msg.ms     = 0;
     Alarm_Msg.n      = 0;
     Alarm_Msg.state  = 0x80;
     strcpy(Alarm_Msg.alarm_tag,tab);
     sprintf(Alarm_Msg.msg,"%s (%s)",str,hostname);
     build_alarm(&Alarm_Msg,0);
     Audio.audio_no=2;
     audio_alarm(&Audio);
}

Find_Relay_GRP(addr)
unsigned char addr;
{
int i,j;

   for(i=0;i<MaxGRPNum;i++) pIECDEF[addr]->GROUP[i] = 0;

/* 不同型号保护有不同的 cpu */
   switch (pIECDEF[addr]->IODef.CONNECTTYPE)
   {
/*
      case mLFP901A:
      case mLFP902A:
      case mLFP951A:
      case mRCS915C:
      case mRCS915D:
      case mRCS915E:
      case mRCS974A:
           pIECDEF[addr]->GROUP[1] = pIECDEF[addr]->GROUP[2] = pIECDEF[addr]->GROUP[3] = 1;
           break;
      case mRCS978C:
           pIECDEF[addr]->GROUP[1] = pIECDEF[addr]->GROUP[2] = pIECDEF[addr]->GROUP[3] = pIECDEF[addr]->GROUP[4] = 1;
           pIECDEF[addr]->GROUP[5] = pIECDEF[addr]->GROUP[6] = pIECDEF[addr]->GROUP[8] = pIECDEF[addr]->GROUP[9] = 1;
           break;
      case mLFP921A:
      case mLFP922:
      case mRCS9612A:
      case mRCS900:
           pIECDEF[addr]->GROUP[1] = pIECDEF[addr]->GROUP[2] = pIECDEF[addr]->GROUP[3] = 1;
           break;
*/
      case mLFP901A:
      case mLFP902A:
      case mLFP951A:
      case mRCS915C:
      case mRCS915D:
      case mRCS915E:
      case mRCS974A:
      case mRCS978C:
      case mLFP921A:
      case mLFP922:
      case mRCS9612A:
      case mRCS900:
           C_GC_NA_B4(addr);
           TxDriver(SendDef.Buf,SendDef.SendSize);
           if (RxDrvCheckProc(addr) > 0) C_GC_NA_B4_Proc();
           pIECDEF[addr]->PAD1 = 0;
           break;
      case mBP2A:
      case mBP2B:
           pIECDEF[addr]->GROUP[1] = pIECDEF[addr]->GROUP[2] = pIECDEF[addr]->GROUP[3] = 1;
           pIECDEF[addr]->PAD1 = 1;
           break;
      case mMCD:
           pIECDEF[addr]->GROUP[2] = 1;
           pIECDEF[addr]->PAD1 = 1;
           break;
      case mPSL602:
           pIECDEF[addr]->GROUP[4] = 1;
           pIECDEF[addr]->PAD1 = 1;
           break;
      case mWMZ41A:
           pIECDEF[addr]->GROUP[1] = 1;
           pIECDEF[addr]->PAD1 = 1;
           break;
      default:
          printf("LINKADDR = %d type not defined! \n",pIECDEF[addr]->IODef.OCCNO);
          break;
   }
}

C_RFB_NA_3(addr)  /* Reset Frame Count Bit */
unsigned char addr;
{

   pIECDEF[addr]->FCB = 0;
   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_SYN;
   SendDef.Buf[1]   = 0x40 |C_RFB_NA;
   SendDef.Buf[2]   = pIECDEF[addr]->IODef.OCCNO;
   SendDef.Buf[3]   = sum( &(SendDef.Buf[1]),2 );
   SendDef.Buf[4]   = LPCI_ETX;
   SendDef.SendSize = 5;
}

C_RCU_NA_3(addr)  /* Reset Commu Unit */
unsigned char addr;
{

   pIECDEF[addr]->FCB = 0;
   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_SYN;
   SendDef.Buf[1]   = 0x40 | C_RCU_NA;
   SendDef.Buf[2]   = pIECDEF[addr]->IODef.OCCNO;
   SendDef.Buf[3]   = sum( &(SendDef.Buf[1]),2 );
   SendDef.Buf[4]   = LPCI_ETX;
   SendDef.SendSize = 5;

}

C_RLK_NA_3(addr)  /* Request Link Status */
unsigned char addr;
{

   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_SYN;
   SendDef.Buf[1]   = 0x40 | C_RLK_NA;
   SendDef.Buf[2]   = pIECDEF[addr]->IODef.OCCNO;
   SendDef.Buf[3]   = sum( &(SendDef.Buf[1]),2 );
   SendDef.Buf[4]   = LPCI_ETX;
   SendDef.SendSize = 5;

}

C_PL1_NA_3(addr)  /* Request P1 Data */
unsigned char addr;
{

   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_SYN;
   SendDef.Buf[1]   = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_PL1_NA;
   SendDef.Buf[2]   = pIECDEF[addr]->IODef.OCCNO;
   SendDef.Buf[3]   = sum( &(SendDef.Buf[1]),2 );
   SendDef.Buf[4]   = LPCI_ETX;
   SendDef.SendSize = 5;

}

C_PL2_NA_3(addr)  /* Request P2 Data */
unsigned char addr;
{

   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_SYN;
   SendDef.Buf[1]   = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_PL2_NA;
   SendDef.Buf[2]   = pIECDEF[addr]->IODef.OCCNO;
   SendDef.Buf[3]   = sum( &(SendDef.Buf[1]),2 );
   SendDef.Buf[4]   = LPCI_ETX;
   SendDef.SendSize = 5;

}

C_IGI_NA_3(addr)  /* General Interrogation */
unsigned char addr;
{

   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_STX;
   SendDef.Buf[1]   = 9;
   SendDef.Buf[2]   = 9;
   SendDef.Buf[3]   = LPCI_STX;
   SendDef.Buf[4]   = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_SND_AK;
   SendDef.Buf[5]   = pIECDEF[addr]->IODef.OCCNO;
   SendDef.Buf[6]   = C_IGI_NA;
   SendDef.Buf[7]   = 0x81;
   SendDef.Buf[8]   = COT_IGI;
   SendDef.Buf[9]   = pIECDEF[addr]->IODef.OCCNO;

   SendDef.Buf[10]  = FUN_GLB;
   SendDef.Buf[11]  = 0x00;
   SendDef.Buf[12]  = pIECDEF[addr]->SCN++;

   SendDef.Buf[13]  = sum( &(SendDef.Buf[4]),SendDef.Buf[1] );
   SendDef.Buf[14]  = LPCI_ETX;
   SendDef.SendSize = 15;

}

C_SYN_TA_3(addr)  /* Clock Synchronization */
unsigned char addr;
{
struct timeb CurrentTime;
struct tm *pTime;
int ms;

   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_STX;
   SendDef.Buf[1]   = 15;
   SendDef.Buf[2]   = 15;
   SendDef.Buf[3]   = LPCI_STX;
   SendDef.Buf[4]   = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_SYN_NK;
   SendDef.Buf[5]   = 0xff;
   SendDef.Buf[6]   = C_SYN_TA;
   SendDef.Buf[7]   = 0x81;
   SendDef.Buf[8]   = COT_SYN;
   SendDef.Buf[9]   = 0xff;

   SendDef.Buf[10]  = FUN_GLB;
   SendDef.Buf[11]  = 0x00;

   ftime(&CurrentTime);
   pTime=localtime(&CurrentTime.time);
   ms=pTime->tm_sec*60+CurrentTime.millitm;

   SendDef.Buf[12]  = ms & 0xff;
   SendDef.Buf[13]  = ms >> 8;
   SendDef.Buf[14]  = pTime->tm_min;
   SendDef.Buf[15]  = pTime->tm_hour;
   SendDef.Buf[16]  = (pTime->tm_wday<<5) | pTime->tm_mday;
   SendDef.Buf[17]  = pTime->tm_mon+1;
   SendDef.Buf[18]  = pTime->tm_year % 100;

   SendDef.Buf[19]  = sum( &(SendDef.Buf[4]),SendDef.Buf[1] );
   SendDef.Buf[20]  = LPCI_ETX;
   SendDef.SendSize = 21;

}

C_GC_NA_B1(addr)  /* General */
unsigned char addr;
{

   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_STX;
   SendDef.Buf[1]   = 10;
   SendDef.Buf[2]   = 10;
   SendDef.Buf[3]   = LPCI_STX;
   SendDef.Buf[4]   = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_SND_AK;
   SendDef.Buf[5]   = pIECDEF[addr]->IODef.OCCNO;
   SendDef.Buf[6]   = C_GC_NA;
   SendDef.Buf[7]   = 0x81;
   SendDef.Buf[8]   = COT_GRD;
   SendDef.Buf[9]   = pIECDEF[addr]->IODef.OCCNO;

   SendDef.Buf[10]  = FUN_GEN;
   SendDef.Buf[11]  = 240;
   SendDef.Buf[12]  = 0;
   SendDef.Buf[13]  = 0;

   SendDef.Buf[14]  = sum( &(SendDef.Buf[4]),SendDef.Buf[1] );
   SendDef.Buf[15]  = LPCI_ETX;
   SendDef.SendSize = 16;

}

C_GC_NA_B3(addr,grp)  /* General */
unsigned char addr;
int grp;
{

   memset(SendDef.Buf,0,MaxSendBuf);

   SendDef.Buf[0]   = LPCI_STX;
   SendDef.Buf[1]   = 13;
   SendDef.Buf[2]   = 13;
   SendDef.Buf[3]   = LPCI_STX;
   SendDef.Buf[4]   = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_SND_AK;
   SendDef.Buf[5]   = pIECDEF[addr]->IODef.OCCNO;
   SendDef.Buf[6]   = C_GC_NA;
   SendDef.Buf[7]   = 0x81;
   SendDef.Buf[8]   = COT_GRD;
   SendDef.Buf[9]   = pIECDEF[addr]->IODef.OCCNO;

   SendDef.Buf[10]  = FUN_GEN;
   SendDef.Buf[11]  = 241;
   SendDef.Buf[12]  = 0;

⌨️ 快捷键说明

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