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

📄 nsiec104server.c

📁 南瑞的IEC104规约实现的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
          NsIec104Struct.GroupSendLength[GroupIndex]=Index;
          /*
          if((NsIec104Struct.SendLength=send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.GroupSendBuffer[GroupIndex][0],NsIec104Struct.GroupSendLength,0x0))<0)
          {
	               perror ("Client FirstWrite Error");
          }
           */
          GroupIndex++;
          NsIec104Struct.NeedSendNumber++;

    }
    /* Send Pulse End Packet */
    Index=0;
    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=0x68;
    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=0x0e;

    RealNumber=(NsIec104Struct.SendMeNumber<<1);
    P=(unsigned char *)&RealNumber;
    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[0];              /*     send number       */
    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[1];
    NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;


    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.ReceiveHimNumber[0];              /*     receive number    */
    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.ReceiveHimNumber[1];

    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=101;
    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=1;

    for(i=0;i< NS_IEC_104_REASONBYTE;i++)
        NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=10;
             
    for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
        NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.CommonAsduAddress[i];


    for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
        NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.InformationObject[i];

    NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.Qcc;
    NsIec104Struct.GroupSendLength[GroupIndex]=Index;
    /*
    if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.GroupSendBuffer[GroupIndex][0],NsIec104Struct.GroupSendLength,0x0)) < 0)
    {
	               perror ("Client Write Error");
    }
    */
/* mask 2003-01-24
    GroupIndex++;
    NsIec104Struct.NeedSendNumber++;
*/
}

static  void       NsIec104ProcessPulseData(void)
{


     switch(NsIec104Struct.PulseGroup)
     {
        case 1:
        case 2:
        case 3:
        case 4:
               NsIec104ProcessPulseAck();
               NsIec104ProcessPulseGroup();
               NsIec104ProcessPulseEnd();
               break;
        case 5:
               NsIec104ProcessPulseAll();
               break;
     }
}

static  void     NsIec104ProcessTime(void)
{

unsigned short   i,Index,RealNumber,Mmsecond;
unsigned char    *P,Year,Month,Day,Hour,Minute,Second;
struct tm        NowTime;

          /*  First Send  Confirm */
          for(i=0;i<7;i++)
          {
               NsIec104Struct.TimeSave[i]=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+i];
          /*     
                   printf("\n Time=%d",NsIec104Struct.TimeSave[i]);
            */   
          }
          Mmsecond=(NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION]
                    +256*NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+1])%1000; 

          Second=(NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION]
                    +256*NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+1])/1000; 
          Minute=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+2]&0x3f;
          Hour=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+3]&0x1f;
          Day=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+4]&0x1f;
          Month=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+5]&0x0f;
          Year=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+6]&0x7f;
/*
          if(NsIec104Struct.SetTimeFlag)
          {
              NowTime.tm_sec   = Second;
              NowTime.tm_min   = Minute;
              NowTime.tm_hour  = Hour;
              NowTime.tm_mday  = Day;
              NowTime.tm_mon   = Month; 
              NowTime.tm_year  = Year + 2000; 
              setvxTime(&NowTime);
          }
*/
          /*
              printf("\n Year=%d Month=%d Day=%d Hour=%d Min=%d Sec=%d Msec=%d",
                         Year,Month,Day,Hour,Minute,Second,Mmsecond);
           */
          Index=0;
          NsIec104Struct.SendBuffer[Index++]=0x68;
          NsIec104Struct.SendBuffer[Index++]=0x0e;

          RealNumber=(NsIec104Struct.SendMeNumber<<1);
          P=(unsigned char *)&RealNumber;
          NsIec104Struct.SendBuffer[Index++]=P[0];              /*     send number       */
          NsIec104Struct.SendBuffer[Index++]=P[1];
          NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;



          NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[0];              /*     receive number    */
          NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[1];


          NsIec104Struct.SendBuffer[Index++]=103;
          NsIec104Struct.SendBuffer[Index++]=1;

          for(i=0;i< NS_IEC_104_REASONBYTE;i++)
               NsIec104Struct.SendBuffer[Index++]=0x07;
             
          for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
             NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];


          for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
             NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.InformationObject[i];

          for(i=0;i<7;i++)
              NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.TimeSave[i];

          NsIec104Struct.SendBuffer[1]=Index-2;
          if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0))<0)
          {
	               perror ("Client Write Error");
          }
}






static void     NsIec104Interrogation(void)
{


     switch(NsIec104Struct.AsduQualifier)
     {
         case 20:   /*  All Interrogation */
                  NsIec104InterrogationAll();
                  break;
        
         default:
                  NsIec104InterrogationGroup();
                  break;
     }

}

static void     NsIec104InterrogationGroup(void)
{
 unsigned  char  WhichGroup;


  if(NsIec104Struct.AsduQualifier>=NS_IEC104_GROUP_BEGIN&&NsIec104Struct.AsduQualifier<=NS_IEC104_GROUP_END)
  {
     WhichGroup=NsIec104Struct.ReceiveBuffer[NS_IEC_104_GROUP_BYTE];
     WhichGroup-=21;
     switch(WhichGroup)
     {

         case 0:
         case 1:
         case 2:
         case 3:
         case 4:
         case 5:
         case 6:
         case 7:
                 NsIec104ProcessYxGroup(WhichGroup);
                 break;
         case 8:
         case 9:
         case 10:
         case 11:
                 NsIec104ProcessYcGroup(WhichGroup);
                 break;
         case 12:             /*  location information  */
                 NsIec104DefaultGroup(WhichGroup);
                 break;
         case 13:             /*  BCD Information  */
                 NsIec104DefaultGroup(WhichGroup);
                 break;
         case 14:             /*  cell state */
                 NsIec104DefaultGroup(WhichGroup);
                 break;
         case 15:             /*  backup use */
                 NsIec104DefaultGroup(WhichGroup);
                 break;
         default:
                 NsIec104DefaultGroup(WhichGroup);
                 break;
     }

  }

}

static void    NsIec104DefaultGroup(unsigned char Group)
{
unsigned short   General,Index;
unsigned char    *P;
unsigned short    i,j,RealNumber;


          /*  First Send  Confirm */
          Index=0;
          NsIec104Struct.SendBuffer[Index++]=0x68;
          NsIec104Struct.SendBuffer[Index++]=0x0e;

          RealNumber=(NsIec104Struct.SendMeNumber<<1);
          P=(unsigned char *)&RealNumber;
          NsIec104Struct.SendBuffer[Index++]=P[0];              /*     send number       */
          NsIec104Struct.SendBuffer[Index++]=P[1];
          NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;



          NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[0];              /*     receive number    */
          NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[1];


          NsIec104Struct.SendBuffer[Index++]=100;
          NsIec104Struct.SendBuffer[Index++]=1;

          for(i=0;i< NS_IEC_104_REASONBYTE;i++)
               NsIec104Struct.SendBuffer[Index++]=0x07;
             
          for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
             NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];


          for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
             NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.InformationObject[i];

          NsIec104Struct.SendBuffer[Index++]=21+Group;

          if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0))<0)
          {
	               perror ("Client Write Error");
          }

          taskDelay(6);
          Index=0;
          NsIec104Struct.SendBuffer[Index++]=0x68;
          NsIec104Struct.SendBuffer[Index++]=0x0e;

          RealNumber=(NsIec104Struct.SendMeNumber<<1);
          P=(unsigned char *)&RealNumber;
          NsIec104Struct.SendBuffer[Index++]=P[0];              /*     send number       */
          NsIec104Struct.SendBuffer[Index++]=P[1];
          NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;


          NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[0];              /*     receive number    */
          NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[1];

          NsIec104Struct.SendBuffer[Index++]=100;
          NsIec104Struct.SendBuffer[Index++]=1;

          for(i=0;i< NS_IEC_104_REASONBYTE;i++)
               NsIec104Struct.SendBuffer[Index++]=10;
             
          for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
             NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];


          for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
             NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.InformationObject[i];

          NsIec104Struct.SendBuffer[Index++]=21+Group;

          if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0)) < 0)
          {
	               perror ("Client Write Error");
          }
}



static void    NsIec104ProcessYxGroup(unsigned char Group)
{
unsigned short     General,Index,YxLibIndex;
unsigned char      *P,start,YxBit,YxByte;
unsigned short     i,j,g,RealNumber;


          /*  Once Gonce need send 64 Yx  8 bytes   Group from 0 begin*/
          /*  First Send  Confirm */
          Index=0;
          NsIec104Struct.SendBuffer[Index++]=0x68;
          NsIec104Struct.SendBuffer[Index++]=0x0e;

          RealNumber=(NsIec104Struct.SendMeNumber<<1);
          P=(unsigned char *)&RealNumber;
          NsIec104Struct.SendBuffer[Index++]=P[0];                                    /*     send number       */
          NsIec104Struct.SendBuffer[Index++]=P[1];
          NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;



          NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[0];     /*     receive number    */
          NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[1];


          NsIec104Struct.SendBuffer[Index++]=100;                                    /*      transmit  type    */
          NsIec104Struct.SendBuffer[Index++]=1;                                      /*      vsq               */ 

          for(i=0;i< NS_IEC_104_REASONBYTE;i++)                                      /*      reason            */
               NsIec104Struct.SendBuffer[Index++]=0x07;
             
          for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
             NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];


          for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
             NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.InformationObject[i];

          NsIec104Struct.

⌨️ 快捷键说明

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