base.c

来自「该程序实现N4F接口程序」· C语言 代码 · 共 558 行 · 第 1/2 页

C
558
字号
    case 2: int_stru->format=XX_XX;int_stru->value=(int)(value*1e2);break; 
    case 3: int_stru->format=X_XXX;int_stru->value=(int)(value*1e3);break;
    case 0:
    default:int_stru->format= XXXX;int_stru->value=(int)(value*1e0);break;
  }
  return;
}

DB_DATA dbr_data; /* for DBread_by_name() and DBread_by_id() */

DB_DATA *DBread_by_name( char *name )
{
 DMS_COMMON      common_aa;
 int             datatype;
 
#ifdef EMS_TEST //调试时,从ems_test.txt文件中读时实数据
 FILE     *test_fp;
 char     tmp1[100], tmp2[100]; 
 short    test_value, test_status;
 while((test_fp=fopen("c:\\users\\ems\\system\\n4f\\v3.0a\\src\\ems_test.txt","r"))==NULL)
 { printf("ems_test.txt not exist!\n"); sleep(3); }
 for(;;)
 { if(fscanf(test_fp,"%s %s %d %x",tmp1,tmp2,&test_value,&test_status )==EOF)
   { fclose(test_fp); return( NULL ); break;  } 
   else 
   { if(strcmp(tmp2,name)==0){ fclose(test_fp); break; } }    
 }  
 dbr_data.status = test_status;
 dbr_data.value  = test_value;
 return(&dbr_data);
#endif

// printf("name = %s\n",name);
 ReadEntryByName ( name, &datatype ,&common_aa);
 if ( common_aa.err_code == -1)
 { printf("\nn4f: DBread_by_name(%s): error!\n",name); 
    return(NULL);  
 }
 if((datatype == SOE_TYPE)|(datatype == POL_TYPE)|(datatype == SYSMSG_TYPE))
 { dbr_data.status = common_aa.entry.ind.variable.value.status;
   dbr_data.value  = 0;
 }
 else
 if((datatype == ANA_TYPE)|(datatype == NUM_TYPE)|(datatype == PARAM_TYPE))
 { dbr_data.status = common_aa.entry.anlg.variable.value.status;
   dbr_data.value  = common_aa.entry.anlg.variable.value.data;
 }
 else
 if((datatype != 0))
 { //dbr_data.status = common_aa.entry.imp.variable.rt_value.status;
   //dbr_data.value  = common_aa.entry.imp.variable.rt_value.data;
   //printf("+++ %d\n",common_aa.entry.imp.variable.rt_value.data);
 }
 else { return(NULL); }
 //Print_db_data(&dbr_data);
 return(&dbr_data);
}

DB_DATA *DBread_by_id(short point_id, char dev_id, char data_type)
{POINTER         pointer;
 DMS_COMMON      common_aa;
 pointer.dev_id    = dev_id; 
 pointer.data_type = data_type; 
 pointer.point_id  = point_id;
 ReadEntryByID (&pointer ,&common_aa);
 if ( common_aa.err_code == -1)
 { printf("\nIn DBread_by_id(): ReadEntryByID() error!\n"); 
   return(NULL);   
 }
 if((data_type == SOE_TYPE)|(data_type == POL_TYPE)|(data_type == SYSMSG_TYPE)) 
 { dbr_data.status = common_aa.entry.ind.variable.value.status;
   dbr_data.value  = 0;
 }
 else
 if((data_type == ANA_TYPE)|(data_type == NUM_TYPE)|(data_type == PARAM_TYPE))
 { dbr_data.status = common_aa.entry.anlg.variable.value.status;
   dbr_data.value  = common_aa.entry.anlg.variable.value.data;
 }
 else { return(NULL); }
// Print_db_data(&dbr_data);
 return(&dbr_data);
}


DB_ID dbr_id; 

DB_ID *DBread_id( char *name )
{
 DMS_COMMON      common_aa;
 int             datatype;

// printf("##########name =%s\n",name);
 ReadEntryByName(name,&datatype,&common_aa);
 if(common_aa.err_code == -1)
 { printf("\nReadEntryByName() error!\n"); return(NULL);  }
 dbr_id.dev_id    = common_aa.entry.ind.variable.ptr.dev_id;
 dbr_id.data_type = common_aa.entry.ind.variable.ptr.data_type;
 dbr_id.point_id  = common_aa.entry.ind.variable.ptr.point_id;
 return(&dbr_id);
}


int  DBreadbyname_id(name)
char *name;
{ 
  DMS_COMMON      common_aa;
  int             data_point_id, datatype;
  ReadEntryByName(name,&datatype);
  if(common_aa.err_code == -1)
  { printf("\nn4f: DBbreadbyname_id() error!\n"); return(-1); }
  data_point_id=common_aa.entry.ind.variable.ptr.point_id;
  return(data_point_id);
}

int DBreadbyname_stat(name)
char *name;
{ 
  DMS_COMMON      common_aa;
  int             datatype;
  ReadEntryByName(name,&datatype);
  if(common_aa.err_code == -1)
  { printf("\nn4f: DBbread() error!\n"); return(-1); }
  return( (common_aa.entry.ind.variable.value.status & 0x0c) );
}

//===================== talk =====================//

void Send_ACK( char type_id )
{ 
  memset( sendbuf, 0, BUFSIZE ); 
  sendbuf[0] = ( char )RTU_LOCAL_ADDR;
  sendbuf[1] = TYPE_06H | soe_flag | RAM_OK;
  sendbuf[2] = type_id;
  Write_out( 3 );
}
  

void Send_NCK( char type_id )
{ 
  memset( sendbuf, 0, BUFSIZE ); 
  sendbuf[0] = ( char )RTU_LOCAL_ADDR;
  sendbuf[1] = TYPE_15H | soe_flag | RAM_OK;
  sendbuf[2] = type_id;
  Write_out( 3 );
}  


void Send_POWER_ON( char type_id )
{ 
  memset( sendbuf, 0, BUFSIZE ); 
  sendbuf[0] = ( char )RTU_LOCAL_ADDR;
  sendbuf[1] = TYPE_16H | soe_flag | RAM_OK;
  sendbuf[2] = 0x01;
  sendbuf[3] = type_id;
  Write_out_crc16( 4 );
}  


/*------ 广播网调遥调命令 ------*/
void Brd_YT( int dev, int type, int pid, int value, int status )
{ LANH_PTR      head;
  ANLG_NORMAL   stru_ana;
  
  head.length = sizeof(ANLG_NORMAL);  
  head.dp_type = 1;
  head.dest_id = 0;
  head.src_id  = GetHost_Cmd();
  
  stru_ana.id.dev_id    = dev;
  stru_ana.id.data_type = type;
  stru_ana.id.point_id  = pid;
  stru_ana.value.data   = value;
  stru_ana.value.status = status;
  lan_out(&stru_ana,head);
  printf("!!!!N4F: LAN_OUT YT_cmd\n");
}

/*--------- 广播网调遥控命令 ---------*/
void Brd_YK( int dev, int type, int pid, int status )
{ LANH_PTR  head;
  struct 
  { char   dev_id;
    char   data_type;
    short  point_id;
    short  status;
    short  time_ms;
    char   time_second;
    char   time_minute;
  } st ,*status_alarm; 
  struct tm  *datetime;
  long       t;
  
  head.length=sizeof(*status_alarm); 
  head.dp_type = 1;
  head.dest_id = 0;
  head.src_id  = GetHost_Cmd();
  
  t=time(NULL); datetime=localtime(&t);
  st.dev_id    = dev;
  st.data_type = type;
  st.point_id  = pid;
  st.status    = status;
  st.time_ms=0;
  st.time_second=datetime->tm_sec;
  st.time_minute=datetime->tm_min;
  status_alarm=&st;     
  lan_out(status_alarm,head);
  printf("!!!!N4F: LAN_OUT YK_cmd\n");
}


/*--------- 发送机组调功命令 ---------*/
void P_adj_cmd( int dev, int type, int pid, int value, int status )
{ LANH_PTR  head;
  struct 
  { char   dev_id;
    char   data_type;
    short  point_id;
    short  status;
    short  data;
  } command; 
  
  head.length=sizeof(command); 
  head.dp_type = 1;
  head.dest_id = dev;
  head.src_id  = GetHost_Cmd();
  
  command.dev_id    = dev;
  command.data_type = C_APOWER;
  command.point_id  = pid;
  command.status    = status; 
  command.data      = value;
  lan_out( &command, head );
  printf("!!!!N4F: LAN_OUT adj_cmd\n");
}


void Cmd_record( char *c_name, char *l_name, int value )
{ FILE          *recfp;
  char 	    	recname[100], tmp_buf[100];
  struct tm 	*today;
  time_t		ltime;
  
  ltime=time(NULL);    today=localtime(&ltime);	
		
  memset(recname,0,100); strcpy(recname,CMDRECORD);	   
  sprintf( tmp_buf, "%04d-%02d-%02d",
	     (*today).tm_year+1900, (*today).tm_mon+1, (*today).tm_mday );		
  strcat(recname,tmp_buf); strcat(recname,".txt");
	
  recfp = fopen(recname,"a+");
  if(recfp==NULL){ printf("can't open(a+) the file %s!\n",recname); return; }  

  fprintf( recfp,"%04d-%02d-%02d %02d:%02d:%02d %25s(%s)   %d\n",
	             (*today).tm_year+1900, (*today).tm_mon+1, 				 
				 (*today).tm_mday,      (*today).tm_hour, 
				 (*today).tm_min,       (*today).tm_sec,
				 c_name,    l_name,    value                     );	
  fclose(recfp);

  // 删除历史记录文件 (保留一个月)
  if((*today).tm_mday==5 ||(*today).tm_mday==12)
  {
    //(*today).tm_mon=(*today).tm_mon-STIME;
    //ltime=mktime(today);
    ltime = ltime - (60*60)*24*31*1;
    today=localtime(&ltime);

    memset(recname,0,100);
    strcpy(recname,"del "); strcat(recname,CMDRECORD);   
    sprintf( (tmp_buf),"%04d-%02d*",
             (*today).tm_year+1900,	(*today).tm_mon+1 );		
    strcat(recname,tmp_buf);
    printf("recname= %s\n",recname);
    system(recname);   	
  }	
}

⌨️ 快捷键说明

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