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

📄 104lib.c

📁 IEC104程序元源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
}void rAssociateAck(){    int           i,j,k,len;    unsigned char buf[MAX_DATA_LEN],*ptr;    memset( buf,0,MAX_DATA_LEN );    buf[0] = 0x68;    buf[1] = 0x04;    buf[2] = 0x0b;    buf[3] = 0x00;    buf[4] = 0x00;    buf[5] = 0x00;    pShmSocket.send_len = 6;    memcpy( pShmSocket.send_data,buf,6 );    send_msg();}void rTestAck(){    int           i,j,k,len;    unsigned char buf[MAX_DATA_LEN],*ptr;    memset( buf,0,MAX_DATA_LEN );    buf[0] = 0x68;    buf[1] = 0x04;    buf[2] = 0x83;    buf[3] = 0x00;    buf[4] = 0x00;    buf[5] = 0x00;    pShmSocket.send_len = 6;    memcpy( pShmSocket.send_data,buf,6 );    send_msg();}void rTestAct(){    int           i,j,k,len;    unsigned char buf[MAX_DATA_LEN],*ptr;    memset( buf,0,MAX_DATA_LEN );    buf[0] = 0x68;    buf[1] = 0x04;    buf[2] = 0x43;    buf[3] = 0x00;    buf[4] = 0x00;    buf[5] = 0x00;    pShmSocket.send_len = 6;    memcpy( pShmSocket.send_data,buf,6 );    send_msg();}void rAbort(){    int           i,j,k,len;    unsigned char buf[MAX_DATA_LEN],*ptr;    memset( buf,0,MAX_DATA_LEN );    buf[0] = 0x68;    buf[1] = 0x04;    buf[2] = 0x13;    buf[3] = 0x00;    buf[4] = 0x00;    buf[5] = 0x00;    pShmSocket.send_len = 6;    memcpy( pShmSocket.send_data,buf,6 );    send_msg();}void refresh_buf(){   int i,j,k,sp_num,dp_num;   float fvalue;   struct tm *ptm;   long tmp;   for(i=0;i<AIN_NUM_DD;i++){       if(AinList[i].high-AinList[i].low<0.1)           fvalue=pAin[i].value/SRC_SCALE*DES_SCALE;       else{           if(pAin[i].value>AinList[i].high)fvalue=DES_SCALE;           else if(pAin[i].value<AinList[i].low){             if(AinList[i].low>0.1||AinList[i].low<-0.1) fvalue=0.0;             else if(pAin[i].value<-1.0*AinList[i].high)fvalue=-1.0*DES_SCALE;             else fvalue=pAin[i].value/(AinList[i].high-AinList[i].low)*DES_SCALE;           }           else fvalue=pAin[i].value/(AinList[i].high-AinList[i].low)*DES_SCALE;       }       if(AinList[i].value - fvalue >5.0*DES_SCALE/SRC_SCALE||fvalue-AinList[i].value>5.0*DES_SCALE/SRC_SCALE){             AinList[i].com=1;/*             printf("fvalue=%f\n",fvalue);*/       }       AinList[i].value=fvalue;   }   sp_num=0;dp_num=0;   for(i=0;i<DIN_NUM_DD;i++){        if(DinList[i].value!=pDin[i].value)DinList[i].cos=1;        DinList[i].value=pDin[i].value;        if(DinList[i].dp_flag){             if(pDin[i].value==2&&DinList[i].cos){               tmp = time(NULL);               ptm = (struct tm *)localtime(&tmp);               pDPSoe[dp_soe_num].addr  = dp_num+1;               pDPSoe[dp_soe_num].hour  = ptm->tm_hour;               pDPSoe[dp_soe_num].minute= ptm->tm_min;               pDPSoe[dp_soe_num].second= ptm->tm_sec;               pDPSoe[dp_soe_num].ms    = 0;               pDPSoe[dp_soe_num].state = 0;               dp_soe_num++;             }             pDPDin[dp_num].cos=DinList[i].cos;             pDPDin[dp_num].value=DinList[i].value+1;             dp_num++;        }        else {             pSPDin[sp_num].cos=DinList[i].cos;             pSPDin[sp_num].value=DinList[i].value;             sp_num++;        }        DinList[i].cos=0;   }   for(i=0;i<PIN_NUM_DD;i++){       if(PinList[i].value-pPin[i].value>0.001||pPin[i].value-PinList[i].value>0.001)PinList[i].com=1;           PinList[i].value=pPin[i].value;   }   for(i=0;i<TAP_NUM_DD;i++){       if(TapList[i].value-pTap[i].value>0.001||pTap[i].value-TapList[i].value>0.001)TapList[i].com=1;           TapList[i].value=pTap[i].value;   }   for(i=0;i<BCD_NUM_DD;i++){       if(BcdList[i].value-pBcd[i].value>0.001||pBcd[i].value-BcdList[i].value>0.001)BcdList[i].com=1;           BcdList[i].value=pBcd[i].value;   }      if((pRdbDd->oflag==1)||( soe_rptr != pRdbDd->wptr) ){/*printf("soe_process!\n");*/         k = soe_rptr;        do{            if(pRdbDd->pSOE[k].addr<=SOE_NUM_DD&&pRdbDd->pSOE[k].addr>0){              if(SoeList[pRdbDd->pSOE[k].addr-1].dp_flag){                 if(dp_soe_num<MaxSoeNum){                    pDPSoe[dp_soe_num].addr=SoeList[pRdbDd->pSOE[k].addr-1].addr;                    pDPSoe[dp_soe_num].hour=pRdbDd->pSOE[k].hour;                    pDPSoe[dp_soe_num].minute=pRdbDd->pSOE[k].minute;                    pDPSoe[dp_soe_num].second=pRdbDd->pSOE[k].second;                    pDPSoe[dp_soe_num].ms=pRdbDd->pSOE[k].ms;                    pDPSoe[dp_soe_num].state=pRdbDd->pSOE[k].state+1;                    dp_soe_num++;                  }              }else {                 if(sp_soe_num<MaxSoeNum){                    pSPSoe[sp_soe_num].addr=SoeList[pRdbDd->pSOE[k].addr-1].addr;                    pSPSoe[sp_soe_num].hour=pRdbDd->pSOE[k].hour;                    pSPSoe[sp_soe_num].minute=pRdbDd->pSOE[k].minute;                    pSPSoe[sp_soe_num].second=pRdbDd->pSOE[k].second;                    pSPSoe[sp_soe_num].ms=pRdbDd->pSOE[k].ms;                    pSPSoe[sp_soe_num].state=pRdbDd->pSOE[k].state;                    sp_soe_num++;                 }              }            }            k = ( k + 1 ) % MaxSoeNum;        }while( k != pRdbDd->wptr );        soe_rptr = k;        pRdbDd->rptr=k;        pRdbDd->oflag= 0;      }}void M_SP_NA_Proc(){   int            i,j,k,count,i_val;   unsigned char data_buf[MAX_MSG_LEN],*ptr;   int max_num,size,cos_flag;      count=0;      cos_flag=0;      size=4;      ptr=data_buf;      if(!ic_flag){        for( i=0;i<SP_NUM_DD;i++ ){           if( pSPDin[i].cos ){              ptr[count*size]   = (DIN_START_NO+i) &0xff;              ptr[count*size+1] = (((DIN_START_NO+i)%1024)>>8) &0xff;              ptr[count*size+2] = ((DIN_START_NO+i)/1024) &0xff;              ptr[count*size+3] = pSPDin[i].value & 0x01;              count++;              pSPDin[i].cos = 0;              cos_flag=1;              cot=3;           }           if( count * size >= MAX_MSG_LEN ) break;        }      }      if( ((NowTime.time - DinTime.time > DinTimeOver)||ic_flag) && DIN_NUM_DD&&!cos_flag ){         size=1;         if(ic_flag)cot=20;         else cot=2;         for( i=0;i<SP_NUM_DD;i++ ){            ptr[count*size] = pSPDin[i].value & 0x01;            count++;         }         ftime( &LastTime );         ftime( &DinTime );      }      if ( count > 0 ){         i=0;         j=0;         max_num=(MAX_APDU_LEN-15)/size;         while ( count > max_num ){            if(cos_flag)              M_PrepCmd(M_SP_NA,0,0, &(data_buf[i]),max_num,size );            else              M_PrepCmd(M_SP_NA,1,DIN_START_NO+j*max_num, &(data_buf[i]),max_num,size);            i = i + max_num*size;            count = count - max_num;            j++;         }         if(cos_flag)            M_PrepCmd(M_SP_NA,0,0, &(data_buf[i]),count,size);         else            M_PrepCmd(M_SP_NA,1,DIN_START_NO+j*max_num,&(data_buf[i]),count,size);      }}void M_DP_NA_Proc(){   int            i,j,k,count,i_val;   unsigned char data_buf[MAX_MSG_LEN],*ptr;   int max_num,size,cos_flag;      count=0;      cos_flag=0;      size=4;      ptr=data_buf;      if(!ic_flag){        for( i=0;i<DP_NUM_DD;i++ ){           if( pDPDin[i].cos ){              ptr[count*size]   = (DIN_START_NO+i) &0xff;              ptr[count*size+1] = ((DIN_START_NO+i)>>8) &0xff;              ptr[count*size+2] = ((DIN_START_NO+i)>>16) &0xff;              ptr[count*size+3] = pDPDin[i].value & 0x03 ;              count++;              pDPDin[i].cos = 0;              cos_flag=1;              cot=3;           }           if( count * size >= MAX_MSG_LEN ) break;        }      }      if( ((NowTime.time - DPTime.time > DinTimeOver)||ic_flag) && DIN_NUM_DD&&!cos_flag ){         size=1;         if(ic_flag)cot=20;         else cot=2;         for( i=0;i<DP_NUM_DD;i++ ){            ptr[count*size] = pDPDin[i].value & 0x03;            count++;         }         ftime( &LastTime );         ftime( &DPTime );      }      if ( count > 0 ){         i=0;         j=0;         max_num=(MAX_APDU_LEN-15)/size;         while ( count > max_num ){            if(cos_flag)              M_PrepCmd(M_DP_NA,0,0, &(data_buf[i]),max_num,size );            else              M_PrepCmd(M_DP_NA,1,DIN_START_NO+j*max_num, &(data_buf[i]),max_num,size);            i = i + max_num*size;            count = count - max_num;            j++;         }         if(cos_flag)            M_PrepCmd(M_DP_NA,0,0, &(data_buf[i]),count,size);         else            M_PrepCmd(M_DP_NA,1,DIN_START_NO+j*max_num,&(data_buf[i]),count,size);      }}void M_ST_NA_Proc(){   int            i,j,k,count,i_val;   unsigned char data_buf[MAX_MSG_LEN],*ptr;   int  max_num,size,com_flag;      count=0;      com_flag=0;      size=5;      ptr=data_buf;      if(!ic_flag){        for( i=0;i<TAP_NUM_DD;i++ ){           if( TapList[i].com ){              ptr[count*size]   = (TAP_START_NO+i) & 0xff;              ptr[count*size+1] = ((TAP_START_NO+i)>>8)&0xff;              ptr[count*size+2] = ((TAP_START_NO+i)>>16)&0xff;              ptr[count*size+3] = 0x00;              ptr[count*size+4] = TapList[i].value & 0xff;              count++;              TapList[i].com = 0;              cot=3;              com_flag=1;           }           if( count * size >= MAX_MSG_LEN ) break;        }        if(!com_flag){        if( (NowTime.time - TapTime.time > TapTimeOver)&& TAP_NUM_DD ){            for( i=0;i<TAP_NUM_DD;i++ ){                  ptr[count*size]   = (TAP_START_NO+i) & 0xff;                  ptr[count*size+1] = ((TAP_START_NO+i)>>8)&0xff;                  ptr[count*size+2] = ((TAP_START_NO+i)>>16)&0xff;                  ptr[count*size+3] = 0x00;                  ptr[count*size+4] = TapList[i].value & 0xff;                  count++;                  cot=2;                  if( count * size >= MAX_MSG_LEN ) break;            }            ftime( &TapTime );         }        }      }else {        for( i=0;i<TAP_NUM_DD;i++ ){              ptr[count*size]   = (TAP_START_NO+i) & 0xff;              ptr[count*size+1] = ((TAP_START_NO+i)>>8)&0xff;              ptr[count*size+2] = ((TAP_START_NO+i)>>16)&0xff;              ptr[count*size+3] = 0x00;              ptr[count*size+4] = TapList[i].value & 0xff;              count++;              cot=20;              if( count * size >= MAX_MSG_LEN ) break;        }      }      if ( count > 0 ){         i=0;         max_num=(MAX_APDU_LEN-15)/size;         while ( count > max_num ){            M_PrepCmd(M_ST_NA,0,0, &(data_buf[i]),max_num,size);            i = i + max_num*4;            count = count - max_num;         }         M_PrepCmd(M_ST_NA,0,0, &(data_buf[i]),count,size);         return;      }}void M_ME_NA_Proc(){   int            i,j,k,count,i_val;   unsigned char data_buf[MAX_MSG_LEN],*ptr;   unsigned short s_val;   int  max_num,size;   int  com_flag;      count=0;      com_flag=0;      size=6;      ptr=data_buf;      if(!ic_flag){        if(NowTime.time - ComTime.time > 1){          for( i=0;i<AIN_NUM_DD;i++ ){             if( AinList[i].com ){                AinList[i].com = 0;                s_val = AinList[i].value;                ptr[count*size]   = (AIN_START_NO+i) &0xff;                ptr[count*size+1] = ((AIN_START_NO+i)>>8) &0xff;                ptr[count*size+2] = ((AIN_START_NO+i)>>16) &0xff;                if( MyByteOrder ) rReverse( (char *)&s_val,sizeof(short) );                memcpy( (char *)&(ptr[count*size+3]),(char *)&s_val,sizeof(short) );                ptr[count*size+5] = 0;                count++;                com_flag=1;                cot=3;             }             if( count * size >= MAX_MSG_LEN ) break;          }          ftime( &ComTime);        }      }      if( ((NowTime.time - AinTime.time > AinTimeOver)||ic_flag) && AIN_NUM_DD &&!com_flag ){            for( i=0;i<AIN_NUM_DD;i++ ){                if(ic_flag)cot=20;                else cot=2;                size=3;                s_val = AinList[i].value;                if( MyByteOrder ) rReverse( (char *)&s_val,sizeof(short) );                memcpy( (char *)&(ptr[count*size]),(char *)&s_val,sizeof(short) );                ptr[count*size+2] = 0;                count++;            }            ftime( &LastTime );            ftime( &AinTime );      }      if ( count > 0 ){         i=0;         j=0;         max_num=(MAX_APDU_LEN-15)/size;         while ( count > max_num ){            if(com_flag)               M_PrepCmd(M_ME_NA,0,0, &(data_buf[i]),max_num,size);            else               M_PrepCmd(M_ME_NA,1,AIN_START_NO+j*max_num, &(data_buf[i]),max_num,size);            i = i + max_num*size;            count = count - max_num;         }         if(com_flag)            M_PrepCmd(M_ME_NA,0,0, &(data_buf[i]),count,size);         else            M_PrepCmd(M_ME_NA,1,AIN_START_NO+j*max_num, &(data_buf[i]),count,size);      }}void M_IT_NA_Proc(){   int            i,j,k,count,i_val;   unsigned char data_buf[MAX_MSG_LEN],*ptr;   int  max_num;   int  size;   if( (NowTime.time - PinTime.time > PinTimeOver)||ic_flag){      ftime( &LastTime );      ftime( &PinTime );      count=0;      size = 8;      ptr=data_buf;      if(ic_flag)cot=20;      else cot=2;      for( i=0;i<PIN_NUM_DD;i++ ){            ptr[count*size]   = (PIN_START_NO+i) & 0xff;            ptr[count*size+1] = ((PIN_START_NO+i)>>8) & 0xff;            ptr[count*size+2] = ((PIN_START_NO+i)>>16) & 0xff;            i_val= PinList[i].value;            if( !MyByteOrder ){              ptr[count*size+3] =  i_val & 0xff;              ptr[count*size+4] = (i_val>>8) & 0xff;              ptr[count*size+5] = (i_val>>16) & 0xff;              ptr[count*size+6] = (i_val>>24) & 0xff;            }else {              ptr[count*size+6] =  i_val & 0xff;              ptr[count*size+5] = (i_val>>8) & 0xff;              ptr[count*size+4] = (i_val>>16) & 0xff;              ptr[count*size+3] = (i_val>>24) & 0xff;            }            ptr[count*size+7] = i;            count++;         if( count * size >= MAX_MSG_LEN ) break;      }      if ( count > 0 ){         i=0;         max_num=(MAX_APDU_LEN-15)/size;         while ( count > max_num ){            M_PrepCmd(M_IT_NA,0,0,&(data_buf[i]),max_num,size);            i = i + max_num*7;            count = count - max_num;         }         M_PrepCmd(M_IT_NA,0,0, &(data_buf[i]),count,size);         return;      }   }}void M_SP_TB_Proc(){   int            i,j,k,count,i_val,addr;   unsigned char data_buf[MAX_MSG_LEN],*ptr;   unsigned short us_ms;

⌨️ 快捷键说明

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