📄 104lib.c
字号:
/* 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 + -