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

📄 rcs900.c

📁 在Unix平台下完成的电力系统广发使用的IEC103规约的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
           case 0xe2:
              for( i=0;i<sizeof(RCS_E2_Event)/sizeof(EVTALM);i++ )
                   if( RCS_E2_Event[i].index == infno ) break;
              strcpy(pStr,RCS_E2_Event[i].text);
              audio = RCS_E2_Event[i].audio;
              dpi = RCS_E2_Event[i].dpi;
              break;
           case 0xe3:
              for( i=0;i<sizeof(RCS_E3_Event)/sizeof(EVTALM);i++ )
                   if( RCS_E3_Event[i].index == infno ) break;
              strcpy(pStr,RCS_E3_Event[i].text);
              audio = RCS_E3_Event[i].audio;
              dpi = RCS_E3_Event[i].dpi;
              break;
           case 0xe6:
              for( i=0;i<sizeof(RCS_E6_Event)/sizeof(EVTALM);i++ )
                   if( RCS_E6_Event[i].index == infno ) break;
              strcpy(pStr,RCS_E6_Event[i].text);
              audio = RCS_E6_Event[i].audio;
              dpi = RCS_E6_Event[i].dpi;
              break;
           case 0xf2:
              for( i=0;i<sizeof(RCS_F2_Event)/sizeof(EVTALM);i++ )
                   if( RCS_F2_Event[i].index == infno ) break;
              strcpy(pStr,RCS_F2_Event[i].text);
              audio = RCS_F2_Event[i].audio;
              dpi = RCS_F2_Event[i].dpi;
              break;
           case 0xf8:
              for( i=0;i<sizeof(RCS_F8_Event)/sizeof(EVTALM);i++ )
                   if( RCS_F8_Event[i].index == infno ) break;
              strcpy(pStr,RCS_F8_Event[i].text);
              audio = RCS_F8_Event[i].audio;
              dpi = RCS_F8_Event[i].dpi;
              break;
           default:
              printf("functione no define!\n");
              break;
         }

         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(相对时间%dms)(%s)",
            ((char *)pSysDef+(int)pIECDEF[addr]->FB.pDescript),pStr,str,ms,hostname);
         build_alarm(&Alarm_Msg,0);
         if( audio !=0 ){
             Audio.audio_no =audio;
             audio_alarm(&Audio);
         }
         break;
      case M_GD_NTA:                           /* 通用分类标识 */
         sprintf(file1,"%s",((char *)pSysDef+(int)pIECDEF[addr]->FB.pTag));
         fp1 = fopen(file1,"a");
         if(RcvDef.Buf[8] == COT_GRD){           /* 对通用分类数据读命令的有效数据响应 */
             set_num = RcvDef.Buf[13]&0x3f;      /* 本cpu定值个数 NGD */
             p=(unsigned char*)&RcvDef.Buf[14];  /* p指向每一项定值的序号 */
             for(i=0;i<set_num;i++){
               /*
               len = len + 6 + width*num;
               if( RcvDef.Buf[2] < len )  {
                   printf("set_num=%d len=%d -- error!\n",set_num,RcvDef.Buf[2]);
                   return;
               }
               */
               cpu = *p;
               p = p+1;
               dot = *p;
               kod = *(p+1);
               p += 3;
               width=*p;
               p = p+1;
               num=*p;
               p += 1;
               if( (RcvDef.Buf[11] == 0xf0) && (cpu <= 12) && (cpu!=0) )  pIECDEF[addr]->GROUP[cpu] = 1;
               if( (RcvDef.Buf[13]&0x80) == 0 ) pIECDEF[addr]->PAD1 = 1;
               if( (RcvDef.Buf[11] == 0xf1) ){
                   if( kod == 0x0a ){
                      strncpy( str, (char*)(p) , width);
                      *(str + width) = '\0';
                      fprintf(fp1,"%d %d %s\n",cpu,dot,str);
                   }
                   else if(width == 4) {                /* 实际定值的长度(字节数) */
                      if(num != 1) printf("width=%d----num=%d\n",width,num);
                      switch(cpu){
                         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;
                         case 8:
                             pIECDEF[addr]->SET8[dot] = *((float *)p);
                         break;
                         case 9:
                             pIECDEF[addr]->SET9[dot] = *((float *)p);
                         break;
                         case 10:
                             pIECDEF[addr]->SET10[dot] = *((float *)p);
                         break;
                         case 11:
                             pIECDEF[addr]->SET11[dot] = *((float *)p);
                         break;
                         case 12:
                             pIECDEF[addr]->SET12[dot] = *((float *)p);
                         break;
                         default:
                             printf(" The cpu num is Err ! cpu = %d \n",cpu);
                         break;
                      }
                   }
                   else if(width == 2){
                      if(num != 1) printf("width=%d----num=%d\n",width,num);
                      tmpdata = (*p);
                      tmpdata = (*(p+1))*256 + tmpdata;
                      switch(cpu){
                         case 1:
                             pIECDEF[addr]->SET1[dot] = (float)tmpdata;
                         break;
                         case 2:
                             pIECDEF[addr]->SET2[dot] = (float)tmpdata;
                         break;
                         case 3:
                             pIECDEF[addr]->SET3[dot] = (float)tmpdata;
                         break;
                         case 4:
                             pIECDEF[addr]->SET4[dot] = (float)tmpdata;
                         break;
                         case 5:
                             pIECDEF[addr]->SET5[dot] = (float)tmpdata;
                         break;
                         case 6:
                             pIECDEF[addr]->SET6[dot] = (float)tmpdata;
                         break;
                         case 7:
                             pIECDEF[addr]->SET7[dot] = (float)tmpdata;
                         break;
                         case 8:
                             pIECDEF[addr]->SET8[dot] = (float)tmpdata;
                         break;
                         case 9:
                             pIECDEF[addr]->SET9[dot] = (float)tmpdata;
                         break;
                         case 10:
                             pIECDEF[addr]->SET10[dot] = (float)tmpdata;
                         break;
                         case 11:
                             pIECDEF[addr]->SET11[dot] = (float)tmpdata;
                         break;
                         case 12:
                             pIECDEF[addr]->SET12[dot] = (float)tmpdata;
                         break;
                         default:
                             printf(" The cpu num is Err ! cpu = %d \n",cpu);
                         break;
                      }
                   }
                   else if(width == 1){
                      if(num != 1) printf("width=%d----num=%d\n",width,num);
                      tmpdata = *p;
                      if( num == 2 )  tmpdata = (*(p+1))*256 + tmpdata;
                      switch(cpu){
                         case 1:
                             pIECDEF[addr]->SET1[dot] = (float)tmpdata;
                         break;
                         case 2:
                             pIECDEF[addr]->SET2[dot] = (float)tmpdata;
                         break;
                         case 3:
                             pIECDEF[addr]->SET3[dot] = (float)tmpdata;
                         break;
                         case 4:
                             pIECDEF[addr]->SET4[dot] = (float)tmpdata;
                         break;
                         case 5:
                             pIECDEF[addr]->SET5[dot] = (float)tmpdata;
                         break;
                         case 6:
                             pIECDEF[addr]->SET6[dot] = (float)tmpdata;
                         break;
                         case 7:
                             pIECDEF[addr]->SET7[dot] = (float)tmpdata;
                         break;
                         case 8:
                             pIECDEF[addr]->SET8[dot] = (float)tmpdata;
                         break;
                         case 9:
                             pIECDEF[addr]->SET9[dot] = (float)tmpdata;
                         break;
                         case 10:
                             pIECDEF[addr]->SET10[dot] = (float)tmpdata;
                         break;
                         case 11:
                             pIECDEF[addr]->SET11[dot] = (float)tmpdata;
                         break;
                         case 12:
                             pIECDEF[addr]->SET12[dot] = (float)tmpdata;
                         break;
                         default:
                             printf(" The cpu num is Err ! cpu = %d \n",cpu);
                         break;
                      }
                   }
                   else printf("SET[%d] datasize = %d is not define ! \n",dot+1,width);
               }
               p = p + width*num ;
             }
         }
         fclose(fp1);
         break;
      default:
         break;
      }

}

⌨️ 快捷键说明

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