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

📄 104lib.c

📁 IEC104程序元源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/*   dlinit.c  4.0  04/15/99 *********************************************************************** *                          NARI   Software                            * *            Automatic Realtime Remote Interface software             * *           Copyright (c) 1998,1999 NARI P.R.C                        * *                        All Rights Reserved                          * *                                                                     * *                                                                     * * Name        : dlinit.c                                              * *                                                                     * * Programmer  : NARI                                                  * *                                                                     * * Description : the initialization of  net104 comm-process             * *                                                                     * ***********************************************************************/#include     "104def.h"void         READ_IODEF_FILE();void         exit_exe();void         write_log();void         server_act();void         display_on();void         alarm_handler();/*void         CREATE_SHM_SOCKET();void         ATTACH_SHM_SOCKET();*/void         recv_msg();void         send_msg();void         rAbort();void         rAssociateAck();void         rTestAck();void         rRecvAck();void         rTestAct();void         recv_process();void         send_process();void         refresh_buf();void         rRun();void         rCTRL_db();void         rYT_db();void         rSeqCmd();void         free_all();void         M_SP_NA_Proc();void         M_DP_NA_Proc();void         M_ST_NA_Proc();void         M_BO_NA_Proc();void         M_ME_NA_Proc();void         M_ME_NB_Proc();void         M_ME_NC_Proc();void         M_IT_NA_Proc();void         M_PS_NA_Proc();void         M_ME_ND_Proc();void         M_EI_NA_Proc();void         M_SP_TB_Proc();void         M_DP_TB_Proc();void         M_ST_TB_Proc();void         M_BO_TB_Proc();void         M_ME_TD_Proc();void         M_ME_TE_Proc();void         M_ME_TF_Proc();void         M_IT_TB_Proc();void         M_EP_TD_Proc();void         M_EP_TE_Proc();void         M_EP_TF_Proc();void         C_SC_NA_Proc();void         C_IC_NA_Proc();void         C_SE_NA_Proc();void         M_PrepCmd();extern int   MyByteOrder;extern int   findtype();extern char  *readline();extern char  *rGetSharedMemory();SOE_DEF      *SoeList;DIN_DEF      *DinList;AIN_DEF      *AinList;PIN_DEF      *PinList;BCD_DEF      *BcdList;TAP_DEF      *TapList;YKZ_DEF      *YkzList;YTJ_DEF      *YtjList;YSJ_DEF      *YsjList;SHM_SOCKET     pShmSocket;int            alarm_handler_rtn;struct timeb NowTime,LastTime,RecvTime;struct timeb DinTime,AinTime,PinTime,DPTime,TapTime;struct timeb CosTime,ComTime,SoeTime;int          RetryTime,CommuState,WaitRespond;int          send_num,recv_num,Retry=0;int          ain_send_flag,din_send_flag;int          yksellectno;int          send_grp_no;char         send_data_bak[1024];int          send_data_len;unsigned short   cot=2;int          ic_flag;struct {       char nodename[NAME_SIZE+1];       char tagname[NAME_SIZE+1];       char desp[NAME_SIZE+1];       int   addr;       int   ctrl_flag;       int   select_flag;       int   exec_flag;       long  select_time;}YkMsg;struct {       char nodename[NAME_SIZE+1];       char tagname[NAME_SIZE+1];       char desp[NAME_SIZE+1];       int   addr;       int   value;       int   select_flag;       int   exec_flag;       long  select_time;}YtMsg;extern char myprocessname[],mynodename[],hostname[];extern RDBDEF  *pRdbDd;extern DIN_BUF *pDin;extern AIN_BUF *pAin;extern AIN_BUF *pYca;extern AIN_BUF *pYcb;extern AIN_BUF *pYcc;extern PIN_BUF *pPin;extern BCD_BUF *pBcd;extern TAP_BUF *pTap;extern SOE_BUF *pSoe;extern YKZ_BUF *pYkz;extern YSJ_BUF *pYsj;extern YTJ_BUF *pYtj;extern int     DIN_NUM_DD,SOE_NUM_DD,PIN_NUM_DD,AIN_NUM_DD;extern int     TAP_NUM_DD,BCD_NUM_DD,YKZ_NUM_DD,YTJ_NUM_DD;extern int     YCA_NUM_DD,YCB_NUM_DD,YCC_NUM_DD,YSJ_NUM_DD;int    SP_NUM_DD;int    DP_NUM_DD;int    sp_soe_num;int    dp_soe_num;int    soe_rptr;DIN_BUF  *pSPDin;DIN_BUF  *pDPDin;SOE_BUF  pSPSoe[MaxSoeNum];SOE_BUF  pDPSoe[MaxSoeNum];void alarm_handler(){     alarm_handler_rtn=-1;}void exit_exe(){   msg_delete();   TerminateSharedMemory();   exit(0);}void server_act(lansock,display)int lansock,display;{   int  node_state;   int  i;   int  length;   int  code;   initdata_RDB1();   ATTACH_MAM_BUF();   initdata_RDB2(DD_NO);   READ_IODEF_FILE();   Retry = 0;   CommuState = 0;   WaitRespond = 0;   send_num = 0;   recv_num = 0;   DinTime.time = 0;   AinTime.time = 0;   PinTime.time = 0;   ftime( &RecvTime );   sp_soe_num=0;   dp_soe_num=0;   soe_rptr =  pRdbDd->rptr;   pShmSocket.lansock=lansock;   pShmSocket.display=display;   pShmSocket.sock_state = 1;   M_EI_NA_Proc();   while(pShmSocket.sock_state){      recv_process();      send_process();/*      node_state=get_redundant_flag(hostname);      if(node_state == 0){         pShmSocket.sock_state = 0;      }  */      ftime( &NowTime );      if( NowTime.time - RecvTime.time > WaitMesg ){          if(NowTime.time - RecvTime.time > WaitMesg+Retry){             rTestAct();             Retry++;          }          if(Retry>MaxRetry){               rAbort();               pShmSocket.sock_state = 0;          }      }else Retry=0;      ms_sleep(50);   }   shutdown(pShmSocket.lansock,2);   close(pShmSocket.lansock);   free_all();   exit(0);}void write_log(msg_log_data,alarm_table)char  msg_log_data[];char alarm_table[];{   alarm_msg Alarm_Msg;   struct tm *ptr;   time_t    Sclock;   Sclock=time((time_t *) NULL);   ptr=localtime(&Sclock);   Alarm_Msg.alarm=1;   Alarm_Msg.log=1;   Alarm_Msg.hour=ptr->tm_hour;   Alarm_Msg.minute=ptr->tm_min;   Alarm_Msg.second=ptr->tm_sec;   Alarm_Msg.ms=0;   Alarm_Msg.n=0;   Alarm_Msg.state=0x82;   strcpy(Alarm_Msg.alarm_tag,alarm_table);   strcpy(Alarm_Msg.msg,msg_log_data);   build_alarm(&Alarm_Msg,0);}void display_on( ptr,k,flag )unsigned char ptr[];int      k,flag;{   int i;   if( flag == 0 )      printf("r%02d-",DD_NO);   else      printf("s%02d-",DD_NO);   if(k==6){     if((ptr[2]&0x03)==0x01){            printf("RECV_NUM_ACK:");     }     else if((ptr[2]&0x03)==0x03){         switch(ptr[2]){           case 0x04|0x03: printf("STARTDT_ACT: ");break;           case 0x08|0x03: printf("STARTDT_ACK: ");break;           case 0x10|0x03: printf("STOPDT_ACT: "); break;           case 0x20|0x03: printf("STOPDT_ACK: "); break;           case 0x40|0x03: printf("TESTFP_ACT: "); break;           case 0x80|0x03: printf("TESTFP_ACK: "); break;           default:                  printf("???????: ");break;         }     }   }else{     switch(ptr[6])     {       case M_SP_NA:       printf("M_SP_NA: ");break;       case M_DP_NA:       printf("M_DP_NA: ");break;       case M_ST_NA:       printf("M_ST_NA: ");break;       case M_BO_NA:       printf("M_BO_NA: ");break;       case M_ME_NA:       printf("M_ME_NA: ");break;       case M_ME_NB:       printf("M_ME_NB: ");break;       case M_ME_NC:       printf("M_ME_NC: ");break;       case M_IT_NA:       printf("M_IT_NA: ");break;       case M_PS_NA:       printf("M_PS_NA: ");break;       case M_ME_ND:       printf("M_ME_ND: ");break;       case M_SP_TB:       printf("M_SP_TB: ");break;       case M_DP_TB:       printf("M_DP_TB: ");break;       case M_ST_TB:       printf("M_ST_TB: ");break;       case M_BO_TB:       printf("M_BO_TB: ");break;       case M_ME_TD:       printf("M_ME_TD: ");break;       case M_ME_TE:       printf("M_ME_TE: ");break;       case M_ME_TF:       printf("M_ME_TF: ");break;       case M_IT_TB:       printf("M_IT_TB: ");break;       case M_EP_TD:       printf("M_EP_TD: ");break;       case M_EP_TE:       printf("M_EP_TE: ");break;       case M_EP_TF:       printf("M_EP_TF: ");break;       case M_EI_NA:       printf("M_EI_NA: ");break;       case C_SC_NA:       printf("C_SC_NA: ");break;       case C_SE_NA:       printf("C_SE_NA: ");break;       case C_IC_NA:       printf("C_IC_NA: ");break;       default:            printf("???????: ");break;     }   }   for( i=0;i<k;i++ ){       printf("%2x ",ptr[i]);       if( (((i+1) % MaxListDsp)==0) && (i!=k-1) )          printf("\n      ");   }   printf("\n");}/*void CREATE_SHM_SOCKET(){  char *pshm;  int i;  i = sizeof(SHM_SOCKET);  pshm=rGetSharedMemory(0x671225,i);  if ( pshm == (char *)-1)  {     printf("Get sharedmemory failed\n");     return;  }  memset(pshm,0,i);  pShmSocket = (SHM_SOCKET *)pshm;  return;}*//*void ATTACH_SHM_SOCKET(){  char *pshm;  int i;  i = sizeof(SHM_SOCKET);  pshm=rGetSharedMemory(0x671225,i);  if ( pshm == (char *)-1)  {     printf("Get sharedmemory failed\n");     return;  }  pShmSocket = (SHM_SOCKET *)pshm;  return;}*/void free_all(){  free(DinList);  free(SoeList);  free(AinList);  free(PinList);  free(BcdList);  free(TapList);  free(YkzList);  free(YtjList);  free(YsjList);  free(pSPDin);  free(pDPDin);}void READ_IODEF_FILE(){FILE  *fp;char  strategy[20],filename[100],type[500],tmpstr[500],*no,*ptr;char  NodeName[50],TagPath[50],TagDesp[50];int   i,j,k,ret,num,value,TagNo,dp_flag,addr;float scale,deadband,b;int   action;int   dp_num=0,sp_num=0;  DinList = (DIN_DEF *)malloc( sizeof(DIN_DEF)*DIN_NUM_DD );  SoeList = (SOE_DEF *)malloc( sizeof(SOE_DEF)*SOE_NUM_DD );  AinList = (AIN_DEF *)malloc( sizeof(AIN_DEF)*AIN_NUM_DD );  PinList = (PIN_DEF *)malloc( sizeof(PIN_DEF)*PIN_NUM_DD );  BcdList = (BCD_DEF *)malloc( sizeof(BCD_DEF)*BCD_NUM_DD );  TapList = (TAP_DEF *)malloc( sizeof(TAP_DEF)*TAP_NUM_DD );  YkzList = (YKZ_DEF *)malloc( sizeof(YKZ_DEF)*YKZ_NUM_DD );  YtjList = (YTJ_DEF *)malloc( sizeof(YTJ_DEF)*YTJ_NUM_DD );  YsjList = (YSJ_DEF *)malloc( sizeof(YSJ_DEF)*YSJ_NUM_DD );  get_local_strategy(strategy);  sprintf(filename,"%s/%s/db/%s%d",PROJECT_PREFIX,strategy,IOFILE,DD_NO);  fp = fopen(filename,"r");  if (fp == NULL) {     printf("File %s not exist\n",filename);     fclose(fp);     exit(-1);  }  else {     no = readline(tmpstr,256,fp);     if ( no != NULL ){        ret = sscanf(tmpstr,"%s\n",type);        value = findtype(type);        if ( value == 0 ){           printf("%s datatype error(%s)\n",filename,type);           fclose(fp);           exit(-1);        }     }     else{        printf("no data in file %s\n",filename);        fclose(fp);        exit(-1);     }     while (no != NULL) {        i = 0;        switch ( value ) {           case COM_DEVICE :           case DEVICE_PARA :           case MAIN_BACKUP :              while( ( no=readline(tmpstr,256,fp) ) != NULL ){                 ret = sscanf(tmpstr,"%s\n",type);                 value = findtype(type);                 if( value != 0 ) break;              }              break;           case TYPE_DIN :              SP_NUM_DD=0;              DP_NUM_DD=0;              while( ( no=readline(tmpstr,256,fp) ) != NULL ){                 ret = sscanf(tmpstr,"%s\n",type);                 value = findtype(type);                 if( value == 0 ){                    ret = sscanf(tmpstr,"%s %s %d\n",NodeName,TagPath,&dp_flag);/*                    strcpy( DinList[i].nodename,NodeName );                    strcpy( DinList[i].tagname,TagPath );*/                    DinList[i].dp_flag=dp_flag;                    i++;                    if(!dp_flag)SP_NUM_DD++;                    else DP_NUM_DD++;                 }                 else{                     break;                 }              }              break;           case TYPE_AIN :              while( ( no=readline(tmpstr,256,fp) ) != NULL ){                 ret = sscanf(tmpstr,"%s\n",type);                 value = findtype(type);                 if( value == 0 ){                    ret = sscanf(tmpstr,"%s %s %f %f\n",NodeName,TagPath,&AinList[i].low,&AinList[i].high);                    i++;                 }                 else break;              }              break;           case TYPE_PIN :              while( ( no=readline(tmpstr,256,fp) ) != NULL ){                 ret = sscanf(tmpstr,"%s\n",type);                 value = findtype(type);                 if( value == 0 ){                    ret = sscanf(tmpstr,"%s %s\n",NodeName,TagPath);/*                    strcpy( PinList[i].nodename,NodeName );                    strcpy( PinList[i].tagname,TagPath );

⌨️ 快捷键说明

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